{"version":3,"file":"partners-ui.mjs","sources":["../../../projects/partners-ui/src/lib/material.module.ts","../../../projects/partners-ui/src/lib/shared/model/partner-detail.definition.ts","../../../projects/partners-ui/src/lib/shared/model/branch-filter-model.ts","../../../projects/partners-ui/src/lib/shared/constants/constants.ts","../../../projects/partners-ui/src/lib/shared/constants/api-constants.ts","../../../projects/partners-ui/src/lib/shared/services/partner-service.service.ts","../../../projects/partners-ui/src/lib/shared/services/partner-identifier.service.ts","../../../projects/partners-ui/src/lib/shared/services/branch-management.service.ts","../../../projects/partners-ui/src/lib/shared/services/dashboard-managmenet.service.ts","../../../projects/partners-ui/src/lib/partner-profile.component.ts","../../../projects/partners-ui/src/lib/partner-profile.component.html","../../../projects/partners-ui/src/lib/shared/services/partner-voucher-service.ts","../../../projects/partners-ui/src/lib/gift-management/coupon-information/coupon-form/coupon-form.component.ts","../../../projects/partners-ui/src/lib/gift-management/coupon-information/coupon-form/coupon-form.component.html","../../../projects/partners-ui/src/lib/gift-management/coupon-information/coupon-list/coupon-list.component.ts","../../../projects/partners-ui/src/lib/gift-management/coupon-information/coupon-list/coupon-list.component.html","../../../projects/partners-ui/src/lib/gift-management/coupon-information/coupon/coupon.component.ts","../../../projects/partners-ui/src/lib/gift-management/coupon-information/coupon/coupon.component.html","../../../projects/partners-ui/src/lib/shared/confirm-dialog/confirm-dialog.component.ts","../../../projects/partners-ui/src/lib/shared/confirm-dialog/confirm-dialog.component.html","../../../projects/partners-ui/src/lib/shared/services/bulk-management.service.ts","../../../projects/partners-ui/src/lib/shared/services/content-management.service.ts","../../../projects/partners-ui/src/lib/shared/add-promocodes/add-promocodes.component.ts","../../../projects/partners-ui/src/lib/shared/add-promocodes/add-promocodes.component.html","../../../projects/partners-ui/src/lib/gift-management/promocode-information/promocode-form/promocode-form.component.ts","../../../projects/partners-ui/src/lib/gift-management/promocode-information/promocode-form/promocode-form.component.html","../../../projects/partners-ui/src/lib/gift-management/promocode-information/promocode-list/promocode-list.component.ts","../../../projects/partners-ui/src/lib/gift-management/promocode-information/promocode-list/promocode-list.component.html","../../../projects/partners-ui/src/lib/gift-management/promocode-information/promocode/promocode.component.ts","../../../projects/partners-ui/src/lib/gift-management/promocode-information/promocode/promocode.component.html","../../../projects/partners-ui/src/lib/shared/model/selected-branches-model.ts","../../../projects/partners-ui/src/lib/gift-management/gift-management.component.ts","../../../projects/partners-ui/src/lib/gift-management/gift-management.component.html","../../../projects/partners-ui/src/lib/shared/services/terminal-management.service.ts","../../../projects/partners-ui/src/lib/branches/branches-and-terminals/terminal-information/terminal/terminal.component.ts","../../../projects/partners-ui/src/lib/branches/branches-and-terminals/terminal-information/terminal/terminal.component.html","../../../projects/partners-ui/src/lib/shared/add-terminal/add-terminal.component.ts","../../../projects/partners-ui/src/lib/shared/add-terminal/add-terminal.component.html","../../../projects/partners-ui/src/lib/shared/model/assign-terminal-model.ts","../../../projects/partners-ui/src/lib/shared/assign-terminal/assign-terminal.component.ts","../../../projects/partners-ui/src/lib/shared/assign-terminal/assign-terminal.component.html","../../../projects/partners-ui/src/lib/shared/services/popup-service.ts","../../../projects/partners-ui/src/lib/shared/add-terminals/add-terminals.component.ts","../../../projects/partners-ui/src/lib/shared/add-terminals/add-terminals.component.html","../../../projects/partners-ui/src/lib/shared/model/terminal-filter-model.ts","../../../projects/partners-ui/src/lib/shared/terminals/terminals.component.ts","../../../projects/partners-ui/src/lib/shared/terminals/terminals.component.html","../../../projects/partners-ui/src/lib/branches/branches-and-terminals/branch-information/branch-form/branch-form.component.ts","../../../projects/partners-ui/src/lib/branches/branches-and-terminals/branch-information/branch-form/branch-form.component.html","../../../projects/partners-ui/src/lib/branches/branches-and-terminals/branch-information/branch-list/branch-list.component.ts","../../../projects/partners-ui/src/lib/branches/branches-and-terminals/branch-information/branch-list/branch-list.component.html","../../../projects/partners-ui/src/lib/branches/branches-and-terminals/branch-information/branch/branch.component.ts","../../../projects/partners-ui/src/lib/branches/branches-and-terminals/branch-information/branch/branch.component.html","../../../projects/partners-ui/src/lib/branches/branches-and-terminals/bulk-add-branches/bulk-add-branches.component.ts","../../../projects/partners-ui/src/lib/branches/branches-and-terminals/bulk-add-branches/bulk-add-branches.component.html","../../../projects/partners-ui/src/lib/branches/branches-and-terminals/terminal-information/terminal-list/terminal-list.component.ts","../../../projects/partners-ui/src/lib/branches/branches-and-terminals/terminal-information/terminal-list/terminal-list.component.html","../../../projects/partners-ui/src/lib/branches/branches-and-terminals/branches-and-terminals.component.ts","../../../projects/partners-ui/src/lib/branches/branches-and-terminals/branches-and-terminals.component.html","../../../projects/partners-ui/src/lib/shared/model/transaction-filter-model.ts","../../../projects/partners-ui/src/lib/shared/services/transaction.service.ts","../../../projects/partners-ui/src/lib/shared/services/account-management.service.ts","../../../projects/partners-ui/src/lib/shared/view-transactions/view-transactions.component.ts","../../../projects/partners-ui/src/lib/shared/view-transactions/view-transactions.component.html","../../../projects/partners-ui/src/lib/shared/edit-terminal/edit-terminal.component.ts","../../../projects/partners-ui/src/lib/shared/edit-terminal/edit-terminal.component.html","../../../projects/partners-ui/src/lib/shared/model/gift-filter-model.ts","../../../projects/partners-ui/src/lib/shared/services/voucher-management.service.ts","../../../projects/partners-ui/src/lib/shared/view-gifts/view-gifts.component.ts","../../../projects/partners-ui/src/lib/shared/view-gifts/view-gifts.component.html","../../../projects/partners-ui/src/lib/partners-ui.module.ts","../../../projects/partners-ui/src/lib/shared/model/branch-information-model.ts","../../../projects/partners-ui/src/public-api.ts","../../../projects/partners-ui/src/partners-ui.ts"],"sourcesContent":["\nimport { NgModule } from '@angular/core';\nimport {\n  MAT_DATE_LOCALE,\n  MatCommonModule,\n  MatLineModule,\n  MatNativeDateModule,\n  MatOptionModule,\n  MatPseudoCheckboxModule,\n  MatRippleModule,\n} from '@angular/material/core';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatGridListModule } from '@angular/material/grid-list';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatStepperModule } from '@angular/material/stepper';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { CdkAccordionModule } from '@angular/cdk/accordion';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\n@NgModule({\n  exports: [\n    MatAutocompleteModule,\n    MatBadgeModule,\n    MatButtonModule,\n    MatButtonToggleModule,\n    MatCardModule,\n    MatCheckboxModule,\n    MatChipsModule,\n    MatCommonModule,\n    MatDatepickerModule,\n    MatDialogModule,\n    MatDividerModule,\n    MatExpansionModule,\n    MatFormFieldModule,\n    MatGridListModule,\n    MatIconModule,\n    MatInputModule,\n    MatLineModule,\n    MatListModule,\n    MatMenuModule,\n    MatNativeDateModule,\n    MatOptionModule,\n    MatPaginatorModule,\n    MatProgressBarModule,\n    MatProgressSpinnerModule,\n    MatPseudoCheckboxModule,\n    MatRadioModule,\n    MatRippleModule,\n    MatSelectModule,\n    MatSidenavModule,\n    MatSlideToggleModule,\n    MatSliderModule,\n    MatSnackBarModule,\n    MatSortModule,\n    MatStepperModule,\n    MatTableModule,\n    MatTabsModule,\n    MatToolbarModule,\n    MatTooltipModule,\n    MatTreeModule,\n    CdkAccordionModule,\n    DragDropModule\n  ],\n  providers: [{ provide: MatDialogRef, useValue: {} },\n              { provide: MAT_DATE_LOCALE, useValue: 'en-GB' }],\n})\nexport class MaterialModule {}\n","export interface PartnerDetails {\n    \"partnerNameEn\":string,\n    \"partnerNameAr\":string,\n    \"id\":number,\n    \"domainId\":number,\n    \"contactPhoneNumber\":string,\n    \"fileId\":number,\n    \"contactEmail\":string,\n    \"count\":number,\n    \"branchesCount\": number,\n    \"terminalsCount\": number,\n    \"numberOfLinkedAccounts\" : number,\n    \"type\": string\n   \n   \n}\n\nexport enum PartnerType {\n    Physical = \"Physical\",\n    Hybrid = \"Hybrid\",\n    Online = \"Online\"\n}","export class BranchFilterModel {\n    public name?: string;\n    public city?: any;\n    public contactPerson?: string;\n    constructor(data: Partial<BranchFilterModel>) {\n        Object.assign(this, data);\n    }\n}","export class Constants\n{\n    static readonly PROMOCODE = \"Promocode\";\n    static readonly OWNER_NAME = \"SEOUDI\";\n    static readonly MAX_FILE_SIZE = 1000000;\n    static readonly PROMOCODE_TEMPLATE = \"promocode-template\";\n    static readonly PROMOCODE_TEMPLATE_FILE_NAME = \"Promocode_%s%_V1.0.csv\";\n    static readonly PROMOCODE_TYPE = \"promocodeType\";\n    static readonly PROMOCODE_ENGLISH_NAME = \"promocodeType\";\n    static readonly PROMOCODE_ARABIC_NAME = \"promocodeArabicName\";\n    static readonly PROMOCODE_DESCRIPTION_EN = \"promocodeDescriptionEN\";\n    static readonly PROMOCODE_DESCRIPTION_AR = \"promocodeDescriptionAR\";\n    static readonly PROMOCODE_ACTIVATION_DAYS = \"promocodeActivationDays\";\n    static readonly PROMOCODE_EXPIRE_DAYS = \"promocodeExpireDays\";\n    static readonly PROMOCODE_VALUE_TYPE = \"promocodeValueType\";\n    static readonly PROMOCODE_DISCOUNT_VALUE = \"promocodeDiscountValue\";\n    static readonly PROMOCODE_CURRENCY = \"promocodeCurrency\";\n    static readonly PROMOCODE_USING_TYPE = \"promocodeUsingType\";\n    static readonly PROMOCODE_REDEMPTION_LIMITATION = \"promocodeRedemptionLimitation\";\n    static readonly PROMOCODE_SOURCE = \"promocodeSource\";\n    static readonly PARTNER_ID_STORE_KEY = \"partner-id\";\n    static readonly FILE_UPLOAD = 'DRAG_FILE';\n    static readonly ADD_TERMINALS_TEMPLATE = 'add-terminal-template';\n    static readonly ADD_TERMINALS_TEMPLATE_NAME = 'Add Terminals_V1.0.csv';\n    static readonly ADD_TERMINAL = 'ADD_TERMINALS';\n    static readonly TERMINAL_HEADERS = [\n        'Terminal Serial Number',\n        'Terminal Password',\n        'Terminal Type',\n        'Sim Card',\n        'Partner ID',\n        'Branch ID'\n      ];\n    static readonly INVALID_NUMBER_OF_ROWS = 'INVALID_NUMBER_OF_ROWS';\n    static readonly INVALID_ROWS_EMPTY = 'INVALID_ROWS_EMPTY';\n    static readonly INVALID_ROWS_EXCEEDED_MAX = 'INVALID_ROWS_EXCEEDED_MAX';\n    static readonly ERROR_READING_FILE = 'ERRROR_READING_FILE';\n    static readonly INVALID_HEADER_ROWS = 'INVALID_HEADER_ROWS';\n    static readonly UPLOAD_ERROR = 'UPLOAD_ERROR';\n    static readonly SYNC_TERMINALS = '/sheets/sync/terminals';\n    static readonly INVALID_ROWS = \"INVALID_ROWS\";\n    static readonly ADD_BRANCHES_TEMPLATE = 'add-branch-template';\n    static readonly ADD_BRANCHES_TEMPLATE_NAME = 'ADD BRANCHES_V1.0.csv';\n    static readonly INVALID_NUMBER_OF_ROWS_BRANCHES = 'INVALID_NUMBER_OF_ROWS_BRANCHES';\n    static readonly ADD_BRANCHES_HEADERS = [\n        'Branch Name EN',\n        'Branch Name AR',\n        'City ID',\n        'Area',\n        'Address',\n        'Contact Person',\n        'e-mail',\n        'Mobile Number',\n      ];\n    static readonly ADD_PROMOCODES_SHEET_FIELDS = [\n        'Promocode',\n      ];\n\n      static readonly GIFT_CREATION_SUCCESS_MESSAGE = \"GIFT_CREATION_SUCCESSFUL\";\n\n      static readonly deleteBranchConfiratmionMessage = \"DELETE_BRANCH_MSG\";\n      static readonly deleteBranchConfiratmionSubMessage = \"DELETE_BRANCH_SUB_MSG\";\n      static readonly deleteBranchSuccessMsg = \"DELETE_BRANCH_SUCCESS_MSG\";\n\n      static readonly deleteTerminalConfiratmionMessage = \"DELETE_TERMINAL_MSG\";\n      static readonly deleteTerminalConfiratmionSubMessage = \"DELETE_TERMINAL_SUB_MSG\";\n      static readonly deleteTerminalSuccessMsg = \"DELETE_TERMINAL_SUCCESS_MSG\";\n\n      static readonly deleteGiftConfiratmionMessage = \"DELETE_GIFT_MSG\";\n      static readonly deleteGiftConfiratmionSubMessage = \"DELETE_GIFT_SUB_MSG\";\n      static readonly deleteGiftSuccessMsg = \"DELETE_GIFT_SUCCESS_MSG\";\n      static readonly DELETE = \"DELETE\";\n\n}\n","export class ApiConstants {\n    static readonly GET_PARTNER_DETAILS = \"/partners\";\n    static readonly GET_BRANCHES_DETAILS = \"/branches\";\n    static readonly SYNC_INITIAL_PROMOCODES = \"/promocode-sheets/sync-initial-promocodes\"\n    static readonly uploadPromoIdsBulkSheet = \"/promocode-sheets\";\n    static readonly DOWNLOAD_TEMPLATES_API = \"/media\";\n    static readonly GET_TEMPLATES_API = \"/sheets/templates\";\n    static readonly GET_TERMINALS_COUNT = \"/terminals/count\";\n    static readonly terminalResource = \"/terminals\";\n    static readonly partnerResource = \"/partners\";\n    static readonly branchResource = \"/branches\";\n    static readonly ALL_TERMINALS = \"/all\";\n    static readonly partnerCreation = \"/partners\";\n    static readonly branchNameExists = \"/branches/exists\";\n    static readonly simCardExists = \"/exists/sim-card\";\n    static readonly serialNumberExists = \"/exists/serial-number\";\n    static readonly serialNumbers = \"/serial-numbers\";\n    static readonly simCards = \"/sim-cards\";\n    static readonly FILTER_PARTNERS = \"/partners/filter\";\n    static readonly productVersions = \"/product-versions\";\n    static readonly BRANCH_DETAILS = \"/branches/names\";\n    static readonly ASSIGN_BRANCH = \"/terminals/assign\";\n    static readonly EXPORT_TRANSACTIONS_FOR_PARTNER =\"/transaction/partners/export\";\n    static readonly ACCOUNT_NAMES= '/accounts/names/ids';\n    static readonly BRANCH_NAMES='/branches/names';\n    static readonly PARTNER_NAMES='/partners/names';\n    static readonly CHANNELS='/terminals/channel';\n    static readonly PARTNER_GIFTS = \"/partner-gifts\";\n    static readonly CREATE_GIFT = \"/partner-gifts/create\";\n    static readonly CONTACT_PERSONS = \"/conatact-persons\";\n    static readonly PARTNER_GROUP =\"/partners/groups\";\n    static readonly GET_PARTNER_DASHBOARD='/dashboards/partner'\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { ApiConstants } from '../constants/api-constants';\nimport { AssignTerminalModel } from '../model/assign-terminal-model';\nimport { BranchFilterModel } from '../model/branch-filter-model';\nimport { TerminalFilterModel } from '../model/terminal-filter-model';\n\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PartnerService {\n\n  constructor(private httpClient: HttpClient, @Inject('environment') private environment: any) { }\n\n  getPartnerDetails(partnerId: string) {\n    let httpOptions = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json'\n      })\n    }\n\n    return this.httpClient.get(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.GET_PARTNER_DETAILS + \"/\" + partnerId, httpOptions);\n  }\n  getBranchesData(page: number, pageSize: number, partnerId: string,branchFilterModel: BranchFilterModel,language:string) {\n    let sentParameters: any = {\n        'page': String(page),\n        'size': String(pageSize),\n        'partner-id':partnerId,\n    };\n    if (partnerId) {\n      sentParameters['partner-id'] = partnerId;\n    }\n    if (branchFilterModel.name!=null) {\n      sentParameters['name'] = branchFilterModel.name;\n    }\n    if (branchFilterModel.city!=null) {\n      sentParameters['city'] = branchFilterModel.city;\n    }\n    if (branchFilterModel.contactPerson) {\n      sentParameters['contactPerson'] = branchFilterModel.contactPerson;\n    }\n    let httpOptions = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json',\n        'language': language\n      }),\n      params: sentParameters\n    }\n    return this.httpClient.get(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.GET_BRANCHES_DETAILS,httpOptions);\n\n  }\n\n  getTerminalsCount(partnerId: string) {\n    return this.httpClient.get(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.GET_TERMINALS_COUNT + \"/\" + partnerId);\n  }\n\n  getTerminals(partnerId: string, page: number, pageSize: number,\n  terminalFilter: TerminalFilterModel\n  ) {\n    let sentParameters = {\n      page: String(page),\n      size: String(pageSize),\n    } as any;\n\n    if (partnerId) {\n      sentParameters.partnerId = partnerId;\n    }\n\n    if (terminalFilter.serialNumber != null) {\n      sentParameters.serialNumbers = terminalFilter.serialNumber;\n    }\n\n    if (terminalFilter.terminalType != null) {\n      sentParameters.terminalTypes = terminalFilter.terminalType;\n    }\n\n    if (terminalFilter.simCard != null) {\n      sentParameters.simCards = terminalFilter.simCard;\n    }\n\n    if (terminalFilter.status != null) {\n      sentParameters.statuses = terminalFilter.status;\n    }\n    if (terminalFilter.productVersion != null) {\n      sentParameters.productVersions = terminalFilter.productVersion;\n    }\n    if (terminalFilter.name != null) {\n      sentParameters.partners = terminalFilter.name;\n    }\n    if (terminalFilter.branchId != null) {\n      sentParameters.branches = terminalFilter.branchId;\n    }\n\n    let httpOptions = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json'\n      }),\n      params: sentParameters\n    }\n    return this.httpClient.get(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.terminalResource + ApiConstants.ALL_TERMINALS, httpOptions);\n  }\n\n  checkbranchName(name: string, branchId: string, language: \"en\" | \"ar\") {\n    let queryParams = new HttpParams();\n    queryParams = queryParams.append('branch-name', name);\n    queryParams = queryParams.append('branch-id', branchId);\n\n    let httpOptions = {\n        headers: new HttpHeaders({\n            'Content-Type': 'application/json',\n            'language': language\n        }),\n        params: queryParams\n    };\n    return this.httpClient.get(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.branchNameExists, httpOptions);\n}\n\n\n  getAllPartners() {\n    let queryParams = new HttpParams();\n    queryParams.append('all', true);\n    let httpOptions = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json',\n      }),\n      params: queryParams\n    }\n    return this.httpClient.post(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.FILTER_PARTNERS, httpOptions);\n  }\n\n  getPartners() {\n    let queryParams = new HttpParams();\n    queryParams = queryParams.append('physical-only', true);\n\n    let httpOptions: Object = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json',\n      }),\n      params: queryParams\n    };\n    return this.httpClient.get(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.PARTNER_NAMES, httpOptions);\n  }\n  getBranches(partnerId: string) {\n    let queryParams = new HttpParams();\n    queryParams = queryParams.append('partner-id', partnerId);\n    let httpOptions: Object = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json',\n      }),\n      params: queryParams\n    };\n    return this.httpClient.get(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.BRANCH_DETAILS, httpOptions);\n  }\n\n  assignTerminal(assignTerminalModel: AssignTerminalModel) {\n    return this.httpClient.put(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.ASSIGN_BRANCH, assignTerminalModel);\n\n  }\n  getPartnerNames() {\n    let queryParams = new HttpParams();\n    let httpOptions = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json',\n      }),\n      params: queryParams\n    }\n    return this.httpClient.get(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.PARTNER_NAMES, httpOptions);\n  }\n  getChannelNames() {\n    let queryParams = new HttpParams();\n    let httpOptions = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json',\n      }),\n      params: queryParams\n    }\n    return this.httpClient.get(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.CHANNELS, httpOptions);\n  }\n\n  deleteBranch(branchId : string , partnerId : string){\n    let queryParams = new HttpParams();\n    queryParams=queryParams.append('partner-id', partnerId);\n    let httpOptions = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json',\n      }),\n      params: queryParams\n    }\n    return this.httpClient.delete(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.branchResource + \"/\" + branchId,httpOptions);\n  }\n  deleteTerminal(terminalId : string){\n    return this.httpClient.delete(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.terminalResource + \"/\" + terminalId);\n\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { KeycloakService } from 'keycloak-angular';\nimport { Constants } from '../constants/constants';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class PartnerIdentifierService {\n    constructor(private keycloackService: KeycloakService, private route: ActivatedRoute) { }\n    getIdentifier(): any {\n        let partnerId;\n        const tokenParsed: any = this.keycloackService.getKeycloakInstance().tokenParsed;\n        if (tokenParsed[\"partner-id\"] !== undefined && tokenParsed[\"partner-id\"] !== null) {\n            partnerId = tokenParsed[\"partner-id\"];\n        }\n        return partnerId;\n    }\n\n}\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { ApiConstants } from '../constants/api-constants';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class BranchManagementService {\n\n  constructor(private httpClient: HttpClient, @Inject('environment') private environment: any) { }\n\n\n  getBranchNames(id : string){\n    let queryParams = new HttpParams();\n    if(id)\n      queryParams = queryParams.append('partner-id', id);\n    let httpOptions = {\n        headers: new HttpHeaders({\n            'Content-Type': 'application/json',\n        }),\n        params: queryParams\n    }\n    return this.httpClient.get(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.BRANCH_NAMES, httpOptions);\n  }\n  getAllContactPersons(partnerId : string)\n  {\n    let sentParameters = {} as any;\n    if (partnerId) {\n      sentParameters.partnerId = partnerId;\n    }\n    let httpOptions = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json'\n      }),\n      params: sentParameters\n    }\n    return this.httpClient.get(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.branchResource + ApiConstants.CONTACT_PERSONS,httpOptions);\n  }\n\n  getBranchDetails(branchId:string){\n    let httpOptions = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json'\n      })\n    }\n    return this.httpClient.get(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.branchResource + \"/\" + branchId,httpOptions);\n  }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { ApiConstants } from '../constants/api-constants';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DashboardManagmentService {\n\n  constructor(private httpClient : HttpClient, @Inject('environment') private environment: any) {}\n\n  getPartnerDashboard(partnerId:string)\n  {\n    let httpOptions = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json',\n      }),\n    }\n    return this.httpClient.get(this.environment.DASHBOARD_MANAGEMENT_API_HOST + ApiConstants.GET_PARTNER_DASHBOARD+'/'+partnerId);\n  }\n\n  getDomains(key:string){\n    return this.httpClient.get(this.environment.LOOKUP_MANAGEMENT_API_HOST + \"/\" + key);\n  }\n}\n","import { Component, OnInit, Input, Output, EventEmitter, ViewChildren, QueryList, ElementRef, HostListener, ViewChild, ComponentRef } from '@angular/core';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { ApiConstants, AuthenticationService, ColumnDefinition, ConfirmationPopupComponent, FailurePopupComponent, GenericPopUpService, LookupService, PopupService, ProfileInformation, RegexConstants, SearchFilterComponent, SuccessPopupComponent, TablePageDetails } from 'loyalty-common';\nimport { PartnerService } from './shared/services/partner-service.service';\nimport { BranchDetails } from './shared/model/branch-details.definition';\nimport { PartnerDetails, PartnerType } from './shared/model/partner-detail.definition';\nimport { PartnerIdentifierService } from './shared/services/partner-identifier.service';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { BranchFilterModel } from './shared/model/branch-filter-model';\nimport { MAT_SELECT_CONFIG } from '@angular/material/select';\nimport { BranchManagementService } from './shared/services/branch-management.service';\nimport { DashboardManagmentService } from './shared/services/dashboard-managmenet.service';\nimport { LookupModel } from './shared/model/LookupModel';\nimport { Constants } from './shared/constants/constants';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n  selector: 'app-partner-profile',\n  templateUrl: './partner-profile.component.html',\n  styleUrls: ['./partner-profile.component.css'],\n  providers: [\n    {\n      provide: MAT_SELECT_CONFIG,\n      useValue: { overlayPanelClass: 'mat-select-overlay' }\n    }\n  ]\n})\nexport class PartnerProfileComponent implements OnInit {\n\n  requestSent: boolean = false;\n  menuToggled: boolean = false;\n  branchesData: any[] = [];\n  partnerDetails!: PartnerDetails;\n  profileInformation!: ProfileInformation;\n  branchFilterModel: BranchFilterModel = new BranchFilterModel({});\n  englishWithSpecialCharactersRegex = RegexConstants.ENGLISH_SPECIAL_CHARS_REGEX;\n  arabicWithSpecialCharactersRegex = RegexConstants.ARABIC_SPECIAL_CHARS_REGEX;\n  terminalsCount!: number;\n  branchesCount!: number;\n  giftsCount!: number;\n  transactionsCount!: number;\n  employeesCount!: number;\n  cities: any[] = [];\n  partnerId!: string;\n  cityNames!: any[];\n  contactPersons!: any[];\n  areas: any[] = [];\n  searchForm!: FormGroup;\n  pageDetails: TablePageDetails = {\n    pageNumber: 1,\n    pageSize: 10,\n    totalNumberOfElements: 0,\n    pagesCount: 1\n  };\n  language!: string;\n  branchId !: string;\n  element !: any;\n  canHaveBranches: boolean = true;\n  @ViewChildren(SearchFilterComponent) filterComponents!: QueryList<SearchFilterComponent>;\n\n\n  actionButtons: string[] = ['more-actions'];\n  maxColumns: number = 6;\n  permissions !: string[] | null;\n  linkedAccountsCount !: number;\n\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\n  displayedColumns: ColumnDefinition[] = [\n    {field: 'branchId', headerLabel: 'BRANCH_ID', span: 2},\n    {field: 'name', headerLabel: 'BRANCH_NAME', span: 2},\n    {field: 'city', headerLabel: 'CITY', span: 2},\n    {field: 'area', headerLabel: 'AREA', span: 2},\n    {field: 'contactPerson', headerLabel: 'CONTACT_PERSON_BRANCH', span: 2},\n    {field: 'phoneNumber', headerLabel: 'PHONE_NUMBER_BRANCH', span: 3},\n    {field: 'email', headerLabel: 'EMAIL', span: 3},\n    {field: 'terminalsCount', headerLabel: 'TERMINALS', span: 1}\n  ];\n  allDomains!: LookupModel[];\n  domainEnglishName!: string;\n  domainArabicName!: string;\n  private confirmationDialogPopUpRef: ComponentRef<ConfirmationPopupComponent> | null = null;\n  private successDialogPopUpRef: ComponentRef<SuccessPopupComponent> | null = null;\n\n  constructor(private partnerService: PartnerService, private activatedRoute: ActivatedRoute, private partnerIdentifierService: PartnerIdentifierService, private router: Router, private lookUpService: LookupService,\n    private branchService: BranchManagementService, private dashboardService: DashboardManagmentService, private authService : AuthenticationService\n  ,private genericPopupService:GenericPopUpService , private popUpService : PopupService , private translateService : TranslateService\n    ) {\n      this.translateService.onLangChange.subscribe((event) => {\n        this.language = event.lang;\n        this.getDomains();\n      });  \n\n     }\n  ngOnInit(): void {\n    this.permissions = this.authService.currentPermissionsValue;\n    this.partnerId = this.activatedRoute.snapshot.params['id'];\n    if (!!!this.partnerId)\n      this.partnerId = this.partnerIdentifierService.getIdentifier();\n    this.language = this.translateService.currentLang;\n    this.getDomains().then((response: any) => {\n      if (response.success == true)\n        this.getPartnerDetails().then((response: any) => {\n          if (response.success == true && !this.canHaveBranches) return;\n          this.getBranchesData();\n        });\n      else\n        this.getBranchesData();\n    });\n    this.getCities();\n    this.getContactPersons();\n    this.initForm();\n    this.getPartnerDashboard();\n  }\n  getDomains(): Promise<any> {\n    return new Promise((resolve, reject) => {\n      this.dashboardService.getDomains(\"DOMAIN\").subscribe({\n        next: (resp: any) => {\n          this.allDomains = resp;\n          resolve({ success: true });\n        }, error: (error: any) => {\n          reject({ success: false });\n        }\n      });\n    });\n  }\n\n  initForm() {\n    this.searchForm = new FormGroup({\n      nameOrId: new FormControl(),\n    });\n  }\n  performAction(event: any) {\n    this.element = event.element;\n    this.branchId = event.id;\n  }\n  getPartnerDashboard() {\n    this.dashboardService.getPartnerDashboard(this.partnerId).subscribe((response: any) => {\n      this.terminalsCount = response.terminalsCount;\n      this.branchesCount = response.branchesCount;\n      this.giftsCount = response.giftsCount;\n      this.transactionsCount = response.transactionsCount;\n      this.employeesCount = response.employeesCount;\n    });\n  }\n\n  getBranchesData() {\n    if (!this.canHaveBranches)\n      return;\n    if (this.partnerId != null) {\n      this.requestSent = true;\n      this.partnerService.getBranchesData(this.pageDetails.pageNumber - 1, this.pageDetails.pageSize, this.partnerId, this.branchFilterModel, this.language)\n        .subscribe((res: any) => {\n          this.dataSource.data =\n            this.pageDetails.totalNumberOfElements = res.elementCount;\n          this.branchesData = res?.list;\n          this.dataSource.data = this.branchesData.map(branch => {\n            return {\n              \"id\": branch.id || \"-\",\n              \"branchId\": branch.id || \"-\",\n              \"city\": this.mapCityNameFromLookUps(branch.cityId) || \"-\",\n              \"area\": branch.area || \"-\",\n              \"phoneNumber\": branch.contactPhoneNumber || \"-\",\n              \"email\": branch.contactEmail || \"-\",\n              \"terminalsCount\": branch.terminalsCount || \"-\",\n              \"name\": this.language == 'en' ? branch.name : branch.nameAr || \"-\",\n              \"contactPerson\": branch.contactPerson || \"-\"\n            }\n          });\n          this.requestSent = false;\n          this.pageDetails.totalNumberOfElements = res.elementCount;\n          this.pageDetails.pagesCount = Math.ceil(res.elementCount / this.pageDetails.pageSize);\n        })\n    }\n  }\n\n  changePage(page: number) {\n    this.pageDetails.pageNumber = page;\n    this.getBranchesData();\n  }\n\n  getPartnerDetails(): Promise<any> {\n    return new Promise((resolve, reject) => {\n      this.partnerService.getPartnerDetails(this.partnerId)\n        .subscribe({\n          next: (res: any) => {\n            this.partnerDetails = res;\n            this.domainEnglishName = this.allDomains.filter(domain => domain.id == this.partnerDetails?.domainId)[0].name;\n            this.domainArabicName = this.allDomains.filter(domain => domain.id == this.partnerDetails?.domainId)[0].nameAr;\n            this.linkedAccountsCount = this.partnerDetails?.numberOfLinkedAccounts;\n            this.profileInformation = {\n              branchesCount: this.partnerDetails?.branchesCount,\n              terminalsCount: this.partnerDetails?.terminalsCount,\n              contactInfo: this.partnerDetails?.contactPhoneNumber,\n              industry: this.domainEnglishName,\n              id: \"#\" + this.partnerDetails?.id,\n              nameEn: this.partnerDetails?.partnerNameEn,\n              nameAr: this.partnerDetails?.partnerNameAr,\n              titleAr: this.domainArabicName,\n              titlen: this.domainEnglishName,\n              logoId: this.partnerDetails?.fileId,\n              type: this.partnerDetails?.type\n            }\n            this.canHaveBranches = !(this.profileInformation.type == PartnerType.Online)\n            resolve({ success: true });\n          },\n          error: (error: any) => {\n            reject({ success: false });\n          }\n        });\n    });\n  }\n\n  navigateTo(location: string) {\n    if (!!!this.partnerId) {\n      this.router.navigate([location]);\n    } else {\n      this.router.navigate([location, this.partnerId], {\n        state: {branchId: this.branchId}\n      });\n    }\n\n  }\n\n  getCities() {\n    this.lookUpService.getLookUpsByKey(\"city\").subscribe((res: any) => {\n      this.cities = res;\n      this.cityNames = res.map((city: any) => city.displayName);\n    })\n  }\n\n  mapCityNameFromLookUps(id: number) {\n    let city = this.cities.find((city: any) => city.id == id);\n    return city ? city.displayName : undefined;\n  }\n\n  addGift() {\n    this.navigateTo(\"/branch/add-gift\")\n  }\n\n  resetSearch() {\n    let currentURL = this.router.url;\n    this.router.navigateByUrl('/', {skipLocationChange: true}).then(() => {\n        this.router.navigate([currentURL])\n      }\n    );\n    this.getBranchesData();\n  }\n\n  applySearch() {\n    this.pageDetails = {\n      pageNumber: 1,\n      pageSize: 10,\n      totalNumberOfElements: 0,\n      pagesCount: 1\n    };\n    const contactPersons = this.filterComponents?.find(component => component.title === 'CONTACT_PERSON_BRANCH')?.searchForm.get('option')?.value;\n    this.branchFilterModel = new BranchFilterModel({\n      name: this.searchForm.get('nameOrId')?.value,\n      city: this.getCityIds(this.filterComponents?.find(component => component.title === 'CITY')?.searchForm.get('option')?.value),\n      contactPerson: (contactPersons != null && contactPersons.length > 0) ? contactPersons : null\n    })\n    this.getBranchesData();\n  }\n\n  getContactPersons() {\n    this.branchService.getAllContactPersons(this.partnerId).subscribe((response: any) => {\n      this.contactPersons = response;\n    });\n  }\n\n  isApplySearchDisabled(): boolean {\n    const isFilterOptionEmpty = (title: string): boolean => {\n      const filterComponent = this.filterComponents?.find(component => component.title === title);\n      return !filterComponent || !filterComponent.searchForm.get('option')?.value || filterComponent.searchForm.get('option')?.value?.length == 0;\n    };\n    const isFormFieldEmpty = (fieldName: string): boolean => {\n      return !this.searchForm.get(fieldName)?.value || this.searchForm.get(fieldName)?.value?.length == 0;\n    };\n\n    return isFormFieldEmpty('nameOrId') && isFilterOptionEmpty('CITY') && isFilterOptionEmpty('CONTACT_PERSON_BRANCH');\n}\n\n  getCityIds(cityDisplayNames: any) {\n    if (cityDisplayNames == null || cityDisplayNames.length == 0) {\n      return null;\n    }\n    let cityIds = [];\n    for (let i = 0; i < cityDisplayNames.length; i++) {\n      let cityName = cityDisplayNames[i];\n      cityIds.push(this.cities.find((city: any) => city.displayName === cityName.trim()).id);\n    }\n    return cityIds;\n  }\n\n  permissionsExists(neededPermissions : string[]){\n    if(this.permissions == null || this.permissions == undefined)\n      return false;\n\n    return neededPermissions.some(permission =>{\n      return this.permissions?.includes(permission);\n    });\n  }\n\n  confirmDelete(event : Event){\n    event.stopPropagation();\n    const confirmationDialogData = {primaryTitle: Constants.DELETE , confirmationMessage: Constants.deleteBranchConfiratmionMessage, confirmationSubMessage: Constants.deleteBranchConfiratmionSubMessage , img: \"/../../assets/images/icn_warning message.svg\"};\n    this.confirmationDialogPopUpRef = this.genericPopupService.showPopup(ConfirmationPopupComponent,confirmationDialogData);\n    this.confirmationDialogPopUpRef.instance.emitSubmissionEvent.subscribe((event)=>{\n      if(event){\n        this.partnerService.deleteBranch(this.branchId,this.partnerId).subscribe((resp : any)=>{\n        this.genericPopupService.closePopup(this.confirmationDialogPopUpRef);\n        this.openSuccessDialog();\n        },\n        (error:any) =>{\n          this.genericPopupService.closePopup(this.confirmationDialogPopUpRef);\n            this.popUpService.showFailurePopup({\n              errorMessage: this.translateService.instant(\n                error?.error\n              ),\n            })\n        })\n      }\n      else{\n        this.genericPopupService.closePopup(this.confirmationDialogPopUpRef);\n      }\n\n    })\n  }\n\n  openSuccessDialog(){\n    const successDialogData = {successMessage: Constants.deleteBranchSuccessMsg};\n    this.successDialogPopUpRef = this.genericPopupService.showPopup(SuccessPopupComponent,successDialogData);\n    this.successDialogPopUpRef.instance.okClick.subscribe((()=>{\n      this.genericPopupService.closePopup(this.successDialogPopUpRef);\n      window.location.reload();\n    }));\n  }\n  editBranch()\n  {\n    let queryParams:any={\n      id:this.element.id\n    }\n    if(!this.partnerIdentifierService.getIdentifier()){\n      queryParams={\n        ...queryParams,\n        partnerId:this.partnerId\n      }\n    }\n    this.router.navigate([\"/branches/edit\"],{queryParams:queryParams});\n  }\n\n}\n","<mat-card>\n    <mat-card-content>\n        <app-profile-header *ngIf=\"profileInformation\" [profileInformation]=\"profileInformation\" [id]=\"partnerId\"\n            [canEditBranches]=\"canHaveBranches\"></app-profile-header>\n        <div class=\"row mt-4\">\n            <div *ngIf=\"permissions && permissionsExists(['canViewPartnerEmployees'])\" (click)=\"navigateTo('employee/partners/enrolled')\" class=\"col-3 card-cursor mt-2\">\n                <app-home-card [img]=\"'/../../assets/images/icn_employees_numbers_red_large.svg'\" [count]=\"employeesCount\"\n                    [name]=\"'EMPLOYEES'\"></app-home-card>\n            </div>\n            <div (click)=\"navigateTo('transactions')\" class=\"col-3 mt-2 card-cursor\">\n                <app-home-card [img]=\"'/../../assets/images/arrow-swap-horizontal.svg'\" [count]=\"transactionsCount\"\n                    [name]=\"'TRANSACTIONS'\"></app-home-card>\n            </div>\n            <div (click)=\"navigateTo('gifts')\" class=\"col-3 mt-2 card-cursor\">\n                <app-home-card [img]=\"'/../../assets/images/icn_gift_create.svg'\" [count]=\"giftsCount\"\n                    [name]=\"'GIFTS'\"></app-home-card>\n            </div>\n            <div (click)=\"navigateTo('linked')\" class=\"col-3 mt-2 card-cursor\">\n                <app-home-card [img]=\"'/../../assets/images/link.svg'\" [count]=\"linkedAccountsCount\"\n                    [name]=\"'LINKED_ACCOUNTS'\"></app-home-card>\n            </div>\n            <div (click)=\"navigateTo('terminals')\" class=\"col-3 mt-2 card-cursor\" *ngIf=\"canHaveBranches\">\n                <app-home-card [img]=\"'/../../assets/images/icn_terminaalss_dashboard.png'\" [count]=\"terminalsCount\"\n                    [name]=\"'TERMINALS'\"></app-home-card>\n            </div>\n        </div><br>\n        <form [formGroup]=\"searchForm\" *ngIf=\"canHaveBranches\">\n                <div class=\"row\">\n                    <div class=\"col-lg-4 col-md-4 mt-3\">\n                        <mat-card-subtitle>{{\"BRANCH_NAME_ID\" | translate}}</mat-card-subtitle>\n                    <input defaultCharacters\n                        [regex]=\"language=='en'?englishWithSpecialCharactersRegex:arabicWithSpecialCharactersRegex\"\n                        placeholder=\"{{'BRANCH_NAME_ID' | translate}}\" formControlName=\"nameOrId\">\n                    </div>\n                <div class=\"col-lg-4 col-md-4 mt-3\" id=\"city-name\">\n                    <app-search-filter *ngIf=\"cityNames!=null\" [disabled]=\"cityNames!=null && cityNames.length==0\"\n                        [title]=\"'CITY'\" [optionsList]=\"cityNames\"\n                        [regexString]=\"englishWithSpecialCharactersRegex\"></app-search-filter>\n                    </div>\n                <div class=\"col-lg-4 col-md-4 mt-3\" id=\"area\">\n                        <app-search-filter [disabled]=\"true\" [title]=\"'AREA'\"></app-search-filter>\n                    </div>\n                <div class=\"col-lg-4 col-md-4 mt-3\" id=\"contact-person\">\n                    <app-search-filter *ngIf=\"contactPersons!=null\"\n                        [disabled]=\"contactPersons!=null && contactPersons.length==0\" [title]=\"'CONTACT_PERSON_BRANCH'\"\n                        [optionsList]=\"contactPersons\"\n                        [regexString]=\"englishWithSpecialCharactersRegex\"></app-search-filter>\n                    </div>\n                    <div class=\"row mt-4 buttons-container\">\n                        <button (click)=\"resetSearch()\" class=\"reset-button\">{{\"RESET\" | translate}}</button>\n                    <button [disabled]=\"isApplySearchDisabled()\" (click)=\"applySearch()\" class=\"apply-button\">{{\"APPLY\"\n                        | translate}}</button>\n                    </div>\n                </div>\n            </form>\n        <div class=\"mt-4 mb-3\" *ngIf=\"!!pageDetails && canHaveBranches\">\n            <p *ngIf=\"dataSource.data.length>0\"> {{'SHOWING' | translate}} {{dataSource.data.length}} {{'BRANCHES' |\n                translate}} {{'FROM' |\n                    translate}} {{pageDetails.totalNumberOfElements}}\n            </p>\n            <p *ngIf=\"dataSource.data.length===0\" class=\"title-small\">\n                {{\"NO_RESULTS\" | translate}}\n            </p>\n            </div>\n        <div *ngIf=\"!canHaveBranches\">\n            <p>\n                {{\"PARTNER_CAN_NOT_HAVE_BRANCHES\" | translate}}\n            </p>\n        </div>\n        <div *ngIf=\"dataSource.data.length > 0 && canHaveBranches\" class=\"table-container\">\n            <app-generic-table [maxColumns]=\"maxColumns\" [actionButtons]=\"actionButtons\" [dataSource]=\"dataSource\"\n                (action)=\"performAction($event)\" [displayedColumns]=\"displayedColumns\">\n                <ul class=\"view-sheet-menu\">\n                    <li (click)=\"addGift()\" *ngIf=\"permissionsExists(['canCreatePartnerGifts'])\">\n                        <span>\n                            <img class=\"cell-button\" src=\"/../../assets/images/icn_add_points.svg\" /> {{\"ADD_GIFT\" |\n                            translate}}\n                        </span>\n                    </li>\n                    <li [ariaDisabled]=\"true\">\n                        <span>\n                            <img class=\"cell-button\" src=\"../../assets/images/icn_terminals.svg\" /> {{\"ADD_TERMINAL\" |\n                            translate}}\n                        </span>\n                    </li>\n                    <li (click)=\"editBranch()\">\n                        <span><img class=\"cell-button\" src=\"/../../assets/images/icn_edit_red.svg\" /> {{\"EDIT\" |\n                            translate}}</span>\n                    </li>\n                    <li (click)=\"confirmDelete($event)\">\n                        <span><img class=\"cell-button\" src=\"/../../assets/images/trash.svg\" /> {{\"DELETE\" |\n                            translate}}</span>\n                    </li>\n                </ul>\n            </app-generic-table>\n            <app-custom-paginator (emitPageNumber)=\"changePage($event)\" [pageNumber]=\"pageDetails.pageNumber\"\n                [pageCount]=\"pageDetails.pagesCount\">\n            </app-custom-paginator>\n\n        </div>\n    </mat-card-content>\n</mat-card>\n","import { Injectable, Inject } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { ApiConstants } from '../constants/api-constants';\nimport { AssignTerminalModel } from '../model/assign-terminal-model';\nimport { TerminalFilterModel } from '../model/terminal-filter-model';\nimport { PartnerInformationModel } from '../model/partner-information-model';\nimport { map } from 'rxjs/operators';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\n\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PartnerVoucherService {\n\n  constructor(private httpClient: HttpClient, @Inject('environment') private environment: any) { }\n\ncreateGift(giftDto:PartnerInformationModel){\n    let httpOptions = {\n        headers: new HttpHeaders({\n          'Content-Type': 'application/json'\n        }),responseType: 'text' as 'json'\n      }\n      return this.httpClient.post(this.environment.VOUCHER_MANAGEMENT_API_HOST + ApiConstants.CREATE_GIFT,giftDto,httpOptions )\n}\ncheckIfPartnerGroup(partnerId:string){\n    return this.httpClient.get(this.environment.PARTNER_MANAGEMENT_API_HOST+ApiConstants.PARTNER_GROUP+ \"/\" + partnerId + \"/validate\")\n    .pipe(\n      map(response => this.parseBoolean(response)))\n}\nprivate parseBoolean(value: any): boolean {\n  return value === true || value === 'true' || value === 1 || value === '1';\n}\n\nprivate profileObs$: BehaviorSubject<string> = new BehaviorSubject(\"\");\n\ngetValue(): Observable<string> {\n    return this.profileObs$.asObservable();\n}\n\nsetValue(value: string) {\n    this.profileObs$.next(value);\n}\n}","import { LookupService, RegexConstants } from 'loyalty-common';\n\nimport { Component, OnInit } from '@angular/core';\nimport {\n  AbstractControl,\n  Form,\n  FormControl,\n  FormGroup,\n  ValidationErrors,\n  Validators,\n} from '@angular/forms';\nimport { MAT_SELECT_CONFIG } from '@angular/material/select';\nimport { MatDatepickerInputEvent } from '@angular/material/datepicker';\nimport { DatePipe } from '@angular/common';\nimport { PartnerVoucherService } from '../../../shared/services/partner-voucher-service';\n\n@Component({\n  selector: 'app-coupon-form',\n  templateUrl: './coupon-form.component.html',\n  styleUrls: ['./coupon-form.component.css'],\n  providers: [\n    {\n      provide: MAT_SELECT_CONFIG,\n      useValue: { overlayPanelClass: 'mat-select-overlay' }\n    },\n    DatePipe\n  ],\n})\nexport class CouponFormComponent implements OnInit {\n\n  activationDatePresent: boolean = false;\n  expirationDatePresent: boolean = false;\n  expireDate : Date  = new Date();\n  currentDate : Date = new Date();\n  accumulationOptionValues !: any[];\n  englishSpecialCharactersRegex: RegExp = RegexConstants.ENGLISH_SPECIAL_CHARS_REGEX;\n  arabicSpecialCharactersRegex: RegExp = RegexConstants.ARABIC_SPECIAL_CHARS_REGEX;\n  floatNumbersOnly: RegExp = /^[.0-9]$/;\n  numbersOnly: RegExp = RegexConstants.INTEGER_REGEX;\n  ngOnInit(): void {\n    this.getAccumulationLookups();\n    this.currentDate.setHours(0,0,0,0)\n  }\n  constructor(private lookupsService: LookupService, private partnerVoucherService: PartnerVoucherService, private datePipe: DatePipe) {\n\n  }\n\n  couponInformation: FormGroup = new FormGroup({\n    couponEnglishName: new FormControl(\"\", [\n      Validators.required,\n      Validators.maxLength(50),\n      Validators.pattern(RegexConstants.ENGLISH_SPECIAL_CHARS_REGEX_STRING)\n    ]),\n    couponArabicName: new FormControl(\"\", [\n      Validators.required,\n      Validators.maxLength(50),\n      Validators.pattern(RegexConstants.ARABIC_SPECIAL_CHARS_REGEX_STRING)\n    ]),\n    couponDescriptionEN: new FormControl(\"\", [\n      Validators.maxLength(250),\n      Validators.pattern(RegexConstants.ENGLISH_SPECIAL_CHARS_REGEX_STRING)\n    ]),\n    couponDescriptionAR: new FormControl(\"\", [\n      Validators.maxLength(250),\n      Validators.pattern(RegexConstants.ARABIC_SPECIAL_CHARS_REGEX_STRING)\n    ]),\n    couponActivationDays: new FormControl(\"\", [\n      Validators.required,\n      this.isActivationDateInvalid,\n    ]),\n    couponExpireDays: new FormControl(\"\", [\n      Validators.required,\n    ]),\n    couponValueType: new FormControl(\"\", [\n      Validators.required\n    ]),\n    couponDiscountValue: new FormControl(\"\", [\n      Validators.required,\n      Validators.pattern(RegexConstants.DOUBLE_REGEX)\n    ]),\n    couponCurrency: new FormControl(\"EGP\", [\n      Validators.required\n    ]),\n    couponUsingType: new FormControl(\"\", [\n      Validators.required\n    ]),\n    couponAmount: new FormControl(\"\",\n      [\n        Validators.required,\n        Validators.pattern(RegexConstants.INTEGER_REGEX),\n        Validators.min(1)\n      ]),\n    accumulationName: new FormControl(\"\", Validators.required),\n    redemptionName: new FormControl(\"\", Validators.required),\n    viewableName: new FormControl(\"\", Validators.required),\n  }, { validators: this.isExpiryDateInvalid });\n\n  mapInvalidFormatError(formControlName: string, message: string) {\n    let formControlInput = this.couponInformation.get(formControlName);\n    formControlInput?.setErrors({ ...formControlInput.errors, invalidFormat: message });\n  }\n  mapInvalidPercentage(formControlName: string, message: string) {\n    let formControlInput = this.couponInformation.get(formControlName);\n    formControlInput?.setErrors({ ...formControlInput.errors, invalidPercentage: message });\n  }\n  mapInvalidValue(formControlName: string, message: string) {\n    let formControlInput = this.couponInformation.get(formControlName);\n    formControlInput?.setErrors({ ...formControlInput.errors, invalidValue: message });\n  }\n  checkCouponActivationDays(event: MatDatepickerInputEvent<Date>) {\n    if (event.value == null)\n      this.couponInformation.get('couponActivationDays')?.setValue(\"\");\n    else\n      this.couponInformation.get('couponActivationDays')?.setValue(this.datePipe.transform(event.value.valueOf(), \"yyyy-MM-dd\", \"en-GB\"));\n      const currentSelection = event.value\n      currentSelection?.setHours(0,0,0,0);\n      if(currentSelection != null ){\n        if(currentSelection >= this.expireDate && this.expirationDatePresent == true){\n          this.mapInvalidFormatError(\"couponExpireDays\", \"INVALID_EXPIRATION_CALENDAR_DATE\");\n        }\n      }\n    if (this.couponInformation.get('couponActivationDays')?.invalid) {\n      this.activationDatePresent = false;\n      this.mapInvalidFormatError(\"couponActivationDays\", \"INVALID_ACTIVATION_CALENDAR_DATE\");\n    }\n    else {\n      this.activationDatePresent = true;\n    }\n  }\n  checkCouponExpirationDays(event: MatDatepickerInputEvent<Date>) {\n    if (event.value == null)\n      this.couponInformation.get('couponExpireDays')?.setValue(\"\");\n    else\n      this.couponInformation.get('couponExpireDays')?.setValue(this.datePipe.transform(event.value.valueOf(), \"yyyy-MM-dd\", \"en-GB\"));\n      this.expireDate = event.value ?? this.expireDate;\n      this.expireDate.setHours(0,0,0,0)\n      this.expirationDatePresent = true;\n    if (this.couponInformation.get('couponExpireDays')?.invalid) {\n      this.mapInvalidFormatError(\"couponExpireDays\", \"INVALID_EXPIRATION_CALENDAR_DATE\");\n    }\n  }\n  checkCouponAmount() {\n    let couponAmount = this.couponInformation.get(\"couponAmount\");\n    if (couponAmount?.untouched) {\n      return;\n    }\n    if (couponAmount?.invalid) {\n      this.mapInvalidValue(\"couponAmount\", \"INVALID_COUPON_AMOUNT_VALUE\");\n      return;\n    }\n    let num = this.couponInformation.get('couponAmount')?.value;\n    if (num == 0) {\n      this.mapInvalidFormatError(\"couponAmount\", \"INVALID_COUPON_AMOUNT\");\n    }\n  }\n  checkCouponValue() {\n    let discountType = this.couponInformation.get(\"couponValueType\");\n    this.partnerVoucherService.setValue(discountType?.value)\n    if (this.couponInformation.get('couponDiscountValue')?.invalid && this.couponInformation.get('couponDiscountValue')?.dirty) {\n      this.mapInvalidFormatError(\"couponDiscountValue\", \"INVALID_COUPON_VALUE\");\n      return;\n    }\n    let valueType = this.couponInformation.get('couponValueType')?.value;\n    if (valueType == \"percentageDiscount\") {\n      let num = this.couponInformation.get('couponDiscountValue')?.value;\n      if (num <= 0 || num > 100  && this.couponInformation.get('couponDiscountValue')?.dirty) {\n        this.mapInvalidPercentage(\"couponDiscountValue\", \"INVALID_COUPON_PERCENTAGE\");\n      }\n    }\n  }\n\n  isActivationDateInvalid(control: AbstractControl): ValidationErrors | null {\n    const selectedDate = new Date(control.value);\n    const currentDate = new Date();\n    selectedDate.setHours(0, 0, 0, 0);\n    currentDate.setHours(0, 0, 0, 0);\n    if (selectedDate < currentDate ) {\n      return { \"isActivationDateInvalid\": true };\n    }\n    return null;\n  }\n\n  isExpiryDateInvalid(control: AbstractControl): { [key: string]: any } | null {\n    const couponActivationDate = new Date(control.get('couponActivationDays')?.value);\n    const couponExpireDate = new Date(control.get('couponExpireDays')?.value);\n    couponActivationDate.setHours(0, 0, 0, 0);\n    couponExpireDate.setHours(0, 0, 0, 0);\n    if (couponExpireDate <= couponActivationDate) {\n      control.get('couponExpireDays')?.setErrors({ 'invalidExpiryDate': true });\n      return { 'invalidExpiryDate': true };\n    }\n\n    return null;\n  }\n\n  addExpirationDate(event: Event) {\n    if (!this.activationDatePresent) {\n      event.preventDefault();\n    }\n  }\n\n  getAccumulationLookups() {\n    if (this.accumulationOptionValues == null) {\n      this.lookupsService.getLookUpsByKey(\"accumulation\").\n        subscribe((response: any) => {\n          this.accumulationOptionValues = response;\n        });\n    }\n  }\n\n  removeValueFromSelected(fieldKey: any, option: any) {\n    const selectedOptions = this.couponInformation.get(fieldKey)?.value;\n    const filteredOptions = selectedOptions.filter((selectedOption: string) => {\n      let displayName = this.accumulationOptionValues.find((element) => element.id == selectedOption).displayName;\n      if (displayName !== option)\n        return true;\n\n      return false;\n    });\n    this.couponInformation.get(fieldKey)?.setValue(filteredOptions);\n  }\n  getSelectedValues(fieldKey: any) {\n    let selectedValuesIds = this.couponInformation.get(fieldKey)?.value;\n    let selectedValuesNames: any[] = [];\n    if (selectedValuesIds != \"\") {\n      selectedValuesIds.forEach((value: any) => {\n        selectedValuesNames.push(this.accumulationOptionValues.find((element) => element.id == value).displayName);\n      })\n      return selectedValuesNames;\n    }\n    return null;\n  }\n}\n","<mat-card-subtitle> {{\"CREATE_COUPON\"|translate}}\n</mat-card-subtitle>\n<form [formGroup]=\"couponInformation\">\n    <mat-card-subtitle class=\"gray-title\">\n        {{\"COUPON_INFO\"|translate}}\n    </mat-card-subtitle>\n    <div class=\"row mt-2\">\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"ENGLISH_NAME\"|translate}}\n            </mat-card-subtitle>\n            <input maxlength=\"50\" defaultCharacters [regex]=\"englishSpecialCharactersRegex\" formControlName=\"couponEnglishName\" class=\"placeholder-padding\">\n        </div>\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"ARABIC_NAME\"|translate}}\n            </mat-card-subtitle>\n            <input maxlength=\"50\" defaultCharacters [regex]=\"arabicSpecialCharactersRegex\" formControlName=\"couponArabicName\" class=\"placeholder-padding\">\n        </div>\n    </div>\n    <div class=\"row mt-1\">\n        <div class=\"col-lg-4 col-md-6\" *ngIf='couponInformation.get(\"couponEnglishName\")?.value?.startsWith(\" \")'>\n            <span class=\"error-message\">\n                {{\"COUPON_ENGLISH_SPACE_INVALID\" | translate}}\n            </span>\n        </div>\n        <div class=\"col-lg-4 col-md-6\" *ngIf='couponInformation.get(\"couponArabicName\")?.value?.startsWith(\" \")'>\n            <span class=\"error-message\">\n                {{\"COUPON_ARABIC_SPACE_INVALID\" | translate}}\n            </span>\n        </div>\n    </div>\n    <div class=\"row mb-2\">\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"DESCRIPTION_EN\"|translate}}\n            </mat-card-subtitle>\n            <textarea maxlength=\"250\" defaultCharacters [regex]=\"englishSpecialCharactersRegex\" placeholder=\"{{'COUPON_DESCRIPTION_PLACEHOLDER' | translate}}\" formControlName=\"couponDescriptionEN\" class=\"placeholder-padding\"></textarea>\n        </div>\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"DESCRIPTION_AR\"|translate}}\n            </mat-card-subtitle>\n            <textarea maxlength=\"250\" defaultCharacters [regex]=\"arabicSpecialCharactersRegex\" placeholder=\"{{'COUPON_DESCRIPTION_PLACEHOLDER' | translate}}\" formControlName=\"couponDescriptionAR\" class=\"placeholder-padding\"></textarea>\n        </div>\n    </div>\n    <div class=\"row mt-1\">\n        <div class=\"col-lg-4 col-md-6\" *ngIf='couponInformation.get(\"couponDescriptionEN\")?.value?.startsWith(\" \")'>\n            <span class=\"error-message\">\n                {{\"COUPON_ENGLISH_DESCRIPTION_SPACE_INVALID\" | translate}}\n            </span>\n        </div>\n        <div class=\"col-lg-4 col-md-6\" *ngIf='couponInformation.get(\"couponDescriptionAR\")?.value?.startsWith(\" \")'>\n            <span class=\"error-message\">\n                {{\"COUPON_ARABIC_DESCRIPTION_SPACE_INVALID\" | translate}}\n            </span>\n        </div>\n    </div>\n    <div class=\"row mt-2\">\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"ACTIVATION_DATE\"|translate}}\n            </mat-card-subtitle>\n            <div class=\"d-flex flex-row\">\n                <input [value]=\"couponInformation.get('couponActivationDays')?.value | date:'dd/MM/yyyy'\" type=\"text\"\n                           placeholder=\"dd/mm/yyyy\"\n                           [readonly]=\"true\"\n                           />\n                    <input class=\"invisible\" style=\"width: 0px;\" formControlName=\"couponActivationDays\" [matDatepicker]=\"activationDatePicker\"\n                          (dateChange)=\"checkCouponActivationDays($event)\"\n                          />\n                    <mat-datepicker-toggle matSuffix\n                                           [for]=\"activationDatePicker\"></mat-datepicker-toggle>\n                    <mat-datepicker #activationDatePicker></mat-datepicker>\n\n            </div>\n            <div class=\"error-container\"\n                    *ngIf=\"couponInformation.get('couponActivationDays')?.hasError('invalidFormat')\">\n                    <span class=\"error-message\">\n                        {{couponInformation.get('couponActivationDays')?.getError('invalidFormat')\n                        | translate}}\n                    </span>\n                </div>\n        </div>\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"EXPIRATION_DATE\"|translate}}\n            </mat-card-subtitle>\n            <div class=\"d-flex flex-row\">\n                <input [value]=\"couponInformation.get('couponExpireDays')?.value | date:'dd/MM/yyyy'\" type=\"text\"\n                           placeholder=\"dd/mm/yyyy\"\n                           [readonly]=\"true\"\n                           />\n                    <input class=\"invisible\" style=\"width: 0px;\" formControlName=\"couponExpireDays\" [matDatepicker]=\"expirationDatePicker\"\n                          (click)=\"addExpirationDate($event)\" (dateChange)=\"checkCouponExpirationDays($event)\"\n                          />\n                    <mat-datepicker-toggle matSuffix\n                                           [for]=\"expirationDatePicker\"></mat-datepicker-toggle>\n                    <mat-datepicker #expirationDatePicker></mat-datepicker>\n\n            </div>\n            <div class=\"error-container\"\n                    *ngIf=\"couponInformation.get('couponExpireDays')?.hasError('invalidFormat')\">\n                    <span class=\"error-message\">\n                        {{couponInformation.get('couponExpireDays')?.getError('invalidFormat')\n                        | translate}}\n                    </span>\n            </div>\n        </div>\n    </div>\n    <div class=\"row mt-2\">\n        <mat-card-subtitle>{{\"VALUE_TYPE\"|translate}}\n        </mat-card-subtitle>\n        <div class=\"sub-radio-group\">\n            <div class=\"col-lg-3 col-md-4 d-flex align-items-center\">\n                <input (change)=\"checkCouponValue()\" name=\"couponValueType\" value=\"staticDiscount\" type=\"radio\" formControlName=\"couponValueType\">\n                <span>\n                    {{\"STATIC_DISCOUNT\"|translate}}\n                </span>\n            </div>\n            <div class=\"col-lg-3 col-md-4 d-flex align-items-center\">\n                <input [attr.disabled]=\"true\" (change)=\"checkCouponValue()\" name=\"couponValueType\" value=\"percentageDiscount\" type=\"radio\" formControlName=\"couponValueType\">\n                <span>\n                    {{\"PERCENTAGE_DISCOUNT\"|translate}}\n                </span>\n            </div>\n        </div>\n    </div>\n    <div class=\"row mt-2\">\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"VALUE\"|translate}}\n            </mat-card-subtitle>\n            <input defaultCharacters [regex]=\"floatNumbersOnly\" (change)=\"checkCouponValue()\" formControlName=\"couponDiscountValue\" class=\"placeholder-padding\">\n            <div class=\"error-container\"\n            *ngIf=\"couponInformation.get('couponDiscountValue')?.hasError('invalidFormat')\">\n                <span class=\"error-message\">\n                    {{couponInformation.get('couponDiscountValue')?.getError('invalidFormat')\n                    | translate}}\n                </span>\n            </div>\n            <div class=\"error-container\"\n            *ngIf=\"couponInformation.get('couponDiscountValue')?.hasError('invalidPercentage')\">\n                <span class=\"error-message\">\n                    {{couponInformation.get('couponDiscountValue')?.getError('invalidPercentage')\n                    | translate}}\n                </span>\n            </div>\n            <div class=\"error-container\"\n            *ngIf=\"couponInformation.get('couponDiscountValue')?.hasError('invalidValue')\">\n                <span class=\"error-message\">\n                    {{couponInformation.get('couponDiscountValue')?.getError('invalidValue')\n                    | translate}}\n                </span>\n            </div>\n        </div>\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"CURRENCY\"|translate}}\n            </mat-card-subtitle>\n            <input readonly [ariaDisabled]=\"true\" formControlName=\"couponCurrency\" class=\"placeholder-padding\">\n        </div>\n    </div>\n    <div class=\"row mt-2\">\n        <mat-card-subtitle>{{\"USING_TYPE\"|translate}}\n        </mat-card-subtitle>\n        <div class=\"sub-radio-group\">\n            <div class=\"col-lg-3 col-md-4 d-flex align-items-center\">\n                <input name=\"couponUsingType\" value=\"Reusable\" type=\"radio\" formControlName=\"couponUsingType\">\n                <span>\n                    {{\"REUSABLE\" | translate}}\n                </span>\n            </div>\n            <div class=\"col-lg-3 col-md-4 d-flex align-items-center\">\n                <input [attr.disabled]=\"true\" name=\"couponUsingType\" value=\"Non-Resuable\" type=\"radio\" formControlName=\"couponUsingType\">\n                <span>\n                    {{\"NON_REUSABLE\" | translate}}\n                </span>\n            </div>\n        </div>\n    </div>\n    <div class=\"row mt-2\">\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"COUPON_AMOUNT\"|translate}}\n            </mat-card-subtitle>\n            <input defaultCharacters [regex]=\"numbersOnly\" (change)=\"checkCouponAmount()\" formControlName=\"couponAmount\" class=\"placeholder-padding\">\n            <div class=\"error-container\"\n            *ngIf=\"couponInformation.get('couponAmount')?.hasError('invalidFormat')\">\n                <span class=\"error-message\">\n                    {{couponInformation.get('couponAmount')?.getError('invalidFormat')\n                    | translate}}\n                </span>\n            </div>\n            <div class=\"error-container\"\n            *ngIf=\"couponInformation.get('couponAmount')?.hasError('invalidValue')\">\n                <span class=\"error-message\">\n                    {{couponInformation.get('couponAmount')?.getError('invalidValue')\n                    | translate}}\n                </span>\n            </div>\n        </div>\n    <mat-card-subtitle class=\"gray-title small mt-4\">\n        {{\"CHANNELS_NAME\" | translate}}\n    </mat-card-subtitle>\n\n    <div class=\"col-lg-4 col-md-6\">\n        <mat-card-subtitle style=\"text-align: center\">{{\"ACCUMULATION_NAME\" | translate}}\n        </mat-card-subtitle>\n        <mat-select closeMatSelect formControlName=\"accumulationName\" placeholder=\"{{'ACCUMULATION_CHANNEL_NAME' | translate}}\"\n            multiple>\n            <mat-select-trigger>\n                <span class=\"additional-selection\">\n                    {{couponInformation.get(\"accumulationName\")?.value.length}} {{\"SELECTED\" |\n                    translate}} | <span class=\"required-title\">{{\"ACCUMULATION_NAME\" | translate}}</span>\n                </span>\n            </mat-select-trigger>\n            <mat-option class=\"custom-mat-option\" *ngFor=\"let option of accumulationOptionValues\"\n                [value]=\"option.id\">\n                {{ option?.displayName }}\n            </mat-option>\n        </mat-select>\n        <div class=\"row min-height inherit-height\">\n            <div *ngFor=\"let option of getSelectedValues('accumulationName')\"\n                class=\"col-lg-5 col-md-5 selected-option mt-2\">\n                <span class=\"text-only\">{{option}}</span>\n                <img class=\"x-icon\" (click)=\"removeValueFromSelected('accumulationName', option)\"\n                    src=\"/../../assets/images/icn_delete_selected.svg\">\n            </div>\n        </div>\n    </div>\n\n    <div class=\"col-lg-4 col-md-6\">\n        <mat-card-subtitle style=\"text-align: center\">{{\"REDEMPTION_NAME\" | translate}}\n        </mat-card-subtitle>\n        <mat-select closeMatSelect #matSelect\n        formControlName=\"redemptionName\" placeholder=\"{{'REDEMPTION_CHANNEL_NAME' | translate}}\" multiple>\n            <mat-select-trigger>\n                <span class=\"additional-selection\">\n                    {{couponInformation.get(\"redemptionName\")?.value.length}} {{\"SELECTED\" |\n                    translate}} | <span class=\"required-title\">{{\"REDEMPTION_NAME\" | translate}}</span>\n                </span>\n            </mat-select-trigger>\n            <mat-option class=\"custom-mat-option\" *ngFor=\"let option of accumulationOptionValues\"\n                [value]=\"option.id\">\n                {{ option?.displayName }}\n            </mat-option>\n        </mat-select>\n        <div class=\"row min-height inherit-height\">\n            <div *ngFor=\"let option of getSelectedValues('redemptionName')\"\n                class=\"col-lg-5 col-md-5 selected-option mt-2\">\n                <span class=\"text-only\">{{option}}</span>\n                <img class=\"x-icon\" (click)=\"removeValueFromSelected('redemptionName', option)\"\n                    src=\"/../../assets/images/icn_delete_selected.svg\">\n            </div>\n        </div>\n    </div>\n    <div class=\"col-lg-4 col-md-6\">\n        <mat-card-subtitle style=\"text-align: center\">{{\"VIEWABLE_NAME\" | translate}}\n        </mat-card-subtitle>\n        <mat-select closeMatSelect formControlName=\"viewableName\"\n            placeholder=\"{{'VIEWABLE_CHANNEL_NAME' | translate}}\" multiple>\n            <mat-select-trigger>\n                <span class=\"additional-selection\">\n                    {{couponInformation.get(\"viewableName\")?.value.length}} {{\"SELECTED\" |\n                    translate}} | <span class=\"required-title\">{{\"VIEWABLE_NAME\" | translate}}</span>\n                </span>\n            </mat-select-trigger>\n            <mat-option class=\"custom-mat-option\" *ngFor=\"let option of accumulationOptionValues\"\n                [value]=\"option.id\">\n                {{ option.displayName }}\n            </mat-option>\n        </mat-select>\n        <div class=\"row min-height inherit-height\">\n            <div *ngFor=\"let option of getSelectedValues('viewableName')\"\n                class=\"col-lg-5 col-md-5 selected-option mt-2\">\n                <span class=\"text-only\">{{option}}</span>\n                <img class=\"x-icon\" (click)=\"removeValueFromSelected('viewableName', option)\"\n                    src=\"/../../assets/images/icn_delete_selected.svg\">\n            </div>\n        </div>\n    </div><br>\n</div>\n</form>\n","import { Component, Input, SimpleChanges } from '@angular/core';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { ColumnDefinition } from 'loyalty-common';\n\n@Component({\n  selector: 'app-coupon-list',\n  templateUrl: './coupon-list.component.html',\n  styleUrls: ['./coupon-list.component.css']\n})\nexport class CouponListComponent {\n  @Input()\n  couponListData!: any[];\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\n  displayedColumns: ColumnDefinition[] = [\n    { headerLabel: 'COUPON_ID', field: 'couponID'},\n    { headerLabel: 'ENGLISH_NAME', field: 'nameEn'},\n    { headerLabel: 'TYPE', field: 'usageType'},\n    { headerLabel: 'VALUE', field: 'couponDiscountValue'},\n    { headerLabel: 'ACTIVATION_DATE', field: 'viewableActivationDate'},\n    { headerLabel: 'EXPIRATION_DATE', field: 'viewableExpirationDate'},\n    { headerLabel: 'STATUS', field: 'couponStatus'},\n\n  ];\n\n  actionButtons: string[] = ['delete','edit'];\n\n\n  ngOnInit() {\n    this.fillDataSource();\n  }\n\n  ngOnChanges(changes: SimpleChanges){\n    this.fillDataSource();\n  }\n  fillDataSource() {\n    this.dataSource.data = this.couponListData;\n  }\n}\n","<app-generic-table *ngIf=\"dataSource\"  [maxColumns]=\"10\"\n[displayedColumns]=\"displayedColumns\" [actionButtons]=\"actionButtons\" [dataSource]=\"dataSource\" class=\"mb-4\"\ntableName = \"coupon-list\">\n</app-generic-table>\n","import { Component, ViewChild } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\nimport { CouponFormComponent } from '../coupon-form/coupon-form.component';\n\n@Component({\n  selector: 'app-coupon',\n  templateUrl: './coupon.component.html',\n  styleUrls: ['./coupon.component.css']\n})\nexport class CouponComponent {\n  isCouponFormOpened: boolean = true;\n  isCouponVisible:boolean = true;\n  couponListData: any[] = [];\n  currentDate:Date = new Date();\n  startingID:number=1000000;\n  ngOnInit() {\n  }\n\n  @ViewChild(CouponFormComponent) couponFormComponent!: CouponFormComponent;\n  onCreateCoupon() {\n    let couponInformation = this.couponFormComponent.couponInformation;\n    if (this.validateCouponCreation(couponInformation)) {\n      let couponInformationMapped = {\n        couponID:this.couponListData.length+this.startingID,\n        nameEn: couponInformation.get('couponEnglishName')?.value,\n        nameAr: couponInformation.get('couponArabicName')?.value,\n        descEn: couponInformation.get('couponDescriptionEN')?.value,\n        descAr: couponInformation.get('couponDescriptionAR')?.value,\n        activationDate: this.getDate(new Date(couponInformation.get('couponActivationDays')?.value)),\n        expirationDate: this.getDate(new Date(couponInformation.get('couponExpireDays')?.value)),\n        viewableActivationDate: this.getDate(new Date(couponInformation.get('couponActivationDays')?.value)),\n        viewableExpirationDate: this.getDate(new Date(couponInformation.get('couponExpireDays')?.value)),\n        valueType:couponInformation.get('couponValueType')?.value,\n        value:couponInformation.get('couponDiscountValue')?.value,\n        couponDiscountValue: this.getValueDiscount(couponInformation.get('couponValueType')?.value),\n        currency: couponInformation.get('couponCurrency')?.value,\n        usageType: couponInformation.get('couponUsingType')?.value,\n        amount: couponInformation.get('couponAmount')?.value,\n        couponStatus:\"Active\",\n        accumulationChannels:couponInformation.get(\"accumulationName\")?.value,\n        redemptionChannels:couponInformation.get(\"redemptionName\")?.value,\n        viewableChannels:couponInformation.get(\"viewableName\")?.value,\n      };\n      couponInformationMapped.couponStatus=this.getActive(new Date(couponInformationMapped.activationDate),new Date(couponInformationMapped.expirationDate));\n      this.couponListData = [...this.couponListData, couponInformationMapped];\n      this.isCouponFormOpened = false;\n      this.couponFormComponent.couponInformation.reset();\n      return true;\n    }\n    return false;\n  }\n  getValueDiscount(valueType:string)\n  {\n    let val=this.couponFormComponent?.couponInformation?.get(\"couponDiscountValue\")?.value\n    let currency=this.couponFormComponent?.couponInformation?.get(\"couponCurrency\")?.value\n    if(valueType==\"percentageDiscount\")\n    {\n      val+=\"%\";\n    }\n    else\n    {\n      val+=\" \";\n      val+=currency;\n    }\n    return val;\n  }\n  validateCouponCreation(couponInformation:FormGroup) {\n    if(couponInformation.get('couponType')?.invalid)\n    {\n      return false;\n    }\n    if(couponInformation.get('couponEnglishName')?.invalid)\n    {\n      return false;\n    }\n    if(couponInformation.get('couponArabicName')?.invalid)\n    {\n      return false;\n    }\n    if(couponInformation.get('couponDescriptionEN')?.invalid)\n    {\n      return false;\n    }\n    if(couponInformation.get('couponDescriptionAR')?.invalid)\n    {\n      return false;\n    }\n    if(couponInformation.get('couponActivationDays')?.invalid)\n    {\n      return false;\n    }\n    if(couponInformation.get('couponExpireDays')?.invalid)\n    {\n      return false;\n    }\n    if(couponInformation.get('couponValueType')?.invalid)\n    {\n      return false;\n    }\n    if(couponInformation.get('couponDiscountValue')?.invalid)\n    {\n      return false;\n    }\n    if(couponInformation.get('couponCurrency')?.invalid)\n    {\n      return false;\n    }\n    if(couponInformation.get('couponUsingType')?.invalid)\n    {\n      return false;\n    }\n    if(couponInformation.get('couponRedemptionLimitation')?.invalid)\n    {\n      return false;\n    }\n    if(couponInformation.get('couponAmount')?.invalid)\n    {\n      return false;\n    }\n    return true;\n  }\n\n\n  openNewCouponForm()\n  {\n    this.isCouponFormOpened = true;\n    this.isCouponVisible = true;\n  }\n  getDate(date : Date)\n  {\n    return date.toLocaleDateString('en-GB');\n  }\n  getActive(activationDate : Date,expirationDate:Date)\n  {\n    let currentDate=new Date();\n    if(currentDate>=activationDate && currentDate<expirationDate )\n    {\n      return \"Active\";\n    }\n    else\n    {\n      return \"Inactive\";\n    }\n  }\n}\n","<app-coupon-list *ngIf=\"couponListData.length>0\" [couponListData]=\"couponListData\">\n</app-coupon-list>\n<br *ngIf=\"couponListData.length>0\" class=\"break\"/>\n<div (click)=\"openNewCouponForm()\" class=\"add-new mt-3 mb-3\" *ngIf=\"couponListData.length > 0 && !isCouponFormOpened\">\n    <img src=\"../../assets/images/icn_create_add.svg\" alt=\"\"><span class=\"add-new-text\">{{'ADD_ANOTHER_COUPON' |\n        translate}}</span>\n</div>\n<app-coupon-form *ngIf=\"isCouponFormOpened\">\n</app-coupon-form>\n","import { Component, Inject} from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\n\n@Component({\n  selector: 'app-confirm-dialog',\n  templateUrl: './confirm-dialog.component.html',\n  styleUrls: ['./confirm-dialog.component.css']\n})\nexport class ConfirmDialogComponent {\n  confirmed:boolean=true;\n  constructor(\n    public dialogRef:MatDialogRef<ConfirmDialogComponent>,\n    @Inject(MAT_DIALOG_DATA) public data:any\n  ){}\n  \n}\n","<h1 mat-dialog-title>\n  Promocode Duplicates Confirmation\n</h1>\n<p class=\"p-3\"> \n   {{\"DUPLICATE_PROMOCODE_VALUES\"|translate}}\n</p>\n<div mat-dialog-actions>\n<button mat-button [mat-dialog-close]=\"data.unconfirmed\">Cancel</button> \n  <button mat-button [mat-dialog-close]=\"data.confirmed\"  \n             cdkFocusInitial>Ok</button> \n</div>","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { ApiConstants } from '../constants/api-constants';\nimport { Constants } from '../constants/constants';\nimport { SyncBasicBulkSheetModel } from '../model/SyncBranchesBulkModel';\n@Injectable({\n  providedIn: 'root'\n})\nexport class BulkManagementService {\n\n  constructor(private httpClient: HttpClient, @Inject('environment') private environment: any) { }\n\n  syncBulkSheetEntriesAddTerminals(syncBranchesBulkSheetModel: SyncBasicBulkSheetModel, id: number) {\n    let queryParams = new HttpParams();\n    queryParams = queryParams.append('partner-id', id);\n\n    let httpOptions: Object = {\n      params: queryParams,\n    };\n    return this.httpClient.post(\n      this.environment.ETISALAT_BULK_MANAGEMENT_API_HOST + Constants.SYNC_TERMINALS,\n      syncBranchesBulkSheetModel,\n      httpOptions\n    );\n  }\n  syncBranchesBulkSheetEntries(syncBranchesBulkSheetModel: SyncBasicBulkSheetModel) {\n    return this.httpClient.post(this.environment.ETISALAT_BULK_MANAGEMENT_API_HOST + \"/sheets/sync/branches\", syncBranchesBulkSheetModel);\n  }\n}\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { ApiConstants } from '../constants/api-constants';\nimport { Constants } from '../constants/constants';\n@Injectable({\n  providedIn: 'root'\n})\nexport class ContentManagementService {\n\n  constructor(private httpClient: HttpClient, @Inject('environment') private environment: any) { }\n  downloadTemplateCSV(url: string , type : string) {\n    let queryParams = new HttpParams();\n    queryParams = queryParams.append(\"resource-url\", url);\n\n    let httpOptions: Object = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json',\n      }),\n      responseType: 'blob',\n      params: queryParams\n    }\n\n    this.httpClient.get(this.environment.CONTENT_MANAGEMENT_API_HOST + ApiConstants.DOWNLOAD_TEMPLATES_API, httpOptions)\n      .subscribe((response: any) => {\n        const url = window.URL.createObjectURL(response);\n        const link = document.createElement('a');\n        link.href = url;\n        //todo change to a const w and account name should be dynamic\n        link.download = type + '_' + Constants.OWNER_NAME + '_' + 'V1.0.csv';\n        link.click();\n      });\n  }\n\n  uploadPromoIdBulkSheet(formData : FormData)\n  {\n    return this.httpClient.post(this.environment.CONTENT_MANAGEMENT_API_HOST + ApiConstants.uploadPromoIdsBulkSheet , formData);\n  }\n\n  getTemplates(type : string) {\n    let queryParams = new HttpParams();\n    queryParams = queryParams.append(\"type\",type);\n\n    let httpOptions = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json'\n      }),\n      params: queryParams\n    }\n    return this.httpClient.get(this.environment.CONTENT_MANAGEMENT_API_HOST + ApiConstants.GET_TEMPLATES_API , httpOptions);\n  }\n}\n","import { ContentManagementService as ContentManagementCommon, FileUploadComponent } from 'loyalty-common';\nimport { Observable, retry, Subscription } from 'rxjs';\n\nimport { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\n\nimport { ConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { Constants } from '../constants/constants';\nimport { BulkManagementService } from '../services/bulk-management.service';\nimport { ContentManagementService } from '../services/content-management.service';\nimport { PartnerIdentifierService } from '../services/partner-identifier.service';\nimport { Papa, PapaParseParser } from 'ngx-papaparse';\n\n@Component({\n  selector: 'app-add-promocodes',\n  templateUrl: './add-promocodes.component.html',\n  styleUrls: ['./add-promocodes.component.css']\n})\nexport class AddPromocodesComponent implements OnInit {\n  @ViewChild(FileUploadComponent) fileUploadComponent!: FileUploadComponent;\n  uploadProgress: number = 0;\n  uploadErrorMessage = \"\";\n  isSyncing: boolean = false;\n  duplicateAnswered: boolean = true;\n  fileHasErrors: boolean = false;\n  fileContainsDuplicates: boolean = false;\n  memberSyncRequest = {\n    \"id\": null,\n    \"fileUrl\": null,\n    \"ownerName\": Constants.OWNER_NAME,\n    \"ownerId\": null\n  }\n  ownerId!: string;\n  promocodeBulkData!: FormData;\n  @Input() uploadFinalizeEvent!: Observable<void>;\n  @Output() activateNext: EventEmitter<any> = new EventEmitter();\n  @Input() id !: number;\n  maxFileSize: number = Constants.MAX_FILE_SIZE;\n\n  stepOne: boolean = false;\n  stepTwo: boolean = false;\n  stepThree: boolean = false;\n  constructor(private bulkManagementService: BulkManagementService, private router: Router,\n    private _snackBar: MatSnackBar, private translate: TranslateService,\n    private contentMgmtSvc: ContentManagementService, private contentManagementCommon: ContentManagementCommon,\n    public dialog: MatDialog,\n    public partnerIdentifierService: PartnerIdentifierService, private activatedRoute: ActivatedRoute,\n    private papa: Papa\n  ) { }\n  ngOnInit() {\n    this.ownerId = this.activatedRoute.snapshot.params['id'];\n    if (!!!this.ownerId)\n      this.ownerId = this.partnerIdentifierService.getIdentifier();\n    this.initVariables();\n  }\n\n  openSnackBar(message: string, action: string) {\n    this._snackBar.open(message, action);\n  }\n\n\n  initVariables() {\n    this.uploadProgress = 0;\n    this.uploadErrorMessage = \"\";\n    this.isSyncing = false;\n    this.duplicateAnswered = true;\n    this.fileHasErrors = true;\n    this.promocodeBulkData = new FormData();\n    this.fileContainsDuplicates = false;\n  }\n\n  downloadFileRedirect() {\n    this.contentMgmtSvc.getTemplates(Constants.PROMOCODE_TEMPLATE)\n      .subscribe((data: any) => {\n        this.contentManagementCommon.downloadTemplateCSVByRedirect(\n          data[0].template.url,\n          Constants.PROMOCODE_TEMPLATE,\n          Constants.PROMOCODE_TEMPLATE_FILE_NAME.replace('%s%', Constants.OWNER_NAME)\n        );\n        this.stepOne = true;\n        this.stepTwo = true;\n      });\n  }\n\n  validateData($event: any) {\n    let file: File = $event.get(\"fileData\");\n    this.uploadProgress = 25;\n    this.validateCsvFile(file);\n  }\n\n\n  validateCsvFile(file: File) {\n    this.papa.parse(file, {\n      header: true,\n      complete: (result: any) => {\n        console.log(\"File \", result);\n        const headers = result.meta.fields;\n        if (!this.isHeadersValid(headers)) {\n          this.uploadErrorMessage = Constants.INVALID_ROWS;\n          this.uploadProgress = 0;\n          return;\n        }\n        if (!(result.data && result.data.length > 1 && result.data.length < 1000000)) {\n          this.uploadErrorMessage = Constants.INVALID_NUMBER_OF_ROWS;\n          this.uploadProgress = 0;\n          return;\n        }\n        let promoCodeStrings = result.data.map((item: any) => item.Promocode);\n        if (new Set(promoCodeStrings).size !== promoCodeStrings.length) {\n          this.duplicateAnswered = false;\n          this.openDialog();\n          this.fileContainsDuplicates = true;\n        }\n        else\n          this.fileContainsDuplicates = false;\n        this.uploadErrorMessage = \"\";\n        const formData = new FormData();\n        formData.append(\"file\", file);\n        this.promocodeBulkData = formData;\n        this.fileHasErrors = false;\n        setTimeout(() => {\n          this.uploadProgress = 100;\n          this.activateNext.emit(true);\n        },\n          1000);\n      },\n      error: (error: any) => {\n        this.uploadErrorMessage = Constants.ERROR_READING_FILE;\n        this.uploadProgress = 0;\n      }\n    });\n  }\n\n  isHeadersValid(headers: string[]) {\n    if (Constants.ADD_PROMOCODES_SHEET_FIELDS.every(header => headers.includes(header))) {\n      return true;\n    }\n    return false;\n  }\n\n  // validateCsvFile(file: File) {\n  //   const formData = new FormData();\n  //   formData.append(\"file\", file);\n  //   formData.append(\"ownerId\", this.ownerId);\n  //   this.promocodeBulkData = formData;\n  //   this.syncPromocodeSheet();\n  // }\n\n  onDeleteFile() {\n    this.uploadErrorMessage = '';\n    this.activateNext.emit(false);\n    this.initVariables();\n  }\n\n  isFileValid() {\n    if (this.fileHasErrors) return false;\n    if (!this.promocodeBulkData.has(\"file\")) return false;\n    if (this.fileContainsDuplicates) {\n      return this.duplicateAnswered;\n    }\n    return true;\n  }\n\n  openDialog(): void {\n    let dialogRef = this.dialog.open(ConfirmDialogComponent, {\n      width: '400px',\n      data: { confirmed: true, unconfirmed: false },\n      panelClass: 'custom-modalbox'\n    });\n\n    dialogRef.afterClosed().subscribe(result => {\n      if (result !== true) {\n        this.fileUploadComponent.deleteFile();\n      }\n      this.duplicateAnswered = true;\n      this.fileHasErrors = false;\n      this.uploadErrorMessage = \"\";\n    });\n  }\n}\n","<mat-card class=\"big-card\">\n    <mat-card-content class=\"process-container\">\n        <div class=\"row cards-container\">\n            <mat-card class=\"mt-3 small-card col-lg-4 col-md-4\">\n                <mat-card-content class=\"card-container\">\n                    <img *ngIf=\"stepOne\" class=\"right-icon\" src=\"/../../assets/images/right-icon.svg\">\n                    <div class=\"download-file-container\">\n                        <div class=\"download-file mt-3\">\n                            <img class=\"mt-2\" src=\"/../../assets/images/vuesax-bold-document-download.svg\">\n                        </div>\n                        <mat-card-subtitle class=\"mt-2\">{{\"DOWNLOAD_SAMPLE_FILE\"|translate}}</mat-card-subtitle>\n                        <button (click)=\"downloadFileRedirect()\" class=\"primary-button header-buttons mt-2\">{{\"DOWNLOAD\" |\n                            translate}}</button>\n\n                    </div>\n                </mat-card-content>\n            </mat-card>\n            <mat-card class=\"mt-3 small-card col-lg-4 col-md-4\">\n                <mat-card-content class=\"card-container\">\n                    <img *ngIf=\"stepTwo\" class=\"right-icon\" src=\"/../../assets/images/right-icon.svg\">\n                    <div class=\"download-file-container\">\n                        <div class=\"download-file mt-3\">\n                            <img class=\"mt-2\" src=\"/../../assets/images/vuesax-bold-document-text.svg\">\n                        </div>\n                        <mat-card-subtitle class=\"mt-2\">{{\"FILL_TEMPLATE\"|translate}}</mat-card-subtitle>\n                        <div class=\"sub-title-container\">\n                            <span class=\"mt-2 sub-title\">{{\"PLEASE_FILL\"|translate}}</span>\n                        </div>\n                    </div>\n\n                </mat-card-content>\n            </mat-card>\n            <mat-card class=\"mt-3  small-card col-lg-4 col-md-4\">\n                <mat-card-content class=\"card-container\">\n                    <img *ngIf=\"uploadProgress >= 100\" class=\"right-icon\" src=\"/../../assets/images/right-icon.svg\">\n                    <div class=\"download-file-container\">\n                        <div class=\"download-file mt-3\">\n                            <img class=\"mt-2\" src=\"/../../assets/images/vuesax-bold-document-upload.svg\">\n                        </div>\n                        <mat-card-subtitle class=\"mt-2\">{{\"UPLOAD_SAMPLE_FILE\"|translate}}</mat-card-subtitle>\n                        <app-file-upload class=\"small-font\" [uploadProgress]=\"uploadProgress\" (emitFileData)=\"validateData($event)\"\n                            (onDeleteFile)=\"onDeleteFile()\" [maxFileSize]=\"maxFileSize\">\n                            <app-error-message *ngIf=\"!!uploadErrorMessage\">{{uploadErrorMessage |\n                                translate}}\n                            </app-error-message>\n                        </app-file-upload>\n                    </div>\n                </mat-card-content>\n            </mat-card>\n        </div>\n    </mat-card-content>\n</mat-card>","import { LookupService, RegexConstants } from 'loyalty-common';\n\nimport { Component, OnInit, ViewChild } from '@angular/core';\nimport {\n  AbstractControl,\n  FormControl,\n  FormGroup,\n  ValidationErrors,\n  Validators,\n} from '@angular/forms';\n\nimport { AddPromocodesComponent } from '../../../shared/add-promocodes/add-promocodes.component';\nimport { MAT_SELECT_CONFIG } from '@angular/material/select';\nimport { DatePipe } from '@angular/common';\nimport { MatDatepickerInputEvent } from '@angular/material/datepicker';\nimport { PartnerVoucherService } from '../../../shared/services/partner-voucher-service';\n\n@Component({\n  selector: 'app-promocode-form',\n  templateUrl: './promocode-form.component.html',\n  styleUrls: ['./promocode-form.component.css'],\n  providers: [\n    {\n      provide: MAT_SELECT_CONFIG,\n      useValue: { overlayPanelClass: 'mat-select-overlay' }\n    },\n    DatePipe,\n  ],\n})\nexport class PromocodeFormComponent implements OnInit {\n  ngOnInit(): void {\n    this.getAccumulationLookups();\n  }\n  constructor(private lookupsService: LookupService, private partnerVoucherService: PartnerVoucherService, private datePipe: DatePipe) {\n  }\n  englishSpecialCharactersRegex: RegExp = RegexConstants.ENGLISH_SPECIAL_CHARS_REGEX;\n  arabicSpecialCharactersRegex: RegExp = RegexConstants.ARABIC_SPECIAL_CHARS_REGEX;\n  floatNumbersOnly: RegExp = /^[.0-9]$/;\n  numbersOnly: RegExp = RegexConstants.INTEGER_REGEX;\n  accumulationOptionValues !: any[];\n  @ViewChild(AddPromocodesComponent) addPromocodesComponent!: AddPromocodesComponent;\n  promocodeInformation: FormGroup = new FormGroup({\n    promocodeType: new FormControl(\"\", [\n      Validators.required,\n    ]),\n    promocodeEnglishName: new FormControl(\"\", [\n      Validators.required,\n      Validators.maxLength(50),\n      Validators.pattern(RegexConstants.ENGLISH_SPECIAL_CHARS_REGEX_STRING)\n    ]),\n    promocodeArabicName: new FormControl(\"\", [\n      Validators.required,\n      Validators.maxLength(50),\n      Validators.pattern(RegexConstants.ARABIC_SPECIAL_CHARS_REGEX_STRING)\n    ]),\n    promocodeDescriptionEN: new FormControl(\"\", [\n      Validators.maxLength(250),\n      Validators.pattern(RegexConstants.ENGLISH_SPECIAL_CHARS_REGEX_STRING)\n    ]),\n    promocodeDescriptionAR: new FormControl(\"\", [\n      Validators.maxLength(250),\n      Validators.pattern(RegexConstants.ARABIC_SPECIAL_CHARS_REGEX_STRING)\n    ]),\n    promocodeActivationDays: new FormControl(\"\", [\n      Validators.required,\n      this.isActivationDateInvalid\n    ]),\n    promocodeExpireDays: new FormControl(\"\", [\n      Validators.required\n    ]),\n    promocodeValueType: new FormControl(\"\", [\n      Validators.required\n    ]),\n    promocodeDiscountValue: new FormControl(\"\", [\n      Validators.required,\n      Validators.pattern(RegexConstants.DOUBLE_REGEX),\n      Validators.min(0)\n    ]),\n    promocodeCurrency: new FormControl(\"EGP\", [\n      Validators.required\n    ]),\n    promocodeUsingType: new FormControl(\"\", [\n      Validators.required\n    ]),\n    promocodeRedemptionLimitation: new FormControl(\"1\",\n      [\n        Validators.required,\n        Validators.pattern(RegexConstants.INTEGER_REGEX),\n        Validators.min(1)\n      ]),\n    promocodeSource: new FormControl(\"\", [\n      Validators.required\n    ]),\n    accumulationName: new FormControl(\"\", Validators.required),\n    redemptionName: new FormControl(\"\", Validators.required),\n    viewableName: new FormControl(\"\", Validators.required),\n  }, { validators: this.isExpiryDateInvalid });\n\n  mapInvalidFormatError(formControlName: string, message: string) {\n    let formControlInput = this.promocodeInformation.get(formControlName);\n    formControlInput?.setErrors({ ...formControlInput.errors, invalidFormat: message });\n  }\n\n  checkPromocodeActivationDays(event: MatDatepickerInputEvent<Date>) {\n    if (event.value == null)\n      this.promocodeInformation.get('promocodeActivationDays')?.setValue(\"\");\n    else\n      this.promocodeInformation.get('promocodeActivationDays')?.setValue(this.datePipe.transform(event.value.valueOf(), \"yyyy-MM-dd\", \"en-GB\"));\n\n\n    if (this.promocodeInformation.get('promocodeActivationDays')?.invalid) {\n      this.mapInvalidFormatError(\"promocodeActivationDays\", \"INVALID_ACTIVATION_CALENDAR_DATE\");\n    }\n  }\n  checkDiscountValue(){\n    let discountType = this.promocodeInformation.get(\"promocodeValueType\");\n    this.partnerVoucherService.setValue(discountType?.value)\n    if (this.promocodeInformation.get('promocodeDiscountValue')?.invalid) {\n      this.mapInvalidFormatError(\"promocodeDiscountValue\", \"INVALID_PROMOCODE_VALUE\");\n      return;\n    }\n    let valueType = this.promocodeInformation.get('promocodeDiscountValue')?.value;\n    if (valueType == \"percentageDiscount\") {\n      let num = this.promocodeInformation.get('promocodeDiscountValue')?.value;\n      if (num <= 0 || num > 100) {\n        this.mapInvalidPercentage(\"promocodeDiscountValue\", \"INVALID_PROMOCODE_PERCENTAGE\");\n      }\n    }\n  }\n\n  mapInvalidPercentage(formControlName: string, message: string) {\n    let formControlInput = this.promocodeInformation.get(formControlName);\n    formControlInput?.setErrors({ ...formControlInput.errors, invalidPercentage: message });\n  }\n  mapInvalidValue(formControlName: string, message: string) {\n    let formControlInput = this.promocodeInformation.get(formControlName);\n    formControlInput?.setErrors({ ...formControlInput.errors, invalidValue: message });\n  }\n\n  checkPromocodeExpirationDays(event: MatDatepickerInputEvent<Date>) {\n    if (event.value == null)\n      this.promocodeInformation.get('promocodeExpireDays')?.setValue(\"\");\n    else\n      this.promocodeInformation.get('promocodeExpireDays')?.setValue(this.datePipe.transform(event.value.valueOf(), \"yyyy-MM-dd\", \"en-GB\"));\n    if (this.promocodeInformation.get('promocodeExpireDays')?.invalid) {\n      this.mapInvalidFormatError(\"promocodeExpireDays\", \"INVALID_EXPIRATION_CALENDAR_DATE\");\n    }\n  }\n\n  checkPromocodeRedemptionLimitation() {\n    if (this.promocodeInformation.get('promocodeRedemptionLimitation')?.invalid) {\n      this.mapInvalidFormatError(\"promocodeRedemptionLimitation\", \"INVALID_REDEMPTION_LIMIT\");\n    }\n  }\n\n  onChooseDiscountType() {\n    let discountType = this.promocodeInformation.get('promocodeValueType');\n    let discountValue = this.promocodeInformation.get('promocodeDiscountValue');\n    if (discountType?.value == \"percentageDiscount\") {\n      discountValue?.addValidators(Validators.max(100));\n      discountValue?.updateValueAndValidity();\n    }\n    if (discountType?.value == \"staticDiscount\") {\n      discountValue?.setValidators(null);\n      discountValue?.addValidators(Validators.required)\n      discountValue?.updateValueAndValidity();\n    }\n    this.partnerVoucherService.setValue(discountType?.value);\n  }\n\n\n  getDiscountValueError() {\n\n    let discountValueFormInput =\n      this.promocodeInformation.get('promocodeDiscountValue');\n    if (!discountValueFormInput?.pristine) {\n      if (discountValueFormInput?.getError('required') || discountValueFormInput?.getError('pattern'))\n        return \"INVALID_PROMOCODE_VALUE\";\n\n      let discountType = this.promocodeInformation.get('promocodeValueType');\n\n      if (discountType?.value === \"percentageDiscount\") {\n        if (discountValueFormInput?.getError('min') || discountValueFormInput?.getError('max'))\n          return \"INVALID_PROMOCODE_PERCENTAGE\";\n      }\n\n      if (discountType?.value === \"staticDiscount\") {\n        if (discountValueFormInput?.getError('min'))\n          return \"INVALID_PROMOCODE_NUMBER\";\n      }\n    }\n    return \"\";\n  }\n\n  isActivationDateInvalid(control: FormControl): ValidationErrors | null {\n    const selectedDate = new Date(control.value);\n    const currentDate = new Date();\n    selectedDate.setHours(0, 0, 0, 0);\n    currentDate.setHours(0, 0, 0, 0);\n    if (selectedDate < currentDate) {\n      return { \"isActivationDateInvalid\": true };\n    }\n    return null;\n  }\n\n  isExpiryDateInvalid(control: AbstractControl): { [key: string]: any } | null {\n    const couponActivationDate = new Date(control.get('promocodeActivationDays')?.value);\n    const couponExpireDate = new Date(control.get('promocodeExpireDays')?.value);\n    couponActivationDate.setHours(0, 0, 0, 0);\n    couponExpireDate.setHours(0, 0, 0, 0);\n    if (couponExpireDate <= couponActivationDate) {\n      control.get('promocodeExpireDays')?.setErrors({ 'invalidExpiryDate': true });\n      return { 'invalidExpiryDate': true };\n    }\n\n    return null;\n  }\n\n  getAccumulationLookups() {\n    if (this.accumulationOptionValues == null) {\n      this.lookupsService.getLookUpsByKey(\"accumulation\").\n        subscribe((response: any) => {\n          this.accumulationOptionValues = response;\n        });\n    }\n  }\n\n  removeValueFromSelected(fieldKey: any, option: any) {\n    const selectedOptions = this.promocodeInformation.get(fieldKey)?.value;\n    const filteredOptions = selectedOptions.filter((selectedOption: string) => {\n      let displayName = this.accumulationOptionValues.find((element) => element.id == selectedOption).displayName;\n      if (displayName !== option)\n        return true;\n\n      return false;\n    });\n    this.promocodeInformation.get(fieldKey)?.setValue(filteredOptions);\n  }\n  getSelectedValues(fieldKey: any) {\n    let selectedValuesIds = this.promocodeInformation.get(fieldKey)?.value;\n    let selectedValuesNames: any[] = [];\n    if (selectedValuesIds != \"\") {\n      selectedValuesIds.forEach((value: any) => {\n        selectedValuesNames.push(this.accumulationOptionValues.find((element) => element.id == value).displayName);\n      })\n      return selectedValuesNames;\n    }\n    return null;\n  }\n}\n","<mat-card-subtitle> {{\"CREATE_PROMOCODE\"|translate}}\n</mat-card-subtitle>\n<form [formGroup]=\"promocodeInformation\">\n    <mat-card-subtitle class=\"gray-title\">\n        {{\"PROMOCODE_INFO\"|translate}}\n    </mat-card-subtitle>\n    <div class=\"row mt-2\">\n        <mat-card-subtitle>{{\"PROMOCODE_TYPE\"|translate}}\n        </mat-card-subtitle>\n        <div class=\"sub-radio-group\">\n            <div class=\"col-lg-3 col-md-4 d-flex align-items-center\">\n                <input  name=\"promocodeType\" value=\"Online\" type=\"radio\" formControlName=\"promocodeType\">\n                <span>\n                    Online\n                </span>\n            </div>\n            <div class=\"col-lg-3 col-md-4 d-flex align-items-center\">\n                <input [attr.disabled]=\"true\" name=\"promocodeType\" value=\"Physical\" type=\"radio\" formControlName=\"promocodeType\">\n                <span>\n                    Physical\n                </span>\n            </div>\n        </div>\n    </div>\n    <div class=\"row mt-2\">\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"ENGLISH_NAME\"|translate}}\n            </mat-card-subtitle>\n            <input maxlength=\"50\" defaultCharacters [regex]=\"englishSpecialCharactersRegex\" formControlName=\"promocodeEnglishName\" class=\"placeholder-padding\">\n        </div>\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"ARABIC_NAME\"|translate}}\n            </mat-card-subtitle>\n            <input maxlength=\"50\" defaultCharacters [regex]=\"arabicSpecialCharactersRegex\" formControlName=\"promocodeArabicName\" class=\"placeholder-padding\">\n        </div>\n    </div>\n    <div class=\"row mt-1\">\n        <div class=\"col-lg-4 col-md-6\" *ngIf='promocodeInformation.get(\"promocodeEnglishName\")?.value?.startsWith(\" \")'>\n            <span class=\"error-message\">\n                {{\"PROMOCODE_ENGLISH_SPACE_INVALID\" | translate}}\n            </span>\n        </div>\n        <div class=\"col-lg-4 col-md-6\" *ngIf='promocodeInformation.get(\"promocodeArabicName\")?.value?.startsWith(\" \")'>\n            <span class=\"error-message\">\n                {{\"PROMOCODE_ARABIC_SPACE_INVALID\" | translate}}\n            </span>\n        </div>\n    </div>\n    <div class=\"row mt-2 mb-2\">\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"DESCRIPTION_EN\"|translate}}\n            </mat-card-subtitle>\n            <textarea maxlength=\"250\" defaultCharacters [regex]=\"englishSpecialCharactersRegex\" placeholder=\"{{'PROMOCODE_DESCRIPTION_PLACEHOLDER' | translate}}\" formControlName=\"promocodeDescriptionEN\" class=\"placeholder-padding\"></textarea>\n        </div>\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"DESCRIPTION_AR\"|translate}}\n            </mat-card-subtitle>\n            <textarea  maxlength=\"250\" defaultCharacters [regex]=\"arabicSpecialCharactersRegex\" placeholder=\"{{'PROMOCODE_DESCRIPTION_PLACEHOLDER' | translate}}\" formControlName=\"promocodeDescriptionAR\" class=\"placeholder-padding\"></textarea>\n        </div>\n    </div>\n    <div class=\"row mt-1\">\n        <div class=\"col-lg-4 col-md-6\" *ngIf='promocodeInformation.get(\"promocodeDescriptionEN\")?.value?.startsWith(\" \")'>\n            <span class=\"error-message\">\n                {{\"PROMOCODE_ENGLISH_DESCRIPTION_SPACE_INVALID\" | translate}}\n            </span>\n        </div>\n        <div class=\"col-lg-4 col-md-6\" *ngIf='promocodeInformation.get(\"promocodeDescriptionAR\")?.value?.startsWith(\" \")'>\n            <span class=\"error-message\">\n                {{\"PROMOCODE_ARABIC_DESCRIPTION_SPACE_INVALID\" | translate}}\n            </span>\n        </div>\n    </div>\n    <div class=\"row mt-2\">\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"ACTIVATION_DATE\"|translate}}\n            </mat-card-subtitle>\n            <div class=\"d-flex flex-row\">\n                <input [value]=\"promocodeInformation.get('promocodeActivationDays')?.value | date:'dd/MM/yyyy'\" type=\"text\"\n                           placeholder=\"dd/mm/yyyy\"\n                           [readonly]=\"true\"\n                           />\n                    <input class=\"invisible\" style=\"width: 0px;\" formControlName=\"promocodeActivationDays\" [matDatepicker]=\"activationDatePicker\"\n                          (dateChange)=\"checkPromocodeActivationDays($event)\"\n                          />\n                    <mat-datepicker-toggle matSuffix\n                                           [for]=\"activationDatePicker\"></mat-datepicker-toggle>\n                    <mat-datepicker #activationDatePicker></mat-datepicker>\n\n            </div>\n            <div class=\"error-container\"\n                    *ngIf=\"promocodeInformation.get('promocodeActivationDays')?.hasError('invalidFormat')\">\n                    <span class=\"error-message\">\n                        {{promocodeInformation.get('promocodeActivationDays')?.getError('invalidFormat')\n                        | translate}}\n                    </span>\n            </div>\n        </div>\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"EXPIRATION_DATE\"|translate}}\n            </mat-card-subtitle>\n            <div class=\"d-flex flex-row\">\n                <input [value]=\"promocodeInformation.get('promocodeExpireDays')?.value | date:'dd/MM/yyyy'\" type=\"text\"\n                           placeholder=\"dd/mm/yyyy\"\n                           [readonly]=\"true\"\n                           />\n                    <input class=\"invisible\" style=\"width: 0px;\" formControlName=\"promocodeExpireDays\" [matDatepicker]=\"expirationDatePicker\"\n                          (dateChange)=\"checkPromocodeExpirationDays($event)\"\n                          />\n                    <mat-datepicker-toggle matSuffix\n                                           [for]=\"expirationDatePicker\"></mat-datepicker-toggle>\n                    <mat-datepicker #expirationDatePicker></mat-datepicker>\n\n            </div>\n            <div class=\"error-container\"\n                    *ngIf=\"promocodeInformation.get('promocodeExpireDays')?.hasError('invalidFormat')\">\n                    <span class=\"error-message\">\n                        {{promocodeInformation.get('promocodeExpireDays')?.getError('invalidFormat')\n                        | translate}}\n                    </span>\n            </div>\n        </div>\n    </div>\n    <div class=\"row mt-2\">\n        <mat-card-subtitle>{{\"VALUE_TYPE\"|translate}}\n        </mat-card-subtitle>\n        <div class=\"sub-radio-group\">\n            <div class=\"col-lg-3 col-md-4 d-flex align-items-center\">\n                <input (change)=\"onChooseDiscountType()\" name=\"promocodeValueType\" value=\"staticDiscount\" type=\"radio\" formControlName=\"promocodeValueType\">\n                <span>\n                    {{\"STATIC_DISCOUNT\"|translate}}\n                </span>\n            </div>\n            <div class=\"col-lg-3 col-md-4 d-flex align-items-center\">\n                <input [attr.disabled]=\"true\" (change)=\"onChooseDiscountType()\" name=\"promocodeValueType\" value=\"percentageDiscount\" type=\"radio\" formControlName=\"promocodeValueType\">\n                <span>\n                    {{\"PERCENTAGE_DISCOUNT\"|translate}}\n                </span>\n            </div>\n        </div>\n    </div>\n    <div class=\"row mt-2\">\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"VALUE\"|translate}}\n            </mat-card-subtitle>\n            <input defaultCharacters [regex]=\"floatNumbersOnly\" formControlName=\"promocodeDiscountValue\" class=\"placeholder-padding\" (change)=\"checkDiscountValue()\">\n          <div class=\"error-container\"\n               *ngIf=\"promocodeInformation.get('promocodeDiscountValue')?.hasError('invalidFormat')\">\n                <span class=\"error-message\">\n                    {{promocodeInformation.get('promocodeDiscountValue')?.getError('invalidFormat')\n                  | translate}}\n                </span>\n          </div>\n          <div class=\"error-container\"\n               *ngIf=\"promocodeInformation.get('promocodeDiscountValue')?.hasError('invalidPercentage')\">\n                <span class=\"error-message\">\n                    {{promocodeInformation.get('promocodeDiscountValue')?.getError('invalidPercentage')\n                  | translate}}\n                </span>\n          </div>\n          <div class=\"error-container\"\n               *ngIf=\"promocodeInformation.get('promocodeDiscountValue')?.hasError('invalidValue')\">\n                <span class=\"error-message\">\n                    {{promocodeInformation.get('promocodeDiscountValue')?.getError('invalidValue')\n                  | translate}}\n                </span>\n          </div>\n        </div>\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"CURRENCY\"|translate}}\n            </mat-card-subtitle>\n            <input readonly [ariaDisabled]=\"true\" formControlName=\"promocodeCurrency\" class=\"placeholder-padding\">\n        </div>\n    </div>\n    <div class=\"row mt-2\">\n        <mat-card-subtitle>{{\"USING_TYPE\"|translate}}\n        </mat-card-subtitle>\n        <div class=\"sub-radio-group\">\n            <div class=\"col-lg-3 col-md-4 d-flex align-items-center\">\n                <input [attr.disabled]=\"true\" name=\"promocodeUsingType\" value=\"Reusable\" type=\"radio\" formControlName=\"promocodeUsingType\">\n                <span>\n                    {{\"REUSABLE\" | translate}}\n                </span>\n            </div>\n            <div class=\"col-lg-3 col-md-4 d-flex align-items-center\">\n                <input name=\"promocodeUsingType\" value=\"Non-Reusable\" type=\"radio\" formControlName=\"promocodeUsingType\">\n                <span>\n                    {{\"NON_REUSABLE\" | translate}}\n                </span>\n            </div>\n        </div>\n    </div>\n    <div class=\"row mt-2\" *ngIf=\"promocodeInformation.get('promocodeUsingType')?.value=='Non-Reusable'\">\n        <div class=\"col-lg-4 col-md-6 mt-2 mb-2\">\n            <mat-card-subtitle>{{\"REDEMPTION_LIMITATION\"|translate}}\n            </mat-card-subtitle>\n            <input defaultCharacters [regex]=\"numbersOnly\" (change)=\"checkPromocodeRedemptionLimitation()\" formControlName=\"promocodeRedemptionLimitation\" class=\"placeholder-padding\">\n            <div class=\"error-container\"\n            *ngIf=\"promocodeInformation.get('promocodeRedemptionLimitation')?.hasError('invalidFormat')\">\n                <span class=\"error-message\">\n                    {{promocodeInformation.get('promocodeRedemptionLimitation')?.getError('invalidFormat')\n                    | translate}}\n                </span>\n            </div>\n        </div>\n    </div>\n    <div class=\"row mt-2\">\n        <mat-card-subtitle>{{\"PROMOCODE_SOURCE\"|translate}}\n        </mat-card-subtitle>\n        <div class=\"sub-radio-group\">\n            <div class=\"col-lg-3 col-md-4 d-flex align-items-center\">\n                <input name=\"promocodeSource\" value=\"Provided\" type=\"radio\" formControlName=\"promocodeSource\">\n                <span>\n                    Provided\n                </span>\n            </div>\n            <div class=\"col-lg-3 col-md-4 d-flex align-items-center\">\n                <input [attr.disabled]=\"true\" name=\"promocodeSource\" value=\"Autogenerated\" type=\"radio\" formControlName=\"promocodeSource\">\n                <span>\n                    Autogenerated\n                </span>\n            </div>\n        </div>\n    </div>\n    <div class=\"row mt-2\">\n    <mat-card-subtitle class=\"gray-title small mt-4\">\n        {{\"CHANNELS_NAME\" | translate}}\n    </mat-card-subtitle>\n\n    <div class=\"col-lg-4 col-md-6\">\n        <mat-card-subtitle style=\"text-align: center\">{{\"ACCUMULATION_NAME\" | translate}}\n        </mat-card-subtitle>\n        <mat-select closeMatSelect formControlName=\"accumulationName\" placeholder=\"{{'ACCUMULATION_CHANNEL_NAME' | translate}}\"\n            multiple>\n            <mat-select-trigger>\n                <span class=\"additional-selection\">\n                    {{promocodeInformation.get(\"accumulationName\")?.value.length}} {{\"SELECTED\" |\n                    translate}} | <span class=\"required-title\">{{\"ACCUMULATION_NAME\" | translate}}</span>\n                </span>\n            </mat-select-trigger>\n            <mat-option class=\"custom-mat-option\" *ngFor=\"let option of accumulationOptionValues\"\n                [value]=\"option.id\">\n                {{ option?.displayName }}\n            </mat-option>\n        </mat-select>\n        <div class=\"row min-height inherit-height\">\n            <div *ngFor=\"let option of getSelectedValues('accumulationName')\"\n                class=\"col-lg-5 col-md-5 selected-option mt-2\">\n                <span class=\"text-only\">{{option}}</span>\n                <img class=\"x-icon\" (click)=\"removeValueFromSelected('accumulationName', option)\"\n                    src=\"/../../assets/images/icn_delete_selected.svg\">\n            </div>\n        </div>\n    </div>\n\n    <div class=\"col-lg-4 col-md-6\">\n        <mat-card-subtitle style=\"text-align: center\">{{\"REDEMPTION_NAME\" | translate}}\n        </mat-card-subtitle>\n        <mat-select closeMatSelect #matSelect\n        formControlName=\"redemptionName\" placeholder=\"{{'REDEMPTION_CHANNEL_NAME' | translate}}\" multiple>\n            <mat-select-trigger>\n                <span class=\"additional-selection\">\n                    {{promocodeInformation.get(\"redemptionName\")?.value.length}} {{\"SELECTED\" |\n                    translate}} | <span class=\"required-title\">{{\"REDEMPTION_NAME\" | translate}}</span>\n                </span>\n            </mat-select-trigger>\n            <mat-option class=\"custom-mat-option\" *ngFor=\"let option of accumulationOptionValues\"\n                [value]=\"option.id\">\n                {{ option?.displayName }}\n            </mat-option>\n        </mat-select>\n        <div class=\"row min-height inherit-height\">\n            <div *ngFor=\"let option of getSelectedValues('redemptionName')\"\n                class=\"col-lg-5 col-md-5 selected-option mt-2\">\n                <span class=\"text-only\">{{option}}</span>\n                <img class=\"x-icon\" (click)=\"removeValueFromSelected('redemptionName', option)\"\n                    src=\"/../../assets/images/icn_delete_selected.svg\">\n            </div>\n        </div>\n    </div>\n    <div class=\"col-lg-4 col-md-6\">\n        <mat-card-subtitle style=\"text-align: center\">{{\"VIEWABLE_NAME\" | translate}}\n        </mat-card-subtitle>\n        <mat-select closeMatSelect formControlName=\"viewableName\"\n            placeholder=\"{{'VIEWABLE_CHANNEL_NAME' | translate}}\" multiple>\n            <mat-select-trigger>\n                <span class=\"additional-selection\">\n                    {{promocodeInformation.get(\"viewableName\")?.value.length}} {{\"SELECTED\" |\n                    translate}} | <span class=\"required-title\">{{\"VIEWABLE_NAME\" | translate}}</span>\n                </span>\n            </mat-select-trigger>\n            <mat-option class=\"custom-mat-option\" *ngFor=\"let option of accumulationOptionValues\"\n                [value]=\"option.id\">\n                {{ option.displayName }}\n            </mat-option>\n        </mat-select>\n        <div class=\"row min-height inherit-height\">\n            <div *ngFor=\"let option of getSelectedValues('viewableName')\"\n                class=\"col-lg-5 col-md-5 selected-option mt-2\">\n                <span class=\"text-only\">{{option}}</span>\n                <img class=\"x-icon\" (click)=\"removeValueFromSelected('viewableName', option)\"\n                    src=\"/../../assets/images/icn_delete_selected.svg\">\n            </div>\n        </div>\n    </div><br>\n</div><br>\n    <app-add-promocodes [hidden]=\"promocodeInformation.get('promocodeSource')?.value!='Provided'\"></app-add-promocodes>\n</form>\n","import { Component, Input, SimpleChanges } from '@angular/core';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { ColumnDefinition } from 'loyalty-common';\n\n@Component({\n  selector: 'app-promocode-list',\n  templateUrl: './promocode-list.component.html',\n  styleUrls: ['./promocode-list.component.css']\n})\nexport class PromocodeListComponent {\n  @Input()\n  promocodeListData!: any[];\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\n  displayedColumns: ColumnDefinition[] = [\n    { headerLabel: 'PROMOCODE_ID', field: 'promocodeID'},\n    { headerLabel: 'ENGLISH_NAME', field: 'nameEn'},\n    { headerLabel: 'TYPE', field: 'type'},\n    { headerLabel: 'VALUE', field: 'displayedValue'},\n    { headerLabel: 'ACTIVATION_DATE', field: 'activationDate'},\n    { headerLabel: 'EXPIRATION_DATE', field: 'expirationDate'},\n    { headerLabel: 'STATUS', field: 'promoStatus'},\n  ];\n\n  actionButtons: string[] = ['delete','edit'];\n\n  ngOnInit() {\n    this.fillDataSource();\n  }\n\n  ngOnChanges(changes: SimpleChanges){\n    this.fillDataSource();\n  }\n  fillDataSource() {\n    this.dataSource.data = this.promocodeListData;\n  }\n}\n","<app-generic-table *ngIf=\"dataSource\"  [maxColumns]=\"10\"\n[displayedColumns]=\"displayedColumns\" [actionButtons]=\"actionButtons\" [dataSource]=\"dataSource\" class=\"mb-4\"\ntableName = \"promo-list\">\n</app-generic-table>\n","import { Component, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\nimport { Constants } from '../../../shared/constants/constants';\nimport { PromocodeInformation } from '../../../shared/model/promocode-information.definition';\nimport { PromocodeFormComponent } from '../promocode-form/promocode-form.component';\nimport { Observable } from 'rxjs';\nimport { ContentManagementService } from 'loyalty-common';\n\n@Component({\n  selector: 'app-promocode',\n  templateUrl: './promocode.component.html',\n  styleUrls: ['./promocode.component.css']\n})\nexport class PromocodeComponent {\n  isPromocodeFormOpened: boolean = true;\n  isPromocodeVisible: boolean = true;\n  promocodeListData: any[] = [];\n  fileURL!: string;\n  startingID: number = 1000000;\n  currentDate: Date = new Date();\n  constructor(private contentMgmtSvc: ContentManagementService) { }\n  @Input()\n  branches !: any[];\n\n  @ViewChild(PromocodeFormComponent) promocodeFormComponent!: PromocodeFormComponent;\n\n  onCreatePromo() {\n    return new Observable(observer => {\n      this.contentMgmtSvc.UploadMedia(this.promocodeFormComponent?.addPromocodesComponent?.promocodeBulkData)\n        .subscribe((res: any) => {\n          this.fileURL = res.url;\n          observer.next(this.createPromo());\n          observer.complete();\n          this.promocodeFormComponent.promocodeInformation.reset();\n        }, err=>{\n          observer.next(false);\n          observer.complete();\n        });\n    });\n  }\n\n  createPromo() {\n    let promocodeInformation = this.promocodeFormComponent?.promocodeInformation;\n    if (this.validatePromocodeCreation(promocodeInformation)) {\n      let promocodeInformationValues: PromocodeInformation = promocodeInformation.value;\n      let promocodeInformationMapped = {\n        promocodeID: this.promocodeListData.length + this.startingID,\n        type: promocodeInformationValues.promocodeType,\n        nameEn: promocodeInformationValues.promocodeEnglishName,\n        nameAr: promocodeInformationValues.promocodeArabicName,\n        descEn: promocodeInformationValues.promocodeDescriptionEN,\n        descAr: promocodeInformationValues.promocodeDescriptionAR,\n        activationDate: this.getDate(new Date(promocodeInformationValues.promocodeActivationDays)),\n        expirationDate: this.getDate(new Date(promocodeInformationValues.promocodeExpireDays)),\n        valueType: promocodeInformationValues.promocodeValueType,\n        displayedValue: this.getValueDiscount(promocodeInformationValues.promocodeValueType),\n        value: this.promocodeFormComponent?.promocodeInformation?.get(\"promocodeDiscountValue\")?.value,\n        currency: promocodeInformationValues.promocodeCurrency,\n        usageType: promocodeInformationValues.promocodeUsingType,\n        redemptionLimitation: promocodeInformationValues.promocodeRedemptionLimitation,\n        source: promocodeInformationValues.promocodeSource,\n        fileURL: \"\",\n        promoStatus: \"Active\",\n        accumulationChannels: promocodeInformation.get(\"accumulationName\")?.value,\n        redemptionChannels: promocodeInformation.get(\"redemptionName\")?.value,\n        viewableChannels: promocodeInformation.get(\"viewableName\")?.value,\n      };\n      promocodeInformationMapped.fileURL = this.fileURL;\n      promocodeInformationMapped.promoStatus = this.getActive(promocodeInformationMapped.activationDate, promocodeInformationMapped.expirationDate);\n      this.promocodeListData = [...this.promocodeListData, promocodeInformationMapped];\n      this.isPromocodeFormOpened = false;\n      \n      return true;\n    }\n    return false;\n  }\n\n  // getFileURL() {\n  //   let file: any = this.promocodeFormComponent?.addPromocodesComponent?.promocodeBulkData?.get(\"file\");\n  //   let ownerId: any = this.promocodeFormComponent?.addPromocodesComponent?.promocodeBulkData?.get(\"ownerId\");\n  //   const formData = new FormData();\n  //   formData.append(\"promocodeSheetEntry\", file);\n  //   formData.append(\"ownerId\", ownerId);\n  //   this.contentMgmtSvc.uploadPromoIdBulkSheet(formData).subscribe((res: any) => {\n  //     this.fileURL = res.promocodeSheetEntry.url;\n  //     return this.createPromo();\n  //   });\n  //   return false;\n  // }\n\n  getValueDiscount(valueType: string) {\n    let val = this.promocodeFormComponent?.promocodeInformation?.get(\"promocodeDiscountValue\")?.value\n    let currency = this.promocodeFormComponent?.promocodeInformation?.get(\"promocodeCurrency\")?.value\n    if (valueType == \"percentageDiscount\") {\n      val += \"%\";\n    }\n    else {\n      val += \" \";\n      val += currency;\n    }\n    return val;\n  }\n  validatePromocodeCreation(promocodeInformation: FormGroup) {\n    if (promocodeInformation.get(Constants.PROMOCODE_TYPE)?.invalid) {\n      return false;\n    }\n    if (promocodeInformation.get(Constants.PROMOCODE_ENGLISH_NAME)?.invalid) {\n      return false;\n    }\n    if (promocodeInformation.get(Constants.PROMOCODE_ARABIC_NAME)?.invalid) {\n      return false;\n    }\n    if (promocodeInformation.get(Constants.PROMOCODE_DESCRIPTION_EN)?.invalid) {\n      return false;\n    }\n    if (promocodeInformation.get(Constants.PROMOCODE_DESCRIPTION_AR)?.invalid) {\n      return false;\n    }\n    if (promocodeInformation.get(Constants.PROMOCODE_ACTIVATION_DAYS)?.invalid) {\n      return false;\n    }\n    if (promocodeInformation.get(Constants.PROMOCODE_EXPIRE_DAYS)?.invalid) {\n      return false;\n    }\n    if (promocodeInformation.get(Constants.PROMOCODE_VALUE_TYPE)?.invalid) {\n      return false;\n    }\n    if (promocodeInformation.get(Constants.PROMOCODE_DISCOUNT_VALUE)?.invalid) {\n      return false;\n    }\n    if (promocodeInformation.get(Constants.PROMOCODE_CURRENCY)?.invalid) {\n      return false;\n    }\n    if (promocodeInformation.get(Constants.PROMOCODE_USING_TYPE)?.invalid) {\n      return false;\n    }\n    if (promocodeInformation.get(Constants.PROMOCODE_REDEMPTION_LIMITATION)?.invalid) {\n      return false;\n    }\n    if (promocodeInformation.get(Constants.PROMOCODE_SOURCE)?.invalid) {\n      return false;\n    }\n    return true;\n  }\n\n  openNewPromocodeForm() {\n    this.isPromocodeFormOpened = true;\n    this.isPromocodeVisible = true;\n  }\n  getDate(date: Date) {\n    return date.toLocaleDateString('en-GB');\n  }\n  getActive(activationDateAsString: string, expireDateAsString: string) {\n    let currentDate = new Date();\n    let activationDate = new Date(activationDateAsString);\n    let expirationDate = new Date(expireDateAsString);\n    if (currentDate >= activationDate && currentDate < expirationDate) {\n      return \"Active\";\n    }\n    else {\n      return \"Inactive\";\n    }\n  }\n}\n","<app-promocode-list *ngIf=\"promocodeListData.length>0\" [promocodeListData]=\"promocodeListData\">\n</app-promocode-list>\n<br *ngIf=\"promocodeListData.length>0\" class=\"break\"/>\n<div (click)=\"openNewPromocodeForm()\" class=\"add-new mt-3 mb-3\" *ngIf=\"promocodeListData.length > 0 && !isPromocodeFormOpened\">\n    <img src=\"../../assets/images/icn_create_add.svg\" alt=\"\"><span class=\"add-new-text\">{{'ADD_ANOTHER_PROMOCODE' |\n        translate}}</span>\n</div>\n<app-promocode-form *ngIf=\"isPromocodeFormOpened\">\n</app-promocode-form>\n","export class SelectedBranchesModel{\n    constructor(\n       public branches:string[],\n       public branchValue:number\n    ){}\n}","import {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  ViewChild,\n} from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { PartnerService } from '../shared/services/partner-service.service';\n\nimport { PromocodeInformation } from '../shared/model/promocode-information.definition';\nimport { CouponComponent } from './coupon-information/coupon/coupon.component';\nimport { PromocodeComponent } from './promocode-information/promocode/promocode.component';\nimport { PartnerVoucherService } from '../shared/services/partner-voucher-service';\nimport { PartnerInformationModel } from '../shared/model/partner-information-model';\nimport { CouponInformationModel } from '../shared/model/coupon-information-model';\nimport { PromocodeInformationModel } from '../shared/model/promocode-information-model';\nimport { CreateCouponModel } from '../shared/model/create-coupon-model';\nimport { CreatePromoModel } from '../shared/model/create-promo-model';\nimport { MAT_SELECT_CONFIG } from '@angular/material/select';\nimport { SelectedBranchesModel } from '../shared/model/selected-branches-model';\nimport { PartnerIdentifierService } from \"../shared/services/partner-identifier.service\";\nimport { MatTableDataSource } from '@angular/material/table';\nimport {AuthenticationService, ColumnDefinition, TablePageDetails, PopupService, RegexConstants} from 'loyalty-common';\nimport { MatGridTileHeaderCssMatStyler } from '@angular/material/grid-list';\nimport { ShowingBranchesModel } from '../shared/model/showing-branches-model';\nimport { navigateToUrl } from 'single-spa';\nimport { Constants } from '../../public-api';\nimport { TranslateService } from '@ngx-translate/core';\n\n\n\n@Component({\n  selector: 'app-gift-management',\n  templateUrl: './gift-management.component.html',\n  styleUrls: ['./gift-management.component.css'],\n  providers: [\n    {\n      provide: MAT_SELECT_CONFIG,\n      useValue: { overlayPanelClass: 'mat-select-overlay' }\n    }\n  ]\n})\nexport class GiftManagementComponent implements OnInit, AfterViewInit {\n  isPartnerGroup: boolean = false;\n  branches: any[] = [];\n  branchesClone: any[] = [];\n  showedSelection: SelectedBranchesModel[] = [];\n  addSelectedClicked: boolean = false;\n  maxColumns: number = 2;\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\n  pageDetails: TablePageDetails = {\n    pageNumber: 1,\n    pageSize: 5,\n    totalNumberOfElements: 0,\n    pagesCount: 1\n  };\n  displayedColumns: ColumnDefinition[] = [\n    { field: 'branches', headerLabel: 'SELECTED_BRANCHES', span: 2 },\n    { field: 'branchValue', headerLabel: 'BRANCH_VALUE', span: 2 }\n\n  ];\n  branchId: string = \"\";\n  floatNumbersOnly: RegExp = /^[.0-9]$/;\n  entryFromBranch: boolean = false;\n  partnerId !: string;\n  lang: string | null = \"en\";\n  partnerGroup: boolean = false;\n  allBranches: boolean = true;\n  someBranches: boolean = false;\n  addedSelectBranches: boolean = false;\n  selectedBranchesValues: SelectedBranchesModel[] = [];\n  validAddSelect: boolean = false;\n  valueType : string = ''\n  showingSelection: ShowingBranchesModel[] = []\n  noOfAdds: number = 0;\n  permissions !: string[] | null;\n  @Input()\n  isPartnerCreation : boolean = false;\n\n  giftDto: PartnerInformationModel = {\n    coupons: [],\n    promos: [],\n    partnerId: \"\"\n\n  };\n\n  branchValue!: number;\n\n\n  constructor(private cdr: ChangeDetectorRef, private route: ActivatedRoute, private translateService : TranslateService , private partnerService: PartnerService,\n    private partnerVoucherService: PartnerVoucherService,\n    private partnerIdentifierService: PartnerIdentifierService,\n    private popupService: PopupService,private authService : AuthenticationService) {\n    this.translateService.onLangChange.subscribe(() => {\n      this.lang = this.translateService.currentLang;\n    });\n  }\n\n\n  selectedBranchesForm = new FormGroup({\n    branchSelection: new FormControl(\"\"),\n    branch: new FormControl([this.branchId]),\n    branchValue: new FormControl(20,[Validators.pattern(RegexConstants.DOUBLE_REGEX),Validators.min(0)]),\n    someBranches: new FormControl(false),\n    allBranches: new FormControl(true)\n  });\n  giftManagementForm = new FormGroup({\n    giftType: new FormControl(\"\")\n  });\n  @ViewChild(PromocodeComponent) promocodeComponent!: PromocodeComponent;\n  @ViewChild(CouponComponent) couponComponent!: CouponComponent;\n  isPromocodeVisible: boolean = true;\n  isCouponVisible: boolean = true;\n  ngAfterViewInit() {\n    this.cdr.detectChanges();\n  }\n  ngOnInit() {\n    this.permissions = this.authService.currentPermissionsValue;\n    this.partnerId = this.route.snapshot.params['id'];\n    if (!!!this.partnerId) {\n      this.partnerId = this.partnerIdentifierService.getIdentifier()\n    }\n\n    this.partnerVoucherService.getValue().subscribe(value => {this.valueType = value});\n    this.checkIfPartnerGroup();\n    this.branchId = history.state?.branchId ?? this.branchId;\n    this.getBranches();\n    this.lang = this.translateService.currentLang;\n    this.isBranchEntry();\n    this.partnerGroupButtonCheck();\n    this.isAddSelectionValid();\n  }\n  resetGiftDto() {\n    this.giftDto = {\n      coupons: [],\n      promos: [],\n      partnerId: \"\"\n    };\n  }\n  resetSelected() {\n    this.selectedBranchesValues = []\n  }\n  resetShowingSelectionTable() {\n    this.showedSelection = [];\n    this.showingSelection = [];\n    this.noOfAdds = 0;\n  }\n\n\n\n\n  onCreatePromocode() {\n    if (this.isCreatePromocodeValid()) {\n      this.partnerVoucherService.setValue(\"\");\n      this.promocodeComponent.onCreatePromo()\n        .subscribe(isPromoCodeAddingSuccessful => {\n          if (isPromoCodeAddingSuccessful)\n            this.createGiftPromo();\n          this.promocodeComponent.promocodeFormComponent.promocodeInformation.reset();\n          this.promocodeComponent.isPromocodeVisible = false;\n        });\n      this.resetShowingSelectionTable();\n      this.pushSelectedData();\n      this.resetShowedSelection();\n      this.branches = JSON.parse(JSON.stringify(this.branchesClone));\n      this.unselectAll();\n\n\n    }\n  }\n  isCreatePromocodeValid() {\n    return this.promocodeComponent?.promocodeFormComponent?.promocodeInformation.valid && this.promocodeComponent?.promocodeFormComponent?.addPromocodesComponent?.isFileValid() && (this.allBranches || this.verifySelected());\n  }\n  onAddNewPromocode() {\n    this.isPromocodeVisible = true;\n  }\n  isAddPromocodeDisabled() {\n    return this.promocodeComponent?.promocodeFormComponent?.promocodeInformation.invalid;\n  }\n  removePromocode() {\n    if (this.promocodeComponent?.promocodeListData?.length > 0) {\n      this.isPromocodeVisible = false;\n      this.promocodeComponent.isPromocodeFormOpened = false;\n    }\n  }\n  removeCoupon() {\n    if (this.couponComponent?.couponListData?.length > 0) {\n      this.isCouponVisible = false;\n      this.couponComponent.isCouponFormOpened = false;\n    }\n  }\n  getBranches() {\n    this.partnerService.getBranches(this.partnerId).subscribe((response: any) => {\n      this.branches = response.map((branch: any) => ({ ...branch, disabled: false })),\n        this.branchesClone = response.map((branch: any) => ({ ...branch, disabled: false }))\n        ;\n    }\n    )\n\n  }\n  createGiftPromo() {\n    let promocode:CreatePromoModel = {}\n    let promoInfo = this.promocodeComponent.promocodeFormComponent.promocodeInformation\n    promocode.accumulationChannels = this.parseStringArrayToIntList(promoInfo.get(\"accumulationName\")?.value);\n    promocode.activationDate = this.formatDate(promoInfo.get('promocodeActivationDays')?.value);\n    promocode.expirationDate = this.formatDate(promoInfo.get('promocodeExpireDays')?.value);\n    promocode.descAr = promoInfo.get('promocodeDescriptionAR')?.value;\n    promocode.descEn = promoInfo.get('promocodeDescriptionEN')?.value;\n    promocode.nameAr = promoInfo.get('promocodeArabicName')?.value;\n    promocode.nameEn = promoInfo.get('promocodeEnglishName')?.value;\n    promocode.redemptionChannels = this.parseStringArrayToIntList(promoInfo.get(\"redemptionName\")?.value);\n    promocode.viewableChannels = this.parseStringArrayToIntList(promoInfo.get(\"viewableName\")?.value);\n    promocode.valueType = promoInfo.get('promocodeValueType')?.value;\n    promocode.value = promoInfo.get('promocodeDiscountValue')?.value;\n    promocode.currency = promoInfo.get('promocodeCurrency')?.value;\n    promocode.usageType = promoInfo.get('promocodeUsingType')?.value;\n    promocode.redemptionLimitation = promoInfo.get('promocodeRedemptionLimitation')?.value;\n    promocode.fileURL = this.promocodeComponent.fileURL;\n    promocode.source = promoInfo.get('promocodeSource')?.value;\n    promocode.type = promoInfo.get('promocodeType')?.value;\n    promocode.amount = promoInfo.get('amount')?.value;\n    promocode.selectedBranches = this.selectedBranchesValues;\n    promocode.allBranches = this.allBranches;\n    this.giftDto.promos.push(promocode);\n    this.giftDto.partnerId = this.partnerId;\n    this.resetSelected();\n\n  }\n\n\n  parseStringArrayToIntList(values: string[]): number[] {\n    if (!values) {\n      return [];\n    }\n    return values.map(Number);\n  }\n\n  formatDate(dateString: string): string {\n    const date = new Date(dateString);\n    const day = date.getDate().toString().padStart(2, '0');\n    const month = (date.getMonth() + 1).toString().padStart(2, '0'); // getMonth() is zero-based\n    const year = date.getFullYear();\n\n    return `${day}/${month}/${year}`;\n  }\n\n  createGiftCoupon() {\n    let coupon: CreateCouponModel = {}\n\n    let coupInfo = this.couponComponent.couponFormComponent.couponInformation\n    coupon.accumulationChannels = this.parseStringArrayToIntList(coupInfo.get(\"accumulationName\")?.value);\n    coupon.activationDate = this.formatDate(coupInfo.get('couponActivationDays')?.value);\n    coupon.expirationDate = this.formatDate(coupInfo.get('couponExpireDays')?.value);\n    coupon.descAr = coupInfo.get('couponDescriptionAR')?.value;\n    coupon.descEn = coupInfo.get('couponDescriptionEN')?.value;\n    coupon.nameAr = coupInfo.get('couponArabicName')?.value;\n    coupon.nameEn = coupInfo.get('couponEnglishName')?.value;\n    coupon.redemptionChannels = this.parseStringArrayToIntList(coupInfo.get(\"redemptionName\")?.value);\n    coupon.viewableChannels = this.parseStringArrayToIntList(coupInfo.get(\"viewableName\")?.value);\n    coupon.valueType = coupInfo.get('couponValueType')?.value;\n    coupon.value = coupInfo.get('couponDiscountValue')?.value;\n    coupon.currency = coupInfo.get('couponCurrency')?.value;\n    coupon.usageType = coupInfo.get('couponUsingType')?.value;\n    coupon.amount = coupInfo.get('couponAmount')?.value;\n\n    coupon.selectedBranches = this.selectedBranchesValues;\n    coupon.allBranches = this.allBranches;\n\n    this.giftDto.coupons.push(coupon);\n    this.giftDto.partnerId = this.partnerId;\n\n    this.resetSelected();\n\n\n  }\n\n  saveAllGifts() {\n    this.partnerVoucherService.createGift(this.giftDto).subscribe(response => {\n      this.popupService.showSuccessPopup(Constants.GIFT_CREATION_SUCCESS_MESSAGE)\n        .then(() => {\n          navigateToUrl(`/partner/gifts/${this.partnerId}`);\n        });\n    });\n  }\n  unselectAll() {\n    this.selectedBranchesForm.get(\"branch\")?.setValue([this.branchId]);\n\n  }\n  resetShowedSelection() {\n    this.showedSelection = [];\n  }\n  onCreateCoupon() {\n    if (this.isCreateCouponValid()) {\n      this.partnerVoucherService.setValue(\"\");\n      this.createGiftCoupon();\n      if (this.couponComponent.onCreateCoupon()) {\n        this.couponComponent.isCouponVisible = false;\n      }\n      this.resetShowingSelectionTable();\n      this.pushSelectedData();\n      this.resetShowedSelection();\n      this.branches = JSON.parse(JSON.stringify(this.branchesClone));\n      this.unselectAll();\n    }\n  }\n  verifySelected() {\n    if (this.someBranches) {\n      if (this.addedSelectBranches) {\n        return true;\n      }\n      else { return false }\n    }\n    return false;\n  }\n  isCreateCouponValid() {\n    return this.couponComponent?.couponFormComponent?.couponInformation.valid && (this.allBranches || this.verifySelected());\n  }\n  isPromocodeButtonsVisible() {\n    return this.giftManagementForm.get('giftType')?.value == \"promocode\" && this.promocodeComponent.isPromocodeFormOpened;\n  }\n  isCouponButtonsVisible() {\n    return this.giftManagementForm.get('giftType')?.value == \"coupon\" && this.couponComponent.isCouponFormOpened;\n  }\n  isBranchEntry() {\n    if (this.branchId != \"\") {\n      this.selectedBranchesForm.get(\"branch\")?.setValue([this.branchId])\n      this.entryFromBranch = true;\n    }\n  }\n  isItEntry(id: string) {\n    if (id === this.branchId) {\n      return true\n    }\n    return false;\n\n  }\n  partnerGroupButtonCheck() {\n    if (this.isPartnerGroup) {\n      this.selectedBranchesForm.get(\"someBranches\")?.disable()\n    }\n  }\n  checkIfPartnerGroup() {\n    this.partnerVoucherService.checkIfPartnerGroup(this.partnerId).subscribe(response => { this.isPartnerGroup = response })\n\n  }\n  addSelected() {\n\n    let selected: SelectedBranchesModel = new SelectedBranchesModel([], 0);\n    let selectedIds = this.selectedBranchesForm.get(\"branch\")?.value ?? [\"\"];\n    let showedSelection: SelectedBranchesModel = new SelectedBranchesModel([\"\"], 0);\n\n    const selectedBranches = this.branches\n    .filter(branch => selectedIds.includes(branch.id))\n    .map(branch => branch.name);\n\n    showedSelection.branches[0] = selectedBranches.join(\"/\");\n\n    for (let i = 0; i < selectedIds?.length; i++) {\n      selected.branches.push(selectedIds[i])\n    }\n\n    let moddedClone = this.branches;\n\n    for (let i = 0; i < moddedClone.length; i++) {\n      if (selectedIds.includes(moddedClone[i].id)) {\n        moddedClone.splice(i, 1)\n        i -= 1;\n      }\n\n    }\n    this.branches = moddedClone;\n\n    selected.branchValue = this.selectedBranchesForm.get(\"branchValue\")?.value ?? 0;\n    showedSelection.branchValue = selected.branchValue;\n\n    this.addSelectedClicked = true;\n    this.showedSelection.push(showedSelection);\n    this.selectedBranchesValues.push(selected);\n    this.addedSelectBranches = true\n    this.mapSelectionsForTable();\n    this.pushSelectedData();\n    this.selectedBranchesForm.get(\"branch\")?.setValue([]);\n  }\n  mapSelectionsForTable() {\n    this.noOfAdds = this.showedSelection.length - 1;\n    for (let i = this.noOfAdds; i < this.showedSelection.length; i++) {\n      let select: ShowingBranchesModel = { branches: \"\", branchValue: 0 };\n      select.branches = this.showedSelection[i].branches[0];\n      select.branches.slice(0, select.branches.length - 1);\n      select.branchValue = this.showedSelection[i].branchValue;\n      this.showingSelection.push(select)\n\n    }\n\n  }\n\n  pushSelectedData() {\n    this.dataSource.data = this.showingSelection;\n  }\n\n  changePage(page: number) {\n    this.pageDetails.pageNumber = page;\n    this.pushSelectedData();\n  }\n  isAddSelectionValid() {\n    if(this.valueType != \"\"){\n      if(this.valueType ===\"percentageDiscount\"){\n        this.selectedBranchesForm.get(\"branchValue\")?.addValidators(Validators.max(100));\n        this.selectedBranchesForm.get(\"branchValue\")?.addValidators(Validators.min(1))\n        this.selectedBranchesForm.get(\"branchValue\")?.updateValueAndValidity();\n      }else{\n        this.selectedBranchesForm.get(\"branchValue\")?.clearValidators()\n        this.selectedBranchesForm.get(\"branchValue\")?.addValidators(Validators.min(1))\n        this.selectedBranchesForm.get(\"branchValue\")?.updateValueAndValidity();\n      }\n\n    }else{return false}\n\n    if(!this.selectedBranchesForm.get(\"branchValue\")?.valid){\n      return false;\n    }\n\n    let selects = this.selectedBranchesForm.get(\"branch\")?.value;\n    if (selects != null && selects != undefined) {\n      if (selects.length > 0 && this.giftManagementForm.valid) {\n        return true;\n      }\n\n    }\n    return false;\n  }\n  isSavingValid() {\n    if ((this.couponComponent?.couponListData?.length > 0 || this.promocodeComponent?.promocodeListData?.length > 0) && (this.giftDto.coupons.length > 0 || this.giftDto.promos.length > 0)) {\n      return true;\n    }\n    return false;\n  }\n  checkSomeCheckbox() {\n    this.someBranches = this.selectedBranchesForm.get(\"someBranches\")?.value ?? false;\n  }\n  checkAllCheckbox() {\n    this.allBranches = this.selectedBranchesForm.get(\"allBranches\")?.value ?? true;\n  }\n  permissionExists(permissionName : string){\n    if(this.permissions == null || this.permissions == undefined)\n      return false;\n   return this.permissions?.includes(permissionName);\n  }\n}\n","\n<mat-card>\n\n    <mat-card-title class=\"mt-3\" [class.start-margin] = \"!isPartnerCreation\"> {{\"GIFT_MANAGEMENT\" | translate}}\n    </mat-card-title>\n    <mat-card-content>\n        <form [formGroup]=\"giftManagementForm\">\n            <div class=\"sub-checkbox-container mt-3\">\n\n\n                <span class=\"sub-checkbox-title\"[hidden]=\"(!!!this.partnerId)\">{{\"BRANCH_SELECTION\"|translate}}</span>\n                <form [formGroup]=\"selectedBranchesForm\">\n                    <div [hidden]=\"(!!!this.partnerId)\">\n                        <div class=\"row mt-2 sub-checkbox-group\">\n                            <div class=\"row mt-2 check-box-container\">\n                                <div class=\"col-lg-2 col-md-3 check-box-container\">\n                                    <input  type=\"checkbox\" [checked]=\"allBranches\" formControlName=\"allBranches\" (change)=\"checkAllCheckbox()\" class=\"checkbox\">\n                                    <span>\n                                        {{ \"ALL_BRANCHES\" | translate}}\n                                    </span>\n                                </div>\n                                <div class=\"col-lg-2 col-md-3 check-box-container\" *ngIf=\"!isPartnerGroup\">\n                                    <input type=\"checkbox\" [checked]=\"someBranches\" formControlName=\"someBranches\" (change)=\"checkSomeCheckbox()\"   class=\"checkbox\">\n                                    <span>\n                                        {{ \"SELECTED_BRANCHES\" | translate}}\n                                    </span>\n                                </div>\n                            </div>\n                        </div>\n\n                    <div class=\"row mt-2 sub-checkbox-group\">\n\n\n                    <div *ngIf=\"someBranches\" >\n\n                        <div class=\"row mt-2 check-box-container\">\n                            <div class=\"col-lg-4 col-md-6\">\n                            <label for=\"numberInput\">{{\"ENTER_VOUCHER\" | translate}} </label>\n                            <input type=\"number\" defaultCharacters [regex]=\"floatNumbersOnly\"  id=\"branchValue\" name=\"branchValue\" min=\"1\" formControlName=\"branchValue\" required>\n                        </div>\n                        <div class=\"col-lg-4 col-md-6\">\n                        <mat-card-subtitle>{{\"BRANCHES\" | translate}}</mat-card-subtitle>\n                        <mat-select closeMatSelect formControlName=\"branch\"\n                            placeholder=\"{{ 'BRANCHES' | translate }}\"\n                            multiple >\n                            <mat-select-trigger>\n                                    <span class=\"additional-selection\">\n                                        {{selectedBranchesForm.get('branch')?.value?.length}} {{\"SELECTED\" |\n                                        translate}} | <span class=\"required-title\">{{\"BRANCH\" | translate}}</span>\n                                    </span>\n                                </mat-select-trigger>\n                            <mat-option *ngFor=\"let item of branches\"\n                                [value]=\"item.id\"\n                                [disabled]=\"isItEntry(item.id)\">\n                                {{ lang === \"en\" ? item.name : item.nameAr | translate}}\n                            </mat-option>\n                        </mat-select>\n\n                        </div>\n                        <div class=\"col-lg-4 col-md-6\" [hidden]=\"(!!!this.partnerId)\">\n                            <button class=\"add-select-button\"  (click)=\"addSelected()\" [disabled]=\"!isAddSelectionValid()\"  >{{\"ADD_SELECTED\" | translate}}</button>\n                        </div>\n                    </div>\n\n                    <div *ngIf=\"showedSelection.length > 0\" class=\"table-container\">\n                        <app-generic-table [maxColumns]=\"maxColumns\" [dataSource]=\"dataSource\"\n                            [displayedColumns]=\"displayedColumns\" class=\"table\" *ngIf=\"dataSource\" >\n                        </app-generic-table>\n\n\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </form>\n                <span class=\"sub-checkbox-title\">{{\"CHOOSE_GIFT_TYPE\"|translate}}</span>\n                <div class=\"row mt-2 sub-checkbox-group\">\n                    <div class=\"col-lg-2 col-md-3 check-box-container\">\n                        <input name=\"giftType\" value=\"coupon\" type=\"radio\" formControlName=\"giftType\">\n                        <span>\n                            {{ \"COUPON\" | translate}}\n                        </span>\n                    </div>\n                    <div  *ngIf=\"permissions && permissionExists('canViewPartnerEmployees')\"  class=\"col-lg-2 col-md-3 check-box-container\">\n                        <input name=\"giftType\" value=\"promocode\" type=\"radio\" formControlName=\"giftType\">\n                        <span class=\"disabled-span\">\n                            {{ \"PROMOCODE\" | translate}}\n                        </span>\n                    </div>\n                    <div class=\"col-lg-2 col-md-3 check-box-container\">\n                        <input [attr.disabled]=\"true\" name=\"giftType\" value=\"offers\" type=\"radio\" formControlName=\"giftType\">\n                        <span class=\"disabled-span\">\n                            {{ \"OFFERS\" | translate}}\n                        </span>\n                    </div>\n                    <div class=\"col-lg-2 col-md-3 check-box-container\" [hidden]=\"(!!!this.partnerId)\">\n                        <button class=\"add-button\" (click)=\"saveAllGifts()\" [disabled] = \"!isSavingValid()\" >{{\"SAVE_GIFTS\" | translate}}</button>\n                    </div>\n                </div>\n            </div>\n        </form>\n        <div class=\"mt-2 sub-container\" [hidden]=\"!(giftManagementForm.get('giftType')?.value=='promocode')\">\n            <app-promocode  [hidden]=\"!(giftManagementForm.get('giftType')?.value=='promocode')\"></app-promocode>\n            <div class=\"add-promocode-container\" *ngIf=\"isPromocodeButtonsVisible()\">\n                <button (click)=\"removePromocode()\" class=\"cancel-button\">{{\"CANCEL\" | translate}}</button>\n                <button class=\"add-button\" (click)=\"onCreatePromocode()\" [disabled] = \"!isCreatePromocodeValid()\" >{{\"ADD_PROMOCODE\" | translate}}</button>\n            </div>\n        </div>\n        <div class=\"mt-2 sub-container\" [hidden]=\"!(giftManagementForm.get('giftType')?.value=='coupon')\">\n            <app-coupon [hidden]=\"!(giftManagementForm.get('giftType')?.value=='coupon')\"></app-coupon>\n            <div class=\"add-coupon-container\" *ngIf=\"isCouponButtonsVisible()\">\n                <button (click)=\"removeCoupon()\" class=\"cancel-button\">{{\"CANCEL\" | translate}}</button>\n                <button class=\"add-button\" (click)=\"onCreateCoupon()\" [disabled] = \"!isCreateCouponValid()\" >{{\"ADD_COUPON\" | translate}}</button>\n            </div>\n        </div>\n    </mat-card-content>\n</mat-card>\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { ApiConstants } from '../constants/api-constants';\nimport { TerminalInformationModel } from '../model/terminal-information-model';\nimport { EditTerminalModel } from '../model/edit-terminal-model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TerminalManagementService {\n\n  constructor(private httpClient: HttpClient, @Inject('environment') private environment: any) { }\n  checkTerminalSerialNumber(serialNumber: string) {\n    return this.httpClient.head(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.terminalResource + ApiConstants.serialNumberExists, { params: new HttpParams().set('serial-number', serialNumber) });\n  }\n  checkTerminalSIMCard(simCard: string) {\n    return this.httpClient.head(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.terminalResource + ApiConstants.simCardExists, { params: new HttpParams().set('sim-card', simCard) });\n  }\n  createTerminal(terminal: TerminalInformationModel) {\n    let body = {\n      ...terminal,\n      status: \"Active\"\n    }\n    return this.httpClient.post(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.terminalResource ,  body);\n  }\n  getAllSerialNumbers(partnerId:string)\n  {\n    let sentParameters = {} as any;\n    if (partnerId) {\n      sentParameters.partnerId = partnerId;\n    }\n    let httpOptions = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json'\n      }),\n      params: sentParameters\n    }\n    return this.httpClient.get(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.terminalResource + ApiConstants.serialNumbers,httpOptions);\n  }\n  getAllSIMCards(partnerId:string)\n  {\n    let sentParameters = {} as any;\n    if (partnerId) {\n      sentParameters.partnerId = partnerId;\n    }\n    let httpOptions = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json'\n      }),\n      params: sentParameters\n    }\n    return this.httpClient.get(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.terminalResource + ApiConstants.simCards,httpOptions);\n  }\n  getAllProductVersions(partnerId:string)\n  {\n    let sentParameters = {} as any;\n    if (partnerId) {\n      sentParameters.partnerId = partnerId;\n    }\n    let httpOptions = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json'\n      }),\n      params: sentParameters\n    }\n    return this.httpClient.get(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.terminalResource + ApiConstants.productVersions,httpOptions);\n  }\n  editTerminal(terminal: EditTerminalModel, id: string) {\n    return this.httpClient.put(this.environment.PARTNER_MANAGEMENT_API_HOST + ApiConstants.terminalResource , terminal, {params: {'terminal-id': id}});\n  }\n\n}\n","import { RegexConstants } from 'loyalty-common';\n\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { TerminalManagementService } from '../../../../shared/services/terminal-management.service';\n\n@Component({\n  selector: 'app-terminal',\n  templateUrl: './terminal.component.html',\n  styleUrls: ['./terminal.component.css']\n})\nexport class TerminalComponent {\n  constructor(private terminalService: TerminalManagementService) { }\n  terminalInformation!: FormGroup;\n  terminalSerialInvalid: boolean = false;\n  terminalPasswordInvalid: boolean = false;\n  simCardInvalid: boolean = false;\n  status: string = \"ACTIVE\";\n  numbersOnlyRegex:  RegExp = RegexConstants.INTEGER_REGEX;\n  @Input() cancelButton: boolean = false;\n  @Output() closePopup = new EventEmitter<boolean>();\n  @Input() editTerminal: boolean = false;\n  @Input() terminalData : any;\n  checked = true;\n  ngOnInit() {\n    this.initForm()\n    if(this.terminalData) {\n      this.terminalInformation.get('serialNumber')?.setValue(this.terminalData.serialNumber);\n      this.terminalInformation.get('terminalType')?.setValue(this.terminalData.terminalType);\n      this.terminalInformation.get('terminalType')?.disable();\n      this.terminalInformation.get('simCard')?.setValue(this.terminalData.simCard);\n      if(this.terminalData.status.toLowerCase() === \"active\") {\n        this.checked = true;\n        this.status = \"ACTIVE\"\n      } else {\n        this.checked = false;\n        this.status = \"INACTIVE\"\n      }\n    }\n  }\n  initForm() {\n    this.terminalInformation = new FormGroup({\n      serialNumber: new FormControl(null,\n        [\n          Validators.required,\n          Validators.maxLength(50)\n        ]),\n      password: new FormControl(null,\n        [\n          this.editTerminal?  Validators.nullValidator : Validators.required,\n          Validators.minLength(8),\n          Validators.pattern(RegexConstants.PASSWORD_REGEX)\n        ]),\n      terminalType: new FormControl(\n        \"\", [\n        Validators.required\n      ]\n      ),\n      simCard: new FormControl(\n        \"\", [\n        Validators.required,\n        Validators.pattern(RegexConstants.INTEGER_REGEX),\n        Validators.minLength(19),\n        Validators.maxLength(19)\n      ]\n      )\n    });\n  }\n  isTerminalSerialInvalid() {\n    if (this.terminalInformation.get('serialNumber')?.dirty) {\n      if (this.terminalInformation.get('serialNumber')?.invalid) {\n        this.terminalSerialInvalid = true;\n        return;\n      }\n      let serialNumber = this.terminalInformation.get('serialNumber')?.value;\n      this.checkUniqueSerialNumber(serialNumber);\n    }\n    return false;\n  }\n\n\n  checkUniqueSerialNumber(serialNumber: string) {\n    this.terminalService.checkTerminalSerialNumber(serialNumber)\n      .subscribe(resp => {\n        this.terminalSerialInvalid = false;\n      },\n        (error: HttpErrorResponse) => {\n          this.terminalSerialInvalid = true;\n          this.mapAlreadyExistingError(\"serialNumber\", \"SERIAL_NUMBER_EXISTS\");\n        }\n      )\n  }\n\n  checkUniqueSIMCard(serialNumber: string) {\n    this.terminalService.checkTerminalSIMCard(serialNumber)\n      .subscribe(resp => {\n        this.simCardInvalid = false;\n      },\n        (error: HttpErrorResponse) => {\n          this.simCardInvalid = true;\n          this.mapAlreadyExistingError(\"simCard\", \"SIM_CARD_EXISTS\");\n        }\n      )\n  }\n\n  mapAlreadyExistingError(formControlName: string, message: string) {\n    let formControlInput = this.terminalInformation.get(formControlName);\n    formControlInput?.setErrors({ ...formControlInput.errors, alreadyExistingError: message });\n  }\n\n  mapInvalidFormatError(formControlName: string, message: string) {\n    let formControlInput = this.terminalInformation.get(formControlName);\n    formControlInput?.setErrors({ ...formControlInput.errors, invalidFormat: message });\n  }\n\n  isTerminalSIMCardInvalid() {\n    if (this.terminalInformation.get('simCard')?.dirty) {\n      if (this.terminalInformation.get('simCard')?.invalid) {\n        this.simCardInvalid = true;\n        this.mapInvalidFormatError(\"simCard\", \"INVALID_SIM_CARD\");\n        return;\n      }\n      let simCard = this.terminalInformation.get('simCard')?.value;\n      this.checkUniqueSIMCard(simCard);\n    }\n    return false;\n  }\n  checkPassword(){\n    let val=this.terminalInformation.get('password')?.value;\n    if(val=='' || val==null){\n      return;\n    }\n    if(this.terminalInformation.get('password')?.invalid\n    ){\n      this.mapInvalidFormatError(\"password\", \"INVALID_PASSWORD\");\n    }\n  }\n  closePopupFunc() {\n    this.closePopup.emit(true);\n  }\n\n  toggle() {\n    this.checked = !this.checked;\n    this.status = this.checked ? \"ACTIVE\" : \"INACTIVE\";\n  }\n\n}\n","<mat-card-content>\n    <form [formGroup]=\"terminalInformation\">\n        <div *ngIf=\"!editTerminal\" class=\"d-flex flex-row justify-content-between align-self-start\">\n            <mat-card-subtitle class=\"gray-title new-terminal-subgroup\">\n                {{\"ADD_TERMINALS\" | translate}}\n            </mat-card-subtitle>\n            <img *ngIf=\"cancelButton\" class=\"pointer\" src=\"../../../assets/images/icn_cancel_red.svg\" (click)=\"closePopupFunc()\">\n        </div>\n        <div class=\"row width-100\">\n            <div class=\"col-lg-5 col-md-6 mt-3 mb-3 width-50\">\n                <mat-card-subtitle>{{\"TERMINAL_SERIAL\" | translate}}\n                </mat-card-subtitle>\n                <input maxlength=\"50\" class=\"placeholder-padding width-100 dimmed-input\" type=\"text\" formControlName=\"serialNumber\"\n                    (change)=\"isTerminalSerialInvalid()\" [readonly]=\"editTerminal\" [disabled]=\"editTerminal\" placeholder='{{\"SERIAL_NUMBER\" | translate}}' noStartWithSpace>\n                <div class=\"error-container\"\n                    *ngIf=\"terminalInformation.get('serialNumber')?.hasError('alreadyExistingError')\">\n                    <span class=\"error-message\">\n                        {{terminalInformation.get('serialNumber')?.getError('alreadyExistingError')\n                        | translate}}\n                    </span>\n                </div>\n            </div>\n            <div class=\"col-lg-5 col-md-6 mt-3 mb-3 width-50\">\n                <mat-card-subtitle>{{\"TERMINAL_PASSWORD\" | translate}}\n                </mat-card-subtitle>\n                <input (change)=\"checkPassword()\" class=\"placeholder-padding width-100\" type=\"password\" formControlName=\"password\"\n                    placeholder='{{\"PASSWORD\" | translate}}'>\n                <div class=\"error-container\">\n                    <span class=\"error-message\"\n                        *ngIf=\"terminalInformation.get('password')?.hasError('invalidFormat')\">{{terminalInformation.get('password')?.getError('invalidFormat')\n                        | translate}}</span>\n                </div>\n            </div>\n        </div>\n            <div class=\"mt-3 mb-3\">\n                <mat-card-subtitle>{{\"TERMINAL_TYPE\" | translate}}\n                </mat-card-subtitle>\n                <div class=\"row mt-2\">\n                    <div class=\"col-lg-4 col-md-4\">\n                        <input name=\"terminalType\" value=\"PAX\" type=\"radio\" formControlName=\"terminalType\" [disabled]=\"editTerminal\">\n                        <span>\n                            PAX\n                        </span>\n                    </div>\n                    <div class=\"col-lg-4 col-md-4\">\n                        <input name=\"terminalType\" value=\"GIDEA\" type=\"radio\" formControlName=\"terminalType\" [disabled]=\"editTerminal\">\n                        <span>\n                            Gidea\n                        </span>\n                    </div>\n                    <div class=\"col-lg-4 col-md-4\">\n                        <input name=\"terminalType\" value=\"SUPERPAY\" type=\"radio\" formControlName=\"terminalType\" [disabled]=\"editTerminal\">\n                        <span>\n                            SuperPay\n                        </span>\n                    </div>\n                    <div class=\"col-lg-4 col-md-4\">\n                        <input name=\"terminalType\" value=\"PAC-A920\" type=\"radio\" formControlName=\"terminalType\" [disabled]=\"editTerminal\">\n                        <span>\n                            PAC-A920\n                        </span>\n                    </div>\n                    <div class=\"col-lg-4 col-md-4\">\n                        <input name=\"terminalType\" value=\"Pax-A920 Pro\" type=\"radio\" formControlName=\"terminalType\" [disabled]=\"editTerminal\">\n                        <span>\n                            Pax-A920 Pro\n                        </span>\n                    </div>\n                </div>\n            </div>\n        <div class=\"flex-column\">\n            <div class=\"flex-column col-lg-5 col-md-6 mt-3 mb-3\">\n                <mat-card-subtitle>{{\"SIM_CARD\" | translate}}\n                </mat-card-subtitle>\n                <input defaultCharacters [regex]=\"numbersOnlyRegex\" class=\"placeholder-padding\" formControlName=\"simCard\" (change)=\"isTerminalSIMCardInvalid()\"\n                    placeholder='{{\"SIM_CARD\" | translate}}\t'>\n                <div class=\"error-container\"\n                    *ngIf=\"terminalInformation.get('simCard')?.hasError('alreadyExistingError')\">\n                    <span class=\"error-message\">\n                        {{terminalInformation.get('simCard')?.getError('alreadyExistingError')\n                        | translate}}\n                    </span>\n                </div>\n                <div class=\"error-container\" *ngIf=\"terminalInformation.get('simCard')?.hasError('invalidFormat')\">\n                    <span class=\"error-message\">\n                        {{terminalInformation.get('simCard')?.getError('invalidFormat')\n                        | translate}}\n                    </span>\n                </div>\n            </div>\n        </div>\n        <div class=\"row\">\n            <div class=\"col-lg-4 col-md-5 mt-3 mb-3 status-container\">\n                <span>{{\"ACTIVE\" | translate}}</span>\n                <label class=\"toggle\">\n                    <input type=\"checkbox\" (click)=\"toggle()\" [checked]=\"checked\" [disabled]=\"!editTerminal\">\n                    <div class=\"slide-toggle\"></div>\n                </label>\n            </div>\n        </div>\n    </form>\n</mat-card-content>\n","import { Component, EventEmitter, OnInit, Output, ViewChild } from '@angular/core';\nimport { TerminalComponent } from '../../branches/branches-and-terminals/terminal-information/terminal/terminal.component';\nimport { FormGroup } from '@angular/forms';\nimport { TerminalManagementService } from '../services/terminal-management.service';\nimport { TerminalsPopupService } from '../services/popup-service';\nimport { AuthenticationService } from 'loyalty-common';\n\n@Component({\n  selector: 'app-add-terminal',\n  templateUrl: './add-terminal.component.html',\n  styleUrls: ['./add-terminal.component.css']\n})\nexport class AddTerminalComponent implements OnInit {\n  @ViewChild(TerminalComponent)terminalComponent!:TerminalComponent;\n  terminalListData:any[]=[];\n  isTerminalFormOpened: boolean = true;\n  lang !: string | null;\n  \n  constructor(private terminalService: TerminalManagementService, private terminalsPopupService: TerminalsPopupService,\n    private authService : AuthenticationService) {\n\n  }\n  ngOnInit(): void {\n    this.lang = localStorage.getItem(\"lang\");\n  }\n  isAddTerminalDisabled()\n  {\n    return this.terminalComponent?.terminalInformation?.invalid;\n  }\n\n  serialNumberExists(serialNumber:string)\n  {\n    for(let terminal of this.terminalListData)\n    {\n      if(terminal['serialNumber']==serialNumber)\n      {\n        return true;\n      }\n    }\n    return false;\n  }\n  simCardExists(simCard:string)\n  {\n    for(let terminal of this.terminalListData)\n    {\n      if(terminal['simCard']==simCard)\n      {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  validateTerminal(terminalInformation:FormGroup)\n  {\n    let currentSerialNumber=terminalInformation.get('serialNumber')?.value;\n    if(this.serialNumberExists(currentSerialNumber))\n    {\n      this.terminalComponent.mapAlreadyExistingError(\"serialNumber\",\"SERIAL_NUMBER_EXISTS\");\n      return false;\n    }\n    let currentSimCard=terminalInformation.get('simCard')?.value;\n    if(this.simCardExists(currentSimCard))\n    {\n      this.terminalComponent.mapAlreadyExistingError(\"simCard\",\"SIM_CARD_EXISTS\");\n      return false;\n    }\n    return true;\n  }\n\n  onCreateTerminal() {\n    let terminalInformation = this.terminalComponent?.terminalInformation;\n    let terminalInformationMapped = {\n      serialNumber: terminalInformation.get('serialNumber')?.value,\n      terminalType: terminalInformation.get('terminalType')?.value,\n      password: this.authService.encrypt(terminalInformation.get('password')?.value),\n      simCard: terminalInformation.get('simCard')?.value,\n    };\n    if(this.validateTerminal(terminalInformation))\n    {\n      this.terminalListData = [...this.terminalListData, terminalInformationMapped];\n      this.isTerminalFormOpened = false;\n      this.terminalComponent?.terminalInformation.reset();\n      this.terminalService.createTerminal(terminalInformationMapped).subscribe((res) => {\n        window.location.reload();\n      });\n    }\n  }\n  closePopup() {\n    this.terminalsPopupService.closeAllPopups();\n  }\n}\n","<div class=\"backdrop-overlay\"></div>\n<div class=\"whole-container\" [ngClass]=\"{'arabic-pop': lang === 'ar'}\">\n    <app-terminal [cancelButton]=\"true\" (closePopup)=\"closePopup()\"></app-terminal>\n    <div class=\"terminal-buttons-container\">\n        <button class=\"add-terminal-button\" [disabled]=\"isAddTerminalDisabled()\"\n            (click)=\"onCreateTerminal()\">{{\"ADD\" | translate}}</button>\n    </div>\n</div>","\nexport class AssignTerminalModel\n{\n    constructor(\n        public terminalId : string, \n        public branchId : string\n    ){}\n   \n\t\n}","import { Component, Inject, OnInit } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MAT_SELECT_CONFIG } from '@angular/material/select';\nimport { TranslateService } from '@ngx-translate/core';\nimport { PopupService, RegexConstants } from 'loyalty-common';\nimport { AssignTerminalModel } from '../model/assign-terminal-model';\nimport { PartnerService } from '../services/partner-service.service';\nimport { TerminalsPopupService } from '../services/popup-service';\n\n@Component({\n  selector: 'app-assign-terminal',\n  templateUrl: './assign-terminal.component.html',\n  styleUrls: ['./assign-terminal.component.css'],\n  providers: [\n    {\n      provide: MAT_SELECT_CONFIG,\n      useValue: { overlayPanelClass: 'mat-select-overlay' }\n    }\n  ]\n})\nexport class AssignTerminalComponent implements OnInit {\n  terminalForm !: FormGroup;\n  partners : any[] = [];\n  branches : any[] = [];\n  partnersAfterFilter : any[] = [];\n  branchesAfterFilter : any[] = [];\n  partnerSearch : string = \"\";\n  branchSearch : string = \"\";\n  terminalId !: string;\n  lang !: string | null;\n  englishSpecialCharactersRegex:RegExp=RegexConstants.ENGLISH_SPECIAL_CHARS_REGEX;\n  arabicSpecialCharactersRegex:RegExp=RegexConstants.ARABIC_SPECIAL_CHARS_REGEX;\n  regexString !: RegExp;\n \n  constructor(private partnerService : PartnerService,private popUpService : PopupService,\n    private terminalPopUpService : TerminalsPopupService, private translateService : TranslateService){\n      this.translateService.onLangChange.subscribe((event) => {\n        this.lang = event.lang;\n        this.regexString = this.getRegexString();\n      });  \n\n    }\n\n    ngOnInit(): void {\n      this.popUpService.getClosedPopupObservable().subscribe(() => {\n        this.closePopUp();\n      });\n  \n      this.partnerService.getPartners().subscribe((res : any)=>{\n        this.partners = res;\n        this.partnersAfterFilter = res;\n      });\n      this.createForm();\n      this.lang = this.translateService.currentLang;\n      this.regexString = this.getRegexString();\n    }\n\n\ncreateForm(){\n  this.terminalForm = new FormGroup({\n    partner: new FormControl(),\n    branch: new FormControl()\n  });\n}\n\nfilterPartners(){\n if(this.partnerSearch.length >= 0){\n  this.partnersAfterFilter = this.partners.filter(partner=>{\n    return this.lang == \"en\" ? partner?.partnerNameEn?.toLowerCase().includes(this.partnerSearch?.toLowerCase()) : partner?.partnerNameAr?.toLowerCase().includes(this.partnerSearch?.toLowerCase());\n  })\n}\n  else{\n    this.partnersAfterFilter = this.partners.slice();\n  }\n }\n filterBranches(){\n  if(this.branchSearch.length >= 0){\n   this.branchesAfterFilter = this.branches.filter(branch=>{\n     return this.lang ==\"en\" ? \n     branch?.name?.toLowerCase().includes(this.branchSearch.toLowerCase()) : branch?.nameAr?.toLowerCase().includes(this.branchSearch?.toLowerCase());\n   })\n }\n   else{\n     this.branchesAfterFilter = this.branches.slice();\n   }\n  }\n getBranches(){\n  this.terminalForm.get(\"branch\")?.reset();\n  let partnerId = this.getPartnerId();\n  this.partnerService.getBranches(partnerId).subscribe((res:any)=>{\n    this.branches = res;\n    this.branchesAfterFilter = res;\n  });\n  \n }\n getPartnerId(){\n  return this.terminalForm.get(\"partner\")?.value?.id;\n }\n assignTerminal(){\n  this.partnerService.assignTerminal(new AssignTerminalModel(this.terminalId,this.terminalForm.get(\"branch\")?.value?.id)).subscribe((res=>{\n    this.popUpService.showSuccessPopup(\"SUCCESSFUL_TERMINALS\");\n  }),error =>{\n    this.popUpService.showFailurePopup({\n      errorMessage: error?.errorCode || \"FAILED_TERMINALS\",\n    });\n  })\n }\n closePopUp(){\n  this.terminalPopUpService.closeAssignTerminalsPopup();\n  window.location.reload();\n }\n isBranchesDisabled(){\n  if(!this.partners || this.partners.length == 0 ){\n    return true;\n  }\n  else return false;\n }\n canAssign() {\n  const controlNames = [\"partner\", \"branch\"];\n  for (const name of controlNames) {\n    const control = this.terminalForm.get(name);\n    if (control?.value === null || control?.value?.length === 0) {\n      return false;\n    }\n  }\n  return true;\n}\n\ngetRegexString(){\n  return this.lang == \"en\" ? this.englishSpecialCharactersRegex : this.arabicSpecialCharactersRegex;\n}\n}\n\n","<div class=\"backdrop-overlay\"></div>\n<div class=\"whole-container\" [ngClass]=\"{'arabic-pop': lang === 'ar'}\">\n<h5 class=\"mt-3\">\n    {{\"ASSIGN_TO\" | translate}}\n</h5>\n<form [formGroup]=\"terminalForm\">\n<div class=\"row\">\n<div class=\"mt-2 col-lg-6 col-md-6\">\n    <mat-card-subtitle>{{\"PARTNER\" | translate}}</mat-card-subtitle>\n    <mat-select closeMatSelect formControlName=\"partner\" [ngClass]=\"{'disabled' : isBranchesDisabled() }\"\n        placeholder=\"{{'SELECT_PARTNER' | translate }}\" (selectionChange)=\"getBranches()\">\n        <mat-select-trigger>\n               <span class=\"required-title\">{{ lang === \"en\" ? terminalForm.get(\"partner\")?.value?.partnerNameEn :  terminalForm.get(\"partner\")?.value?.partnerNameAr }}</span>\n         </mat-select-trigger>\n                <input (keydown)=\"$event.keyCode === 32? $event.stopPropagation() : true\" [(ngModel)] =\"partnerSearch\" [ngModelOptions]=\"{standalone: true}\"\n                    placeholder=\"{{ 'PARTNER' | translate }}\" (input)=\"filterPartners()\">\n        <mat-option *ngFor=\"let item of partnersAfterFilter\"\n            [value]=\"item\">\n            {{ lang === \"en\" ? item.partnerNameEn : item.partnerNameAr | translate}}\n        </mat-option>\n    </mat-select>\n</div>\n<div class=\"mt-2 col-lg-6 col-md-6\">\n    <mat-card-subtitle>{{\"BRANCH\" | translate}}</mat-card-subtitle>\n    <mat-select [disabled]=\"branchesAfterFilter.length==0\" closeMatSelect  formControlName=\"branch\"  [ngClass]=\"{'disabled': isBranchesDisabled()}\"\n        placeholder=\"{{'SELECT_BRANCH' | translate }}\">\n        <mat-select-trigger>\n               <span class=\"required-title\">{{lang === \"en\" ?  terminalForm.get(\"branch\")?.value?.name : terminalForm.get(\"branch\")?.value?.nameAr}}</span>\n         </mat-select-trigger>\n                <input (keydown)=\"$event.keyCode === 32? $event.stopPropagation() : true\" [(ngModel)] =\"branchSearch\" [ngModelOptions]=\"{standalone: true}\"\n                    placeholder=\"{{ 'BRANCH' | translate }}\" (input)=\"filterBranches()\">\n        <mat-option *ngFor=\"let item of branchesAfterFilter\"\n            [value]=\"item\">\n            {{ lang === \"en\" ?  item.name : item.nameAr | translate}}\n        </mat-option>\n    </mat-select>\n</div>\n</div>\n<div class=\"buttons-container mt-3\">\n    <button (click)=\"closePopUp()\"class=\"secondary-button\">{{\"CANCEL\" | translate}}</button>\n    <button (click)=\"assignTerminal()\" [disabled]=\"!canAssign()\"  class=\"primary-button\">{{\"ADD\" | translate}}</button>\n</div>\n</form>\n</div>","import { FailurePopupComponent, SuccessPopupComponent } from 'loyalty-common';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\n\nimport {\n\tApplicationRef,\n\tComponentFactoryResolver,\n\tComponentRef,\n\tInjectable,\n\tInjector,\n} from '@angular/core';\n\nimport { AddTerminalsComponent } from '../add-terminals/add-terminals.component';\nimport { AddTerminalComponent } from '../add-terminal/add-terminal.component';\nimport { AssignTerminalComponent } from '../assign-terminal/assign-terminal.component';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TerminalsPopupService {\n  private addTerminalsPopupRef: ComponentRef<AddTerminalsComponent> | null = null;\n  private closePopups: Subject<void> = new Subject<void>();\n  private accountIdSubject: Subject<string> = new Subject<string>();\n  private terminalPopupRef: ComponentRef<AddTerminalComponent> | null = null;\n  private assignTerminalsPopupRef: ComponentRef<AssignTerminalComponent> | null = null;\n\n  constructor(\n    private componentFactoryResolver: ComponentFactoryResolver,\n    private appRef: ApplicationRef,\n    private injector: Injector\n  ) {}\n\n  closeAllPopups(): void {\n    if(this.addTerminalsPopupRef){\n      this.appRef.detachView(this.addTerminalsPopupRef.hostView);\n      this.addTerminalsPopupRef.destroy();\n      this.addTerminalsPopupRef = null;\n      this.closePopups.next();\n    } else if(this.terminalPopupRef) {\n      this.appRef.detachView(this.terminalPopupRef.hostView);\n      this.terminalPopupRef.destroy();\n      this.addTerminalsPopupRef = null;\n      this.closePopups.next();\n    }\n  }\n  closeAddTerminalsPopup(): void{\n    if(this.addTerminalsPopupRef){\n      this.appRef.detachView(this.addTerminalsPopupRef.hostView);\n      this.addTerminalsPopupRef.destroy();\n      this.addTerminalsPopupRef = null;\n      this.closePopups.next();\n    }\n  }\n\n\n\n  showAddTerminalsPopup(){\n    this.closeAllPopups();\n    const factory = this.componentFactoryResolver.resolveComponentFactory(\n      AddTerminalsComponent\n    );\n    this.addTerminalsPopupRef = factory.create(this.injector);\n    this.appRef.attachView(this.addTerminalsPopupRef.hostView);\n    document.body.appendChild(this.addTerminalsPopupRef.location.nativeElement);\n  }\n  showAssignTerminalsPopup(terminalId : string){\n    this.closeAllPopups();\n    const factory = this.componentFactoryResolver.resolveComponentFactory(\n      AssignTerminalComponent\n    );\n    this.assignTerminalsPopupRef = factory.create(this.injector);\n    this.assignTerminalsPopupRef.instance.terminalId = terminalId;\n    this.appRef.attachView(this.assignTerminalsPopupRef.hostView);\n    document.body.appendChild(this.assignTerminalsPopupRef.location.nativeElement);\n    \n  }\n\n  closeAssignTerminalsPopup(): void{\n    if(this.assignTerminalsPopupRef){\n      this.appRef.detachView(this.assignTerminalsPopupRef.hostView);\n      this.assignTerminalsPopupRef.destroy();\n      this.assignTerminalsPopupRef = null;\n      this.closePopups.next();\n    }\n  }\n\n  addTerminalPopup(){\n    this.closeAllPopups();\n    const factory = this.componentFactoryResolver.resolveComponentFactory(\n      AddTerminalComponent\n    );\n    this.terminalPopupRef = factory.create(this.injector);\n    this.appRef.attachView(this.terminalPopupRef.hostView);\n    document.body.appendChild(this.terminalPopupRef.location.nativeElement);\n  }\n\n  getClosedPopupObservable(): Observable<void> {\n    return this.closePopups.asObservable();\n  }\n  getAccountIdSubject(){\n    return this.accountIdSubject;\n  }\n}\n","import { KeycloakService } from 'keycloak-angular';\nimport { ContentManagementService, PopupService } from 'loyalty-common';\nimport { Papa } from 'ngx-papaparse';\nimport {\n  Component,\n  EventEmitter,\n  OnInit,\n  Output,\n  Input\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\n\nimport { Constants } from '../constants/constants';\nimport { BulkManagementService } from '../services/bulk-management.service';\nimport { TerminalsPopupService } from '../services/popup-service';\nimport { SyncBasicBulkSheetModel } from '../model/SyncBranchesBulkModel';\n\n@Component({\n  selector: 'app-add-terminals',\n  templateUrl: './add-terminals.component.html',\n  styleUrls: ['./add-terminals.component.css'],\n})\nexport class AddTerminalsComponent implements OnInit {\n  @Input() partnerId: number = 0;\n  uploadProgress: number = 0;\n  uploadErrorMessage = '';\n  uploaded = false;\n  isSyncing: boolean = false;\n  terminalBulkFormData!: FormData;\n  @Output() activateNext: EventEmitter<any> = new EventEmitter();\n  id!: number;\n  maxFileSize: number = Constants.MAX_FILE_SIZE;\n  syncTerminalsBulkSheetModel!: SyncBasicBulkSheetModel;\n\n  stepOne: boolean = false;\n  stepTwo: boolean = false;\n  stepThree: boolean = false;\n  fileMessage = Constants.FILE_UPLOAD;\n  subscription!: any;\n  addTerminalsButtonEnabled: boolean = false;\n\n  constructor(\n    private contentMgmtSvc: ContentManagementService,\n    private bulkManagementService: BulkManagementService,\n    private papa: Papa,\n    private popupService: PopupService,\n    private terminalsPopupService: TerminalsPopupService,\n    private translate: TranslateService,\n    private router: Router,\n    private route: ActivatedRoute\n  ) { }\n\n\n  ngOnInit() {\n\n    this.id = this.route.snapshot.params['id'];\n  }\n\n  downloadFileRedirect() {\n    this.contentMgmtSvc.getTemplates(Constants.ADD_TERMINALS_TEMPLATE)\n      .subscribe((data: any) => {\n        this.contentMgmtSvc.downloadTemplateCSVByRedirect(\n          data[0].template.url,\n          Constants.ADD_TERMINAL,\n          Constants.ADD_TERMINALS_TEMPLATE_NAME\n        );\n        this.stepOne = true;\n        this.stepTwo = true;\n      });\n  }\n  validateData($event: any) {\n    let file: File = $event.get('fileData');\n    this.uploadProgress = 25;\n    this.validateCsvFile(file);\n  }\n\n  validateCsvFile(file: File) {\n    this.papa.parse(file, {\n      header: true,\n      beforeFirstChunk: (chunk) => {\n        const lines = chunk.split(/\\r\\n|\\r|\\n/);\n        const header = lines[0].split(',');\n        this.uploadErrorMessage = '';\n        if (\n          !Constants.TERMINAL_HEADERS.every((field) =>\n            header.includes(field)\n          )) {\n          this.addTerminalsButtonEnabled = false;\n          this.uploadProgress = 0;\n          this.uploadErrorMessage = Constants.INVALID_HEADER_ROWS;\n        }\n      },\n      complete: (result: any) => {\n        if (this.uploadErrorMessage.length > 0)\n          return;\n        if (\n          result.data &&\n          result.data.length > 1 &&\n          result.data.length < 1000000) {\n          this.uploadErrorMessage = '';\n          const formData = new FormData();\n          formData.append('file', file);\n          this.terminalBulkFormData = formData;\n          setTimeout(() => {\n            this.uploadProgress = 100;\n            this.addTerminalsButtonEnabled = true;\n            this.activateNext.emit(true);\n          }, 1000);\n        } else {\n          this.addTerminalsButtonEnabled = false;\n          this.uploadErrorMessage = Constants.INVALID_NUMBER_OF_ROWS;\n          this.uploadProgress = 0;\n        }\n        if (result.data && result.data.length < 1) {\n          this.addTerminalsButtonEnabled = false;\n          this.uploadErrorMessage = Constants.INVALID_ROWS_EMPTY;\n        } else if (result.data.length > 1000000) {\n          this.addTerminalsButtonEnabled = false;\n          this.uploadErrorMessage = Constants.INVALID_ROWS_EXCEEDED_MAX;\n        }\n      },\n      error: (error: any) => {\n        if (this.uploadErrorMessage === '')\n          this.uploadErrorMessage = Constants.ERROR_READING_FILE;\n        this.uploadProgress = 0;\n      },\n    });\n  }\n\n  onDeleteFile() {\n    this.activateNext.emit(false);\n    this.stepOne = true;\n    this.stepTwo = true;\n    this.uploadProgress = 0;\n  }\n\n  syncBulkSheet() {\n    this.isSyncing = true;\n    this.contentMgmtSvc.UploadMedia(this.terminalBulkFormData)\n      .subscribe((res: any) => {\n        this.syncTerminalsBulkSheetModel = {\n          fileUrl: res.url\n        }\n        this.bulkManagementService\n          .syncBulkSheetEntriesAddTerminals(this.syncTerminalsBulkSheetModel, this.id)\n          .subscribe(\n            (res: any) => {\n              this.isSyncing = false;\n              this.uploaded = true;\n              this.terminalsPopupService.closeAddTerminalsPopup();\n              this.popupService.showSuccessPopup(res?.message)\n                .then(() => {\n                  this.router.navigate([\"/terminals\"]);\n                });\n\n            },\n            (error: any) => {\n              this.isSyncing = false;\n              this.uploaded = true;\n              this.uploadErrorMessage = Constants.INVALID_HEADER_ROWS;\n              this.terminalsPopupService.closeAddTerminalsPopup();\n              this.popupService.showFailurePopup({\n                errorMessage: this.translate.instant(\n                  error?.errorCode || Constants.UPLOAD_ERROR\n                ),\n              });\n            }\n          );\n      });\n  }\n\n  isFileValid() {\n    return !!!this.uploadErrorMessage && this.terminalBulkFormData?.has('file');\n  }\n\n  onAddTerminal() {\n    this.syncBulkSheet()\n  }\n  activateAddTerminalsButton(value: boolean) {\n    this.addTerminalsButtonEnabled = value;\n    this.uploadErrorMessage = '';\n  }\n\n  closeAddTerminalForm() {\n    this.terminalsPopupService.closeAddTerminalsPopup();\n  }\n}\n","<div class=\"backdrop-overlay\"></div>\n<mat-card *ngIf=\"!uploaded\" class=\"big-card whole-container\">\n  <mat-card-content class=\"process-container\">\n    <div class=\"title\">\n      <mat-card-title>\n        {{ \"ADD_TERMINALS\" | translate }}\n      </mat-card-title>\n      <button (click)=\"closeAddTerminalForm()\" class=\"button-reset\">\n        <img src=\"/../../assets/images/close-circle.svg\" />\n      </button>\n    </div>\n    <div class=\"row cards-container\">\n      <mat-card class=\"mt-3 small-card col-lg-4 col-md-4\">\n        <mat-card-content>\n          <img\n            *ngIf=\"stepOne\"\n            class=\"right-icon\"\n            src=\"/../../assets/images/right-icon.svg\"\n          />\n          <div class=\"download-file-container\">\n            <div class=\"download-file mt-3\">\n              <img class=\"mt-2\" src=\"/../../assets/images/vuesax-bold-document-download.svg\" />\n            </div>\n            <mat-card-subtitle class=\"mt-2\">{{\n              \"DOWNLOAD_SAMPLE_FILE\" | translate\n            }}</mat-card-subtitle>\n            <button\n              (click)=\"downloadFileRedirect()\"\n              class=\"primary-button header-buttons mt-2\"\n            >\n              {{ \"DOWNLOAD\" | translate }}\n            </button>\n          </div>\n        </mat-card-content>\n      </mat-card>\n      <mat-card class=\"mt-3 small-card col-lg-3 col-md-3\">\n        <mat-card-content>\n          <img\n            *ngIf=\"stepTwo\"\n            class=\"right-icon\"\n            src=\"/../../assets/images/right-icon.svg\"\n          />\n          <div class=\"download-file-container\">\n            <div class=\"download-file mt-3\">\n              <img class=\"mt-2\" src=\"/../../assets/images/vuesax-bold-document-text.svg\" />\n            </div>\n            <mat-card-subtitle class=\"mt-2\">{{\n              \"FILL_TEMPLATE\" | translate\n            }}</mat-card-subtitle>\n            <div class=\"sub-title-container\">\n              <span class=\"mt-2 sub-title\">{{\n                \"PLEASE_FILL\" | translate\n              }}</span>\n            </div>\n          </div>\n        </mat-card-content>\n      </mat-card>\n      <mat-card class=\"mt-3 small-card col-lg-3 col-md-3\">\n        <mat-card-content>\n          <img\n            *ngIf=\"uploadProgress >= 100\"\n            class=\"right-icon\"\n            src=\"/../../assets/images/right-icon.svg\"\n          />\n          <div class=\"download-file-container\">\n            <div class=\"download-file mt-3\">\n              <img class=\"mt-2\" src=\"/../../assets/images/vuesax-bold-document-upload.svg\" />\n            </div>\n            <mat-card-subtitle class=\"mt-2\">{{\n              \"UPLOAD_SAMPLE_FILE\" | translate\n            }}</mat-card-subtitle>\n            <app-file-upload\n              [displayMessage]=\"fileMessage\"\n              [uploadProgress]=\"uploadProgress\"\n              (emitFileData)=\"validateData($event)\"\n              (emitFileData)=\"activateAddTerminalsButton(true)\"\n              (onDeleteFile)=\"onDeleteFile()\"\n              (onDeleteFile)=\"activateAddTerminalsButton(false)\"\n              [maxFileSize]=\"maxFileSize\"\n            >\n              <app-error-message *ngIf=\"!!uploadErrorMessage\">{{\n                uploadErrorMessage | translate\n              }}</app-error-message>\n            </app-file-upload>\n          </div>\n        </mat-card-content>\n      </mat-card>\n    </div>\n    <div class=\"d-flex justify-content-end add-terminals-button-div\">\n      <button\n        [disabled]=\"!addTerminalsButtonEnabled\"\n        (click)=\"onAddTerminal()\"\n        class=\"primary-button header-buttons\"\n      >\n        {{ \"ADD_TERMINALS\" | translate }}\n      </button>\n    </div>\n  </mat-card-content>\n</mat-card>\n","export class TerminalFilterModel{\n\npublic simCard?: String | null;\npublic serialNumber?: String | null;\npublic status?: String | null;\npublic terminalType ?: String | null;\npublic softwareUpdateDate ?: String | null;\npublic productVersion ?: String | null;\npublic name?: String | null;\npublic id ?: String | null;\npublic branchId ?: String | null;\n}","import { Component, OnInit, ViewChild,HostListener,ElementRef, ComponentRef } from '@angular/core';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AuthenticationService, ColumnDefinition, ConfirmationPopupComponent, ErrorResponse, GenericPopUpService, GenericTableComponent, LookupService, PopupService, RegexConstants, SuccessPopupComponent, TablePageDetails } from 'loyalty-common';\nimport { PartnerService } from '../services/partner-service.service';\nimport { TerminalsPopupService } from '../services/popup-service';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { MAT_SELECT_CONFIG } from '@angular/material/select';\nimport { TerminalManagementService } from '../services/terminal-management.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { TerminalFilterModel } from '../model/terminal-filter-model';\nimport { PartnerIdentifierService } from '../services/partner-identifier.service';\nimport { Constants } from '../constants/constants';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n  selector: 'app-terminals',\n  templateUrl: './terminals.component.html',\n  styleUrls: ['./terminals.component.css'],\n  providers: [\n    {\n      provide: MAT_SELECT_CONFIG,\n      useValue: { overlayPanelClass: 'mat-select-overlay' }\n    }\n  ]\n})\nexport class TerminalsComponent implements OnInit {\n  @ViewChild('menu', { static: true }) menu!: ElementRef;\n  @HostListener('document:click', ['$event'])\n  clickOutsideMenu(event: MouseEvent) {\n    if(this.menu != undefined && this.menu.nativeElement != undefined) {\n      const isClickedInsideMenu = this.menu.nativeElement.contains(event.target);\n      if (!isClickedInsideMenu) {\n        this.closeMenu();\n      }\n    }\n  }\n  constructor(private partnerService: PartnerService , private activatedRoute : ActivatedRoute ,private router:Router,private terminalsPopupService:TerminalsPopupService,\n    private lookUpService: LookupService,private terminalService:TerminalManagementService , private dialog : MatDialog,private partnerIdentifierService:PartnerIdentifierService,\n    private authService : AuthenticationService ,private popUpService : PopupService , private translateService : TranslateService ,private genericPopupService:GenericPopUpService\n  ) {\n    this.translateService.onLangChange.subscribe((event) => {\n      this.lang = event.lang;\n      this.updateTerminalName();\n    });\n  }\n  viewMenu: boolean = false;\n  displayedColumns: ColumnDefinition[] = [\n    { field: 'simCard', headerLabel: 'SIM_CARD', type: 'String', span: 2 },\n    { field: 'serialNumber', headerLabel: 'SERIAL_NUMBER', type: 'String', span: 2 },\n    { field: 'terminalType', headerLabel: 'TERMINAL_TYPE', type: 'String', span: 2 },\n    { field: 'softwareUpdateDate', headerLabel: 'SOFTWARE_UPDATE_DATE', type: 'Date', span: 2 },\n    { field: 'productVersion', headerLabel: 'PRODUCT_VERSION', type: 'String', span: 2 },\n    { field: 'status', headerLabel: 'STATUS', type: 'String', span: 2 },\n  ];\n  pageDetails: TablePageDetails = {\n    pageNumber: 1,\n    pageSize: 10,\n    totalNumberOfElements: 0,\n    pagesCount: 1\n  };\n  terminalFilter: TerminalFilterModel = new TerminalFilterModel();\n  id !: string;\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\n  maxColumns: number = 5;\n  actionButtons: string[] = ['more-actions', 'stats'];\n  menuVisible : boolean = false;\n  terminalId !: string ;\n  requestSent: boolean = false;\n  menuToggled : boolean = false;\n  element !: any;\n  @ViewChild(GenericTableComponent) genericTableComponent!: GenericTableComponent;\n  error!: ErrorResponse;\n  employeeId!: number;\n  terminalSearchForm !: FormGroup;\n  multiSelectSearchForm !: FormGroup;\n  terminalSerialNumbers: any[] = [];\n  filteredTerminalSerialNumbers: any[] = [];\n  terminalTypes: any[] = [];\n  terminalSimCards: any[] = [];\n  filteredTerminalSearchSimCards: any[] = [];\n  terminalStatuses: any[]=['ACTIVE','INACTIVE'];\n  terminalProductVersions:any[]=[];\n  partners:any[]=[];\n  partnersList:any[]=[];\n  filteredSearchPartners: any[] = [];\n  branches:any[]=[];\n  numbersOnlyRegex:  RegExp = RegexConstants.INTEGER_REGEX;\n  englishWithSpecialCharactersRegex = RegexConstants.ENGLISH_SPECIAL_CHARS_REGEX;\n  lang!:string | null;\n  permissions !: string[] | null;\n  private confirmationDialogPopUpRef: ComponentRef<ConfirmationPopupComponent> | null = null;\n  private successDialogPopUpRef: ComponentRef<SuccessPopupComponent> | null = null;\n  isEtisalat : boolean = true;\n  @HostListener('window:languageChanged', ['$event'])\n  onLanguageChange(event: any) {\n    console.log(event);\n    this.lang = this.translateService.currentLang;\n    this.partners = this.partnersList.map((item: any) => {\n      return this.lang === 'ar' ? item.nameAr : item.nameEn;\n    });\n    this.filteredSearchPartners = this.partners;\n  }\n  ngOnInit(): void {\n\n    this.permissions = this.authService.currentPermissionsValue;\n    this.id=this.activatedRoute.snapshot.params['id'];\n    if (!!!this.id)\n      this.id = this.partnerIdentifierService.getIdentifier();\n    this.displayedColumns.push({field: 'name', headerLabel: this.determineHeaderLabel(), type: 'String', span: 2 })\n    this.lang = this.translateService.currentLang;\n    this.createForms();\n    this.getSerialNumbers();\n    this.getTerminalTypes();\n    this.getSimCards();\n    this.getTerminalProductVersions();\n    if(!this.id)this.getPartners();\n    if(this.id)this.getBranches();\n    this.getTerminalsData();\n  }\n  determineHeaderLabel() {\n    return this.id ? \"BRANCH\" : \"PARTNER\";\n  }\n  createForms()\n  {\n    this.multiSelectSearchForm = new FormGroup({\n      terminalSerialSearchInput:new FormControl(),\n      terminalSimCardSearchInput:new FormControl(),\n      partnerSearchInput:new FormControl()\n    });\n\n    this.terminalSearchForm = new FormGroup({\n      terminalSerialNumber: new FormControl(),\n      terminalType: new FormControl(),\n      terminalSimCard: new FormControl(),\n      terminalStatus: new FormControl(),\n      terminalProductVersion : new FormControl(),\n      partner: new FormControl(),\n      branch: new FormControl()\n    });\n\n  }\n  applyFilterToModel(){\n    this.terminalFilter.serialNumber = this.terminalSearchForm.get('terminalSerialNumber')?.value;\n    this.terminalFilter.terminalType = this.terminalSearchForm.get('terminalType')?.value;\n    this.terminalFilter.simCard = this.terminalSearchForm.get('terminalSimCard')?.value;\n    this.terminalFilter.status = this.terminalSearchForm.get('terminalStatus')?.value;\n    this.terminalFilter.productVersion = this.terminalSearchForm.get('terminalProductVersion')?.value;\n    this.terminalFilter.name = this.terminalSearchForm.get('partner')?.value;\n    this.terminalFilter.branchId = this.terminalSearchForm.get('branch')?.value;\n  }\n  getTerminalsData() {\n    this.requestSent = true;\n    this.partnerService.getTerminals(this.id,this.pageDetails.pageNumber-1,this.pageDetails.pageSize,this.terminalFilter).subscribe((res : any )=>{\n      this.dataSource.data = res.list.map((item: any) => {\n        return {\n          ...item,\n          simCard: item?.simCard || \"-\",\n          serialNumber: item?.serialNumber || \"-\",\n          status: item?.status || \"-\",\n          terminalType : item?.terminalType || \"-\",\n          softwareUpdateDate : item?.softwareUpdateDate || \"-\",\n          productVersion : item?.productVersion || \"-\",\n          id : item?.id,\n          branchId : item?.branchId,\n        }\n      });\n      this.updateTerminalName();\n      this.pageDetails.totalNumberOfElements = res.elementCount;\n      this.pageDetails.pagesCount = Math.ceil(res.elementCount / this.pageDetails.pageSize);\n    },\n    (error: any) => {\n      this.requestSent = false;\n    }, () => {\n      this.requestSent = false;\n    }\n  );\n  }\n  changePage(event: number) {\n    this.pageDetails.pageNumber = event;\n    this.getTerminalsData();\n  }\n  performAction(event : any){\n    this.element = event.element;\n    this.terminalId = event.id;\n  }\n  isPageLoading() {\n    return this.requestSent == true;\n  }\n  toggleMenu() {\n    this.menuToggled = !this.menuToggled;\n  }\n  navigateTo(location : string)\n  {\n    if(!!!this.activatedRoute.snapshot.paramMap.get(\"id\")){\n      this.router.navigate([location]);\n    }\n    else{\n      this.router.navigate([location, this.id]);\n    }\n\n  }\n  showAddTerminalsPopup(){\n    this.menuToggled = false;\n    if(this.id){\n      setTimeout(()=>{\n        this.terminalsPopupService.getAccountIdSubject().next(this.id);\n      },500);\n\n    }\n    this.terminalsPopupService.showAddTerminalsPopup();\n  }\n  closeMenu() {\n    this.menuToggled = false;\n  }\n  isAddTerminalsEnabled()\n  {\n    if(this.id==undefined)return true;\n    else return false;\n  }\n  applySearch() {\n    this.requestSent = false;\n    this.pageDetails= {\n      pageNumber: 1,\n      pageSize: 10,\n      totalNumberOfElements: 0,\n      pagesCount: 1\n    };\n    this.applyFilterToModel();\n    this.getTerminalsData();\n  }\n  isApplySearchDisabled()\n  {\n    return (this.terminalSearchForm.get('terminalSerialNumber')?.value === null\n        || this.terminalSearchForm.get('terminalSerialNumber')?.value === \"\")\n    && (this.terminalSearchForm.get('terminalType')?.value === null\n        || this.terminalSearchForm.get('terminalType')?.value === \"\")\n    && (this.terminalSearchForm.get('terminalSimCard')?.value === null\n        || this.terminalSearchForm.get('terminalSimCard')?.value === \"\")\n    && (this.terminalSearchForm.get('terminalStatus')?.value === null\n        || this.terminalSearchForm.get('terminalStatus')?.value === \"\")\n    && (this.terminalSearchForm.get('terminalProductVersion')?.value === null\n        || this.terminalSearchForm.get('terminalProductVersion')?.value === \"\")\n    && (this.terminalSearchForm.get('partner')?.value === null\n        || this.terminalSearchForm.get('partner')?.value === \"\")\n    && (this.terminalSearchForm.get('branch')?.value === null\n        || this.terminalSearchForm.get('branch')?.value === \"\");\n\n  }\n  getSerialNumbers() {\n    this.terminalService.getAllSerialNumbers(this.id).subscribe((response: any) => {\n      this.terminalSerialNumbers = response;\n      this.filteredTerminalSerialNumbers=this.terminalSerialNumbers;\n    });\n  }\n  searchDropDownForSerialNumber() {\n    let serialNumberDropDownFilter=this.multiSelectSearchForm.get('terminalSerialSearchInput')?.value;\n    serialNumberDropDownFilter=serialNumberDropDownFilter.toLowerCase();\n    let finalList=this.terminalSearchForm.get('terminalSerialNumber')?.value;\n    this.filteredTerminalSerialNumbers=this.terminalSerialNumbers.filter(\n      option =>\n        {\n          return option.toLowerCase().startsWith(serialNumberDropDownFilter)\n        }\n    );\n    for(let serialNumber of finalList)\n    {\n      if(!this.filteredTerminalSerialNumbers.includes(serialNumber))\n      {\n        this.filteredTerminalSerialNumbers.push(serialNumber);\n      }\n    }\n  }\n  clearSerialNumberSearchInput()\n  {\n    if(this.filteredTerminalSerialNumbers.length==0)\n    {\n      this.multiSelectSearchForm.get('terminalSerialSearchInput')?.setValue(\"\");\n      this.filteredTerminalSerialNumbers=this.terminalSerialNumbers;\n    }\n  }\n  getTerminalTypes() {\n    this.lookUpService.getLookUpsByKey('terminalType').subscribe((response: any) => {\n      this.terminalTypes = response.map((item: any) => item.displayName);\n    });\n  }\n  getSimCards() {\n    this.terminalService.getAllSIMCards(this.id).subscribe((response: any) => {\n      this.terminalSimCards = response;\n      this.filteredTerminalSearchSimCards=this.terminalSimCards;\n    });\n  }\n  searchDropDownForSimCard() {\n    let simCardDropDownFilter=this.multiSelectSearchForm.get('terminalSimCardSearchInput')?.value;\n    simCardDropDownFilter=simCardDropDownFilter.toLowerCase();\n    let finalList=this.terminalSearchForm.get('terminalSimCard')?.value;\n    this.filteredTerminalSearchSimCards=this.terminalSimCards.filter(\n      option =>\n        {\n          return option.toLowerCase().startsWith(simCardDropDownFilter)\n        }\n    );\n    for(let simCard of finalList)\n    {\n      if(!this.filteredTerminalSearchSimCards.includes(simCard))\n      {\n        this.filteredTerminalSearchSimCards.push(simCard);\n      }\n    }\n  }\n  clearSimCardSearchInput()\n  {\n    if(this.filteredTerminalSearchSimCards.length==0)\n    {\n      this.multiSelectSearchForm.get('terminalSimCardSearchInput')?.setValue(\"\");\n      this.filteredTerminalSearchSimCards=this.terminalSimCards;\n    }\n  }\n\n  addTerminalPopup(){\n    this.menuToggled = false;\n    this.terminalsPopupService.addTerminalPopup();\n  }\n\n  getTerminalProductVersions()\n  {\n    this.terminalService.getAllProductVersions(this.id).subscribe((response: any) => {\n      this.terminalProductVersions = response;\n    });\n  }\n  getPartners()\n  {\n    this.partnerService.getAllPartners().subscribe((response: any) => {\n      this.partnersList = response.list;\n      this.partners = response.list.map((item: any) => {\n        return this.lang === 'ar' ? item.nameAr : item.nameEn;\n      });\n      this.filteredSearchPartners=this.partners;\n    });\n  }\n  searchDropDownForPartner() {\n    let partnerDropDownFilter=this.multiSelectSearchForm.get('partnerSearchInput')?.value;\n    partnerDropDownFilter=partnerDropDownFilter.toLowerCase();\n    let finalList=this.terminalSearchForm.get('partner')?.value;\n    this.filteredSearchPartners=this.partners.filter(\n      option =>\n        {\n          return option.toLowerCase().includes(partnerDropDownFilter)\n        }\n    );\n    for(let partner of finalList)\n    {\n      if(!this.filteredSearchPartners.includes(partner))\n      {\n        this.filteredSearchPartners.push(partner);\n      }\n    }\n  }\n  clearPartnerSearchInput()\n  {\n    if(this.filteredSearchPartners.length==0)\n    {\n      this.multiSelectSearchForm.get('partnerSearchInput')?.setValue(\"\");\n      this.filteredSearchPartners=this.partners;\n    }\n  }\n  getBranches()\n  {\n    this.partnerService.getBranches(this.id).subscribe((response: any) => {\n      this.branches = response;\n    });\n  }\n  openDialog(){\n    this.terminalsPopupService.showAssignTerminalsPopup(this.terminalId);\n  }\n\n  editTerminal() {\n    if(this.id)\n      this.router.navigate([`/terminals/edit/${this.id}`], {\n        state: { terminalData: this.element  }\n      });\n    else\n      this.router.navigate([`/terminals/edit`], {\n        state: { terminalData: this.element  }\n      });\n  }\n  determineName(item : any) {\n    console.log(item);\n  if(this.id)\n    return this.lang === 'en' ? item?.branchNameEn || \"-\" : item?.branchNameAr || \"-\";\n  else\n    return this.lang === \"en\"? item?.partnerNameEn || \"-\" : item?.partnerNameAr || \"-\";\n  }\n  resetSearch()\n  {\n    let currentURL=this.router.url;\n    this.router.navigateByUrl('/', { skipLocationChange: true }).then(() => {\n      this.router.navigate([currentURL])}\n    );\n  }\n  permissionsExists(neededPermissions : string[]){\n    if(this.permissions == null || this.permissions == undefined)\n      return false;\n\n    return neededPermissions.some(permission =>{\n      return this.permissions?.includes(permission);\n    });\n  }\n\n  confirmDelete(event : Event){\n    event.stopPropagation();\n    const confirmationDialogData = {primaryTitle: Constants.DELETE , confirmationMessage: Constants.deleteTerminalConfiratmionMessage, confirmationSubMessage: Constants.deleteTerminalConfiratmionSubMessage , img: \"/../../assets/images/icn_warning message.svg\"};\n    this.confirmationDialogPopUpRef = this.genericPopupService.showPopup(ConfirmationPopupComponent,confirmationDialogData);\n    this.confirmationDialogPopUpRef.instance.emitSubmissionEvent.subscribe((event)=>{\n      if(event){\n        this.partnerService.deleteTerminal(this.terminalId).subscribe((resp : any)=>{\n        this.genericPopupService.closePopup(this.confirmationDialogPopUpRef);\n        this.openSuccessDialog();\n        },\n        (error=>{\n          this.genericPopupService.closePopup(this.confirmationDialogPopUpRef);\n            this.popUpService.showFailurePopup({\n              errorMessage: this.translateService.instant(\n                error?.error\n              ),\n            })\n        }))\n      }\n      else{\n        this.genericPopupService.closePopup(this.confirmationDialogPopUpRef);\n      }\n\n    })\n  }\n\n  openSuccessDialog(){\n    const successDialogData = {successMessage: Constants.deleteTerminalSuccessMsg};\n    this.successDialogPopUpRef = this.genericPopupService.showPopup(SuccessPopupComponent,successDialogData);\n    this.successDialogPopUpRef.instance.okClick.subscribe((()=>{\n      this.genericPopupService.closePopup(this.successDialogPopUpRef);\n      window.location.reload();\n    }));\n  }\n\n  updateTerminalName(){\n    this.dataSource.data = this.dataSource.data.map((data : any) =>({\n      ...data,\n      name : this.determineName(data),\n    }));\n  }\n}\n","<div class=\"gray-page\">\n    <div class=\"container\">\n        <div class=\"action-container\">\n    <h4>{{\"PARTNER_TERMINALS\" | translate}}</h4>\n    <div  class=\"d-flex align-self-start margins\" *ngIf=\"permissionsExists(['canCreateTerminal','canSyncTerminalsBulkSheet'])\">\n        <div class=\"menu-container\" #menu>\n          <img *ngIf=\"isAddTerminalsEnabled()\" class=\"ms-3 action-buttons\" (click)=\"toggleMenu()\" src=\"../../assets/images/icn_terminals.svg\" />\n          <div class=\"menu\" *ngIf=\"menuToggled\">\n            <button class=\"dropdown-item\" *ngIf=\"permissionsExists(['canCreateTerminal'])\" (click)=\"addTerminalPopup()\">\n              <img src=\"/../../assets/images/vuesax-linear-profile-add.svg\" />\n              <span class=\"mat-menu-span\">{{ \"ADD_TERMINAL\" | translate }}</span>\n            </button>\n            <button (click)=\"showAddTerminalsPopup()\" *ngIf=\"permissionsExists(['canSyncTerminalsBulkSheet'])\" class=\"dropdown-item\">\n              <img src=\"/../../assets/images/money-recive.svg\" />\n              <span class=\"mat-menu-span\">{{ \"ADD_TERMINALS_TEMPLATE\" | translate }}</span>\n            </button>\n          </div>\n        </div>\n    </div>\n</div>\n<form [formGroup]=\"terminalSearchForm\">\n    <div class=\"row mt-2\">\n        <div class=\"mt-2 col-lg-4 col-md-4\">\n            <mat-card-subtitle>{{\"SERIAL_NUMBER\" | translate}}</mat-card-subtitle>\n            <mat-select closeMatSelect (closed)=\"clearSerialNumberSearchInput()\" formControlName=\"terminalSerialNumber\"\n                placeholder=\"{{ 'SERIAL_NUMBER' | translate }}\"\n                multiple>\n                <mat-select-trigger>\n                     <span class=\"additional-selection\">\n                         {{terminalSearchForm.get('terminalSerialNumber')?.value?.length}} {{\"SELECTED\" |\n                         translate}} | <span class=\"required-title\">{{\"SERIAL_NUMBER\" | translate}}</span>\n                     </span>\n                 </mat-select-trigger>\n                 <form [formGroup]=\"multiSelectSearchForm\">\n                        <input englishWithSpecialCharacters formControlName=\"terminalSerialSearchInput\"\n                             (input)=\"searchDropDownForSerialNumber()\" (keydown)=\"$event.keyCode === 32? $event.stopPropagation() : true\"\n                            placeholder=\"{{ 'SERIAL_NUMBER' | translate }}\">\n                </form>\n                <mat-option *ngFor=\"let item of filteredTerminalSerialNumbers\"\n                    [value]=\"item\">\n                    {{ item | translate}}\n                </mat-option>\n            </mat-select>\n        </div>\n        <div class=\"mt-2 col-lg-4 col-md-4\">\n            <mat-card-subtitle>{{\"TERMINAL_TYPE\" | translate}}</mat-card-subtitle>\n            <mat-select closeMatSelect formControlName=\"terminalType\"\n                placeholder=\"{{ 'TERMINAL_TYPE' | translate }}\"\n                multiple>\n                <mat-select-trigger>\n                     <span class=\"additional-selection\">\n                         {{terminalSearchForm.get('terminalType')?.value?.length}} {{\"SELECTED\" |\n                         translate}} | <span class=\"required-title\">{{\"TERMINAL_TYPE\" | translate}}</span>\n                     </span>\n                 </mat-select-trigger>\n                <mat-option *ngFor=\"let item of terminalTypes\"\n                    [value]=\"item\">\n                    {{ item | translate}}\n                </mat-option>\n            </mat-select>\n        </div>\n        <div class=\"mt-2 col-lg-4 col-md-4\">\n            <mat-card-subtitle>{{\"SIM_CARD\" | translate}}</mat-card-subtitle>\n            <mat-select closeMatSelect (closed)=\"clearSimCardSearchInput()\" formControlName=\"terminalSimCard\"\n                placeholder=\"{{ 'SIM_CARD' | translate }}\"\n                multiple>\n                <mat-select-trigger>\n                     <span class=\"additional-selection\">\n                         {{terminalSearchForm.get('terminalSimCard')?.value?.length}} {{\"SELECTED\" |\n                         translate}} | <span class=\"required-title\">{{\"SIM_CARD\" | translate}}</span>\n                     </span>\n                 </mat-select-trigger>\n                 <form [formGroup]=\"multiSelectSearchForm\">\n                    <input defaultCharacters [regex]=\"numbersOnlyRegex\" formControlName=\"terminalSimCardSearchInput\"\n                         (input)=\"searchDropDownForSimCard()\" (keydown)=\"$event.keyCode === 32? $event.stopPropagation() : true\"\n                        placeholder=\"{{ 'SIM_CARD' | translate }}\">\n                </form>\n                <mat-option *ngFor=\"let item of filteredTerminalSearchSimCards\"\n                    [value]=\"item\">\n                    {{ item | translate}}\n                </mat-option>\n            </mat-select>\n        </div>\n        <div class=\"mt-2 col-lg-4 col-md-4\">\n            <mat-card-subtitle>{{\"STATUS\" | translate}}</mat-card-subtitle>\n            <mat-select closeMatSelect formControlName=\"terminalStatus\"\n                placeholder=\"{{ 'STATUS' | translate }}\"\n                multiple>\n                <mat-select-trigger>\n                     <span class=\"additional-selection\">\n                         {{terminalSearchForm.get('terminalStatus')?.value?.length}} {{\"SELECTED\" |\n                         translate}} | <span class=\"required-title\">{{\"STATUS\" | translate}}</span>\n                     </span>\n                 </mat-select-trigger>\n                <mat-option *ngFor=\"let item of terminalStatuses\"\n                    [value]=\"item\">\n                    {{ item | translate}}\n                </mat-option>\n            </mat-select>\n        </div>\n        <div class=\"mt-2 col-lg-4 col-md-4\">\n            <mat-card-subtitle>{{\"PRODUCT_VERSION\" | translate}}</mat-card-subtitle>\n            <mat-select closeMatSelect formControlName=\"terminalProductVersion\"\n                placeholder=\"{{ 'PRODUCT_VERSION' | translate }}\"\n                multiple>\n                <mat-select-trigger>\n                     <span class=\"additional-selection\">\n                         {{terminalSearchForm.get('terminalProductVersion')?.value?.length}} {{\"SELECTED\" |\n                         translate}} | <span class=\"required-title\">{{\"PRODUCT_VERSION\" | translate}}</span>\n                     </span>\n                 </mat-select-trigger>\n                <mat-option *ngFor=\"let item of terminalProductVersions\"\n                    [value]=\"item\">\n                    {{ item | translate}}\n                </mat-option>\n            </mat-select>\n        </div>\n        <div *ngIf=\"!id\" class=\"mt-2 col-lg-4 col-md-4\">\n            <mat-card-subtitle>{{\"PARTNERS\" | translate}}</mat-card-subtitle>\n            <mat-select closeMatSelect (closed)=\"clearPartnerSearchInput()\" formControlName=\"partner\"\n                placeholder=\"{{ 'PARTNERS' | translate }}\"\n                multiple>\n                <mat-select-trigger>\n                     <span class=\"additional-selection\">\n                         {{terminalSearchForm.get('partner')?.value?.length}} {{\"SELECTED\" |\n                         translate}} | <span class=\"required-title\">{{\"PARTNER\" | translate}}</span>\n                     </span>\n                 </mat-select-trigger>\n                 <form [formGroup]=\"multiSelectSearchForm\">\n                    <input englishOnly formControlName=\"partnerSearchInput\"\n                         (input)=\"searchDropDownForPartner()\" (keydown)=\"$event.keyCode === 32? $event.stopPropagation() : true\"\n                        placeholder=\"{{ 'PARTNER' | translate }}\">\n                </form>\n                <mat-option *ngFor=\"let item of filteredSearchPartners\"\n                    [value]=\"item\">\n                    {{ item }}\n                </mat-option>\n            </mat-select>\n        </div>\n        <div *ngIf=\"id\" class=\"mt-2 col-lg-4 col-md-4\">\n            <mat-card-subtitle>{{\"BRANCH\" | translate}}</mat-card-subtitle>\n            <mat-select closeMatSelect formControlName=\"branch\"\n                placeholder=\"{{ 'BRANCH' | translate }}\"\n                multiple>\n                <mat-select-trigger>\n                     <span class=\"additional-selection\">\n                         {{terminalSearchForm.get('branch')?.value?.length}} {{\"SELECTED\" |\n                         translate}} | <span class=\"required-title\">{{\"BRANCH\" | translate}}</span>\n                     </span>\n                 </mat-select-trigger>\n                <mat-option *ngFor=\"let item of branches\"\n                    [value]=\"item.name\">\n                    {{ lang === \"en\" ? item.name : item.nameAr | translate}}\n                </mat-option>\n            </mat-select>\n        </div>\n    </div>\n</form>\n<div class=\"row mt-4 buttons-container\">\n    <button (click)=\"resetSearch()\" class=\"reset-button\">{{\"RESET\" | translate}}</button>\n    <button [disabled]=\"isApplySearchDisabled()\" (click)=\"applySearch()\" class=\"apply-button\">{{\"APPLY\" | translate}}</button>\n</div>\n<div class=\"mt-2 table-container\">\n    <p *ngIf=\"dataSource.data.length>0\" class=\"title-small\">\n        {{\"SHOWING\" | translate}} {{dataSource.data.length}} {{\"TERMINALS_FROM\" | translate}} {{pageDetails.totalNumberOfElements}}\n    </p>\n    <p *ngIf=\"dataSource.data.length===0\" class=\"title-small\">\n        {{\"NO_RESULTS\" | translate}}\n    </p>\n\n    <div *ngIf=\"dataSource.data.length > 0\">\n        <app-generic-table  [maxColumns]=\"maxColumns\" (action)=\"performAction($event)\"\n        [displayedColumns]=\"displayedColumns\" [actionButtons]=\"actionButtons\" [dataSource]=\"dataSource\" tableName=\"Bulk-Members\">\n            <ul class=\"view-sheet-menu\">\n                <li (click)=\"editTerminal()\" *ngIf=\"permissionsExists(['canEditTerminal'])\">\n                    <span>\n                        <img class=\"cell-button\" src=\"/../../assets/images/icn_edit_red.svg\"/> {{\"EDIT\" | translate}}\n                    </span>\n                </li>\n                <li *ngIf=\"isEtisalat\" (click)=\"confirmDelete($event)\">\n                    <span><img class=\"cell-button\" src=\"/../../assets/images/trash.svg\" />  {{\"DELETE\" | translate}}</span>\n                </li>\n                <li (click)=\"openDialog()\" *ngIf=\"element && permissionsExists(['canAssignTerminal'])\">\n                    <span><img class=\"cell-button\" src=\"/../../assets/images/icn_edit_red.svg\" />  {{\"ASSIGN_TO\" | translate}}</span>\n                </li>\n            </ul>\n        </app-generic-table>\n\n        <app-custom-paginator (emitPageNumber)=\"changePage($event)\" [pageNumber]=\"pageDetails.pageNumber\"\n            [pageCount]=\"pageDetails.pagesCount\">\n        </app-custom-paginator>\n    </div>\n\n</div>\n</div>\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { MAT_SELECT_CONFIG } from '@angular/material/select';\nimport { LookupService, RegexConstants } from 'loyalty-common';\nimport { PartnerService } from '../../../../shared/services/partner-service.service';\nimport { BranchManagementService } from '../../../../shared/services/branch-management.service';\nimport { ActivatedRoute} from '@angular/router';\n\n@Component({\n  selector: 'app-branch-form',\n  templateUrl: './branch-form.component.html',\n  styleUrls: ['./branch-form.component.css'],\n  providers: [\n    {\n      provide: MAT_SELECT_CONFIG,\n      useValue: { overlayPanelClass: 'mat-select-overlay' }\n    }\n  ],\n})\nexport class BranchFormComponent implements OnInit {\n  constructor(private partnerService: PartnerService, private lookUpService: LookupService,private branchService:BranchManagementService,\n    private activatedRoute:ActivatedRoute\n  ) { }\n  branchId!:string;\n  ngOnInit() {\n    this.activatedRoute.queryParams.subscribe((params:any) => {\n      this.branchId = params.id;\n    });\n    this.getOptionValues(\"city\");\n    if(this.editBranch) {\n      this.initBranchData();\n    }\n  }\n  @Input() editBranch:boolean=false;\n  branchOldData!:any;\n\n  numbersOnlyRegex: RegExp = RegexConstants.INTEGER_REGEX;\n  englishWithSpecialCharsRegex: RegExp = RegexConstants.ENGLISH_SPECIAL_CHARS_REGEX;\n  arabicWithSpecialCharsRegex: RegExp = RegexConstants.ARABIC_SPECIAL_CHARS_REGEX;\n  dropDownOpened: boolean = false;\n  options: any[] = [];\n  branchInformation: FormGroup = new FormGroup({\n    branchEnglishName: new FormControl(\"\", [\n      Validators.required,\n      Validators.maxLength(100),\n      Validators.pattern(RegexConstants.ENGLISH_SPECIAL_CHARS_REGEX_STRING)\n    ]),\n    branchArabicName: new FormControl(\"\", [\n      Validators.required,\n      Validators.maxLength(100),\n      Validators.pattern(RegexConstants.ARABIC_SPECIAL_CHARS_REGEX_STRING)\n    ]),\n    city: new FormControl(\"\", [\n      Validators.required,\n    ]),\n    area: new FormControl(\"\", [\n      Validators.required,\n      Validators.maxLength(50),\n    ]),\n    address: new FormControl(\"\", [\n      Validators.required,\n      Validators.maxLength(150),\n    ]),\n    contactPerson: new FormControl(\"\", [\n      Validators.required,\n      Validators.maxLength(50),\n    ]),\n    contactEmail: new FormControl(\"\", [\n      Validators.pattern(RegexConstants.EMAIL_REGEX),\n      Validators.maxLength(50),\n    ]),\n    contactMobileNumber: new FormControl(\"\", [\n      Validators.maxLength(11),\n      Validators.minLength(11),\n      Validators.pattern(RegexConstants.MOBILE_NUMBER_REGEX)\n    ])\n\n  });\n  toggleArrow() {\n    this.dropDownOpened = !this.dropDownOpened;\n  }\n  getOptionsList(key: string) {\n    return this.options;\n  }\n  initBranchData()\n  {\n    this.branchService.getBranchDetails(this.branchId).subscribe((response:any)=>{\n      this.branchOldData=response;\n      this.branchInformation.get('branchEnglishName')?.setValue(this.branchOldData.name);\n      this.branchInformation.get('branchArabicName')?.setValue(this.branchOldData.nameAr);\n      this.branchInformation.get('city')?.setValue(this.branchOldData.cityId);\n      this.branchInformation.get('area')?.setValue(this.branchOldData.area);\n      this.branchInformation.get('address')?.setValue(this.branchOldData.address);\n      this.branchInformation.get('contactPerson')?.setValue(this.branchOldData.contactPerson);\n      this.branchInformation.get('contactEmail')?.setValue(this.branchOldData.contactEmail);\n      this.branchInformation.get('contactMobileNumber')?.setValue(this.branchOldData.contactPhoneNumber);\n    });\n  }\n\n\n  mapInvalidFormatError(formControlName: string, message: string) {\n    let formControlInput = this.branchInformation.get(formControlName);\n    formControlInput?.setErrors({ ...formControlInput.errors, invalidFormat: message });\n  }\n  checkPhoneNumber() {\n    if (this.branchInformation.get('contactMobileNumber')?.invalid) {\n      this.mapInvalidFormatError(\"contactMobileNumber\", \"INVALID_PHONE_NUMBER\");\n    }\n  }\n  checkEmail() {\n    if (this.branchInformation.get('contactEmail')?.invalid) {\n      this.mapInvalidFormatError(\"contactEmail\", \"INVALID_EMAIL\");\n    }\n  }\n  checkUniquePartnerEnglishName() {\n    const name = this.branchInformation.get('branchEnglishName')?.value;\n    if(name !== this.branchOldData.name){\n      this.partnerService.checkbranchName(name, this.branchId, 'en').subscribe(resp => { },\n        error => {\n\n          this.mapAlreadyExistingError(\"branchEnglishName\", \"BRANCH_NAME_EXISTS\");\n        }\n      )\n    }\n  }\n  checkUniquePartnerArabicName() {\n    const name = this.branchInformation.get('branchArabicName')?.value;\n    if(name !== this.branchOldData.nameAr){\n      this.partnerService.checkbranchName(name, this.branchId, 'ar').subscribe(resp => {\n      },\n        error => {\n          this.mapAlreadyExistingError(\"branchArabicName\", \"BRANCH_NAME_EXISTS\");\n        }\n      )\n    }\n  }\n  mapAlreadyExistingError(formControlName: string, message: string) {\n    let formControlInput = this.branchInformation.get(formControlName);\n    formControlInput?.setErrors({ ...formControlInput.errors, alreadyExistingError: message });\n  }\n  getOptionValues(key: string) {\n\n    this.lookUpService.getLookUpsByKey(key).subscribe((response:any) => {\n      this.options = response;\n    })\n  }\n  checkValidity() {\n    if (this.branchInformation.get('contactMobileNumber')?.invalid || this.branchInformation.get('contactEmail')?.invalid) {\n      return false;\n    }\n    let contactEmail = this.branchInformation.get('contactEmail')?.value;\n    let contactMobileNumber = this.branchInformation.get('contactMobileNumber')?.value;\n    if (contactEmail == \"\" && contactMobileNumber == \"\") {\n      return false;\n    }\n    return this.branchInformation.valid;\n  }\n\n  mapCityNameFromLookUps(id : number){\n    let city = this.options.find((city : any) => city.id == id);\n    return city ? city.displayName : undefined;\n  }\n}\n","<mat-card-content>\n    <h5 class=\"heading-text\">\n        {{ \"BRANCH_INFO\" | translate }}\n    </h5>\n    <form [formGroup]=\"branchInformation\">\n        <div class=\"row\">\n            <div class=\"col-lg-4 col-md-6 mb-3\">\n                <mat-card-subtitle>{{\"BRANCH_ENGLISH_NAME\"|translate}}\n                </mat-card-subtitle>\n                <input defaultCharacters [regex]=\"englishWithSpecialCharsRegex\" maxlength=\"100\" class=\"placeholder-padding\" formControlName=\"branchEnglishName\" \n                placeholder=\"{{'BRANCH_ENGLISH_NAME' | translate}}\"\n                (change)=\"checkUniquePartnerEnglishName()\">\n                <div class=\"error-container\"\n                    *ngIf=\"branchInformation.get('branchEnglishName')?.hasError('alreadyExistingError')\">\n                    <span class=\"error-message\">\n                        {{branchInformation.get('branchEnglishName')?.getError('alreadyExistingError')\n                        | translate}}\n                    </span>\n                </div>\n                <div *ngIf='branchInformation.get(\"branchEnglishName\")?.value?.startsWith(\" \")'>\n                    <span class=\"error-message\">\n                        {{\"BRANCH_SPACE_INVALID\" | translate}}\n                    </span>\n                </div>\n            </div>\n            <div class=\"col-lg-4 col-md-6 mb-3\">\n                <mat-card-subtitle>{{\"BRANCH_ARABIC_NAME\"|translate}}\n                </mat-card-subtitle>\n                <input defaultCharacters [regex]=\"arabicWithSpecialCharsRegex\" maxlength=\"100\" class=\"placeholder-padding\" formControlName=\"branchArabicName\" \n                placeholder=\"{{'BRANCH_ARABIC_NAME' | translate}}\"\n                (change)=\"checkUniquePartnerArabicName()\">\n                <div class=\"error-container\"\n                    *ngIf=\"branchInformation.get('branchArabicName')?.hasError('alreadyExistingError')\">\n                    <span class=\"error-message\">\n                        {{branchInformation.get('branchArabicName')?.getError('alreadyExistingError')\n                        | translate}}\n                    </span>\n                </div>\n                <div *ngIf='branchInformation.get(\"branchArabicName\")?.value?.startsWith(\" \")'>\n                    <span class=\"error-message\">\n                        {{\"BRANCH_SPACE_INVALID\" | translate}}\n                    </span>\n                </div>\n            </div>\n        </div>\n        <div class=\"row\">\n            <mat-card-subtitle class=\"branch-subtitle mb-2\">{{\"ADDRESS\"|translate}}\n            </mat-card-subtitle>\n        </div>\n        <div class=\"row\">\n            <div class=\"col-lg-4 col-md-6\">\n                <mat-card-subtitle>{{\"CITY\"|translate}}\n                </mat-card-subtitle>\n                <mat-select closeMatSelect [ngClass]=\"dropDownOpened? 'partner-management-module-arrow-up' : 'partner-management-module-arrow-down'\" formControlName=\"city\"\n                    placeholder=\"{{'CITY'|translate}}\" (openedChange)=\"toggleArrow()\">\n                    <mat-select-trigger>\n                        <span class=\"example-additional-selection\">\n                            {{mapCityNameFromLookUps(branchInformation.get(\"city\")?.value)}}\n                        </span>\n                    </mat-select-trigger>\n                    <mat-option class=\"custom-mat-option\" *ngFor=\"let option of getOptionsList('city')\"\n                        [value]=\"option['id']\">\n                        {{ option['displayName'] }}\n                    </mat-option>\n                </mat-select>\n            </div>\n            <div class=\"col-lg-4 col-md-6\">\n                <mat-card-subtitle>{{\"AREA\"|translate}}\n                </mat-card-subtitle>\n                <input maxlength=\"50\" class=\"placeholder-padding\" formControlName=\"area\"\n                placeholder=\"{{'AREA'|translate}}\">\n                <div class=\"error-container\"\n                    *ngIf=\"branchInformation.get('area')?.hasError('alreadyExistingError')\">\n                    <span class=\"error-message\">\n                        {{branchInformation.get('area')?.getError('alreadyExistingError')\n                        | translate}}\n                    </span>\n                </div>\n            </div>\n            <div class=\"col-lg-4 col-md-6\">\n                <mat-card-subtitle>{{\"ADDRESS\"|translate}}\n                </mat-card-subtitle>\n                <input maxlength=\"150\" class=\"placeholder-padding\" formControlName=\"address\"\n                placeholder=\"{{'ADDRESS'|translate}}\">\n                <div class=\"error-container\"\n                    *ngIf=\"branchInformation.get('address')?.hasError('alreadyExistingError')\">\n                    <span class=\"error-message\">\n                        {{branchInformation.get('address')?.getError('alreadyExistingError')\n                        | translate}}\n                    </span>\n                </div>\n            </div>\n        </div>\n        <div class=\"row mt-4\">\n            <mat-card-subtitle class=\"branch-subtitle mb-2\">{{\"CONTACT\"|translate}}\n            </mat-card-subtitle>\n        </div>\n        <div class=\"row\">\n            <div class=\"col-lg-4 col-md-6\">\n                <mat-card-subtitle>{{\"CONTACT_PERSON\"|translate}}\n                </mat-card-subtitle>\n                <input maxlength=\"50\" class=\"placeholder-padding\" formControlName=\"contactPerson\"\n                placeholder=\"{{'CONTACT_PERSON'|translate}}\">\n                <div class=\"error-container\"\n                    *ngIf=\"branchInformation.get('contactPerson')?.hasError('alreadyExistingError')\">\n                    <span class=\"error-message\">\n                        {{branchInformation.get('contactPerson')?.getError('alreadyExistingError')\n                        | translate}}\n                    </span>\n                </div>\n            </div>\n            <div class=\"col-lg-4 col-md-6\">\n                <mat-card-subtitle>{{\"EMAIL\"|translate}}\n                </mat-card-subtitle>\n                <input defaultCharacters [regex]=\"englishWithSpecialCharsRegex\" maxlength=\"50\" class=\"placeholder-padding\" formControlName=\"contactEmail\" (change)=\"checkEmail()\"\n                placeholder=\"{{'EMAIL'|translate}}\">\n                <div class=\"error-container\"\n                    *ngIf=\"branchInformation.get('contactEmail')?.hasError('invalidFormat')\">\n                    <span class=\"error-message\">\n                        {{branchInformation.get('contactEmail')?.getError('invalidFormat')\n                        | translate}}\n                    </span>\n                </div>\n            </div>\n            <div class=\"col-lg-4 col-md-6\">\n                <mat-card-subtitle>{{\"MOBILE_NUMBER\"|translate}}\n                </mat-card-subtitle>\n                <input defaultCharacters [regex]=\"numbersOnlyRegex\" class=\"placeholder-padding\" formControlName=\"contactMobileNumber\" (change)=\"checkPhoneNumber()\"\n                placeholder=\"{{'MOBILE_NUMBER'|translate}}\">\n                <div class=\"error-container\"\n                    *ngIf=\"branchInformation.get('contactMobileNumber')?.hasError('invalidFormat')\">\n                    <span class=\"error-message\">\n                        {{branchInformation.get('contactMobileNumber')?.getError('invalidFormat')\n                        | translate}}\n                    </span>\n                </div>\n            </div>\n        </div>\n    </form>\n</mat-card-content>\n","import { Component, Input, SimpleChanges } from '@angular/core';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { ColumnDefinition } from 'loyalty-common';\n\n@Component({\n  selector: 'app-branch-list',\n  templateUrl: './branch-list.component.html',\n  styleUrls: ['./branch-list.component.css']\n})\nexport class BranchListComponent {\n  @Input()\n  branchListData!: any[];\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\n  displayedColumns: ColumnDefinition[] = [\n    { headerLabel: 'BRANCH_ID', field: 'branchID'},\n    { headerLabel: 'BRANCH_NAME', field: 'branchEnglishName'},\n    { headerLabel: 'CITY', field: 'city'},\n    { headerLabel: 'AREA', field: 'area'},\n    { headerLabel: 'ADDRESS', field: 'address'},\n    { headerLabel: 'CONTACT_PERSON', field: 'contactPerson'},\n    { headerLabel: 'CONTACT_PHONE_NUMBER', field: 'phoneNumber'},\n    { headerLabel: 'EMAIL', field: 'email'},\n    { headerLabel: 'TERMINALS', field: 'terminals'}\n  ];\n\n  actionButtons: string[] = ['delete','edit'];\n\n  ngOnInit() {\n    this.fillDataSource();\n  }\n\n  ngOnChanges(changes: SimpleChanges){\n    this.fillDataSource();\n  }\n  fillDataSource() {\n    this.dataSource.data = this.branchListData;\n  }\n\n\n}\n","<app-generic-table *ngIf=\"dataSource.data.length > 0\" [maxColumns]=\"10\"\n[displayedColumns]=\"displayedColumns\" [actionButtons]=\"actionButtons\" [dataSource]=\"dataSource\" class=\"mb-4\"\ntableName = \"branch-list\">\n</app-generic-table>","import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { BranchFormComponent } from '../branch-form/branch-form.component';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n  selector: 'app-branch',\n  templateUrl: './branch.component.html',\n  styleUrls: ['./branch.component.css']\n})\nexport class BranchComponent {\n  isBranchFormOpened: boolean = true;\n  isBranchVisible:boolean=true;\n  @Output() onAddNewBranch: EventEmitter<any> = new EventEmitter();\n  ngOnInit() {\n  }\n  branchListData: any[] = [];\n  @ViewChild(BranchFormComponent) branchFormComponent!: BranchFormComponent;\n\n  onCreateBranch(numberOfTerminals: any , terminalListData : any) {\n    let branchInformation = this.branchFormComponent.branchInformation;\n    if (this.validatebranchCreation(branchInformation)) {\n      let cityId = branchInformation.get(\"city\")?.value\n      let branchInformationMapped = {\n        branchID: this.branchListData.length+1,\n        branchEnglishName: branchInformation.get('branchEnglishName')?.value,\n        branchArabicName: branchInformation.get('branchArabicName')?.value,\n        terminals: numberOfTerminals,\n        cityId : branchInformation.get(\"city\")?.value,\n        city: this.branchFormComponent.mapCityNameFromLookUps(cityId),\n        area : branchInformation.get('area')?.value,\n        address : branchInformation.get('address')?.value,\n        contactPerson : branchInformation.get('contactPerson')?.value,\n        phoneNumber: branchInformation.get('contactMobileNumber')?.value,\n        email: branchInformation.get('contactEmail')?.value,\n        terminalListData : terminalListData,\n        status:\"ACTIVE\",\n        country:\"EGYPT\"\n      };\n      this.branchListData = [...this.branchListData, branchInformationMapped];\n      this.isBranchFormOpened = false;\n      this.branchFormComponent.branchInformation.reset();\n      return true;\n    }\n    return false;\n  }\n\n  openNewBranchForm() {\n    this.isBranchFormOpened = true;\n    this.onAddNewBranch.emit();\n  }\n  branchEnglishNameExists(name:string)\n  {\n    for(let branch of this.branchListData)\n    {\n      if(branch['branchEnglishName']==name)\n      {\n        return true;\n      }\n    }\n    return false;\n  }\n  branchArabicNameExists(name:string)\n  {\n    for(let branch of this.branchListData)\n    {\n      if(branch['branchArabicName']==name)\n      {\n        return true;\n      }\n    }\n    return false;\n  }\n\n\n  validatebranchCreation(branchInformation:FormGroup) {\n    if(branchInformation.get('branchEnglishName')?.invalid)\n    {\n      return false;\n    }\n    else\n    {\n      let name=branchInformation.get('branchEnglishName')?.value;\n      if(this.branchEnglishNameExists(name))\n      {\n        this.mapAlreadyExistingError(\"branchEnglishName\",\"BRANCH_NAME_EXISTS\");\n        return false;\n      }\n    }\n    if(branchInformation.get('branchArabicName')?.invalid)\n    {\n      return false;\n    }\n    else\n    {\n      let name=branchInformation.get('branchArabicName')?.value;\n      if(this.branchArabicNameExists(name))\n      {\n        this.mapAlreadyExistingError(\"branchArabicName\",\"BRANCH_NAME_EXISTS\");\n        return false;\n      }\n    }\n    if(branchInformation.get('branchUnit')?.invalid)\n    {\n      return false;\n    }\n    if(branchInformation.get('city')?.invalid)\n    {\n      return false;\n    }\n    if(branchInformation.get('area')?.invalid)\n    {\n      return false;\n    }\n    if(branchInformation.get('contactPerson')?.invalid)\n    {\n      return false;\n    }\n    if(branchInformation.get('phoneNumber')?.invalid)\n    {\n      return false;\n    }\n    if(branchInformation.get('email')?.invalid)\n    {\n      return false;\n    }\n    return true;\n  }\n  mapAlreadyExistingError(formControlName: string, message: string) {\n    let formControlInput = this.branchFormComponent?.branchInformation.get(formControlName);\n    formControlInput?.setErrors({ ...formControlInput.errors, alreadyExistingError: message });\n  }\n}\n","<div class=\"table-margin\">\n    <app-branch-list *ngIf=\"branchListData.length>0\" [branchListData]=\"branchListData\">\n    </app-branch-list>\n</div>\n<br *ngIf=\"branchListData.length>0 && isBranchFormOpened\" class=\"break\"/>\n<div (click)=\"openNewBranchForm()\" class=\"add-new mb-3\" *ngIf=\"branchListData.length > 0 && !isBranchFormOpened\">\n    <img src=\"../../assets/images/icn_create_add.svg\" alt=\"\"><span class=\"add-new-text\">{{\"ADD_NEW_BRANCH\"|translate}}</span>\n</div>\n<mat-card *ngIf=\"isBranchFormOpened\">\n    <mat-card-subtitle  class=\"inline-margin mt-3\">\n        {{\"BRANCH_INFO\"|translate}}\n    </mat-card-subtitle>\n    <app-branch-form>\n    </app-branch-form>\n</mat-card>","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ContentManagementService, PopupService } from 'loyalty-common';\nimport { Papa } from 'ngx-papaparse';\nimport { MediaItemModel } from 'loyalty-common';\nimport { Constants } from '../../../shared/constants/constants';\nimport { BulkManagementService } from '../../../shared/services/bulk-management.service';\nimport { Observable } from 'rxjs';\nimport { SyncBasicBulkSheetModel } from '../../../shared/model/SyncBranchesBulkModel';\n\n\n@Component({\n  selector: 'app-bulk-add-branches',\n  templateUrl: './bulk-add-branches.component.html',\n  styleUrls: ['./bulk-add-branches.component.css']\n})\nexport class BulkAddBranchesComponent {\n  uploadProgress: number = 0;\n  uploadErrorMessage = '';\n  uploaded = false;\n  isSyncing: boolean = false;\n  giftBulkFormData!: FormData;\n  @Output() activateNext: EventEmitter<any> = new EventEmitter();\n  maxFileSize: number = Constants.MAX_FILE_SIZE;\n  @Input() partnerId!: string;\n  stepOne: boolean = false;\n  stepTwo: boolean = false;\n  stepThree: boolean = false;\n  fileMessage = Constants.FILE_UPLOAD;\n  subscription!: any;\n  addBranchesButtonEnabled: boolean = false;\n  mediaItemModel!: MediaItemModel;\n  @Input() isShowSuccessPopup: boolean = true;\n  constructor(\n    private contentMgmtSvc: ContentManagementService,\n    private bulkManagementService: BulkManagementService,\n    private papa: Papa,\n    private popupService: PopupService,\n    private translate: TranslateService,\n    private router: Router,\n  ) { }\n\n\n  ngOnInit() {\n  }\n\n  downloadFileRedirect() {\n    this.contentMgmtSvc.getTemplates(Constants.ADD_BRANCHES_TEMPLATE)\n      .subscribe((data: any) => {\n        this.contentMgmtSvc.downloadTemplateCSVByRedirect(\n          data[0].template.url,\n          \"\",\n          Constants.ADD_BRANCHES_TEMPLATE_NAME\n        );\n        this.stepOne = true;\n        this.stepTwo = true;\n      });\n  }\n  validateData($event: any) {\n    let file: File = $event.get('fileData');\n    this.uploadProgress = 25;\n    this.validateCsvFile(file);\n  }\n\n  validateCsvFile(file: File) {\n    this.papa.parse(file, {\n      header: true,\n      beforeFirstChunk: (chunk) => {\n        const lines = chunk.split(/\\r\\n|\\r|\\n/);\n        const header = lines[0].split(',');\n        this.uploadErrorMessage = '';\n        if (\n          !Constants.ADD_BRANCHES_HEADERS.every((field) =>\n            header.includes(field)\n          )) {\n          this.addBranchesButtonEnabled = false;\n          this.uploadProgress = 0;\n          this.uploadErrorMessage = Constants.INVALID_HEADER_ROWS;\n        }\n      },\n      complete: (result: any) => {\n        if (this.uploadErrorMessage?.length > 0)\n          return;\n        if (\n          result.data &&\n          result.data.length > 1 &&\n          result.data.length < 200) {\n          this.uploadErrorMessage = '';\n          const formData = new FormData();\n          formData.append('file', file);\n          this.giftBulkFormData = formData;\n          setTimeout(() => {\n            this.uploadProgress = 100;\n            this.addBranchesButtonEnabled = true;\n            this.activateNext.emit(true);\n          }, 1000);\n        } else {\n          this.addBranchesButtonEnabled = false;\n          this.uploadErrorMessage = Constants.INVALID_ROWS_EMPTY;\n          this.uploadProgress = 0;\n        }\n          if (result.data.length > 200) {\n          this.addBranchesButtonEnabled = false;\n          this.uploadErrorMessage = Constants.INVALID_ROWS_EXCEEDED_MAX;\n        }\n      },\n      error: (error: any) => {\n        if (this.uploadErrorMessage === '')\n          this.uploadErrorMessage = Constants.UPLOAD_ERROR;\n        this.uploadProgress = 0;\n      },\n    });\n\n  }\n\n  onDeleteFile() {\n    this.activateNext.emit(false);\n  }\n  onAddBranches() {\n    if (this.partnerId)\n      this.addBranchesBulkSheet()\n    else this.syncBulkSheet()\n  }\n\n  syncBulkSheet() {\n    this.isSyncing = true;\n    this.uploadBranchesFile().subscribe(\n      (res: any) => {\n        this.isSyncing = false\n        this.uploaded = true;\n      },\n      (error: any) => {\n        this.isSyncing = false\n        this.uploaded = true;\n      }\n    );\n  }\n\n  addBranchesBulkSheet() {\n    this.isSyncing = true;\n    this.uploadBranchesFile().subscribe(\n      (res: any) => {\n        const syncBranchesBulkSheetModel: SyncBasicBulkSheetModel = { fileUrl: this.mediaItemModel.url, domainId: this.partnerId }\n        this.bulkManagementService.syncBranchesBulkSheetEntries(syncBranchesBulkSheetModel).subscribe(\n          (res: any) => {\n            this.isSyncing = false\n            this.uploaded = true;\n          },\n          (error: any) => {\n            this.isSyncing = false\n            this.uploaded = true;\n          }\n        )\n      },\n      (error: any) => {\n        this.isSyncing = false\n        this.uploaded = true;\n      }\n    );\n  }\n\n  uploadBranchesFile(): Observable<any> {\n    return new Observable((observer) => {\n      this.contentMgmtSvc.UploadMedia(this.giftBulkFormData).subscribe(\n        (res: any) => {\n          if (this.isShowSuccessPopup) {\n            this.popupService.showSuccessPopup(this.translate.instant(\"BRANCHES_ADDED\"))\n              .then(() => {\n                if (this.partnerId)\n                  this.router.navigate(['/details', this.partnerId]);\n              });\n          }\n          this.mediaItemModel = res;\n          observer.next();\n          observer.complete();\n        },\n        (error: any) => {\n          this.uploadErrorMessage = Constants.INVALID_HEADER_ROWS;\n          this.popupService.showFailurePopup({\n            errorMessage: this.translate.instant(error?.errorCode || Constants.UPLOAD_ERROR),\n          });\n          observer.error();\n          observer.complete();\n        }\n      );\n    });\n  }\n\n  isFileValid() {\n    return !!!this.uploadErrorMessage && this.giftBulkFormData?.has('file');\n  }\n\n  activateAddBranchesButton(value: boolean) {\n    this.addBranchesButtonEnabled = value;\n    this.uploadErrorMessage = '';\n  }\n\n}\n","<mat-card-content class=\"process-container\">\n  <div class=\"row cards-container\">\n    <mat-card class=\"mt-3 small-card col-lg-4 col-md-4\">\n      <mat-card-content>\n        <img *ngIf=\"stepOne\" class=\"right-icon\" src=\"/../../assets/images/right-icon.svg\" />\n        <div class=\"download-file-container\">\n          <div class=\"download-file mt-3\">\n            <img class=\"mt-2\" src=\"/../../assets/images/vuesax-bold-document-download.svg\" />\n          </div>\n          <mat-card-subtitle class=\"mt-2\">{{\n            \"DOWNLOAD_SAMPLE_FILE\" | translate\n            }}</mat-card-subtitle>\n          <button (click)=\"downloadFileRedirect()\" class=\"primary-button header-buttons mt-2\">\n            {{ \"DOWNLOAD\" | translate }}\n          </button>\n        </div>\n      </mat-card-content>\n    </mat-card>\n    <mat-card class=\"mt-3 small-card col-lg-3 col-md-3\">\n      <mat-card-content>\n        <img *ngIf=\"stepTwo\" class=\"right-icon\" src=\"/../../assets/images/right-icon.svg\" />\n        <div class=\"download-file-container\">\n          <div class=\"download-file mt-3\">\n            <img class=\"mt-2\" src=\"/../../assets/images/vuesax-bold-document-text.svg\" />\n          </div>\n          <mat-card-subtitle class=\"mt-2\">{{\n            \"FILL_TEMPLATE\" | translate\n            }}</mat-card-subtitle>\n          <div class=\"sub-title-container\">\n            <span class=\"mt-2 sub-title\">{{\n              \"PLEASE_FILL\" | translate\n              }}</span>\n          </div>\n        </div>\n      </mat-card-content>\n    </mat-card>\n    <mat-card class=\"mt-3 small-card col-lg-3 col-md-3\">\n      <mat-card-content>\n        <img *ngIf=\"uploadProgress >= 100\" class=\"right-icon\" src=\"/../../assets/images/right-icon.svg\" />\n        <div class=\"download-file-container\">\n          <div class=\"download-file mt-3\">\n            <img class=\"mt-2\" src=\"/../../assets/images/vuesax-bold-document-upload.svg\" />\n          </div>\n          <mat-card-subtitle class=\"mt-2\">{{\n            \"UPLOAD_SAMPLE_FILE\" | translate\n            }}</mat-card-subtitle>\n          <app-file-upload [displayMessage]=\"fileMessage\" [uploadProgress]=\"uploadProgress\"\n            (emitFileData)=\"validateData($event)\" (emitFileData)=\"activateAddBranchesButton(true)\"\n            (onDeleteFile)=\"onDeleteFile()\" (onDeleteFile)=\"activateAddBranchesButton(false)\"\n            [maxFileSize]=\"maxFileSize\">\n            <app-error-message *ngIf=\"!!uploadErrorMessage\">{{\n              uploadErrorMessage | translate\n              }}</app-error-message>\n          </app-file-upload>\n        </div>\n      </mat-card-content>\n    </mat-card>\n  </div>\n  <button *ngIf=\"!partnerId\" [disabled]=\"!addBranchesButtonEnabled\" (click)=\"onAddBranches()\"\n    class=\"bottom-end black-button\">\n    {{ \"ADD_BRANCHES\" | translate }}\n  </button>\n</mat-card-content>","import { Component, Input, SimpleChanges } from '@angular/core';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { ColumnDefinition } from 'loyalty-common';\n\n@Component({\n  selector: 'app-terminal-list',\n  templateUrl: './terminal-list.component.html',\n  styleUrls: ['./terminal-list.component.css']\n})\nexport class TerminalListComponent {\n  @Input()\n  terminalListData!: any[];\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\n  displayedColumns: ColumnDefinition[] = [\n    { headerLabel: 'SERIAL_NUMBER', field: 'serialNumber' },\n    { headerLabel: 'SIM_CARD', field: 'simCard' },\n    { headerLabel: 'TERMINAL_TYPE', field: 'terminalType' },\n    { headerLabel: 'STATUS', field: 'status' },\n  ];\n\n  actionButtons: string[] = ['delete','edit'];\n\n  ngOnInit() {\n    this.fillDataSource();\n  }\n  ngOnChanges(changes: SimpleChanges){\n    this.fillDataSource();\n  }\n  fillDataSource() {\n    this.dataSource.data = this.terminalListData;\n  }\n}\n","<div class=\"gray-title small\">\n    {{'Terminals' | translate}}\n</div>\n<app-generic-table *ngIf=\"dataSource\"  [maxColumns]=\"4\"\n[displayedColumns]=\"displayedColumns\" [actionButtons]=\"actionButtons\" [dataSource]=\"dataSource\"\ntableName = \"terminal-list\">\n</app-generic-table>","import { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Output, Input, ViewChild } from '@angular/core';\nimport { TerminalComponent } from './terminal-information/terminal/terminal.component';\nimport { FormGroup } from '@angular/forms';\nimport { BranchComponent } from './branch-information/branch/branch.component';\nimport { BulkAddBranchesComponent } from './bulk-add-branches/bulk-add-branches.component';\n\n@Component({\n  selector: 'app-branches-and-terminals',\n  templateUrl: './branches-and-terminals.component.html',\n  styleUrls: ['./branches-and-terminals.component.css']\n})\nexport class BranchesAndTerminalsComponent implements AfterViewInit {\n  @ViewChild(TerminalComponent)terminalComponent!:TerminalComponent;\n  @ViewChild(BranchComponent)branchComponent!:BranchComponent;\n  @ViewChild(BulkAddBranchesComponent)bulkBranchesComponent!:BulkAddBranchesComponent;\n  terminalListData:any[]=[];\n  isTerminalFormOpened: boolean = true;\n  terminalVisible = true;\n  isBranchVisible: boolean = true;\n  numberOfTerminals:number=0;\n  @Output() onCreateNewTerminal: EventEmitter<any>  = new EventEmitter();\n  selectedBranchAdditionMethod: \"manual\" | \"template\" = \"manual\";\n  showContent: boolean = false;\n  @Input() titleTranslationKey: string = \"\"\n  @Input() isAddTerminalRequired: boolean = true;\n  constructor(private cdr: ChangeDetectorRef){}  \n  ngAfterViewInit() \n  {\n    this.cdr.detectChanges();\n  }\n  isAddTerminalDisabled()\n  {\n    return this.terminalComponent?.terminalInformation?.invalid;\n  }\n  openNewTerminalForm()\n  {\n    this.isTerminalFormOpened = true;\n    this.terminalVisible = true;\n  }\n  onCreateTerminal() {\n    let terminalInformation = this.terminalComponent?.terminalInformation;\n    let terminalInformationMapped = {\n      serialNumber: terminalInformation.get('serialNumber')?.value,\n      terminalType: terminalInformation.get('terminalType')?.value,\n      password: terminalInformation.get('password')?.value,\n      simCard: terminalInformation.get('simCard')?.value,\n      status: \"Active\"\n    };\n    if(this.validateTerminal(terminalInformation))\n    {\n      this.terminalListData = [...this.terminalListData, terminalInformationMapped];\n      this.isTerminalFormOpened = false;\n      this.terminalComponent?.terminalInformation.reset();\n      this.onCreateNewTerminal.emit();\n      this.numberOfTerminals++;\n      this.terminalVisible=false;\n    }\n  }\n  validateTerminal(terminalInformation:FormGroup)\n  {\n    let currentSerialNumber=terminalInformation.get('serialNumber')?.value;\n    if(this.serialNumberExists(currentSerialNumber))\n    {\n      this.terminalComponent.mapAlreadyExistingError(\"serialNumber\",\"SERIAL_NUMBER_EXISTS\");\n      return false;\n    }\n    let currentSimCard=terminalInformation.get('simCard')?.value;\n    if(this.simCardExists(currentSimCard))\n    {\n      this.terminalComponent.mapAlreadyExistingError(\"simCard\",\"SIM_CARD_EXISTS\");\n      return false;\n    }\n    return true;\n  }\n\n  serialNumberExists(serialNumber:string)\n  {\n    for(let terminal of this.terminalListData)\n    {\n      if(terminal['serialNumber']==serialNumber)\n      {\n        return true;\n      }\n    }\n    return false;\n  }\n  simCardExists(simCard:string)\n  {\n    for(let terminal of this.terminalListData)\n    {\n      if(terminal['simCard']==simCard)\n      {\n        return true;\n      }\n    }\n    return false;\n  }\n  removeTerminal()\n  {\n    if(this.numberOfTerminals > 0)\n    {\n      this.terminalVisible = false;\n    }\n  }\n  onCreateBranch() {\n    if (this.isCreateBranchValid()) {\n      if(this.branchComponent.onCreateBranch(this.numberOfTerminals,this.terminalListData))\n      {\n        this.branchComponent.isBranchVisible=false;\n        this.terminalListData = [];\n        this.numberOfTerminals=0;\n      }\n    }\n  }\n  isCreateBranchValid() {\n    return (this.numberOfTerminals>0 || !this.isAddTerminalRequired) && this.branchComponent?.branchFormComponent?.checkValidity();\n  }\n  onAddNewBranch() {\n    this.isBranchVisible = true;\n    this.terminalVisible=true;\n  }\n\n  selectBranchAdditionMethod(method: \"manual\" | \"template\") {\n    this.selectedBranchAdditionMethod = method;\n  }\n\n  nextStep() {\n    this.showContent = true;\n  }\n\n  previousStep() {\n    this.showContent = false;\n  }\n}\n","<div class=\"card\">\n    <mat-card-subtitle class=\"mt-3 inline-margin\" style=\"font-family: primary-font-medium;\">\n        {{titleTranslationKey|translate}}\n    </mat-card-subtitle>\n    <div [hidden]=\"showContent\">\n        <mat-card-content class=\"mt-3 d-flex flex-column justify-content-between\" style=\"height: inherit;\">\n            <div>\n                <p class=\"mb-2\">{{\"PREFERRED_METHOD\" | translate}}</p>\n                <div class=\"flex-lg-row flex-column justify-content-between d-flex\">\n                    <div class=\"col-lg-6 col-12 pb-2 pb-lg-0 pe-lg-2\">\n                        <div (click)=\"selectBranchAdditionMethod('manual')\"\n                            class=\"rounded d-flex flex-row gap-3 justify-content-center align-items-center px-2 py-2\"\n                            style=\"border: solid 2px; cursor: pointer;\"\n                            [style.border-color]=\"selectedBranchAdditionMethod === 'manual' ? 'var(--primary-color)' : '#E5E5E5'\">\n                            <div class=\"rounded col-2 d-flex justify-content-center align-items-center\"\n                                style=\"background-color: #FCE5E5; height: 40px; width: 40px\">\n                                <img src=\"../../assets/images/icn_create_add.svg\" alt=\"\">\n                            </div>\n                            <div class=\"d-flex flex-column col-10\">\n                                <p class=\"m-0\" style=\"font-family: primary-font-medium;\">{{\"ADD_BRANCHES_MANUALLY\" |\n                                    translate}}\n                                </p>\n                                <p class=\"m-0\">{{\"ADD_ONE_OR_MORE_BRANCHES\" | translate}}</p>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"col-lg-6 col-12 p-0\">\n                        <div (click)=\"selectBranchAdditionMethod('template')\"\n                            class=\"cursor-pointer rounded d-flex flex-row gap-3 justify-content-center align-items-center px-2 py-2\"\n                            style=\"border: solid 2px; cursor: pointer;\"\n                            [style.border-color]=\"selectedBranchAdditionMethod === 'template' ? 'var(--primary-color)' : '#E5E5E5'\">\n                            <div class=\"rounded col-2 d-flex justify-content-center align-items-center\"\n                                style=\"background-color: #FCE5E5; height: 40px; width: 40px;\">\n                                <img src=\"../../assets/images/icn_create_add.svg\" alt=\"\">\n                            </div>\n                            <div class=\"d-flex flex-column col-10\">\n                                <p class=\"m-0\" style=\"font-family: primary-font-medium;\">{{\"ADD_TEMPLATE\" |\n                                    translate}}\n                                </p>\n                                <p class=\"m-0\">{{\"DOWNLOAD_TEMPLATE_INFO\" | translate}}</p>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <button (click)=\"nextStep()\" class=\"next-button bottom-end m-0\">\n                {{\"NEXT\"|translate}}\n            </button>\n        </mat-card-content>\n    </div>\n    <div [hidden]=\"selectedBranchAdditionMethod !== 'manual' || !showContent\">\n        <app-branch (onAddNewBranch)=\"onAddNewBranch()\"></app-branch>\n        <mat-card class=\"mb-2\" [hidden]=\"!terminalVisible && terminalListData.length==0\">\n            <mat-card-content>\n                <app-terminal-list *ngIf=\"terminalListData.length>0\" [terminalListData]=\"terminalListData\">\n                </app-terminal-list>\n                <div (click)=\"openNewTerminalForm()\" class=\"add-new mt-3\"\n                    *ngIf=\"terminalListData.length>0 && !terminalVisible\">\n                    <img src=\"../../assets/images/icn_create_add.svg\" alt=\"\"><span\n                        class=\"add-new-text\">{{'ADD_NEW_TERMINAL'\n                        |\n                        translate}}</span>\n                </div>\n                <div>\n                    <app-terminal [hidden]=\"!terminalVisible\"></app-terminal>\n                    <div [hidden]=\"!terminalVisible\" class=\"terminal-buttons-container\">\n                        <button (click)=\"removeTerminal()\" class=\"cancel-button\">{{\"CANCEL\" | translate}}</button>\n                        <button class=\"add-terminal-button\" [disabled]=\"isAddTerminalDisabled()\"\n                            (click)=\"onCreateTerminal()\">{{\"ADD_TERMINAL\" | translate}}</button>\n                    </div>\n                </div>\n            </mat-card-content>\n        </mat-card>\n        <div class=\"d-flex flex-row justify-content-between\">\n            <button (click)=\"previousStep()\" class=\"back-button ms-4\">\n                {{\"BACK\"|translate}}\n            </button>\n            <button *ngIf=\"branchComponent?.isBranchFormOpened\" (click)=\"onCreateBranch()\"\n                [disabled]=\"!isCreateBranchValid()\" class=\"create-branch-button me-4\">\n                {{\"CREATE_BRANCH\"|translate}}\n            </button>\n        </div>\n    </div>\n\n    <div [hidden]=\"selectedBranchAdditionMethod !== 'template' || !showContent\">\n        <mat-card-content class=\"d-flex flex-column justify-content-between\" style=\"height: inherit;\">\n            <app-bulk-add-branches></app-bulk-add-branches>\n            <button (click)=\"previousStep()\" class=\"back-button bottom-start\">\n                {{\"BACK\"|translate}}\n            </button>\n        </mat-card-content>\n    </div>\n</div>","export class TransactionFilterModel\n{\n    public transactionId?:string;\n    public transactionType?:string;\n    public transactionDateFrom?:string;\n    public transactionDateTo?:string;\n    public status?:string;\n    public accountName?:string;\n    public branchName?:string;\n    public partnerName?:string;\n    public channel?:string;\n    public giftType?:string;\n    public giftId?:string;\n    constructor(data: Partial<TransactionFilterModel>) {\n        Object.assign(this, data);\n    }\n}\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { ApiConstants } from '../constants/api-constants';\nimport { TransactionFilterModel } from '../model/transaction-filter-model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TransactionService {\n  constructor(private httpClient: HttpClient,@Inject('environment') private environment: any) {}\n\n  getTransactionsForPartner(language : string  , partnerId : string ,  page: number, size: number,transactionFilterModel: TransactionFilterModel){\n    let queryParams = new HttpParams();\n    if(partnerId!=null)\n      queryParams = queryParams.append('partner-id', partnerId);\n    if(language!=null)\n      queryParams = queryParams.append('lang', language);\n    if(size!=null)\n      queryParams = queryParams.append('size', size);\n    if(page!=null)\n      queryParams = queryParams.append('page', page);\n\n\n    let httpOptions = {\n        headers: new HttpHeaders({\n            'Content-Type': 'application/json'\n        }),\n        params: queryParams\n    }\n    return this.httpClient.post(this.environment.TRANSACTION_MANAGEMENT_API_HOST + \"/transaction/partners/filter\" ,transactionFilterModel, httpOptions);\n  }\n  exportTransactionsForPartner(transactionFilterModel: TransactionFilterModel, language: string | null, partnerId?: string){\n    let queryParams = new HttpParams();\n    if(partnerId)\n      queryParams = queryParams.append('partner-id', partnerId);\n    if(language)\n      queryParams = queryParams.append('lang', language);\n\n    let httpOptions: Object = {\n        headers: new HttpHeaders({\n            'Content-Type': 'application/json',\n        }),\n        params: queryParams,\n        responseType: 'blob',\n        observe: 'response'\n    }\n    return this.httpClient.post(this.environment.TRANSACTION_MANAGEMENT_API_HOST + ApiConstants.EXPORT_TRANSACTIONS_FOR_PARTNER, transactionFilterModel, httpOptions);\n  }\n  getTransactionTypes(){\n    let queryParams = new HttpParams();\n    let httpOptions = {\n        headers: new HttpHeaders({\n            'Content-Type': 'application/json',\n        }),\n        params: queryParams\n    }\n    return this.httpClient.get(this.environment.TRANSACTION_MANAGEMENT_API_HOST + '/transaction/types' , httpOptions);\n  }\n  getGiftTypes(){\n    let queryParams = new HttpParams();\n    let httpOptions = {\n        headers: new HttpHeaders({\n            'Content-Type': 'application/json',\n        }),\n        params: queryParams\n    }\n    return this.httpClient.get(this.environment.TRANSACTION_MANAGEMENT_API_HOST + '/transaction/gift/types' , httpOptions);\n  }\n}\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { ApiConstants } from '../constants/api-constants';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AccountManagementService {\n\n  constructor(private httpClient: HttpClient, @Inject('environment') private environment: any) { }\n  getAccountNames(){\n    let queryParams = new HttpParams();\n    let httpOptions = {\n        headers: new HttpHeaders({\n            'Content-Type': 'application/json',\n        }),\n        params: queryParams\n    }\n    return this.httpClient.get(this.environment.ACCOUNT_MANAGEMENT_API_HOST + ApiConstants.ACCOUNT_NAMES , httpOptions);\n  }\n}\n","import { Component, OnInit, QueryList, ViewChildren,AfterViewInit } from '@angular/core';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ColumnDefinition, RegexConstants, SearchFilterComponent, TablePageDetails } from 'loyalty-common';\nimport { KeycloakService } from 'keycloak-angular';\nimport { TransactionService } from '../services/transaction.service';\nimport { MAT_SELECT_CONFIG } from '@angular/material/select';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { TransactionFilterModel } from '../model/transaction-filter-model';\nimport { DatePipe } from '@angular/common';\nimport { AccountManagementService } from '../services/account-management.service';\nimport { BranchManagementService } from '../services/branch-management.service';\nimport { PartnerService } from '../services/partner-service.service';\nimport { TerminalManagementService } from '../services/terminal-management.service';\nimport { PartnerIdentifierService } from '../services/partner-identifier.service';\nimport moment from 'moment';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n  selector: 'app-view-transactions',\n  templateUrl: './view-transactions.component.html',\n  styleUrls: ['./view-transactions.component.css'],\n  providers: [\n    {\n      provide: MAT_SELECT_CONFIG,\n      useValue: { overlayPanelClass: 'mat-select-overlay' }\n    },\n    [DatePipe]\n  ]\n})\nexport class ViewTransactionsComponent implements OnInit,AfterViewInit {\n  constructor(private transactionService: TransactionService, private activatedRoute: ActivatedRoute, private keycloakService: KeycloakService,\n    private datePipe: DatePipe,private accountService: AccountManagementService, private branchService: BranchManagementService,\n    private partnerService: PartnerService,private router: Router,\n    private terminalService:TerminalManagementService,private partnerIdentifierService: PartnerIdentifierService,\n    private translateService : TranslateService)\n   {\n    this.translateService.onLangChange.subscribe((event) => {\n      this.language = event.lang;\n      this.getTransactions();\n      this.updateNames();\n    });  \n  }\n  id !: string;\n  partnerName!:string;\n  isLoading : boolean = false;\n  englishOnlyRegex:RegExp=RegexConstants.ENGLISH_ONLY_REGEX;\n  arabicOnlyRegex:RegExp=RegexConstants.ARABIC_ONLY_REGEX;\n  englishSpecialCharactersRegex:RegExp=RegexConstants.ENGLISH_SPECIAL_CHARS_REGEX;\n  arabicSpecialCharactersRegex:RegExp=RegexConstants.ARABIC_SPECIAL_CHARS_REGEX;\n  englishNumbersIdRegex:RegExp=RegexConstants.ENGLISH_ONLY_NUMBERS_ID_REGEX;\n  pageDetails: TablePageDetails = {\n    pageNumber: 1,\n    pageSize: 10,\n    totalNumberOfElements: 0,\n    pagesCount: 1\n  };\n  branchesMap:Map<number,string[]>=new Map();\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\n  maxColumns: number = 8;\n  language!:string;\n  actionButtons: string[] = [''];\n  transactionStatuses: any[]=['SUCCESS','FAIL'];\n\n  displayedColumns: ColumnDefinition[] = [\n    {field : \"partnerName\", headerLabel : \"PARTNER_NAME\",span: 2},\n    { field: 'id', headerLabel: 'TRANSACTION_ID', type: 'Integer', span: 2 },\n    { field: 'type', headerLabel: 'TRANSACTION_TYPE', type: 'String', span: 2 },\n    { field: 'accountName', headerLabel: 'ACCOUNT_NAME', type: 'String', span: 2 },\n    { field: 'branchName', headerLabel: 'BRANCH', type: 'String', span: 2 },\n    { field: 'giftType', headerLabel: 'GIFT_TYPE', type: 'String', span: 2 },\n    { field: 'creationDate', headerLabel: 'TRANSACTION_DATE', type: 'String', span: 2 },\n    { field: 'status', headerLabel: 'STATUS', type: 'String', span: 2 },\n    { field: 'channel', headerLabel: 'CHANNEL', type: 'String', span: 2 },\n    { field: 'giftId', headerLabel: 'GIFT_ID', type: 'Integer', span: 2 },\n    { field: 'giftName', headerLabel: 'GIFT_NAME', type: 'String', span: 2 },\n    { field: 'giftAmount', headerLabel: 'GIFT_VALUE', type: 'String', span: 2 }\n  ];\n  partners!:any[];\n  branches!:any[];\n  accounts !: any[];\n  partnerNames!:any [];\n  accountNames!:any [];\n  transactionTypes!:any [];\n  branchNames!:any [];\n  channelNames!:any [];\n  giftTypes: any[] = ['POINTS','COUPONS', 'PROMOCODES', 'OFFER'];\n  transactionFilterModel:TransactionFilterModel=new TransactionFilterModel({});\n  minimumDate!:string;\n  @ViewChildren(SearchFilterComponent) filterComponents!:QueryList<SearchFilterComponent>;\n  searchForm!:FormGroup;\n  ngOnInit(): void {\n    this.id = this.activatedRoute.snapshot.params['id'];\n    if (!!!this.id){\n      this.id = this.partnerIdentifierService.getIdentifier()\n    }\n    if(this.id){\n      this.getPartnerName();\n    }\n    this.language = this.translateService.currentLang;\n    this.getPartnerNames();\n    this.getAccountNames();\n    this.getBranchNames();\n    this.getChannelNames()\n    this.getTransactionTypes();\n    this.initForm();\n    // this.initDates();\n    this.getTransactions();\n  }\n  // initDates() {\n  //   this.searchForm.get('transactionDateFrom')?.valueChanges.subscribe((value) => {\n  //     this.checkDates();\n  //   });\n  // }\n\n  ngAfterViewInit() {\n    this.syncBranchAndPartnerChanges();\n  }\n\n  isPageLoading() {\n    return this.isLoading == true;\n  }\n\n  initForm()\n  {\n    this.searchForm = new FormGroup({\n      transactionID:new FormControl(null, [Validators.maxLength(50)]),\n      giftID:new FormControl(null, [Validators.maxLength(50)]),\n      transactionDateFrom:new FormControl(\"\"),\n      transactionDateTo:new FormControl(\"\"),\n      status:new FormControl(),\n      transactionType:new FormControl(),\n      giftType:new FormControl()\n    });\n  }\n  changePage(event: number) {\n    this.pageDetails.pageNumber = event;\n    this.getTransactions();\n  }\n  getTransactions(){\n    this.transactionService.getTransactionsForPartner(this.language,this.id,this.pageDetails.pageNumber - 1, this.pageDetails.pageSize,this.transactionFilterModel)\n    .subscribe((res : any)=>{\n      this.pageDetails.totalNumberOfElements = res.elementCount;\n      this.dataSource.data = res.data;\n      this.dataSource.data = this.dataSource.data.map(item => ({\n        ...item,\n        branchName: item?.branchName || \"Online\",\n        channel: item?.channel || \"-\",\n        status: item?.status || \"-\",\n        giftId: item?.giftId || \"-\",\n        giftName: item?.giftName || \"-\",\n        giftAmount: String(item.giftAmount) + \" \" + \"EGP\",\n        creationDate: item.creationDate ? moment(item.creationDate, \"DD/MM/YYYY\").toDate() : \"-\"\n      }));\n      this.pageDetails.pagesCount = Math.ceil(res.elementCount / this.pageDetails.pageSize);\n    });\n  }\n\n  onExportTransactions() {\n    let transactionFilterModel: TransactionFilterModel = this.transactionFilterModel;\n    this.transactionService.exportTransactionsForPartner(transactionFilterModel, this.language, this.id)\n      .subscribe(async (res: any) => {\n        const username=this.getFileTitle();\n        const currentDateTime = new Date();\n        const formattedDateTime = this.datePipe.transform(currentDateTime, 'dd/MM/yyyy HH:mm:ss');\n        const fileName = \"Transactions\" + \"_\" + username + \"_\" + formattedDateTime + \".xlsx\"\n        const a = document.createElement(\"a\");\n        a.setAttribute(\"download\", fileName);\n        var binaryData = [];\n        binaryData.push(res.body);\n        a.href = URL.createObjectURL(new Blob(binaryData, { type: \"application/octet-stream\" }));\n        a.click();\n      });\n  }\n\n\n  getPartnerNames() {\n    this.partnerService.getPartnerNames().subscribe((response: any) => {\n      this.partners=response;\n      this.updatePartnerNames();\n    },\n    ()=>{\n      this.partnerNames=[];\n    });\n  }\n  getTransactionTypes() {\n    this.transactionService.getTransactionTypes().subscribe((response: any) => {\n      this.transactionTypes = response;\n    },()=>{\n      this.transactionTypes=[];\n    });\n  }\n  getAccountNames() {\n    this.accountService.getAccountNames().subscribe((response: any) => {\n      this.accounts = response;\n      this.updateAccountNames();\n    },()=>{\n      this.accountNames=[];\n    });\n  }\n  getBranchNames() {\n    this.branchService.getBranchNames(this.id).subscribe((response: any) => {\n      this.branches=response;\n      this.branches.forEach(branch=>this.branchesMap.set(branch.partnerId,[]));\n      this.branches.forEach(branch=>this.branchesMap.get(branch.partnerId)?.push(branch.name));\n      this.updateBranchNames();\n    },\n      ()=>{\n        this.branches=[];\n      });\n  }\n  getChannelNames() {\n    this.terminalService.getAllSerialNumbers(this.id).subscribe((response: any) => {\n      this.channelNames = response;\n    },()=>{\n      this.channelNames=[];\n    });\n  }\n  isApplySearchDisabled(): boolean {\n    const isFilterOptionEmpty = (title: string): boolean => {\n        const filterComponent = this.filterComponents?.find(component => component.title === title);\n        return !filterComponent || !filterComponent.searchForm.get('option')?.value || filterComponent.searchForm.get('option')?.value?.length==0;\n    };\n\n    const isFormFieldEmpty = (fieldName: string): boolean => {\n        return !this.searchForm.get(fieldName)?.value || this.searchForm.get(fieldName)?.value?.length===0;\n    };\n\n    const isPartnerNameEmpty = (): boolean => {\n        return isFilterOptionEmpty('PARTNER_NAME');\n    };\n\n    const areTransactionFieldsEmpty = (): boolean => {\n        const transactionFields: string[] = [\n            'transactionID',\n            'transactionType',\n            'transactionDateFrom',\n            'transactionDateTo',\n            'giftID',\n            'giftType',\n            'status'\n        ];\n        return transactionFields.every(fieldName => isFormFieldEmpty(fieldName));\n    };\n\n    const canApply =\n        isFilterOptionEmpty('ACCOUNT_NAME') &&\n        isFilterOptionEmpty('BRANCH_NAME') &&\n        isFilterOptionEmpty('CHANNEL') &&\n        areTransactionFieldsEmpty() &&\n        isPartnerNameEmpty();\n\n    return canApply;\n}\n  applySearch() {\n    this.pageDetails= {\n      pageNumber: 1,\n      pageSize: 10,\n      totalNumberOfElements: 0,\n      pagesCount: 1\n    };\n    this.transactionFilterModel=new TransactionFilterModel({\n    transactionId: this.searchForm.get('transactionID')?.value,\n    transactionType: this.searchForm.get('transactionType')?.value,\n    transactionDateFrom: moment(this.searchForm.get('transactionDateFrom')?.value).format('DD/MM/YYYY'),\n    transactionDateTo: moment(this.searchForm.get('transactionDateTo')?.value).format('DD/MM/YYYY'),\n    status: this.searchForm.get('status')?.value,\n    partnerName: this.filterComponents?.filter(component=>component.title=='PARTNER_NAME')[0]?.searchForm.get('option')?.value,\n    accountName: this.filterComponents?.filter(component=>component.title=='ACCOUNT_NAME')[0]?.searchForm.get('option')?.value,\n    branchName: this.filterComponents?.filter(component=>component.title=='BRANCH_NAME')[0]?.searchForm.get('option')?.value,\n    channel:this.filterComponents?.filter(component=>component.title=='CHANNEL')[0]?.searchForm.get('option')?.value,\n    giftType: this.searchForm.get('giftType')?.value,\n    giftId: this.searchForm.get('giftID')?.value,\n  })\n    this.getTransactions();\n  }\n  syncBranchAndPartnerChanges()\n  {\n    if(!this.id)\n    {\n      this.filterComponents.changes.subscribe(()=>{\n      const partnerFilterComponent=this.filterComponents.toArray().filter(component=>component.title===\"PARTNER_NAME\")[0];\n      const branchFilterComponent=this.filterComponents.toArray().filter(component=>component.title===\"BRANCH_NAME\")[0];\n      partnerFilterComponent?.searchForm?.get('option')?.valueChanges.subscribe(()=>\n      {\n        const value=partnerFilterComponent?.searchForm?.get('option')?.value;\n        let newBranches:any[]=[];\n        if(value.length>0){\n          for(let name of value)\n          {\n            let id=this.partners.filter(element=>element.partnerNameEn==name)[0].id;\n            this.branchesMap.get(id)?.forEach(branch=>newBranches.push(branch));\n          }\n        }\n        else newBranches=this.branchNames;\n        branchFilterComponent.optionsList=newBranches;\n        branchFilterComponent.filteredList=newBranches;\n      });\n    });\n    }\n  }\n  resetSearch()\n  {\n    let currentURL=this.router.url;\n    this.router.navigateByUrl('/', { skipLocationChange: true }).then(() => {\n      this.router.navigate([currentURL])}\n    );\n    this.getTransactions();\n  }\n  // formatDate(dateString: string): string {\n  //   const date = new Date(dateString);\n\n  //   const day = String(date.getDate()).padStart(2, '0');\n  //   const month = String(date.getMonth() + 1).padStart(2, '0');\n  //   const year = date.getFullYear();\n\n  //   return `${day}/${month}/${year}`;\n  // }\n  getPartnerName(){\n    this.partnerService.getPartnerDetails(this.id).subscribe((response: any) => {\n      this.partnerName = response.partnerNameEn;\n    });\n  }\n  getFileTitle()\n  {\n    if(this.id){\n      return this.partnerName;\n    }\n    const partners=this.filterComponents?.filter(component=>component.title=='PARTNER_NAME')[0]?.searchForm.get('option')?.value;\n    if(partners!=null && partners.length==1){\n      return partners[0];\n      }\n    return \"All_Partners\";\n  }\n\n  updateNames(){\n    this.updatePartnerNames();\n    this.updateBranchNames();\n    this.updateAccountNames();\n  }\n  updatePartnerNames(){\n    this.partnerNames = this.partners.map((partner: any) => {\n      if(this.language ==\"en\") return partner.partnerNameEn;\n      else return partner.partnerNameAr;\n    });\n  }\n  updateBranchNames(){\n    this.branchNames = this.branches.map((branch: any) => {\n      if(this.language ==\"en\") return branch.name;\n      else return branch.nameAr;\n    });\n  }\n\n  updateAccountNames(){\n    this.accountNames = this.accounts.map((account: any) => {\n      if(this.language ==\"en\") return account.accountNameEn;\n      else return account.accountNameAr;\n    });\n  }\n\n}\n","<div class=\"gray-page\">\n    <div class=\"container\">\n<h4>{{\"PARTNER_TRANSACTIONS\" | translate}}</h4>\n<form [formGroup]=\"searchForm\">\n    <div class=\"row\">\n        <div *ngIf=\"!id\" class=\"col-lg-4 col-md-4 mt-3\" id=\"partners\">\n            <app-search-filter *ngIf=\"partnerNames!=null\" [disabled]=\"partnerNames!=null && partnerNames.length==0\" [title]=\"'PARTNER_NAME'\" [regexString]=\"language=='en'?englishOnlyRegex:arabicOnlyRegex\" [optionsList]=\"partnerNames\">\n            </app-search-filter>\n        </div>\n        <div class=\"col-lg-4 col-md-4 mt-3\">\n            <mat-card-subtitle>{{\"TRANSACTION_ID\" | translate}}</mat-card-subtitle>\n            <input defaultCharacters [regex]=\"englishNumbersIdRegex\" placeholder=\"{{'TRANSACTION_ID' | translate}}\"\n                formControlName=\"transactionID\" maxlength=\"50\">\n        </div>\n        <div class=\"col-lg-4 col-md-4 mt-3\">\n            <mat-card-subtitle>{{\"TRANSACTION_TYPE\" | translate}}</mat-card-subtitle>\n            <mat-select closeMatSelect formControlName=\"transactionType\"\n                placeholder=\"{{ 'TRANSACTION_TYPE' | translate }}\"\n                multiple>\n                <mat-select-trigger>\n                     <span class=\"additional-selection\">\n                         {{searchForm.get('transactionType')?.value?.length}} {{\"SELECTED\" |\n                         translate}} | <span class=\"required-title\">{{\"TRANSACTION_TYPE\" | translate}}</span>\n                     </span>\n                 </mat-select-trigger>\n                <mat-option *ngFor=\"let item of transactionTypes\"\n                    [value]=\"item\">\n                    {{ item | translate}}\n                </mat-option>\n            </mat-select>\n        </div>\n        <div class=\"col-lg-4 col-md-4 mt-3\">\n            <mat-card-subtitle>{{\"TRANSACTION_DATE\"|translate}}\n            </mat-card-subtitle>\n            <!-- <input type=\"date\" (change)=\"checkDates()\" formControlName=\"transactionDateFrom\" class=\"placeholder-padding\"> -->\n            <div class=\"date-picker-container\">\n                <mat-date-range-input [rangePicker]=\"transactionDatePicker\">\n                    <input matStartDate placeholder=\"{{ 'TRANSACTION_DATE_FROM' | translate }}\"\n                        formControlName=\"transactionDateFrom\">\n                    <input matEndDate placeholder=\"{{ 'TRANSACTION_DATE_TO' | translate }}\"\n                        formControlName=\"transactionDateTo\">\n                </mat-date-range-input>\n                <mat-date-range-picker #transactionDatePicker></mat-date-range-picker>\n                <div class=\"date-picker-toggle-container\">\n                    <mat-datepicker-toggle matSuffix [for]=\"transactionDatePicker\"></mat-datepicker-toggle>\n                </div>\n            </div>\n        </div>\n        <!-- <div *ngIf=\"searchForm.get('transactionDateFrom')?.value\" class=\"col-lg-4 col-md-4 mt-3\">\n            <mat-card-subtitle>{{\"TRANSACTION_DATE_TO\"|translate}}\n            </mat-card-subtitle>\n            <input [min]=\"minimumDate\" (change)=\"checkDates()\" type=\"date\" cle formControlName=\"transactionDateTo\" class=\"placeholder-padding\" required>\n        </div> -->\n        <div class=\"col-lg-4 col-md-4 mt-3\">\n            <mat-card-subtitle>{{\"STATUS\" | translate}}</mat-card-subtitle>\n            <mat-select closeMatSelect formControlName=\"status\"\n                placeholder=\"{{ 'STATUS' | translate }}\"\n                multiple>\n                <mat-select-trigger>\n                     <span class=\"additional-selection\">\n                         {{searchForm.get('status')?.value?.length}} {{\"SELECTED\" |\n                         translate}} | <span class=\"required-title\">{{\"STATUS\" | translate}}</span>\n                     </span>\n                 </mat-select-trigger>\n                <mat-option *ngFor=\"let item of transactionStatuses\"\n                    [value]=\"item\">\n                    {{ item | translate}}\n                </mat-option>\n            </mat-select>\n        </div>\n        <div class=\"col-lg-4 col-md-4 mt-3\" id=\"account-names\">\n            <app-search-filter *ngIf=\"accountNames!=null\" [disabled]=\"accountNames!=null && accountNames.length==0\" [title]=\"'ACCOUNT_NAME'\" [regexString]=\"language=='en'?englishSpecialCharactersRegex:arabicSpecialCharactersRegex\" [optionsList]=\"accountNames\">\n            </app-search-filter>\n        </div>\n        <div class=\"col-lg-4 col-md-4 mt-3\" id=\"branch-names\">\n            <app-search-filter *ngIf=\"branchNames!=null\" [disabled]=\"branchNames!=null && branchNames.length==0\" [title]=\"'BRANCH_NAME'\" [regexString]=\"language=='en'?englishSpecialCharactersRegex:arabicSpecialCharactersRegex\" [optionsList]=\"branchNames\">\n            </app-search-filter>\n        </div>\n        <div class=\"col-lg-4 col-md-4 mt-3\" id=\"channel-names\">\n            <app-search-filter *ngIf=\"channelNames!=null\" [disabled]=\"channelNames!=null && channelNames.length==0\" [title]=\"'CHANNEL'\" [regexString]=\"englishSpecialCharactersRegex\" [optionsList]=\"channelNames\">\n            </app-search-filter>\n        </div>\n        <div class=\"col-lg-4 col-md-4 mt-3\">\n            <mat-card-subtitle>{{\"GIFT_TYPE\" | translate}}</mat-card-subtitle>\n            <mat-select closeMatSelect formControlName=\"giftType\"\n                placeholder=\"{{ 'GIFT_TYPE' | translate }}\"\n                multiple>\n                <mat-select-trigger>\n                     <span class=\"additional-selection\">\n                         {{searchForm.get('transactionStatus')?.value?.length}} {{\"SELECTED\" |\n                         translate}} | <span class=\"required-title\">{{\"GIFT_TYPE\" | translate}}</span>\n                     </span>\n                 </mat-select-trigger>\n                <mat-option *ngFor=\"let item of giftTypes\"\n                    [value]=\"item\">\n                    {{ item | translate}}\n                </mat-option>\n            </mat-select>\n        </div>\n        <div class=\"col-lg-4 col-md-4 mt-3\">\n            <mat-card-subtitle>{{\"GIFT_ID\" | translate}}</mat-card-subtitle>\n            <input defaultCharacters [regex]=\"englishNumbersIdRegex\" placeholder=\"{{'GIFT_ID' | translate}}\"\n                formControlName=\"giftID\" maxlength=\"50\">\n        </div>\n    </div>\n</form>\n<div class=\"row mt-4 buttons-container\">\n    <button (click)=\"resetSearch()\" class=\"reset-button\">{{\"RESET\" | translate}}</button>\n    <button [disabled]=\"isApplySearchDisabled()\" (click)=\"applySearch()\" class=\"apply-button\">{{\"APPLY\" | translate}}</button>\n</div>\n<div class=\"mt-4\">\n    <div class=\"table-container\">\n        <p *ngIf=\"dataSource.data.length>0\" class=\"title-small\">\n            {{\"SHOWING\" | translate}} {{dataSource.data.length}} {{\"TRANSACTIONS_FROM\" | translate}} {{pageDetails.totalNumberOfElements}}\n        </p>\n        <p *ngIf=\"dataSource.data.length===0\" class=\"title-small\">\n            {{\"NO_RESULTS\" | translate}}\n        </p>\n        <p (click)=\"onExportTransactions()\" class=\"text-button\">{{\"EXPORT\" | translate}}</p>\n    </div>\n\n    <div *ngIf=\"dataSource.data.length > 0\" >\n        <app-generic-table [maxColumns]=\"maxColumns\"\n            [displayedColumns]=\"displayedColumns\" [actionButtons]=\"actionButtons\" [dataSource]=\"dataSource\" tableName=\"Bulk-Members\">\n            </app-generic-table>\n        \n            <app-custom-paginator (emitPageNumber)=\"changePage($event)\" [pageNumber]=\"pageDetails.pageNumber\"\n                [pageCount]=\"pageDetails.pagesCount\">\n            </app-custom-paginator>\n    </div>\n\n</div>\n</div>\n<app-loader-page *ngIf=\"isPageLoading()\"></app-loader-page>\n</div>\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { TerminalComponent } from '../../branches/branches-and-terminals/terminal-information/terminal/terminal.component';\nimport { TerminalManagementService } from '../services/terminal-management.service';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\n\n@Component({\n  selector: 'app-edit-terminal',\n  templateUrl: './edit-terminal.component.html',\n  styleUrls: ['./edit-terminal.component.css']\n})\nexport class EditTerminalComponent implements OnInit {\n  @ViewChild(TerminalComponent)terminalComponent!:TerminalComponent;\n  terminalListData:any[]=[];\n  terminalData: any;\n\n  constructor(private terminalService: TerminalManagementService, private router: Router) {}\n    \n\n  ngOnInit(): void {\n    this.terminalData = history.state?.terminalData;\n  }\n\n  isUpdateTerminalDisabled() {\n    return this.terminalComponent?.terminalInformation?.invalid ||\n    (this.terminalComponent?.status === this.terminalData.status &&\n    !this.terminalComponent?.terminalInformation.get('simCard')?.dirty &&\n    !this.terminalComponent?.terminalInformation.get('password')?.dirty);\n  }\n\n  simCardExists(simCard:string) {\n    for(let terminal of this.terminalListData)\n    {\n      if(terminal['simCard']==simCard)\n      {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  validateTerminal(terminalInformation:FormGroup) {\n    let currentSimCard=terminalInformation.get('simCard')?.value;\n    if(this.simCardExists(currentSimCard))\n    {\n      this.terminalComponent.mapAlreadyExistingError(\"simCard\",\"SIM_CARD_EXISTS\");\n      return false;\n    }\n    return true;\n  }\n\n  goBack() {\n      this.router.navigate([\"/terminals\"]);\n  }\n  onUpdateTerminal() {\n    let terminalInformation = this.terminalComponent?.terminalInformation;\n    let terminalInformationMapped;\n    terminalInformationMapped = {\n      status: this.terminalComponent.checked ? \"ACTIVE\" : \"INACTIVE\"\n    };\n\n    if(terminalInformation.get('simCard')?.value !== this.terminalData.simCard) {\n      terminalInformationMapped = {\n        ...terminalInformationMapped,\n        simCard: terminalInformation.get('simCard')?.value,\n      }\n    }\n    if(terminalInformation.get('password')?.value !== null) {\n      terminalInformationMapped = {\n        ...terminalInformationMapped,\n        password: terminalInformation.get('password')?.value,\n      }\n    }\n\n    if(this.validateTerminal(terminalInformation))\n    {\n      this.terminalListData = [...this.terminalListData, terminalInformationMapped];\n      this.terminalComponent?.terminalInformation.reset();\n      this.terminalService.editTerminal(terminalInformationMapped, this.terminalData.id).subscribe((res) => {\n          this.router.navigate([\"/terminals\"]);\n      });\n    }\n  }\n}\n","<div class=\"overall-container\">\n    <div class=\"whole-container\">\n        <div class=\"d-flex header\">\n            <h3>{{ \"EDIT_TERMINAL\" | translate }}</h3>\n            <div class=\"buttons-container\">\n                <button (click)=\"goBack()\" class=\"header-buttons\">{{ \"Cancel\" | translate }}</button>\n                <button [disabled]=\"isUpdateTerminalDisabled()\" (click)=\"onUpdateTerminal()\" class=\"primary-button header-buttons\">\n                    {{ \"UPDATE\" | translate }}\n                </button>\n            </div>\n        </div>\n        <div class=\"big-card p-4\">\n            <app-terminal [editTerminal]=\"true\" [terminalData]=\"terminalData\"></app-terminal>\n        </div>\n    </div>\n</div>  ","export class GiftFilterModel {\n    public giftId?: string;\n    public giftName?: string;\n    public giftType?: string;\n    public activationDateFrom?: string;\n    public activationDateTo?: string;\n    public expirationDateFrom?: string;\n    public expirationDateTo?: string;\n    constructor(data: Partial<GiftFilterModel>) {\n        Object.assign(this, data);\n    }\n}","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { GiftFilterModel } from '../model/gift-filter-model';\nimport { ApiConstants } from '../constants/api-constants';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class VoucherManagementService {\n  constructor(private httpClient: HttpClient, @Inject('environment') private environment: any) {}\n\n  getGiftsForPartner(language: string, partnerId: number, page: number, size: number, giftFilterModel: GiftFilterModel) {\n    let queryParams = new HttpParams();\n\n    if (partnerId != null) {\n      queryParams = queryParams.append('partner-id', partnerId.toString());\n    }\n\n    if (language != null) {\n      queryParams = queryParams.append('lang', language);\n    }\n\n    if (size != null) {\n      queryParams = queryParams.append('size', size.toString());\n    }\n\n    if (page != null) {\n      queryParams = queryParams.append('page', page.toString());\n    }\n\n    let httpOptions = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json'\n      }),\n      params: queryParams\n    };\n\n    return this.httpClient.post(this.environment.VOUCHER_MANAGEMENT_API_HOST + ApiConstants.PARTNER_GIFTS, giftFilterModel, httpOptions);\n  }\n  deleteGift(giftId : string , giftType : string){\n    let queryParams = new HttpParams();\n    queryParams = queryParams.append('gift-type',giftType);\n\n    let httpOptions = {\n      headers: new HttpHeaders({\n        'Content-Type': 'application/json'\n      }),\n      params: queryParams\n    };\n\n    return this.httpClient.delete(this.environment.VOUCHER_MANAGEMENT_API_HOST  + ApiConstants.PARTNER_GIFTS + \"/\" + giftId,httpOptions);\n\n  }\n}","import { ChangeDetectorRef, Component, ComponentRef, OnInit } from '@angular/core';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AuthenticationService, ColumnDefinition, ConfirmationPopupComponent, GenericPopUpService, PopupService, RegexConstants, SuccessPopupComponent, TablePageDetails } from 'loyalty-common';\nimport { MAT_SELECT_CONFIG } from '@angular/material/select';\nimport { DatePipe } from '@angular/common';\nimport { VoucherManagementService } from '../services/voucher-management.service';\nimport { GiftFilterModel } from '../model/gift-filter-model';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { PartnerIdentifierService } from '../services/partner-identifier.service';\nimport moment from 'moment';\nimport { Constants } from '../constants/constants';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n  selector: 'app-view-gifts',\n  templateUrl: './view-gifts.component.html',\n  styleUrls: ['./view-gifts.component.css'],\n  providers: [\n    {\n      provide: MAT_SELECT_CONFIG,\n      useValue: { overlayPanelClass: 'mat-select-overlay' }\n    },\n    [DatePipe]\n  ]\n})\nexport class ViewGiftsComponent implements OnInit {\n  constructor(\n    private activatedRoute: ActivatedRoute,\n    private router: Router,\n    private voucherService: VoucherManagementService,\n    private partnerIdentifierService: PartnerIdentifierService,\n    private authService : AuthenticationService,\n    private genericPopupService:GenericPopUpService ,\n    private cdr: ChangeDetectorRef,\n    private popUpService : PopupService , \n    private translateService : TranslateService\n  ) { \n    this.translateService.onLangChange.subscribe((event) => {\n      this.language = event.lang;\n      this.updateGiftName();\n    });  \n  }\n\n  id !: number;\n  englishRegex: RegExp = RegexConstants.ENGLISH_ONLY_NUMBERS_ID_REGEX;\n  englishwithSpecialCharactersRegex: RegExp = RegexConstants.ENGLISH_SPECIAL_CHARS_REGEX;\n  arabicwithSpecialCharactersRegex: RegExp = RegexConstants.ARABIC_SPECIAL_CHARS_REGEX;\n  isLoading: boolean = false;\n  pageDetails: TablePageDetails = {\n    pageNumber: 1,\n    pageSize: 10,\n    totalNumberOfElements: 0,\n    pagesCount: 1\n  };\n  dataSource: MatTableDataSource<any> = new MatTableDataSource();\n  maxColumns: number = 7;\n  language!: string;\n  actionButtons: string[] = ['more-actions'];\n  giftRowId!: string;\n  element !: any;\n  searchForm!: FormGroup;\n  minimumActivationDate!: string;\n  minimumExpirationDate!: string;\n  giftTypes: any[] = ['COUPON', 'PROMOCODE', 'OFFER'];\n  giftFilterModel: GiftFilterModel = new GiftFilterModel({});\n  displayedColumns: ColumnDefinition[] = [\n    { field: \"giftId\", headerLabel: \"GIFT_ID\", span: 2 },\n    { field: 'giftType', headerLabel: 'GIFT_TYPE', type: 'Integer', span: 2 },\n    { field: 'giftName', headerLabel: 'GIFT_NAME', type: 'String', span: 3 },\n    { field: 'value', headerLabel: 'GIFT_VALUE', type: 'String', span: 2 },\n    { field: 'activationDate', headerLabel: 'ACTIVATION_DATE', type: 'Integer', span: 2 },\n    { field: 'expirationDate', headerLabel: 'EXPIRATION_DATE', type: 'String', span: 2 },\n    { field: 'amount', headerLabel: 'QUANTITY', type: 'String', span: 2 },\n    { field: 'remainingQuantity', headerLabel: 'REMAINING_QUANTITY', type: 'Icon', span: 2 },\n  ]\n  permissions !: string[] | null;\n\n  private confirmationDialogPopUpRef: ComponentRef<ConfirmationPopupComponent> | null = null;\n  private successDialogPopUpRef: ComponentRef<SuccessPopupComponent> | null = null;\n  \n  ngOnInit(): void {\n    this.permissions = this.authService.currentPermissionsValue;\n    this.id = this.activatedRoute.snapshot.params['id'];\n    if (!!!this.id) {\n      this.id = this.partnerIdentifierService.getIdentifier()\n    }\n    this.language = this.translateService.currentLang;\n    this.initForm();\n    this.getGifts();\n  }\n\n  initForm() {\n    this.searchForm = new FormGroup({\n      giftId: new FormControl(),\n      giftName: new FormControl(),\n      giftType: new FormControl(),\n      activationDateFrom: new FormControl(\"\"),\n      activationDateTo: new FormControl(\"\"),\n      expirationDateFrom: new FormControl(\"\"),\n      expirationDateTo: new FormControl(\"\"),\n    });\n  }\n\n  isPageLoading() {\n    return this.isLoading == true;\n  }\n\n  changePage(event: number) {\n    this.pageDetails.pageNumber = event;\n    this.getGifts();\n  }\n\n  getGifts() {\n    this.voucherService.getGiftsForPartner(this.language, this.id, this.pageDetails.pageNumber - 1, this.pageDetails.pageSize, this.giftFilterModel)\n      .subscribe((res: any) => {\n        this.pageDetails.totalNumberOfElements = res.elementCount;\n        this.dataSource.data = res.data.map((element: any) => {\n          return {\n            ...element,\n            activationDate: moment(element.activationDate).format(\"YYYY-MM-DD\"),\n            expirationDate: moment(element.expirationDate).format(\"YYYY-MM-DD\"),\n            giftId: element.id,\n            value: element.valueType == 'staticDiscount' ? element.value + ' EGP' : element.value + ' %',\n          }\n        });\n        this.updateGiftName();\n        this.pageDetails.pagesCount = Math.ceil(res.elementCount / this.pageDetails.pageSize);\n      });\n  }\n\n  performAction(event: any) {\n    this.element = event.element;\n    this.giftRowId = event.id;\n    console.log(this.element);\n    console.log(event);\n  }\n\n  applySearch() {\n    this.pageDetails = {\n      pageNumber: 1,\n      pageSize: 10,\n      totalNumberOfElements: 0,\n      pagesCount: 1\n    };\n    this.giftFilterModel = new GiftFilterModel({\n      giftId: this.searchForm.get('giftId')?.value !== null ?\n        this.searchForm.get('giftId')?.value.toUpperCase() : this.searchForm.get('giftId')?.value,\n      giftName: this.searchForm.get('giftName')?.value,\n      giftType: this.searchForm.get('giftType')?.value,\n      activationDateFrom: moment(this.searchForm.get('activationDateFrom')?.value).format('DD/MM/YYYY'),\n      activationDateTo: moment(this.searchForm.get('activationDateTo')?.value).format('DD/MM/YYYY'),\n      expirationDateFrom: moment(this.searchForm.get('expirationDateFrom')?.value).format('DD/MM/YYYY'),\n      expirationDateTo: moment(this.searchForm.get('expirationDateTo')?.value).format('DD/MM/YYYY'),\n    });\n    this.getGifts();\n  }\n\n  resetSearch() {\n    let currentUrl = this.router.url;\n    this.router.navigateByUrl('/', { skipLocationChange: true }).then(() => {\n      this.router.navigate([currentUrl])\n    });\n    this.getGifts();\n  }\n\n  isApplySearchDisabled() {\n    const controlNames = ['giftName', 'giftId', 'giftType', 'activationDateFrom', 'activationDateTo', 'expirationDateFrom', 'expirationDateTo'];\n    for (const name of controlNames) {\n      const control = this.searchForm.get(name);\n      if (name === 'giftName' && control?.value && control?.value?.length < 3)\n        return true;\n      if (control?.value !== null) {\n        if (name !== 'giftType') {\n          if (control?.value !== \"\") {\n            return false;\n          }\n        }\n        else {\n          if (control?.value?.length !== 0) {\n            return false;\n          }\n        }\n      }\n    }\n    return true;\n  }\n\n  checkDates(fromDateControlName: string, toDateControlName: string, minimumDateAttributeName: keyof ViewGiftsComponent) {\n    let fromDate = this.searchForm.get(fromDateControlName)?.value;\n    let toDate = this.searchForm.get(toDateControlName)?.value;\n\n    if (fromDate == null || fromDate === \"\") {\n      this.searchForm.get(toDateControlName)?.setValue(null);\n      return;\n    }\n\n    (this as any)[minimumDateAttributeName] = fromDate;\n\n    if (toDate == null || toDate === \"\") {\n      this.searchForm.get(toDateControlName)?.setValue(this[minimumDateAttributeName]);\n      return;\n    }\n\n    if (fromDate > toDate) {\n      (this as any)[minimumDateAttributeName] = fromDate;\n      this.searchForm.get(toDateControlName)?.setValue(fromDate);\n    }\n  }\n\n  navigateToAddGifts() {\n    this.router.navigate([\"branch/add-gift\", this.id]);\n  }\n  permissionsExists(neededPermissions : string[]){\n    if(this.permissions == null || this.permissions == undefined)\n      return false;\n      \n    return neededPermissions.some(permission =>{\n      return this.permissions?.includes(permission);\n    });\n  }\n\n  confirmDelete(event : Event){\n    event.stopPropagation();\n    const confirmationDialogData = {primaryTitle: Constants.DELETE ,confirmationMessage: Constants.deleteGiftConfiratmionMessage, confirmationSubMessage: Constants.deleteGiftConfiratmionSubMessage , img: \"/../../assets/images/icn_warning message.svg\"};\n    this.confirmationDialogPopUpRef = this.genericPopupService.showPopup(ConfirmationPopupComponent,confirmationDialogData);\n    this.confirmationDialogPopUpRef.instance.emitSubmissionEvent.subscribe((event)=>{\n      if(event){\n        this.voucherService.deleteGift(this.giftRowId,this.element.giftType).subscribe((resp : any)=>{\n        this.genericPopupService.closePopup(this.confirmationDialogPopUpRef);\n        this.openSuccessDialog();\n        },\n        (error=>{\n          this.genericPopupService.closePopup(this.confirmationDialogPopUpRef);\n            this.popUpService.showFailurePopup({\n              errorMessage: this.translateService.instant(\n                error?.error\n              ),\n            })\n        }))\n      }\n      else{\n        this.genericPopupService.closePopup(this.confirmationDialogPopUpRef);\n      }\n\n    })\n  }\n\n  openSuccessDialog(){\n    const successDialogData = {successMessage: Constants.deleteGiftSuccessMsg};\n    this.successDialogPopUpRef = this.genericPopupService.showPopup(SuccessPopupComponent,successDialogData);\n    this.successDialogPopUpRef.instance.okClick.subscribe((()=>{\n      this.genericPopupService.closePopup(this.successDialogPopUpRef);\n      window.location.reload();\n    }));\n  }\n\n  updateGiftName(){\n    this.dataSource.data = this.dataSource.data.map((data : any) =>({\n      ...data,\n      giftName: this.language == \"en\" ? data.nameEn : data.nameAr,\n    }));\n\n  }\n\n}\n","<div class=\"gray-page\">\n    <div class=\"container\">\n        <div class=\"action-container\">\n            <span class=\"employees-title\">\n                {{\"GIFT_MANAGEMENT_GIFTS\"|translate}}\n            </span>\n            <button class=\"action-buttons\" (click)=\"navigateToAddGifts()\"\n                *ngIf=\"permissionsExists(['canCreatePartnerGifts'])\">\n                <img src=\"../../../../assets/images/icn_add_gift.png\">\n            </button>\n        </div>\n        <form [formGroup]=\"searchForm\">\n            <div class=\"row\">\n                <div class=\"col-lg-4 col-md-4 mt-3\">\n                    <mat-card-subtitle>{{\"GIFT_ID\" | translate}}</mat-card-subtitle>\n                    <input maxlength=\"50\" defaultCharacters [regex]=\"englishRegex\"\n                        placeholder=\"{{'GIFT_ID' | translate}}\" formControlName=\"giftId\" maxlength=\"50\">\n                </div>\n                <div class=\"col-lg-4 col-md-4 mt-3\">\n                    <mat-card-subtitle>{{\"GIFT_NAME\" | translate}}</mat-card-subtitle>\n                    <input maxlength=\"50\" defaultCharacters\n                        [regex]=\"language=='en'?englishwithSpecialCharactersRegex:arabicwithSpecialCharactersRegex\"\n                        placeholder=\"{{'GIFT_NAME' | translate}}\" formControlName=\"giftName\" maxlength=\"50\">\n                </div>\n                <div class=\"col-lg-4 col-md-4 mt-3\">\n                    <mat-card-subtitle>{{\"GIFT_TYPE\" | translate}}</mat-card-subtitle>\n                    <mat-select closeMatSelect formControlName=\"giftType\" placeholder=\"{{ 'GIFT_TYPE' | translate }}\"\n                        multiple>\n                        <mat-select-trigger>\n                            <span class=\"additional-selection\">\n                                {{searchForm.get('giftType')?.value?.length}} {{\"SELECTED\" |\n                                translate}} | <span class=\"required-title\">{{\"GIFT_TYPE\" | translate}}</span>\n                            </span>\n                        </mat-select-trigger>\n                        <mat-option *ngFor=\"let item of giftTypes\" [value]=\"item\">\n                            {{ item | translate}}\n                        </mat-option>\n                    </mat-select>\n                </div>\n                <div class=\"col-lg-4 col-md-4 mt-3\">\n                    <mat-card-subtitle>{{\"ACTIVATION_DATE\" | translate}}</mat-card-subtitle>\n                    <div class=\"date-picker-container\">\n                        <mat-date-range-input [rangePicker]=\"activationPicker\">\n                            <input matStartDate placeholder=\"{{ 'ACTIVATION_DATE_FROM' | translate }}\"\n                                formControlName=\"activationDateFrom\">\n                            <input matEndDate placeholder=\"{{ 'ACTIVATION_DATE_TO' | translate }}\"\n                                formControlName=\"activationDateTo\">\n                        </mat-date-range-input>\n                        <mat-date-range-picker #activationPicker></mat-date-range-picker>\n                        <div class=\"date-picker-toggle-container\">\n                            <mat-datepicker-toggle matSuffix [for]=\"activationPicker\"></mat-datepicker-toggle>\n                        </div>\n                    </div>\n\n                </div>\n                <div class=\"col-lg-4 col-md-4 mt-3\">\n                    <mat-card-subtitle>{{\"EXPIRY_DATE\" | translate}}</mat-card-subtitle>\n                    <div class=\"date-picker-container\">\n                        <mat-date-range-input [rangePicker]=\"expirationPicker\">\n                            <input matStartDate placeholder=\"{{ 'EXPIRY_DATE_FROM' | translate }}\"\n                                formControlName=\"expirationDateFrom\">\n                            <input matEndDate placeholder=\"{{ 'EXPIRY_DATE_TO' | translate }}\"\n                                formControlName=\"expirationDateTo\">\n                        </mat-date-range-input>\n                        <mat-date-range-picker #expirationPicker></mat-date-range-picker>\n                        <div class=\"date-picker-toggle-container\">\n                            <mat-datepicker-toggle matSuffix [for]=\"expirationPicker\"></mat-datepicker-toggle>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </form>\n        <div class=\"row mt-4 buttons-container\">\n            <button (click)=\"resetSearch()\" class=\"reset-button\">{{\"RESET\" | translate}}</button>\n            <button [disabled]=\"isApplySearchDisabled()\" (click)=\"applySearch()\" class=\"apply-button\">{{\"APPLY\" |\n                translate}}</button>\n        </div>\n        <div class=\"mt-4 table-container\">\n            <p *ngIf=\"dataSource.data.length>0\" class=\"title-small\">\n                {{\"SHOWING\" | translate}} {{dataSource.data.length}} {{\"GIFTS_FROM\" | translate}}\n                {{pageDetails.totalNumberOfElements}}\n            </p>\n            <p *ngIf=\"dataSource.data.length===0\" class=\"title-small\">\n                {{\"NO_RESULTS\" | translate}}\n            </p>\n\n            <div *ngIf=\"dataSource.data.length > 0\">\n                <app-generic-table [maxColumns]=\"maxColumns\" [displayedColumns]=\"displayedColumns\"\n                    [actionButtons]=\"actionButtons\" [dataSource]=\"dataSource\" tableName=\"Bulk-Members\" (action)=\"performAction($event)\">\n                    <ul class=\"view-sheet-menu\">\n                        <li [ariaDisabled]=\"true\">\n                            <span>\n                                <img class=\"cell-button\" src=\"/../../assets/images/icn_edit_red.svg\" /> {{\"VIEW/EDIT\" |\n                                translate}}\n                            </span>\n                        </li>\n                        <li (click)=\"confirmDelete($event)\">\n                            <span><img class=\"cell-button\" src=\"/../../assets/images/trash.svg\" /> {{\"DELETE\" |\n                                translate}}</span>\n                        </li>\n                    </ul>\n                </app-generic-table>\n\n                <app-custom-paginator (emitPageNumber)=\"changePage($event)\" [pageNumber]=\"pageDetails.pageNumber\"\n                    [pageCount]=\"pageDetails.pagesCount\">\n                </app-custom-paginator>\n            </div>\n        </div>\n    </div>\n    <app-loader-page *ngIf=\"isPageLoading()\"></app-loader-page>\n</div>","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MaterialModule } from './material.module';\nimport { ArabicOnlyDirective, ArabicWithSpecialCharactersDirective, CloseMatSelectDirective, DefaultCharactersDirective, EnglishOnlyDirective, EnglishWithSpecialCharactersDirective} from 'loyalty-common';\nimport { LoyaltyCommonModule } from 'loyalty-common';\nimport { PartnerProfileComponent } from './partner-profile.component';\nimport { GiftManagementComponent } from './gift-management/gift-management.component';\nimport { PromocodeComponent } from './gift-management/promocode-information/promocode/promocode.component';\nimport { PromocodeFormComponent } from './gift-management/promocode-information/promocode-form/promocode-form.component';\nimport { PromocodeListComponent } from './gift-management/promocode-information/promocode-list/promocode-list.component';\nimport { CouponComponent } from './gift-management/coupon-information/coupon/coupon.component';\nimport { CouponListComponent } from './gift-management/coupon-information/coupon-list/coupon-list.component';\nimport { CouponFormComponent } from './gift-management/coupon-information/coupon-form/coupon-form.component';\nimport { AddPromocodesComponent } from './shared/add-promocodes/add-promocodes.component';\nimport { ConfirmDialogComponent } from './shared/confirm-dialog/confirm-dialog.component';\nimport { AddTerminalsComponent } from './shared/add-terminals/add-terminals.component';\nimport { TerminalsComponent } from './shared/terminals/terminals.component';\nimport { BranchesAndTerminalsComponent } from './branches/branches-and-terminals/branches-and-terminals.component';\nimport { BranchComponent } from './branches/branches-and-terminals/branch-information/branch/branch.component';\nimport { BranchFormComponent } from './branches/branches-and-terminals/branch-information/branch-form/branch-form.component';\nimport { BranchListComponent } from './branches/branches-and-terminals/branch-information/branch-list/branch-list.component';\nimport { TerminalComponent } from './branches/branches-and-terminals/terminal-information/terminal/terminal.component';\nimport { TerminalListComponent } from './branches/branches-and-terminals/terminal-information/terminal-list/terminal-list.component';\nimport { BulkAddBranchesComponent } from './branches/branches-and-terminals/bulk-add-branches/bulk-add-branches.component';\nimport { AddTerminalComponent } from './shared/add-terminal/add-terminal.component';\nimport { AssignTerminalComponent } from './shared/assign-terminal/assign-terminal.component';\nimport { ViewTransactionsComponent } from './shared/view-transactions/view-transactions.component';\nimport { EditTerminalComponent } from './shared/edit-terminal/edit-terminal.component';\nimport { ViewGiftsComponent } from './shared/view-gifts/view-gifts.component';\n\n\n@NgModule({\n  declarations: [\n    PartnerProfileComponent,\n    GiftManagementComponent,\n    PromocodeComponent,\n    PromocodeFormComponent,\n    PromocodeListComponent,\n    CouponComponent,\n    CouponListComponent,\n    CouponFormComponent,\n    AddPromocodesComponent,\n    ConfirmDialogComponent,\n    AddTerminalsComponent,\n    TerminalsComponent,\n    BranchesAndTerminalsComponent,\n    BranchComponent,\n    BranchFormComponent,\n    BranchListComponent,\n    TerminalComponent,\n    TerminalListComponent,\n    BulkAddBranchesComponent,\n    AddTerminalComponent,\n    AssignTerminalComponent,\n    ViewTransactionsComponent,\n    EditTerminalComponent,\n    ViewGiftsComponent\n  ],\n  imports: [\n    BrowserModule,\n    TranslateModule.forRoot(),\n    ReactiveFormsModule,\n    FormsModule,\n    LoyaltyCommonModule,\n    MaterialModule,\n    ArabicOnlyDirective,\n    ArabicWithSpecialCharactersDirective,\n    EnglishOnlyDirective,\n    EnglishWithSpecialCharactersDirective,\n    DefaultCharactersDirective,\n    CloseMatSelectDirective,\n  ],\n  exports: [\n    PartnerProfileComponent,\n    GiftManagementComponent,\n    PromocodeComponent,\n    PromocodeFormComponent,\n    PromocodeListComponent,\n    CouponComponent,\n    CouponListComponent,\n    CouponFormComponent,\n    AddPromocodesComponent,\n    ConfirmDialogComponent,\n    BranchesAndTerminalsComponent,\n    BulkAddBranchesComponent,\n    AssignTerminalComponent,\n    ViewTransactionsComponent,\n    EditTerminalComponent,\n    ViewGiftsComponent,\n    BranchFormComponent\n  ]\n})\nexport class PartnersUiModule { }\n","import { TerminalInformationModel } from \"./terminal-information-model\";\n\nexport class BranchInformationModel\n{\n    constructor(\n    public name:string,\n    public city: string , \n    public area : string,\n    public address : string,\n    public contactPerson : string,\n    public contactPhoneNumber : string,\n    public contactEmail : string ,\n    public terminals : TerminalInformationModel[],\n    public status:string,\n    public country:string\n    ){}\n   \n\t\n}","/*\n * Public API Surface of partners-ui\n */\nexport * from './lib/partners-ui.module';\nexport * from './lib/partner-profile.component';\nexport * from './lib/gift-management/gift-management.component';\nexport * from './lib/gift-management/coupon-information/coupon/coupon.component';\nexport * from './lib/gift-management/coupon-information/coupon-form/coupon-form.component';\nexport * from './lib/gift-management/coupon-information/coupon-list/coupon-list.component';\nexport * from './lib/gift-management/promocode-information/promocode/promocode.component';\nexport * from './lib/gift-management/promocode-information/promocode-form/promocode-form.component';\nexport * from './lib/gift-management/promocode-information/promocode-list/promocode-list.component';\nexport * from './lib/shared/add-promocodes/add-promocodes.component'\nexport * from './lib/shared/confirm-dialog/confirm-dialog.component'\nexport * from \"./lib/shared/assign-terminal/assign-terminal.component\";\nexport * from './lib/shared/view-transactions/view-transactions.component'\n\nexport * from './lib/shared/services/partner-identifier.service';\nexport * from './lib/shared/add-terminals/add-terminals.component';\nexport * from './lib/shared/terminals/terminals.component';\nexport * from './lib/branches/branches-and-terminals/branches-and-terminals.component';\nexport * from './lib/branches/branches-and-terminals/bulk-add-branches/bulk-add-branches.component';\nexport * from './lib/branches/branches-and-terminals/branch-information/branch-form/branch-form.component'\nexport * from './lib/shared/constants/constants';\nexport * from './lib/shared/model/branch-information-model';\nexport * from './lib/shared/model/partner-detail.definition';\nexport * from './lib/shared/model/assign-terminal-model';\n\nexport * from './lib/shared/edit-terminal/edit-terminal.component';\nexport * from './lib/shared/view-gifts/view-gifts.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.PartnerService","i3.PartnerIdentifierService","i5.BranchManagementService","i6.DashboardManagmentService","i7","i8","i9","i2.PartnerVoucherService","i4","i6","i10","i2","i2.CouponListComponent","i3.CouponFormComponent","i3","i1.BulkManagementService","i5.ContentManagementService","i8.PartnerIdentifierService","i11","i10.AddPromocodesComponent","i3.PromocodeFormComponent","i4.PromocodeListComponent","i5","i3.PartnerService","i4.PartnerVoucherService","i5.PartnerIdentifierService","i12.PromocodeComponent","i13.CouponComponent","i1.TerminalManagementService","i2.TerminalsPopupService","i5.TerminalComponent","i3.TerminalsPopupService","i2.BulkManagementService","i4.TerminalsPopupService","i5.TerminalManagementService","i7.PartnerIdentifierService","i12","i13","i3.BranchManagementService","i3.BranchFormComponent","i4.BranchListComponent","i3.BranchComponent","i4.TerminalComponent","i5.TerminalListComponent","i6.BulkAddBranchesComponent","i1.TransactionService","i5.AccountManagementService","i6.BranchManagementService","i7.PartnerService","i8.TerminalManagementService","i9.PartnerIdentifierService","i14","i15","i16","i17","i3.TerminalComponent","i2.VoucherManagementService"],"mappings":"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"}