{"version":3,"file":"outlet-hub-common-helper.mjs","sources":["../../../projects/outlet-hub-common-helper/src/lib/outlet-hub-common-helper.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/constants.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/utils/crypto-utils.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/app.config.token.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/services/user_services/tokenservice.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/services/user_services/authservice.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/services/db_services/appdbservices.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/auth-interceptor.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/auth-guard.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/utils/claimReq-utils.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/services/loadingservice.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/loading-interceptor.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/services/loadinglistservice.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/loading-list-interceptor.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/ui-helper.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/app-list/app-list.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/app-list/app-list.html","../../../projects/outlet-hub-common-helper/src/lib/shared/components/app-btn/app-btn.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/app-btn/app-btn.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/headerservice.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/services/barcode.service.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/app-barcode-resolver/app-barcode-resolver.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/app-barcode-resolver/app-barcode-resolver.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/sidebarservice.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/app-header/app-header.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/app-header/app-header.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/user_services/userservice.ts","../../../projects/outlet-hub-common-helper/src/lib/user/user.ts","../../../projects/outlet-hub-common-helper/src/lib/user/user.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/adminpanel_services/outletservice.ts","../../../projects/outlet-hub-common-helper/src/lib/user/selectzone/selectzone.ts","../../../projects/outlet-hub-common-helper/src/lib/user/selectzone/selectzone.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/user_services/auth-flow.service.ts","../../../projects/outlet-hub-common-helper/src/lib/user/login/login.ts","../../../projects/outlet-hub-common-helper/src/lib/user/login/login.html","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/layout/main-layout/main-layout.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/layout/main-layout/main-layout.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/adminpanel_services/manageuserservice.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/file-upload/file-upload.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/file-upload/file-upload.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/apptour/tour.service.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/services/apptour/user-tour.service.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/appuser/adduser/adduser.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/appuser/adduser/adduser.html","../../../projects/outlet-hub-common-helper/src/lib/shared/components/file-download/file-download.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/file-download/file-download.html","../../../projects/outlet-hub-common-helper/src/lib/shared/components/app-confirmation/app-confirmation.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/app-confirmation/app-confirmation.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/confirmation.service.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/appuser/userlist/userlist.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/appuser/userlist/userlist.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/adminpanel_services/userrightsservice.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/userrights/userrights.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/userrights/userrights.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/adminpanel_services/usermappingservice.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/usermapping/usermapping.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/usermapping/usermapping.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/adminpanel_services/profileservice.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/userprofile/userprofile.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/userprofile/userprofile.html","../../../projects/outlet-hub-common-helper/src/lib/shared/components/send-otp/send-otp.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/send-otp/send-otp.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/adminpanel_services/changepasswordservice.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/changepassword/changepassword.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/changepassword/changepassword.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/adminpanel_services/workspaceservice.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/location-piker/location-piker.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/location-piker/location-piker.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/apptour/workspace-tour.service.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/master/workspace/addworkspace/addworkspace.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/master/workspace/addworkspace/addworkspace.html","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/master/workspace/workspacelist/workspacelist.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/master/workspace/workspacelist/workspacelist.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/apptour/outlet-tour.service.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/master/outlet/addoutlet/addoutlet.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/master/outlet/addoutlet/addoutlet.html","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/master/outlet/outletlist/outletlist.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/master/outlet/outletlist/outletlist.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/adminpanel_services/subscriptionsservice.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/services/adminpanel_services/checkoutservice.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/app-checkout/app-checkout.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/app-checkout/app-checkout.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/adminpanel_services/licenceservice.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/services/apptour/subscription-tour.service.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/app-plan/app-plan.ts","../../../projects/outlet-hub-common-helper/src/lib/shared/components/app-plan/app-plan.html","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/subscriptions/addsubscriptions/addsubscriptions.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/subscriptions/addsubscriptions/addsubscriptions.html","../../../projects/outlet-hub-common-helper/src/lib/shared/services/printing/paymentinvoiceservice.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/subscriptions/subscriptionsloglist/subscriptionsloglist.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/subscriptions/subscriptionsloglist/subscriptionsloglist.html","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/subscriptions/subscriptionslist/subscriptionslist.ts","../../../projects/outlet-hub-common-helper/src/lib/adminpanel/manageuser/subscriptions/subscriptionslist/subscriptionslist.html","../../../projects/outlet-hub-common-helper/src/public-api.ts","../../../projects/outlet-hub-common-helper/src/outlet-hub-common-helper.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'lib-outlet-hub-common-helper',\r\n  imports: [],\r\n  template: `\r\n    <p>\r\n      outlet-hub-common-helper works!\r\n    </p>\r\n  `,\r\n  styles: ``,\r\n})\r\nexport class OutletHubCommonHelper {\r\n\r\n}\r\n","export const TOKEN_KEY = 'token';","import * as CryptoJS from 'crypto-js';\r\n\r\n\r\nexport class CryptoUtils {\r\n\r\n    public static generateOTP(length: number): string {\r\n        let otp = '';\r\n        for (let i = 0; i < length; i++) {\r\n            otp += Math.floor(Math.random() * 10).toString();\r\n        }\r\n        return otp;\r\n    }\r\n\r\n   public static computeSha256Hash(rawData: string): string {\r\n    // CryptoJS.SHA256 returns a WordArray, .toString() converts it to hex\r\n    return SHA256(rawData).toString();\r\n  }\r\n\r\n  public static generateSalt(length: number = 6): string {\r\n  const randomValues = new Uint32Array(length);\r\n  window.crypto.getRandomValues(randomValues);\r\n  \r\n  // Map each secure random value to a digit 0-9\r\n  return Array.from(randomValues, n => n % 10).join('');\r\n}\r\n\r\n// 1. Encrypt: Ab yahan 'cryptoSecret' ko as a parameter pass karein\r\n    public static encryptParams(params: { [key: string]: any }, cryptoSecret: string): string {\r\n        const jsonString = JSON.stringify(params);\r\n        const encrypted = CryptoJS.AES.encrypt(jsonString, cryptoSecret).toString();\r\n        return encodeURIComponent(encrypted); \r\n    }\r\n\r\n    // 2. Decrypt: Yahan bhi 'cryptoSecret' as a parameter aayega\r\n    public static decryptParams(encryptedData: string, cryptoSecret: string): { [key: string]: any } | null {\r\n        try {\r\n            const decoded = decodeURIComponent(encryptedData);\r\n            const bytes = CryptoJS.AES.decrypt(decoded, cryptoSecret);\r\n            const decryptedString = bytes.toString(CryptoJS.enc.Utf8);\r\n            return decryptedString ? JSON.parse(decryptedString) : null;\r\n        } catch (e) {\r\n            console.error(\"Decryption failed\", e);\r\n            return null;\r\n        }\r\n    }\r\n\r\n}\r\n\r\nfunction SHA256(rawData: string) {\r\n    return CryptoJS.SHA256(rawData);\r\n}\r\n\r\n","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * 1. Interface: यह बताता है कि हमारे configuration ऑब्जेक्ट \r\n * में कौन-कौन सी keys और किस टाइप का डेटा होगा।\r\n */\r\nexport interface MyAppConfig {\r\n  production: boolean;\r\n  apiBaseUrl: string;\r\n  ParentFolder: string;\r\n  ProfilePhoto: string;\r\n  ApplicationImage: string;\r\n  ApplicationImagethumbnail: string;\r\n  WorkspaceImage: string;\r\n  WorkspaceImagethumbnail: string;\r\n  OutletImage: string;\r\n  OutletImagethumbnail: string;\r\n  ForgetSMSTemplate: string;\r\n  OTPTemplate: string;\r\n  OTPMailSubject: string;\r\n  inventoryUrl: string;\r\n  cryptoSecret: string;\r\n  BaseUrl: string;\r\n}\r\n\r\n/**\r\n * 2. InjectionToken: यह एक Unique ID की तरह काम करता है।\r\n * Angular का DI (Dependency Injection) सिस्टम इसी ID को पहचानकर \r\n * सही environment डेटा (जो आपने app.config.ts में provide किया है) \r\n * component या service तक पहुँचाता है।\r\n */\r\nexport const MY_APP_CONFIG = new InjectionToken<MyAppConfig>('MyAppConfig');\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { TOKEN_KEY } from '../../constants';\r\nimport { CryptoUtils } from '../../utils/crypto-utils';\r\nimport { MY_APP_CONFIG, MyAppConfig } from '../../app.config.token';\r\n\r\nconst REFRESH_TOKEN_KEY = 'refresh_token';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class Tokenservice {\r\n  constructor(@Inject(MY_APP_CONFIG) private config: MyAppConfig) {}\r\n  // --- Token & Session Management ---\r\n    isLoggedIn(): boolean {\r\n      return !!this.getToken();\r\n    }\r\n  \r\n    saveToken(token: string): void {\r\n      localStorage.setItem(TOKEN_KEY, token);\r\n    }\r\n  \r\n    getToken(): string | null {\r\n      return localStorage.getItem(TOKEN_KEY);\r\n    }\r\n  \r\n    saveRefreshToken(refreshToken: string): void {\r\n      localStorage.setItem(REFRESH_TOKEN_KEY, refreshToken);\r\n    }\r\n\r\n    getRefreshToken(): string | null {\r\n      return localStorage.getItem(REFRESH_TOKEN_KEY);\r\n    }\r\n\r\n    deleteToken(): void {\r\n      localStorage.removeItem(TOKEN_KEY);\r\n      localStorage.removeItem(REFRESH_TOKEN_KEY);\r\n    }\r\n  \r\n    getClaims(): any {\r\n      const token = this.getToken();\r\n      if (!token) return null;\r\n      try {\r\n        return JSON.parse(window.atob(token.split('.')[1]));\r\n      } catch (e) {\r\n        console.error('Error decoding token claims', e);\r\n        return null;\r\n      }\r\n      \r\n    }\r\n  // 1. Email (ClaimTypes.Email)\r\n  getEmail(): string {\r\n    const claims = this.getClaims();\r\n    return claims?.email || \r\n           claims?.['http://schemas.xmlsoap.org'] || '';\r\n  }\r\n\r\n  // 2. UserID (ClaimTypes.NameIdentifier)\r\n  getUserId(): string {\r\n    const claims = this.getClaims();\r\n    return claims?.nameid || \r\n           claims?.['http://schemas.xmlsoap.org'] || '';\r\n  }\r\n\r\n  // 3. Role (ClaimTypes.Role)\r\n  getUserRole(): string {\r\n    const claims = this.getClaims();\r\n    return claims?.role || \r\n           claims?.['http://schemas.microsoft.com'] || '';\r\n  }\r\n\r\n  // 4. Name (ClaimTypes.Name)\r\n  getUserName(): string {\r\n    const claims = this.getClaims();\r\n    return claims?.unique_name || \r\n           claims?.['http://schemas.xmlsoap.org'] || '';\r\n  }\r\n\r\n  // 5. AppId / iid (ClaimTypes.Sid)\r\n   getAppId(): string {\r\n     const claims = this.getClaims();\r\n     return claims?.sid || \r\n            claims?.['http://schemas.xmlsoap.org'] || '';\r\n   }\r\n    getWorkspaceId(): string {\r\n    const claims = this.getClaims();\r\n    return claims?.deptid || \r\n           claims?.['http://schemas.xmlsoap.org'] || '';\r\n  }\r\n\r\n   getOutletId(): string {\r\n    const claims = this.getClaims();\r\n    return claims?.cid || \r\n           claims?.['http://schemas.xmlsoap.org'] || '';\r\n  }\r\n  \r\n  getParentId(): string {\r\n    const claims = this.getClaims();\r\n    return claims?.pid || \r\n           claims?.['http://schemas.xmlsoap.org'] || '';\r\n  }\r\n  getInstNo(): string {\r\n    const claims = this.getClaims();\r\n    return claims?.instno || \r\n           claims?.['http://schemas.xmlsoap.org'] || '';\r\n  }\r\n\r\ngetDecryptedParam(key: string): string | null {\r\n  // 1. URL se encrypted \"data\" parameter nikalien\r\n  const urlParams = new URLSearchParams(window.location.search);\r\n  const encryptedPayload = urlParams.get('data'); // URL mein ?data=... hona chahiye\r\n\r\n  if (encryptedPayload) {\r\n    // 2. Poore object ko decrypt karein\r\n    const params = CryptoUtils.decryptParams(encryptedPayload, this.config.cryptoSecret);\r\n\r\n    // 3. Agar mil jaye, toh mangi hui Key (e.g., 'token') return karein\r\n    return params ? params[key] : null;\r\n  }\r\n  return null;\r\n}\r\n\r\n  getInstanceId(): string {\r\n    return localStorage.getItem('persistent_device_id') || '';\r\n  }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Inject, Injectable, signal } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { CryptoUtils } from '../../utils/crypto-utils';\r\nimport { MY_APP_CONFIG, MyAppConfig } from '../../app.config.token';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class Authservice {\r\n  constructor(private http: HttpClient,@Inject(MY_APP_CONFIG) private config: MyAppConfig) { }\r\n \r\n  /**\r\n   * Maps FormBuilder values to the C# RegisterUser model\r\n   */\r\n  registerUser(formData: any): Observable<any> {\r\n    const registerUserpayload = {\r\n      username: formData.fullName,\r\n      EmailId: formData.email,\r\n       Password: formData.password,\r\n      PD_Reenterpwd: formData.confirmPassword,\r\n      // Use the verified OTP provided by the user via email\r\n        otp: formData.otp || \"356783\",\r\n    };\r\n     console.log(registerUserpayload);\r\n    return this.http.post(\r\n      `${this.config.apiBaseUrl}/Register/RegisterUser`, \r\n      registerUserpayload\r\n    );\r\n  }\r\n\r\n  checkUserExist(EmailId: string): Observable<any> {\r\nconst checkUserExistpayload = {    \r\n      username: \"adminji\",\r\n      EmailId: EmailId,\r\n      Password: \"Admin@1232\",\r\n      PD_Reenterpwd: \"Admin@1232\",\r\n      otp: \"356783\",\r\n      \r\n    };\r\n\r\n    return this.http.post(\r\n      `${this.config.apiBaseUrl}/Register/CheckUserExist`, \r\n      checkUserExistpayload\r\n    );\r\n  }\r\n\r\n  recoverPassword(email: string): Observable<any> {\r\n    const payload = {\r\n      EmailId: email\r\n    };\r\n    \r\n    return this.http.post(\r\n      `${this.config.apiBaseUrl}/RecoverPassword/GetRecoverPassword`, \r\n      payload\r\n    );\r\n  }\r\n\r\n  getApplicationType(): Observable<any> {\r\n    return this.http.get(\r\n      `${this.config.apiBaseUrl}/Register/GetApplicationType`\r\n    );\r\n  }\r\n\r\n  async signin(formData: any): Promise<Observable<any>> {\r\n    \r\n   const signinsalt = CryptoUtils.generateSalt(6);\r\n    const innerHash =  CryptoUtils.computeSha256Hash(formData.password);\r\n    const finalHash =  CryptoUtils.computeSha256Hash(signinsalt + innerHash);\r\n\r\nconst remoteid = await this.getLocalIP();\r\n  \r\n\r\nconst signinpayload = {    \r\n\r\n      UserName: formData.email,\r\n      Mail: \"test1234@gail.com\",\r\n      Password: finalHash,\r\n      UserID: signinsalt,\r\n      captcha: \"10\",\r\n      Remoteid: remoteid,\r\n      InstanceId: formData.instanceId,\r\n      Browserinfo: navigator.userAgent  \r\n    };\r\n \r\n    console.log(this.config.apiBaseUrl)\r\n\r\n    return this.http.post(\r\n      `${this.config.apiBaseUrl}/auth/authenticatejwt`, \r\n      signinpayload\r\n    );\r\n  }\r\n  logout(userid: number, instanceId: string): Observable<any> {\r\n    const logoutPayload = {\r\n      UserName: \"test\",\r\n      UserID: userid,\r\n      Password:\"xyz\",\r\n      Mail: \"test1234@gail.com\",\r\n      InstanceId: instanceId,\r\n       captcha: \"10\"\r\n    };\r\n//console.log('Logout Payload:', logoutPayload); // Debug log to verify payload structure\r\n    return this.http.post(\r\n      `${this.config.apiBaseUrl}/auth/logout`, \r\n      logoutPayload\r\n    );\r\n  }\r\n\r\n  refreshToken(refreshToken: string, instanceId: string): Observable<any> {\r\n    const payload = {\r\n      refreshtoken: refreshToken,\r\n      InstanceId: instanceId\r\n    };\r\n    \r\n    return this.http.post(\r\n      `${this.config.apiBaseUrl}/auth/RefreshToken`, \r\n      payload\r\n    );\r\n  }\r\n\r\n  \r\n private async getLocalIP(): Promise<string> {\r\n    return new Promise((resolve) => {\r\n      const pc = new RTCPeerConnection({ iceServers: [] });\r\n      pc.createDataChannel('');\r\n      pc.createOffer().then(pc.setLocalDescription.bind(pc));\r\n      pc.onicecandidate = (ice) => {\r\n        if (ice?.candidate?.candidate) {\r\n          const ip = /([0-9]{1,3}(\\.[0-9]{1,3}){3})/.exec(ice.candidate.candidate);\r\n          resolve(ip ? ip[1] : '127.0.0.1');\r\n          pc.close();\r\n        }\r\n      };\r\n      setTimeout(() => resolve('127.0.0.1'), 1000);\r\n    });\r\n  }\r\n\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport Dexie, { Table } from 'dexie';\r\nimport { Customer, Userprofile } from '../../model';\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\n\r\nexport class AppDbServices extends Dexie {\r\n  // 'users' is the table name; 'userID' is the primary key\r\n  userprofile!: Table<Userprofile>;\r\n addcustomer!: Table<Customer>; \r\n  constructor() {\r\n    super('OutletHubDB');\r\n    this.version(2).stores({\r\n      userprofile: 'userID' ,\r\n      addcustomer: '++id'\r\n\r\n    });\r\n  }\r\n\r\n  /** UPSERT: Adds a new record or replaces the existing one if the ID exists. */\r\nasync insertRecord<T>(tableName: string, data: T) {\r\n  // .put() prevents the ConstraintError\r\n  return await this.table(tableName).put(data); \r\n}\r\n  // /** INSERT: Adds a new record. Fails if ID exists. */\r\n  // async insertRecord<T>(tableName: string, data: T) {\r\n  //   return await this.table(tableName).add(data);\r\n  // }\r\n\r\n  /** UPDATE: Merges changes into an existing record by its ID. */\r\n  async updateRecord<T>(tableName: string, id: any, changes: Partial<T>) {\r\n    return await this.table(tableName).update(id, changes);\r\n  }\r\n\r\n  /** SELECT ALL: Retrieves all records from a table. */\r\n  async getAll<T>(tableName: string): Promise<T[]> {\r\n    return await this.table(tableName).toArray();\r\n  }\r\n\r\n  /** SELECT BY ID: Retrieves a single record by its primary key. */\r\n  async getById<T>(tableName: string, id: any): Promise<T | undefined> {\r\n    return await this.table(tableName).get(id);\r\n  }\r\n\r\n async deleteDatabase() {\r\n  try {\r\n    this.close(); \r\n    await Dexie.delete('OutletHubDB'); // Global delete\r\n    console.log(\"Database 'OutletHubDB' deleted successfully.\");\r\n    \r\n    // CRITICAL: Re-open the instance so it can be used again without refreshing the page\r\n    await this.open(); \r\n  } catch (err) {\r\n    console.error(\"Error deleting database:\", err);\r\n  }\r\n}\r\nasync clearUserData() {\r\n  try {\r\n    await this.userprofile.clear();\r\n    await this.addcustomer.clear();\r\n    console.log(\"User data cleared.\");\r\n  } catch (err) {\r\n    console.error(\"Error clearing tables:\", err);\r\n  }\r\n}\r\nasync checkIfExists(): Promise<boolean> {\r\n    try {\r\n      // Pass the same database name used in super('OutletHubDB')\r\n      return await Dexie.exists('OutletHubDB');\r\n    } catch (err) {\r\n      console.error(\"Error checking database existence:\", err);\r\n      return false;\r\n    }\r\n  }\r\n}","import { HttpInterceptorFn, HttpErrorResponse } from '@angular/common/http';\r\nimport { Router } from '@angular/router';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { catchError, switchMap, throwError, BehaviorSubject, filter, take } from 'rxjs';\r\nimport { inject } from '@angular/core';\r\nimport { Tokenservice } from './services/user_services/tokenservice';\r\nimport { Authservice } from './services/user_services/authservice';\r\nimport { AppDbServices } from './services/db_services/appdbservices';\r\nimport { MY_APP_CONFIG, MyAppConfig } from './app.config.token';\r\n// export const authInterceptor: HttpInterceptorFn = (req, next) => {\r\n//   return next(req);\r\n// };\r\n\r\nlet isRefreshing = false;\r\nlet refreshTokenSubject: BehaviorSubject<any> = new BehaviorSubject<any>(null);\r\n\r\nexport const authInterceptor: HttpInterceptorFn = (req, next) => {\r\n  const tokenService = inject(Tokenservice);\r\n  const router = inject(Router);\r\n  const toastr = inject(ToastrService);\r\n  const authService = inject(Authservice);\r\n  const appdb = inject(AppDbServices);\r\n  const config = inject(MY_APP_CONFIG) as MyAppConfig;\r\n\r\n  const handleSessionExpired = (errorToThrow: any) => {\r\n    isRefreshing = false;\r\n    toastr.info('Please login again', 'Session Expired!');\r\n    appdb.clearUserData().then(() => {\r\n      if (config.BaseUrl) {\r\n        tokenService.deleteToken();\r\n        window.location.href = config.BaseUrl + '/signin?logout=true';\r\n      } else {\r\n        router.navigateByUrl('/signin?logout=true');\r\n      }\r\n    });\r\n    return throwError(() => errorToThrow);\r\n  };\r\n\r\n  if (tokenService.isLoggedIn()) {\r\n    const clonedReq = req.clone({\r\n      headers: req.headers.set('Authorization', 'Bearer ' + tokenService.getToken())\r\n    });\r\n\r\n    return next(clonedReq).pipe(\r\n      catchError((error: HttpErrorResponse) => {\r\n        // Check if 401 error and not a failed refresh token call to prevent infinite loop\r\n        if (error.status === 401 && !req.url.includes('/auth/RefreshToken')) {\r\n          if (!isRefreshing) {\r\n            isRefreshing = true;\r\n            refreshTokenSubject.next(null);\r\n\r\n            const refreshToken = tokenService.getRefreshToken();\r\n            const instanceId = tokenService.getInstanceId();\r\n\r\n            if (refreshToken) {\r\n              return authService.refreshToken(refreshToken, instanceId).pipe(\r\n                switchMap((res: any) => {\r\n                  isRefreshing = false;\r\n                  if (res.status && res.data && res.data.token) {\r\n                    tokenService.saveToken(res.data.token);\r\n                    if (res.data.refreshtoken) {\r\n                      tokenService.saveRefreshToken(res.data.refreshtoken);\r\n                    }\r\n                    refreshTokenSubject.next(res.data.token);\r\n                    \r\n                    const newClonedReq = req.clone({\r\n                      headers: req.headers.set('Authorization', 'Bearer ' + res.data.token)\r\n                    });\r\n                    return next(newClonedReq);\r\n                  } else {\r\n                    return handleSessionExpired(new Error('Session Expired'));\r\n                  }\r\n                }),\r\n                catchError((refreshErr) => {\r\n                  return handleSessionExpired(refreshErr);\r\n                })\r\n              );\r\n            } else {\r\n              return handleSessionExpired(error);\r\n            }\r\n          } else {\r\n            // Delay the other requests while token is refreshing\r\n            return refreshTokenSubject.pipe(\r\n              filter(token => token != null),\r\n              take(1),\r\n              switchMap(jwt => {\r\n                const newClonedReq = req.clone({\r\n                  headers: req.headers.set('Authorization', 'Bearer ' + jwt)\r\n                });\r\n                return next(newClonedReq);\r\n              })\r\n            );\r\n          }\r\n        } else if (error.status === 403) {\r\n          toastr.error(\"Oops! It seems you're not authorized to perform the action.\");\r\n        }\r\n        \r\n        return throwError(() => error);\r\n      })\r\n    );\r\n  } else {\r\n    return next(req);\r\n  }\r\n};","import { inject } from '@angular/core';\r\nimport { CanActivateFn, Router } from '@angular/router';\r\nimport { Tokenservice } from './services/user_services/tokenservice';\r\n// export const authGuard: CanActivateFn = (route, state) => {\r\n//   return true;\r\n// };\r\n\r\nexport const authGuard: CanActivateFn = (route, state) => {\r\n  const tokenService = inject(Tokenservice)\r\n  const router = inject(Router);\r\n\r\n  if (tokenService.isLoggedIn()) {\r\n    const claimReq = route.data['claimReq'] as Function;\r\n    if (claimReq) {\r\n      const claims = tokenService.getClaims();\r\n      if (!claimReq(claims)) {\r\n        router.navigateByUrl('/forbidden')\r\n        return false\r\n      }\r\n      return true\r\n    }\r\n    return true;\r\n  }\r\n  else {\r\n    router.navigateByUrl('/signin')\r\n    return false\r\n  }\r\n\r\n};","export const claimReq = {\r\n  admin: (c: any) => c.role == \"Admin\",\r\n  WorkspaceOwner: (c: any) => c.role == \"WorkspaceOwner\" ,\r\n  OutletManager: (c: any) => c.role == \"OutletManager\",\r\n  OutletOperator: (c: any) => c.role == \"OutletOperator\",\r\n  adminOrWorkspaceOwner: (c: any) => c.role == \"WorkspaceOwner\"||c.role == \"Admin\",\r\n  adminOrWorkspaceOwnerOutletManager: (c: any) => c.role == \"WorkspaceOwner\"||c.role == \"Admin\"||c.role == \"OutletManager\",\r\n  WorkspaceOwnerOrOutletManager: (c: any) => c.role == \"WorkspaceOwner\"||c.role == \"OutletManager\",\r\n  OutletManagerOrOutletOperator: (c: any) => c.role == \"OutletManager\"||c.role == \"OutletOperator\",\r\n adminWorkspaceOwnerOrOutletManagerOutletOperator: (c: any) => c.role == \"WorkspaceOwner\"||c.role == \"OutletManager\" ||c.role == \"OutletOperator\" || c.role == \"Admin\",\r\n\r\n\r\n //   hasLibraryId: (c: any) => 'libraryID' in c,\r\n//   femaleAndTeacher: (c: any) => c.gender == \"Female\" && c.role == \"Teacher\",\r\n//   femaleAndBelow10 : (c: any) => c.gender == \"Female\" && parseInt(c.age) < 10,\r\n  \r\n}","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n@Injectable({\r\n  providedIn: 'root',\r\n\r\n})\r\nexport class LoadingService {\r\n  // Observable that buttons will listen to\r\n  loading$ = new BehaviorSubject<boolean>(false);\r\n  private activeRequests = 0;\r\n\r\n  setLoading(isLoading: boolean) {\r\n    if (isLoading) {\r\n      this.activeRequests++;\r\n    } else {\r\n      this.activeRequests--;\r\n    }\r\n    // Only stop loading when ALL concurrent requests are done\r\n    this.loading$.next(this.activeRequests > 0);\r\n  }\r\n}\r\n// export class LoadingService {\r\n//   private activeRequests = 0;\r\n//   private loadingSubject = new BehaviorSubject<boolean>(false);\r\n//   isLoading$ = this.loadingSubject.asObservable();\r\n\r\n//   show() {\r\n//     if (this.activeRequests === 0) this.loadingSubject.next(true);\r\n//     this.activeRequests++;\r\n//   }\r\n\r\n//   hide() {\r\n//     this.activeRequests--;\r\n//     if (this.activeRequests <= 0) {\r\n//       this.activeRequests = 0;\r\n//       this.loadingSubject.next(false);\r\n//     }\r\n//   }\r\n// }\r\n","import { HttpInterceptorFn } from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { finalize } from 'rxjs';\r\nimport { LoadingService } from './services/loadingservice';\r\n\r\nexport const loadingInterceptor: HttpInterceptorFn = (req, next) => {\r\n  const loadingService = inject(LoadingService);\r\n  loadingService.setLoading(true); // Turn loader ON\r\n\r\n  return next(req).pipe(\r\n    finalize(() => loadingService.setLoading(false)) // Ensures loader hides on success OR error\r\n  );\r\n};","import { Injectable, signal } from '@angular/core';\r\n\r\n\r\n// loading-list.service.ts\r\n@Injectable({ providedIn: 'root' })\r\nexport class Loadinglistservice {\r\n  private activeRequests = 0;\r\n  isLoading = signal<boolean>(false);\r\n\r\n  show() {\r\n    this.activeRequests++;\r\n    this.isLoading.set(true);\r\n  }\r\n\r\n  hide() {\r\n    this.activeRequests--;\r\n    // Only hide if NO requests are left\r\n    if (this.activeRequests <= 0) {\r\n      this.activeRequests = 0;\r\n      this.isLoading.set(false);\r\n    }\r\n  }\r\n}\r\n","\r\n\r\nimport { HttpInterceptorFn } from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { finalize } from 'rxjs';\r\nimport { Loadinglistservice } from './services/loadinglistservice';\r\n\r\nexport const loadingListInterceptor: HttpInterceptorFn = (req, next) => {\r\n \r\nconst loader = inject(Loadinglistservice);\r\n  \r\n  loader.show(); // Trigger loader BEFORE request\r\n\r\n  return next(req).pipe(\r\n    // finalize is guaranteed to run after the service call is DONE\r\n    finalize(() => {\r\n      loader.hide(); \r\n    })\r\n  );\r\n};","import { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\n\r\n// Material UI Core\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n// Data & Layout\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\n\r\n// Missing Imports for Template Form & List\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\n\r\n// CDK & Material Imports\r\nimport { CdkTreeModule } from '@angular/cdk/tree';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatListModule } from '@angular/material/list';\r\n\r\nexport const UI_HELPER = [\r\n  CommonModule,\r\n  ReactiveFormsModule,\r\n  FormsModule,\r\n  RouterModule,\r\n  MatButtonModule,\r\n  MatIconModule,\r\n  MatToolbarModule,\r\n  MatFormFieldModule,\r\n  MatInputModule,\r\n  MatTooltipModule,\r\n  MatTableModule,\r\n  MatPaginatorModule,\r\n  MatSortModule,\r\n  MatSnackBarModule,\r\n  MatDialogModule,\r\n  MatSlideToggleModule,\r\n  MatCardModule,\r\n  MatProgressBarModule,\r\n  MatDividerModule,\r\n  MatSelectModule,\r\n  MatCheckboxModule,\r\n  MatRadioModule,   // <--- Added for Approval Status\r\n  MatBadgeModule,   // <--- Added for Template ID badges\r\n  CdkTreeModule,\r\n  DragDropModule,\r\n  MatAutocompleteModule,\r\n  MatChipsModule,\r\n  MatListModule\r\n] as const;\r\n","import { Component } from '@angular/core';\r\nimport { Loadinglistservice } from '../../services/loadinglistservice';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterOutlet } from '@angular/router';\r\nimport { UI_HELPER } from '../../ui-helper';\r\n\r\n@Component({\r\n  selector: 'app-app-list',\r\n  imports: [CommonModule, UI_HELPER, RouterOutlet],\r\n  templateUrl: './app-list.html',\r\n})\r\nexport class AppList {\r\n constructor(public loadinglistService: Loadinglistservice) {}\r\n}\r\n"," <mat-progress-bar \r\n      *ngIf=\"loadinglistService.isLoading()\" \r\n      mode=\"indeterminate\" \r\n      color=\"accent\" \r\n      style=\"position: fixed; top: 0; left: 0; z-index: 9999;\">\r\n    </mat-progress-bar>\r\n    <router-outlet></router-outlet>\r\n","\r\nimport { Component, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { LoadingService } from '../../services/loadingservice';\r\n\r\n@Component({\r\n  selector: 'app-loding-btn',\r\n  imports: [CommonModule],\r\n  templateUrl: './app-btn.html',\r\n   styles: [`\r\n    :host {\r\n      display: block;\r\n      width: 100%;\r\n    }\r\n  `],\r\n})\r\n\r\nexport class AppBtn {\r\n  @Input() type: 'button' | 'submit' = 'button';\r\n  @Input() btnClass: string = 'btn-success w-100';\r\n  @Input() disabled: boolean = false;\r\n\r\n  constructor(public loadingService: LoadingService) {}\r\n}\r\n","\r\n\r\n     <!-- 1. We apply the btnClass to the ACTUAL button tag -->\r\n    <!-- 2. We use [type] so 'submit' works for forms -->\r\n    <button \r\n      [type]=\"type\" \r\n      [class]=\"'btn ' + btnClass\" \r\n      [disabled]=\"(loadingService.loading$ | async) || disabled\">\r\n      \r\n      <!-- Show Spinner -->\r\n      <span *ngIf=\"loadingService.loading$ | async\" \r\n            class=\"spinner-border spinner-border-sm me-2\" role=\"status\"></span>\r\n      \r\n      <!-- Show Label (using ng-content to project \"Sign in\") -->\r\n      <ng-content *ngIf=\"!(loadingService.loading$ | async)\"></ng-content>\r\n      \r\n      <!-- Show Loading Text -->\r\n      <span *ngIf=\"loadingService.loading$ | async\">Processing...</span>\r\n    </button>\r\n\r\n\r\n ","import { Injectable, signal, inject, NgZone } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { fromEvent, merge, map, startWith } from 'rxjs';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class Headerservice {\r\n   private router = inject(Router);\r\n   private zone = inject(NgZone);\r\n\r\n  // Signal for dynamic notification count\r\n  notificationCount = signal<number>(0);\r\n\r\n  // Signal for dynamic notification tooltip\r\n  notificationTooltip = signal<string>('Notifications');\r\n\r\n  // Signal for dynamic notification route\r\n  notificationRoute = signal<string>('workspace');\r\n\r\n  // Signal to hold the current network status\r\n  isOnline = signal<boolean>(navigator.onLine);\r\n\r\n  constructor() {\r\n    // Listen to window online/offline events\r\n    merge(\r\n      fromEvent(window, 'online').pipe(map(() => true)),\r\n      fromEvent(window, 'offline').pipe(map(() => false))\r\n    ).pipe(\r\n      startWith(navigator.onLine)\r\n    ).subscribe(status => {\r\n      this.zone.run(() => {\r\n        this.isOnline.set(status);\r\n      });\r\n    });\r\n  }\r\n\r\n  // Method to update count (e.g., from a Socket or API)\r\n  updateNotifications(count: number) {\r\n    this.notificationCount.set(count);\r\n  }\r\n\r\n  // Method to update notification tooltip\r\n  updateNotificationTooltip(tooltip: string) {\r\n    this.notificationTooltip.set(tooltip);\r\n  }\r\n\r\n  // Method to update notification route dynamically\r\n  updateNotificationRoute(route: string) {\r\n    this.notificationRoute.set(route);\r\n  }\r\n\r\n  // Centered navigation logic\r\n  navigateToProfile(route: string = 'profile') {\r\n    this.router.navigate([route]);\r\n  }\r\n\r\n  navigateToPassword(route: string = 'changepassword') {\r\n    this.router.navigate([route]);\r\n  }\r\n\r\n  navigateToNotifications() {\r\n    this.router.navigate([this.notificationRoute()]);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class BarcodeService {\n  validateEAN13(barcode: string): { isValid: boolean; error?: string } {\n    const clean = barcode.trim();\n\n    if (!/^\\d+$/.test(clean)) {\n      return { isValid: false, error: 'Barcode must contain only digits.' };\n    }\n\n    if (clean.length !== 8 && clean.length !== 12 && clean.length !== 13) {\n      return { isValid: false, error: 'Barcode must be exactly 8, 12, or 13 digits.' };\n    }\n\n    const prefix = clean.substring(0, 2);\n    const inStorePrefixes = ['20', '21', '22', '23', '24', '25', '26', '27', '28', '29'];\n    if (inStorePrefixes.includes(prefix)) {\n      return { isValid: false, error: 'Barcodes starting with 20-29 are reserved for weighing scales.' };\n    }\n\n    // Standard EAN-13 validation requires exactly 13 digits for checksum check.\n    // If it is 8 or 12, we can return valid as long as they are digits.\n    if (clean.length === 13) {\n      // 1-3-1-3 Checksum Calculation\n      let sum = 0;\n      for (let i = 0; i < 12; i++) {\n        const digit = parseInt(clean[i], 10);\n        sum += (i % 2 === 0) ? digit * 1 : digit * 3;\n      }\n      \n      const calculatedCheck = (10 - (sum % 10)) % 10;\n      const actualCheck = parseInt(clean[12], 10);\n\n      if (calculatedCheck !== actualCheck) {\n        return { isValid: false, error: `Invalid checksum digit. Calculated: ${calculatedCheck}, Found: ${actualCheck}` };\n      }\n    }\n\n    return { isValid: true };\n  }\n}\n","import { Component, EventEmitter, Input, Output, HostListener, ViewChild, ElementRef, OnInit, OnDestroy, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { Html5Qrcode } from 'html5-qrcode';\r\nimport { Subject } from 'rxjs';\r\nimport { debounceTime, takeUntil } from 'rxjs/operators';\r\nimport { BarcodeService } from '../../services/barcode.service';\r\n\r\n@Component({\r\n  selector: 'app-barcode-resolver',\r\n  standalone: true,\r\n  imports: [CommonModule, MatIconModule, MatButtonModule],\r\n  templateUrl: './app-barcode-resolver.html'\r\n})\r\nexport class AppBarcodeResolver implements OnInit, OnDestroy {\r\n  @Input() placeholder: string = 'Scan Barcode here...';\r\n  @Input() enableGlobalListener: boolean = true;\r\n  @Input() isValidate: boolean = false;\r\n\r\n  @Output() onBarcodeResolved = new EventEmitter<string>(); // Emits raw scanned barcode\r\n\r\n  @ViewChild('resolverInput') resolverInput!: ElementRef<HTMLInputElement>;\r\n\r\n  private barcodeService = inject(BarcodeService);\r\n\r\n  private inputSubject = new Subject<string>();\r\n  private destroy$ = new Subject<void>();\r\n\r\n  buffer: string = '';\r\n  lastKeyTime = Date.now();\r\n  isScanning: boolean = false;\r\n  private html5Qrcode: Html5Qrcode | null = null;\r\n\r\n  ngOnInit() {\r\n    this.inputSubject.pipe(\r\n      debounceTime(400),\r\n      takeUntil(this.destroy$)\r\n    ).subscribe(val => {\r\n      if (val && val.trim().length > 0) {\r\n        this.emitBarcode(val.trim());\r\n        if (this.resolverInput && this.resolverInput.nativeElement) {\r\n          this.resolverInput.nativeElement.value = '';\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  onInputChange(event: any) {\r\n    const val = event.target.value?.trim();\r\n    this.inputSubject.next(val);\r\n  }\r\n\r\n  onInputEnter(event: any) {\r\n    const val = event.target.value?.trim();\r\n    if (val) {\r\n      this.emitBarcode(val);\r\n      event.target.value = '';\r\n      event.preventDefault();\r\n    }\r\n  }\r\n\r\n  emitBarcode(barcode: string) {\r\n    const clean = barcode.trim();\r\n    if (!clean) return;\r\n\r\n    if (this.isValidate) {\r\n      const check = this.barcodeService.validateEAN13(clean);\r\n      if (!check.isValid) {\r\n        console.warn('Barcode Validation Error:', check.error);\r\n        alert(check.error || 'Invalid barcode format');\r\n        return;\r\n      }\r\n    }\r\n\r\n    this.onBarcodeResolved.emit(clean);\r\n  }\r\n\r\n  focus() {\r\n    setTimeout(() => {\r\n      if (this.resolverInput && this.resolverInput.nativeElement) {\r\n        this.resolverInput.nativeElement.focus();\r\n      }\r\n    }, 50);\r\n  }\r\n\r\n  @HostListener('window:keydown', ['$event'])\r\n  handleGlobalScan(event: KeyboardEvent) {\r\n    if (!this.enableGlobalListener) return;\r\n    const target = event.target as HTMLElement;\r\n    if (target && (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA')) {\r\n      return;\r\n    }\r\n    const currentTime = Date.now();\r\n    if (currentTime - this.lastKeyTime > 50) {\r\n      this.buffer = '';\r\n    }\r\n    this.lastKeyTime = currentTime;\r\n    if (event.key.length === 1) {\r\n      this.buffer += event.key;\r\n    } else if (event.key === 'Enter') {\r\n      this.emitBarcode(this.buffer.trim());\r\n      this.buffer = '';\r\n    }\r\n  }\r\n\r\n  toggleCameraScan() {\r\n    if (this.isScanning) {\r\n      this.stopCameraScan();\r\n    } else {\r\n      this.startCameraScan();\r\n    }\r\n  }\r\n\r\n  async startCameraScan() {\r\n    try {\r\n      this.isScanning = true;\r\n      setTimeout(async () => {\r\n        if (!this.isScanning) return;\r\n        try {\r\n          const devices = await Html5Qrcode.getCameras();\r\n          if (!this.isScanning) return;\r\n          if (devices && devices.length > 0) {\r\n            const backCamera = devices.find(d => d.label.toLowerCase().includes('back') || d.label.toLowerCase().includes('rear'));\r\n            const cameraId = backCamera ? backCamera.id : devices[0].id;\r\n            this.html5Qrcode = new Html5Qrcode('reader');\r\n            await this.html5Qrcode.start(\r\n              cameraId,\r\n              { fps: 10, qrbox: { width: 260, height: 160 } },\r\n              (decodedText) => {\r\n                this.emitBarcode(decodedText.trim());\r\n                this.stopCameraScan();\r\n              },\r\n              () => { }\r\n            );\r\n            if (!this.isScanning) {\r\n              await this.stopCameraScan();\r\n            }\r\n          }\r\n        } catch (err) {\r\n          this.isScanning = false;\r\n        }\r\n      }, 250);\r\n    } catch (err) {\r\n      this.isScanning = false;\r\n    }\r\n  }\r\n\r\n  async stopCameraScan() {\r\n    if (this.html5Qrcode) {\r\n      try {\r\n        if (this.html5Qrcode.isScanning) {\r\n          await this.html5Qrcode.stop();\r\n        }\r\n      } catch (err) {\r\n      } finally {\r\n        this.html5Qrcode = null;\r\n        this.isScanning = false;\r\n      }\r\n    } else {\r\n      this.isScanning = false;\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.destroy$.next();\r\n    this.destroy$.complete();\r\n    this.stopCameraScan();\r\n  }\r\n}\r\n","<div class=\"barcode-resolver-wrapper position-relative d-inline-block w-100 animate__animated animate__fadeIn\">\r\n    <div class=\"input-group-modern d-flex align-items-center position-relative rounded-pill overflow-hidden\">\r\n        <!-- Scan Icon Button at the Start (Click to Scan Barcode) -->\r\n        <button\r\n            class=\"btn-camera-trigger btn p-0 border-0 bg-transparent d-flex align-items-center justify-content-center\"\r\n            type=\"button\" (click)=\"toggleCameraScan()\" title=\"Click to Scan Barcode\">\r\n            <mat-icon class=\"camera-icon\">qr_code_scanner</mat-icon>\r\n        </button>\r\n\r\n        <!-- Input box -->\r\n        <input #resolverInput class=\"resolver-input bg-transparent border-0 shadow-none fw-medium\" type=\"text\"\r\n            [placeholder]=\"placeholder\" (keydown.enter)=\"onInputEnter($event)\" (input)=\"onInputChange($event)\"\r\n            autofocus>\r\n    </div>\r\n\r\n    <!-- Camera Modal Overlay -->\r\n    @if (isScanning) {\r\n    <div class=\"scanner-modal-overlay d-flex align-items-center justify-content-center position-fixed top-0 start-0 w-100 h-100\"\r\n        style=\"z-index: 1050; background: rgba(0, 0, 0, 0.65); backdrop-filter: blur(4px);\">\r\n        <div class=\"scanner-modal-card bg-white p-3 rounded-3 shadow-lg border animate__animated animate__zoomIn d-flex flex-column align-items-center\"\r\n            style=\"width: 90%; max-width: 480px; position: relative;\">\r\n            <div class=\"d-flex w-100 justify-content-between align-items-center mb-3\">\r\n                <div class=\"d-flex align-items-center text-primary fw-bold\">\r\n                    <mat-icon class=\"me-2\">videocam</mat-icon>\r\n                    <span>Scan Barcode</span>\r\n                </div>\r\n                <button class=\"btn btn-close shadow-none\" type=\"button\" (click)=\"toggleCameraScan()\"></button>\r\n            </div>\r\n            <div class=\"small text-muted mb-3 d-flex align-items-center\">\r\n                <mat-icon class=\"fs-6 me-1 text-info\">info</mat-icon>\r\n                Align barcode inside the guide box\r\n            </div>\r\n            <div id=\"reader\"\r\n                style=\"width: 100%; border-radius: 8px; overflow: hidden; border: 3px solid var(--theme-primary);\"\r\n                class=\"shadow-sm\"></div>\r\n        </div>\r\n    </div>\r\n    }\r\n</div>","import { Injectable, signal } from '@angular/core';\r\nimport { Router, NavigationEnd } from '@angular/router';\r\nimport { filter } from 'rxjs';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class Sidebarservice {\r\n  isCollapsed = signal(false);\r\n\r\n  constructor(private router: Router) {\r\n    // Auto-close on mobile when a link is clicked\r\n    this.router.events.pipe(\r\n      filter(event => event instanceof NavigationEnd)\r\n    ).subscribe(() => {\r\n      if (window.innerWidth < 768) {\r\n        this.isCollapsed.set(true); // Close it\r\n      }\r\n    });\r\n  }\r\n\r\n  toggle() {\r\n    this.isCollapsed.update(val => !val);\r\n  }\r\n}\r\n","import { Component, Input, Output, EventEmitter, signal, Inject, effect } from '@angular/core';\r\nimport { CommonModule, Location } from '@angular/common'; // MUST be from @angular/common\r\nimport { Router, RouterModule } from '@angular/router';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { Loadinglistservice } from '../../services/loadinglistservice';\r\nimport { AppDbServices } from '../../services/db_services/appdbservices';\r\nimport { Sidebarservice } from '../../services/sidebarservice';\r\nimport { Tokenservice } from '../../services/user_services/tokenservice';\r\nimport { Headerservice } from '../../services/headerservice';\r\nimport { MY_APP_CONFIG, MyAppConfig } from '../../app.config.token';\r\nimport { AppBarcodeResolver } from '../app-barcode-resolver/app-barcode-resolver';\r\n\r\n@Component({\r\n  selector: 'app-header',\r\n  standalone: true,\r\n  imports: [\r\n    CommonModule, RouterModule, MatIconModule, MatButtonModule,\r\n    MatFormFieldModule, MatInputModule, MatMenuModule, MatDividerModule, MatProgressBarModule, MatBadgeModule, MatTooltipModule, AppBarcodeResolver\r\n  ],\r\n  templateUrl: './app-header.html'\r\n})\r\nexport class AppHeader {\r\n  @Input() title: string = '';\r\n  @Input() showSearch: boolean = false;\r\n  @Input() showBack: boolean = false;\r\n  @Input() backRoute: string = '';\r\n  @Input() searchLabel: string = 'Search Application Name or Description';\r\n  @Input() disableProgressBar: boolean = false;\r\n  @Input() disableOfflineOverlay: boolean = false;\r\n\r\n  // ⬇️ Scanner Configs passed down to AppBarcodeResolver\r\n  @Input() showBarcode: boolean = false;\r\n  @Input() barcodePlaceholder: string = 'Scan Barcode here...';\r\n  @Input() isApiCall: boolean = false;\r\n  @Input() isMapping: boolean = false;\r\n  @Input() enableBarcodeGlobal: boolean = true;\r\n  @Input() isValidate: boolean = false;\r\n\r\n  @Output() onSearch = new EventEmitter<Event>();\r\n  @Output() onBack = new EventEmitter<void>(); // Added for form closing\r\n  @Output() onOnlineRestored = new EventEmitter<void>(); // Emits when internet comes back\r\n\r\n  // ⬇️ Emits raw barcode string to parent page component\r\n  @Output() onBarcodeResolved = new EventEmitter<string>();\r\n\r\n  userName = signal<string>('');\r\n  userDesignation = signal<string>('');\r\n  userProfile = signal<any>(null);\r\n  \r\n  mobileSearchActive = signal<boolean>(false);\r\n  mobileBarcodeActive = signal<boolean>(false);\r\n\r\n  private wasOffline = false; // Tracks if we were previously offline\r\n\r\n  constructor(\r\n    private router: Router,\r\n    private location: Location, // Correctly injected\r\n    public tokenservice: Tokenservice,\r\n    public loadinglistService: Loadinglistservice,\r\n    private appdb: AppDbServices,\r\n    private sidebarService: Sidebarservice,\r\n    public headerService: Headerservice,\r\n    @Inject(MY_APP_CONFIG) private config: MyAppConfig\r\n  ) {\r\n    // Track the moment the user comes back online to trigger the event\r\n    effect(() => {\r\n      const isOnline = this.headerService.isOnline();\r\n      if (!isOnline) {\r\n        this.wasOffline = true;\r\n      } else if (isOnline && this.wasOffline) {\r\n        this.wasOffline = false;\r\n        this.onOnlineRestored.emit(); // Notify parent components\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    const claims = this.tokenservice.getClaims();\r\n    //console.log('User Claims:', claims); \r\n\r\n    // Update signal values using .set()\r\n    if (claims) {\r\n      this.userName.set(claims.unique_name || 'Guest');\r\n      this.userDesignation.set(claims.role || 'User');\r\n    }\r\n\r\n    // Fetch the user profile from IndexedDB to display the profile picture\r\n    this.appdb.getAll('userprofile').then((res: any) => {\r\n      if (res && res.length > 0) {\r\n        this.userProfile.set(res[0]);\r\n      }\r\n    }).catch((err) => {\r\n      console.error('Error retrieving user profile in header:', err);\r\n    });\r\n  }\r\n  handleBack() {\r\n    // 1. If we are in a form toggle (like your AddApplication), emit the event\r\n    this.onBack.emit();\r\n\r\n    // 2. If a specific route is provided, navigate there\r\n    if (this.backRoute) {\r\n      this.router.navigate([this.backRoute]);\r\n    }\r\n    // 3. Otherwise, use standard browser history if no other logic is triggered\r\n    else if (!this.onBack.observed) {\r\n      this.location.back();\r\n    }\r\n  }\r\n\r\n  // ⬇️ Handle barcode emitted from AppBarcodeResolver UI\r\n  handleHeaderBarcodeResolved(barcode: string) {\r\n    this.onBarcodeResolved.emit(barcode);\r\n  }\r\n\r\n  applyFilter(event: Event) {\r\n    this.onSearch.emit(event);\r\n  }\r\n\r\n  onNotificationClicked() {\r\n    this.headerService.navigateToNotifications();\r\n  }\r\n\r\n  onLogout() {\r\n\r\n    this.userName.set('');\r\n    this.userDesignation.set('');\r\n\r\n    this.appdb.clearUserData().then(() => {\r\n      if (this.config.BaseUrl) {\r\n        this.tokenservice.deleteToken();\r\n        window.location.href = this.config.BaseUrl + '/signin?logout=true';\r\n      }\r\n      else {\r\n        this.router.navigateByUrl('/signin?logout=true');\r\n      }\r\n\r\n    });\r\n  }\r\n  onMenuToggle() {\r\n    this.sidebarService.toggle(); // This works from ANY page!\r\n  }\r\n\r\n\r\n}\r\n","<nav class=\"main-navbar sticky-top\">\r\n  <!-- Mobile Search Overlay -->\r\n  @if (mobileSearchActive()) {\r\n  <div class=\"w-100 d-flex align-items-center px-3 position-absolute start-0 top-0 h-100 animate__animated animate__fadeIn\"\r\n    style=\"background: var(--theme-secondary); z-index: 1040;\">\r\n    <button mat-icon-button class=\"text-white me-2 d-flex align-items-center justify-content-center\" (click)=\"mobileSearchActive.set(false)\">\r\n      <mat-icon>arrow_back</mat-icon>\r\n    </button>\r\n    <div class=\"search-container flex-grow-1\" style=\"max-width: 100%;\">\r\n      <mat-icon class=\"text-white-50\">search</mat-icon>\r\n      <input type=\"search\" class=\"text-white\" [placeholder]=\"searchLabel\" (keyup)=\"applyFilter($event)\" autofocus>\r\n    </div>\r\n  </div>\r\n  }\r\n\r\n  <!-- Mobile Barcode Scanner Overlay -->\r\n  @if (mobileBarcodeActive()) {\r\n  <div class=\"w-100 d-flex align-items-center px-3 position-absolute start-0 top-0 h-100 animate__animated animate__fadeIn\"\r\n    style=\"background: var(--theme-secondary); z-index: 1040;\">\r\n    <button mat-icon-button class=\"text-white me-2 d-flex align-items-center justify-content-center\" (click)=\"mobileBarcodeActive.set(false)\">\r\n      <mat-icon>arrow_back</mat-icon>\r\n    </button>\r\n    <div class=\"barcode-header-container flex-grow-1\" style=\"max-width: 100%;\">\r\n      <app-barcode-resolver [placeholder]=\"barcodePlaceholder\" [enableGlobalListener]=\"enableBarcodeGlobal\"\r\n        [isValidate]=\"isValidate\"\r\n        (onBarcodeResolved)=\"handleHeaderBarcodeResolved($event); mobileBarcodeActive.set(false);\">\r\n      </app-barcode-resolver>\r\n    </div>\r\n  </div>\r\n  }\r\n\r\n  <div class=\"container-fluid d-flex align-items-center p-0\" [class.d-none]=\"mobileSearchActive() || mobileBarcodeActive()\">\r\n    <button mat-icon-button (click)=\"onMenuToggle()\"\r\n      class=\"text-white d-flex align-items-center justify-content-center\">\r\n      <mat-icon>menu</mat-icon>\r\n    </button>\r\n\r\n    <div class=\"d-flex align-items-center\">\r\n      <button mat-icon-button type=\"button\" *ngIf=\"showBack\" (click)=\"handleBack()\"\r\n        class=\"text-white me-2 d-flex align-items-center justify-content-center\">\r\n        <mat-icon>arrow_back</mat-icon>\r\n      </button>\r\n      <h5 class=\"m-0 fw-bold text-white lh-1\">{{ title }}</h5>\r\n    </div>\r\n\r\n    <div class=\"search-container ms-4 d-none d-md-flex\" *ngIf=\"showSearch\">\r\n      <mat-icon class=\"text-white-50\">search</mat-icon>\r\n      <input type=\"search\" class=\"text-white\" [placeholder]=\"searchLabel\" (keyup)=\"applyFilter($event)\">\r\n    </div>\r\n\r\n    <!-- Conditionally render scanner bar inside header toolbar -->\r\n    @if (showBarcode) {\r\n    <div class=\"barcode-header-container ms-4 d-none d-md-flex align-items-center\">\r\n      <app-barcode-resolver [placeholder]=\"barcodePlaceholder\" [enableGlobalListener]=\"enableBarcodeGlobal\"\r\n        [isValidate]=\"isValidate\"\r\n        (onBarcodeResolved)=\"handleHeaderBarcodeResolved($event)\">\r\n      </app-barcode-resolver>\r\n    </div>\r\n    }\r\n\r\n    <div class=\"d-flex align-items-center gap-2 ms-auto\">\r\n      <!-- Mobile Search Icon Button -->\r\n      <button mat-icon-button *ngIf=\"showSearch\" class=\"text-white d-md-none d-flex align-items-center justify-content-center\"\r\n        (click)=\"mobileSearchActive.set(true)\">\r\n        <mat-icon>search</mat-icon>\r\n      </button>\r\n\r\n      <!-- Mobile Barcode Scanner Icon Button -->\r\n      <button mat-icon-button *ngIf=\"showBarcode\" class=\"text-white d-md-none d-flex align-items-center justify-content-center\"\r\n        (click)=\"mobileBarcodeActive.set(true)\">\r\n        <mat-icon>qr_code_scanner</mat-icon>\r\n      </button>\r\n\r\n      <!-- Network Status Icon -->\r\n      <mat-icon [ngClass]=\"headerService.isOnline() ? 'text-white' : 'text-danger'\"\r\n        [title]=\"headerService.isOnline() ? 'Online' : 'Offline'\"\r\n        [fontIcon]=\"headerService.isOnline() ? 'wifi' : 'wifi_off'\">\r\n      </mat-icon>\r\n\r\n      <!-- Notification Icon with Dynamic Badge & Navigation -->\r\n      <button mat-icon-button [matTooltip]=\"headerService.notificationTooltip()\" (click)=\"onNotificationClicked()\"\r\n        class=\"text-white d-flex align-items-center justify-content-center\">\r\n        <mat-icon [matBadge]=\"headerService.notificationCount()\"\r\n          [matBadgeHidden]=\"headerService.notificationCount() === 0\" matBadgeColor=\"warn\" aria-hidden=\"false\">\r\n          notifications\r\n        </mat-icon>\r\n      </button>\r\n\r\n      <!-- Profile Menu Trigger -->\r\n      <div class=\"d-flex align-items-center justify-content-center text-white cursor-pointer\" matTooltip=\"Profile Menu\"\r\n        [matMenuTriggerFor]=\"profileMenu\">\r\n        @if (userProfile()?.photoBase64 || userProfile()?.photobase64) {\r\n        <img [src]=\"userProfile()?.photoBase64 || userProfile()?.photobase64\" class=\"rounded-circle\"\r\n          style=\"width: 32px; height: 32px; object-fit: cover;\" alt=\"Profile\">\r\n        } @else {\r\n        <mat-icon>account_circle</mat-icon>\r\n        }\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Content-Scoped Offline Overlay -->\r\n  @if (!headerService.isOnline() && !disableOfflineOverlay) {\r\n  <div\r\n    class=\"position-absolute start-0 w-100 d-flex flex-column align-items-center justify-content-center bg-white border-top border-danger border-2\"\r\n    style=\"top: 100%; height: calc(100vh - 60px); z-index: 1040; opacity: 0.95; backdrop-filter: blur(5px); cursor: default;\">\r\n    <mat-icon class=\"text-danger mb-3\" style=\"font-size: 80px; height: 80px; width: 80px;\">wifi_off</mat-icon>\r\n    <h2 class=\"fw-bold text-dark mb-1\">No Internet Connection</h2>\r\n    <p class=\"text-muted fs-5\">Please check your network settings. The app will resume automatically.</p>\r\n  </div>\r\n  }\r\n</nav>\r\n\r\n<mat-menu #profileMenu=\"matMenu\" xPosition=\"before\" class=\"custom-profile-menu\">\r\n  <div class=\"p-4 d-flex flex-column align-items-center\" (click)=\"$event.stopPropagation()\">\r\n    @if (userProfile()?.photoBase64 || userProfile()?.photobase64) {\r\n    <img [src]=\"userProfile()?.photoBase64 || userProfile()?.photobase64\" class=\"rounded-circle shadow-sm mb-3\"\r\n      style=\"width: 80px; height: 80px; object-fit: cover;\" alt=\"Profile\">\r\n    } @else {\r\n    <mat-icon class=\"text-secondary mb-3\" style=\"font-size: 80px; width:80px; height:80px;\">\r\n      account_circle\r\n    </mat-icon>\r\n    }\r\n\r\n    <div class=\"text-center\">\r\n      <h6 class=\"mb-0 fw-bold text-dark\">{{ userName() }}</h6>\r\n      <small class=\"text-muted d-block\">{{ userDesignation() }}</small>\r\n    </div>\r\n  </div>\r\n\r\n  <mat-divider></mat-divider>\r\n\r\n  <div class=\"d-flex justify-content-between p-2\">\r\n    <!-- Centered Navigation Logic Calls -->\r\n    <button mat-button color=\"primary\" class=\"fw-bold\" style=\"font-size: 11px;\"\r\n      (click)=\"headerService.navigateToProfile()\">PROFILE</button>\r\n    <button mat-button color=\"primary\" class=\"fw-bold\" style=\"font-size: 11px;\"\r\n      (click)=\"headerService.navigateToPassword()\">PASSWORD</button>\r\n    <button mat-button color=\"warn\" class=\"fw-bold\" style=\"font-size: 11px;\" (click)=\"onLogout()\">LOGOUT</button>\r\n  </div>\r\n</mat-menu>\r\n\r\n<mat-progress-bar *ngIf=\"loadinglistService.isLoading() && !disableProgressBar\" mode=\"indeterminate\" color=\"accent\"\r\n  class=\"layout-loader\">\r\n</mat-progress-bar>","import { HttpClient } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { MessageEF, Myfilerequest, Myfileresponce, CommonMail, SMS, Result } from '../../model';\r\nimport { Tokenservice } from './tokenservice';\r\nimport { MY_APP_CONFIG, MyAppConfig } from '../../app.config.token';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class UserService {\r\n\r\n  constructor(private http: HttpClient,\r\n    private tokenService: Tokenservice,@Inject(MY_APP_CONFIG) private config: MyAppConfig) { }\r\n   \r\n  getUserProfile() {  \r\n       \r\n const jwtToken = this.tokenService.getToken();\r\n    // Wrap the string in double quotes so it's valid JSON for a string type\r\n    return this.http.post(this.config.apiBaseUrl + '/auth/GetUserByJWT', `\"${jwtToken}\"`, {\r\n        headers: { 'Content-Type': 'application/json' }\r\n    });\r\n  }\r\n\r\n  downloadFileResult(Filename: string): Observable<Myfileresponce> {\r\n    // Use PascalCase to match the C# model perfectly\r\n    const payload = { FileNameWithPath: Filename };\r\n  \r\n      return this.http.post<Myfileresponce>(\r\n        `${this.config.apiBaseUrl}/AzureFile/DownloadFileResult`, \r\n        payload\r\n      );\r\n    }\r\n\r\n    saveFileResult(fileParams: Myfilerequest): Observable<any> {\r\n      console.log('Saving file with params:', fileParams); // Debug log to check the parameters being sent\r\n      \r\n      // Map to exact PascalCase expected by the C# model to ensure it binds correctly\r\n      const payload = {\r\n        FileName: fileParams.fileName,\r\n        FolderName: fileParams.folderName,\r\n        FileContenctBase64: fileParams.fileContenctBase64,\r\n        FileNameWithPath: fileParams.fileNameWithPath\r\n      };\r\n\r\n  // Use post<ExpectedReturnType>(URL, Body)\r\n  return this.http.post<any>(\r\n    `${this.config.apiBaseUrl}/AzureFile/SaveFile`, \r\n    payload\r\n  );\r\n   }\r\n   \r\n    deleteFileResult(fileParams: Myfilerequest): Observable<any> {\r\n  // Map to exact PascalCase expected by the C# model to ensure it binds correctly\r\n  const payload = {\r\n    FileName: fileParams.fileName,\r\n    FolderName: fileParams.folderName,\r\n    FileContenctBase64: fileParams.fileContenctBase64,\r\n    FileNameWithPath: fileParams.fileNameWithPath\r\n  };\r\n\r\n  // Use post<ExpectedReturnType>(URL, Body)\r\n  return this.http.post<any>(\r\n    `${this.config.apiBaseUrl}/AzureFile/DeleteFile`, \r\n    payload\r\n  );\r\n   }\r\n\r\n  sendCommonMail(mailData: CommonMail): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(\r\n      `${this.config.apiBaseUrl}/MailService/SendCommonMail`, \r\n      mailData\r\n    );\r\n  }\r\n\r\n  sendSms(smsData: SMS): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(\r\n      `${this.config.apiBaseUrl}/SMSService/Main`, \r\n      smsData\r\n    );\r\n  }\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { RouterOutlet } from '@angular/router';\r\n\r\n@Component({\r\n  selector: 'app-user',\r\n  imports: [RouterOutlet],\r\n  templateUrl: './user.html',\r\n\r\n})\r\nexport class User {\r\n\r\n}\r\n","\r\n<div class=\"container\" style=\"view-transition-name: auth-form;\">\r\n  <div class=\"row vh-100 align-items-center\">\r\n    <div class=\"col-xxl-6 offset-xxl-3 col-lg-8 offset-lg-2 col-10 offset-1\">\r\n      <div class=\"row rounded-4 border-0 shadow-lg bg-white\" style=\"min-height:450px;\">\r\n        <div class=\"col-md-5 d-md-flex d-none rounded-start-4 align-items-center justify-content-center\" style=\"background-color: var(--theme-primary);\">\r\n          <div class=\"text-center text-white\">\r\n            <img src=\"authec-logo.png\" class=\"w-50 mb-3\">\r\n            <h2 class=\"fw-bolder\">Outlet Setu</h2>\r\n          </div>\r\n        </div>\r\n        <div class=\"col-md-7 col-12 d-flex justify-content-start align-items-center\">\r\n          <!-- Add the inline style or a class with view-transition-name -->\r\n          <div class=\"p-5 w-100\" >\r\n              <router-outlet></router-outlet>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n  </div>\r\n</div>\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { MY_APP_CONFIG } from '../../app.config.token';\r\nimport { CommanRequest, MessageEF, Result, Outletmodel, Listitems } from '../../model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class Outletservice {\r\n  private config = inject(MY_APP_CONFIG);\r\n  private http = inject(HttpClient);\r\n  private readonly baseUrl = `${this.config.apiBaseUrl}`;\r\n\r\n  getOutletList(filterData: CommanRequest): Observable<Result<Outletmodel[]>> {\r\n    return this.http.post<Result<Outletmodel[]>>(`${this.baseUrl}/Outlet/GetOutletList`, filterData);\r\n  }\r\n\r\n  getApplications(model: CommanRequest): Observable<Result<Listitems[]>> {\r\n    return this.http.post<Result<Listitems[]>>(`${this.baseUrl}/UserMapping/GetApplication`, model);\r\n  }\r\n\r\n  getWorkspaces(model: CommanRequest): Observable<Result<Listitems[]>> {\r\n    return this.http.post<Result<Listitems[]>>(`${this.baseUrl}/UserMapping/GetWorkspace`, model);\r\n  }\r\n  getOutlets(model: CommanRequest): Observable<Result<Listitems[]>> {\r\n    return this.http.post<Result<Listitems[]>>(`${this.baseUrl}/UserMapping/GetOutlet`, model);\r\n  }\r\n\r\n  addOutlet(model: Outletmodel): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(`${this.baseUrl}/Outlet/AddOutlet`, model);\r\n  }\r\n\r\n  updateOutlet(model: Outletmodel): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(`${this.baseUrl}/Outlet/UpdateOutlet`, model);\r\n  }\r\n\r\n  modifyStatusOutlet(model: CommanRequest): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(`${this.baseUrl}/Outlet/ModifyStatusOutlet`, model);\r\n  }\r\n}\r\n","import { Component, EventEmitter, OnInit, Output, inject, signal } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Outletservice } from '../../shared/services/adminpanel_services/outletservice';\r\nimport { Tokenservice } from '../../shared/services/user_services/tokenservice';\r\nimport { Listitems } from '../../shared/model';\r\nimport { UserService } from '../../shared/services/user_services/userservice';\r\nimport { firstValueFrom } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'app-select-zone',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  templateUrl: './selectzone.html'\r\n})\r\nexport class Selectzone implements OnInit {\r\n  private service = inject(Outletservice);\r\n  private token = inject(Tokenservice);\r\n  private userService = inject(UserService);\r\n\r\n  @Output() onComplete = new EventEmitter<any>();\r\n  @Output() onCancel = new EventEmitter<void>();\r\n\r\n  appList = signal<Listitems[]>([]);\r\n  wsList = signal<Listitems[]>([]);\r\n  outletList = signal<Listitems[]>([]);\r\n\r\n  selectedApp: any = null;\r\n  selectedWs: any = null;\r\n  selectedOutlet: any = null; \r\n  userId = 0;\r\n\r\n  ngOnInit() {\r\n    this.userId = Number(this.token.getUserId());\r\n    this.loadApps();\r\n  }\r\n\r\n  loadApps() {\r\n    this.service.getApplications({ userID: this.userId }).subscribe(res => {\r\n      if (res.status && res.data) {\r\n        this.appList.set(res.data);\r\n        // Auto-select if only 1 item exists\r\n        if (res.data.length === 1) this.autoSelectApp(res.data[0]);\r\n      }\r\n    });\r\n  }\r\n\r\n  onAppChange(event: Event) {\r\n    const val = (event.target as HTMLSelectElement).value;\r\n    const item = this.appList().find(i => String(i.value) === val);\r\n    if (item) this.autoSelectApp(item);\r\n  }\r\n\r\n  autoSelectApp(item: Listitems) {\r\n    this.selectedApp = item;\r\n    this.wsList.set([]); \r\n    this.outletList.set([]);\r\n    this.selectedWs = null;\r\n    this.selectedOutlet = null;\r\n\r\n    this.service.getWorkspaces({ userID: this.userId, ids: item.value.toString() }).subscribe(res => {\r\n      if (res.status && res.data) {\r\n        this.wsList.set(res.data);\r\n        // Auto-select if only 1 item exists\r\n        if (res.data.length === 1) this.autoSelectWs(res.data[0]);\r\n      }\r\n    });\r\n  }\r\n\r\n  onWsChange(event: Event) {\r\n    const val = (event.target as HTMLSelectElement).value;\r\n    const item = this.wsList().find(i => String(i.value) === val);\r\n    if (item) this.autoSelectWs(item);\r\n  }\r\n\r\n  autoSelectWs(item: Listitems) {\r\n    this.selectedWs = item;\r\n    this.outletList.set([]);\r\n    this.selectedOutlet = null;\r\n\r\n    this.service.getOutlets({ userID: this.userId, ids: item.value.toString() }).subscribe(res => {\r\n      if (res.status && res.data) {\r\n        this.outletList.set(res.data);\r\n        // Auto-select if only 1 item exists\r\n        if (res.data.length === 1) this.autoSelectOutlet(res.data[0]);\r\n      }\r\n    });\r\n  }\r\n\r\n  onOutletChange(event: Event) {\r\n    const val = (event.target as HTMLSelectElement).value;\r\n    const item = this.outletList().find(i => String(i.value) === val);\r\n    if (item) {\r\n      this.selectedOutlet = item;\r\n      this.confirmSelection(); // Auto-trigger on manual selection\r\n    }\r\n  }\r\n\r\n  autoSelectOutlet(item: Listitems) {\r\n    this.selectedOutlet = item;\r\n    // Tiny timeout ensures signal updates finish before emitting the final data\r\n    setTimeout(() => {\r\n      this.confirmSelection();\r\n    }, 150);\r\n  }\r\n\r\n  async confirmSelection() {\r\n    console.log('confirmSelection called. Current selections:', { app: this.selectedApp, ws: this.selectedWs, outlet: this.selectedOutlet });\r\n\r\n    if (this.selectedApp && this.selectedWs && this.selectedOutlet) {\r\n      \r\n      console.log('All selections exist. Downloading images...');\r\n      const appImg = await this.downloadImageAsBase64(this.selectedApp.imageUrl);\r\n      const wsImg = await this.downloadImageAsBase64(this.selectedWs.imageUrl);\r\n      const outletImg = await this.downloadImageAsBase64(this.selectedOutlet.imageUrl);\r\n      console.log( appImg, wsImg, outletImg);\r\n      this.onComplete.emit({\r\n        app: this.selectedApp,\r\n        workspace: this.selectedWs,\r\n        outlet: this.selectedOutlet,\r\n        appImage: appImg,\r\n        workspaceImage: wsImg,\r\n        outletImage: outletImg\r\n      });\r\n    }\r\n  }\r\n\r\n  private async downloadImageAsBase64(url?: string): Promise<string> {\r\n    console.log('downloadImageAsBase64 called with URL:', url);\r\n    \r\n    if (!url || !url.trim()) {\r\n      console.warn('URL is empty or undefined, returning early.');\r\n      return '';\r\n    }\r\n    try {\r\n      const res: any = await firstValueFrom(this.userService.downloadFileResult(url));\r\n      if (!res || (res.status !== true && res.Status !== true)) return '';\r\n\r\n      const dataObj = res.data || res.Data || res;\r\n      const base64Data = dataObj?.fileBase64 || dataObj?.FileBase64 || dataObj?.fileContenctBase64 || dataObj?.FileContenctBase64;\r\n      \r\n      if (base64Data) {\r\n        if (base64Data.startsWith('data:')) return base64Data; // Already formatted\r\n        \r\n        let cType = (dataObj.contentType || dataObj.ContentType || '').toLowerCase();\r\n        if (!cType || cType === 'application/octet-stream') {\r\n          const ext = url.split(/[/\\\\]/).pop()?.split('.').pop()?.toLowerCase() || '';\r\n          cType = `image/${ext || 'jpeg'}`;\r\n        } else if (!cType.includes('/')) { cType = `image/${cType}`; }\r\n        return `data:${cType};base64,${base64Data}`;\r\n      }\r\n    } catch (error) { return ''; }\r\n    return '';\r\n  }\r\n}\r\n","<div class=\"card p-4 shadow-sm border-0\">\r\n  <h5 class=\"mb-4 fw-bold\" style=\"color: var(--theme-secondary);\">Setup Session</h5>\r\n\r\n  <!-- Application Selection -->\r\n  <div class=\"mb-3\" *ngIf=\"appList().length > 1\">\r\n    <label class=\"small fw-bold text-muted\">Application</label>\r\n    <select class=\"form-select bg-light\" (change)=\"onAppChange($event)\" [value]=\"selectedApp?.value || ''\">\r\n      <option value=\"\">-- Choose Application --</option>\r\n      <option *ngFor=\"let item of appList()\" [value]=\"item.value\">{{item.text}}</option>\r\n    </select>\r\n  </div>\r\n\r\n  <!-- Workspace Selection -->\r\n  <div class=\"mb-3\" *ngIf=\"selectedApp && wsList().length > 1\">\r\n    <label class=\"small fw-bold text-muted\">Workspace</label>\r\n    <select class=\"form-select bg-light\" (change)=\"onWsChange($event)\" [value]=\"selectedWs?.value || ''\">\r\n      <option value=\"\">-- Choose Workspace --</option>\r\n      <option *ngFor=\"let item of wsList()\" [value]=\"item.value\">{{item.text}}</option>\r\n    </select>\r\n  </div>\r\n\r\n  <!-- Outlet Selection -->\r\n  <div class=\"mb-3\" *ngIf=\"selectedWs && outletList().length > 1\">\r\n    <label class=\"small fw-bold text-muted\">Outlet</label>\r\n    <select class=\"form-select bg-light\" (change)=\"onOutletChange($event)\" [value]=\"selectedOutlet?.value || ''\">\r\n      <option value=\"\">-- Choose Outlet --</option>\r\n      <option *ngFor=\"let item of outletList()\" [value]=\"item.value\">{{item.text}}</option>\r\n    </select>\r\n  </div>\r\n\r\n  <!-- Final State / Loading -->\r\n  <div class=\"mt-4 text-center\">\r\n    <!-- Show button only if user had to manually choose something -->\r\n    <button *ngIf=\"selectedOutlet && (appList().length > 1 || wsList().length > 1 || outletList().length > 1)\" \r\n            class=\"btn btn-primary w-100 py-2 fw-bold\" \r\n            (click)=\"confirmSelection()\">\r\n      Continue to Dashboard\r\n    </button>\r\n\r\n    <!-- Show spinner if auto-completing or initially loading -->\r\n    <div *ngIf=\"!selectedOutlet || (selectedOutlet && appList().length <= 1 && wsList().length <= 1 && outletList().length <= 1)\" class=\"py-2\">\r\n      <div class=\"spinner-border spinner-border-sm\" style=\"color: var(--theme-primary);\" role=\"status\"></div>\r\n      <p class=\"mt-2 mb-0 text-muted small\">Preparing your session...</p>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { firstValueFrom } from 'rxjs';\r\nimport { Tokenservice } from './tokenservice';\r\nimport { UserService } from './userservice';\r\nimport { AppDbServices } from '../db_services/appdbservices';\r\nimport { MY_APP_CONFIG, MyAppConfig } from '../../app.config.token';\r\nimport { CryptoUtils } from '../../utils/crypto-utils';\r\n\r\nexport interface ZoneDetails {\r\n  appId?: string;\r\n  appName?: string;\r\n  workspaceId?: string;\r\n  workspaceName?: string;\r\n  outletId?: string;\r\n  outletName?: string;\r\n  appImage?: string;\r\n  workspaceImage?: string;\r\n  outletImage?: string;\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class AuthFlowService {\r\n  private tokenservice = inject(Tokenservice);\r\n  private userService = inject(UserService);\r\n  private appdb = inject(AppDbServices);\r\n  private router = inject(Router);\r\n  private toastr = inject(ToastrService);\r\n  private config = inject(MY_APP_CONFIG) as MyAppConfig;\r\n\r\n  public handlePostAuthFlow(zoneDetails: ZoneDetails = {}, explicitToken?: string) {\r\n    const activeToken = explicitToken || this.tokenservice.getToken();\r\n    \r\n    // ALWAYS fetch and save user profile FIRST so it exists in IndexedDB (local storage) of the current domain\r\n    this.fetchAndSaveUserProfile(zoneDetails, activeToken);\r\n  }\r\n\r\n  private fetchAndSaveUserProfile(zoneDetails: ZoneDetails, activeToken: string | null) {\r\n    this.userService.getUserProfile().subscribe({\r\n      next: async (profileRes: any) => {\r\n        try {\r\n          const photoBase64 = profileRes.data.photo ? await this.downloadImageAsBase64(profileRes.data.photo) : '';\r\n\r\n          await this.appdb.insertRecord('userprofile', {\r\n            userID: profileRes.data.userID,\r\n            name: profileRes.data.name,\r\n            emailId: profileRes.data.emailId,\r\n            mobileNo: profileRes.data.mobile_No ,\r\n            username: profileRes.data.username,\r\n            items: profileRes.data.items,\r\n            sid: profileRes.data.iid,\r\n            deptidgst: profileRes.data.deptidgst,\r\n            cidgstdlno: profileRes.data.cidgstdlno,\r\n            licensetypedata: profileRes.data.licensetypedata,\r\n            // Selected Zone details\r\n            appid: zoneDetails.appId || '',\r\n            appname: zoneDetails.appName || '',\r\n            workspaceId: zoneDetails.workspaceId || '',\r\n            workspaceName: zoneDetails.workspaceName || '',\r\n            outletId: zoneDetails.outletId || '',\r\n            outletName: zoneDetails.outletName || '',\r\n            appImage: zoneDetails.appImage || '',\r\n            workspaceImage: zoneDetails.workspaceImage || '',\r\n            outletImage: zoneDetails.outletImage || '',  \r\n\r\n            childIdes: profileRes.data.childides,\r\n            validfrom: profileRes.data.validfrom,\r\n            validupto: profileRes.data.validupto,\r\n            photo: profileRes.data.photo,\r\n            photobase64: photoBase64\r\n          });\r\n          \r\n          // Decide routing AFTER saving to local IndexedDB\r\n          this.decideNextRoute(activeToken, zoneDetails);\r\n        } catch (dbErr) {\r\n          console.error('IndexedDB Error:', dbErr);\r\n          this.toastr.error('Local database error during setup.');\r\n          this.decideNextRoute(activeToken, zoneDetails); \r\n        }\r\n      },\r\n      error: () => {\r\n        this.toastr.error('Failed to fetch user profile');\r\n        this.decideNextRoute(activeToken, zoneDetails); \r\n      },\r\n    });\r\n  }\r\n\r\n  private decideNextRoute(activeToken: string | null, zoneDetails: ZoneDetails) {\r\n    const role = this.tokenservice.getUserRole() || '';\r\n    // If they explicitly selected a zone in the modal, use that. Else use the token claims.\r\n    const checkAppId = zoneDetails.appId || this.tokenservice.getAppId() || '';\r\n    \r\n    const isMedicalApp = checkAppId.split(',').includes('53') && this.config.inventoryUrl;\r\n    \r\n    const currentOrigin = window.location.origin;\r\n    const targetOrigin = this.config.inventoryUrl ? new URL(this.config.inventoryUrl).origin : '';\r\n\r\n    // Redirect to Medical App ONLY IF they are not an Admin.\r\n    // Admins logging in on the Main App should stay on the Main App Dashboard.\r\n    if (isMedicalApp && currentOrigin !== targetOrigin && role !== 'Admin') {\r\n      const payload = {\r\n        token: activeToken,\r\n        refreshToken: this.tokenservice.getRefreshToken(),\r\n        instanceId: this.getInstanceId(),\r\n        timestamp: new Date().getTime(),\r\n      };\r\n      const secureData = CryptoUtils.encryptParams(payload, this.config.cryptoSecret);\r\n      window.location.href = `${this.config.inventoryUrl}/signin?data=${secureData}`;\r\n    } else {\r\n      this.router.navigateByUrl('/dashboard');\r\n    }\r\n  }\r\n\r\n  private async downloadImageAsBase64(url?: string): Promise<string> {\r\n    if (!url || !url.trim()) return '';\r\n    try {\r\n      const res: any = await firstValueFrom(this.userService.downloadFileResult(url));\r\n      if (!res || (res.status !== true && res.Status !== true)) return '';\r\n      \r\n      const dataObj = res.data || res.Data || res;\r\n      const base64Data = dataObj?.fileBase64 || dataObj?.FileBase64 || dataObj?.fileContenctBase64 || dataObj?.FileContenctBase64;\r\n      \r\n      if (base64Data) {\r\n        if (base64Data.startsWith('data:')) return base64Data;\r\n        let cType = (dataObj.contentType || dataObj.ContentType || '').toLowerCase();\r\n        if (!cType || cType === 'application/octet-stream') {\r\n          const ext = url.split(/[/\\\\]/).pop()?.split('.').pop()?.toLowerCase() || '';\r\n          cType = `image/${ext || 'jpeg'}`;\r\n        } else if (!cType.includes('/')) { \r\n          cType = `image/${cType}`; \r\n        }\r\n        return `data:${cType};base64,${base64Data}`;\r\n      }\r\n    } catch (error) { return ''; }\r\n    return '';\r\n  }\r\n\r\n  public getInstanceId(previousId: string = ''): string {\r\n    if (previousId !== '') {\r\n      localStorage.setItem('persistent_device_id', previousId);\r\n      return previousId;\r\n    }\r\n    let id = localStorage.getItem('persistent_device_id');\r\n    if (!id) {\r\n      id = crypto.randomUUID();\r\n      localStorage.setItem('persistent_device_id', id);\r\n    }\r\n    return id;\r\n  }\r\n}","import { Component, Inject, OnInit, inject } from '@angular/core';\r\nimport { FormBuilder, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { UI_HELPER } from '../../shared/ui-helper';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Authservice } from '../../shared/services/user_services/authservice';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { UserService } from '../../shared/services/user_services/userservice';\r\nimport { AppDbServices } from '../../shared/services/db_services/appdbservices';\r\nimport { Tokenservice } from '../../shared/services/user_services/tokenservice';\r\nimport { AppBtn } from '../../shared/components/app-btn/app-btn';\r\nimport { CryptoUtils } from '../../shared/utils/crypto-utils';\r\nimport { MY_APP_CONFIG, MyAppConfig } from '../../shared/app.config.token';\r\nimport { Selectzone } from '../selectzone/selectzone';\r\nimport { AuthFlowService } from '../../shared/services/user_services/auth-flow.service';\r\n\r\n@Component({\r\n  selector: 'app-login',\r\n  imports: [CommonModule, UI_HELPER, AppBtn,Selectzone],\r\n  templateUrl: './login.html',\r\n})\r\nexport class Login implements OnInit {\r\n  // Modal visibility and state flags\r\n  showSelectionModal = false;\r\n  isChoiceRequired = false;\r\n  isSubmitted: boolean = false;\r\n\r\n  // Reactive form instance\r\n  form: any;\r\n\r\n  // Selected Zone Details\r\n  appId: string = '';\r\n  appName: string = '';\r\n  workspaceId: string = '';\r\n  workspaceName: string = '';\r\n  outletId: string = '';\r\n  outletName: string = '';\r\n  appImage: string = '';\r\n  workspaceImage: string = '';\r\n  outletImage: string = '';\r\n\r\n  private authFlowService = inject(AuthFlowService);\r\n\r\n  constructor(\r\n    public formBuilder: FormBuilder,\r\n    private service: Authservice,\r\n    private tokenservice: Tokenservice,\r\n    private router: Router,\r\n    private route: ActivatedRoute,\r\n    private toastr: ToastrService,\r\n    private appdb: AppDbServices,\r\n    private userService: UserService,\r\n    @Inject(MY_APP_CONFIG) private config: MyAppConfig\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    // Subscribe to query parameters to handle different initial states\r\n    this.route.queryParams.subscribe((params: any) => {\r\n      // 1. External Token/Data handling (e.g., redirect from another domain)\r\n      if (params['data']) {\r\n        const decrypted = CryptoUtils.decryptParams(params['data'], this.config.cryptoSecret);\r\n        if (decrypted && decrypted['token'] && decrypted['instanceId']) {\r\n          this.tokenservice.saveToken(decrypted['token']);\r\n          if (decrypted['refreshToken']) {\r\n            this.tokenservice.saveRefreshToken(decrypted['refreshToken']);\r\n          }\r\n          this.authFlowService.getInstanceId(decrypted['instanceId']); // Ensure instance ID is set from external source\r\n          this.handleFinalRedirection(decrypted['token']); // DRY: Logic moved to common method\r\n        }\r\n      }\r\n      \r\n      // 2. Logout handling (Use 'else if' to prevent double execution)\r\n      else if (params['logout'] === 'true') {\r\n        const userid = Number(this.tokenservice.getUserId()) || 0;\r\n        const instanceId = this.authFlowService.getInstanceId();\r\n\r\n        if (userid) {\r\n          // CALL THE API FIRST and wait for the response to invalidate session on server\r\n          this.service.logout(userid, instanceId).subscribe({\r\n            next: () => this.finalizeLogout(),\r\n            error: () => this.finalizeLogout() // Still clean up local data even if API fails\r\n          });\r\n        } else {\r\n          this.finalizeLogout();\r\n        }\r\n      } \r\n      // 3. Normal session check - if already logged in, redirect\r\n      else if (this.tokenservice.isLoggedIn()) {\r\n        this.handleFinalRedirection();\r\n      }\r\n    });\r\n\r\n    // Initialize the login form\r\n    this.form = this.formBuilder.group({\r\n      email: ['', Validators.required],\r\n      password: ['', Validators.required],\r\n      instanceId: [this.authFlowService.getInstanceId()], // Include instance ID for session tracking\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Finalizes the logout process by clearing local tokens, user data,\r\n   * and removing the logout parameter from the URL.\r\n   */\r\nprivate finalizeLogout() {\r\n    this.tokenservice.deleteToken();\r\n    this.appdb.clearUserData();\r\n    \r\n    // NAVIGATE ONLY AFTER API/CLEANUP IS DONE to prevent timing issues\r\n    this.router.navigate([], {\r\n      queryParams: { logout: null },\r\n      queryParamsHandling: 'merge',\r\n      replaceUrl: true,\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Helper method to determine if a form control should display an error.\r\n   * Checks if the control is invalid AND (the form was submitted OR control was touched/dirty).\r\n   */\r\n  hasDisplayableError(controlName: string): Boolean {\r\n    const control = this.form.get(controlName);\r\n    return Boolean(control?.invalid) && (this.isSubmitted || Boolean(control?.touched) || Boolean(control?.dirty));\r\n  }\r\n\r\n  /**\r\n   * Handles the login form submission.\r\n   */\r\n  async onSubmit() {\r\n    this.isSubmitted = true;\r\n    if (this.form.valid) {\r\n      (await this.service.signin(this.form.value)).subscribe({\r\n        next: (res: any) => {\r\n          // The backend returns a Result<T> object: { data, status, message }\r\n          if (!res.status || !res.data || !res.data.token) {\r\n            this.toastr.error(res.message?.[0] || 'Invalid credentials or account not activated.', 'Login failed');\r\n            return;\r\n          }\r\n          // Save tokens upon successful login\r\n          this.tokenservice.saveToken(res.data.token);\r\n          if (res.data.refreshtoken) {\r\n            this.tokenservice.saveRefreshToken(res.data.refreshtoken);\r\n          }\r\n          // Proceed to handle post-login redirection\r\n          this.handleFinalRedirection(res.data.token); \r\n        },\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * STEP 2: POST-LOGIN FLOW & ZONE SELECTION\r\n   */\r\n  private handleFinalRedirection(token?: string) {\r\n    const role = this.tokenservice.getUserRole();\r\n    const activeToken = token || this.tokenservice.getToken();\r\n\r\n    const appId = this.tokenservice.getAppId();\r\n    const workspaceId = this.tokenservice.getWorkspaceId();\r\n    const outletId = this.tokenservice.getOutletId();  \r\n\r\n    // Helper: Count karta hai ki user ke paas kitne zones (Apps/Outlets) hain\r\n    const getCount = (val: any): number => {\r\n      if (!val) return 0;\r\n      const strValue = val.toString();\r\n      const values = strValue.split(',').filter((item: string) => item.trim() !== '');\r\n      return values.length;\r\n    };\r\n\r\n    // Decision logic: If user has multiple apps, workspaces, or outlets, choice is required\r\n    this.isChoiceRequired = getCount(appId) > 1 || \r\n                            getCount(workspaceId) > 1 || \r\n                            getCount(outletId) > 1;\r\n\r\n    // Show selection modal if not an admin, app is not yet selected, and no external inventory URL exists\r\n    if(role !== 'Admin' && !this.appId && !this.config.inventoryUrl) {\r\n      this.showSelectionModal = true; \r\n      return;\r\n    }\r\n\r\n    // Proceed directly if no modal is needed\r\n    this.proceedToAuthFlow(token);\r\n  }\r\n\r\n  /**\r\n   * Navigates to a specified path, using BaseUrl if configured, else Angular Router.\r\n   */\r\n  goTo(path: string) {\r\n    if (this.config.BaseUrl) {\r\n      window.location.href = this.config.BaseUrl + path;\r\n    } else {\r\n      this.router.navigateByUrl(path);\r\n    }\r\n  }\r\n  \r\n  /**\r\n   * Handles the completion of the App/Workspace/Outlet selection modal.\r\n   * Updates component state with selected values and proceeds to final redirection.\r\n   */\r\n  async onSelectionDone(data: any): Promise<void> {\r\n    this.showSelectionModal = false;\r\n    \r\n    // Assigning selected values and capturing text descriptions\r\n    this.appId = data.app.value;\r\n    this.appName = data.app.text;\r\n    this.workspaceId = data.workspace.value;\r\n    this.workspaceName = data.workspace.text;\r\n    this.outletId = data.outlet.value;\r\n    this.outletName = data.outlet.text;\r\n\r\n    this.appImage = data.appImage || '';\r\n    this.workspaceImage = data.workspaceImage || '';\r\n    this.outletImage = data.outletImage || '';\r\n\r\n    console.log('Selected App:', this.appId, this.appName);\r\n    console.log('Selected Workspace:', this.workspaceId, this.workspaceName);\r\n    console.log('Selected Outlet:', this.outletId, this.outletName);   \r\n      \r\n    // Modal se selection hone ke baad Step 3 par jao\r\n    this.proceedToAuthFlow(); \r\n  }\r\n\r\n  /**\r\n   * STEP 3: AUTHORIZATION & HANDOVER TO AUTH-FLOW-SERVICE\r\n   */\r\n  private proceedToAuthFlow(token?: string) {\r\n    const role = this.tokenservice.getUserRole();\r\n    const appId = this.tokenservice.getAppId() || '';\r\n\r\n    // ---------------------------------------------------------\r\n    // ROLE & APP ACCESS VALIDATION\r\n    // ---------------------------------------------------------\r\n    // Condition A: Normal User jiska app Medical (53) hai.\r\n    const isMedicalApp = appId.split(',').includes('53') && this.config.inventoryUrl;\r\n    // Condition B: Admin Role. Admin ko Local Dashboard (4200) ka hamesha access hota hai.\r\n    const isAuthorizedLocal = role === 'Admin' || !this.config.inventoryUrl;\r\n\r\n    // Agar in dono mein se koi ek bhi pass ho gaya, matlab user Authorized hai.\r\n    if (isMedicalApp || isAuthorizedLocal) {\r\n      // STEP 4: AuthFlowService ko call karo. (Ye service data DB me save karegi \r\n      // aur Admin ko Dashboard par, aur Normal User ko Medical App par bhejegi).\r\n      this.authFlowService.handlePostAuthFlow({\r\n        appId: this.appId,\r\n        appName: this.appName,\r\n        workspaceId: this.workspaceId,\r\n        workspaceName: this.workspaceName,\r\n        outletId: this.outletId,\r\n        outletName: this.outletName,\r\n        appImage: this.appImage,\r\n        workspaceImage: this.workspaceImage,\r\n        outletImage: this.outletImage\r\n      }, token);\r\n    } else {\r\n      // Agar user ke paas na Admin role hai aur na hi valid App ID, toh block kar do.\r\n      this.toastr.warning('Unauthorized access to this application.');\r\n      this.tokenservice.deleteToken();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Closes the selection modal and aborts the login process.\r\n   */\r\n  closeSelection() {\r\n    this.showSelectionModal = false;\r\n    this.tokenservice.deleteToken();\r\n  }\r\n}\r\n","\r\n<div class=\"mb-4 d-flex justify-content-between align-items-center\">\r\n  <div>\r\n    <h2 class=\"mb-0 fw-bold\" style=\"color: var(--theme-secondary);\">Sign in</h2>\r\n    <div>Don't have an account?\r\n      <!-- routerLink हटाया, click लगाया -->\r\n      <a href=\"javascript:void(0)\" (click)=\"goTo('/signup')\" class=\"text-decoration-none fw-medium d-inline-block\" style=\"color: var(--theme-primary);\">Sign up</a>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Home Icon के लिए भी click -->\r\n  <a href=\"javascript:void(0)\" (click)=\"goTo('/')\" aria-label=\"Home\" style=\"color: var(--theme-secondary);\">\r\n    <mat-icon>home</mat-icon>\r\n  </a>\r\n</div>\r\n<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\r\n  <div class=\"mb-3\">\r\n    <input class=\"form-control bg-body-secondary\" [class.is-invalid]=\"hasDisplayableError('email')\" placeholder=\"Email\" formControlName=\"email\">\r\n    <div class=\"text-danger small mt-1\" *ngIf=\"hasDisplayableError('email') && form.controls.email.hasError('required')\">\r\n      Please enter your email address.\r\n    </div>\r\n  </div>\r\n  <div class=\"mb-3\">\r\n    <input type=\"password\" class=\"form-control bg-body-secondary\" [class.is-invalid]=\"hasDisplayableError('password')\" placeholder=\"Password\" formControlName=\"password\">\r\n      <div class=\"text-danger small mt-1\" *ngIf=\"hasDisplayableError('password') && form.controls.password.hasError('required')\">\r\n      Please enter your password.\r\n    </div>\r\n  </div>\r\n  <div class=\"text-end mb-3 mt-2\">\r\n    <a href=\"javascript:void(0)\" (click)=\"goTo('/forgotpassword')\" class=\"text-decoration-none fw-medium small\" style=\"color: var(--theme-primary);\">Forgot password?</a>\r\n  </div>\r\n  <div class=\"mt-4\">\r\n    <!-- <button type=\"submit\" class=\"btn btn-success w-100 rounded-3\">\r\n      Sign in\r\n    </button> -->\r\n    <app-loding-btn type=\"submit\" btnClass=\"btn-primary w-100 py-2 fw-bold rounded-3\">\r\n      Sign in\r\n    </app-loding-btn>\r\n  </div>\r\n</form>\r\n\r\n<!-- \r\n@if (showSelectionModal) {\r\n<div class=\"modal-overlay\">\r\n  <div class=\"modal-content shadow-lg border-0 rounded-4\" style=\"max-width: 450px;\">\r\n    <app-select-zone \r\n      (onComplete)=\"onSelectionDone($event)\" \r\n      (onCancel)=\"closeSelection()\">\r\n    </app-select-zone>\r\n  </div>\r\n</div>\r\n} -->\r\n\r\n<div class=\"modal-overlay\" *ngIf=\"showSelectionModal\" \r\n     [style.display]=\"(isChoiceRequired) ? 'flex' : 'none'\">\r\n  <div class=\"modal-content shadow-lg border-0 rounded-4\" style=\"max-width: 450px;\">\r\n    <app-select-zone \r\n      (onComplete)=\"onSelectionDone($event)\" \r\n      (onCancel)=\"closeSelection()\">\r\n    </app-select-zone>\r\n  </div>\r\n</div>","import { Component, OnInit, signal } from '@angular/core';\r\nimport { Router, RouterOutlet, RouterLink, ActivatedRoute } from '@angular/router';\r\nimport { UI_HELPER } from '../../../shared/ui-helper';\r\nimport { Authservice } from '../../../shared/services/user_services/authservice';\r\nimport { claimReq } from '../../../shared/utils/claimReq-utils';\r\nimport { Loadinglistservice } from '../../../shared/services/loadinglistservice';\r\nimport { AppDbServices } from '../../../shared/services/db_services/appdbservices';\r\n// import { Sidebarservice } from 'outlet-hub-common-helper';\r\nimport { Sidebarservice } from '../../../shared/services/sidebarservice';\r\n@Component({\r\n  selector: 'app-main-layout',\r\n  imports: [RouterOutlet, RouterLink, UI_HELPER],\r\n  templateUrl: './main-layout.html',\r\n})\r\nexport class MainLayout implements OnInit {\r\n  userProfile = signal<any>(null);\r\n  constructor(private router: Router, public authService: Authservice, private activatedRoute: ActivatedRoute, public loadinglistService: Loadinglistservice, private appdb: AppDbServices, public sidebarService: Sidebarservice) {\r\n\r\n  }\r\n  ngOnInit(): void {\r\n    this.getUserProfile();\r\n  }\r\n\r\n  onParentClick(event: Event) {\r\n    if (this.sidebarService.isCollapsed()) {\r\n      this.sidebarService.toggle();\r\n    }\r\n  }\r\n\r\n  isParentActive(menu: any): boolean {\r\n    if (menu.menuItemPath) {\r\n      const currentUrl = this.router.url.split('?')[0].replace(/^\\/|\\/$/g, '');\r\n      const targetUrl = menu.menuItemPath.replace(/^\\/|\\/$/g, '');\r\n      if (currentUrl === targetUrl) {\r\n        return true;\r\n      }\r\n    }\r\n    if (menu.childMenuItems && menu.childMenuItems.length > 0) {\r\n      return menu.childMenuItems.some((child: any) => this.isParentActive(child));\r\n    }\r\n    return false;\r\n  }\r\n\r\n  claimReq = claimReq\r\n\r\n  getUserProfile() {\r\n    this.appdb.getAll('userprofile').then((res: any) => {\r\n      if (res && res.length > 0) {\r\n        this.userProfile.set(res[0]);\r\n      }\r\n    }).catch((err) => {\r\n      console.error('Error retrieving user profile:', err);\r\n    });\r\n  }\r\n\r\n}","<div class=\"main-layout\" [class.sidebar-closed]=\"sidebarService.isCollapsed()\">\r\n  @if (!sidebarService.isCollapsed()) {\r\n  <div class=\"sidebar-backdrop d-md-none\" (click)=\"sidebarService.toggle()\"></div>\r\n  }\r\n  <!-- Sidebar -->\r\n  <nav id=\"sidebar\">\r\n    <div class=\"brand-section px-2 py-3 text-center\">\r\n      <a class=\"navbar-brand d-flex align-items-center justify-content-center\" routerLink=\"/dashboard\"\r\n        style=\"text-decoration: none;\">\r\n        <mat-icon class=\"flex-shrink-0 text-primary me-2\"\r\n          style=\"font-size: 28px; width: 28px; height: 28px;\">shield</mat-icon>\r\n        <span class=\"sidebar-text fs-5 text-uppercase\">\r\n          <span class=\"fw-bold tracking-tight text-primary\">ADMIN</span><span class=\"fw-light text-dark\">PANEL</span>\r\n        </span>\r\n      </a>\r\n    </div>\r\n\r\n    <ul class=\"nav flex-column w-100 mt-2\" id=\"sidebar-accordion\">\r\n      @if (userProfile(); as profile) {\r\n      @for (menu of profile.items; track menu.menuItemId) {\r\n\r\n      <!-- LEVEL 1: Single Link -->\r\n      @if (!menu.childMenuItems?.length) {\r\n      <li class=\"nav-item\">\r\n        <a class=\"nav-link\" [routerLink]=\"menu.menuItemPath\" routerLinkActive=\"active\"\r\n          [matTooltip]=\"sidebarService.isCollapsed() ? menu.menuName : ''\" matTooltipPosition=\"right\">\r\n          <mat-icon>{{ menu.gifIcon?.toLowerCase() || 'link' }}</mat-icon>\r\n          <span class=\"sidebar-text ms-3\">{{ menu.menuName }}</span>\r\n        </a>\r\n      </li>\r\n      }\r\n\r\n      <!-- LEVEL 1: Parent with Children -->\r\n      @else {\r\n      <li class=\"nav-item\">\r\n        <a class=\"nav-link d-flex align-items-center\" data-bs-toggle=\"collapse\" [href]=\"'#menu' + menu.menuItemId\"\r\n          [class.active]=\"isParentActive(menu)\" [matTooltip]=\"sidebarService.isCollapsed() ? menu.menuName : ''\"\r\n          matTooltipPosition=\"right\" (click)=\"onParentClick($event)\">\r\n          <mat-icon>{{ menu.gifIcon?.toLowerCase() || 'folder' }}</mat-icon>\r\n          <span class=\"sidebar-text ms-3\">{{ menu.menuName }}</span>\r\n          <mat-icon class=\"ms-auto sidebar-text\" style=\"font-size: 18px;\">expand_more</mat-icon>\r\n        </a>\r\n\r\n        <!-- LEVEL 2 CONTAINER -->\r\n        <div class=\"collapse\" [id]=\"'menu' + menu.menuItemId\" data-bs-parent=\"#sidebar-accordion\">\r\n          <ul class=\"nav flex-column border-start ms-4\">\r\n            @for (sub of menu.childMenuItems; track sub.menuItemId) {\r\n\r\n            <!-- LEVEL 2: Simple Link -->\r\n            @if (!sub.childMenuItems?.length) {\r\n            <li class=\"nav-item\">\r\n              <a class=\"nav-link py-2 sub-link d-flex align-items-center\" [routerLink]=\"sub.menuItemPath\"\r\n                routerLinkActive=\"active\" [matTooltip]=\"sidebarService.isCollapsed() ? sub.menuName : ''\"\r\n                matTooltipPosition=\"right\">\r\n                <mat-icon style=\"font-size: 20px; width: 20px; height: 20px;\">{{ sub.gifIcon?.toLowerCase() ||\r\n                  'chevron_right' }}</mat-icon>\r\n                <span class=\"sidebar-text ms-2\">{{ sub.menuName }}</span>\r\n              </a>\r\n            </li>\r\n            }\r\n\r\n            <!-- LEVEL 2: Parent with Grandchildren (LEVEL 3) -->\r\n            @else {\r\n            <li class=\"nav-item\">\r\n              <a class=\"nav-link py-2 sub-link d-flex align-items-center\" data-bs-toggle=\"collapse\"\r\n                [href]=\"'#submenu' + sub.menuItemId\" [class.active]=\"isParentActive(sub)\"\r\n                [matTooltip]=\"sidebarService.isCollapsed() ? sub.menuName : ''\" matTooltipPosition=\"right\">\r\n                <mat-icon style=\"font-size: 20px; width: 20px; height: 20px;\">{{ sub.gifIcon?.toLowerCase() ||\r\n                  'folder_open' }}</mat-icon>\r\n                <span class=\"sidebar-text ms-2\">{{ sub.menuName }}</span>\r\n                <mat-icon class=\"ms-auto sidebar-text\" style=\"font-size: 16px;\">expand_more</mat-icon>\r\n              </a>\r\n\r\n              <!-- LEVEL 3 CONTAINER -->\r\n              <div class=\"collapse\" [id]=\"'submenu' + sub.menuItemId\">\r\n                <ul class=\"nav flex-column border-start ms-3\">\r\n                  @for (grand of sub.childMenuItems; track grand.menuItemId) {\r\n                  <li class=\"nav-item\">\r\n                    <a class=\"nav-link py-1 text-muted small d-flex align-items-center\"\r\n                      [routerLink]=\"grand.menuItemPath\" routerLinkActive=\"active\"\r\n                      [matTooltip]=\"sidebarService.isCollapsed() ? grand.menuName : ''\" matTooltipPosition=\"right\">\r\n                      <mat-icon style=\"font-size: 18px; width: 18px; height: 18px;\">{{ grand.gifIcon?.toLowerCase() ||\r\n                        'circle' }}</mat-icon>\r\n                      <span class=\"sidebar-text ms-2\">{{ grand.menuName }}</span>\r\n                    </a>\r\n                  </li>\r\n                  }\r\n                </ul>\r\n              </div>\r\n            </li>\r\n            }\r\n            }\r\n          </ul>\r\n        </div>\r\n      </li>\r\n      }\r\n      }\r\n      }\r\n    </ul>\r\n\r\n\r\n\r\n  </nav>\r\n\r\n  <!-- Content Area -->\r\n  <div id=\"main-scroll-content\">\r\n\r\n\r\n    <router-outlet></router-outlet>\r\n\r\n  </div>\r\n</div>","import { HttpClient } from '@angular/common/http';\r\nimport { MY_APP_CONFIG } from '../../app.config.token';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { CommanRequest, MessageEF, Result,Addusermodel, Listitems  } from '../../model';\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class Manageuserservice {\r\n  private config = inject(MY_APP_CONFIG);\r\n  private http = inject(HttpClient);\r\n\r\n  fetchUserList(request: CommanRequest): Observable<Result<Addusermodel[]>> {\r\n    return this.http.post<Result<Addusermodel[]>>(`${this.config.apiBaseUrl}/AddUser/GetUserList`, request);\r\n  }\r\n\r\n  getRole(request: CommanRequest): Observable<Result<Listitems[]>> {\r\n    return this.http.post<Result<Listitems[]>>(`${this.config.apiBaseUrl}/AddUser/GetRole`, request);\r\n  }\r\n\r\n  addUpdateUser(formData: Addusermodel): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(`${this.config.apiBaseUrl}/AddUser/AddUpdateUser`, formData);\r\n  }\r\n\r\n  activationUser(request: CommanRequest): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(`${this.config.apiBaseUrl}/AddUser/ActivationUser`, request);\r\n  }\r\n}\r\n","import { Component, Input, Output, EventEmitter, inject, ChangeDetectorRef, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { UserService } from '../../services/user_services/userservice';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport { MY_APP_CONFIG } from '../../app.config.token';\r\nimport { Myfilerequest } from '../../model';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n// Global static cache so we never download the same image twice across the app\r\nexport const FileGlobalCache = new Map<string, string>();\r\n\r\n@Component({\r\n  selector: 'app-file-upload',\r\n  standalone: true,\r\n  imports: [CommonModule, MatIconModule, MatFormFieldModule, MatInputModule, MatButtonModule],\r\n  templateUrl: './file-upload.html'\r\n})\r\nexport class FileUpload implements OnChanges {\r\n  @Input() label: string = 'Upload File';\r\n  @Input() fieldName!: string;\r\n  @Input() folderName!: string;\r\n  @Input() required: boolean = false;\r\n  @Input() allowedExtensions: string[] = ['jpg', 'jpeg', 'png','jfif']; // Default allowed types\r\n  @Input() maxFileSizeMB: number = 2; // Default 2MB limit\r\n  \r\n  @Input() existingFilePath?: string | null;\r\n  @Input() preloadedBase64?: string | null;\r\n\r\n  get acceptAttribute(): string {\r\n    return this.allowedExtensions.length > 0 ? this.allowedExtensions.map(ext => `.${ext}`).join(',') : '*';\r\n  }\r\n\r\n  @Output() onUploadComplete = new EventEmitter<{ fieldName: string, path: string, base64: string, fileReq: Myfilerequest }>();\r\n  @Output() onUploadStateChange = new EventEmitter<boolean>();\r\n  \r\n  preview: SafeUrl | string | null = null;\r\n  isUploading = false;\r\n  \r\n  private config = inject(MY_APP_CONFIG);\r\n  private userService = inject(UserService);\r\n  private toastr = inject(ToastrService);\r\n  private cdr = inject(ChangeDetectorRef);\r\n  private sanitizer = inject(DomSanitizer);\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    // If we already downloaded this exact file path elsewhere, inject it to bypass server calls\r\n    if (this.existingFilePath && FileGlobalCache.has(this.existingFilePath) && (!this.preloadedBase64 || this.preloadedBase64 === 'existing_file')) {\r\n      this.preloadedBase64 = FileGlobalCache.get(this.existingFilePath);\r\n    }\r\n\r\n    if (changes['existingFilePath'] || changes['preloadedBase64']) {\r\n      if (this.preloadedBase64 && this.preloadedBase64 !== 'existing_file') {\r\n        this.isUploading = false;\r\n        let finalUrl = this.preloadedBase64;\r\n        if (!finalUrl.startsWith('data:')) {\r\n          const ext = this.existingFilePath?.split('.').pop()?.toLowerCase() || 'jpeg';\r\n          finalUrl = `data:image/${ext};base64,${finalUrl}`;\r\n        }\r\n        \r\n        // Store in cache for future renders\r\n        if (this.existingFilePath) FileGlobalCache.set(this.existingFilePath, finalUrl);\r\n        \r\n        this.preview = this.sanitizer.bypassSecurityTrustUrl(finalUrl);\r\n        this.cdr.detectChanges();\r\n      } else if (this.existingFilePath) {\r\n        this.loadExistingImage();\r\n      } else {\r\n        this.preview = null;\r\n      }\r\n    }\r\n  }\r\n\r\n  private loadExistingImage() {\r\n    // Double check cache right before hitting the API\r\n    if (this.existingFilePath && FileGlobalCache.has(this.existingFilePath)) {\r\n      this.preview = this.sanitizer.bypassSecurityTrustUrl(FileGlobalCache.get(this.existingFilePath)!);\r\n      this.isUploading = false;\r\n      this.cdr.detectChanges();\r\n      return;\r\n    }\r\n\r\n    this.isUploading = true;\r\n    this.userService.downloadFileResult(this.existingFilePath!).subscribe({\r\n      next: (res: any) => {\r\n        if (res && res.status === false) {\r\n          this.preview = null;\r\n          this.isUploading = false;\r\n          this.cdr.detectChanges();\r\n          return;\r\n        }\r\n\r\n        const dataObj = res?.data || res;\r\n        const base64Data = dataObj?.fileBase64 || dataObj?.fileContenctBase64 || dataObj?.fileContentBase64 || dataObj?.FileContenctBase64;\r\n        if (base64Data) {\r\n          let cType = (dataObj.contentType || '').toLowerCase();\r\n          if (!cType || cType === 'application/octet-stream') {\r\n            const ext = this.existingFilePath!.split('.').pop()?.toLowerCase() || '';\r\n            cType = `image/${ext || 'jpeg'}`;\r\n          } else if (!cType.includes('/')) {\r\n            cType = `image/${cType}`;\r\n          }\r\n          const finalUrl = `data:${cType};base64,${base64Data}`;\r\n          \r\n          if (this.existingFilePath) FileGlobalCache.set(this.existingFilePath, finalUrl);\r\n          this.preview = this.sanitizer.bypassSecurityTrustUrl(finalUrl);\r\n        }\r\n        this.isUploading = false;\r\n        this.cdr.detectChanges();\r\n      },\r\n      error: () => {\r\n        this.isUploading = false;\r\n        this.cdr.detectChanges();\r\n      }\r\n    });\r\n  }\r\n\r\n  onFileSelect(event: Event): void {\r\n    const target = event.target as HTMLInputElement;\r\n    const file = target.files?.[0];\r\n    if (!file) return;\r\n\r\n    // 1. File Size Validation\r\n    const fileSizeMB = file.size / (1024 * 1024);\r\n    if (fileSizeMB > this.maxFileSizeMB) {\r\n      this.toastr.error(`File size must be less than ${this.maxFileSizeMB}MB.`, 'File Too Large');\r\n      target.value = ''; // Reset input to allow re-selection\r\n      return;\r\n    }\r\n\r\n    // 2. File Extension Validation\r\n    const fileExt = file.name.split('.').pop()?.toLowerCase() || '';\r\n    if (this.allowedExtensions.length > 0 && !this.allowedExtensions.includes(fileExt)) {\r\n      this.toastr.error(`Invalid file type. Allowed: ${this.allowedExtensions.join(', ')}`, 'Invalid File');\r\n      target.value = ''; // Reset input to allow re-selection\r\n      return;\r\n    }\r\n\r\n    const reader = new FileReader();\r\n    reader.onload = () => {\r\n      const base64 = reader.result as string;\r\n      \r\n      setTimeout(() => {\r\n        this.isUploading = true;\r\n        this.preview = this.sanitizer.bypassSecurityTrustUrl(base64);\r\n        this.onUploadStateChange.emit(true);\r\n        this.cdr.detectChanges();\r\n\r\n        const uniqueName = `${Date.now()}_${file.name}`;\r\n        const fileReq: Myfilerequest = {\r\n          fileName: uniqueName,\r\n          fileContenctBase64: base64.split(',')[1],\r\n          folderName: `${this.config.ParentFolder}\\\\${this.folderName}`,\r\n          fileNameWithPath: `${this.config.ParentFolder}\\\\${this.folderName}\\\\${uniqueName}`\r\n        };\r\n\r\n        this.userService.saveFileResult(fileReq).subscribe({\r\n          next: (res: any) => {\r\n            // Double check both the outer wrapper status AND the inner MessageEF status to prevent false positives\r\n            const isReallySuccess = res.status && (!res.data || (res.data.status !== 'Error' && res.data.status !== 'Error'));\r\n\r\n            if (isReallySuccess) {\r\n              this.isUploading = false;\r\n              this.onUploadStateChange.emit(false);\r\n              this.onUploadComplete.emit({ fieldName: this.fieldName, path: fileReq.fileNameWithPath!, base64, fileReq });\r\n              this.toastr.success(res.data?.msg || res.message?.[0] || `${file.name} uploaded successfully.`, 'Success');\r\n              this.cdr.detectChanges();\r\n            } else {\r\n              this.isUploading = false;\r\n              this.onUploadStateChange.emit(false);\r\n              this.toastr.error(res.message?.[0] || res.data?.msg || 'Operation failed', 'Error');\r\n              this.preview = null;\r\n              target.value = '';\r\n              this.cdr.detectChanges();\r\n            }\r\n          },\r\n          error: (err) => {\r\n            this.isUploading = false;\r\n            this.onUploadStateChange.emit(false);\r\n            this.toastr.error(`Failed to upload ${file.name}. Server error.`, 'Error');\r\n            this.preview = null;\r\n            target.value = '';\r\n            this.cdr.detectChanges();\r\n          }\r\n        });\r\n      });\r\n    };\r\n    reader.readAsDataURL(file);\r\n  }\r\n}\r\n","<div class=\"file-upload-container w-100\">\r\n  <mat-form-field appearance=\"outline\" class=\"w-100\" (click)=\"!isUploading && fileInput.click()\" style=\"cursor: pointer;\">\r\n    <mat-label>{{ label }}</mat-label>\r\n    <mat-icon matPrefix class=\"text-muted\" style=\"margin-right: 8px;\">{{ preview ? 'image' : 'cloud_upload' }}</mat-icon>\r\n    \r\n    <!-- Readonly input acting as a placeholder to trigger the file picker -->\r\n    <input matInput [value]=\"preview ? 'Image selected successfully' : 'Choose a file to upload...'\" \r\n           readonly [required]=\"required\" \r\n           style=\"cursor: pointer; pointer-events: none;\" />\r\n    \r\n    <button mat-icon-button matSuffix type=\"button\" [disabled]=\"isUploading\" color=\"primary\" \r\n            (click)=\"!isUploading && fileInput.click(); $event.stopPropagation()\">\r\n      <mat-icon *ngIf=\"!isUploading\">{{ preview ? 'edit' : 'attach_file' }}</mat-icon>\r\n      <div *ngIf=\"isUploading\" class=\"spinner-border spinner-border-sm text-primary\" role=\"status\"></div>\r\n    </button>\r\n  </mat-form-field>\r\n\r\n  <!-- Hidden actual file input -->\r\n  <input #fileInput type=\"file\" [id]=\"fieldName\" class=\"d-none\" [accept]=\"acceptAttribute\" (change)=\"onFileSelect($event)\" [disabled]=\"isUploading\" />\r\n\r\n  <!-- Image Preview -->\r\n  <div *ngIf=\"preview\" class=\"mt-n2 mb-2 preview-container text-center text-md-start\">\r\n    <img [src]=\"preview\" alt=\"Preview\" class=\"shadow-sm rounded\" style=\"max-height: 120px; object-fit: cover; border: 1px solid #dee2e6;\" />\r\n  </div>\r\n</div>","import { Injectable } from '@angular/core';\r\nimport { driver, DriveStep } from 'driver.js';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class TourService {\r\n  \r\n  // Global Check: Default false. Ise true karne par hi tours chalenge.\r\n  public isTourEnabled: boolean = true;\r\n\r\n  // Individual Tour Check: Yaha se aap kisi bhi specific tour ko on/off kar sakte hain.\r\n  // Ise baad me DB ke API response se override kiya ja sakta hai.\r\n  public tourVisibility: Record<string, boolean> = {\r\n    'application_list': true,\r\n    'add_application_form': true,\r\n    'subscription_list': true,\r\n    'add_subscription': true,\r\n    'subscription_log_list': true,\r\n    'pricing_page': true,\r\n    'outlet_list': true,\r\n    'add_outlet_form': true,\r\n    'add_outlet_step2': true,\r\n    'workspace_list': true,\r\n    'add_workspace_form': true,\r\n    'add_workspace_step2': true,\r\n    'user_list': true,\r\n    'add_user_form': true,\r\n    'user_rights': true,\r\n    'user_mapping': true,\r\n    'user_profile': true\r\n  };\r\n\r\n  // In-memory record: Jo tours is session me chal chuke hain, unka record rakhega\r\n  private completedTours = new Set<string>();\r\n  private activeDriver: any = null; // Track current running tour\r\n  private clickListener: any = null;\r\n\r\n  // tourId: Har page ke liye ek unique id bhejein (jaise: 'application_list')\r\n  // steps: Us page ke specific tour steps\r\n  startTour(tourId: string, steps: DriveStep[]) {\r\n    \r\n    // 1. Global Check\r\n    if (!this.isTourEnabled) {\r\n      return; // Agar explicitly 'true' set nahi hai, toh koi bhi tour nahi chalega\r\n    }\r\n\r\n    // 2. Individual Tour Check\r\n    if (this.tourVisibility[tourId] === false) {\r\n      return; // Agar is specific tour ko false set kiya gaya hai, toh ye nahi chalega\r\n    }\r\n\r\n    // 2. Specific Check: Kya user ne yeh specific tour is session me dekh liya hai?\r\n    // if (this.completedTours.has(tourId)) {\r\n    //   return; // Agar haan, toh dobara start nahi hoga\r\n    // }\r\n\r\n    // Destroy any currently active tour to prevent overlapping\r\n    if (this.activeDriver) {\r\n      try { this.activeDriver.destroy(); } catch (e) {}\r\n    }\r\n    \r\n    if (this.clickListener) {\r\n      document.removeEventListener('click', this.clickListener);\r\n    }\r\n\r\n    // 3. Global Beautiful Configuration for Driver.js\r\n    const driverObj = driver({\r\n      showProgress: false,\r\n      animate: false,\r\n      allowClose: true,\r\n      stagePadding: 0, // Element ke chaaron taraf ka gap zero karta hai\r\n      popoverOffset: 0, // Element aur Pop-up ke beech ka margin zero karta hai\r\n      doneBtnText: 'Got it! ✨',\r\n      nextBtnText: 'Next &rarr;',\r\n      prevBtnText: '&larr; Prev',\r\n      onHighlightStarted: (element) => {\r\n        setTimeout(() => {\r\n          // Hide the overlay completely so the user can click ANYWHERE on the page\r\n          const overlay = document.querySelector('.driver-overlay') as HTMLElement;\r\n          if (overlay) {\r\n            overlay.style.opacity = '0';\r\n            overlay.style.pointerEvents = 'none';\r\n          }\r\n        }, 10);\r\n      },\r\n      onPopoverRender: (popover) => {\r\n        if (this.clickListener) document.removeEventListener('click', this.clickListener);\r\n        \r\n        // Close tour if the user clicks anywhere outside the popover (like interacting with the app)\r\n        this.clickListener = (e: MouseEvent) => {\r\n          if (popover && popover.wrapper && !popover.wrapper.contains(e.target as Node)) {\r\n            try { this.activeDriver?.destroy(); } catch(err) {}\r\n            document.removeEventListener('click', this.clickListener);\r\n            this.clickListener = null;\r\n          }\r\n        };\r\n        setTimeout(() => document.addEventListener('click', this.clickListener), 100);\r\n      },\r\n      onDestroyed: () => {\r\n        // 3. Jaise hi tour finish ya skip ho, in-memory variable me update kar dein\r\n        this.completedTours.add(tourId);\r\n        this.activeDriver = null;\r\n        if (this.clickListener) document.removeEventListener('click', this.clickListener);\r\n        this.clickListener = null;\r\n      },\r\n      steps: steps\r\n    });\r\n\r\n    // 4. Start the tour\r\n    this.activeDriver = driverObj;\r\n    driverObj.drive();\r\n  }\r\n}","import { Injectable, inject } from '@angular/core';\r\nimport { TourService } from './tour.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class UserTourService {\r\n  private tourService = inject(TourService);\r\n\r\n  // Flow 1: User List Page\r\n  startUserListTour() {\r\n    const steps: any[] = [];\r\n    if (document.querySelector('#tour-add-btn')) steps.push({ element: '#tour-add-btn', popover: { title: '✨ Add New User', description: 'Click here to create a new user account.', side: 'left', align: 'start' } });\r\n    if (document.querySelector('.tour-edit-btn')) steps.push({ element: '.tour-edit-btn', popover: { title: '✏️ Edit User', description: 'Use this button to modify an existing user profile.', side: 'left', align: 'start' } });\r\n    \r\n    if (steps.length > 0) {\r\n      this.tourService.startTour('user_list', steps);\r\n    }\r\n  }\r\n\r\n  // Flow 2: Add User Form Page\r\n  startAddUserTour() {\r\n    const steps: any[] = [];\r\n    if (document.querySelector('#tour-user-role')) steps.push({ element: '#tour-user-role', popover: { title: '🎭 Assign Role', description: 'Select the appropriate role for this user.', side: 'top', align: 'start' } });\r\n    if (document.querySelector('#tour-user-name')) steps.push({ element: '#tour-user-name', popover: { title: '🔤 User Name', description: 'Enter the full name of the user.', side: 'top', align: 'start' } });\r\n    if (document.querySelector('#tour-user-mobile')) steps.push({ element: '#tour-user-mobile', popover: { title: '📱 Mobile Number', description: 'Enter a valid 10-digit mobile number.', side: 'top', align: 'start' } });\r\n    if (document.querySelector('#tour-user-email')) steps.push({ element: '#tour-user-email', popover: { title: '📧 Email Address', description: 'Enter a valid email address for login.', side: 'top', align: 'start' } });\r\n    if (document.querySelector('#tour-user-submit')) steps.push({ element: '#tour-user-submit', popover: { title: '💾 Save User', description: 'Click here to save the new user.', side: 'top', align: 'end' } });\r\n    \r\n    if (steps.length > 0) {\r\n      this.tourService.startTour('add_user_form', steps);\r\n    }\r\n  }\r\n\r\n  // Flow 3: User Rights / Access Permission Page\r\n  startUserRightsTour() {\r\n    const steps: any[] = [];\r\n    if (document.querySelector('#tour-rights-user')) steps.push({ element: '#tour-rights-user', popover: { title: '👤 Select User', description: 'Choose a user from the dropdown to manage their access rights.', side: 'bottom', align: 'start' } });\r\n    if (document.querySelector('#tour-rights-tree')) steps.push({ element: '#tour-rights-tree', popover: { title: '🔐 Access Permissions', description: 'Check or uncheck the modules to grant or revoke access.', side: 'top', align: 'start' } });\r\n    if (document.querySelector('#tour-rights-submit')) steps.push({ element: '#tour-rights-submit', popover: { title: '💾 Save Rights', description: 'Save the updated permissions for the user.', side: 'top', align: 'end' } });\r\n    \r\n    if (steps.length > 0) {\r\n      this.tourService.startTour('user_rights', steps);\r\n    }\r\n  }\r\n\r\n  // Flow 4: User Mapping Page (STEP 1)\r\n  startUserMappingTour() {\r\n    const steps: any[] = [];\r\n    if (document.querySelector('#tour-mapping-user')) steps.push({ element: '#tour-mapping-user', popover: { title: '👤 Select User', description: 'Choose a user to manage their application mappings.', side: 'bottom', align: 'start' } });\r\n    if (document.querySelector('#tour-mapping-drag1')) steps.push({ element: '#tour-mapping-drag1', popover: { title: '📱 Map Applications', description: 'Drag applications from available to assigned lists.', side: 'top', align: 'start' } });\r\n    if (document.querySelector('#tour-mapping-next1')) steps.push({ element: '#tour-mapping-next1', popover: { title: '➡️ Next Step', description: 'Click here to proceed to Workspaces.', side: 'top', align: 'end' } });\r\n    \r\n    if (steps.length > 0) {\r\n      this.tourService.startTour('user_mapping', steps);\r\n    }\r\n  }\r\n\r\n  // Flow 4: User Mapping Page (STEP 2)\r\n  startUserMappingStep2Tour() {\r\n    const steps: any[] = [];\r\n    if (document.querySelector('#tour-mapping-drag2')) steps.push({ element: '#tour-mapping-drag2', popover: { title: '🏢 Map Workspaces', description: 'Drag workspaces from available to assigned lists.', side: 'top', align: 'start' } });\r\n    if (document.querySelector('#tour-mapping-next2')) steps.push({ element: '#tour-mapping-next2', popover: { title: '➡️ Next Step', description: 'Click here to proceed to Outlets.', side: 'top', align: 'end' } });\r\n    \r\n    if (steps.length > 0) {\r\n      this.tourService.startTour('user_mapping_step2', steps);\r\n    }\r\n  }\r\n\r\n  // Flow 4: User Mapping Page (STEP 3)\r\n  startUserMappingStep3Tour() {\r\n    const steps: any[] = [];\r\n    if (document.querySelector('#tour-mapping-drag3')) steps.push({ element: '#tour-mapping-drag3', popover: { title: '🏪 Map Outlets', description: 'Drag outlets from available to assigned lists.', side: 'top', align: 'start' } });\r\n    if (document.querySelector('#tour-mapping-submit')) steps.push({ element: '#tour-mapping-submit', popover: { title: '💾 Save Mapping', description: 'Click here to save all the assigned mappings.', side: 'top', align: 'end' } });\r\n    \r\n    if (steps.length > 0) {\r\n      this.tourService.startTour('user_mapping_step3', steps);\r\n    }\r\n  }\r\n\r\n  // Flow 5: User Profile Page\r\n  startUserProfileTour() {\r\n    const steps: any[] = [];\r\n\r\n    if (document.querySelector('#tour-profile-role')) steps.push({ element: '#tour-profile-role', popover: { title: '🎭 User Role', description: 'Your current assigned role.', side: 'top', align: 'start' } });\r\n    if (document.querySelector('#tour-profile-name')) steps.push({ element: '#tour-profile-name', popover: { title: '🔤 Full Name', description: 'Update your full name.', side: 'top', align: 'start' } });\r\n    if (document.querySelector('#tour-profile-mobile')) steps.push({ element: '#tour-profile-mobile', popover: { title: '📱 Mobile Number', description: 'Update your 10-digit mobile number.', side: 'top', align: 'start' } });\r\n    if (document.querySelector('#tour-profile-email')) steps.push({ element: '#tour-profile-email', popover: { title: '📧 Email Address', description: 'Update your email address.', side: 'top', align: 'start' } });\r\n    if (document.querySelector('#tour-profile-photo')) steps.push({ element: '#tour-profile-photo', popover: { title: '🖼️ Profile Photo', description: 'Upload or update your profile picture here.', side: 'bottom', align: 'center' } });\r\n    if (document.querySelector('#tour-profile-submit')) steps.push({ element: '#tour-profile-submit', popover: { title: '💾 Update Profile', description: 'Click here to save your profile changes.', side: 'top', align: 'end' } });\r\n\r\n    if (steps.length > 0) {\r\n      this.tourService.startTour('user_profile', steps);\r\n    }\r\n  }\r\n\r\n  // Flow 6: Change Password Page\r\n  startChangePasswordTour() {\r\n    const steps: any[] = [];\r\n\r\n    if (document.querySelector('#tour-cp-old')) steps.push({ element: '#tour-cp-old', popover: { title: '🔑 Old Password', description: 'Enter your current password here.', side: 'top', align: 'start' } });\r\n    if (document.querySelector('#tour-cp-new')) steps.push({ element: '#tour-cp-new', popover: { title: '🔐 New Password', description: 'Enter a strong new password.', side: 'top', align: 'start' } });\r\n    if (document.querySelector('#tour-cp-confirm')) steps.push({ element: '#tour-cp-confirm', popover: { title: '✅ Confirm Password', description: 'Re-enter your new password to confirm.', side: 'top', align: 'start' } });\r\n    if (document.querySelector('#tour-cp-submit')) steps.push({ element: '#tour-cp-submit', popover: { title: '💾 Update Password', description: 'Click here to update your password.', side: 'top', align: 'end' } });\r\n\r\n    if (steps.length > 0) {\r\n      this.tourService.startTour('change_password', steps);\r\n    }\r\n  }\r\n}\r\n","import { ChangeDetectorRef, Component, effect, inject, input, OnInit, output, signal } from '@angular/core';\r\nimport { AppHeader } from '../../../../shared/components/app-header/app-header';\r\n\r\nimport { Manageuserservice } from '../../../../shared/services/adminpanel_services/manageuserservice';\r\nimport { Addusermodel, Listitems, Myfilerequest } from '../../../../shared/model';\r\nimport { Tokenservice } from '../../../../shared/services/user_services/tokenservice';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { AppBtn } from '../../../../shared/components/app-btn/app-btn';\r\nimport { UI_HELPER } from '../../../../shared/ui-helper';\r\nimport { AbstractControl, AsyncValidatorFn, FormBuilder, FormGroup, ReactiveFormsModule, ValidationErrors, Validators } from '@angular/forms';\r\nimport { FileUpload } from '../../../../shared/components/file-upload/file-upload';\r\nimport { UserService } from '../../../../shared/services/user_services/userservice';\r\nimport { MY_APP_CONFIG,MyAppConfig } from '../../../../shared/app.config.token';\r\nimport { Observable, of, switchMap, map, catchError, timer, first } from 'rxjs';\r\nimport { Authservice } from '../../../../shared/services/user_services/authservice';\r\nimport { UserTourService } from '../../../../shared/services/apptour/user-tour.service';\r\n\r\n@Component({\r\n  selector: 'app-adduser',\r\n  imports: [ReactiveFormsModule, UI_HELPER, AppBtn, AppHeader, FileUpload],\r\n  templateUrl: './adduser.html',\r\n})\r\nexport class Adduser  implements OnInit {\r\n config = inject(MY_APP_CONFIG);\r\n  private fb = inject(FormBuilder);\r\n  private userService = inject(Manageuserservice);\r\n  private globalUserService = inject(UserService);\r\n  private tokenService = inject(Tokenservice);\r\n  private toastr = inject(ToastrService);\r\n  private authService = inject(Authservice);\r\n  private cdr = inject(ChangeDetectorRef);\r\n  private userTourService = inject(UserTourService);\r\n\r\n  editData = input<Addusermodel | null>(null);\r\n  onSave = output<Addusermodel>();\r\n  onCancel = output<void>();\r\n\r\n  parentID = 0;\r\n  roleTypes = signal<Listitems[]>([]);\r\n  photoPreview: string | null = null;\r\n  imageBase64: string | null = null;\r\n  userForm: FormGroup;\r\n\r\n  isUploadingPhoto = false;\r\n  private newlyUploadedFiles: Myfilerequest[] = [];\r\n\r\n  constructor() {\r\n    \r\n    this.userForm = this.initForm();\r\n\r\n    effect(() => {\r\n      const data = this.editData();\r\n      if (data) {\r\n        this.userForm.patchValue({\r\n          ...data,\r\n          photoBase64: data.photoBase64 || (data.photo ? 'existing_file' : null)\r\n        });\r\n\r\n        setTimeout(() => {\r\n          this.photoPreview = data.photo || null;\r\n          this.imageBase64 = data.photoBase64 || null;\r\n          this.cdr.detectChanges();\r\n        });\r\n      } else {\r\n        this.resetForm();\r\n      }\r\n    });\r\n  }\r\n\r\n  private initForm(): FormGroup {\r\n    return this.fb.group({\r\n      userID: [0],\r\n      parentID: [0],\r\n      roleId: ['', Validators.required],\r\n      name: ['', [\r\n        Validators.required, \r\n        Validators.minLength(3), \r\n        Validators.maxLength(50), \r\n        Validators.pattern(/^(?=.*[a-zA-Z])[a-zA-Z\\s\\.\\-']+$/),\r\n        (c: AbstractControl) => c.value && typeof c.value === 'string' && c.value.startsWith(' ') ? { whitespace: true } : null\r\n      ]],\r\n      mobile_No: ['', [Validators.required, Validators.pattern('^[0-9]{10}$')]],\r\n      emailId: ['', [Validators.required, Validators.email], [this.emailExistsValidator()]],\r\n      designation: [''],\r\n      photo: [''],\r\n      photoBase64: [null]\r\n    });\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.parentID = Number(this.tokenService.getUserId())||0;\r\n    this.loadRoles();\r\n\r\n    // Form load hone ke thodi der baad tour ko automatically start karein\r\n    setTimeout(() => {\r\n      this.userTourService.startAddUserTour();\r\n    }, 500);\r\n  }\r\n\r\n  loadRoles() {\r\n    this.userService.getRole({ userID: this.parentID }).subscribe(res => {\r\n      if (res.status) this.roleTypes.set(res.data);\r\n    });\r\n  }\r\n\r\n  handleUploadComplete(data: { fieldName: string, path: string, base64: string, fileReq: Myfilerequest }) {\r\n    this.userForm.patchValue({ [data.fieldName]: data.base64 });\r\n    if (data.fieldName === 'photoBase64') {\r\n      this.userForm.patchValue({ photo: data.path });\r\n    }\r\n    this.newlyUploadedFiles.push(data.fileReq);\r\n  }\r\n\r\n  handleUploadState(fieldName: string, isUploading: boolean) {\r\n    if (fieldName === 'photoBase64') this.isUploadingPhoto = isUploading;\r\n  }\r\n\r\n  emailExistsValidator(): AsyncValidatorFn {\r\n    return (control: AbstractControl): Observable<ValidationErrors | null> => {\r\n      if (!control.value) return of(null);\r\n\r\n      // Bypass the API call if we are editing and the email matches the originally loaded email\r\n      const data = this.editData();\r\n      if (data && data.emailId === control.value) {\r\n        return of(null);\r\n      }\r\n\r\n      return timer(500).pipe(\r\n        switchMap(() => this.authService.checkUserExist(control.value)),\r\n        map((res: any) => {\r\n          if (res && res.data && res.data.status === \"0\") {\r\n            return { emailExists: true };\r\n          }\r\n          return null;\r\n        }),\r\n        first(),\r\n        catchError(() => of(null))\r\n      );\r\n    };\r\n  }\r\n\r\n  onSubmit() {\r\n    if (this.userForm.valid) {\r\n      if (this.isUploadingPhoto) {\r\n        this.toastr.warning('Please wait for background file uploads to complete.', 'Uploading...');\r\n        return;\r\n      }\r\n\r\n      const rawData = this.userForm.getRawValue();\r\n      const payload: Addusermodel = { \r\n        ...rawData, \r\n        name: rawData.name?.trim(),\r\n        designation: rawData.designation?.trim() || '',\r\n        parentID: this.parentID,\r\n        photoBase64: '' \r\n      };\r\n console.log('Submitting user data:', payload);\r\n      this.userService.addUpdateUser(payload).subscribe({\r\n        next: (res) => {\r\n          if (res.status) {\r\n            this.toastr.success(res.data?.msg || 'User saved successfully');\r\n            this.newlyUploadedFiles = [];\r\n            this.onSave.emit(rawData);\r\n          } else {\r\n            this.toastr.error(res.message?.[0] || 'Operation failed');\r\n            this.rollbackNewlyUploadedFiles();\r\n          }\r\n        },\r\n        error: (err) => {\r\n          this.toastr.error('A server error occurred during save.');\r\n          this.rollbackNewlyUploadedFiles();\r\n        }\r\n      });\r\n    } else {\r\n      this.userForm.markAllAsTouched();\r\n      this.toastr.warning('Please fill all required fields correctly before saving.', 'Invalid Form');\r\n    }\r\n  }\r\n\r\n  private resetForm() {\r\n    this.userForm.reset({ userID: 0, parentID: this.parentID });\r\n    this.photoPreview = null;\r\n    this.imageBase64 = null;\r\n    this.newlyUploadedFiles = [];\r\n  }\r\n \r\n  private rollbackNewlyUploadedFiles() {\r\n    this.newlyUploadedFiles.forEach(fileReq => {\r\n      if (this.globalUserService.deleteFileResult) {\r\n        this.globalUserService.deleteFileResult(fileReq).subscribe({\r\n          next: (res: any) => {\r\n            // Double check both outer wrapper and inner MessageEF status\r\n            const isReallySuccess = res && res.status && (!res.data || (res.data.satus !== 'Error' && res.data.status !== 'Error'));\r\n            if (isReallySuccess) {\r\n              console.log(`Deleted orphaned file: ${fileReq.fileName}`);\r\n            } else {\r\n              console.error(`Failed to delete orphaned file: ${fileReq.fileName}`, res.message?.[0] || res.data?.msg || 'Unknown error');\r\n            }\r\n          },\r\n          error: (err) => console.error(`HTTP Error deleting orphaned file: ${fileReq.fileName}`, err)\r\n        });\r\n      }\r\n    });\r\n    this.newlyUploadedFiles = [];\r\n  }\r\n\r\n  goBack(): void {\r\n    this.rollbackNewlyUploadedFiles();\r\n    this.onCancel.emit();\r\n  }\r\n}\r\n","<app-header \r\n  [title]=\"userForm.value.userID ? 'Update User' : 'Add New User'\" \r\n  [showBack]=\"true\" \r\n  (onBack)=\"goBack()\" (onOnlineRestored)=\"loadRoles()\">\r\n</app-header>\r\n\r\n<div class=\"container mt-4 mb-5\">\r\n  <div class=\"card shadow-sm p-4 border-0 animate__animated animate__fadeIn\">\r\n    <form [formGroup]=\"userForm\" (ngSubmit)=\"onSubmit()\">\r\n      <div class=\"row\">\r\n        <!-- Role Selection -->\r\n        <div class=\"col-md-6 mb-3\">\r\n          <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-user-role\">\r\n            <mat-label>User Role</mat-label>\r\n            <mat-select formControlName=\"roleId\">\r\n              @for (item of roleTypes(); track item.value) {\r\n                <mat-option [value]=\"item.value\">{{item.text}}</mat-option>\r\n              }\r\n            </mat-select>\r\n            <mat-error *ngIf=\"userForm.get('roleId')?.hasError('required')\">User Role is required.</mat-error>\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <!-- Personal Info -->\r\n        <div class=\"col-md-6 mb-3\">\r\n          <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-user-name\">\r\n            <mat-label>Full Name</mat-label>\r\n            <input matInput formControlName=\"name\" placeholder=\"Enter full name\" maxlength=\"50\">\r\n            <mat-error *ngIf=\"userForm.get('name')?.hasError('required')\">Full Name is required.</mat-error>\r\n            <mat-error *ngIf=\"userForm.get('name')?.hasError('minlength')\">Name must be at least 3 characters long.</mat-error>\r\n            <mat-error *ngIf=\"userForm.get('name')?.hasError('maxlength')\">Name cannot exceed 50 characters.</mat-error>\r\n            <mat-error *ngIf=\"userForm.get('name')?.hasError('pattern')\">Only letters, spaces, hyphens, and apostrophes allowed.</mat-error>\r\n            <mat-error *ngIf=\"userForm.get('name')?.hasError('whitespace')\">Space at the beginning is not allowed.</mat-error>\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <div class=\"col-md-6 mb-3\">\r\n          <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-user-mobile\">\r\n            <mat-label>Mobile Number</mat-label>\r\n            <input matInput formControlName=\"mobile_No\" placeholder=\"Enter 10-digit mobile number\">\r\n            <mat-error *ngIf=\"userForm.get('mobile_No')?.hasError('required')\">Mobile Number is required.</mat-error>\r\n            <mat-error *ngIf=\"userForm.get('mobile_No')?.hasError('pattern')\">Please enter a valid 10-digit mobile number.</mat-error>\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <div class=\"col-md-6 mb-3\">\r\n          <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-user-email\">\r\n            <mat-label>Email Address</mat-label>\r\n            <input matInput formControlName=\"emailId\" placeholder=\"e.g., example@mail.com\">\r\n            \r\n            <!-- Loading Spinner (Shows when Async Validator is checking API) -->\r\n            <div matSuffix *ngIf=\"userForm.get('emailId')?.pending\" class=\"spinner-border spinner-border-sm text-primary me-3\"></div>\r\n            \r\n            <mat-error *ngIf=\"userForm.get('emailId')?.hasError('required')\">Email Address is required.</mat-error>\r\n            <mat-error *ngIf=\"userForm.get('emailId')?.hasError('email')\">Please enter a valid email address.</mat-error>\r\n            <mat-error *ngIf=\"userForm.get('emailId')?.hasError('emailExists')\">This email is already registered.</mat-error>\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <!-- Photo Upload -->\r\n        <div class=\"col-md-12 mb-3\">\r\n          <app-file-upload\r\n            label=\"User Photo\"\r\n            fieldName=\"photoBase64\" \r\n            [folderName]=\"config.ProfilePhoto\"\r\n            [existingFilePath]=\"photoPreview\"\r\n            [preloadedBase64]=\"imageBase64\"\r\n            (onUploadComplete)=\"handleUploadComplete($event)\"\r\n            (onUploadStateChange)=\"handleUploadState('photoBase64', $event)\">\r\n          </app-file-upload>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"d-flex mt-4 pt-3 border-top\">\r\n        <div class=\"ms-auto d-flex gap-2\">\r\n          <button class=\"btn btn-outline-secondary d-flex align-items-center\" type=\"button\" (click)=\"goBack()\">\r\n            <mat-icon class=\"me-1\">arrow_back</mat-icon> Cancel\r\n          </button>\r\n          <app-loding-btn type=\"submit\" [disabled]=\"userForm.invalid\" btnClass=\"btn-primary\" id=\"tour-user-submit\">\r\n            <mat-icon class=\"me-1\">save</mat-icon>\r\n            {{ userForm.value.userID ? 'Update Changes' : 'Create User' }}\r\n          </app-loding-btn>\r\n        </div>\r\n      </div>\r\n    </form>\r\n  </div>\r\n</div>\r\n","import { Component, Input, OnChanges, SimpleChanges, inject, ChangeDetectorRef, ElementRef, OnInit, OnDestroy } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { UserService } from '../../services/user_services/userservice';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport { FileGlobalCache } from '../file-upload/file-upload';\r\n\r\n@Component({\r\n  selector: 'app-file-download',\r\n  standalone: true,\r\n  imports: [CommonModule],\r\n  templateUrl: './file-download.html'\r\n})\r\nexport class FileDownload implements OnChanges, OnInit, OnDestroy {\r\n  @Input() filePath!: string;\r\n  @Input() altText: string = 'Image';\r\n  @Input() cssClass: string = 'img-thumbnail';\r\n  @Input() customStyle: string = 'max-height: 50px;';\r\n  @Input() loadingHeight: string = '50px'; // Pre-allocate space to avoid UI jumping\r\n  @Input() showImage: boolean = true; // Toggle between rendering an image or forcing a download button\r\n  @Input() preloadedBase64?: string | null;\r\n  \r\n  isLoading = false;\r\n  safeUrl: SafeUrl | null = null;\r\n  isImage = true;\r\n  fileName = 'download';\r\n\r\n  // Using an inline SVG Data URI to guarantee the fallback icon always loads regardless of the current route\r\n  blankImageUrl = \"data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23ccc'%3E%3Cpath d='M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z'/%3E%3C/svg%3E\";\r\n  // For images in the 'public' folder, use a leading slash to ensure it loads correctly on nested routes\r\n  //blankImageUrl = '/blank.jfif';\r\n  \r\n  private userService = inject(UserService);\r\n  private sanitizer = inject(DomSanitizer);\r\n  private cdr = inject(ChangeDetectorRef);\r\n  private el = inject(ElementRef);\r\n  \r\n  private observer: IntersectionObserver | null = null;\r\n  private hasLoaded = false;\r\n\r\n  ngOnInit(): void {\r\n    if (this.filePath && FileGlobalCache.has(this.filePath) && !this.preloadedBase64) {\r\n      this.preloadedBase64 = FileGlobalCache.get(this.filePath);\r\n    }\r\n\r\n    if (this.preloadedBase64) {\r\n      this.hasLoaded = true;\r\n      this.safeUrl = this.sanitizer.bypassSecurityTrustUrl(this.preloadedBase64);\r\n      return;\r\n    }\r\n\r\n    this.observer = new IntersectionObserver(entries => {\r\n      entries.forEach(entry => {\r\n        if (entry.isIntersecting && !this.hasLoaded && this.filePath) {\r\n          this.hasLoaded = true;\r\n          this.loadImage();\r\n          this.observer?.disconnect();\r\n        }\r\n      });\r\n    });\r\n    this.observer.observe(this.el.nativeElement);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['filePath']) {\r\n      this.hasLoaded = false;\r\n      \r\n      if (this.filePath && FileGlobalCache.has(this.filePath) && !this.preloadedBase64) {\r\n        this.preloadedBase64 = FileGlobalCache.get(this.filePath);\r\n      }\r\n\r\n      if (this.preloadedBase64) {\r\n        this.hasLoaded = true;\r\n        this.safeUrl = this.sanitizer.bypassSecurityTrustUrl(this.preloadedBase64);\r\n        return;\r\n      }\r\n      this.safeUrl = null;\r\n      if (this.observer && this.filePath) {\r\n        this.observer.observe(this.el.nativeElement);\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.observer?.disconnect();\r\n  }\r\n\r\n  private loadImage() {\r\n    this.isLoading = true;\r\n    this.cdr.detectChanges();\r\n\r\n    // Extract filename from the path\r\n    this.fileName = this.filePath ? this.filePath.split(/[/\\\\]/).pop() || 'download' : 'download';\r\n\r\n    if (this.filePath && FileGlobalCache.has(this.filePath)) {\r\n      this.isImage = true;\r\n      this.safeUrl = this.sanitizer.bypassSecurityTrustUrl(FileGlobalCache.get(this.filePath)!);\r\n      this.isLoading = false;\r\n      this.cdr.detectChanges();\r\n      return;\r\n    }\r\n\r\n    this.userService.downloadFileResult(this.filePath).subscribe({\r\n      next: (res: any) => { // Use 'any' to gracefully catch backend typos\r\n        if (res && res.status === false) {\r\n          this.safeUrl = null;\r\n          this.isLoading = false;\r\n          this.cdr.detectChanges();\r\n          return;\r\n        }\r\n\r\n        const dataObj = res?.data || res;\r\n        // Check for standard name, or the C# model variations\r\n        const base64Data = dataObj?.fileBase64 || dataObj?.fileContenctBase64 || dataObj?.fileContentBase64 || dataObj?.FileContenctBase64;\r\n\r\n        if (base64Data) {\r\n          let cType = (dataObj.contentType || '').toLowerCase();\r\n          \r\n          // If the C# model doesn't send a contentType, or sends a generic stream, guess it from the file extension\r\n          if (!cType || cType === 'application/octet-stream') {\r\n            const ext = this.fileName.split('.').pop()?.toLowerCase() || '';\r\n            if (['pdf', 'zip', 'rar', 'doc', 'docx', 'xls', 'xlsx', 'txt'].includes(ext)) {\r\n              cType = `application/${ext === 'pdf' ? 'pdf' : 'octet-stream'}`;\r\n            } else {\r\n              cType = `image/${ext || 'jpeg'}`; // Default to jpeg if no extension\r\n            }\r\n          } else if (!cType.includes('/')) {\r\n            if (['pdf', 'zip', 'rar', 'doc', 'docx', 'xls', 'xlsx', 'txt'].includes(cType)) {\r\n              cType = `application/${cType === 'pdf' ? 'pdf' : 'octet-stream'}`;\r\n            } else {\r\n              cType = `image/${cType}`;\r\n            }\r\n          }\r\n          \r\n          this.isImage = cType.startsWith('image/');\r\n          const finalUrl = `data:${cType};base64,${base64Data}`;\r\n          \r\n          if (this.filePath) FileGlobalCache.set(this.filePath, finalUrl);\r\n          this.safeUrl = this.sanitizer.bypassSecurityTrustUrl(finalUrl);\r\n        } else {\r\n          this.safeUrl = null;\r\n        }\r\n        this.isLoading = false;\r\n        this.cdr.detectChanges();\r\n      },\r\n      error: () => {\r\n        this.safeUrl = null;\r\n        this.isLoading = false;\r\n        this.cdr.detectChanges();\r\n      }\r\n    });\r\n  }\r\n}","<ng-container *ngIf=\"isLoading\">\r\n  <div class=\"d-flex justify-content-center align-items-center\" [style.height]=\"loadingHeight\">\r\n    <span class=\"spinner-border spinner-border-sm text-primary\" role=\"status\"></span>\r\n  </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"!isLoading\">\r\n  <!-- Show image if it is an image file -->\r\n  <img *ngIf=\"safeUrl && isImage\" [src]=\"safeUrl\" [alt]=\"altText\" [class]=\"cssClass\" [style]=\"customStyle\" />\r\n  \r\n  <!-- Show download button if it is a non-image file -->\r\n  <a *ngIf=\"safeUrl && !isImage\" [href]=\"safeUrl\" [download]=\"fileName\" class=\"btn btn-sm btn-outline-primary\" style=\"white-space: nowrap;\">\r\n    Download\r\n  </a>\r\n\r\n  <!-- Show blank placeholder if no file/image exists -->\r\n  <img *ngIf=\"!safeUrl\" [src]=\"blankImageUrl\" [alt]=\"altText\" [class]=\"cssClass\" [style]=\"customStyle\" />\r\n</ng-container>","import { Component, inject, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MAT_DIALOG_DATA, MatDialogRef, MatDialogModule } from '@angular/material/dialog';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nexport interface AppConfirmationData {\r\n  title: string;\r\n  message: string;\r\n  confirmText?: string;\r\n  cancelText?: string;\r\n  hideCancel?: boolean;\r\n  confirmColor?: 'primary' | 'accent' | 'warn';\r\n\r\n  // Input configuration\r\n  showInput?: boolean;\r\n  inputType?: 'text' | 'number' | 'password' | 'textarea';\r\n  inputPlaceholder?: string;\r\n  inputValue?: string | number;\r\n  inputLabel?: string;\r\n  inputRequired?: boolean;\r\n}\r\n\r\n@Component({\r\n  selector: 'app-app-confirmation',\r\n  standalone: true,\r\n  imports: [\r\n    CommonModule,\r\n    MatDialogModule,\r\n    MatButtonModule,\r\n    MatFormFieldModule,\r\n    MatInputModule,\r\n    FormsModule\r\n  ],\r\n  templateUrl: './app-confirmation.html',\r\n})\r\nexport class AppConfirmation implements OnInit {\r\n  private dialogRef = inject(MatDialogRef<AppConfirmation>);\r\n  public data: AppConfirmationData = inject(MAT_DIALOG_DATA);\r\n\r\n  public inputValue: string | number = '';\r\n\r\n  ngOnInit(): void {\r\n    if (this.data.inputValue !== undefined && this.data.inputValue !== null) {\r\n      this.inputValue = this.data.inputValue;\r\n    }\r\n  }\r\n\r\n  isConfirmDisabled(): boolean {\r\n    if (this.data.showInput || this.data.inputType) {\r\n      if (this.data.inputRequired) {\r\n        return this.inputValue === undefined || this.inputValue === null || this.inputValue.toString().trim() === '';\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  onConfirm(): void {\r\n    if (this.isConfirmDisabled()) {\r\n      return;\r\n    }\r\n\r\n    if (this.data.showInput || this.data.inputType) {\r\n      this.dialogRef.close({ confirmed: true, value: this.inputValue });\r\n    } else {\r\n      this.dialogRef.close(true);\r\n    }\r\n  }\r\n\r\n  onCancel(): void {\r\n    if (this.data.showInput || this.data.inputType) {\r\n      this.dialogRef.close({ confirmed: false });\r\n    } else {\r\n      this.dialogRef.close(false);\r\n    }\r\n  }\r\n}\r\n","<h2 mat-dialog-title>{{ data.title }}</h2>\r\n\r\n<mat-dialog-content style=\"min-width: 320px;\">\r\n  <!-- Using innerHTML so HTML formatting like <b> works properly -->\r\n  <p [innerHTML]=\"data.message\"></p>\r\n\r\n  @if (data.showInput || data.inputType) {\r\n  <mat-form-field appearance=\"outline\" style=\"width: 100%; margin-top: 12px; margin-bottom: 8px;\">\r\n    @if (data.inputLabel) {\r\n    <mat-label>{{ data.inputLabel }}</mat-label>\r\n    }\r\n\r\n    @if (data.inputType === 'textarea') {\r\n    <textarea matInput [placeholder]=\"data.inputPlaceholder || ''\" [(ngModel)]=\"inputValue\"\r\n      [required]=\"data.inputRequired || false\" rows=\"3\">\r\n        </textarea>\r\n    } @else {\r\n    <input [type]=\"data.inputType || 'text'\" matInput [placeholder]=\"data.inputPlaceholder || ''\"\r\n      [(ngModel)]=\"inputValue\" [required]=\"data.inputRequired || false\"\r\n      (keyup.enter)=\"isConfirmDisabled() ? null : onConfirm()\">\r\n    }\r\n\r\n    @if (data.inputRequired && !inputValue) {\r\n    <mat-error>This field is required</mat-error>\r\n    }\r\n  </mat-form-field>\r\n  }\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions align=\"end\">\r\n  @if (!data.hideCancel) {\r\n  <button mat-button (click)=\"onCancel()\">\r\n    {{ data.cancelText || 'Cancel' }}\r\n  </button>\r\n  }\r\n  <button mat-flat-button [color]=\"data.confirmColor || 'warn'\" [disabled]=\"isConfirmDisabled()\" (click)=\"onConfirm()\">\r\n    {{ data.confirmText || 'Confirm' }}\r\n  </button>\r\n</mat-dialog-actions>","import { Injectable, inject } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Observable } from 'rxjs';\r\nimport { AppConfirmation, AppConfirmationData } from '../components/app-confirmation/app-confirmation';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ConfirmationService {\r\n  private dialog = inject(MatDialog);\r\n\r\n  confirm(title: string, message: string, confirmText: string = 'Delete', hideCancel: boolean = false): Observable<boolean> {\r\n    const dialogRef = this.dialog.open(AppConfirmation, {\r\n      width: '450px',\r\n      disableClose: true,\r\n      panelClass: 'confirm-dialog-container',\r\n      data: { title, message, confirmText, hideCancel }\r\n    });\r\n\r\n    return dialogRef.afterClosed();\r\n  }\r\n\r\n  confirmWithInput(\r\n    title: string,\r\n    message: string,\r\n    options: {\r\n      confirmText?: string;\r\n      cancelText?: string;\r\n      inputType?: 'text' | 'number' | 'password' | 'textarea';\r\n      inputPlaceholder?: string;\r\n      inputValue?: string | number;\r\n      inputLabel?: string;\r\n      inputRequired?: boolean;\r\n      confirmColor?: 'primary' | 'accent' | 'warn';\r\n      hideCancel?: boolean;\r\n      width?: string;\r\n    } = {}\r\n  ): Observable<{ confirmed: boolean; value?: any }> {\r\n    const dialogRef = this.dialog.open(AppConfirmation, {\r\n      width: options.width || '450px',\r\n      disableClose: true,\r\n      panelClass: 'confirm-dialog-container',\r\n      data: {\r\n        title,\r\n        message,\r\n        confirmText: options.confirmText || 'Confirm',\r\n        cancelText: options.cancelText || 'Cancel',\r\n        hideCancel: options.hideCancel || false,\r\n        confirmColor: options.confirmColor || 'primary',\r\n        showInput: true,\r\n        inputType: options.inputType || 'text',\r\n        inputPlaceholder: options.inputPlaceholder,\r\n        inputValue: options.inputValue,\r\n        inputLabel: options.inputLabel,\r\n        inputRequired: options.inputRequired !== undefined ? options.inputRequired : true\r\n      } as AppConfirmationData\r\n    });\r\n\r\n    return dialogRef.afterClosed();\r\n  }\r\n}","\r\n\r\nimport { Component, OnInit, signal, ViewChild, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { UI_HELPER } from '../../../../shared/ui-helper';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { AppHeader } from '../../../../shared/components/app-header/app-header';\r\nimport { Adduser } from '../adduser/adduser';\r\nimport { FileDownload } from '../../../../shared/components/file-download/file-download';\r\n\r\nimport { Manageuserservice } from '../../../../shared/services/adminpanel_services/manageuserservice';\r\nimport { Addusermodel } from '../../../../shared/model';\r\nimport { CommanRequest } from '../../../../shared/model';\r\nimport { Tokenservice } from '../../../../shared/services/user_services/tokenservice';\r\nimport { ConfirmationService } from '../../../../shared/services/confirmation.service';\r\nimport { UserTourService } from '../../../../shared/services/apptour/user-tour.service';\r\n\r\n\r\n@Component({\r\n  selector: 'app-userlist',\r\n  imports: [AppHeader,CommonModule, UI_HELPER, Adduser, FileDownload],\r\n  templateUrl: './userlist.html',\r\n})\r\nexport class Userlist implements OnInit {\r\n  private userService = inject(Manageuserservice);\r\n  private tokenService = inject(Tokenservice);\r\n  private toastr = inject(ToastrService);\r\n  private confirmationService = inject(ConfirmationService);\r\n  private userTourService = inject(UserTourService);\r\n\r\n  displayedColumns: string[] = ['sno', 'photo', 'name', 'emailId', 'mobile_No', 'designation', 'activation', 'actions'];\r\n  dataSource = new MatTableDataSource<Addusermodel>([]);\r\n  selectedUser = signal<Addusermodel | null>(null);\r\n  \r\n  showForm = false;\r\n  searchTerm = '';\r\n  USERID = 0;\r\n\r\n  @ViewChild(MatPaginator) set paginator(mp: MatPaginator) {\r\n    if (mp) this.dataSource.paginator = mp;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    const userId = this.tokenService.getUserId();\r\n    this.USERID = Number(userId) || 0;\r\n    if (this.USERID !== 0) {\r\n      \r\n      this.loadUsers();\r\n    }\r\n  }\r\n\r\n  loadUsers() {\r\n    const request: CommanRequest = { userID: this.USERID };\r\n    this.userService.fetchUserList(request).subscribe({\r\n      next: (res) => {\r\n        if (res.status && res.data && res.data.length > 0) {\r\n          this.dataSource.data = res.data;\r\n        } else {\r\n          this.dataSource.data = [];\r\n        }\r\n        \r\n        setTimeout(() => {\r\n          if (!this.showForm) {\r\n            this.userTourService.startUserListTour();\r\n          }\r\n        }, 500);\r\n      }\r\n    });\r\n  }\r\n\r\n  applyFilter(event: any) {\r\n    const val = typeof event === 'string' ? event : (event.target as HTMLInputElement).value;\r\n    this.searchTerm = val;\r\n    this.dataSource.filter = val.trim().toLowerCase();\r\n  }\r\n\r\n  onEdit(row: Addusermodel) {\r\n    this.selectedUser.set(row);\r\n    this.showForm = true;\r\n  }\r\n\r\n  toggleStatus(row: Addusermodel) {\r\n    const currentStatus = row.activation;\r\n    const newStatus = !currentStatus;\r\n    \r\n    const request: CommanRequest = { userID: row.userID, active: newStatus, subRoleId: this.USERID };\r\n    console.log(request);\r\n    this.userService.activationUser(request).subscribe(res => {\r\n      if (res.status) {\r\n        this.toastr.success('Status updated successfully');\r\n        this.loadUsers();\r\n      } else {\r\n        this.toastr.error('Failed to update status');\r\n        this.loadUsers(); // reload to revert the toggle visually if it failed\r\n      }\r\n    });\r\n  }\r\n\r\n  handleSave(formData?: Addusermodel) {\r\n    // Always reload to fetch accurate DB fields, cleared base64 strings, and correct image paths\r\n    this.loadUsers(); \r\n    this.showForm = false;\r\n    this.selectedUser.set(null);\r\n  }\r\n\r\n  onDelete(row: Addusermodel) {\r\n    this.confirmationService.confirm(\r\n      'Delete User',\r\n      `Are you sure you want to delete <b>\"${row.name}\"</b>? This action cannot be undone.`,\r\n      'Delete'\r\n    ).subscribe((confirmed: boolean) => {\r\n      if (confirmed) {\r\n        // active: false triggers soft delete/deactivation here based on your backend config\r\n        const request: CommanRequest = { userID: row.userID, active: false, subRoleId: this.USERID };\r\n        this.userService.activationUser(request).subscribe(res => {\r\n          if (res.status) {\r\n             this.toastr.success('User deleted successfully.');\r\n             this.loadUsers();\r\n          } else {\r\n             this.toastr.error('Failed to delete user.');\r\n          }\r\n        });\r\n      }\r\n    });\r\n  }\r\n}\r\n","<div *ngIf=\"!showForm\" class=\"d-flex flex-column bg-light fade-in\" style=\"height: 100vh; overflow: hidden;\">\r\n  <app-header \r\n    title=\"Users\" \r\n    [showSearch]=\"true\" \r\n    searchLabel=\"Search User Name...\"\r\n    (onSearch)=\"applyFilter($event)\"\r\n    (onOnlineRestored)=\"loadUsers()\"\r\n    >\r\n  </app-header>\r\n\r\n  <div class=\"container-fluid p-3 d-flex flex-column flex-grow-1 page-list-container\" style=\"min-height: 0;\">\r\n    <div class=\"mat-elevation-z2 rounded overflow-hidden flex-grow-1 d-flex flex-column bg-white\" style=\"min-height: 0;\">\r\n      \r\n      <div class=\"table-responsive flex-grow-1\" style=\"overflow-y: auto;\">\r\n        <table mat-table [dataSource]=\"dataSource\" class=\"w-100 responsive-table\">\r\n\r\n      <!-- S.No Column -->\r\n      <ng-container matColumnDef=\"sno\">\r\n        <th mat-header-cell *matHeaderCellDef> S.No </th>\r\n        <td mat-cell *matCellDef=\"let row; let i = index\" data-label=\"S.No\"> {{i + 1}} </td>\r\n      </ng-container>\r\n\r\n      <!-- Photo Column -->\r\n      <ng-container matColumnDef=\"photo\">\r\n        <th mat-header-cell *matHeaderCellDef> Photo </th>\r\n        <td mat-cell *matCellDef=\"let row\" data-label=\"Photo\">\r\n          <app-file-download\r\n            [filePath]=\"row.photo\"\r\n            [preloadedBase64]=\"row.photoBase64\"\r\n            customStyle=\"height: 40px; width: 40px; border-radius: 50%; object-fit: cover; border: 1px solid #ddd;\">\r\n          </app-file-download>\r\n        </td>\r\n      </ng-container>\r\n\r\n      <!-- Name Column -->\r\n      <ng-container matColumnDef=\"name\">\r\n        <th mat-header-cell *matHeaderCellDef> Name </th>\r\n        <td mat-cell *matCellDef=\"let row\" data-label=\"Name\"> <b>{{row.name}}</b> </td>\r\n      </ng-container>\r\n\r\n      <!-- Email Column -->\r\n      <ng-container matColumnDef=\"emailId\">\r\n        <th mat-header-cell *matHeaderCellDef> Email </th>\r\n        <td mat-cell *matCellDef=\"let row\" data-label=\"Email\"> {{row.emailId}} </td>\r\n      </ng-container>\r\n\r\n      <!-- Mobile Column -->\r\n      <ng-container matColumnDef=\"mobile_No\">\r\n        <th mat-header-cell *matHeaderCellDef> Mobile </th>\r\n        <td mat-cell *matCellDef=\"let row\" data-label=\"Mobile\"> {{row.mobile_No}} </td>\r\n      </ng-container>\r\n\r\n      <!-- Designation Column -->\r\n      <ng-container matColumnDef=\"designation\">\r\n        <th mat-header-cell *matHeaderCellDef> Designation </th>\r\n        <td mat-cell *matCellDef=\"let row\" data-label=\"Designation\"> {{row.designation}} </td>\r\n      </ng-container>\r\n\r\n      <!-- Active Status Column -->\r\n      <ng-container matColumnDef=\"activation\">\r\n        <th mat-header-cell *matHeaderCellDef> Status </th>\r\n        <td mat-cell *matCellDef=\"let row\" data-label=\"Status\">\r\n          <mat-slide-toggle [checked]=\"row.activation\" (change)=\"toggleStatus(row)\"></mat-slide-toggle>\r\n        </td>\r\n      </ng-container>\r\n\r\n      <!-- Actions Column -->\r\n      <ng-container matColumnDef=\"actions\">\r\n        <th mat-header-cell *matHeaderCellDef class=\"text-end\"> Actions </th>\r\n        <td mat-cell *matCellDef=\"let row\" class=\"text-end\" data-label=\"Actions\">\r\n          <div class=\"action-buttons\">\r\n            <button mat-icon-button color=\"primary\" class=\"tour-edit-btn\" (click)=\"onEdit(row)\" matTooltip=\"Edit\">\r\n              <mat-icon>edit</mat-icon>\r\n            </button>\r\n            <button mat-icon-button color=\"warn\" (click)=\"onDelete(row)\" matTooltip=\"Delete\">\r\n              <mat-icon>delete_outline</mat-icon>\r\n            </button>\r\n          </div>\r\n        </td>\r\n      </ng-container>\r\n\r\n      <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n      <tr mat-row \r\n          *matRowDef=\"let row; columns: displayedColumns;\"\r\n          [ngClass]=\"row.activation ? 'row-active' : 'row-inactive'\"></tr>\r\n          \r\n      <!-- No Data Row -->\r\n      <tr class=\"mat-row\" *matNoDataRow>\r\n        <td class=\"mat-cell text-center py-5\" [attr.colspan]=\"displayedColumns.length\">\r\n          <div *ngIf=\"searchTerm\" class=\"d-flex flex-column align-items-center justify-content-center text-muted\">\r\n            <mat-icon class=\"mb-2 opacity-50\" style=\"font-size: 40px; height: 40px; width: 40px;\">search_off</mat-icon>\r\n            <span>No records matching the search <b class=\"text-danger\">\"{{searchTerm}}\"</b></span>\r\n          </div>\r\n          <div *ngIf=\"!searchTerm\" class=\"d-flex flex-column align-items-center justify-content-center text-muted\">\r\n            <mat-icon class=\"mb-2 opacity-50\" style=\"font-size: 40px; height: 40px; width: 40px;\">inbox</mat-icon>\r\n            <span>No users found. Click the + button to add one.</span>\r\n          </div>\r\n        </td>\r\n      </tr>\r\n    </table>\r\n      </div>\r\n      <div class=\"mt-auto bg-white border-top\" style=\"z-index: 10;\">\r\n        <mat-paginator [pageSizeOptions]=\"[10, 25, 50]\" showFirstLastButtons></mat-paginator>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- Floating Action Button -->\r\n  <button id=\"tour-add-btn\" mat-fab color=\"primary\" class=\"position-fixed fab-mobile shadow-lg\" style=\"bottom: 30px; right: 30px; z-index: 100;\" \r\n          (click)=\"showForm = true; selectedUser.set(null)\" matTooltip=\"Add New User\">\r\n    <mat-icon>add</mat-icon>\r\n  </button>\r\n</div>\r\n\r\n<!-- Form View -->\r\n<div *ngIf=\"showForm\" class=\"h-100\">\r\n  <app-adduser \r\n    [editData]=\"selectedUser()\" \r\n    (onSave)=\"handleSave($event)\" \r\n    (onCancel)=\"showForm = false\">\r\n  </app-adduser>\r\n</div>\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { MY_APP_CONFIG } from '../../app.config.token';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { CommanRequest, MessageEF, Result, Listitems } from '../../model';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class Userrightsservice {\r\n  private config = inject(MY_APP_CONFIG);\r\n  private http = inject(HttpClient);\r\n\r\n  // Method name matches your controller and component calls\r\n  getUserList(model: CommanRequest): Observable<Result<Listitems[]>> {\r\n    return this.http.post<Result<Listitems[]>>(\r\n      `${this.config.apiBaseUrl}/Adduser_rights/GetUserList`, \r\n      model\r\n    );\r\n  }\r\n\r\n  // Method name matches your component call for Menu Format\r\n  getMenuFormat(model: CommanRequest): Observable<Result<any[]>> {\r\n    return this.http.post<Result<any[]>>(\r\n      `${this.config.apiBaseUrl}/Adduser_rights/GetMenuListFormate`, \r\n      model\r\n    );\r\n  }\r\n\r\n  // Method name matches your component call for User Roles/Menus\r\n  getMenuByRole(model: CommanRequest): Observable<Result<any[]>> {\r\n    return this.http.post<Result<any[]>>(\r\n      `${this.config.apiBaseUrl}/Adduser_rights/GetMenuListByRole`, \r\n      model\r\n    );\r\n  }\r\n\r\n  // Method name matches your component call for updating rights\r\n  updateMenuByID(model: CommanRequest): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(\r\n      `${this.config.apiBaseUrl}/Adduser_rights/UpdateMenuByID`, \r\n      model\r\n    );\r\n  }\r\n}\r\n","import { ChangeDetectorRef, Component, OnInit, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ToastrService } from 'ngx-toastr';\r\n\r\n\r\n// Helpers & Services\r\nimport { UI_HELPER } from '../../../shared/ui-helper';\r\nimport { AppHeader } from '../../../shared/components/app-header/app-header';\r\nimport { Userrightsservice } from '../../../shared/services/adminpanel_services/userrightsservice';\r\nimport { Loadinglistservice } from '../../../shared/services/loadinglistservice';\r\n\r\nimport { Tokenservice } from '../../../shared/services/user_services/tokenservice'\r\nimport { Treeitemdatamodel, Listitems, CommanRequest } from '../../../shared/model';\r\nimport { AppBtn } from '../../../shared/components/app-btn/app-btn';\r\nimport { UserTourService } from '../../../shared/services/apptour/user-tour.service';\r\n\r\n\r\n@Component({\r\n  selector: 'app-userrights',\r\n  standalone: true,\r\n  templateUrl: './userrights.html',\r\n  imports: [\r\n    UI_HELPER, AppHeader,\r\n    CommonModule, FormsModule, ReactiveFormsModule, AppBtn\r\n]\r\n})\r\nexport class Userrights implements OnInit {\r\n  private service = inject(Userrightsservice);\r\n  private tokenService = inject(Tokenservice);\r\n  private toastr = inject(ToastrService);\r\n  private cdr = inject(ChangeDetectorRef);\r\n  private fb = inject(FormBuilder);\r\n  public loadingListService = inject(Loadinglistservice);\r\n  private userTourService = inject(UserTourService);\r\n\r\n  rightsForm!: FormGroup;\r\n  selectedUserId: string = '0';\r\n\r\n  userList: Listitems[] = [];\r\n  treeItems: Treeitemdatamodel[] = [];\r\n  loginId: number = 0;\r\n\r\n  ngOnInit() {\r\n    const userId = this.tokenService.getUserId();\r\n    this.loginId = Number(userId) || 0;\r\n\r\n    this.rightsForm = this.fb.group({\r\n      userId: ['0', Validators.required]\r\n    });\r\n\r\n    this.rightsForm.get('userId')?.valueChanges.subscribe(value => {\r\n      this.selectedUserId = value;\r\n      this.cdr.markForCheck();\r\n    });\r\n\r\n    // Load initial data\r\n    this.loadUsers();\r\n    this.loadBaseMenu();\r\n    // console.log(\"Updating rights for user:\", this.selectedUserId);\r\n  }\r\n\r\n  loadUsers() {\r\n    this.service.getUserList({ userID: this.loginId }).subscribe(res => {\r\n      if (res.status) {\r\n        this.userList = res.data;\r\n        this.cdr.markForCheck();\r\n      }\r\n    });\r\n  }\r\n\r\n  loadBaseMenu() {\r\n    this.loadingListService.show();\r\n    this.service.getMenuFormat({ userID: this.loginId }).subscribe({\r\n      next: (res) => {\r\n        if (res.status) {\r\n          this.treeItems = this.mapToTree(res.data);\r\n        }\r\n        this.loadingListService.hide();\r\n        this.cdr.detectChanges();\r\n\r\n        setTimeout(() => {\r\n          this.userTourService.startUserRightsTour();\r\n        }, 500);\r\n      },\r\n      error: () => {\r\n        this.loadingListService.hide();\r\n        this.toastr.error('Failed to load menu format');\r\n        this.cdr.detectChanges();\r\n      }\r\n    });\r\n  }\r\n\r\n  onUserChange() {\r\n    this.resetTree(this.treeItems);\r\n    if (this.selectedUserId === \"0\" || !this.selectedUserId) return;\r\n\r\n    this.loadingListService.show();\r\n    this.service.getMenuByRole({ userID: Number(this.selectedUserId) }).subscribe({\r\n      next: (res) => {\r\n        if (res.status && res.data) {\r\n          const assignedIds = new Set<number>();\r\n          this.flattenIds(res.data, assignedIds);\r\n          this.applyPermissions(this.treeItems, assignedIds);\r\n          // Recalculate visual states (allChecked/indeterminate)\r\n          this.treeItems.forEach(node => this.refreshNodeState(node));\r\n          // Trigger UI update\r\n          this.treeItems = [...this.treeItems];\r\n        }\r\n        this.loadingListService.hide();\r\n        this.cdr.detectChanges();\r\n      },\r\n      error: () => {\r\n        this.loadingListService.hide();\r\n        this.toastr.error('Failed to load rights');\r\n      }\r\n    });\r\n  }\r\n\r\n  onSubmit() {\r\n    if (this.selectedUserId === \"0\" || !this.selectedUserId) return;\r\n    const ids = this.getSelectedIds(this.treeItems).join(',');\r\n    const req: CommanRequest = { \r\n      userID: Number(this.selectedUserId), \r\n      ids: ids,\r\n      subRoleId: this.loginId \r\n    };\r\n\r\n    this.loadingListService.show();\r\n    this.service.updateMenuByID(req).subscribe({\r\n      next: (res) => {\r\n        this.loadingListService.hide();\r\n        if (res.status) {\r\n          this.toastr.success(res.data?.msg || 'Rights updated successfully');\r\n        } else {\r\n          this.toastr.error(res.message?.[0] || 'Failed to update rights');\r\n        }\r\n        this.cdr.detectChanges();\r\n      },\r\n      error: () => {\r\n        this.loadingListService.hide();\r\n        this.toastr.error('A server error occurred while saving.');\r\n        this.cdr.detectChanges();\r\n      }\r\n    });\r\n  }\r\n\r\n  // --- Logic Helpers ---\r\n  onCheckChange(item: Treeitemdatamodel, checked: boolean) {\r\n    item.isChecked = checked;\r\n    this.toggleChildren(item, checked);\r\n    this.updateParentStatus(item);\r\n  }\r\n\r\n  private toggleChildren(node: Treeitemdatamodel, val: boolean) {\r\n    node.children?.forEach(c => {\r\n      c.isChecked = val;\r\n      this.toggleChildren(c, val);\r\n    });\r\n  }\r\n\r\n  private updateParentStatus(node: Treeitemdatamodel) {\r\n    let current = node.parent;\r\n    while (current) {\r\n      current.isChecked = current.children.every(c => c.isChecked);\r\n      current = current.parent;\r\n    }\r\n  }\r\n\r\n  isIndeterminate(item: Treeitemdatamodel): boolean {\r\n    if (!item.children?.length) return false;\r\n    const someChecked = item.children.some(c => c.isChecked || this.isIndeterminate(c));\r\n    const allChecked = item.children.every(c => c.isChecked);\r\n    return someChecked && !allChecked;\r\n  }\r\n\r\n  private mapToTree(data: any[], parent?: Treeitemdatamodel): Treeitemdatamodel[] {\r\n    return data.map(m => {\r\n      const node: Treeitemdatamodel = {\r\n        text: m.menuName, value: m.menuItemId,\r\n        isChecked: false, isExpanded: false, children: [], parent: parent\r\n      };\r\n      if (m.childMenuItems) node.children = this.mapToTree(m.childMenuItems, node);\r\n      return node;\r\n    });\r\n  }\r\n\r\n  private flattenIds(data: any[], ids: Set<number>) {\r\n    data.forEach(m => {\r\n      ids.add(m.menuItemId);\r\n      if (m.childMenuItems) this.flattenIds(m.childMenuItems, ids);\r\n    });\r\n  }\r\n\r\n  private applyPermissions(items: Treeitemdatamodel[], ids: Set<number>) {\r\n    items.forEach(i => {\r\n      if (ids.has(i.value)) i.isChecked = true;\r\n      if (i.children) this.applyPermissions(i.children, ids);\r\n    });\r\n  }\r\n\r\n  private refreshNodeState(node: Treeitemdatamodel) {\r\n    if (node.children?.length) {\r\n      node.children.forEach(c => this.refreshNodeState(c));\r\n      node.isChecked = node.children.every(c => c.isChecked);\r\n    }\r\n  }\r\n\r\n  private getSelectedIds(items: Treeitemdatamodel[], ids: number[] = []): number[] {\r\n    items.forEach(i => {\r\n      if (i.isChecked || this.isIndeterminate(i)) ids.push(i.value);\r\n      if (i.children) this.getSelectedIds(i.children, ids);\r\n    });\r\n    return ids;\r\n  }\r\n\r\n  private resetTree(items: Treeitemdatamodel[]) {\r\n    items.forEach(i => { \r\n      i.isChecked = false; \r\n      if(i.children) this.resetTree(i.children); \r\n    });\r\n  }\r\n\r\n  toggleNode(item: Treeitemdatamodel) {\r\n    item.isExpanded = !item.isExpanded;\r\n  }\r\n}\r\n","<div class=\"fade-in\">\r\n  <app-header title=\"Manage User Rights\"\r\n   (onOnlineRestored)=\"loadUsers(); loadBaseMenu()\">\r\n  </app-header>\r\n\r\n  <div class=\"container mt-3 mb-3\">\r\n    <div class=\"card shadow-sm border-0 p-3\">\r\n      <form [formGroup]=\"rightsForm\" (ngSubmit)=\"onSubmit()\">\r\n      <div class=\"row\">\r\n      <div class=\"col-md-6 col-lg-5\">\r\n        <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-rights-user\">\r\n          <mat-label>Select User</mat-label>\r\n          <mat-icon matPrefix class=\"me-2 text-primary\">person_search</mat-icon>\r\n          <mat-select formControlName=\"userId\" (selectionChange)=\"onUserChange()\">\r\n            <mat-option value=\"0\">-- Select User --</mat-option>\r\n            @for (user of userList; track user.value) {\r\n              <mat-option [value]=\"user.value + ''\">{{user.text}}</mat-option>\r\n            }\r\n          </mat-select>\r\n        </mat-form-field>\r\n      </div>\r\n    </div>\r\n\r\n    <div class=\"tree-viewport mt-2\" id=\"tour-rights-tree\">\r\n      <ng-container *ngTemplateOutlet=\"treeNode; context:{ $implicit: treeItems }\"></ng-container>\r\n    </div>\r\n\r\n    <div class=\"d-flex mt-3 pt-3 border-top position-sticky bottom-0 bg-white\" style=\"z-index: 10;\">\r\n      <div class=\"ms-auto d-flex gap-2\">\r\n        <app-loding-btn type=\"submit\" [disabled]=\"selectedUserId === '0' || loadingListService.isLoading()\" btnClass=\"btn-primary\" id=\"tour-rights-submit\">\r\n          <mat-icon class=\"me-1\">verified_user</mat-icon>\r\n          Update Permissions\r\n        </app-loding-btn>\r\n      </div>\r\n    </div>\r\n      </form>\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n<ng-template #treeNode let-items>\r\n  <ul class=\"tree-list\">\r\n    @for (item of items; track item.value) {\r\n      <li>\r\n        <div class=\"node-row\">\r\n          @if (item.children?.length) {\r\n            <button type=\"button\" mat-icon-button class=\"tree-toggle-btn\" (click)=\"toggleNode(item)\">\r\n              <mat-icon>{{ item.isExpanded ? 'keyboard_arrow_down' : 'keyboard_arrow_right' }}</mat-icon>\r\n            </button>\r\n          } @else {\r\n            <span class=\"tree-spacer\"></span>\r\n          }\r\n\r\n          <mat-checkbox \r\n            color=\"primary\"\r\n            [checked]=\"item.isChecked\" \r\n            [indeterminate]=\"isIndeterminate(item)\"\r\n            (change)=\"onCheckChange(item, $event.checked)\">\r\n            <span class=\"node-label d-flex align-items-center\">\r\n              <mat-icon class=\"me-2\" \r\n                        [ngClass]=\"item.children?.length ? 'text-warning' : 'text-muted'\" \r\n                        [style.font-size]=\"item.children?.length ? '22px' : '10px'\" \r\n                        [style.width]=\"item.children?.length ? '22px' : '10px'\" \r\n                        [style.height]=\"item.children?.length ? '22px' : '10px'\">\r\n                {{ item.children?.length ? (item.isExpanded ? 'folder_open' : 'folder') : 'circle' }}\r\n              </mat-icon>\r\n              {{item.text}}\r\n            </span>\r\n          </mat-checkbox>\r\n        </div>\r\n        \r\n        @if (item.children?.length && item.isExpanded) {\r\n          <div class=\"tree-branch\">\r\n            <ng-container *ngTemplateOutlet=\"treeNode; context:{ $implicit: item.children }\"></ng-container>\r\n          </div>\r\n        }\r\n      </li>\r\n    }\r\n  </ul>\r\n</ng-template>\r\n","\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { MY_APP_CONFIG } from '../../app.config.token';\r\nimport { CommanRequest, MessageEF, Result, Listitems } from '../../model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class Usermappingservice {\r\n  private config = inject(MY_APP_CONFIG);\r\n  private http = inject(HttpClient);\r\n  private readonly baseUrl = `${this.config.apiBaseUrl}/UserMapping`;\r\n\r\n  getUsers(model: CommanRequest): Observable<Result<Listitems[]>> {\r\n    return this.http.post<Result<Listitems[]>>(`${this.config.apiBaseUrl}/Adduser_rights/GetUserList`, model);\r\n  }\r\n\r\n  getApplications(model: CommanRequest): Observable<Result<Listitems[]>> {\r\n    return this.http.post<Result<Listitems[]>>(`${this.baseUrl}/GetApplication`, model);\r\n  }\r\n\r\n  getWorkspaces(model: CommanRequest): Observable<Result<Listitems[]>> {\r\n    return this.http.post<Result<Listitems[]>>(`${this.baseUrl}/GetWorkspace`, model);\r\n  }\r\n\r\n  getOutlets(model: CommanRequest): Observable<Result<Listitems[]>> {\r\n    return this.http.post<Result<Listitems[]>>(`${this.baseUrl}/GetOutlet`, model);\r\n  }\r\n\r\n  updateMapping(model: CommanRequest): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(`${this.baseUrl}/UpdateUserMapping`, model);\r\n  }\r\n}\r\n","\r\nimport { ChangeDetectorRef, Component, OnInit, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common'; \r\nimport { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup, Validators, FormControl } from '@angular/forms'; \r\nimport { CdkDragDrop, moveItemInArray, transferArrayItem, CdkDropList, CdkDrag } from '@angular/cdk/drag-drop';\r\nimport { MatStepperModule, MatStepper } from '@angular/material/stepper';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { UI_HELPER } from '../../../shared/ui-helper';\r\nimport { AppHeader } from '../../../shared/components/app-header/app-header';\r\nimport { Usermappingservice } from '../../../shared/services/adminpanel_services/usermappingservice';\r\nimport { Tokenservice } from '../../../shared/services/user_services/tokenservice'\r\nimport { Loadinglistservice } from '../../../shared/services/loadinglistservice';\r\nimport { Listitems, CommanRequest } from '../../../shared/model';\r\nimport { forkJoin } from 'rxjs';\r\nimport { AppBtn } from '../../../shared/components/app-btn/app-btn';\r\nimport { UserTourService } from '../../../shared/services/apptour/user-tour.service';\r\n\r\n@Component({\r\n  standalone: true,\r\n  selector: 'app-usermapping',\r\n  imports: [UI_HELPER, AppHeader, CommonModule, FormsModule, ReactiveFormsModule, CdkDropList, CdkDrag, MatStepperModule, AppBtn],\r\n  templateUrl: './usermapping.html',\r\n})\r\n\r\nexport class Usermapping implements OnInit {\r\n  private service = inject(Usermappingservice);\r\n  private tokenService = inject(Tokenservice);\r\n  private toastr = inject(ToastrService);\r\n  private cdr = inject(ChangeDetectorRef);\r\n  private fb = inject(FormBuilder);\r\n  public loadingListService = inject(Loadinglistservice);\r\n  private userTourService = inject(UserTourService);\r\n\r\n  mappingForm!: FormGroup;\r\n  selectedUserId: string = '0';\r\n  selectedTabIndex: number = 0;\r\n  \r\n  // Step Validation Controls\r\n  appStepControl = new FormControl(0, [Validators.min(1)]);\r\n  wsStepControl = new FormControl(0, [Validators.min(1)]);\r\n  outletStepControl = new FormControl(0, [Validators.min(1)]);\r\n\r\n  userList: Listitems[] = [];\r\n  \r\n  applicationList: Listitems[] = [];\r\n  availableApps: Listitems[] = [];\r\n  assignedApps: Listitems[] = [];\r\n\r\n  availableWorkspaces: Listitems[] = [];\r\n  assignedWorkspaces: Listitems[] = [];\r\n\r\n  availableOutlets: Listitems[] = [];\r\n  assignedOutlets: Listitems[] = [];\r\n\r\n  loginId: number = 0;\r\n  \r\n  ngOnInit() {\r\n    this.loginId = Number(this.tokenService.getUserId()) || 0;\r\n    \r\n    this.mappingForm = this.fb.group({\r\n      userId: ['0', Validators.required]\r\n    });\r\n\r\n    this.mappingForm.get('userId')?.valueChanges.subscribe(value => {\r\n      this.selectedUserId = value;\r\n      this.cdr.markForCheck();\r\n    });\r\n\r\n    this.loadUsersAndApps();\r\n  }\r\n\r\n  loadUsersAndApps() {\r\n    this.loadingListService.show();\r\n    const usersReq$ = this.service.getUsers({ userID: this.loginId });\r\n    const appsReq$ = this.service.getApplications({ userID: this.loginId });\r\n\r\n    forkJoin([usersReq$, appsReq$]).subscribe({\r\n      next: ([usersRes, appsRes]) => {\r\n        if (usersRes.status) {\r\n          this.userList = usersRes.data;\r\n        }\r\n        if (appsRes.status) {\r\n          this.applicationList = appsRes.data;\r\n        }\r\n        this.loadingListService.hide();\r\n        this.cdr.detectChanges();\r\n\r\n        setTimeout(() => {\r\n          this.userTourService.startUserMappingTour();\r\n        }, 500);\r\n      },\r\n      error: () => this.handleApiError()\r\n    });\r\n  }\r\n\r\n  onUserChange() {\r\n    if (!this.selectedUserId || this.selectedUserId === \"0\") {\r\n      this.resetSelections();\r\n      return;\r\n    }\r\n    \r\n    this.selectedTabIndex = 0; // Reset to 1st tab when a user is selected\r\n    \r\n    this.loadingListService.show();\r\n\r\n    this.service.getApplications({ userID: Number(this.selectedUserId) }).subscribe({\r\n      next: (userApps) => {\r\n        if (userApps.status && userApps.data) {\r\n          const mappedIds = userApps.data.map(a => String(a.value));\r\n          this.assignedApps = this.applicationList.filter(a => mappedIds.includes(String(a.value)));\r\n          this.availableApps = this.applicationList.filter(a => !mappedIds.includes(String(a.value)));\r\n        } else {\r\n          this.assignedApps = [];\r\n          this.availableApps = [...this.applicationList];\r\n        }\r\n        this.appStepControl.setValue(this.assignedApps.length);\r\n        this.loadingListService.hide();\r\n        this.onApplicationChange();\r\n      },\r\n      error: () => this.handleApiError()\r\n    });\r\n  }\r\n\r\n  onApplicationChange() {\r\n    if (!this.assignedApps || this.assignedApps.length === 0) {\r\n      this.availableWorkspaces = [];\r\n      this.assignedWorkspaces = [];\r\n      this.wsStepControl.setValue(0);\r\n      this.onWorkspaceChange();\r\n      return;\r\n    }\r\n\r\n    this.loadingListService.show();\r\n    const appIds = this.assignedApps.map(a => a.value).join(',');\r\n\r\n    const availableReq$ = this.service.getWorkspaces({ userID: this.loginId, ids: appIds });\r\n    const userReq$ = this.service.getWorkspaces({ userID: Number(this.selectedUserId) });\r\n\r\n    forkJoin([availableReq$, userReq$]).subscribe({\r\n      next: ([available, userMapped]) => {\r\n        const masterWorkspaces = available.status && available.data ? available.data : [];\r\n        if (available.status) {\r\n          if (userMapped.status && userMapped.data) {\r\n            const mappedIds = userMapped.data.map(w => String(w.value));\r\n            this.assignedWorkspaces = masterWorkspaces.filter(w => mappedIds.includes(String(w.value)));\r\n            this.availableWorkspaces = masterWorkspaces.filter(w => !mappedIds.includes(String(w.value)));\r\n          } else {\r\n            this.assignedWorkspaces = [];\r\n            this.availableWorkspaces = [...masterWorkspaces];\r\n          }\r\n        }\r\n        this.wsStepControl.setValue(this.assignedWorkspaces.length);\r\n        this.loadingListService.hide();\r\n        this.onWorkspaceChange();\r\n      },\r\n      error: () => this.handleApiError()\r\n    });\r\n  }\r\n\r\n  onWorkspaceChange() {\r\n    if (!this.assignedWorkspaces || this.assignedWorkspaces.length === 0) {\r\n      this.availableOutlets = [];\r\n      this.assignedOutlets = [];\r\n      this.outletStepControl.setValue(0);\r\n      this.cdr.detectChanges();\r\n      return;\r\n    }\r\n\r\n    this.loadingListService.show();\r\n    const workspaceIds = this.assignedWorkspaces.map(w => w.value).join(',');\r\n\r\n    const availableReq$ = this.service.getOutlets({ userID: this.loginId, ids: workspaceIds });\r\n    const userReq$ = this.service.getOutlets({ userID: Number(this.selectedUserId) });\r\n\r\n    forkJoin([availableReq$, userReq$]).subscribe({\r\n      next: ([available, userMapped]) => {\r\n        const masterOutlets = available.status && available.data ? available.data : [];\r\n        if (available.status) {\r\n          if (userMapped.status && userMapped.data) {\r\n            const mappedIds = userMapped.data.map(o => String(o.value));\r\n            this.assignedOutlets = masterOutlets.filter(o => mappedIds.includes(String(o.value)));\r\n            this.availableOutlets = masterOutlets.filter(o => !mappedIds.includes(String(o.value)));\r\n          } else {\r\n            this.assignedOutlets = [];\r\n            this.availableOutlets = [...masterOutlets];\r\n          }\r\n        }\r\n        this.outletStepControl.setValue(this.assignedOutlets.length);\r\n        this.loadingListService.hide();\r\n        this.cdr.detectChanges();\r\n      },\r\n      error: () => this.handleApiError()\r\n    });\r\n  }\r\n\r\n  drop(event: CdkDragDrop<Listitems[]>, level: 'app' | 'ws' | 'outlet') {\r\n    if (event.previousContainer === event.container) {\r\n      moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\r\n    } else {\r\n      transferArrayItem(\r\n        event.previousContainer.data,\r\n        event.container.data,\r\n        event.previousIndex,\r\n        event.currentIndex,\r\n      );\r\n      \r\n      // Update validation controls directly on drag drop\r\n      if (level === 'app') this.appStepControl.setValue(this.assignedApps.length);\r\n      if (level === 'ws') this.wsStepControl.setValue(this.assignedWorkspaces.length);\r\n      if (level === 'outlet') this.outletStepControl.setValue(this.assignedOutlets.length);\r\n      \r\n      // Trigger the logical cascade on swap\r\n      if (level === 'app') this.onApplicationChange();\r\n      if (level === 'ws') this.onWorkspaceChange();\r\n    }\r\n  }\r\n\r\n  private resetSelections() {\r\n    this.availableApps = [];\r\n    this.assignedApps = [];\r\n    this.availableWorkspaces = [];\r\n    this.assignedWorkspaces = [];\r\n    this.availableOutlets = [];\r\n    this.assignedOutlets = [];\r\n    this.appStepControl.setValue(0);\r\n    this.wsStepControl.setValue(0);\r\n    this.outletStepControl.setValue(0);\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  private handleApiError() {\r\n    this.loadingListService.hide();\r\n    this.resetSelections();\r\n    this.toastr.error('Failed to load mapping data.');\r\n  }\r\n\r\n  goNext(stepper: MatStepper, step: number) {\r\n    if (this.selectedUserId === '0' || !this.selectedUserId) {\r\n      this.toastr.warning('Please select a user first.');\r\n      return;\r\n    }\r\n    \r\n    if (step === 1 && this.assignedApps.length === 0) {\r\n      this.toastr.warning('Please assign at least 1 Application to proceed.');\r\n      return;\r\n    }\r\n    if (step === 2 && this.assignedWorkspaces.length === 0) {\r\n      this.toastr.warning('Please assign at least 1 Workspace to proceed.');\r\n      return;\r\n    }\r\n    \r\n    stepper.next();\r\n  }\r\n\r\n  onSubmit() {\r\n    if (this.selectedUserId === \"0\" || !this.selectedUserId) {\r\n      this.toastr.warning(\"Please select a User first.\");\r\n      return;\r\n    }\r\n    if (this.assignedApps.length === 0 || this.assignedWorkspaces.length === 0 || this.assignedOutlets.length === 0) {\r\n      this.toastr.warning(\"Please map at least 1 Application, 1 Workspace, and 1 Outlet.\");\r\n      return;\r\n    }\r\n    \r\n    this.loadingListService.show();\r\n    const req: CommanRequest = {\r\n      userID: Number(this.selectedUserId),\r\n      subRoleId: this.loginId,\r\n      iids: this.assignedApps.map(a => a.value).join(','),\r\n      deptids: this.assignedWorkspaces.map(w => w.value).join(','),\r\n      cids: this.assignedOutlets.map(o => o.value).join(',')\r\n    };\r\n\r\n    this.service.updateMapping(req).subscribe({\r\n      next: (res) => {\r\n        this.loadingListService.hide();\r\n        if (res.status) {\r\n          this.toastr.success(res.data?.msg || 'User mapping updated successfully.');\r\n        } else {\r\n          this.toastr.error(res.message?.[0] || 'Failed to update mapping.');\r\n        }\r\n        this.cdr.detectChanges();\r\n      },\r\n      error: () => {\r\n        this.loadingListService.hide();\r\n        this.toastr.error('A server error occurred while saving.');\r\n        this.cdr.detectChanges();\r\n      }\r\n    });\r\n  }\r\n\r\n  onStepChange(event: any) {\r\n    // Trigger step-specific tours smoothly\r\n    if (event.selectedIndex === 1) {\r\n      setTimeout(() => { this.userTourService.startUserMappingStep2Tour(); }, 500);\r\n    } else if (event.selectedIndex === 2) {\r\n      setTimeout(() => { this.userTourService.startUserMappingStep3Tour(); }, 500);\r\n    }\r\n  }\r\n}\r\n","<app-header title=\"Manage User Mapping\"\r\n(onOnlineRestored)=\"loadUsersAndApps()\"></app-header>\r\n\r\n<div class=\"container mt-3 mb-3 fade-in\">\r\n  <div class=\"card shadow-sm border-0 p-3\">\r\n    <form [formGroup]=\"mappingForm\" (ngSubmit)=\"onSubmit()\">\r\n    <div class=\"row\">\r\n      <div class=\"col-md-6 col-lg-5\">\r\n        <mat-form-field appearance=\"outline\" class=\"w-100\" subscriptSizing=\"dynamic\" id=\"tour-mapping-user\">\r\n          <mat-label>Select User to Map Rights</mat-label>\r\n          <mat-icon matPrefix class=\"me-2 text-primary\">person_search</mat-icon>\r\n          <mat-select formControlName=\"userId\" (selectionChange)=\"onUserChange()\">\r\n            <mat-option value=\"0\">-- Select User --</mat-option>\r\n            @for (u of userList; track u.value) {\r\n              <mat-option [value]=\"u.value + ''\">{{u.text}}</mat-option>\r\n            }\r\n          </mat-select>\r\n        </mat-form-field>\r\n      </div>\r\n    </div>\r\n\r\n    <mat-stepper [(selectedIndex)]=\"selectedTabIndex\" linear=\"true\" class=\"mt-3 bg-transparent\" (selectionChange)=\"onStepChange($event)\" #stepper>\r\n      <!-- STEP 1: Applications -->\r\n      <mat-step label=\"1. Applications\" [stepControl]=\"appStepControl\">\r\n        <div class=\"transfer-container pt-3 pb-2\" id=\"tour-mapping-drag1\">\r\n          <!-- Available Box -->\r\n          <div class=\"list-box\">\r\n            <div class=\"box-header\">\r\n              <span><mat-icon class=\"me-2 align-middle text-secondary\" style=\"font-size: 20px; width: 20px; height: 20px;\">apps</mat-icon> Available Applications</span>\r\n              <span class=\"badge bg-secondary rounded-pill\">{{availableApps.length}}</span>\r\n            </div>\r\n            <div cdkDropList id=\"availApps\" [cdkDropListData]=\"availableApps\" [cdkDropListConnectedTo]=\"['assignApps']\" class=\"item-list\" (cdkDropListDropped)=\"drop($event, 'app')\">\r\n              @for (item of availableApps; track item.value) {\r\n                <div class=\"item-card\" cdkDrag>\r\n                  <span>{{item.text}}</span>\r\n                  <mat-icon class=\"text-muted\" style=\"cursor: grab;\">drag_indicator</mat-icon>\r\n                </div>\r\n              }\r\n              <div class=\"empty-placeholder\" *ngIf=\"availableApps.length === 0\">\r\n                <mat-icon class=\"d-block mx-auto mb-2 opacity-50\" style=\"font-size: 32px; width: 32px; height: 32px;\">inbox</mat-icon>\r\n                No available apps\r\n              </div>\r\n            </div>\r\n          </div>\r\n\r\n          <!-- Middle Transfer Icon -->\r\n          <div class=\"transfer-arrow d-flex align-items-center justify-content-center px-2\">\r\n            <mat-icon style=\"font-size: 36px; width: 36px; height: 36px; opacity: 0.3;\">sync_alt</mat-icon>\r\n          </div>\r\n\r\n          <!-- Assigned Box -->\r\n          <div class=\"list-box\" style=\"border: 2px solid var(--theme-primary);\">\r\n            <div class=\"box-header bg-primary-subtle text-primary\" style=\"border-bottom: 1px solid rgba(var(--theme-primary-rgb), 0.2);\">\r\n              <span class=\"fw-bold\"><mat-icon class=\"me-2 align-middle\" style=\"font-size: 20px; width: 20px; height: 20px;\">check_circle</mat-icon> Assigned Applications</span>\r\n              <span class=\"badge bg-primary rounded-pill\">{{assignedApps.length}}</span>\r\n            </div>\r\n            <div cdkDropList id=\"assignApps\" [cdkDropListData]=\"assignedApps\" [cdkDropListConnectedTo]=\"['availApps']\" class=\"item-list\" (cdkDropListDropped)=\"drop($event, 'app')\">\r\n              @for (item of assignedApps; track item.value) {\r\n                <div class=\"item-card\" style=\"border-left: 4px solid var(--theme-primary);\" cdkDrag>\r\n                  <span class=\"fw-medium\">{{item.text}}</span>\r\n                  <mat-icon class=\"text-primary\" style=\"cursor: grab;\">drag_indicator</mat-icon>\r\n                </div>\r\n              }\r\n              <div class=\"empty-placeholder\" *ngIf=\"assignedApps.length === 0\">\r\n                <mat-icon class=\"d-block mx-auto mb-2 opacity-50 text-primary\" style=\"font-size: 32px; width: 32px; height: 32px;\">touch_app</mat-icon>\r\n                Drop apps here to assign\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        \r\n        <div class=\"d-flex justify-content-end mt-2 pt-3 border-top\">\r\n          <button class=\"btn btn-primary d-flex align-items-center\" type=\"button\" id=\"tour-mapping-next1\" (click)=\"goNext(stepper, 1)\">\r\n            Next Step <mat-icon class=\"ms-1\">arrow_forward</mat-icon>\r\n          </button>\r\n        </div>\r\n      </mat-step>\r\n\r\n      <!-- STEP 2: Workspaces -->\r\n      <mat-step label=\"2. Workspaces\" [stepControl]=\"wsStepControl\">\r\n        <div class=\"transfer-container pt-3 pb-2\" id=\"tour-mapping-drag2\">\r\n          <!-- Available Box -->\r\n          <div class=\"list-box\">\r\n            <div class=\"box-header\">\r\n              <span><mat-icon class=\"me-2 align-middle text-secondary\" style=\"font-size: 20px; width: 20px; height: 20px;\">domain</mat-icon> Available Workspaces</span>\r\n              <span class=\"badge bg-secondary rounded-pill\">{{availableWorkspaces.length}}</span>\r\n            </div>\r\n            <div cdkDropList id=\"availWs\" [cdkDropListData]=\"availableWorkspaces\" [cdkDropListConnectedTo]=\"['assignWs']\" class=\"item-list\" (cdkDropListDropped)=\"drop($event, 'ws')\">\r\n              @for (item of availableWorkspaces; track item.value) {\r\n                <div class=\"item-card\" cdkDrag>\r\n                  <span>{{item.text}}</span>\r\n                  <mat-icon class=\"text-muted\" style=\"cursor: grab;\">drag_indicator</mat-icon>\r\n                </div>\r\n              }\r\n              <div class=\"empty-placeholder\" *ngIf=\"availableWorkspaces.length === 0\">\r\n                <mat-icon class=\"d-block mx-auto mb-2 opacity-50\" style=\"font-size: 32px; width: 32px; height: 32px;\">inbox</mat-icon>\r\n                No available workspaces\r\n              </div>\r\n            </div>\r\n          </div>\r\n\r\n          <div class=\"transfer-arrow d-flex align-items-center justify-content-center px-2\">\r\n            <mat-icon style=\"font-size: 36px; width: 36px; height: 36px; opacity: 0.3;\">sync_alt</mat-icon>\r\n          </div>\r\n\r\n          <!-- Assigned Box -->\r\n          <div class=\"list-box\" style=\"border: 2px solid var(--theme-primary);\">\r\n            <div class=\"box-header bg-primary-subtle text-primary\" style=\"border-bottom: 1px solid rgba(var(--theme-primary-rgb), 0.2);\">\r\n              <span class=\"fw-bold\"><mat-icon class=\"me-2 align-middle\" style=\"font-size: 20px; width: 20px; height: 20px;\">check_circle</mat-icon> Assigned Workspaces</span>\r\n              <span class=\"badge bg-primary rounded-pill\">{{assignedWorkspaces.length}}</span>\r\n            </div>\r\n            <div cdkDropList id=\"assignWs\" [cdkDropListData]=\"assignedWorkspaces\" [cdkDropListConnectedTo]=\"['availWs']\" class=\"item-list\" (cdkDropListDropped)=\"drop($event, 'ws')\">\r\n              @for (item of assignedWorkspaces; track item.value) {\r\n                <div class=\"item-card\" style=\"border-left: 4px solid var(--theme-primary);\" cdkDrag>\r\n                  <span class=\"fw-medium\">{{item.text}}</span>\r\n                  <mat-icon class=\"text-primary\" style=\"cursor: grab;\">drag_indicator</mat-icon>\r\n                </div>\r\n              }\r\n              <div class=\"empty-placeholder\" *ngIf=\"assignedWorkspaces.length === 0\">\r\n                <mat-icon class=\"d-block mx-auto mb-2 opacity-50 text-primary\" style=\"font-size: 32px; width: 32px; height: 32px;\">touch_app</mat-icon>\r\n                Drop workspaces here to assign\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"d-flex justify-content-between mt-2 pt-3 border-top\">\r\n          <button class=\"btn btn-outline-secondary d-flex align-items-center\" matStepperPrevious type=\"button\">\r\n            <mat-icon class=\"me-1\">arrow_back</mat-icon> Back\r\n          </button>\r\n          <button class=\"btn btn-primary d-flex align-items-center\" type=\"button\" id=\"tour-mapping-next2\" (click)=\"goNext(stepper, 2)\">\r\n            Next Step <mat-icon class=\"ms-1\">arrow_forward</mat-icon>\r\n          </button>\r\n        </div>\r\n      </mat-step>\r\n\r\n      <!-- STEP 3: Outlets -->\r\n      <mat-step label=\"3. Outlets\" [stepControl]=\"outletStepControl\">\r\n        <div class=\"transfer-container pt-3 pb-2\" id=\"tour-mapping-drag3\">\r\n          <!-- Available Box -->\r\n          <div class=\"list-box\">\r\n            <div class=\"box-header\">\r\n              <span><mat-icon class=\"me-2 align-middle text-secondary\" style=\"font-size: 20px; width: 20px; height: 20px;\">storefront</mat-icon> Available Outlets</span>\r\n              <span class=\"badge bg-secondary rounded-pill\">{{availableOutlets.length}}</span>\r\n            </div>\r\n            <div cdkDropList id=\"availOutlets\" [cdkDropListData]=\"availableOutlets\" [cdkDropListConnectedTo]=\"['assignOutlets']\" class=\"item-list\" (cdkDropListDropped)=\"drop($event, 'outlet')\">\r\n              @for (item of availableOutlets; track item.value) {\r\n                <div class=\"item-card\" cdkDrag>\r\n                  <span>{{item.text}}</span>\r\n                  <mat-icon class=\"text-muted\" style=\"cursor: grab;\">drag_indicator</mat-icon>\r\n                </div>\r\n              }\r\n              <div class=\"empty-placeholder\" *ngIf=\"availableOutlets.length === 0\">\r\n                <mat-icon class=\"d-block mx-auto mb-2 opacity-50\" style=\"font-size: 32px; width: 32px; height: 32px;\">inbox</mat-icon>\r\n                No available outlets\r\n              </div>\r\n            </div>\r\n          </div>\r\n\r\n          <div class=\"transfer-arrow d-flex align-items-center justify-content-center px-2\">\r\n            <mat-icon style=\"font-size: 36px; width: 36px; height: 36px; opacity: 0.3;\">sync_alt</mat-icon>\r\n          </div>\r\n\r\n          <!-- Assigned Box -->\r\n          <div class=\"list-box\" style=\"border: 2px solid var(--theme-primary);\">\r\n            <div class=\"box-header bg-primary-subtle text-primary\" style=\"border-bottom: 1px solid rgba(var(--theme-primary-rgb), 0.2);\">\r\n              <span class=\"fw-bold\"><mat-icon class=\"me-2 align-middle\" style=\"font-size: 20px; width: 20px; height: 20px;\">check_circle</mat-icon> Assigned Outlets</span>\r\n              <span class=\"badge bg-primary rounded-pill\">{{assignedOutlets.length}}</span>\r\n            </div>\r\n            <div cdkDropList id=\"assignOutlets\" [cdkDropListData]=\"assignedOutlets\" [cdkDropListConnectedTo]=\"['availOutlets']\" class=\"item-list\" (cdkDropListDropped)=\"drop($event, 'outlet')\">\r\n              @for (item of assignedOutlets; track item.value) {\r\n                <div class=\"item-card\" style=\"border-left: 4px solid var(--theme-primary);\" cdkDrag>\r\n                  <span class=\"fw-medium\">{{item.text}}</span>\r\n                  <mat-icon class=\"text-primary\" style=\"cursor: grab;\">drag_indicator</mat-icon>\r\n                </div>\r\n              }\r\n              <div class=\"empty-placeholder\" *ngIf=\"assignedOutlets.length === 0\">\r\n                <mat-icon class=\"d-block mx-auto mb-2 opacity-50 text-primary\" style=\"font-size: 32px; width: 32px; height: 32px;\">touch_app</mat-icon>\r\n                Drop outlets here to assign\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"d-flex justify-content-between mt-2 pt-3 border-top position-sticky bottom-0 bg-white\" style=\"z-index: 10;\">\r\n          <button class=\"btn btn-outline-secondary d-flex align-items-center\" matStepperPrevious type=\"button\">\r\n            <mat-icon class=\"me-1\">arrow_back</mat-icon> Back\r\n          </button>\r\n          <div class=\"d-flex gap-2\">\r\n            <app-loding-btn type=\"submit\" [disabled]=\"selectedUserId === '0' || loadingListService.isLoading() || assignedOutlets.length === 0\" btnClass=\"btn-primary\" id=\"tour-mapping-submit\">\r\n              <mat-icon class=\"me-1\">save</mat-icon> Save Mappings\r\n            </app-loding-btn>\r\n          </div>\r\n        </div>\r\n      </mat-step>\r\n    </mat-stepper>\r\n    </form>\r\n  </div>\r\n</div>\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { MY_APP_CONFIG } from '../../app.config.token';\r\nimport { Addusermodel, CommanRequest, Result } from '../../model';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class Profileservice {\r\n  private config = inject(MY_APP_CONFIG);\r\n  private http = inject(HttpClient);\r\n\r\n  getUserByID(model: CommanRequest): Observable<Result<Addusermodel>> {\r\n    return this.http.post<Result<Addusermodel>>(`${this.config.apiBaseUrl}/AddUser/GetUserByID`, model);\r\n  }\r\n}\r\n","import { ChangeDetectorRef, Component, inject, OnInit } from '@angular/core';\r\nimport { AbstractControl, AsyncValidatorFn, FormBuilder, FormGroup, ReactiveFormsModule, ValidationErrors, Validators } from '@angular/forms';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Observable, of, timer } from 'rxjs';\r\nimport { catchError, first, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { AppHeader } from '../../../shared/components/app-header/app-header';\r\nimport { AppBtn } from '../../../shared/components/app-btn/app-btn';\r\nimport { FileUpload } from '../../../shared/components/file-upload/file-upload';\r\nimport { UI_HELPER } from '../../../shared/ui-helper';\r\n\r\nimport { Profileservice } from '../../../shared/services/adminpanel_services/profileservice';\r\nimport { Manageuserservice } from '../../../shared/services/adminpanel_services/manageuserservice';\r\nimport { UserService } from '../../../shared/services/user_services/userservice';\r\nimport { Tokenservice } from '../../../shared/services/user_services/tokenservice';\r\nimport { Authservice } from '../../../shared/services/user_services/authservice';\r\nimport { MY_APP_CONFIG } from '../../../shared/app.config.token';\r\nimport { Addusermodel, Myfilerequest } from '../../../shared/model';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { UserTourService } from '../../../shared/services/apptour/user-tour.service';\r\n\r\n@Component({\r\n  selector: 'app-userprofile',\r\n  imports: [ReactiveFormsModule, UI_HELPER, AppBtn, AppHeader, FileUpload, MatButtonModule],\r\n  templateUrl: './userprofile.html',\r\n})\r\nexport class Userprofile implements OnInit {\r\n  config = inject(MY_APP_CONFIG);\r\n  private fb = inject(FormBuilder);\r\n  private profileService = inject(Profileservice);\r\n  private manageUserService = inject(Manageuserservice);\r\n  private globalUserService = inject(UserService);\r\n  private tokenService = inject(Tokenservice);\r\n  private toastr = inject(ToastrService);\r\n  private authService = inject(Authservice);\r\n  private cdr = inject(ChangeDetectorRef);\r\n  private userTourService = inject(UserTourService);\r\n\r\n  userForm: FormGroup;\r\n  photoPreview: string | null = null;\r\n  imageBase64: string | null = null;\r\n  originalEmail: string | null = null;\r\n  userRole: string = '';\r\n  \r\n  isUploadingPhoto = false;\r\n  private newlyUploadedFiles: Myfilerequest[] = [];\r\n  currentUserId: number = 0;\r\n\r\n  constructor() {\r\n    this.userForm = this.fb.group({\r\n      userID: [0],\r\n      parentID: [0],\r\n      roleId: [''], // Hidden in UI but required by payload\r\n      name: ['', [\r\n        Validators.required, \r\n        Validators.minLength(3), \r\n        Validators.maxLength(50), \r\n        Validators.pattern(/^(?=.*[a-zA-Z])[a-zA-Z\\s\\.\\-']+$/),\r\n        (c: AbstractControl) => c.value && typeof c.value === 'string' && c.value.startsWith(' ') ? { whitespace: true } : null\r\n      ]],\r\n      mobile_No: ['', [Validators.required, Validators.pattern(/^\\d{10}$/)]],\r\n      emailId: ['', [Validators.required, Validators.email], [this.emailExistsValidator()]],\r\n      designation: [''],\r\n      photo: [''],\r\n      photoBase64: [null]\r\n    });\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.currentUserId = Number(this.tokenService.getUserId()) || 0;\r\n    this.userRole = this.tokenService.getUserRole() || 'User';\r\n    this.loadUserProfile();\r\n\r\n    // Start the tour with a slight delay so the DOM is fully rendered\r\n    setTimeout(() => {\r\n      this.userTourService.startUserProfileTour();\r\n    }, 500);\r\n  }\r\n\r\n  loadUserProfile() {\r\n    this.profileService.getUserByID({ userID: this.currentUserId }).subscribe({\r\n      next: (res) => {\r\n        if (res.status && res.data) {\r\n          const data = res.data;\r\n          this.originalEmail = data.emailId || null; // Safely store original email for duplicate check\r\n\r\n          this.userForm.patchValue({\r\n            ...data,\r\n            photoBase64: data.photoBase64 || (data.photo ? 'existing_file' : null)\r\n          });\r\n          \r\n          setTimeout(() => {\r\n            this.photoPreview = data.photo || null;\r\n            this.imageBase64 = data.photoBase64 || null;\r\n            this.cdr.detectChanges();\r\n          });\r\n        } else {\r\n          this.toastr.error(res.message?.[0] || 'Failed to load profile data.');\r\n        }\r\n      },\r\n      error: () => this.toastr.error('A server error occurred while loading profile.')\r\n    });\r\n  }\r\n\r\n  handleUploadComplete(data: { fieldName: string, path: string, base64: string, fileReq: Myfilerequest }) {\r\n    this.userForm.patchValue({ [data.fieldName]: data.base64 });\r\n    if (data.fieldName === 'photoBase64') {\r\n      this.userForm.patchValue({ photo: data.path });\r\n    }\r\n    this.newlyUploadedFiles.push(data.fileReq);\r\n  }\r\n\r\n  handleUploadState(fieldName: string, isUploading: boolean) {\r\n    if (fieldName === 'photoBase64') this.isUploadingPhoto = isUploading;\r\n  }\r\n\r\n  emailExistsValidator(): AsyncValidatorFn {\r\n    return (control: AbstractControl): Observable<ValidationErrors | null> => {\r\n      if (!control.value) return of(null);\r\n\r\n      // Bypass the API call if the email matches the user's current original email\r\n      if (this.originalEmail && this.originalEmail === control.value) {\r\n        return of(null);\r\n      }\r\n\r\n      return timer(500).pipe(\r\n        switchMap(() => this.authService.checkUserExist(control.value)),\r\n        map((res: any) => {\r\n          if (res && res.data && res.data.status === \"0\") {\r\n            return { emailExists: true };\r\n          }\r\n          return null;\r\n        }),\r\n        first(),\r\n        catchError(() => of(null))\r\n      );\r\n    };\r\n  }\r\n\r\n  onSubmit() {\r\n    if (this.userForm.invalid) {\r\n      this.userForm.markAllAsTouched();\r\n      this.toastr.warning('Please fill all required fields correctly before saving.', 'Invalid Form');\r\n      \r\n      // Auto-focus the first invalid control\r\n      setTimeout(() => {\r\n        const firstInvalidControl = document.querySelector('.ng-invalid[formControlName], .ng-invalid input, .ng-invalid textarea, .ng-invalid mat-select');\r\n        if (firstInvalidControl && (firstInvalidControl as HTMLElement).focus) {\r\n          (firstInvalidControl as HTMLElement).focus();\r\n        }\r\n      }, 100);\r\n      return;\r\n    }\r\n\r\n    if (this.isUploadingPhoto) {\r\n      this.toastr.warning('Please wait for background file uploads to complete.', 'Uploading...');\r\n      return;\r\n    }\r\n\r\n    const rawData = this.userForm.getRawValue();\r\n    const payload: Addusermodel = { \r\n      ...rawData, \r\n      name: rawData.name?.trim(),\r\n      designation: rawData.designation?.trim() || '',\r\n      userID: this.currentUserId, // Ensure we are updating the current user\r\n      photoBase64: '' \r\n    };\r\n\r\n    this.manageUserService.addUpdateUser(payload).subscribe({\r\n      next: (res) => {\r\n        if (res.status) {\r\n          this.toastr.success(res.data?.msg || 'Profile updated successfully!');\r\n          this.newlyUploadedFiles = [];\r\n        } else {\r\n          this.toastr.error(res.message?.[0] || 'Operation failed');\r\n        }\r\n      },\r\n      error: () => {\r\n        this.toastr.error('A server error occurred during save.');\r\n      }\r\n    });\r\n  }\r\n\r\n  goBack() {\r\n    // Navigation logic handled via app-header but if specific code is needed:\r\n    if (history.length > 1) {\r\n      history.back();\r\n    }\r\n  }\r\n}\r\n","<app-header \r\n  [title]=\"'My Profile'\" \r\n  [showBack]=\"true\"\r\n  (onBack)=\"goBack()\">\r\n</app-header>\r\n\r\n<div class=\"container mt-4 mb-5\">\r\n  <div class=\"card shadow-sm p-4 border-0 animate__animated animate__fadeIn\">\r\n    <form [formGroup]=\"userForm\" (ngSubmit)=\"onSubmit()\">\r\n      <div class=\"row g-3\">\r\n        \r\n        <!-- User Role -->\r\n        <div class=\"col-md-6\" id=\"tour-profile-role\">\r\n          <mat-form-field appearance=\"outline\" class=\"w-100\">\r\n            <mat-label>User Role</mat-label>\r\n            <input matInput [value]=\"userRole\" disabled>\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <!-- Full Name -->\r\n        <div class=\"col-md-6\" id=\"tour-profile-name\">\r\n          <mat-form-field appearance=\"outline\" class=\"w-100\">\r\n            <mat-label>Full Name</mat-label>\r\n            <input matInput formControlName=\"name\" placeholder=\"Enter full name\" maxlength=\"50\">\r\n            <mat-error *ngIf=\"userForm.get('name')?.hasError('required')\">Full Name is required.</mat-error>\r\n            <mat-error *ngIf=\"userForm.get('name')?.hasError('minlength')\">Name must be at least 3 characters long.</mat-error>\r\n            <mat-error *ngIf=\"userForm.get('name')?.hasError('maxlength')\">Name cannot exceed 50 characters.</mat-error>\r\n            <mat-error *ngIf=\"userForm.get('name')?.hasError('pattern')\">Only letters, spaces, hyphens, and apostrophes allowed.</mat-error>\r\n            <mat-error *ngIf=\"userForm.get('name')?.hasError('whitespace')\">Space at the beginning is not allowed.</mat-error>\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <!-- Mobile Number -->\r\n        <div class=\"col-md-6\" id=\"tour-profile-mobile\">\r\n          <mat-form-field appearance=\"outline\" class=\"w-100\">\r\n            <mat-label>Mobile Number</mat-label>\r\n            <input matInput formControlName=\"mobile_No\" placeholder=\"Enter 10-digit mobile number\">\r\n            <mat-error *ngIf=\"userForm.get('mobile_No')?.hasError('required')\">Mobile Number is required.</mat-error>\r\n            <mat-error *ngIf=\"userForm.get('mobile_No')?.hasError('pattern')\">Please enter a valid 10-digit mobile number.</mat-error>\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <!-- Email Address -->\r\n        <div class=\"col-md-6\" id=\"tour-profile-email\">\r\n          <mat-form-field appearance=\"outline\" class=\"w-100\">\r\n            <mat-label>Email Address</mat-label>\r\n            <input matInput formControlName=\"emailId\" placeholder=\"e.g., example@mail.com\">\r\n            <div matSuffix *ngIf=\"userForm.get('emailId')?.pending\" class=\"spinner-border spinner-border-sm text-primary me-3\"></div>\r\n            <mat-error *ngIf=\"userForm.get('emailId')?.hasError('required')\">Email Address is required.</mat-error>\r\n            <mat-error *ngIf=\"userForm.get('emailId')?.hasError('email')\">Please enter a valid email address.</mat-error>\r\n            <mat-error *ngIf=\"userForm.get('emailId')?.hasError('emailExists')\">This email is already registered to another user.</mat-error>\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <!-- Photo Upload -->\r\n        <div class=\"col-md-12\" id=\"tour-profile-photo\">\r\n          <app-file-upload\r\n            class=\"d-block w-100\"\r\n            label=\"Profile Photo\"\r\n            fieldName=\"photoBase64\" \r\n            [folderName]=\"config.ProfilePhoto\"\r\n            [existingFilePath]=\"photoPreview\"\r\n            [preloadedBase64]=\"imageBase64\"\r\n            (onUploadComplete)=\"handleUploadComplete($event)\"\r\n            (onUploadStateChange)=\"handleUploadState('photoBase64', $event)\">\r\n          </app-file-upload>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"d-flex mt-4 pt-3 border-top\">\r\n        <!-- ms-auto buttons ko dhakka dekar right side le jayega -->\r\n        <div class=\"ms-auto d-flex gap-2\">\r\n            <button class=\"btn btn-outline-secondary d-flex align-items-center\" type=\"button\" (click)=\"goBack()\">\r\n              <mat-icon class=\"me-1\">arrow_back</mat-icon> Cancel\r\n            </button>\r\n            <div id=\"tour-profile-submit\">\r\n              <app-loding-btn type=\"submit\" [disabled]=\"userForm.invalid\" btnClass=\"btn-primary\">\r\n                <mat-icon class=\"me-1\">save</mat-icon> Update Profile\r\n              </app-loding-btn>\r\n            </div>\r\n        </div>\r\n      </div>\r\n\r\n    </form>\r\n  </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, NO_ERRORS_SCHEMA, ChangeDetectorRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { UserService } from '../../services/user_services/userservice';\r\n\r\n@Component({\r\n  selector: 'app-send-otp',\r\n  standalone: true,\r\n  imports: [CommonModule, FormsModule],\r\n  templateUrl: './send-otp.html',\r\n  schemas: [NO_ERRORS_SCHEMA]\r\n})\r\nexport class SendOtp implements OnInit, OnDestroy {\r\n  @Input() contactValue: string = '';\r\n  @Input() contactType: 'email' | 'mobile' = 'email';\r\n  \r\n  @Input() isSendOtpOnload: boolean = false;\r\n\r\n  // Emits the verified OTP string, or an empty string if verification fails\r\n  @Output() onVerify = new EventEmitter<string>();\r\n\r\n  isOtpSent: boolean = false;\r\n  isOtpVerified: boolean = false;\r\n  isSendingOtp: boolean = false;\r\n  generatedOtp: string = '';\r\n  enteredOtp: string = '';\r\n\r\n  timerLeft: number = 0;\r\n  timerDisplay: string = '01:00';\r\n  private timerSub: any;\r\n\r\n  constructor(private userService: UserService, private toastr: ToastrService, private cdr: ChangeDetectorRef) {}\r\n\r\n  ngOnInit(): void {\r\n    if (this.isSendOtpOnload) {\r\n      this.sendOtp();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.clearTimer();\r\n  }\r\n\r\n  sendOtp() {\r\n    if (!this.contactValue) {\r\n      this.toastr.warning('Please provide a valid contact (email or mobile) first.');\r\n      return;\r\n    }\r\n\r\n    this.isSendingOtp = true;\r\n    this.enteredOtp = '';\r\n    this.isOtpVerified = false;\r\n    this.generatedOtp = Math.floor(100000 + Math.random() * 900000).toString();\r\n    console.log('Generated OTP:', this.generatedOtp); // For testing purposes, remove in production\r\n    if (this.contactType === 'email') {\r\n      const mailData = {\r\n        To: this.contactValue,\r\n        Subject: 'One Time Password',\r\n        TemplateID: 'OTP',\r\n        ParameterList: [this.generatedOtp]\r\n      };\r\n\r\n      this.userService.sendCommonMail(mailData as any).subscribe({\r\n        next: () => this.handleSuccess(),\r\n        error: () => this.handleError()\r\n      });\r\n    } else {\r\n      const smsData = {\r\n        mobileNo: this.contactValue,\r\n        templateid: 'OTP',\r\n        parameterlist: [this.generatedOtp]\r\n      };\r\n      this.userService.sendSms(smsData as any).subscribe({\r\n        next: () => this.handleSuccess(),\r\n        error: () => this.handleError()\r\n      });\r\n    }\r\n  }\r\n\r\n  private handleSuccess() {\r\n    this.isSendingOtp = false;\r\n    this.isOtpSent = true;\r\n    this.toastr.success('OTP sent successfully.');\r\n    this.startTimer(60);\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  private handleError() {\r\n    this.isSendingOtp = false;\r\n    this.toastr.error('Failed to send OTP. Please try again.');\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  verifyOtp() {\r\n    if (this.enteredOtp && this.enteredOtp === this.generatedOtp) {\r\n      this.isOtpVerified = true;\r\n      this.toastr.success('OTP Verified Successfully');\r\n      this.clearTimer();\r\n      this.onVerify.emit(this.enteredOtp);\r\n    } else {\r\n      this.toastr.error('Invalid OTP. Please check and try again.');\r\n      this.onVerify.emit('');\r\n    }\r\n  }\r\n\r\n  startTimer(seconds: number) {\r\n    this.timerLeft = seconds;\r\n    this.updateTimerDisplay();\r\n    this.clearTimer();\r\n    \r\n    this.timerSub = setInterval(() => {\r\n      this.timerLeft--;\r\n      this.updateTimerDisplay();\r\n      this.cdr.detectChanges();\r\n      if (this.timerLeft <= 0) {\r\n        this.clearTimer();\r\n      }\r\n    }, 1000);\r\n  }\r\n\r\n  updateTimerDisplay() {\r\n    const minutes = Math.floor(this.timerLeft / 60);\r\n    const seconds = this.timerLeft % 60;\r\n    this.timerDisplay = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\r\n  }\r\n\r\n  private clearTimer() {\r\n    if (this.timerSub) {\r\n      clearInterval(this.timerSub);\r\n      this.timerSub = null;\r\n    }\r\n  }\r\n}\r\n","<div class=\"send-otp-wrapper\">\r\n  \r\n  <div class=\"input-group\" *ngIf=\"!isOtpVerified\">\r\n    <input type=\"text\" class=\"form-control bg-body-secondary\" placeholder=\"Enter 6-digit OTP\" \r\n           [(ngModel)]=\"enteredOtp\" maxlength=\"6\" [readonly]=\"!isOtpSent\" [disabled]=\"isOtpVerified\">\r\n    \r\n    <button *ngIf=\"!isOtpSent\" class=\"btn btn-success px-4\" type=\"button\" (click)=\"sendOtp()\" [disabled]=\"!contactValue || isSendingOtp\">\r\n      <span *ngIf=\"isSendingOtp\" class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\r\n      {{ isSendingOtp ? 'Sending...' : 'Get OTP' }}\r\n    </button>\r\n    \r\n    <button *ngIf=\"isOtpSent\" class=\"btn btn-success px-4\" type=\"button\" (click)=\"verifyOtp()\" [disabled]=\"!enteredOtp || timerLeft <= 0\">Verify</button>\r\n  </div>\r\n\r\n  <!-- Timer and Resend Controls -->\r\n  <div class=\"small mt-2 text-end\" *ngIf=\"isOtpSent && !isOtpVerified\">\r\n    <span *ngIf=\"timerLeft > 0\" class=\"text-muted\">Resend OTP in {{timerDisplay}}</span>\r\n    <a *ngIf=\"timerLeft === 0 && !isSendingOtp\" href=\"javascript:void(0)\" class=\"text-success text-decoration-none fw-medium\" (click)=\"sendOtp()\">Resend OTP</a>\r\n    <span *ngIf=\"timerLeft === 0 && isSendingOtp\" class=\"text-muted\">Sending...</span>\r\n  </div>\r\n\r\n</div>","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { MY_APP_CONFIG } from '../../app.config.token';\r\nimport { CommanRequest, MessageEF, Result } from '../../model';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class Changepasswordservice {\r\n  private config = inject(MY_APP_CONFIG);\r\n  private http = inject(HttpClient);\r\n\r\n  updatePassword(model: CommanRequest): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(`${this.config.apiBaseUrl}/AddUser/UpdatePassword`, model);\r\n  }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { AbstractControl, FormBuilder, ReactiveFormsModule, ValidatorFn, Validators } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Changepasswordservice } from '../../../shared/services/adminpanel_services/changepasswordservice';\r\nimport { Tokenservice } from '../../../shared/services/user_services/tokenservice';\r\nimport { UI_HELPER } from '../../../shared/ui-helper';\r\nimport { AppHeader } from '../../../shared/components/app-header/app-header';\r\nimport { AppBtn } from '../../../shared/components/app-btn/app-btn';\r\nimport { SendOtp } from '../../../shared/components/send-otp/send-otp';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { UserTourService } from '../../../shared/services/apptour/user-tour.service';\r\n\r\n@Component({\r\n  selector: 'app-changepassword',\r\n  imports: [ReactiveFormsModule, CommonModule, UI_HELPER, AppHeader, AppBtn, SendOtp, MatButtonModule],\r\n  templateUrl: './changepassword.html',\r\n})\r\nexport class Changepassword implements OnInit {\r\n  form: any;\r\n  isSubmitted: boolean = false;\r\n  userEmail: string = '';\r\n  isOtpVerified: boolean = false;\r\n\r\n  constructor(\r\n    private fb: FormBuilder,\r\n    private service: Changepasswordservice,\r\n    private tokenService: Tokenservice,\r\n    private toastr: ToastrService,\r\n    private userTourService: UserTourService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.userEmail = this.tokenService.getEmail();\r\n\r\n    this.form = this.fb.group({\r\n      oldPassword: ['', Validators.required],\r\n      password: ['', [\r\n        Validators.required, \r\n        Validators.minLength(6), \r\n        Validators.maxLength(50),\r\n        Validators.pattern(/(?=.*[^a-zA-Z0-9 ])/)\r\n      ]],\r\n      confirmPassword: ['', Validators.required]\r\n    }, {\r\n      validators: [this.passwordMatchValidator, this.oldNewPasswordNotMatchValidator]\r\n    });\r\n\r\n    // Form render hone ke thodi der baad tour ko start karein\r\n    setTimeout(() => {\r\n      this.userTourService.startChangePasswordTour();\r\n    }, 500);\r\n  }\r\n\r\n  passwordMatchValidator: ValidatorFn = (control: AbstractControl): null => {\r\n    const password = control.get('password');\r\n    const confirmPassword = control.get('confirmPassword');\r\n    if (password && confirmPassword && password.value !== confirmPassword.value) {\r\n      confirmPassword?.setErrors({ ...confirmPassword.errors, passwordMismatch: true });\r\n    } else if (confirmPassword?.hasError('passwordMismatch')) {\r\n      const errors = { ...confirmPassword.errors };\r\n      delete errors['passwordMismatch'];\r\n      confirmPassword.setErrors(Object.keys(errors).length ? errors : null);\r\n    }\r\n    return null;\r\n  };\r\n\r\n  oldNewPasswordNotMatchValidator: ValidatorFn = (control: AbstractControl): null => {\r\n    const oldPassword = control.get('oldPassword');\r\n    const newPassword = control.get('password');\r\n    if (oldPassword && newPassword && oldPassword.value && oldPassword.value === newPassword.value) {\r\n      newPassword?.setErrors({ ...newPassword.errors, sameAsOld: true });\r\n    } else if (newPassword?.hasError('sameAsOld')) {\r\n      const errors = { ...newPassword.errors };\r\n      delete errors['sameAsOld'];\r\n      newPassword.setErrors(Object.keys(errors).length ? errors : null);\r\n    }\r\n    return null;\r\n  };\r\n\r\n  onOtpVerified(otpValue: string) {\r\n    if (otpValue) {\r\n      this.isOtpVerified = true;\r\n    } else {\r\n      this.isOtpVerified = false;\r\n    }\r\n  }\r\n\r\n  onSubmit(): void {\r\n    this.isSubmitted = true;\r\n    if (this.form.valid && this.isOtpVerified) {\r\n      const payload = {\r\n        UserID: this.tokenService.getUserId(), // Automatically grabs ID for logged-in user\r\n        OldPassword: this.form.value.oldPassword,\r\n        Password: this.form.value.password\r\n      };\r\n\r\n      this.service.updatePassword(payload as any).subscribe({\r\n        next: (res: any) => {\r\n          if (res.status === true || res.statuscode === 0 || res.statuscode === 200) {\r\n            this.toastr.success(res.message?.[0] || 'Password updated successfully!', 'Success');\r\n            this.form.reset();\r\n            this.isSubmitted = false;\r\n          } else {\r\n            this.toastr.error(res.message?.[0] || 'Failed to update password.', 'Error');\r\n          }\r\n        },\r\n        error: (err) => {\r\n          console.error('Password Update Error:', err);\r\n          this.toastr.error('System error. Contact the admin.', 'Server Error');\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  hasDisplayableError(controlName: string): Boolean {\r\n    const control = this.form.get(controlName);\r\n    return Boolean(control?.invalid) &&\r\n      (this.isSubmitted || Boolean(control?.touched) || Boolean(control?.dirty));\r\n  }\r\n\r\n  cancel(): void {\r\n    window.history.back();\r\n  }\r\n}\r\n","<app-header \r\n  [title]=\"'Change Password'\" \r\n  [showBack]=\"true\">\r\n</app-header>\r\n\r\n<div class=\"container mt-4 mb-5\">\r\n  <div class=\"card shadow-sm p-4 border-0 animate__animated animate__fadeIn\">\r\n    <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\r\n      <div class=\"row g-3\">\r\n        <!-- Old Password -->\r\n        <div class=\"col-md-12\" id=\"tour-cp-old\">\r\n          <mat-form-field appearance=\"outline\" class=\"w-100\">\r\n            <mat-label>Old Password</mat-label>\r\n            <input matInput type=\"password\" formControlName=\"oldPassword\" placeholder=\"Enter current password\">\r\n            <mat-error *ngIf=\"hasDisplayableError('oldPassword') && form.controls.oldPassword.hasError('required')\">\r\n              Old password is required.\r\n            </mat-error>\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <!-- New Password -->\r\n        <div class=\"col-md-12\" id=\"tour-cp-new\">\r\n          <mat-form-field appearance=\"outline\" class=\"w-100\">\r\n            <mat-label>New Password</mat-label>\r\n            <input matInput type=\"password\" formControlName=\"password\" placeholder=\"Enter new password\">\r\n            <mat-error *ngIf=\"hasDisplayableError('password')\">\r\n              <span *ngIf=\"form.controls.password.hasError('required')\">New password is required.</span>\r\n              <span *ngIf=\"form.controls.password.hasError('minlength')\">At least 6 characters required.</span>\r\n              <span *ngIf=\"form.controls.password.hasError('pattern')\">One or more special character(s) required.</span>\r\n              <span *ngIf=\"form.controls.password.hasError('sameAsOld')\">New password cannot be the same as your old password.</span>\r\n            </mat-error>\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <!-- Confirm New Password -->\r\n        <div class=\"col-md-12\" id=\"tour-cp-confirm\">\r\n          <mat-form-field appearance=\"outline\" class=\"w-100\">\r\n            <mat-label>Confirm New Password</mat-label>\r\n            <input matInput type=\"password\" formControlName=\"confirmPassword\" placeholder=\"Confirm new password\">\r\n            <mat-error *ngIf=\"hasDisplayableError('confirmPassword')\">\r\n              <span *ngIf=\"form.controls.confirmPassword.hasError('required')\">Please confirm your new password.</span>\r\n              <span *ngIf=\"form.controls.confirmPassword.hasError('passwordMismatch')\">Passwords do not match.</span>\r\n            </mat-error>\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <!-- OTP Verification Section (Shows after password fields are valid) -->\r\n        <div class=\"col-md-12\" *ngIf=\"form.valid\">\r\n          <label class=\"form-label fw-medium text-secondary small\">Verify OTP sent to {{ userEmail }}</label>\r\n          <div *ngIf=\"!isOtpVerified\">\r\n            <app-send-otp [contactValue]=\"userEmail\" contactType=\"email\" (onVerify)=\"onOtpVerified($event)\">\r\n            </app-send-otp>\r\n          </div>\r\n          <div class=\"text-success small fw-medium mt-2\" *ngIf=\"isOtpVerified\">\r\n            <mat-icon class=\"align-middle\" style=\"font-size: 1.2rem; height: 1.2rem; width: 1.2rem;\">check_circle</mat-icon> OTP Verified\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"d-flex mt-4 pt-3 border-top\">\r\n        <div class=\"ms-auto d-flex gap-2\">\r\n          <button class=\"btn btn-outline-secondary d-flex align-items-center\" type=\"button\" (click)=\"cancel()\">\r\n            <mat-icon class=\"me-1\">arrow_back</mat-icon> Cancel\r\n          </button>\r\n          <div id=\"tour-cp-submit\">\r\n            <app-loding-btn type=\"submit\" [disabled]=\"!form.valid || !isOtpVerified\" btnClass=\"btn-primary\">\r\n              <mat-icon class=\"me-1\">save</mat-icon> Update Password\r\n            </app-loding-btn>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </form>\r\n  </div>\r\n</div>","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { MY_APP_CONFIG } from '../../app.config.token';\r\nimport { CommanRequest, MessageEF, Result, Workspacemodel, Listitems } from '../../model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class Workspaceservice {\r\n  private config = inject(MY_APP_CONFIG);\r\n  private http = inject(HttpClient);\r\n  private readonly baseUrl = `${this.config.apiBaseUrl}/Workspace`;\r\n\r\n  getWorkspaceList(filterData: CommanRequest): Observable<Result<Workspacemodel[]>> {\r\n    return this.http.post<Result<Workspacemodel[]>>(`${this.baseUrl}/GetWorkspaceList`, filterData);\r\n  }\r\n\r\n  addWorkspace(model: Workspacemodel): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(`${this.baseUrl}/AddWorkspace`, model);\r\n  }\r\n\r\n  updateWorkspace(model: Workspacemodel): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(`${this.baseUrl}/UpdateWorkspace`, model);\r\n  }\r\n\r\n  modifyStatusWorkspace(model: CommanRequest): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(`${this.baseUrl}/ModifyStatusWorkspace`, model);\r\n  }\r\n\r\n  getApplication(model: CommanRequest): Observable<Result<Listitems[]>> {\r\n    return this.http.post<Result<Listitems[]>>(`${this.baseUrl}/GetApplication`, model);\r\n  }\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnDestroy, ChangeDetectorRef, inject } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport * as L from 'leaflet';\r\n\r\n// --- FIX 1: Load Marker Icons from the site (CDN) to prevent local path/COEP issues ---\r\nconst iconDefault = L.icon({\r\n  iconRetinaUrl: 'https://unpkg.com/leaflet@1.9.4/dist/images/marker-icon-2x.png',\r\n  iconUrl: 'https://unpkg.com/leaflet@1.9.4/dist/images/marker-icon.png',\r\n  shadowUrl: 'https://unpkg.com/leaflet@1.9.4/dist/images/marker-shadow.png',\r\n  iconSize: [25, 41],\r\n  iconAnchor: [12, 41],\r\n  popupAnchor: [1, -34],\r\n  shadowSize: [41, 41],\r\n  crossOrigin: true as any // Bypasses the ERR_BLOCKED_BY_RESPONSE COEP error\r\n});\r\nL.Marker.prototype.options.icon = iconDefault;\r\n\r\n@Component({\r\n  selector: 'app-location-piker',\r\n  standalone: true,\r\n  imports: [CommonModule, MatButtonModule, MatIconModule],\r\n  templateUrl: './location-piker.html',\r\n  styles: [`\r\n   @import url('https://unpkg.com/leaflet@1.9.4/dist/leaflet.css');\r\n    .custom-modal-overlay {\r\n      position: fixed;\r\n      top: 0; left: 0; right: 0; bottom: 0;\r\n      background: rgba(0,0,0,0.6);\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      z-index: 2000;\r\n    }\r\n    .custom-modal-content {\r\n      background: white;\r\n      padding: 20px;\r\n      border-radius: 12px;\r\n      width: 95%;\r\n      max-width: 800px;\r\n      box-shadow: 0 15px 35px rgba(0,0,0,0.3);\r\n    }\r\n    #leaflet-map {\r\n      height: 450px; \r\n      width: 100%;\r\n      border: 1px solid #ddd;\r\n      border-radius: 8px;\r\n      overflow: hidden;\r\n      background: #f8f9fa; /* Placeholder color */\r\n    }\r\n  `]\r\n})\r\nexport class LocationPiker implements OnDestroy {\r\n  @Input() initialLat: any = null;\r\n  @Input() initialLng: any = null;\r\n  @Output() onLocationPicked = new EventEmitter<{ lat: string, lng: string }>();\r\n\r\n  private cdr = inject(ChangeDetectorRef);\r\n\r\n  isOpen = false;\r\n  private map: L.Map | undefined;\r\n  private marker: L.Marker | undefined;\r\n  selectedLat: number = 20.5937;\r\n  selectedLng: number = 78.9629;\r\n\r\n  openMap(): void {\r\n    this.isOpen = true;\r\n    const lat = Number(this.initialLat);\r\n    const lng = Number(this.initialLng);\r\n    this.selectedLat = (!isNaN(lat) && lat !== 0) ? lat : 20.5937;\r\n    this.selectedLng = (!isNaN(lng) && lng !== 0) ? lng : 78.9629;\r\n\r\n    setTimeout(() => this.initMap(), 300);\r\n  }\r\n\r\n  private initMap(): void {\r\n    if (this.map) {\r\n      this.map.remove();\r\n    }\r\n\r\n    // Initialize map\r\n    this.map = L.map('leaflet-map').setView([this.selectedLat, this.selectedLng], 15);\r\n\r\n    // Tiles (Using a standard URL, browser won't block these like it blocks CSS storage)\r\n    L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {\r\n      maxZoom: 19,\r\n      attribution: '© OpenStreetMap',\r\n      crossOrigin: true\r\n    }).addTo(this.map);\r\n\r\n    this.marker = L.marker([this.selectedLat, this.selectedLng], { \r\n      draggable: true, \r\n      icon: iconDefault \r\n    }).addTo(this.map);\r\n\r\n    this.marker.on('dragend', () => {\r\n      const position = this.marker!.getLatLng();\r\n      this.selectedLat = position.lat;\r\n      this.selectedLng = position.lng;\r\n      this.cdr.detectChanges(); // Trigger UI update\r\n    });\r\n\r\n    this.map.on('click', (e: L.LeafletMouseEvent) => {\r\n      this.selectedLat = e.latlng.lat;\r\n      this.selectedLng = e.latlng.lng;\r\n      if (this.marker) this.marker.setLatLng(e.latlng);\r\n      this.cdr.detectChanges(); // Trigger UI update\r\n    });\r\n\r\n    // FIX 3: Force refresh layout\r\n    setTimeout(() => {\r\n      if (this.map) this.map.invalidateSize();\r\n    }, 400);\r\n  }\r\n\r\n  locateMe(): void {\r\n    if (navigator.geolocation) {\r\n      navigator.geolocation.getCurrentPosition((pos) => {\r\n        this.selectedLat = pos.coords.latitude;\r\n        this.selectedLng = pos.coords.longitude;\r\n        if (this.map && this.marker) {\r\n          this.map.setView([this.selectedLat, this.selectedLng], 16);\r\n          this.marker.setLatLng([this.selectedLat, this.selectedLng]);\r\n        }\r\n        this.cdr.detectChanges(); // Trigger UI update\r\n      });\r\n    }\r\n  }\r\n\r\n  confirm(): void {\r\n    this.onLocationPicked.emit({ \r\n      lat: this.selectedLat.toFixed(6), \r\n      lng: this.selectedLng.toFixed(6) \r\n    });\r\n    this.close();\r\n  }\r\n\r\n  close(): void {\r\n    if (this.map) {\r\n      this.map.remove();\r\n      this.map = undefined;\r\n    }\r\n    this.isOpen = false;\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.close();\r\n  }\r\n}\r\n","<!-- Encapsulated trigger button -->\r\n<button mat-stroked-button color=\"primary\" type=\"button\" class=\"w-100\" (click)=\"openMap()\">\r\n  <mat-icon>map</mat-icon> Choose Location on Map\r\n</button>\r\n\r\n<!-- Custom CSS Modal -->\r\n<div class=\"custom-modal-overlay\" *ngIf=\"isOpen\">\r\n  <div class=\"custom-modal-content\">\r\n    <div class=\"d-flex justify-content-between align-items-center mb-3\">\r\n      <h2 class=\"mt-0 mb-0\" style=\"font-size: 1.25rem; font-weight: 500;\">Choose Location</h2>\r\n      <div class=\"badge bg-light text-dark border p-2 text-muted fw-bold\">Lat: {{ selectedLat | number:'1.4-6' }} | Lng: {{ selectedLng | number:'1.4-6' }}</div>\r\n    </div>\r\n\r\n    <div class=\"p-0\">\r\n      <div id=\"leaflet-map\" style=\"height: 400px; width: 100%; position: relative; z-index: 1;\"></div>\r\n    </div>\r\n    \r\n    <div class=\"d-flex justify-content-end mt-3\">\r\n      <button mat-stroked-button color=\"primary\" type=\"button\" (click)=\"locateMe()\" style=\"margin-right: auto;\">\r\n        <mat-icon>my_location</mat-icon> Current Location\r\n      </button>\r\n      <button mat-button type=\"button\" (click)=\"close()\">Cancel</button>\r\n      <button mat-raised-button color=\"primary\" type=\"button\" class=\"ms-2\" (click)=\"confirm()\">Select Location</button>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { TourService } from './tour.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class WorkspaceTourService {\r\n  private tourService = inject(TourService);\r\n\r\n  // Flow 1: Workspace List Page Ka Tour\r\n  startWorkspaceListTour() {\r\n    const steps: any[] = [];\r\n\r\n    if (document.querySelector('#tour-add-btn')) {\r\n      steps.push({ \r\n        element: '#tour-add-btn', \r\n        popover: { \r\n          title: '✨ Add New Workspace', \r\n          description: 'Click here to quickly create a new workspace setup.', \r\n          side: \"left\", \r\n          align: 'start' \r\n        } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('.tour-edit-btn')) {\r\n      steps.push({ \r\n        element: '.tour-edit-btn', \r\n        popover: { \r\n          title: '✏️ Edit Workspace', \r\n          description: 'Use this button to modify an existing workspace settings.', \r\n          side: \"left\", \r\n          align: 'start' \r\n        } \r\n      });\r\n    }\r\n\r\n    if (steps.length > 0) {\r\n      this.tourService.startTour('workspace_list', steps);\r\n    }\r\n  }\r\n\r\n  // Flow 2: Add Workspace Form Page Ka Tour\r\n  startAddWorkspaceTour() {\r\n    const steps: any[] = [];\r\n\r\n    if (document.querySelector('#tour-ws-app')) {\r\n      steps.push({ \r\n        element: '#tour-ws-app', \r\n        popover: { \r\n          title: '📱 Select Application', \r\n          description: 'Choose the application under which this workspace will be created.', \r\n          side: \"top\", \r\n          align: 'start'\r\n        } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('#tour-ws-name')) {\r\n      steps.push({ \r\n        element: '#tour-ws-name', \r\n        popover: { \r\n          title: '🔤 Workspace Name', \r\n          description: 'Enter the name of your new workspace here.', \r\n          side: \"top\", \r\n          align: 'start'\r\n        } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('#tour-ws-gst')) {\r\n      steps.push({ \r\n        element: '#tour-ws-gst', \r\n        popover: { \r\n          title: '🧾 GST No.', \r\n          description: 'Enter the GST number if applicable.', \r\n          side: \"top\", \r\n          align: 'start'\r\n        } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('#tour-ws-desc')) {\r\n      steps.push({ \r\n        element: '#tour-ws-desc', \r\n        popover: { \r\n          title: '📝 Description', \r\n          description: 'Provide a brief description of the workspace.', \r\n          side: \"top\", \r\n          align: 'start'\r\n        } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('#tour-ws-image')) {\r\n      steps.push({ \r\n        element: '#tour-ws-image', \r\n        popover: { \r\n          title: '🖼️ Workspace Image', \r\n          description: 'Upload a main display image for your workspace.', \r\n          side: \"top\", \r\n          align: 'start'\r\n        } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('#tour-ws-thumb')) {\r\n      steps.push({ \r\n        element: '#tour-ws-thumb', \r\n        popover: { \r\n          title: '🔳 Workspace Thumbnail', \r\n          description: 'Upload a smaller thumbnail icon for your workspace.', \r\n          side: \"top\", \r\n          align: 'start'\r\n        } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('#tour-ws-next')) {\r\n      steps.push({ \r\n        element: '#tour-ws-next', \r\n        popover: { \r\n          title: '➡️ Next Step', \r\n          description: 'Click here to proceed to the Location & Address details.', \r\n          side: \"top\", \r\n          align: 'end'\r\n        } \r\n      });\r\n    }\r\n\r\n    if (steps.length > 0) {\r\n      this.tourService.startTour('add_workspace_form', steps);\r\n    }\r\n  }\r\n\r\n  // Flow 3: Add Workspace Form Page Ka Tour (STEP 2)\r\n  startAddWorkspaceStep2Tour() {\r\n    const steps: any[] = [];\r\n\r\n    if (document.querySelector('#tour-ws-address')) {\r\n      steps.push({ \r\n        element: '#tour-ws-address', \r\n        popover: { \r\n          title: '📍 Address', \r\n          description: 'Enter the full physical address of the workspace.', \r\n          side: \"top\", \r\n          align: 'start'\r\n        } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('#tour-ws-lat')) {\r\n      steps.push({ \r\n        element: '#tour-ws-lat', \r\n        popover: { title: '🌐 Latitude', description: 'Enter latitude or select it using the map picker above.', side: \"top\", align: 'start' } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('#tour-ws-lng')) {\r\n      steps.push({ \r\n        element: '#tour-ws-lng', \r\n        popover: { title: '🌐 Longitude', description: 'Enter longitude or select it using the map picker above.', side: \"top\", align: 'start' } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('#tour-ws-submit')) {\r\n      steps.push({ \r\n        element: '#tour-ws-submit', \r\n        popover: { title: '💾 Submit Form', description: 'Click here to save the workspace!', side: \"top\", align: 'end' } \r\n      });\r\n    }\r\n\r\n    if (steps.length > 0) {\r\n      // Naya unique ID diya gaya hai taaki dono parts alag-alag track ho sakein\r\n      this.tourService.startTour('add_workspace_step2', steps);\r\n    }\r\n  }\r\n}\r\n","import { Component, EventEmitter, Output, input, effect, inject, ChangeDetectorRef, OnInit, signal } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators, ReactiveFormsModule, AbstractControl } from '@angular/forms';\r\nimport { Workspacemodel, Listitems, CommanRequest, Myfilerequest } from '../../../../shared/model';\r\nimport { Workspaceservice } from '../../../../shared/services/adminpanel_services/workspaceservice';\r\nimport { UserService } from '../../../../shared/services/user_services/userservice';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { CommonModule } from '@angular/common';\r\nimport { UI_HELPER } from '../../../../shared/ui-helper';\r\nimport { AppBtn } from '../../../../shared/components/app-btn/app-btn';\r\nimport { AppHeader } from '../../../../shared/components/app-header/app-header';\r\nimport { Tokenservice } from '../../../../shared/services/user_services/tokenservice';\r\nimport { FileUpload } from '../../../../shared/components/file-upload/file-upload';\r\nimport { MY_APP_CONFIG } from '../../../../shared/app.config.token';\r\nimport { LocationPiker } from '../../../../shared/components/location-piker/location-piker';\r\nimport { WorkspaceTourService } from '../../../../shared/services/apptour/workspace-tour.service';\r\nimport { MatStepperModule, MatStepper } from '@angular/material/stepper';\r\n@Component({\r\n  selector: 'app-addworkspace',\r\n  standalone: true,\r\n  imports: [CommonModule, UI_HELPER, ReactiveFormsModule, AppBtn, AppHeader, FileUpload, LocationPiker, MatStepperModule],\r\n  templateUrl: './addworkspace.html'\r\n})\r\nexport class Addworkspace implements OnInit {\r\n   config = inject(MY_APP_CONFIG);\r\n  private fb = inject(FormBuilder);\r\n  private service = inject(Workspaceservice);\r\n  private globalUserService = inject(UserService);\r\n  private toastr = inject(ToastrService);\r\n  private cdr = inject(ChangeDetectorRef);\r\n  private token = inject(Tokenservice);\r\n  private workspaceTourService = inject(WorkspaceTourService);\r\n\r\n  editData = input<Workspacemodel | null>(null);\r\n  @Output() onSave = new EventEmitter<Workspacemodel>();\r\n  @Output() onCancel = new EventEmitter<void>();\r\n\r\n  workspaceForm: FormGroup;\r\n  isEditMode = false;\r\n  imagePreview: string | null = null;\r\n  thumbPreview: string | null = null; \r\n  imageBase64: string | null = null;\r\n  thumbBase64: string | null = null;\r\n  applications = signal<Listitems[]>([]); \r\n  USERID = 0;\r\n\r\n  isUploadingImage = false;\r\n  isUploadingThumb = false;\r\n  private newlyUploadedFiles: Myfilerequest[] = [];\r\n\r\n  // For address character count\r\n  readonly addressMaxLength = 500;\r\n  readonly descriptionMaxLength = 500;\r\n\r\n  constructor() {\r\n    this.USERID = Number(this.token.getUserId());\r\n    this.workspaceForm = this.fb.group({\r\n      deptid: [0],\r\n      loginid: [this.USERID],\r\n      ipadress: [''],\r\n      documentissuedval: [null, Validators.required],\r\n      deptname: ['', [\r\n        Validators.required, \r\n        Validators.minLength(3), \r\n        Validators.maxLength(50), \r\n        Validators.pattern(/^[a-zA-Z0-9\\s\\.\\-']+$/),\r\n        (c: AbstractControl) => c.value && typeof c.value === 'string' && c.value.startsWith(' ') ? { whitespace: true } : null\r\n      ]],\r\n      deptnamehindi: [''],\r\n      issuenameenglish: [''],\r\n      ULBType: [''],\r\n      description: ['', Validators.maxLength(this.descriptionMaxLength)],\r\n      isactive: [true],\r\n      captcha: ['TEST'],\r\n      image: [''],\r\n      imagebase64: [''],\r\n      imagethumbnail: [''],\r\n      imagethumbnailbase64: [''],\r\n      // New fields with validation\r\n      gstno: ['', Validators.maxLength(50)],\r\n      address: ['', Validators.maxLength(this.addressMaxLength)],\r\n      latitude: ['', [Validators.pattern(/^-?\\d+(\\.\\d+)?$/), Validators.maxLength(20)]],\r\n      longitude: ['', [Validators.pattern(/^-?\\d+(\\.\\d+)?$/), Validators.maxLength(20)]]\r\n    });\r\n\r\n    effect(() => {\r\n      const data = this.editData();\r\n      if (data) {\r\n        this.isEditMode = true;\r\n        this.workspaceForm.patchValue({\r\n          ...data,\r\n          documentissuedval: data.documentissuedval != null ? data.documentissuedval.toString() : null,\r\n          \r\n          imagebase64: data.imagebase64 || (data.image ? 'existing_file' : null),\r\n          imagethumbnailbase64: data.imagethumbnailbase64 || (data.imagethumbnail ? 'existing_file' : null)\r\n        });\r\n        setTimeout(() => {\r\n          this.imageBase64 = data.imagebase64 || null;\r\n          this.thumbBase64 = data.imagethumbnailbase64 || null;\r\n          this.imagePreview = data.image || null;\r\n          this.thumbPreview = data.imagethumbnail || null;\r\n          this.cdr.detectChanges();\r\n        });\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.loadApplications();\r\n    \r\n    setTimeout(() => {\r\n      this.workspaceTourService.startAddWorkspaceTour();\r\n    }, 500);\r\n  }\r\n\r\n  loadApplications() {\r\n    const req: CommanRequest = { userID: this.USERID };\r\n    this.service.getApplication(req).subscribe(res => {\r\n      if (res.status && res.data) {\r\n        this.applications.set(res.data);\r\n\r\n        // Auto-select if there is exactly 1 application and the field is not already set\r\n        if (res.data.length === 1 && !this.workspaceForm.get('documentissuedval')?.value) {\r\n          this.workspaceForm.patchValue({\r\n            documentissuedval: res.data[0].value.toString()\r\n          });\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  handleUploadComplete(data: { fieldName: string, path: string, base64: string, fileReq: Myfilerequest }) {\r\n    this.workspaceForm.patchValue({ [data.fieldName]: data.base64 });\r\n    \r\n    if (data.fieldName === 'imagebase64') {\r\n      this.workspaceForm.patchValue({ image: data.path });\r\n    } else if (data.fieldName === 'imagethumbnailbase64') {\r\n      this.workspaceForm.patchValue({ imagethumbnail: data.path });\r\n    }\r\n    \r\n    this.newlyUploadedFiles.push(data.fileReq);\r\n  }\r\n\r\n  handleUploadState(fieldName: string, isUploading: boolean) {\r\n    if (fieldName === 'imagebase64') this.isUploadingImage = isUploading;\r\n    if (fieldName === 'imagethumbnailbase64') this.isUploadingThumb = isUploading;\r\n  }\r\n\r\n  // Helper for address character count\r\n  get addressCharCount(): number {\r\n    return this.workspaceForm.get('address')?.value?.length || 0;\r\n  }\r\n\r\n  get descriptionCharCount(): number {\r\n    return this.workspaceForm.get('description')?.value?.length || 0;\r\n  }\r\n\r\n  handleLocationPicked(coords: { lat: string, lng: string }) {\r\n    this.workspaceForm.patchValue({\r\n      latitude: coords.lat,\r\n      longitude: coords.lng\r\n    });\r\n    this.toastr.success('Location selected successfully!');\r\n  }\r\n\r\n  goNext(stepper: MatStepper) {\r\n    const appCtrl = this.workspaceForm.get('documentissuedval');\r\n    const nameCtrl = this.workspaceForm.get('deptname');\r\n    \r\n    if (appCtrl?.valid && nameCtrl?.valid) {\r\n      stepper.next();\r\n    } else {\r\n      appCtrl?.markAsTouched();\r\n      nameCtrl?.markAsTouched();\r\n      this.toastr.warning('Please fill the required Basic Information fields first.');\r\n    }\r\n  }\r\n\r\n  onStepChange(event: any) {\r\n    // Jab user Step 2 (index 1) par aayega, tabhi Part 2 wala tour start hoga\r\n    if (event.selectedIndex === 1) {\r\n      setTimeout(() => {\r\n        this.workspaceTourService.startAddWorkspaceStep2Tour();\r\n      }, 500);\r\n    }\r\n  }\r\n\r\n  onSubmit() {\r\n    if (this.workspaceForm.invalid) {\r\n      this.workspaceForm.markAllAsTouched();\r\n      this.toastr.warning('Please fill all required fields correctly before saving.', 'Invalid Form');\r\n      \r\n      // Auto-focus the first invalid control\r\n      setTimeout(() => {\r\n        const firstInvalidControl = document.querySelector('.ng-invalid[formControlName], .ng-invalid input, .ng-invalid textarea, .ng-invalid mat-select');\r\n        if (firstInvalidControl && (firstInvalidControl as HTMLElement).focus) {\r\n          (firstInvalidControl as HTMLElement).focus();\r\n        }\r\n      }, 100);\r\n      return;\r\n    }\r\n\r\n    if (this.isUploadingImage || this.isUploadingThumb) {\r\n      this.toastr.warning('Please wait for background file uploads to complete.', 'Uploading...');\r\n      return;\r\n    }\r\n\r\n    this.workspaceForm.patchValue({ loginid: this.USERID });\r\n\r\n    const rawData = this.workspaceForm.getRawValue();\r\n    \r\n    // Get the text value of the selected application dropdown option\r\n    const selectedAppId = rawData.documentissuedval;\r\n    const selectedApp = this.applications().find(app => String(app.value) === String(selectedAppId));\r\n    const selectedAppText = selectedApp ? selectedApp.text : '';\r\n\r\n    // Map to the Workspacemodel to ensure type safety.\r\n    // The backend is expected to handle camelCase properties.\r\n    const apiPayload: Workspacemodel = {\r\n      deptid: rawData.deptid,\r\n      loginid: this.USERID,\r\n      ipadress: rawData.ipadress,\r\n      documentissuedval: Number(rawData.documentissuedval) || 0,\r\n      deptname: rawData.deptname,\r\n      deptnamehindi: rawData.deptname,      // Set default to Name (English)\r\n      issuenameenglish: selectedAppText,    // Set to Selected App Text\r\n      ULBType: selectedAppText,             // Set to Selected App Text\r\n      isactive: rawData.isactive,\r\n      captcha: rawData.captcha,\r\n      description: rawData.description,\r\n      image: rawData.image,\r\n      imagebase64: '', // Clear heavy data before sending\r\n      imagethumbnail: rawData.imagethumbnail,\r\n      imagethumbnailbase64: '', // Clear heavy data before sending\r\n      gstno: rawData.gstno,\r\n      address: rawData.address,\r\n      latitude: rawData.latitude,\r\n      longitude: rawData.longitude\r\n    };\r\n\r\n    console.log('Submitting workspace data:', apiPayload);\r\n    const action$ = this.isEditMode \r\n      ? this.service.updateWorkspace(apiPayload) \r\n      : this.service.addWorkspace(apiPayload);\r\n\r\n    action$.subscribe({\r\n      next: (res) => {\r\n        if (res.status) {\r\n          this.toastr.success('Success');\r\n          this.newlyUploadedFiles = [];\r\n          this.onSave.emit(apiPayload);\r\n        } else {\r\n          this.toastr.error('Operation failed');\r\n          this.rollbackNewlyUploadedFiles();\r\n        }\r\n      },\r\n      error: () => {\r\n        this.toastr.error('A server error occurred during save.');\r\n        this.rollbackNewlyUploadedFiles();\r\n      }\r\n    });\r\n  }\r\n\r\n  private rollbackNewlyUploadedFiles() {\r\n    this.newlyUploadedFiles.forEach(fileReq => {\r\n      if (this.globalUserService.deleteFileResult) {\r\n        this.globalUserService.deleteFileResult(fileReq).subscribe({\r\n          next: (res: any) => {\r\n            // Double check both outer wrapper and inner MessageEF status\r\n            const isReallySuccess = res && res.status && (!res.data || (res.data.satus !== 'Error' && res.data.status !== 'Error'));\r\n            if (isReallySuccess) {\r\n              console.log(`Deleted orphaned file: ${fileReq.fileName}`);\r\n            } else {\r\n              console.error(`Failed to delete orphaned file: ${fileReq.fileName}`, res.message?.[0] || res.data?.msg || 'Unknown error');\r\n            }\r\n          },\r\n          error: (err) => console.error(`HTTP Error deleting orphaned file: ${fileReq.fileName}`, err)\r\n        });\r\n      }\r\n    });\r\n    this.newlyUploadedFiles = [];\r\n  }\r\n\r\n  goBack() { \r\n    this.rollbackNewlyUploadedFiles();\r\n    this.onCancel.emit(); \r\n  }\r\n}\r\n","<app-header [title]=\"isEditMode ? 'Update Workspace' : 'Add Workspace'\" [showBack]=\"true\" (onBack)=\"goBack()\"\r\n(onOnlineRestored)=\"loadApplications()\"></app-header>\r\n\r\n<div class=\"container mt-4 mb-5\">\r\n  <div class=\"card shadow-sm border-0 p-2\">\r\n    <form [formGroup]=\"workspaceForm\" (ngSubmit)=\"onSubmit()\">\r\n      <mat-stepper linear=\"true\" #stepper class=\"bg-transparent\" (selectionChange)=\"onStepChange($event)\">\r\n      \r\n        <!-- ==============================================\r\n             STEP 1: Basic Information & Images \r\n             ============================================== -->\r\n        <mat-step label=\"Basic Information\" [stepControl]=\"workspaceForm\">\r\n          <div class=\"row mt-3\">\r\n            \r\n            <!-- Application Dropdown -->\r\n            <div class=\"col-md-12 mb-3\">\r\n              <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-ws-app\">\r\n                <mat-label>Select Application</mat-label>\r\n                <mat-select formControlName=\"documentissuedval\">\r\n                  <mat-option *ngFor=\"let app of applications()\" [value]=\"app.value\">{{app.text}}</mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"workspaceForm.get('documentissuedval')?.hasError('required')\">\r\n                  Application selection is required\r\n                </mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div class=\"col-md-6 mb-3\">\r\n              <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-ws-name\">\r\n                <mat-label>Workspace Name</mat-label>\r\n                <input matInput formControlName=\"deptname\" placeholder=\"Enter Workspace Name\" maxlength=\"50\">\r\n                <mat-error *ngIf=\"workspaceForm.get('deptname')?.hasError('required')\">Workspace Name is required.</mat-error>\r\n                <mat-error *ngIf=\"workspaceForm.get('deptname')?.hasError('minlength')\">Name must be at least 3 characters long.</mat-error>\r\n                <mat-error *ngIf=\"workspaceForm.get('deptname')?.hasError('maxlength')\">Name cannot exceed 50 characters.</mat-error>\r\n                <mat-error *ngIf=\"workspaceForm.get('deptname')?.hasError('pattern')\">Only letters, numbers, spaces, hyphens, and apostrophes allowed.</mat-error>\r\n                <mat-error *ngIf=\"workspaceForm.get('deptname')?.hasError('whitespace')\">Workspace Name cannot start with a space.</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <!-- GST No -->\r\n            <div class=\"col-md-6 mb-3\">\r\n              <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-ws-gst\"><mat-label>GST No.</mat-label>\r\n                <input matInput formControlName=\"gstno\" maxlength=\"50\" placeholder=\"Enter GST No.\">\r\n                <mat-error *ngIf=\"workspaceForm.get('gstno')?.hasError('maxlength')\">GST No. cannot be more than 50 characters.</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div class=\"col-md-12 mb-3\">\r\n              <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-ws-desc\">\r\n                <mat-label>Description</mat-label>\r\n                <textarea matInput formControlName=\"description\" rows=\"2\" [maxlength]=\"descriptionMaxLength\" placeholder=\"Enter description\"></textarea>\r\n                <mat-hint align=\"end\">{{ descriptionCharCount }} / {{ descriptionMaxLength }}</mat-hint>\r\n                <mat-error *ngIf=\"workspaceForm.get('description')?.hasError('maxlength')\">Description cannot be more than {{ descriptionMaxLength }} characters.</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <!-- MAIN IMAGE -->\r\n            <div class=\"col-md-6 mb-3\" id=\"tour-ws-image\"> \r\n              <app-file-upload\r\n                label=\"Workspace Image\"\r\n                fieldName=\"imagebase64\"\r\n                [folderName]=\"config.WorkspaceImage\"\r\n                [existingFilePath]=\"imagePreview\"\r\n                [preloadedBase64]=\"imageBase64\"\r\n                (onUploadComplete)=\"handleUploadComplete($event)\"\r\n                (onUploadStateChange)=\"handleUploadState('imagebase64', $event)\">\r\n              </app-file-upload>\r\n            </div>\r\n\r\n            <!-- THUMBNAIL IMAGE -->\r\n            <div class=\"col-md-6 mb-3\" id=\"tour-ws-thumb\"> \r\n              <app-file-upload\r\n                label=\"Workspace Thumbnail\"\r\n                fieldName=\"imagethumbnailbase64\"\r\n                [folderName]=\"config.WorkspaceImagethumbnail\"\r\n                [existingFilePath]=\"thumbPreview\"\r\n                [preloadedBase64]=\"thumbBase64\"\r\n                (onUploadComplete)=\"handleUploadComplete($event)\"\r\n                (onUploadStateChange)=\"handleUploadState('imagethumbnailbase64', $event)\">\r\n              </app-file-upload>\r\n            </div>\r\n          </div>\r\n\r\n          <div class=\"d-flex justify-content-between pt-2 border-top\">\r\n            <button class=\"btn btn-outline-danger d-flex align-items-center\" type=\"button\" (click)=\"goBack()\">\r\n              <mat-icon class=\"me-1\">close</mat-icon> Cancel\r\n            </button>\r\n            <button class=\"btn btn-primary d-flex align-items-center\" type=\"button\" id=\"tour-ws-next\" (click)=\"goNext(stepper)\">\r\n              Next Step <mat-icon class=\"ms-1\">arrow_forward</mat-icon>\r\n            </button>\r\n          </div>\r\n        </mat-step>\r\n\r\n        <!-- ==============================================\r\n             STEP 2: Location & Address\r\n             ============================================== -->\r\n        <mat-step label=\"Location & Address\">\r\n          <div class=\"row mt-3\">\r\n            \r\n            <!-- Address -->\r\n            <div class=\"col-md-12 mb-3\">\r\n              <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-ws-address\"><mat-label>Address</mat-label>\r\n                <textarea matInput formControlName=\"address\" rows=\"2\" [maxlength]=\"addressMaxLength\" placeholder=\"Enter full address\"></textarea>\r\n                <mat-hint align=\"end\">{{ addressCharCount }} / {{ addressMaxLength }}</mat-hint>\r\n                <mat-error *ngIf=\"workspaceForm.get('address')?.hasError('maxlength')\">Address cannot be more than {{ addressMaxLength }} characters.</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <!-- Location Fields -->\r\n            <div class=\"col-md-12 mb-2\">\r\n              <app-location-piker\r\n                [initialLat]=\"workspaceForm.get('latitude')?.value\"\r\n                [initialLng]=\"workspaceForm.get('longitude')?.value\"\r\n                (onLocationPicked)=\"handleLocationPicked($event)\">\r\n              </app-location-piker>\r\n            </div>\r\n            <div class=\"col-md-6 mb-3\">\r\n              <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-ws-lat\"><mat-label>Latitude</mat-label>\r\n                <input matInput formControlName=\"latitude\" placeholder=\"e.g., 26.9124\">\r\n                <mat-error *ngIf=\"workspaceForm.get('latitude')?.invalid\">Please enter a valid latitude.</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n            <div class=\"col-md-6 mb-3\">\r\n              <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-ws-lng\"><mat-label>Longitude</mat-label>\r\n                <input matInput formControlName=\"longitude\" placeholder=\"e.g., 75.7873\">\r\n                <mat-error *ngIf=\"workspaceForm.get('longitude')?.invalid\">Please enter a valid longitude.</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n          </div>\r\n\r\n          <div class=\"d-flex justify-content-between pt-2 border-top\">\r\n            <button class=\"btn btn-outline-secondary d-flex align-items-center\" matStepperPrevious type=\"button\">\r\n              <mat-icon class=\"me-1\">arrow_back</mat-icon> Back\r\n            </button>\r\n            <div class=\"d-flex gap-2\">\r\n              <button class=\"btn btn-outline-danger d-flex align-items-center\" type=\"button\" (click)=\"goBack()\">\r\n                <mat-icon class=\"me-1\">close</mat-icon> Cancel\r\n              </button>\r\n              <app-loding-btn type=\"submit\" [disabled]=\"workspaceForm.invalid\" btnClass=\"btn-primary\" id=\"tour-ws-submit\">\r\n                <mat-icon class=\"me-1\">{{ isEditMode ? 'save' : 'check_circle' }}</mat-icon>\r\n                {{ isEditMode ? 'Update Workspace' : 'Submit Form' }}\r\n              </app-loding-btn> \r\n            </div>\r\n          </div>\r\n        </mat-step>\r\n\r\n      </mat-stepper>\r\n    </form>\r\n  </div>\r\n</div>\r\n","import { Component, inject, OnInit, signal, ViewChild } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport { UI_HELPER } from '../../../../shared/ui-helper';\r\nimport { Workspacemodel, CommanRequest } from '../../../../shared/model';\r\nimport { Workspaceservice } from '../../../../shared/services/adminpanel_services/workspaceservice';\r\nimport { Tokenservice } from '../../../../shared/services/user_services/tokenservice';\r\nimport { AppHeader } from '../../../../shared/components/app-header/app-header';\r\nimport { Addworkspace } from '../addworkspace/addworkspace';\r\nimport { FileDownload } from '../../../../shared/components/file-download/file-download';\r\nimport { ConfirmationService } from '../../../../shared/services/confirmation.service';\r\nimport { WorkspaceTourService } from '../../../../shared/services/apptour/workspace-tour.service';\r\n\r\n@Component({\r\n  selector: 'app-workspacelist',\r\n  standalone: true,\r\n  imports: [CommonModule, UI_HELPER, AppHeader, Addworkspace, FileDownload],\r\n  templateUrl: './workspacelist.html',\r\n})\r\nexport class Workspacelist implements OnInit {\r\n  private workspaceService = inject(Workspaceservice);\r\n  private tokenService = inject(Tokenservice);\r\n  private toastr = inject(ToastrService);\r\n  private confirmationService = inject(ConfirmationService);\r\n  private workspaceTourService = inject(WorkspaceTourService);\r\n\r\n  // Updated to separate thumbnail and main image columns\r\n  displayedColumns: string[] = ['sno', 'deptname', 'issuedBy', 'imagethumbnailbase64', 'imagebase64', 'isactive', 'actions'];\r\n  dataSource = new MatTableDataSource<Workspacemodel>([]);\r\n  \r\n  selectedItem = signal<Workspacemodel | null>(null);\r\n  searchTerm: string = '';\r\n  showForm = false;\r\n  USERID: number = 0;\r\n\r\n  @ViewChild(MatPaginator) set paginator(mp: MatPaginator) {\r\n    if (mp) this.dataSource.paginator = mp;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.USERID = Number(this.tokenService.getUserId()) || 0;\r\n    this.loadWorkspaces();\r\n  }\r\n\r\n  loadWorkspaces() {\r\n    const request: CommanRequest = { userID: this.USERID };\r\n    this.workspaceService.getWorkspaceList(request).pipe(take(1)).subscribe({\r\n      next: (res) => {\r\n        if (res.status && res.data) {\r\n          this.dataSource.data = res.data;\r\n          \r\n          setTimeout(() => {\r\n            this.workspaceTourService.startWorkspaceListTour();\r\n          }, 500);\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  applyFilter(event: any) {\r\n    const val = typeof event === 'string' ? event : (event.target as HTMLInputElement).value;\r\n    this.searchTerm = val; \r\n    this.dataSource.filter = val.trim().toLowerCase();\r\n  }\r\n\r\n  toggleStatus(row: Workspacemodel) {\r\n    const request: CommanRequest = { userID: this.USERID, id: row.deptid, active: !row.isactive, check: 1 };\r\n    this.workspaceService.modifyStatusWorkspace(request).subscribe(res => {\r\n      if (res.status) {\r\n        this.toastr.success('Status updated');\r\n        this.loadWorkspaces();\r\n      }\r\n    });\r\n  }\r\n\r\n  handleSave(formData?: Workspacemodel) {\r\n    // Always reload to fetch accurate DB fields, cleared base64 strings, and correct image paths\r\n    this.loadWorkspaces(); \r\n    this.showForm = false;\r\n    this.selectedItem.set(null);\r\n  }\r\n\r\n  onEdit(row: Workspacemodel) {\r\n    this.selectedItem.set(row);\r\n    this.showForm = true;\r\n  }\r\n\r\n  openAddDialog() {\r\n    this.selectedItem.set(null);\r\n    this.showForm = true;\r\n  }\r\n\r\n  onDelete(row: Workspacemodel) {\r\n    this.confirmationService.confirm(\r\n      'Delete Workspace',\r\n      `Are you sure you want to delete <b>\"${row.deptname}\"</b>? This action cannot be undone.`,\r\n      'Delete'\r\n    ).subscribe((confirmed: boolean) => {\r\n      if (confirmed) {\r\n        // Using check: 2 for delete operation as per your previous implementation structure\r\n        const request: CommanRequest = { userID: this.USERID, id: row.deptid, active: false, check: 2 };\r\n        this.workspaceService.modifyStatusWorkspace(request).subscribe({\r\n          next: (res) => {\r\n            if (res.status) {\r\n              this.toastr.success('Workspace deleted successfully.');\r\n              this.loadWorkspaces(); \r\n            } else {\r\n              this.toastr.error(res.message?.toString() || 'Failed to delete workspace.');\r\n            }\r\n          },\r\n          error: (err) => {\r\n            this.toastr.error('An error occurred while deleting the workspace.');\r\n          }\r\n        });\r\n      }\r\n    });\r\n  }\r\n}\r\n","<div *ngIf=\"!showForm\" class=\"d-flex flex-column bg-light fade-in\" style=\"height: 100vh; overflow: hidden;\">\r\n  <app-header \r\n    title=\"Workspaces\" \r\n    [showSearch]=\"true\" \r\n    searchLabel=\"Search Workspace Name...\" \r\n    (onSearch)=\"applyFilter($event)\"\r\n    (onOnlineRestored)=\"loadWorkspaces()\">\r\n  </app-header>\r\n  \r\n  <div class=\"container-fluid p-3 d-flex flex-column flex-grow-1 page-list-container\" style=\"min-height: 0;\">\r\n    <div class=\"mat-elevation-z2 rounded overflow-hidden flex-grow-1 d-flex flex-column bg-white\" style=\"min-height: 0;\">\r\n      \r\n      <div class=\"table-responsive flex-grow-1\" style=\"overflow-y: auto;\">\r\n        <table mat-table [dataSource]=\"dataSource\" class=\"w-100 responsive-table\">\r\n      <ng-container matColumnDef=\"sno\">\r\n        <th mat-header-cell *matHeaderCellDef style=\"width: 60px;\">S.No</th>\r\n        <td mat-cell *matCellDef=\"let row; let i = index\" data-label=\"S.No\" class=\"py-2\">{{i+1}}</td>\r\n      </ng-container>\r\n\r\n      <ng-container matColumnDef=\"deptname\">\r\n        <th mat-header-cell *matHeaderCellDef>Workspace</th>\r\n        <td mat-cell *matCellDef=\"let row\" data-label=\"Workspace\" class=\"py-2\">\r\n          <strong>{{row.deptname}}</strong><br>\r\n          <!-- <small class=\"text-muted\">{{row.deptnamehindi}}</small> -->\r\n        </td>\r\n      </ng-container>\r\n\r\n      <ng-container matColumnDef=\"issuedBy\">\r\n        <th mat-header-cell *matHeaderCellDef>Issued By</th>\r\n        <td mat-cell *matCellDef=\"let row\" data-label=\"Issued By\" class=\"py-2\">{{row.issuenameenglish}}</td>\r\n      </ng-container>\r\n\r\n      <!-- Thumbnail -->\r\n      <ng-container matColumnDef=\"imagethumbnailbase64\">\r\n        <th mat-header-cell *matHeaderCellDef> Thumbnail </th>\r\n        <td mat-cell *matCellDef=\"let row\" data-label=\"Thumbnail\" class=\"py-2\">\r\n          <app-file-download *ngIf=\"row.imagethumbnail\"\r\n             [preloadedBase64]=\"row.imagethumbnailbase64\"\r\n             [filePath]=\"row.imagethumbnail\"\r\n             altText=\"Thumbnail\"\r\n             customStyle=\"height: 30px; border-radius: 2px;\">\r\n          </app-file-download>\r\n          <small *ngIf=\"!row.imagethumbnail\" class=\"text-muted\">No Thumb</small>\r\n        </td>\r\n      </ng-container>\r\n\r\n      <!-- Image -->\r\n      <ng-container matColumnDef=\"imagebase64\">\r\n        <th mat-header-cell *matHeaderCellDef> Image </th>\r\n        <td mat-cell *matCellDef=\"let row\" data-label=\"Image\" class=\"py-2\">\r\n          <app-file-download *ngIf=\"row.image\"\r\n             [preloadedBase64]=\"row.imagebase64\"\r\n             [filePath]=\"row.image\"\r\n             altText=\"Workspace Image\"\r\n             customStyle=\"height: 40px; border-radius: 4px;\">\r\n          </app-file-download>\r\n          <small *ngIf=\"!row.image\" class=\"text-muted\">No Image</small>\r\n        </td>\r\n      </ng-container>\r\n\r\n      <ng-container matColumnDef=\"isactive\">\r\n        <th mat-header-cell *matHeaderCellDef>Status</th>\r\n        <td mat-cell *matCellDef=\"let row\" data-label=\"Status\" class=\"py-2\"><mat-slide-toggle color=\"primary\" [checked]=\"row.isactive\" (change)=\"toggleStatus(row)\"></mat-slide-toggle></td>\r\n      </ng-container>\r\n\r\n      <ng-container matColumnDef=\"actions\">\r\n        <th mat-header-cell *matHeaderCellDef class=\"text-end\">Actions</th>\r\n        <td mat-cell *matCellDef=\"let row\" class=\"text-end mobile-actions py-2\" data-label=\"Actions\">\r\n          <button mat-icon-button color=\"primary\" class=\"tour-edit-btn\" (click)=\"onEdit(row)\" matTooltip=\"Edit\"><mat-icon>edit</mat-icon></button>\r\n          <button mat-icon-button color=\"warn\" (click)=\"onDelete(row)\" matTooltip=\"Delete\"><mat-icon>delete_outline</mat-icon></button>\r\n        </td>\r\n      </ng-container>\r\n\r\n      <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n      <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" style=\"height: auto; min-height: 48px;\"></tr>\r\n\r\n      <!-- No Data Row -->\r\n      <tr class=\"mat-row\" *matNoDataRow>\r\n        <td class=\"mat-cell text-center py-5\" [attr.colspan]=\"displayedColumns.length\">\r\n          <div *ngIf=\"searchTerm\" class=\"d-flex flex-column align-items-center justify-content-center text-muted\">\r\n            <mat-icon class=\"mb-2 opacity-50\" style=\"font-size: 40px; height: 40px; width: 40px;\">search_off</mat-icon>\r\n            <span>No records matching the search <b class=\"text-danger\">\"{{searchTerm}}\"</b></span>\r\n          </div>\r\n          <div *ngIf=\"!searchTerm\" class=\"d-flex flex-column align-items-center justify-content-center text-muted\">\r\n            <mat-icon class=\"mb-2 opacity-50\" style=\"font-size: 40px; height: 40px; width: 40px;\">inbox</mat-icon>\r\n            <span>No workspaces found. Click the + button to add one.</span>\r\n          </div>\r\n        </td>\r\n      </tr>\r\n    </table>\r\n      </div>\r\n      <div class=\"mt-auto bg-white border-top\" style=\"z-index: 10;\">\r\n        <mat-paginator [pageSizeOptions]=\"[10, 25, 50]\" showFirstLastButtons aria-label=\"Select page\"></mat-paginator>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  \r\n  <button id=\"tour-add-btn\" mat-fab color=\"primary\" class=\"position-fixed fab-mobile shadow-lg\" style=\"bottom: 30px; right: 30px; z-index: 100;\" (click)=\"openAddDialog()\" matTooltip=\"Add New Workspace\">\r\n    <mat-icon>add</mat-icon>\r\n  </button>\r\n</div>\r\n\r\n<div *ngIf=\"showForm\" class=\"h-100\">\r\n  <app-addworkspace [editData]=\"selectedItem()\" (onSave)=\"handleSave($event)\" (onCancel)=\"showForm = false\"></app-addworkspace>\r\n</div>\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { TourService } from './tour.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class OutletTourService {\r\n  private tourService = inject(TourService);\r\n\r\n  // Flow 1: Outlet List Page Ka Tour\r\n  startOutletListTour() {\r\n    const steps: any[] = [];\r\n\r\n    if (document.querySelector('#tour-add-btn')) {\r\n      steps.push({ \r\n        element: '#tour-add-btn', \r\n        popover: { \r\n          title: '✨ Add New Outlet', \r\n          description: 'Click here to quickly create a new outlet setup.', \r\n          side: \"left\", \r\n          align: 'start' \r\n        } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('.tour-edit-btn')) {\r\n      steps.push({ \r\n        element: '.tour-edit-btn', \r\n        popover: { \r\n          title: '✏️ Edit Outlet', \r\n          description: 'Use this button to modify an existing outlet settings.', \r\n          side: \"left\", \r\n          align: 'start' \r\n        } \r\n      });\r\n    }\r\n\r\n    if (steps.length > 0) {\r\n      this.tourService.startTour('outlet_list', steps);\r\n    }\r\n  }\r\n\r\n  // Flow 2: Add Outlet Form Page Ka Tour\r\n  startAddOutletTour() {\r\n    const steps: any[] = [];\r\n\r\n    if (document.querySelector('#tour-outlet-app')) {\r\n      steps.push({ \r\n        element: '#tour-outlet-app', \r\n        popover: { \r\n          title: '📱 Select Application', \r\n          description: 'Choose the application under which this outlet will be created.', \r\n          side: \"top\", \r\n          align: 'start'\r\n        } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('#tour-outlet-ws')) {\r\n      steps.push({ \r\n        element: '#tour-outlet-ws', \r\n        popover: { \r\n          title: '🏢 Select Workspace', \r\n          description: 'Choose the workspace for this outlet.', \r\n          side: \"top\", \r\n          align: 'start'\r\n        } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('#tour-outlet-name')) {\r\n      steps.push({ \r\n        element: '#tour-outlet-name', \r\n        popover: { \r\n          title: '🔤 Outlet Name', \r\n          description: 'Enter the name of your new outlet here.', \r\n          side: \"top\", \r\n          align: 'start'\r\n        } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('#tour-outlet-gst')) {\r\n      steps.push({ \r\n        element: '#tour-outlet-gst', \r\n        popover: { title: '🧾 GST No.', description: 'Enter the GST number if applicable.', side: \"top\", align: 'start' } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('#tour-outlet-dl')) {\r\n      steps.push({ \r\n        element: '#tour-outlet-dl', \r\n        popover: { title: '📑 DL No.', description: 'Enter the Drug License number if applicable.', side: \"top\", align: 'start' } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('#tour-outlet-desc')) {\r\n      steps.push({ \r\n        element: '#tour-outlet-desc', \r\n        popover: { title: '📝 Description', description: 'Provide a brief description of the outlet.', side: \"top\", align: 'start' } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('#tour-outlet-image')) {\r\n      steps.push({ \r\n        element: '#tour-outlet-image', \r\n        popover: { \r\n          title: '🖼️ Outlet Image', \r\n          description: 'Upload a main display image for your outlet.', \r\n          side: \"top\", \r\n          align: 'start'\r\n        } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('#tour-outlet-thumb')) {\r\n      steps.push({ \r\n        element: '#tour-outlet-thumb', \r\n        popover: { title: '🔳 Outlet Thumbnail', description: 'Upload a smaller thumbnail icon for your outlet.', side: \"top\", align: 'start' } \r\n      });\r\n    }\r\n\r\n    if (document.querySelector('#tour-outlet-next')) {\r\n      steps.push({ \r\n        element: '#tour-outlet-next', \r\n        popover: { \r\n          title: '➡️ Next Step', \r\n          description: 'Click here to proceed to the Location & Address details.', \r\n          side: \"top\", \r\n          align: 'end'\r\n        } \r\n      });\r\n    }\r\n\r\n    if (steps.length > 0) {\r\n      this.tourService.startTour('add_outlet_form', steps);\r\n    }\r\n  }\r\n\r\n  // Flow 3: Add Outlet Form Page Ka Tour (STEP 2)\r\n  startAddOutletStep2Tour() {\r\n    const steps: any[] = [];\r\n\r\n    if (document.querySelector('#tour-outlet-address')) {\r\n      steps.push({ element: '#tour-outlet-address', popover: { title: '📍 Address', description: 'Enter the full physical address of the outlet.', side: \"top\", align: 'start' } });\r\n    }\r\n\r\n    if (document.querySelector('#tour-outlet-lat')) {\r\n      steps.push({ element: '#tour-outlet-lat', popover: { title: '🌐 Latitude', description: 'Enter latitude or select it using the map picker above.', side: \"top\", align: 'start' } });\r\n    }\r\n\r\n    if (document.querySelector('#tour-outlet-lng')) {\r\n      steps.push({ element: '#tour-outlet-lng', popover: { title: '🌐 Longitude', description: 'Enter longitude or select it using the map picker above.', side: \"top\", align: 'start' } });\r\n    }\r\n\r\n    if (document.querySelector('#tour-outlet-submit')) {\r\n      steps.push({ element: '#tour-outlet-submit', popover: { title: '💾 Submit Form', description: 'Click here to save the outlet!', side: \"top\", align: 'end' } });\r\n    }\r\n\r\n    if (steps.length > 0) {\r\n      this.tourService.startTour('add_outlet_step2', steps);\r\n    }\r\n  }\r\n}\r\n","import { Component, EventEmitter, Output, input, effect, inject, ChangeDetectorRef, OnInit, signal } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators, ReactiveFormsModule, AbstractControl } from '@angular/forms';\r\nimport { Outletmodel, Listitems, CommanRequest, Myfilerequest } from '../../../../shared/model';\r\nimport { Outletservice } from '../../../../shared/services/adminpanel_services/outletservice';\r\nimport { UserService } from '../../../../shared/services/user_services/userservice';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { CommonModule } from '@angular/common';\r\nimport { UI_HELPER } from '../../../../shared/ui-helper';\r\nimport { AppBtn } from '../../../../shared/components/app-btn/app-btn';\r\nimport { AppHeader } from '../../../../shared/components/app-header/app-header';\r\nimport { Tokenservice } from '../../../../shared/services/user_services/tokenservice';\r\nimport { FileUpload } from '../../../../shared/components/file-upload/file-upload';\r\nimport { MY_APP_CONFIG } from '../../../../shared/app.config.token';\r\nimport { LocationPiker } from '../../../../shared/components/location-piker/location-piker';\r\nimport { OutletTourService } from '../../../../shared/services/apptour/outlet-tour.service';\r\nimport { MatStepperModule, MatStepper } from '@angular/material/stepper';\r\n\r\n@Component({\r\n  selector: 'app-addoutlet',\r\n  standalone: true,\r\n  imports: [CommonModule, UI_HELPER, ReactiveFormsModule, AppBtn, AppHeader, FileUpload, LocationPiker, MatStepperModule],\r\n  templateUrl: './addoutlet.html'\r\n})\r\nexport class Addoutlet implements OnInit {\r\n  config = inject(MY_APP_CONFIG);\r\n  private fb = inject(FormBuilder);\r\n  private service = inject(Outletservice);\r\n  private globalUserService = inject(UserService);\r\n  private toastr = inject(ToastrService);\r\n  private cdr = inject(ChangeDetectorRef);\r\n  private token = inject(Tokenservice);\r\n  private outletTourService = inject(OutletTourService);\r\n\r\n  editData = input<Outletmodel | null>(null);\r\n  @Output() onSave = new EventEmitter<Outletmodel>();\r\n  @Output() onCancel = new EventEmitter<void>();\r\n\r\n  outletForm: FormGroup;\r\n  isEditMode = false;\r\n  imagePreview: string | null = null;\r\n  thumbPreview: string | null = null;\r\n  imageBase64: string | null = null;\r\n  thumbBase64: string | null = null;\r\n  \r\n  applications = signal<Listitems[]>([]);\r\n  workspaces = signal<Listitems[]>([]);\r\n  USERID = 0;\r\n\r\n  isUploadingImage = false;\r\n  isUploadingThumb = false;\r\n  private newlyUploadedFiles: Myfilerequest[] = [];\r\n\r\n  // For address character count\r\n  readonly addressMaxLength = 500;\r\n  readonly descriptionMaxLength = 500;\r\n\r\n  constructor() {\r\n    this.USERID = Number(this.token.getUserId());\r\n    this.outletForm = this.fb.group({\r\n      hecatid: [0],\r\n      loginid: [this.USERID],\r\n      ipadress: [''],\r\n      documentissuedval: [null, Validators.required],\r\n      documentcatval: [null, Validators.required],\r\n      categoryname: ['', [\r\n        Validators.required, \r\n        Validators.minLength(3), \r\n        Validators.maxLength(50), \r\n        Validators.pattern(/^[a-zA-Z0-9\\s\\.\\-']+$/),\r\n        (c: AbstractControl) => c.value && typeof c.value === 'string' && c.value.startsWith(' ') ? { whitespace: true } : null\r\n      ]],\r\n      categorynamehindi: ['', [Validators.maxLength(50)]],\r\n      description: ['', Validators.maxLength(this.descriptionMaxLength)],\r\n      isactive: [true],\r\n      captcha: ['TEST'],\r\n      image: [''],\r\n      imagebase64: [''],\r\n      imagethumbnail: [''],\r\n      imagethumbnailbase64: [''],\r\n      // New fields with validation\r\n      gstno: ['', Validators.maxLength(50)],\r\n      dlno: ['', Validators.maxLength(50)],\r\n      address: ['', Validators.maxLength(this.addressMaxLength)],\r\n      latitude: ['', [Validators.pattern(/^-?\\d+(\\.\\d+)?$/), Validators.maxLength(20)]],\r\n      longitude: ['', [Validators.pattern(/^-?\\d+(\\.\\d+)?$/), Validators.maxLength(20)]]\r\n    });\r\n\r\n    effect(() => {\r\n      const data = this.editData();\r\n      if (data) {\r\n        this.isEditMode = true;\r\n        this.outletForm.patchValue({\r\n          ...data,\r\n          documentissuedval: data.documentissuedval != null ? data.documentissuedval.toString() : null,\r\n          documentcatval: data.documentcatval != null ? data.documentcatval.toString() : null,\r\n          imagebase64: data.imagebase64 || (data.image ? 'existing_file' : null),\r\n          imagethumbnailbase64: data.imagethumbnailbase64 || (data.imagethumbnail ? 'existing_file' : null)\r\n        });\r\n        this.loadWorkspaces(data.documentissuedval);\r\n        setTimeout(() => {\r\n          this.imageBase64 = data.imagebase64 || null;\r\n          this.thumbBase64 = data.imagethumbnailbase64 || null;\r\n          this.imagePreview = data.image || null;\r\n          this.thumbPreview = data.imagethumbnail || null;\r\n          this.cdr.detectChanges();\r\n        });\r\n      }\r\n    });\r\n  }\r\n\r\n  ngOnInit() { \r\n    this.loadApplications(); \r\n    setTimeout(() => {\r\n      this.outletTourService.startAddOutletTour();\r\n    }, 500);\r\n  }\r\n\r\n  loadApplications() {\r\n    this.service.getApplications({ userID: this.USERID }).subscribe(res => {\r\n      if (res.status && res.data) {\r\n        this.applications.set(res.data);\r\n        \r\n        // Auto-select if there is exactly 1 application\r\n        if (res.data.length === 1 && !this.outletForm.get('documentissuedval')?.value) {\r\n          const appId = res.data[0].value.toString();\r\n          this.outletForm.patchValue({ documentissuedval: appId });\r\n          this.onApplicationChange(appId); // Automatically trigger workspace load\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  onApplicationChange(appId: any) {\r\n    this.outletForm.get('documentcatval')?.setValue(null);\r\n    this.loadWorkspaces(appId);\r\n  }\r\n\r\n  loadWorkspaces(appId: any) {\r\n    if (!appId) return;\r\n    this.service.getWorkspaces({ userID: this.USERID, id: Number(appId) }).subscribe(res => {\r\n      if (res.status && res.data) {\r\n        this.workspaces.set(res.data);\r\n        \r\n        // Auto-select if there is exactly 1 workspace\r\n        if (res.data.length === 1 && !this.outletForm.get('documentcatval')?.value) {\r\n          this.outletForm.patchValue({ documentcatval: res.data[0].value.toString() });\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  handleUploadComplete(data: { fieldName: string, path: string, base64: string, fileReq: Myfilerequest }) {\r\n    this.outletForm.patchValue({ [data.fieldName]: data.base64 });\r\n    \r\n    if (data.fieldName === 'imagebase64') {\r\n      this.outletForm.patchValue({ image: data.path });\r\n    } else if (data.fieldName === 'imagethumbnailbase64') {\r\n      this.outletForm.patchValue({ imagethumbnail: data.path });\r\n    }\r\n    \r\n    this.newlyUploadedFiles.push(data.fileReq);\r\n  }\r\n\r\n  handleUploadState(fieldName: string, isUploading: boolean) {\r\n    if (fieldName === 'imagebase64') this.isUploadingImage = isUploading;\r\n    if (fieldName === 'imagethumbnailbase64') this.isUploadingThumb = isUploading;\r\n  }\r\n\r\n  // Helper for address character count\r\n  get addressCharCount(): number {\r\n    return this.outletForm.get('address')?.value?.length || 0;\r\n  }\r\n\r\n  get descriptionCharCount(): number {\r\n    return this.outletForm.get('description')?.value?.length || 0;\r\n  }\r\n\r\n  handleLocationPicked(coords: { lat: string, lng: string }) {\r\n    this.outletForm.patchValue({\r\n      latitude: coords.lat,\r\n      longitude: coords.lng\r\n    });\r\n    this.toastr.success('Location selected successfully!');\r\n  }\r\n\r\n  goNext(stepper: MatStepper) {\r\n    const appCtrl = this.outletForm.get('documentissuedval');\r\n    const wsCtrl = this.outletForm.get('documentcatval');\r\n    const nameCtrl = this.outletForm.get('categoryname');\r\n    \r\n    if (appCtrl?.valid && wsCtrl?.valid && nameCtrl?.valid) {\r\n      stepper.next();\r\n    } else {\r\n      appCtrl?.markAsTouched();\r\n      wsCtrl?.markAsTouched();\r\n      nameCtrl?.markAsTouched();\r\n      this.toastr.warning('Please fill the required Basic Information fields first.');\r\n    }\r\n  }\r\n\r\n  onStepChange(event: any) {\r\n    if (event.selectedIndex === 1) {\r\n      setTimeout(() => {\r\n        this.outletTourService.startAddOutletStep2Tour();\r\n      }, 500);\r\n    }\r\n  }\r\n\r\n  onSubmit() {\r\n    if (this.outletForm.invalid) {\r\n      this.outletForm.markAllAsTouched();\r\n      this.toastr.warning('Please fill all required fields correctly before saving.', 'Invalid Form');\r\n      \r\n      // Auto-focus the first invalid control\r\n      setTimeout(() => {\r\n        const firstInvalidControl = document.querySelector('.ng-invalid[formControlName], .ng-invalid input, .ng-invalid textarea, .ng-invalid mat-select');\r\n        if (firstInvalidControl && (firstInvalidControl as HTMLElement).focus) {\r\n          (firstInvalidControl as HTMLElement).focus();\r\n        }\r\n      }, 100);\r\n      return;\r\n    }\r\n\r\n    if (this.isUploadingImage || this.isUploadingThumb) {\r\n      this.toastr.warning('Please wait for background file uploads to complete.', 'Uploading...');\r\n      return;\r\n    }\r\n\r\n    this.outletForm.patchValue({ loginid: this.USERID });\r\n\r\n    const rawData = this.outletForm.getRawValue();\r\n    \r\n    // Get the text value of the selected dropdown options\r\n    const selectedApp = this.applications().find(app => String(app.value) === String(rawData.documentissuedval));\r\n    const selectedWorkspace = this.workspaces().find(ws => String(ws.value) === String(rawData.documentcatval));\r\n\r\n    const model: Outletmodel = {\r\n      ...rawData,\r\n      // Auto-fill hidden UI values\r\n      categorynamehindi: rawData.categorynamehindi || rawData.categoryname,\r\n      issuenameenglish: selectedApp ? selectedApp.text : '',\r\n      documentnameenglish: selectedWorkspace ? selectedWorkspace.text : '',\r\n      documentissuedval: Number(rawData.documentissuedval) || 0,\r\n      documentcatval: Number(rawData.documentcatval) || 0,\r\n      imagebase64: '',\r\n      imagethumbnailbase64: ''\r\n    };\r\n\r\n    const action$ = this.isEditMode ? this.service.updateOutlet(model) : this.service.addOutlet(model);\r\n    action$.subscribe({\r\n      next: (res) => {\r\n        if (res.status) {\r\n          this.toastr.success('Saved Successfully');\r\n          this.newlyUploadedFiles = [];\r\n          this.onSave.emit(model);\r\n        } else {\r\n          this.toastr.error('Operation failed');\r\n          this.rollbackNewlyUploadedFiles();\r\n        }\r\n      },\r\n      error: () => {\r\n        this.toastr.error('A server error occurred during save.');\r\n        this.rollbackNewlyUploadedFiles();\r\n      }\r\n    });\r\n  }\r\n\r\n  private rollbackNewlyUploadedFiles() {\r\n    this.newlyUploadedFiles.forEach(fileReq => {\r\n      if (this.globalUserService.deleteFileResult) {\r\n        this.globalUserService.deleteFileResult(fileReq).subscribe({\r\n          next: (res: any) => {\r\n            // Double check both outer wrapper and inner MessageEF status\r\n            const isReallySuccess = res && res.status && (!res.data || (res.data.satus !== 'Error' && res.data.status !== 'Error'));\r\n            if (isReallySuccess) {\r\n              console.log(`Deleted orphaned file: ${fileReq.fileName}`);\r\n            } else {\r\n              console.error(`Failed to delete orphaned file: ${fileReq.fileName}`, res.message?.[0] || res.data?.msg || 'Unknown error');\r\n            }\r\n          },\r\n          error: (err) => console.error(`HTTP Error deleting orphaned file: ${fileReq.fileName}`, err)\r\n        });\r\n      }\r\n    });\r\n    this.newlyUploadedFiles = [];\r\n  }\r\n\r\n  goBack() { \r\n    this.rollbackNewlyUploadedFiles();\r\n    this.onCancel.emit(); \r\n  }\r\n}\r\n","<app-header [title]=\"isEditMode ? 'Update Outlet' : 'Add Outlet'\" [showBack]=\"true\" (onBack)=\"goBack()\" (onOnlineRestored)=\"loadApplications()\"></app-header>\r\n\r\n<div class=\"container mt-4 mb-5\">\r\n  <div class=\"card shadow-sm border-0 p-2\">\r\n    <form [formGroup]=\"outletForm\" (ngSubmit)=\"onSubmit()\">\r\n      <mat-stepper linear=\"true\" #stepper class=\"bg-transparent\" (selectionChange)=\"onStepChange($event)\">\r\n      \r\n        <!-- ==============================================\r\n             STEP 1: Basic Information & Images \r\n             ============================================== -->\r\n        <mat-step label=\"Basic Information\" [stepControl]=\"outletForm\">\r\n          <div class=\"row mt-3\">\r\n            <div class=\"col-md-6 mb-3\">\r\n              <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-outlet-app\">\r\n                <mat-label>Application</mat-label>\r\n                <mat-select formControlName=\"documentissuedval\" (selectionChange)=\"onApplicationChange($event.value)\">\r\n                  <mat-option *ngFor=\"let item of applications()\" [value]=\"item.value\">{{item.text}}</mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"outletForm.get('documentissuedval')?.hasError('required')\">Application is required.</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div class=\"col-md-6 mb-3\">\r\n              <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-outlet-ws\">\r\n                <mat-label>Workspace</mat-label>\r\n                <mat-select formControlName=\"documentcatval\">\r\n                  <mat-option *ngFor=\"let item of workspaces()\" [value]=\"item.value\">{{item.text}}</mat-option>\r\n                </mat-select>\r\n                <mat-error *ngIf=\"outletForm.get('documentcatval')?.hasError('required')\">Workspace is required.</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <!-- Outlet Name -->\r\n            <div class=\"col-md-4 mb-3\">\r\n              <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-outlet-name\">\r\n                <mat-label>Outlet Name</mat-label>\r\n                <input matInput formControlName=\"categoryname\" placeholder=\"Enter Outlet Name\" maxlength=\"50\">\r\n                <mat-error *ngIf=\"outletForm.get('categoryname')?.hasError('required')\">Outlet Name is required.</mat-error>\r\n                <mat-error *ngIf=\"outletForm.get('categoryname')?.hasError('minlength')\">Name must be at least 3 characters long.</mat-error>\r\n                <mat-error *ngIf=\"outletForm.get('categoryname')?.hasError('maxlength')\">Name cannot exceed 50 characters.</mat-error>\r\n                <mat-error *ngIf=\"outletForm.get('categoryname')?.hasError('pattern')\">Only letters, numbers, spaces, hyphens, and apostrophes allowed.</mat-error>\r\n                <mat-error *ngIf=\"outletForm.get('categoryname')?.hasError('whitespace')\">Outlet Name cannot start with a space.</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <!-- GST No -->\r\n            <div class=\"col-md-4 mb-3\">\r\n              <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-outlet-gst\"><mat-label>GST No.</mat-label>\r\n                <input matInput formControlName=\"gstno\" maxlength=\"50\" placeholder=\"Enter GST No.\">\r\n                <mat-error *ngIf=\"outletForm.get('gstno')?.hasError('maxlength')\">GST No. cannot be more than 50 characters.</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <!-- DL No -->\r\n            <div class=\"col-md-4 mb-3\">\r\n              <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-outlet-dl\"><mat-label>DL No.</mat-label>\r\n                <input matInput formControlName=\"dlno\" maxlength=\"50\" placeholder=\"Enter DL No.\">\r\n                <mat-error *ngIf=\"outletForm.get('dlno')?.hasError('maxlength')\">DL No. cannot be more than 50 characters.</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div class=\"col-md-12 mb-3\">\r\n              <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-outlet-desc\">\r\n                <mat-label>Description</mat-label>\r\n                <textarea matInput formControlName=\"description\" rows=\"2\" [maxlength]=\"descriptionMaxLength\" placeholder=\"Enter description\"></textarea>\r\n                <mat-hint align=\"end\">{{ descriptionCharCount }} / {{ descriptionMaxLength }}</mat-hint>\r\n                <mat-error *ngIf=\"outletForm.get('description')?.hasError('maxlength')\">Description cannot be more than {{ descriptionMaxLength }} characters.</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <div class=\"col-md-6 mb-3\" id=\"tour-outlet-image\">\r\n              <app-file-upload\r\n                label=\"Outlet Image\"\r\n                fieldName=\"imagebase64\"\r\n                [folderName]=\"config.OutletImage\"\r\n                [existingFilePath]=\"imagePreview\"\r\n                [preloadedBase64]=\"imageBase64\"\r\n                (onUploadComplete)=\"handleUploadComplete($event)\"\r\n                (onUploadStateChange)=\"handleUploadState('imagebase64', $event)\">\r\n              </app-file-upload>\r\n            </div>\r\n\r\n            <div class=\"col-md-6 mb-3\" id=\"tour-outlet-thumb\">\r\n              <app-file-upload\r\n                label=\"Outlet Thumbnail\"\r\n                fieldName=\"imagethumbnailbase64\"\r\n                [folderName]=\"config.OutletImagethumbnail\"\r\n                [existingFilePath]=\"thumbPreview\"\r\n                [preloadedBase64]=\"thumbBase64\"\r\n                (onUploadComplete)=\"handleUploadComplete($event)\"\r\n                (onUploadStateChange)=\"handleUploadState('imagethumbnailbase64', $event)\">\r\n              </app-file-upload>\r\n            </div>\r\n          </div>\r\n\r\n          <div class=\"d-flex justify-content-between pt-2 border-top\">\r\n            <button class=\"btn btn-outline-danger d-flex align-items-center\" type=\"button\" (click)=\"goBack()\">\r\n              <mat-icon class=\"me-1\">close</mat-icon> Cancel\r\n            </button>\r\n            <button class=\"btn btn-primary d-flex align-items-center\" type=\"button\" id=\"tour-outlet-next\" (click)=\"goNext(stepper)\">\r\n              Next Step <mat-icon class=\"ms-1\">arrow_forward</mat-icon>\r\n            </button>\r\n          </div>\r\n        </mat-step>\r\n\r\n        <!-- ==============================================\r\n             STEP 2: Location & Address\r\n             ============================================== -->\r\n        <mat-step label=\"Location & Address\">\r\n          <div class=\"row mt-3\">\r\n            <!-- Address -->\r\n            <div class=\"col-md-12 mb-3\">\r\n              <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-outlet-address\"><mat-label>Address</mat-label>\r\n                <textarea matInput formControlName=\"address\" rows=\"2\" [maxlength]=\"addressMaxLength\" placeholder=\"Enter full address\"></textarea>\r\n                <mat-hint align=\"end\">{{ addressCharCount }} / {{ addressMaxLength }}</mat-hint>\r\n                <mat-error *ngIf=\"outletForm.get('address')?.hasError('maxlength')\">Address cannot be more than {{ addressMaxLength }} characters.</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n\r\n            <!-- Location Fields -->\r\n            <div class=\"col-md-12 mb-2\">\r\n              <app-location-piker\r\n                [initialLat]=\"outletForm.get('latitude')?.value\"\r\n                [initialLng]=\"outletForm.get('longitude')?.value\"\r\n                (onLocationPicked)=\"handleLocationPicked($event)\">\r\n              </app-location-piker>\r\n            </div>\r\n            <div class=\"col-md-6 mb-3\">\r\n              <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-outlet-lat\"><mat-label>Latitude</mat-label>\r\n                <input matInput formControlName=\"latitude\" placeholder=\"e.g., 26.9124\">\r\n                <mat-error *ngIf=\"outletForm.get('latitude')?.invalid\">Please enter a valid latitude.</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n            <div class=\"col-md-6 mb-3\">\r\n              <mat-form-field appearance=\"outline\" class=\"w-100\" id=\"tour-outlet-lng\"><mat-label>Longitude</mat-label>\r\n                <input matInput formControlName=\"longitude\" placeholder=\"e.g., 75.7873\">\r\n                <mat-error *ngIf=\"outletForm.get('longitude')?.invalid\">Please enter a valid longitude.</mat-error>\r\n              </mat-form-field>\r\n            </div>\r\n          </div>\r\n\r\n          <div class=\"d-flex justify-content-between pt-2 border-top\">\r\n            <button class=\"btn btn-outline-secondary d-flex align-items-center\" matStepperPrevious type=\"button\">\r\n              <mat-icon class=\"me-1\">arrow_back</mat-icon> Back\r\n            </button>\r\n            <div class=\"d-flex gap-2\">\r\n              <button class=\"btn btn-outline-danger d-flex align-items-center\" type=\"button\" (click)=\"goBack()\">\r\n                <mat-icon class=\"me-1\">close</mat-icon> Cancel\r\n              </button>\r\n              <app-loding-btn type=\"submit\" [disabled]=\"outletForm.invalid\" btnClass=\"btn-primary\" id=\"tour-outlet-submit\">\r\n                <mat-icon class=\"me-1\">{{ isEditMode ? 'save' : 'check_circle' }}</mat-icon>\r\n                {{ isEditMode ? 'Update Outlet' : 'Submit Form' }}\r\n              </app-loding-btn>\r\n            </div>\r\n          </div>\r\n        </mat-step>\r\n\r\n      </mat-stepper>\r\n    </form>\r\n  </div>\r\n</div>\r\n","import { Component, inject, OnInit, signal, ViewChild } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { take } from 'rxjs/operators';\r\n\r\nimport { UI_HELPER } from '../../../../shared/ui-helper';\r\nimport { Outletmodel, CommanRequest } from '../../../../shared/model';\r\nimport { Outletservice } from '../../../../shared/services/adminpanel_services/outletservice';\r\nimport { Tokenservice } from '../../../../shared/services/user_services/tokenservice';\r\nimport { AppHeader } from '../../../../shared/components/app-header/app-header';\r\nimport { Addoutlet } from '../addoutlet/addoutlet';\r\nimport { FileDownload } from '../../../../shared/components/file-download/file-download';\r\nimport { ConfirmationService } from '../../../../shared/services/confirmation.service';\r\nimport { OutletTourService } from '../../../../shared/services/apptour/outlet-tour.service';\r\n\r\n@Component({\r\n  selector: 'app-outletlist',\r\n  standalone: true,\r\n  imports: [CommonModule, UI_HELPER, AppHeader, Addoutlet, FileDownload],\r\n  templateUrl: './outletlist.html',\r\n})\r\nexport class Outletlist implements OnInit {\r\n  private service = inject(Outletservice);\r\n  private token = inject(Tokenservice);\r\n  private toastr = inject(ToastrService);\r\n  private confirmationService = inject(ConfirmationService);\r\n  private outletTourService = inject(OutletTourService);\r\n\r\n  displayedColumns: string[] = ['sno', 'categoryname', 'mapping', 'imagethumbnailbase64', 'imagebase64', 'isactive', 'actions'];\r\n  dataSource = new MatTableDataSource<Outletmodel>([]);\r\n  \r\n  selectedItem = signal<Outletmodel | null>(null);\r\n  searchTerm: string = '';\r\n  showForm = false;\r\n  USERID: number = 0;\r\n\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n\r\n  ngOnInit(): void {\r\n    this.USERID = Number(this.token.getUserId()) || 0;\r\n    this.loadOutlets();\r\n  }\r\n\r\n  loadOutlets() {\r\n    const request: CommanRequest = { userID: this.USERID };\r\n    this.service.getOutletList(request).pipe(take(1)).subscribe(res => {\r\n      if (res.status && res.data && res.data.length > 0) {\r\n        this.dataSource.data = res.data;\r\n        this.dataSource.paginator = this.paginator;\r\n      } else {\r\n        this.dataSource.data = [];\r\n      }\r\n      // Ise if-else ke bahar rakhein taaki data hone par aur na hone par, dono case me tour chale\r\n      setTimeout(() => {\r\n        this.outletTourService.startOutletListTour();\r\n      }, 500);\r\n    });\r\n  }\r\n\r\n  applyFilter(event: any) {\r\n    const val = typeof event === 'string' ? event : event.target.value;\r\n    this.searchTerm = val;\r\n    this.dataSource.filter = val.trim().toLowerCase();\r\n    if (this.dataSource.paginator) {\r\n      this.dataSource.paginator.firstPage();\r\n    }\r\n  }\r\n\r\n  toggleStatus(row: Outletmodel) {\r\n    const request: CommanRequest = { userID: this.USERID, id: row.hecatid, active: !row.isactive, check: 1 };\r\n    this.service.modifyStatusOutlet(request).subscribe(res => {\r\n      if (res.status) {\r\n        this.toastr.success('Status updated');\r\n        this.loadOutlets();\r\n      }\r\n    });\r\n  }\r\n\r\n  onEdit(row: Outletmodel) {\r\n    this.selectedItem.set(row);\r\n    this.showForm = true;\r\n  }\r\n\r\n  openAddDialog() {\r\n    this.selectedItem.set(null);\r\n    this.showForm = true;\r\n  }\r\n\r\n  handleSave(formData?: Outletmodel) {\r\n    // Always reload to fetch accurate DB fields, cleared base64 strings, and correct image paths\r\n    this.loadOutlets(); \r\n    this.showForm = false;\r\n    this.selectedItem.set(null);\r\n  }\r\n\r\n  onDelete(row: Outletmodel) {\r\n    this.confirmationService.confirm(\r\n      'Delete Outlet',\r\n      `Are you sure you want to delete <b>\"${row.categoryname}\"</b>? This action cannot be undone.`,\r\n      'Delete'\r\n    ).subscribe((confirmed: boolean) => {\r\n      if (confirmed) {\r\n        const request: CommanRequest = { userID: this.USERID, id: row.hecatid, active: false, check: 2 };\r\n        this.service.modifyStatusOutlet(request).subscribe({\r\n          next: (res) => {\r\n            if (res.status) {\r\n              this.toastr.success('Outlet deleted successfully.');\r\n              this.loadOutlets(); \r\n            } else {\r\n              this.toastr.error(res.message?.toString() || 'Failed to delete outlet.');\r\n            }\r\n          },\r\n          error: (err) => {\r\n            this.toastr.error('An error occurred while deleting the outlet.');\r\n          }\r\n        });\r\n      }\r\n    });\r\n  }\r\n}\r\n","<div *ngIf=\"!showForm\" class=\"d-flex flex-column bg-light fade-in\" style=\"height: 100vh; overflow: hidden;\">\r\n  <app-header title=\"Outlets\" [showSearch]=\"true\" searchLabel=\"Search Outlet Name...\" (onSearch)=\"applyFilter($event)\" (onOnlineRestored)=\"loadOutlets()\"></app-header>\r\n  \r\n  <div class=\"container-fluid p-3 d-flex flex-column flex-grow-1 page-list-container\" style=\"min-height: 0;\">\r\n    <div class=\"mat-elevation-z2 rounded overflow-hidden flex-grow-1 d-flex flex-column bg-white\" style=\"min-height: 0;\">\r\n      \r\n      <div class=\"table-responsive flex-grow-1\" style=\"overflow-y: auto;\">\r\n        <table mat-table [dataSource]=\"dataSource\" class=\"w-100 responsive-table\">\r\n\r\n      <!-- S.No Column -->\r\n      <ng-container matColumnDef=\"sno\">\r\n        <th mat-header-cell *matHeaderCellDef style=\"width: 60px;\"> S.No </th>\r\n        <td mat-cell *matCellDef=\"let row; let i = index\" data-label=\"S.No\" class=\"py-2\"> {{i + 1}} </td>\r\n      </ng-container>\r\n\r\n      <!-- Category Name Column -->\r\n      <ng-container matColumnDef=\"categoryname\">\r\n        <th mat-header-cell *matHeaderCellDef> Outlet Name </th>\r\n        <td mat-cell *matCellDef=\"let row\" data-label=\"Outlet Name\" class=\"py-2\"> \r\n          <strong>{{row.categoryname}}</strong>\r\n        </td>\r\n      </ng-container>\r\n\r\n      <!-- Mapping Column -->\r\n      <ng-container matColumnDef=\"mapping\">\r\n        <th mat-header-cell *matHeaderCellDef> Mapping (App/Workspace) </th>\r\n        <td mat-cell *matCellDef=\"let row\" data-label=\"Mapping\" class=\"py-2\"> \r\n          <span class=\"badge bg-info text-dark\">{{row.issuenameenglish}}</span> / \r\n          <span class=\"badge bg-secondary\">{{row.documentnameenglish}}</span>\r\n        </td>\r\n      </ng-container>\r\n\r\n      <!-- Thumbnail -->\r\n      <ng-container matColumnDef=\"imagethumbnailbase64\">\r\n        <th mat-header-cell *matHeaderCellDef> Thumbnail </th>\r\n        <td mat-cell *matCellDef=\"let row\" data-label=\"Thumbnail\" class=\"py-2\">\r\n          <app-file-download *ngIf=\"row.imagethumbnail\"\r\n             [preloadedBase64]=\"row.imagethumbnailbase64\"\r\n             [filePath]=\"row.imagethumbnail\"\r\n             altText=\"Thumbnail\"\r\n             customStyle=\"height: 30px; border-radius: 2px;\">\r\n          </app-file-download>\r\n          <small *ngIf=\"!row.imagethumbnail\" class=\"text-muted\">No Thumb</small>\r\n        </td>\r\n      </ng-container>\r\n\r\n      <!-- Image -->\r\n      <ng-container matColumnDef=\"imagebase64\">\r\n        <th mat-header-cell *matHeaderCellDef> Image </th>\r\n        <td mat-cell *matCellDef=\"let row\" data-label=\"Image\" class=\"py-2\">\r\n          <app-file-download *ngIf=\"row.image\"\r\n             [preloadedBase64]=\"row.imagebase64\"\r\n             [filePath]=\"row.image\" \r\n             altText=\"Outlet Image\"\r\n             customStyle=\"height: 40px; border-radius: 4px;\">\r\n          </app-file-download>\r\n          <small *ngIf=\"!row.image\" class=\"text-muted\">No Image</small>\r\n        </td>\r\n      </ng-container>\r\n\r\n      <!-- Status Column -->\r\n      <ng-container matColumnDef=\"isactive\">\r\n        <th mat-header-cell *matHeaderCellDef> Status </th>\r\n        <td mat-cell *matCellDef=\"let row\" data-label=\"Status\" class=\"py-2\">\r\n          <mat-slide-toggle color=\"primary\" [checked]=\"row.isactive\" (change)=\"toggleStatus(row)\"></mat-slide-toggle>\r\n        </td>\r\n      </ng-container>\r\n\r\n      <!-- Actions Column -->\r\n      <ng-container matColumnDef=\"actions\">\r\n        <th mat-header-cell *matHeaderCellDef class=\"text-end\"> Actions </th>\r\n        <td mat-cell *matCellDef=\"let row\" class=\"text-end mobile-actions py-2\" data-label=\"Actions\">\r\n          <button mat-icon-button color=\"primary\" class=\"tour-edit-btn\" (click)=\"onEdit(row)\" matTooltip=\"Edit\"><mat-icon>edit</mat-icon></button>\r\n          <button mat-icon-button color=\"warn\" (click)=\"onDelete(row)\" matTooltip=\"Delete\"><mat-icon>delete_outline</mat-icon></button>\r\n        </td>\r\n      </ng-container>\r\n\r\n      <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n      <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" style=\"height: auto; min-height: 48px;\"></tr>\r\n\r\n      <!-- No Data Row -->\r\n      <tr class=\"mat-row\" *matNoDataRow>\r\n        <td class=\"mat-cell text-center py-5\" [attr.colspan]=\"displayedColumns.length\">\r\n          <div *ngIf=\"searchTerm\" class=\"d-flex flex-column align-items-center justify-content-center text-muted\">\r\n            <mat-icon class=\"mb-2 opacity-50\" style=\"font-size: 40px; height: 40px; width: 40px;\">search_off</mat-icon>\r\n            <span>No records matching the search <b class=\"text-danger\">\"{{searchTerm}}\"</b></span>\r\n          </div>\r\n          <div *ngIf=\"!searchTerm\" class=\"d-flex flex-column align-items-center justify-content-center text-muted\">\r\n            <mat-icon class=\"mb-2 opacity-50\" style=\"font-size: 40px; height: 40px; width: 40px;\">inbox</mat-icon>\r\n            <span>No outlets found. Click the + button to add one.</span>\r\n          </div>\r\n        </td>\r\n      </tr>\r\n    </table>\r\n      </div>\r\n      <div class=\"mt-auto bg-white border-top\" style=\"z-index: 10;\">\r\n        <mat-paginator [pageSizeOptions]=\"[10, 25, 50]\" showFirstLastButtons aria-label=\"Select page\"></mat-paginator>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  \r\n  <button id=\"tour-add-btn\" mat-fab color=\"primary\" class=\"position-fixed fab-mobile shadow-lg\" style=\"bottom: 30px; right: 30px; z-index: 100;\" (click)=\"openAddDialog()\" matTooltip=\"Add New Outlet\">\r\n    <mat-icon>add</mat-icon>\r\n  </button>\r\n</div>\r\n\r\n<div *ngIf=\"showForm\" class=\"h-100\">\r\n  <app-addoutlet [editData]=\"selectedItem()\" (onSave)=\"handleSave($event)\" (onCancel)=\"showForm = false\"></app-addoutlet>\r\n</div>\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { MY_APP_CONFIG } from '../../app.config.token';\r\nimport { CommanRequest, Licencemodel, MessageEF, Result } from '../../model';\r\nimport { Subscriptionsmodel } from '../../model/mastermodel/subscriptionsmodel';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class Subscriptionsservice {\r\n  private config = inject(MY_APP_CONFIG);\r\n  private http = inject(HttpClient);\r\n\r\n  private readonly baseUrl = `${this.config.apiBaseUrl}/License`;\r\n\r\n\r\n  getLicenseList(request: CommanRequest): Observable<Result<Licencemodel[]>> {\r\n    return this.http.post<Result<Licencemodel[]>>(`${this.baseUrl}/GetLicenseList`, request);\r\n  }\r\n\r\n  subscriptionList(request: CommanRequest): Observable<Result<Subscriptionsmodel[]>> {\r\n    return this.http.post<Result<Subscriptionsmodel[]>>(`${this.baseUrl}/GetLicenseTranList`, request);\r\n  }\r\n\r\n  subscribeLicense(model: Subscriptionsmodel): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(`${this.baseUrl}/SubscribeLicense`, model);\r\n  }\r\n\r\n  unSubscribeLicense(model: CommanRequest): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(`${this.baseUrl}/UnSubscribeLicense`, model);\r\n  }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { MY_APP_CONFIG } from '../../app.config.token';\r\nimport { MessageEF, Result } from '../../model';\r\nimport { CreateOrderRequest, CreateOrderResponse, VerifyPaymentRequest, DoubleVerifyPaymentRequest } from '../../model/mastermodel/checkoutmodel';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class Checkoutservice {\r\n  private config = inject(MY_APP_CONFIG);\r\n  private http = inject(HttpClient);\r\n  private readonly baseUrl = `${this.config.apiBaseUrl}/RazorpayPayment`;\r\n\r\n  createOrder(model: CreateOrderRequest): Observable<Result<CreateOrderResponse>> {\r\n    return this.http.post<Result<CreateOrderResponse>>(`${this.baseUrl}/CreateOrder`, model);\r\n  }\r\n\r\n  createPaymentLink(model: CreateOrderRequest): Observable<Result<CreateOrderResponse>> {\r\n    return this.http.post<Result<CreateOrderResponse>>(`${this.baseUrl}/CreatePaymentLink`, model);\r\n  }\r\n\r\n  verifyPayment(model: VerifyPaymentRequest): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(`${this.baseUrl}/VerifyPayment`, model);\r\n  }\r\n\r\n  doubleVerifyPayment(model: DoubleVerifyPaymentRequest): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(`${this.baseUrl}/DoubleVerifyPayment`, model);\r\n  }\r\n}","import { Component, EventEmitter, inject, Input, Output, OnInit, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { map, of } from 'rxjs';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Addusermodel, CommanRequest, Licencemodel } from '../../model';\r\nimport { Checkoutservice } from '../../services/adminpanel_services/checkoutservice';\r\nimport { Profileservice } from '../../services/adminpanel_services/profileservice';\r\nimport { CreateOrderRequest, CreateOrderResponse, VerifyPaymentRequest } from '../../model/mastermodel/checkoutmodel';\r\nimport { Subscriptionsservice } from '../../services/adminpanel_services/subscriptionsservice';\r\nimport { Tokenservice } from '../../services/user_services/tokenservice';\r\n\r\n@Component({\r\n  selector: 'app-checkout',\r\n  standalone: true,\r\n  imports: [CommonModule, MatIconModule],\r\n  templateUrl: './app-checkout.html',\r\n})\r\nexport class AppCheckout implements OnInit, OnChanges {\r\n  @Input() plan: Licencemodel | null = null;\r\n  @Input() relatedPlans: any[] = [];\r\n  userId: number = 0;\r\n\r\n  @Output() paymentSuccess = new EventEmitter<any>();\r\n  @Output() paymentFailed = new EventEmitter<any>();\r\n\r\n  loading: boolean = false;\r\n  licenseTransactionId: number = 0;\r\n  isVerifying: boolean = false;\r\n\r\n  private checkoutService = inject(Checkoutservice);\r\n  private profileService = inject(Profileservice);\r\n  private toastr = inject(ToastrService);\r\n  private subService = inject(Subscriptionsservice);\r\n  private token = inject(Tokenservice);\r\n  private userDetails: Addusermodel | null = null;\r\n\r\n  activePlan: any = null; // Local copy to handle dropdown changes\r\n\r\n  ngOnInit() {\r\n    this.userId = Number(this.token.getUserId()) || 0;\r\n\r\n    // ========================================================================\r\n    // STEP 5: Handle Razorpay Payment Link Callback\r\n    // जब यूज़र Razorpay पेज पर पेमेंट करके वापस Angular ऐप पर आता है, \r\n    // तो URL में Razorpay के कुछ Parameters (जैसे payment_id, signature) आते हैं।\r\n    // 'verify_payment=true' फ्लैग से हम पहचानते हैं कि यूज़र पेमेंट करके लौटा है।\r\n    // ========================================================================\r\n    const params = new URLSearchParams(window.location.search);\r\n    const isVerify = params.get('verify_payment');\r\n    const paymentId = params.get('razorpay_payment_id');\r\n    const paymentLinkId = params.get('razorpay_payment_link_id');\r\n    const signature = params.get('razorpay_signature');\r\n    const status = params.get('razorpay_payment_link_status');\r\n    const refId = params.get('razorpay_payment_link_reference_id');\r\n\r\n    // C# Backend ने जो Prefix (जैसे OSL_) और Timestamp जोड़ा है, उसमें से सही ID निकाल रहे हैं:\r\n    let actualTransactionId = 0;\r\n    if (refId) {\r\n      const parts = refId.split('_');\r\n      // Example: 'OSL_1_639145248951979745' -> parts.length = 3 -> parts[1] = '1'\r\n      actualTransactionId = parts.length >= 2 ? Number(parts[parts.length - 2]) : Number(parts[0]);\r\n    }\r\n\r\n    // URL से pamount निकाल रहे हैं\r\n    const pamount = params.get('pamount');\r\n\r\n    if (isVerify === 'true' && paymentId) {\r\n      this.isVerifying = true;\r\n      this.loading = true;\r\n      const verifyModel: VerifyPaymentRequest = {\r\n        licenseTransactionId: actualTransactionId || 0,\r\n        userId: this.userId,\r\n        razorpay_order_id: paymentLinkId || '', // API link order id\r\n        razorpay_payment_id: paymentId,\r\n        razorpay_signature: signature || '',\r\n        paymentRefNo: refId || '', // Raw string sent for signature validation\r\n        paymentmode: 'ONLINE',\r\n        pamount: Number(pamount) || 0\r\n      };\r\n      this.verifyPayment(verifyModel);\r\n    } else if (isVerify === 'true' && status === 'failed') {\r\n       this.toastr.error('Payment failed or cancelled.');\r\n       window.history.replaceState({}, document.title, window.location.pathname);\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['plan'] && this.plan) {\r\n      // Direct and clean assignment. No magic required.\r\n      this.activePlan = { ...this.plan };\r\n    }\r\n  }\r\n\r\n  onBillingCycleChange(event: Event) {\r\n    const target = event.target as HTMLSelectElement;\r\n    const id = Number(target.value);\r\n    // ID comparison ko aur strong banaya gaya hai\r\n    const matched = this.relatedPlans.find(p => Number(p.licenseid || p.licenseID || 0) === id);\r\n    if (matched) {\r\n      this.activePlan = { ...matched };\r\n    }\r\n  }\r\n\r\n  startPayment() {\r\n    // FIX: Ensure the latest userId is used, especially in flows like registration\r\n    // where the user logs in after the component is initialized.\r\n    this.userId = Number(this.token.getUserId()) || 0;\r\n\r\n    if (!this.activePlan) {\r\n      this.toastr.warning('Please select a valid plan.');\r\n      return;\r\n    }\r\n\r\n    this.loading = true;\r\n\r\n    // ========================================================================\r\n    // STEP 1: Create Subscription (Pending)\r\n    // सबसे पहले Backend API call करके Database में एक \"Pending\" Subscription बनाते हैं।\r\n    // ========================================================================\r\n    const subModel = {\r\n      sno: 0,\r\n      licenseId: this.activePlan.licenseid || this.activePlan.licenseID || 0,\r\n      createdByUserId: this.userId,\r\n      dAmount: this.activePlan.discount_amount || this.activePlan.discount_Amount || 0,\r\n      tAmount: this.activePlan.tax_instate || this.activePlan.tax_Instate || 0,\r\n      pAmount: this.activePlan.pamount_instate || this.activePlan.pAmount_Instate || 0,\r\n      cfAmount: this.activePlan.carry_forward_amount || 0,\r\n      paymentStatus: 0\r\n    } as any;\r\n\r\n    console.log('Creating subscription with model:', subModel);\r\n\r\n    this.subService.subscribeLicense(subModel).subscribe({\r\n      next: (subRes) => {\r\n        if (subRes.status) {\r\n          // Transaction ID backend से मिल गयी\r\n          this.licenseTransactionId = Number(subRes.data?.id || subRes.data?.msg || 0);\r\n\r\n          const finalAmount = Number((this.activePlan.pamount_instate || this.activePlan.pAmount_Instate || 0) - (this.activePlan.carry_forward_amount || 0));\r\n\r\n          // ========================================================================\r\n          // STEP 2: Amount Check\r\n          // अगर Plan Free है या Carry Forward से पूरा amount cover हो गया, \r\n          // तो Payment Gateway की ज़रूरत नहीं है। यहीं से Success कर देते हैं।\r\n          // ========================================================================\r\n          if (this.activePlan.pAmount_Instate === 0 || this.activePlan.pamount_instate === 0 || finalAmount <= 0) {\r\n            this.loading = false;\r\n            this.toastr.success('Subscription activated successfully!');\r\n            this.paymentSuccess.emit(subRes);\r\n            return;\r\n          }\r\n\r\n          // ========================================================================\r\n          // STEP 3: Fetch User Details & Create Payment Link\r\n          // यूज़र की डिटेल्स लेकर Backend API को भेजते हैं ताकि Razorpay का Payment Link बन सके।\r\n          // callbackUrl में हम इसी पेज का URL भेजते हैं '?verify_payment=true' के साथ।\r\n          // ========================================================================\r\n          this.getUserDetails().subscribe((user: any) => {\r\n            const model: CreateOrderRequest = {\r\n              licenseTransactionId: this.licenseTransactionId,\r\n              amount: finalAmount,\r\n              currency: 'INR',\r\n              userId: this.userId,\r\n              name: user?.name || '',\r\n              email: user?.emailId || '',\r\n              mobile: user?.mobile_No || '',\r\n              callbackUrl: window.location.origin + window.location.pathname + '?verify_payment=true&pamount=' + finalAmount\r\n            };\r\n\r\n            this.checkoutService.createPaymentLink(model).subscribe({\r\n              next: (res) => {\r\n                if (res.status && res.data && res.data.paymentLink) {\r\n                  // ========================================================================\r\n                  // STEP 4: Redirect User to Razorpay\r\n                  // Backend से Payment Link मिलने के बाद यूज़र को Razorpay के पेज पर भेज (redirect) देते हैं।\r\n                  // ========================================================================\r\n                  window.location.href = res.data.paymentLink;\r\n                } else {\r\n                  this.loading = false;\r\n                  this.toastr.error(res.message?.toString() || 'Could not create payment link.');\r\n                  this.paymentFailed.emit(res);\r\n                }\r\n              },\r\n              error: (err) => {\r\n                this.loading = false;\r\n                this.toastr.error('An error occurred while creating the payment link.');\r\n                console.error('Link creation failed:', err);\r\n                this.paymentFailed.emit(err);\r\n              },\r\n            });\r\n          });\r\n        } else {\r\n          this.loading = false;\r\n          this.toastr.error(subRes.message?.toString() || 'Subscription failed');\r\n          this.paymentFailed.emit(subRes);\r\n        }\r\n      },\r\n      error: (err) => {\r\n        this.loading = false;\r\n        this.toastr.error('Subscription failed');\r\n        console.error('Subscription creation failed:', err);\r\n        this.paymentFailed.emit(err);\r\n      }\r\n    });\r\n  }\r\n\r\n  private getUserDetails() {\r\n    if (this.userDetails) {\r\n      return of(this.userDetails);\r\n    }\r\n    // User Details fetch कर रहे हैं ताकि API में Name, Email, Mobile \r\n    // भेजा जा सके और Razorpay पेज पर यूज़र को दुबारा ना भरना पड़े।\r\n    const request: CommanRequest = { userID: this.userId };\r\n    return this.profileService.getUserByID(request).pipe(\r\n      map(res => {\r\n        if (res.status && res.data) {\r\n          this.userDetails = res.data;\r\n          console.log('Fetched user details for checkout prefill:', this.userDetails);\r\n          return res.data;\r\n        }\r\n        this.toastr.warning('Could not fetch user details for prefill.');\r\n        return null;\r\n      })\r\n    );\r\n  }\r\n\r\n  verifyPayment(model: VerifyPaymentRequest) {\r\n    // ========================================================================\r\n    // STEP 6: Verify Payment API\r\n    // जब यूज़र वापस आता है (Step 5), तो ये फंक्शन कॉल होता है।\r\n    // Backend Razorpay की Signature को Validate करेगा। \r\n    // अगर Payment असली है, तो Database में Subscription Status \"Active/Success\" हो जायेगा।\r\n    // ========================================================================\r\n    this.checkoutService.verifyPayment(model).subscribe({\r\n        next: (res) => {\r\n          this.loading = false;\r\n          this.isVerifying = false;\r\n          \r\n          // Browser ki URL se params hata dein taaki refresh par wapas call na ho\r\n          window.history.replaceState({}, document.title, window.location.pathname);\r\n\r\n          if (res.status) {\r\n            this.toastr.success('Payment Successful');\r\n            this.paymentSuccess.emit(res);\r\n          } else {\r\n            this.paymentFailed.emit(res);\r\n            this.toastr.error('Payment verification failed');\r\n          }\r\n        },\r\n        error: () => {\r\n          this.loading = false;\r\n          this.isVerifying = false;\r\n          window.history.replaceState({}, document.title, window.location.pathname);\r\n          this.paymentFailed.emit();\r\n          this.toastr.error('Verification failed');\r\n        }\r\n      });\r\n  }\r\n}\r\n","<div class=\"text-center p-5\" *ngIf=\"isVerifying\">\r\n  <div class=\"spinner-border text-primary\" style=\"width: 3rem; height: 3rem;\" role=\"status\"></div>\r\n  <h4 class=\"mt-3 fw-bold text-secondary\">Verifying your payment...</h4>\r\n  <p class=\"text-muted\">Please do not refresh or close this page.</p>\r\n</div>\r\n\r\n<div class=\"row\" *ngIf=\"activePlan && !isVerifying\">\r\n  \r\n  <!-- PANEL 1: Plan Details & Billing Cycle -->\r\n  <div class=\"col-md-6 mb-4\">\r\n    <div class=\"card shadow-sm border-success h-100\">\r\n      <div class=\"card-header bg-success text-white text-center py-3\">\r\n        <h4 class=\"mb-0 text-white fw-bold\">{{ (activePlan.licensename || activePlan.licenseName || 'Plan').split(' ')[0] | uppercase }}</h4>\r\n      </div>\r\n      <div class=\"card-body d-flex flex-column\">\r\n        <div class=\"text-center mb-4\">\r\n          <h2 class=\"display-5 fw-bold text-success mb-1\">{{ (activePlan.pamount_instate || activePlan.pAmount_Instate) | currency:'INR':'symbol':'1.0-0' }}</h2>\r\n          <p class=\"text-muted\">per {{ activePlan.durationinmonth || activePlan.durationInMonth || 1 }} Months</p>\r\n        </div>\r\n        \r\n        <div class=\"mb-4\" *ngIf=\"relatedPlans && relatedPlans.length > 0\">\r\n          <label class=\"form-label fw-bold text-secondary small text-uppercase\">Select Billing Cycle</label>\r\n          <select class=\"form-select form-select-lg bg-light\" (change)=\"onBillingCycleChange($event)\">\r\n            <option *ngFor=\"let rp of relatedPlans\" [value]=\"rp.licenseid || rp.licenseID || 0\" [selected]=\"(rp.licenseid || rp.licenseID || 0) === (activePlan.licenseid || activePlan.licenseID || 0)\">\r\n              {{ rp.durationinmonth || rp.durationInMonth || 1 }} Months ({{ (rp.pamount_instate || rp.pAmount_Instate) | currency:'INR':'symbol':'1.0-0' }})\r\n            </option>\r\n          </select>\r\n        </div>\r\n\r\n        <div class=\"mt-auto bg-body-secondary p-3 rounded\">\r\n          <div class=\"fw-bold text-dark mb-2 small\">Top features:</div>\r\n          <ul class=\"list-unstyled mb-0 text-start small text-muted\">\r\n            <li class=\"mb-1\"><mat-icon class=\"align-middle text-success me-1\" style=\"font-size: 1.1rem; width: 1.1rem; height: 1.1rem;\">check_circle</mat-icon> Create up to <strong>{{ activePlan.numberofuser || activePlan.numberOfUser || 1 }}</strong> Users</li>\r\n            <li class=\"mb-1\"><mat-icon class=\"align-middle text-success me-1\" style=\"font-size: 1.1rem; width: 1.1rem; height: 1.1rem;\">check_circle</mat-icon> Create up to <strong>{{ activePlan.numberofoutlet || activePlan.numberOfOutlet || 1 }}</strong> Outlets</li>\r\n            <li class=\"mb-1\"><mat-icon class=\"align-middle text-success me-1\" style=\"font-size: 1.1rem; width: 1.1rem; height: 1.1rem;\">check_circle</mat-icon> Priority Support</li>\r\n            <li class=\"mb-0\"><mat-icon class=\"align-middle text-success me-1\" style=\"font-size: 1.1rem; width: 1.1rem; height: 1.1rem;\">check_circle</mat-icon> Included Apps: <strong>{{ activePlan.applicationname || activePlan.applicationName || 'All Apps Included' }}</strong></li>\r\n          </ul>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <!-- PANEL 2: Order Summary & Payment -->\r\n  <div class=\"col-md-6 mb-4\">\r\n    <div class=\"card shadow-sm border-0 h-100 bg-light\">\r\n      <div class=\"card-body p-4 d-flex flex-column\">\r\n        <h5 class=\"text-primary mb-4 border-bottom pb-3\">Order Summary</h5>\r\n        \r\n        <div class=\"d-flex justify-content-between mb-3\">\r\n          <span class=\"text-muted\">Plan Name</span>\r\n          <span class=\"fw-bold\">{{ activePlan.licensename || activePlan.licenseName }}</span>\r\n        </div>\r\n        \r\n        <div class=\"d-flex justify-content-between mb-3\">\r\n          <span class=\"text-muted\">Base Price ({{ activePlan.durationinmonth || activePlan.durationInMonth || 1 }} Months)</span>\r\n          <span class=\"fw-medium\">{{ (activePlan.mrate || activePlan.mRate) | currency:'INR':'symbol':'1.0-0' }}</span>\r\n        </div>\r\n        \r\n        <div class=\"d-flex justify-content-between mb-3 text-success\" *ngIf=\"(activePlan.discount_amount || activePlan.discount_Amount) > 0\">\r\n          <span>Discount <small *ngIf=\"activePlan.discount\">({{ activePlan.discount }}%)</small></span>\r\n          <span class=\"fw-medium\">-{{ (activePlan.discount_amount || activePlan.discount_Amount) | currency:'INR':'symbol':'1.0-0' }}</span>\r\n        </div>\r\n        \r\n        <div class=\"d-flex justify-content-between mb-3 text-danger\" *ngIf=\"(activePlan.tax_instate || activePlan.tax_Instate) > 0\">\r\n          <span>Taxes (GST)</span>\r\n          <span class=\"fw-medium\">+{{ (activePlan.tax_instate || activePlan.tax_Instate) | currency:'INR':'symbol':'1.0-0' }}</span>\r\n        </div>\r\n\r\n        <div class=\"d-flex justify-content-between mb-3 text-success\" *ngIf=\"activePlan.carry_forward_amount > 0\">\r\n          <span>Carry Forward Amount</span>\r\n          <span class=\"fw-medium\">-{{ activePlan.carry_forward_amount | currency:'INR':'symbol':'1.0-0' }}</span>\r\n        </div>\r\n        \r\n        <hr class=\"my-4 border-secondary opacity-25\">\r\n        \r\n        <div class=\"d-flex justify-content-between align-items-center fw-bold fs-4 mb-4\">\r\n          <span>Total Amount</span>\r\n          <span class=\"text-success\">{{ ((activePlan.pamount_instate || activePlan.pAmount_Instate || 0) - (activePlan.carry_forward_amount || 0)) | currency:'INR':'symbol':'1.0-0' }}</span>\r\n        </div>\r\n\r\n        <button type=\"button\" class=\"btn btn-primary w-100 py-3 fs-5 rounded-3 d-flex align-items-center justify-content-center mt-auto\" (click)=\"startPayment()\" [disabled]=\"loading\">\r\n          <span *ngIf=\"loading\" class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\r\n          <mat-icon class=\"me-2\" *ngIf=\"!loading\">payment</mat-icon>\r\n          Proceed to Pay {{ ((activePlan.pamount_instate || activePlan.pAmount_Instate || 0) - (activePlan.carry_forward_amount || 0)) | currency:'INR':'symbol':'1.0-0' }}\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n</div>\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { MY_APP_CONFIG } from '../../app.config.token';\r\n\r\nimport { CommanRequest, MessageEF, Result, Licencemodel, Listitems } from '../../model';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class Licenceservice {\r\n  private config = inject(MY_APP_CONFIG);\r\n  private http = inject(HttpClient);\r\n\r\n  private readonly baseUrl = `${this.config.apiBaseUrl}/License`;\r\n\r\n  getLicenseList(request: CommanRequest): Observable<Result<Licencemodel[]>> {\r\n    return this.http.post<Result<Licencemodel[]>>(`${this.baseUrl}/GetLicenseList`, request);\r\n  }\r\n\r\n  addUpdateLicense(model: Licencemodel): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(`${this.baseUrl}/AddUpdateLicense`, model);\r\n  }\r\n\r\n  getLicenseTypeList(request: CommanRequest): Observable<Result<Listitems[]>> {\r\n    return this.http.post<Result<Listitems[]>>(`${this.baseUrl}/GetLicenseTypeList`, request);\r\n  }\r\n\r\n  modifyStatusLicense(request: CommanRequest): Observable<Result<MessageEF>> {\r\n    return this.http.post<Result<MessageEF>>(`${this.baseUrl}/ModifyStatusLicense`, request);\r\n  }\r\n\r\n  getApplication(model: CommanRequest): Observable<Result<Listitems[]>> {\r\n    return this.http.post<Result<Listitems[]>>(`${this.config.apiBaseUrl}/Workspace/GetApplication`, model);\r\n  }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { TourService } from './tour.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class SubscriptionTourService {\r\n  private tourService = inject(TourService);\r\n\r\n  // Utility to wait for elements to render before starting the tour\r\n  private waitForElements(selectors: string[], callback: () => void, retries = 10) {\r\n    const allFound = selectors.every(selector => {\r\n      const el = document.querySelector(selector) as HTMLElement;\r\n      return el && el.offsetWidth > 0 && el.offsetHeight > 0; // Check if element is actually visible and rendered\r\n    });\r\n    \r\n    if (allFound) {\r\n      setTimeout(callback, 300); // Give a little extra time for animations/rendering\r\n    } else if (retries > 0) {\r\n      setTimeout(() => this.waitForElements(selectors, callback, retries - 1), 500);\r\n    } else {\r\n      // Execute anyway with whatever is found if timeout is reached\r\n      callback();\r\n    }\r\n  }\r\n\r\n  // Flow 1: Subscription List Page\r\n  startSubscriptionListTour() {\r\n    this.waitForElements(['#tour-add-btn'], () => {\r\n      const steps: any[] = [];\r\n\r\n      if (document.querySelector('#tour-add-btn')) {\r\n        steps.push({\r\n          element: '#tour-add-btn',\r\n          popover: {\r\n            title: '✨ Buy Subscription',\r\n            description: 'Click here to purchase a new subscription plan.',\r\n            side: 'left',\r\n            align: 'start'\r\n          }\r\n        });\r\n      }\r\n\r\n      if (document.querySelector('.tour-renew-btn')) {\r\n        steps.push({\r\n          element: '.tour-renew-btn',\r\n          popover: {\r\n            title: '🔄 Renew Subscription',\r\n            description: 'Use this button to renew your existing subscription.',\r\n            side: 'left',\r\n            align: 'start'\r\n          }\r\n        });\r\n      }\r\n\r\n      if (document.querySelector('.tour-log-btn')) {\r\n        steps.push({\r\n          element: '.tour-log-btn',\r\n          popover: {\r\n            title: '📜 View Logs',\r\n            description: 'Click here to view your transaction and subscription logs.',\r\n            side: 'left',\r\n            align: 'start'\r\n          }\r\n        });\r\n      }\r\n\r\n      if (steps.length > 0) {\r\n        this.tourService.startTour('subscription_list', steps);\r\n      }\r\n    });\r\n  }\r\n\r\n  // Flow 2: Add Subscription / Plan Page\r\n  startAddSubscriptionTour(isRenew: boolean = false) {\r\n    this.waitForElements(['.tour-plan-dropdown', '.tour-plan-select'], () => {\r\n      const steps: any[] = [];\r\n\r\n      if (document.querySelector('.tour-plan-dropdown')) {\r\n        steps.push({\r\n          element: '.tour-plan-dropdown',\r\n          popover: {\r\n            title: '⏳ Select Duration',\r\n            description: 'Choose the billing cycle or duration for your plan.',\r\n            side: 'top',\r\n            align: 'start'\r\n          }\r\n        });\r\n      }\r\n\r\n      if (document.querySelector('.tour-plan-select')) {\r\n        steps.push({\r\n          element: '.tour-plan-select',\r\n          popover: {\r\n            title: isRenew ? '🔄 Renew / Change Plan' : '✔️ Choose Plan',\r\n            description: isRenew ? 'Click here to renew your existing plan or switch to a new one.' : 'Click here to select this plan and proceed to checkout.',\r\n            side: 'top',\r\n            align: 'center'\r\n          }\r\n        });\r\n      }\r\n\r\n      if (steps.length > 0) {\r\n        this.tourService.startTour('add_subscription', steps);\r\n      }\r\n    });\r\n  }\r\n\r\n  // Flow 4: Subscription Log List Tour\r\n  startSubscriptionLogTour() {\r\n    this.waitForElements(['.tour-download-btn'], () => {\r\n      const steps: any[] = [];\r\n\r\n      if (document.querySelector('.tour-download-btn')) {\r\n        steps.push({\r\n          element: '.tour-download-btn',\r\n          popover: {\r\n            title: '📥 Download Receipt',\r\n            description: 'Click here to download the payment receipt for this transaction.',\r\n            side: 'left',\r\n            align: 'start'\r\n          }\r\n        });\r\n      }\r\n\r\n      if (steps.length > 0) {\r\n        this.tourService.startTour('subscription_log_list', steps);\r\n      }\r\n    });\r\n  }\r\n\r\n  // Flow 5: Pricing Page Tour\r\n  startPricingTour() {\r\n    this.waitForElements(['.tour-pricing-app'], () => {\r\n      const steps: any[] = [];\r\n\r\n      if (document.querySelector('.tour-pricing-app')) {\r\n        steps.push({\r\n          element: '.tour-pricing-app',\r\n          popover: {\r\n            title: '📱 Select Application',\r\n            description: 'Click here to choose an application and view its available pricing plans.',\r\n            side: 'bottom',\r\n            align: 'center'\r\n          }\r\n        });\r\n      }\r\n\r\n      if (steps.length > 0) {\r\n        this.tourService.startTour('pricing_page', steps);\r\n      }\r\n    });\r\n  }\r\n}\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, inject, signal } from '@angular/core';\r\nimport { CommonModule, CurrencyPipe } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { Licencemodel, CommanRequest } from '../../model';\r\nimport { Subscriptionsmodel } from '../../model/mastermodel/subscriptionsmodel';\r\nimport { Licenceservice } from '../../services/adminpanel_services/licenceservice';\r\nimport { SubscriptionTourService } from '../../services/apptour/subscription-tour.service';\r\n\r\nexport interface PlanGroup {\r\n  baseName: string;\r\n  licenses: Licencemodel[];\r\n  selectedLicense: Licencemodel;\r\n}\r\n\r\n@Component({\r\n  selector: 'app-plan',\r\n  standalone: true,\r\n  imports: [CommonModule, CurrencyPipe, MatIconModule],\r\n  templateUrl: './app-plan.html',\r\n})\r\nexport class AppPlan implements OnChanges, OnInit {\r\n  @Input() userId: number = 0;\r\n  @Input() selectedItem: Subscriptionsmodel | null = null;\r\n  @Input() loading: boolean = false;\r\n  @Input() iids?: string = '53';\r\n\r\n  @Output() planSelected = new EventEmitter<any>();\r\n\r\n  private licenseService = inject(Licenceservice);\r\n  private subscriptionTourService = inject(SubscriptionTourService);\r\n\r\n  planGroups = signal<PlanGroup[]>([]);\r\n  rawLicenses: Licencemodel[] = [];\r\n  clickedPlanId = signal<number | null>(null);\r\n\r\n  ngOnInit() {\r\n    this.loadLicenses(); // Initialize immediately for both public (0) and admin (real ID)\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['userId'] && !changes['userId'].isFirstChange()) {\r\n      this.loadLicenses();\r\n    } else if (changes['selectedItem'] && this.rawLicenses.length > 0) {\r\n      this.buildPlanGroups(this.rawLicenses);\r\n    }\r\n  }\r\n\r\n  loadLicenses() {\r\n    console.log('Loading licenses for userId:', this.userId, 'with iids:', this.iids);\r\n    const request: CommanRequest = { userID: this.userId, iids: this.iids };\r\n\r\n    this.licenseService.getLicenseList(request).subscribe(res => {\r\n      if (res.status && res.data) {\r\n        const normalizedData = res.data.map((item: any) => {\r\n          const lowerItem: any = {};\r\n          Object.keys(item).forEach(key => {\r\n            lowerItem[key.toLowerCase()] = item[key];\r\n          });\r\n\r\n          const durationMatch = (lowerItem.licensetypename || lowerItem.licensename || '').match(/\\d+/);\r\n          const fallbackDuration = durationMatch ? parseInt(durationMatch[0], 10) : 1;\r\n\r\n          const licenseNameLower = (lowerItem.licensename || '').toLowerCase();\r\n          const fallbackUsers = licenseNameLower.includes('pro') ? 100 : licenseNameLower.includes('advance') ? 10 : 1;\r\n          const fallbackOutlets = licenseNameLower.includes('pro') ? 50 : licenseNameLower.includes('advance') ? 5 : 1;\r\n\r\n          return {\r\n            ...item,\r\n            licenseID: Number(lowerItem.licenseid) || 0,\r\n            licenseName: lowerItem.licensename || '',\r\n            mRate: Number(lowerItem.mrate) || 0,\r\n            discount: Number(lowerItem.discount) || 0,\r\n            durationInMonth: Number(lowerItem.durationinmonth) || fallbackDuration,\r\n            numberOfUser: Number(lowerItem.numberofuser) || fallbackUsers,\r\n            numberOfOutlet: Number(lowerItem.numberofoutlet) || fallbackOutlets,\r\n            applicationName: lowerItem.applicationname || '',\r\n            licenseTypeID: lowerItem.licensetypeid || '',\r\n            licenseTypeName: lowerItem.licensetypename || '',\r\n            cgst: Number(lowerItem.cgst) || 0,\r\n            sgst: Number(lowerItem.sgst) || 0,\r\n            igst: Number(lowerItem.igst) || 0,\r\n            discount_Amount: Number(lowerItem.discount_amount) || 0,\r\n            tax_Instate: Number(lowerItem.tax_instate) || 0,\r\n            pAmount_Instate: Number(lowerItem.pamount_instate) || 0,\r\n            tax_Outstate: Number(lowerItem.tax_outstate) || 0,\r\n            pAmount_Outstate: Number(lowerItem.pamount_outstate) || 0,\r\n            carry_forward_amount: Number(lowerItem.carry_forward_amount || lowerItem.carryforwardamount) || 0,\r\n          } as Licencemodel;\r\n        });\r\n\r\n        this.rawLicenses = normalizedData;\r\n        this.buildPlanGroups(normalizedData);\r\n      }\r\n    });\r\n  }\r\n\r\n  buildPlanGroups(data: Licencemodel[]) {\r\n    const groupsMap = new Map<string, Licencemodel[]>();\r\n\r\n    data.forEach(l => {\r\n      // Base grouping strictly on licenseTypeID instead of Name\r\n      const typeId = String(l.licenseTypeID || l.licenseName?.split(' ')[0] || 'Unknown').toUpperCase();\r\n      if (!groupsMap.has(typeId)) {\r\n        groupsMap.set(typeId, []);\r\n      }\r\n      groupsMap.get(typeId)!.push(l);\r\n    });\r\n\r\n    let groups: PlanGroup[] = [];\r\n\r\n    groupsMap.forEach((licenses, typeId) => {\r\n      const baseName = (licenses[0].licenseTypeName || licenses[0].licenseName?.split(' ')[0] || 'Unknown').toUpperCase();\r\n      licenses.sort((a, b) => Number(a.durationInMonth || 1) - Number(b.durationInMonth || 1));\r\n      let defaultLicense = licenses.find(l => Number(l.durationInMonth) === 1) || licenses[0];\r\n\r\n      /* CURRENT PLAN SELECTION LOGIC */\r\n      if (this.selectedItem && this.selectedItem.licenseName) {\r\n        const selectedBase = this.selectedItem.licenseName.split(' ')[0].toUpperCase();\r\n\r\n        if (selectedBase === baseName) {\r\n          const matching = licenses.find(l => Number(l.durationInMonth) === Number(this.selectedItem?.durationInMonth));\r\n          if (matching) {\r\n            defaultLicense = matching;\r\n          }\r\n        }\r\n      }\r\n\r\n      groups.push({\r\n        baseName,\r\n        licenses,\r\n        selectedLicense: defaultLicense\r\n      });\r\n    });\r\n\r\n    /* SORT ORDER */\r\n    const order = ['BASIC', 'ADVANCE', 'PRO'];\r\n\r\n    groups.sort((a, b) => {\r\n      const idxA = order.indexOf(a.baseName);\r\n      const idxB = order.indexOf(b.baseName);\r\n      return (idxA !== -1 ? idxA : 99) - (idxB !== -1 ? idxB : 99);\r\n    });\r\n\r\n    this.planGroups.set(groups);\r\n    this.subscriptionTourService.startAddSubscriptionTour(!!this.selectedItem);\r\n  }\r\n\r\n  onDurationChange(group: PlanGroup, event: Event) {\r\n    const licenseId = Number((event.target as HTMLSelectElement).value);\r\n    const license = group.licenses.find(l => Number(l.licenseID) === licenseId);\r\n\r\n    if (license) {\r\n      this.planGroups.update(groups => groups.map(g => (g.baseName === group.baseName ? { ...g, selectedLicense: license } : g)));\r\n    }\r\n  }\r\n\r\n  getPlanDescription(name?: string): string {\r\n    const lowerName = (name || '').toLowerCase();\r\n    if (lowerName.includes('advance') || lowerName.includes('business')) {\r\n      return 'More tools and power for growth';\r\n    }\r\n    if (lowerName.includes('pro') || lowerName.includes('cloud')) {\r\n      return '20X more power for your business with Cloud backup';\r\n    }\r\n    return 'Everything you need to get started';\r\n  }\r\n\r\n  isPopular(plan: Licencemodel): boolean {\r\n    return !!plan.licenseName?.toLowerCase().includes('advance');\r\n  }\r\n\r\n  isCurrentPlanGroup(group: PlanGroup): boolean {\r\n    if (!this.selectedItem || !this.selectedItem.licenseName) {\r\n      return false;\r\n    }\r\n    const selectedBase = this.selectedItem.licenseName.split(' ')[0].toUpperCase();\r\n    return group.baseName === selectedBase;\r\n  }\r\n\r\n  subscribe(plan: Licencemodel) {\r\n    this.clickedPlanId.set(Number(plan.licenseID));\r\n    const group = this.planGroups().find(g => g.licenses.some(l => Number(l.licenseID) === Number(plan.licenseID)));\r\n    this.planSelected.emit({ plan: plan, relatedPlans: group ? group.licenses : [plan] });\r\n  }\r\n\r\n  trackByGroupName(index: number, group: PlanGroup): string {\r\n    return group.baseName;\r\n  }\r\n}\r\n","<div class=\"row row-cols-1 row-cols-lg-3 g-4 mb-3 justify-content-center align-items-stretch\">\r\n  <div class=\"col\" *ngFor=\"let group of planGroups(); trackBy: trackByGroupName; let i = index\">\r\n    <div\r\n      class=\"card h-100 pricing-card d-flex flex-column position-relative\"\r\n      [ngClass]=\"{\r\n        'selected-plan': clickedPlanId() === group.selectedLicense.licenseID,\r\n        'current-plan': isCurrentPlanGroup(group) && clickedPlanId() !== group.selectedLicense.licenseID,\r\n        'popular-plan': isPopular(group.selectedLicense) && !isCurrentPlanGroup(group) && clickedPlanId() !== group.selectedLicense.licenseID\r\n      }\">\r\n\r\n      <!-- SELECTED PLAN BADGE -->\r\n      <div class=\"selected-badge\" *ngIf=\"clickedPlanId() === group.selectedLicense.licenseID\">Selected Plan</div>\r\n\r\n      <!-- CURRENT PLAN BADGE -->\r\n      <div class=\"current-badge\" *ngIf=\"isCurrentPlanGroup(group) && clickedPlanId() !== group.selectedLicense.licenseID\">\r\n        Current Plan\r\n      </div>\r\n\r\n      <!-- POPULAR BADGE -->\r\n      <div class=\"popular-badge\" *ngIf=\"isPopular(group.selectedLicense) && !isCurrentPlanGroup(group) && clickedPlanId() !== group.selectedLicense.licenseID\">Most Popular</div>\r\n      <div *ngIf=\"!isPopular(group.selectedLicense) && !isCurrentPlanGroup(group) && clickedPlanId() !== group.selectedLicense.licenseID\" style=\"height: 30px;\"></div>\r\n\r\n      <div class=\"card-body p-4 p-xl-4 pt-4 d-flex flex-column flex-grow-1\">\r\n\r\n        <!-- TITLE -->\r\n        <h4 class=\"fw-bold text-dark mb-1\">{{ group.baseName | titlecase }}</h4>\r\n\r\n        <!-- DESCRIPTION -->\r\n        <p class=\"text-muted small mb-3\" style=\"min-height: 40px; line-height: 1.4;\">{{ getPlanDescription(group.baseName) }}</p>\r\n\r\n        <!-- PRICE -->\r\n        <div class=\"mb-4\">\r\n          <div class=\"d-flex align-items-center gap-2 mb-1\" *ngIf=\"group.selectedLicense.discount\">\r\n            <span class=\"text-decoration-line-through text-muted small fw-medium\">\r\n              {{ group.selectedLicense.mRate + (group.selectedLicense.tax_Instate || 0) | currency:'INR':'symbol':'1.0-0' }}\r\n            </span>\r\n            <span class=\"badge bg-primary-subtle text-primary rounded-pill fw-bold\" style=\"font-size: 0.75rem;\">\r\n              SAVE {{ group.selectedLicense.discount }}%\r\n            </span>\r\n          </div>\r\n          <div class=\"d-flex align-items-end gap-1\">\r\n            <span class=\"fw-bold text-dark lh-1\" style=\"font-size: 2.5rem;\">\r\n              {{ group.selectedLicense.pAmount_Instate | currency:'INR':'symbol':'1.0-0' }}\r\n            </span>\r\n          </div>\r\n        </div>\r\n\r\n        <!-- DURATION -->\r\n        <div class=\"mb-4\">\r\n          <select\r\n            class=\"form-select form-select-sm border-secondary-subtle bg-light fw-medium shadow-none w-100\"\r\n            [class.tour-plan-dropdown]=\"i === (planGroups().length > 1 ? 1 : 0)\"\r\n            style=\"cursor: pointer; border-radius: 8px; height: 38px;\"\r\n            (change)=\"onDurationChange(group, $event)\">\r\n            <option\r\n              *ngFor=\"let l of group.licenses\"\r\n              [value]=\"l.licenseID\"\r\n              [selected]=\"l.licenseID === group.selectedLicense.licenseID\">\r\n              {{l.licenseName}}\r\n            </option>\r\n          </select>\r\n        </div>\r\n\r\n        <!-- BUTTON -->\r\n        <button\r\n          class=\"btn btn-choose-plan w-100 fw-bold mb-4\"\r\n          [class.tour-plan-select]=\"i === (planGroups().length > 1 ? 1 : 0)\"\r\n          [ngClass]=\"{\r\n            'btn-primary': clickedPlanId() === group.selectedLicense.licenseID || isCurrentPlanGroup(group),\r\n            'btn-outline-primary': clickedPlanId() !== group.selectedLicense.licenseID && !isCurrentPlanGroup(group)\r\n          }\"\r\n          (click)=\"subscribe(group.selectedLicense)\"\r\n          [disabled]=\"loading\">\r\n          {{ loading ? 'Processing...' : (!selectedItem ? 'Choose Plan' : (isCurrentPlanGroup(group) ? 'Renew Plan' : 'Change Plan')) }}\r\n        </button>\r\n\r\n        <hr class=\"my-3 border-secondary opacity-10\">\r\n\r\n        <!-- FEATURES -->\r\n        <div class=\"fw-bold text-dark mb-3 small text-uppercase\">What's included</div>\r\n        <ul class=\"list-unstyled mb-0 flex-grow-1 text-start\" style=\"font-size: 0.9rem;\">\r\n          <li class=\"mb-3 d-flex align-items-start\">\r\n            <mat-icon class=\"me-2 text-primary flex-shrink-0\" style=\"font-size: 20px; width: 20px; height: 20px;\">check_circle</mat-icon>\r\n            <span class=\"text-muted\">Up to <strong class=\"text-dark\">{{group.selectedLicense.numberOfUser}}</strong> Users</span>\r\n          </li>\r\n          <li class=\"mb-3 d-flex align-items-start\">\r\n            <mat-icon class=\"me-2 text-primary flex-shrink-0\" style=\"font-size: 20px; width: 20px; height: 20px;\">check_circle</mat-icon>\r\n            <span class=\"text-muted\">Up to <strong class=\"text-dark\">{{group.selectedLicense.numberOfOutlet}}</strong> Outlets</span>\r\n          </li>\r\n          <li class=\"mb-3 d-flex align-items-start\">\r\n            <mat-icon class=\"me-2 text-primary flex-shrink-0\" style=\"font-size: 20px; width: 20px; height: 20px;\">check_circle</mat-icon>\r\n            <span class=\"text-muted\">Priority Support</span>\r\n          </li>\r\n          <li class=\"mb-3 d-flex align-items-start\">\r\n            <mat-icon class=\"me-2 text-primary flex-shrink-0\" style=\"font-size: 20px; width: 20px; height: 20px;\">check_circle</mat-icon>\r\n            <span class=\"text-muted\">Apps: <strong class=\"text-dark\">{{ group.selectedLicense.applicationName || 'All Apps Included' }}</strong></span>\r\n          </li>\r\n        </ul>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, inject, OnInit, signal, Output, EventEmitter, Input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { Subscriptionsservice } from '../../../../shared/services/adminpanel_services/subscriptionsservice';\r\nimport { Tokenservice } from '../../../../shared/services/user_services/tokenservice';\r\nimport { Licencemodel } from '../../../../shared/model';\r\nimport { Subscriptionsmodel } from '../../../../shared/model/mastermodel/subscriptionsmodel';\r\nimport { AppHeader } from '../../../../shared/components/app-header/app-header';\r\nimport { AppCheckout } from '../../../../shared/components/app-checkout/app-checkout';\r\nimport { AppPlan } from '../../../../shared/components/app-plan/app-plan';\r\nimport { SubscriptionTourService } from '../../../../shared/services/apptour/subscription-tour.service';\r\n\r\n@Component({\r\n  selector: 'app-addsubscriptions',\r\n  standalone: true,\r\n  imports: [CommonModule, MatIconModule, AppHeader, AppCheckout, AppPlan],\r\n  templateUrl: './addsubscriptions.html'\r\n})\r\nexport class Addsubscriptions implements OnInit {\r\n  @Input() selectedItem: Subscriptionsmodel | null = null;\r\n  @Output() onSave = new EventEmitter<void>();\r\n  @Output() onCancel = new EventEmitter<void>();\r\n\r\n  private subService = inject(Subscriptionsservice);\r\n  private token = inject(Tokenservice);\r\n  private toastr = inject(ToastrService);\r\n  private subscriptionTourService = inject(SubscriptionTourService);\r\n\r\n  loading = signal<boolean>(false);\r\n  showCheckout = signal<boolean>(false);\r\n  selectedPlan = signal<any | null>(null);\r\n  relatedPlans = signal<any[]>([]);\r\n\r\n  USERID: number = Number(this.token.getUserId()) || 0;\r\n\r\n  ngOnInit() {\r\n    // Razorpay से वापस आने पर Checkout Modal को ऑटो-ओपन करें ताकि verification API कॉल हो सके\r\n    const urlParams = new URLSearchParams(window.location.search);\r\n    if (urlParams.get('verify_payment') === 'true') {\r\n      this.showCheckout.set(true);\r\n    }\r\n  }\r\n\r\n  subscribe(eventData: any) {\r\n    this.selectedPlan.set(eventData.plan);\r\n    this.relatedPlans.set(eventData.relatedPlans || []);\r\n    this.showCheckout.set(true);\r\n  }\r\n\r\n  onPaymentSuccess() {\r\n    this.showCheckout.set(false);\r\n    this.toastr.success('Payment Successful');\r\n    this.onSave.emit();\r\n  }\r\n\r\n  onPaymentFailed() {\r\n    // अगर पेज रिलोड हुआ था (यानी selectedPlan null है) और वेरिफिकेशन फेल हो गया, \r\n    // तो Modal बंद करके वापस लिस्ट पर भेज दें।\r\n    if (!this.selectedPlan()) {\r\n      this.showCheckout.set(false);\r\n      this.goBack();\r\n    }\r\n  }\r\n\r\n  goBack() {\r\n    this.onCancel.emit();\r\n  }\r\n}","<app-header\r\n  [title]=\"selectedItem ? 'Renew Subscription' : 'Choose Your Plan'\"\r\n  [showSearch]=\"false\"\r\n  [showBack]=\"true\"\r\n  (onBack)=\"goBack()\">\r\n</app-header>\r\n\r\n<div class=\"container mt-4 p-4 mat-elevation-z2 bg-white rounded\">\r\n  <div class=\"pricing-header px-3 pb-md-4 mx-auto text-center fade-in\">\r\n    <p class=\"text-muted\">Scale your business with the perfect subscription plan.</p>\r\n  </div>\r\n\r\n  <!-- PRICING CARDS -->\r\n  <app-plan\r\n    [userId]=\"USERID\"\r\n    [selectedItem]=\"selectedItem\"\r\n    [loading]=\"loading()\"\r\n    (planSelected)=\"subscribe($event)\">\r\n  </app-plan>\r\n</div>\r\n\r\n<!-- PAYMENT MODAL -->\r\n<div\r\n  [class.d-none]=\"!(showCheckout() && selectedPlan()) && !checkout.isVerifying\"\r\n  class=\"position-fixed top-0 start-0 w-100 h-100 d-flex align-items-center justify-content-center\"\r\n  style=\"background: rgba(0,0,0,0.5); z-index: 9999;\">\r\n  <div id=\"tour-checkout-summary\" class=\"bg-white p-4 rounded shadow\" style=\"width: 95%; max-width: 900px; max-height: 90vh; overflow-y: auto;\">\r\n    <div class=\"d-flex justify-content-between align-items-center mb-4 border-bottom pb-3\">\r\n      <h5 class=\"mb-0 text-primary fw-bold\">Complete Subscription</h5>\r\n      <button\r\n        class=\"btn-close\"\r\n        (click)=\"showCheckout.set(false); selectedPlan.set(null)\">\r\n      </button>\r\n    </div>\r\n\r\n    <app-checkout\r\n      #checkout\r\n      [plan]=\"selectedPlan()\"\r\n      [relatedPlans]=\"relatedPlans()\"\r\n      (paymentSuccess)=\"onPaymentSuccess()\"\r\n      (paymentFailed)=\"onPaymentFailed()\">\r\n    </app-checkout>\r\n  </div>\r\n</div>","import { Injectable } from '@angular/core';\r\nimport jsPDF from 'jspdf';\r\nimport autoTable from 'jspdf-autotable';\r\nimport { Subscriptionsmodel } from '../../model/mastermodel/subscriptionsmodel';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class Paymentinvoiceservice {\r\n\r\n  generatePaymentReceipt(\r\n    data: Subscriptionsmodel,\r\n    action: 'view' | 'download'\r\n  ) {\r\n\r\n    const doc = new jsPDF('p', 'mm', 'a4');\r\n\r\n    const pageWidth = doc.internal.pageSize.getWidth();\r\n\r\n    const refNo =\r\n      data.paymentRefNo ||\r\n      data.licenseTransactionId ||\r\n      (data as any).licenseTransactionID ||\r\n      'N/A';\r\n\r\n    const paymentDate = data.paymentDate\r\n      ? new Date(data.paymentDate).toLocaleDateString('en-GB')\r\n      : '';\r\n\r\n    const startDate = data.startDate\r\n      ? new Date(data.startDate).toLocaleDateString('en-GB')\r\n      : '';\r\n\r\n    const endDate = data.endDate\r\n      ? new Date(data.endDate).toLocaleDateString('en-GB')\r\n      : '';\r\n\r\n    // ================= HEADER =================\r\n\r\n    doc.setFillColor(33, 150, 243);\r\n    doc.rect(0, 0, pageWidth, 30, 'F');\r\n\r\n    doc.setTextColor(255, 255, 255);\r\n    doc.setFont('helvetica', 'bold');\r\n    doc.setFontSize(20);\r\n\r\n    doc.text('PAYMENT RECEIPT', pageWidth / 2, 18, {\r\n      align: 'center',\r\n    });\r\n\r\n    // ================= COMPANY =================\r\n\r\n    doc.setTextColor(0, 0, 0);\r\n\r\n    doc.setFontSize(15);\r\n    doc.setFont('helvetica', 'bold');\r\n    doc.text('OUTLET SETU', 14, 42);\r\n\r\n    doc.setFontSize(10);\r\n    doc.setFont('helvetica', 'normal');\r\n\r\n    doc.text('Subscription Service Provider', 14, 48);\r\n\r\n    // ================= RECEIPT INFO =================\r\n\r\n    doc.setDrawColor(180);\r\n    doc.roundedRect(14, 55, 182, 28, 2, 2);\r\n\r\n    doc.setFontSize(10);\r\n\r\n    doc.setFont('helvetica', 'bold');\r\n    doc.text('User Name', 18, 64);\r\n    doc.text('Reference No', 120, 64);\r\n\r\n    doc.setFont('helvetica', 'normal');\r\n    doc.text(data.userName || 'N/A', 45, 64);\r\n    doc.text(String(refNo), 150, 64);\r\n\r\n    doc.setFont('helvetica', 'bold');\r\n    doc.text('Action', 18, 74);\r\n    doc.text('Payment Date', 120, 74);\r\n\r\n    doc.setFont('helvetica', 'normal');\r\n    doc.text(data.action_Type || 'N/A', 45, 74);\r\n    doc.text(paymentDate, 150, 74);\r\n\r\n    // ================= TABLE =================\r\n\r\n    autoTable(doc, {\r\n      startY: 92,\r\n\r\n      head: [[\r\n        'SNo',\r\n        'Plan Name',\r\n        'Duration',\r\n        'Start Date',\r\n        'End Date',\r\n        'Amount'\r\n      ]],\r\n\r\n      body: [[\r\n        '1',\r\n        data.licenseName || '',\r\n        `${data.durationInMonth || 0} Month(s)`,\r\n        startDate,\r\n        endDate,\r\n        Number(data.mRate || 0).toFixed(2)\r\n      ]],\r\n\r\n      styles: {\r\n        fontSize: 9,\r\n        cellPadding: 4,\r\n      },\r\n\r\n      headStyles: {\r\n        fillColor: [33, 150, 243],\r\n        textColor: [255, 255, 255],\r\n        fontStyle: 'bold',\r\n      },\r\n\r\n      alternateRowStyles: {\r\n        fillColor: [245, 245, 245],\r\n      },\r\n\r\n      columnStyles: {\r\n        0: { halign: 'center', cellWidth: 15 },\r\n        5: { halign: 'right', cellWidth: 30 },\r\n      }\r\n    });\r\n\r\n    // ================= SUMMARY =================\r\n\r\n    const finalY = (doc as any).lastAutoTable.finalY + 12;\r\n\r\n    const summaryBody: any[][] = [\r\n      ['Base Amount', Number(data.mRate || 0).toFixed(2)]\r\n    ];\r\n\r\n    if (Number(data.dAmount || 0) > 0 || Number(data.discount || 0) > 0) {\r\n      summaryBody.push([\r\n        `Discount ${data.discount ? '(' + data.discount + '%)' : ''}`,\r\n        Number(data.dAmount || 0).toFixed(2)\r\n      ]);\r\n    }\r\n\r\n    if (Number(data.tAmount || 0) > 0) {\r\n      summaryBody.push(['GST Amount', Number(data.tAmount || 0).toFixed(2)]);\r\n    }\r\n\r\n    if (Number(data.cfAmount || 0) !== 0) {\r\n      summaryBody.push(['Carry Forward', Number(data.cfAmount || 0).toFixed(2)]);\r\n    }\r\n    \r\n    summaryBody.push(['Net Paid Amount', Number(data.pAmount || 0).toFixed(2)]);\r\n\r\n    autoTable(doc, {\r\n      startY: finalY,\r\n      theme: 'grid',\r\n\r\n      body: summaryBody,\r\n\r\n      styles: {\r\n        fontSize: 10,\r\n      },\r\n\r\n      columnStyles: {\r\n        0: {\r\n          fontStyle: 'bold',\r\n          cellWidth: 50,\r\n        },\r\n        1: {\r\n          halign: 'right',\r\n          cellWidth: 35,\r\n        }\r\n      },\r\n\r\n      margin: {\r\n        left: 111,\r\n      },\r\n\r\n      didParseCell: function (hookData) {\r\n\r\n        if (hookData.row.index === summaryBody.length - 1) {\r\n\r\n          hookData.cell.styles.fontStyle = 'bold';\r\n          hookData.cell.styles.fontSize = 11;\r\n        }\r\n      }\r\n    });\r\n\r\n    // ================= FOOTER =================\r\n\r\n    const pageHeight = doc.internal.pageSize.height;\r\n    const footerY = pageHeight - 18;\r\n\r\n    doc.setDrawColor(220);\r\n    doc.line(14, footerY - 5, 196, footerY - 5);\r\n\r\n    doc.setFontSize(9);\r\n\r\n    doc.text(\r\n      'Thank you for your payment.',\r\n      pageWidth / 2,\r\n      footerY,\r\n      { align: 'center' }\r\n    );\r\n\r\n    const poweredText = 'Powered by: outletsetu.com : 9301780363';\r\n    doc.setTextColor(33, 150, 243); // Make it blue to indicate it's a link\r\n    doc.text(\r\n      poweredText,\r\n      pageWidth / 2,\r\n      pageHeight - 10,\r\n      { align: 'center' }\r\n    );\r\n\r\n    // Create a clickable hyperlink over the text\r\n    const textWidth = doc.getTextWidth(poweredText);\r\n    doc.link((pageWidth - textWidth) / 2, pageHeight - 10 - 3, textWidth, 4, { url: 'http://outletsetu.com' });\r\n\r\n    // ================= OUTPUT =================\r\n\r\n    if (action === 'download') {\r\n\r\n      doc.save(`Receipt_${refNo}.pdf`);\r\n\r\n    } else {\r\n\r\n      window.open(doc.output('bloburl'), '_blank');\r\n    }\r\n  }\r\n}\r\n","import { Component, EventEmitter, inject, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { CommonModule, CurrencyPipe, DatePipe } from '@angular/common';\r\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { take } from 'rxjs/operators';\r\nimport { Subscriptionsservice } from '../../../../shared/services/adminpanel_services/subscriptionsservice';\r\nimport { Subscriptionsmodel } from '../../../../shared/model/mastermodel/subscriptionsmodel';\r\nimport { AppHeader } from '../../../../shared/components/app-header/app-header';\r\nimport { Tokenservice } from '../../../../shared/services/user_services/tokenservice';\r\nimport { Paymentinvoiceservice } from '../../../../shared/services/printing/paymentinvoiceservice';\r\nimport { SubscriptionTourService } from '../../../../shared/services/apptour/subscription-tour.service';\r\n\r\n@Component({\r\n  selector: 'app-subscriptionsloglist',\r\n  standalone: true,\r\n  imports: [CommonModule, MatTableModule, MatIconModule, MatButtonModule, DatePipe, CurrencyPipe, AppHeader, MatPaginatorModule],\r\n  templateUrl: './subscriptionsloglist.html',\r\n})\r\nexport class Subscriptionsloglist implements OnInit, OnChanges {\r\n  @Input() transactionId: number = 0;\r\n  @Input() userId: number = 0;\r\n  @Output() onBack = new EventEmitter<void>();\r\n\r\n  private subscriptionsService = inject(Subscriptionsservice);\r\n  private toastr = inject(ToastrService);\r\n  private token = inject(Tokenservice);\r\n  private paymentInvoiceService = inject(Paymentinvoiceservice);\r\n  private subscriptionTourService = inject(SubscriptionTourService);\r\n\r\n  logDisplayedColumns: string[] = [\r\n    'sno',\r\n    'licenseName',\r\n    'action_Type',\r\n    'licenseStatus',\r\n    'startDate',\r\n    'endDate',\r\n    'pAmount',\r\n    'action'\r\n  ];\r\n  logDataSource = new MatTableDataSource<Subscriptionsmodel>([]);\r\n\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n\r\n  ngOnInit(): void {\r\n    if (this.token.getUserRole()?.toLowerCase() === 'admin') {\r\n      this.logDisplayedColumns.splice(1, 0, 'userName');\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['transactionId'] && this.transactionId) {\r\n      this.loadLog();\r\n    }\r\n  }\r\n\r\n  loadLog() {\r\n    const request = {\r\n      userID: this.userId,\r\n      id: this.transactionId\r\n    } as any;\r\n\r\n    this.subscriptionsService.subscriptionList(request).pipe(take(1)).subscribe((res) => {\r\n      if (res.status && res.data) {\r\n        console.log('Raw Subscriptions from API:', res.data); // Debug log to inspect raw data\r\n        this.logDataSource.data = res.data;\r\n        this.logDataSource.paginator = this.paginator;\r\n      } else {\r\n        this.logDataSource.data = [];\r\n        this.toastr.info('No logs available for this subscription.');\r\n      }\r\n      this.subscriptionTourService.startSubscriptionLogTour();\r\n    });\r\n  }\r\n\r\n  goBack() {\r\n    this.onBack.emit();\r\n  }\r\n\r\n  downloadReceipt(element: Subscriptionsmodel) {\r\n    this.paymentInvoiceService.generatePaymentReceipt(element, 'download');\r\n  }\r\n}\r\n","<div class=\"d-flex flex-column bg-light fade-in\" style=\"height: 100vh; overflow: hidden;\">\r\n  <app-header title=\"Subscription Logs\" [showSearch]=\"false\" [showBack]=\"true\" (onBack)=\"goBack()\" (onOnlineRestored)=\"loadLog()\"></app-header>\r\n  \r\n  <div class=\"container-fluid p-3 d-flex flex-column flex-grow-1 page-list-container\" style=\"min-height: 0;\">\r\n    <div class=\"mat-elevation-z2 rounded overflow-hidden flex-grow-1 d-flex flex-column bg-white\" style=\"min-height: 0;\">\r\n      \r\n      <div class=\"table-responsive flex-grow-1\" style=\"overflow-y: auto;\">\r\n        <table mat-table [dataSource]=\"logDataSource\" class=\"w-100 responsive-table\">\r\n\r\n    <ng-container matColumnDef=\"sno\">\r\n      <th mat-header-cell *matHeaderCellDef> S.No </th>\r\n      <td mat-cell *matCellDef=\"let element\" data-label=\"S.No\"> {{element.sno}} </td>\r\n    </ng-container>\r\n\r\n    <ng-container matColumnDef=\"userName\">\r\n      <th mat-header-cell *matHeaderCellDef> User Name </th>\r\n      <td mat-cell *matCellDef=\"let element\" data-label=\"User Name\"> {{element.userName}} </td>\r\n    </ng-container>\r\n\r\n    <ng-container matColumnDef=\"licenseName\">\r\n      <th mat-header-cell *matHeaderCellDef> Subscription </th>\r\n      <td mat-cell *matCellDef=\"let element\" data-label=\"Subscription\"> <span class=\"fw-bold\">{{element.licenseName}}</span> </td>\r\n    </ng-container>\r\n\r\n    <ng-container matColumnDef=\"action_Type\">\r\n      <th mat-header-cell *matHeaderCellDef> Action </th>\r\n      <td mat-cell *matCellDef=\"let element\" data-label=\"Action\">\r\n        <span class=\"badge\" [ngClass]=\"{\r\n          'bg-success': element.action_Type === 'New' || element.action_Type === 'Add' || element.action_Type === 'ADD',\r\n          'bg-primary': element.action_Type === 'Renew' || element.action_Type === 'RENEW',\r\n          'bg-secondary': element.action_Type !== 'New' && element.action_Type !== 'Add' && element.action_Type !== 'ADD' && element.action_Type !== 'Renew' && element.action_Type !== 'RENEW'\r\n        }\">{{element.action_Type || 'N/A'}}</span>\r\n      </td>\r\n    </ng-container>\r\n\r\n    <ng-container matColumnDef=\"licenseStatus\">\r\n      <th mat-header-cell *matHeaderCellDef> Status </th>\r\n      <td mat-cell *matCellDef=\"let element\" data-label=\"Status\"> \r\n        <span class=\"badge\" [ngClass]=\"{\r\n          'bg-success': element.licenseStatus === 'Active',\r\n          'bg-danger': element.licenseStatus === 'Expired',\r\n          'bg-warning text-dark': element.licenseStatus === 'Pending'\r\n        }\">{{element.licenseStatus}}</span>\r\n      </td>\r\n    </ng-container>\r\n\r\n    <ng-container matColumnDef=\"startDate\">\r\n      <th mat-header-cell *matHeaderCellDef> Start Date </th>\r\n      <td mat-cell *matCellDef=\"let element\" data-label=\"Start Date\"> {{element.startDate | date}} </td>\r\n    </ng-container>\r\n\r\n    <ng-container matColumnDef=\"endDate\">\r\n      <th mat-header-cell *matHeaderCellDef> End Date </th>\r\n      <td mat-cell *matCellDef=\"let element\" data-label=\"End Date\"> {{element.endDate | date}} </td>\r\n    </ng-container>\r\n\r\n    <ng-container matColumnDef=\"pAmount\">\r\n      <th mat-header-cell *matHeaderCellDef> Amount </th>\r\n      <td mat-cell *matCellDef=\"let element\" data-label=\"Amount\"> \r\n        <span [ngClass]=\"element.pAmount === 0 ? 'text-success fw-bold' : ''\">{{ element.pAmount === 0 ? 'Free' : (element.pAmount | currency:'INR') }}</span> \r\n      </td>\r\n    </ng-container>\r\n\r\n    <ng-container matColumnDef=\"action\">\r\n      <th mat-header-cell *matHeaderCellDef class=\"text-end\"> Receipt </th>\r\n      <td mat-cell *matCellDef=\"let element\" class=\"text-end\" data-label=\"Receipt\">\r\n        <button class=\"tour-download-btn\" mat-icon-button color=\"primary\" matTooltip=\"Download Receipt\" (click)=\"downloadReceipt(element)\">\r\n          <mat-icon>download</mat-icon>\r\n        </button>\r\n      </td>\r\n    </ng-container>\r\n\r\n    <tr mat-header-row *matHeaderRowDef=\"logDisplayedColumns; sticky: true\"></tr>\r\n    <tr mat-row *matRowDef=\"let row; columns: logDisplayedColumns;\"></tr>\r\n\r\n    <!-- No Data Row -->\r\n    <tr class=\"mat-row\" *matNoDataRow>\r\n      <td class=\"mat-cell text-center py-5\" [attr.colspan]=\"logDisplayedColumns.length\">\r\n        <div class=\"d-flex flex-column align-items-center justify-content-center text-muted\">\r\n          <mat-icon class=\"mb-2 opacity-50\" style=\"font-size: 40px; height: 40px; width: 40px;\">receipt_long</mat-icon>\r\n          <span>No subscription logs found.</span>\r\n        </div>\r\n      </td>\r\n    </tr>\r\n  </table>\r\n      </div>\r\n      <div class=\"mt-auto bg-white border-top\" style=\"z-index: 10;\">\r\n        <mat-paginator [pageSizeOptions]=\"[10, 25, 50]\" showFirstLastButtons></mat-paginator>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, inject, OnInit, signal, ViewChild } from '@angular/core';\r\nimport { CommonModule, CurrencyPipe, DatePipe } from '@angular/common';\r\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\r\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatSort, MatSortModule } from '@angular/material/sort';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { take } from 'rxjs/operators';\r\nimport { Subscriptionsservice } from '../../../../shared/services/adminpanel_services/subscriptionsservice';\r\nimport { Subscriptionsmodel } from '../../../../shared/model/mastermodel/subscriptionsmodel';\r\nimport { AppHeader } from '../../../../shared/components/app-header/app-header';\r\nimport { AppBtn } from '../../../../shared/components/app-btn/app-btn';\r\nimport { CommanRequest } from '../../../../shared/model';\r\nimport { Tokenservice } from '../../../../shared/services/user_services/tokenservice';\r\nimport { Addsubscriptions } from '../addsubscriptions/addsubscriptions';\r\nimport { Subscriptionsloglist } from '../subscriptionsloglist/subscriptionsloglist';\r\nimport { Checkoutservice } from '../../../../shared/services/adminpanel_services/checkoutservice';\r\nimport { DoubleVerifyPaymentRequest } from '../../../../shared/model/mastermodel/checkoutmodel';\r\nimport { SubscriptionTourService } from '../../../../shared/services/apptour/subscription-tour.service';\r\n\r\n@Component({\r\n  selector: 'app-subscriptionslist',\r\n  imports: [\r\n    CommonModule,\r\n    MatTableModule,\r\n    MatPaginatorModule,\r\n    MatSortModule,\r\n    MatButtonModule,\r\n    MatIconModule,\r\n    DatePipe,\r\n    CurrencyPipe,\r\n    AppHeader,\r\n    AppBtn,\r\n    Addsubscriptions,\r\n    Subscriptionsloglist\r\n  ],\r\n  templateUrl: './subscriptionslist.html',\r\n})\r\nexport class Subscriptionslist implements OnInit {\r\n  private subscriptionsService = inject(Subscriptionsservice);\r\n  private token = inject(Tokenservice);\r\n  private toastr = inject(ToastrService);\r\n  private checkoutService = inject(Checkoutservice);\r\n  private subscriptionTourService = inject(SubscriptionTourService);\r\n\r\n  displayedColumns: string[] = [\r\n    'sno',\r\n    'licenseName',\r\n    'licenseStatus',\r\n    'endDate',\r\n    'pAmount',\r\n    'action',\r\n  ];\r\n  dataSource = new MatTableDataSource<Subscriptionsmodel>([]);\r\n\r\n  selectedItem = signal<Subscriptionsmodel | null>(null);\r\n  showForm = false;\r\n  showLog = false;\r\n  selectedTransactionId: number = 0;\r\n  USERID: number = 0;\r\n\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  @ViewChild(MatSort) sort!: MatSort;\r\n\r\n  ngOnInit(): void {\r\n    this.USERID = Number(this.token.getUserId()) || 0;\r\n\r\n    // Razorpay से वापस आने पर verify_payment पैरामीटर चेक करें और फॉर्म ओपन करें\r\n    const urlParams = new URLSearchParams(window.location.search);\r\n    if (urlParams.get('verify_payment') === 'true') {\r\n      this.showForm = true;\r\n    }\r\n\r\n    if (this.token.getUserRole()?.toLowerCase() === 'admin') {\r\n      this.displayedColumns.splice(1, 0, 'userName');\r\n    }\r\n\r\n    this.loadSubscriptions();\r\n  }\r\n\r\n  loadSubscriptions() {\r\n    const request: CommanRequest = { userID: this.USERID };\r\n    this.subscriptionsService.subscriptionList(request).pipe(take(1)).subscribe((res) => {\r\n      if (res.status && res.data) {\r\n       // console.log('Raw Subscriptions from API:', res.data); // Debug log to inspect raw data\r\n        this.dataSource.data = res.data;\r\n        this.dataSource.paginator = this.paginator;\r\n        this.dataSource.sort = this.sort;\r\n      }\r\n      this.subscriptionTourService.startSubscriptionListTour();\r\n    });\r\n  }\r\n\r\n  applyFilter(event: any) {\r\n    const val = typeof event === 'string' ? event : event.target.value;\r\n    this.dataSource.filter = val.trim().toLowerCase();\r\n  }\r\n\r\n  onRenew(element: Subscriptionsmodel) {\r\n    this.selectedItem.set(element);\r\n    this.showForm = true;\r\n  }\r\n\r\n  onAdd() {\r\n    this.selectedItem.set(null);\r\n    this.showForm = true;\r\n  }\r\n\r\n  onViewLog(element: Subscriptionsmodel) {\r\n    // Handle potential casing differences from the backend (Id vs ID)\r\n    this.selectedTransactionId = element.licenseTransactionId || (element as any).licenseTransactionID || 0;\r\n    this.showLog = true;\r\n  }\r\n\r\n  closeLog() {\r\n    this.showLog = false;\r\n  }\r\n\r\n  handleSave(formData?: Subscriptionsmodel) {\r\n    this.loadSubscriptions();\r\n    this.showForm = false;\r\n    this.selectedItem.set(null);\r\n  }\r\n\r\n  verifyPayment(element: Subscriptionsmodel) {\r\n    if (!element.orderId || !element.paymentRefNo || element.pAmount == null || element.pAmount <= 0 || element.paymentStatus !== 0) {\r\n      this.toastr.warning('Invalid amount or missing required fields for payment verification.');\r\n      return;\r\n    }\r\n\r\n    const request: DoubleVerifyPaymentRequest = {\r\n      licenseTransactionId: element.licenseTransactionId || (element as any).licenseTransactionID || 0,\r\n      userId: element.createdByUserId || (element as any).createdByUserID || 0,\r\n      orderId: element.orderId,\r\n      paymentRefNo: element.paymentRefNo,\r\n      pamount: element.pAmount\r\n    };\r\n\r\n    this.checkoutService.doubleVerifyPayment(request).subscribe({\r\n      next: (res) => {\r\n        if (res.status) {\r\n          this.toastr.success(res.message?.toString() || 'Payment verified successfully.');\r\n          this.loadSubscriptions(); // Refresh the list\r\n        } else {\r\n          this.toastr.error(res.message?.toString() || 'Payment verification failed.');\r\n        }\r\n      },\r\n      error: (err) => {\r\n        this.toastr.error('An error occurred during verification.');\r\n        console.error('Payment verification error:', err);\r\n      }\r\n    });\r\n  }\r\n}\r\n","<div *ngIf=\"!showForm && !showLog\" class=\"d-flex flex-column bg-light fade-in\" style=\"height: 100vh; overflow: hidden;\">\r\n  <app-header title=\"Subscriptions\" [showSearch]=\"true\" (onSearch)=\"applyFilter($event)\"\r\n  (cdkAutofill)=\"loadSubscriptions()\"></app-header>\r\n  \r\n  <div class=\"container-fluid p-3 d-flex flex-column flex-grow-1 page-list-container\" style=\"min-height: 0;\">\r\n    <div class=\"mat-elevation-z2 rounded overflow-hidden flex-grow-1 d-flex flex-column bg-white\" style=\"min-height: 0;\">\r\n      \r\n      <div class=\"table-responsive flex-grow-1\" style=\"overflow-y: auto;\">\r\n        <table mat-table [dataSource]=\"dataSource\" class=\"w-100 responsive-table\" matSort>\r\n\r\n      <ng-container matColumnDef=\"sno\">\r\n        <th mat-header-cell *matHeaderCellDef mat-sort-header> S.No </th>\r\n        <td mat-cell *matCellDef=\"let element\" data-label=\"S.No\"> {{element.sno}} </td>\r\n      </ng-container>\r\n\r\n      <ng-container matColumnDef=\"userName\">\r\n        <th mat-header-cell *matHeaderCellDef mat-sort-header> User Name </th>\r\n        <td mat-cell *matCellDef=\"let element\" data-label=\"User Name\"> {{element.userName}} </td>\r\n      </ng-container>\r\n\r\n      <ng-container matColumnDef=\"licenseName\">\r\n        <th mat-header-cell *matHeaderCellDef mat-sort-header> Subscription </th>\r\n        <td mat-cell *matCellDef=\"let element\" data-label=\"Subscription\"> \r\n          <div class=\"py-2\">\r\n            <div class=\"fw-bold mb-1\" [ngClass]=\"element.licenseStatus === 'Expired' ? 'text-danger' : 'text-primary'\">\r\n              {{element.licenseName}}\r\n            </div>\r\n            <div class=\"text-muted small mt-1\">\r\n              <div class=\"mb-1\">Allowed Users: <span class=\"badge rounded-pill shadow-sm ms-1 px-2\" [ngClass]=\"element.licenseStatus === 'Expired' ? 'bg-danger' : 'bg-primary'\">{{element.numberOfUser}}</span></div>\r\n              <div>Allowed Outlets: <span class=\"badge rounded-pill shadow-sm ms-1 px-2\" [ngClass]=\"element.licenseStatus === 'Expired' ? 'bg-danger' : 'bg-info text-dark'\">{{element.numberOfOutlet}}</span></div>\r\n            </div>\r\n          </div>\r\n        </td>\r\n      </ng-container>\r\n\r\n      <ng-container matColumnDef=\"licenseStatus\">\r\n        <th mat-header-cell *matHeaderCellDef mat-sort-header> Status </th>\r\n        <td mat-cell *matCellDef=\"let element\" data-label=\"Status\"> \r\n          <span class=\"badge\" [ngClass]=\"{\r\n            'bg-success': element.licenseStatus === 'Active',\r\n            'bg-danger': element.licenseStatus === 'Expired',\r\n            'bg-warning text-dark': element.licenseStatus === 'Pending'\r\n          }\">{{element.licenseStatus}}</span>\r\n        </td>\r\n      </ng-container>\r\n\r\n      <ng-container matColumnDef=\"endDate\">\r\n        <th mat-header-cell *matHeaderCellDef mat-sort-header> End Date </th>\r\n        <td mat-cell *matCellDef=\"let element\" data-label=\"End Date\"> \r\n          <span [ngClass]=\"{'text-danger fw-bold': element.licenseStatus === 'Expired'}\">{{element.endDate | date}}</span> \r\n        </td>\r\n      </ng-container>\r\n\r\n      <ng-container matColumnDef=\"pAmount\">\r\n        <th mat-header-cell *matHeaderCellDef mat-sort-header> Amount </th>\r\n        <td mat-cell *matCellDef=\"let element\" data-label=\"Amount\"> {{element.pAmount | currency:'INR'}} </td>\r\n      </ng-container>\r\n\r\n      <ng-container matColumnDef=\"action\">\r\n        <th mat-header-cell *matHeaderCellDef class=\"text-end\"> Action </th>\r\n        <td mat-cell *matCellDef=\"let element\" class=\"text-end\" data-label=\"Action\">\r\n          <div class=\"d-flex justify-content-end gap-2\">\r\n            <button class=\"tour-log-btn\" mat-icon-button color=\"primary\" matTooltip=\"View Log\" (click)=\"onViewLog(element)\">\r\n              <mat-icon>history</mat-icon>\r\n            </button>\r\n            <button \r\n              *ngIf=\"element.orderId && element.paymentRefNo && element.pAmount > 0 && element.paymentStatus === 0\"\r\n              mat-stroked-button \r\n              color=\"accent\" \r\n              (click)=\"verifyPayment(element)\">\r\n              Verify Payment\r\n            </button>\r\n            <app-loding-btn btnClass=\"btn-sm btn-primary tour-renew-btn\" (click)=\"onRenew(element)\">\r\n              Renew\r\n            </app-loding-btn>\r\n          </div>\r\n        </td>\r\n      </ng-container>\r\n\r\n      <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n      <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\r\n\r\n      <!-- No Data Row -->\r\n      <tr class=\"mat-row\" *matNoDataRow>\r\n        <td class=\"mat-cell text-center py-5\" [attr.colspan]=\"displayedColumns.length\">\r\n          <div class=\"d-flex flex-column align-items-center justify-content-center text-muted\">\r\n            <mat-icon class=\"mb-2 opacity-50\" style=\"font-size: 40px; height: 40px; width: 40px;\">inbox</mat-icon>\r\n            <span>No subscriptions found.</span>\r\n          </div>\r\n        </td>\r\n      </tr>\r\n    </table>\r\n\r\n      </div>\r\n      <div class=\"mt-auto bg-white border-top\" style=\"z-index: 10;\">\r\n        <mat-paginator [pageSizeOptions]=\"[10, 25, 50]\" showFirstLastButtons></mat-paginator>\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n  <button id=\"tour-add-btn\" mat-fab color=\"primary\" class=\"position-fixed fab-mobile shadow-lg\" style=\"bottom: 30px; right: 30px; z-index: 100;\" (click)=\"onAdd()\" matTooltip=\"Add New Subscription\">\r\n    <mat-icon>add</mat-icon>\r\n  </button>\r\n</div>\r\n\r\n<div *ngIf=\"showForm\" class=\"h-100\">\r\n  <app-addsubscriptions [selectedItem]=\"selectedItem()\" (onSave)=\"handleSave()\" (onCancel)=\"showForm = false; selectedItem.set(null)\"></app-addsubscriptions>\r\n</div>\r\n\r\n<div *ngIf=\"showLog\" class=\"h-100 fade-in\">\r\n  <app-subscriptionsloglist \r\n    [transactionId]=\"selectedTransactionId\"\r\n    [userId]=\"USERID\"\r\n    (onBack)=\"closeLog()\">\r\n  </app-subscriptionsloglist>\r\n</div>","/*\r\n * Public API Surface of outlet-hub-common-helper\r\n */\r\n\r\nexport * from './lib/outlet-hub-common-helper';\r\n\r\nexport * from './lib/shared/auth-interceptor';\r\nexport * from './lib/shared/auth-guard';\r\nexport * from './lib/shared/utils/claimReq-utils'\r\n\r\nexport * from './lib/shared/loading-interceptor';\r\nexport * from './lib/shared/loading-list-interceptor';\r\nexport * from './lib/shared/services/db_services/appdbservices';\r\nexport * from './lib/shared/services/user_services/tokenservice';\r\n\r\nexport * from './lib/shared/services/loadinglistservice';\r\nexport * from './lib/shared/components/app-list/app-list';\r\nexport * from './lib/shared/services/loadingservice';\r\nexport * from './lib/shared/components/app-btn/app-btn';\r\n\r\nexport * from './lib/shared/services/headerservice';\r\nexport * from './lib/shared/components/app-header/app-header';\r\n\r\nexport * from './lib/shared/services/sidebarservice';\r\n\r\n\r\nexport * from './lib/shared/utils/crypto-utils';\r\nexport * from './lib/shared/app.config.token';\r\n\r\nexport * from './lib/shared/services/user_services/userservice';\r\nexport * from './lib/shared/services/user_services/authservice';\r\nexport *from  './lib/user/user';\r\nexport *from  './lib/user/login/login';\r\nexport *from './lib/adminpanel/layout/main-layout/main-layout'\r\n\r\n\r\n//user management\r\nexport * from './lib/adminpanel/manageuser/appuser/userlist/userlist';\r\nexport * from './lib/adminpanel/manageuser/userrights/userrights';\r\nexport * from './lib/adminpanel/manageuser/usermapping/usermapping';\r\nexport * from './lib/adminpanel/manageuser/userprofile/userprofile';\r\nexport * from './lib/adminpanel/manageuser/changepassword/changepassword';\r\n\r\n\r\nexport * from './lib/adminpanel/master/workspace/workspacelist/workspacelist';\r\nexport * from './lib/adminpanel/master/outlet/outletlist/outletlist';\r\n\r\n\r\nexport * from './lib/adminpanel/manageuser/subscriptions/subscriptionslist/subscriptionslist';\r\nexport * from './lib/shared/services/confirmation.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.Loadinglistservice","i2","i3","i4","i5","i6","i7","i8","i9","i10","i11","i12","i13","i14","i15","i16","i17","i18","i19","i20","i21","i22","i23","i24","i25","i26","i27","i28","i1.LoadingService","i1","i29","i30","i31","i32","i2.Authservice","i3.Loadinglistservice","i4.AppDbServices","i5.Sidebarservice","switchMap","map","first","catchError","i1.UserService","i2.Changepasswordservice","i3.Tokenservice","i5.UserTourService","take"],"mappings":"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"}