@esolve/ng-esolve-connect 0.68.2 → 0.69.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"esolve-ng-esolve-connect.mjs","sources":["../../../../libs/ng-esolve-connect/src/lib/core/esolve-connect-config.constant.ts","../../../../libs/ng-esolve-connect/src/lib/core/esolve-config.service.ts","../../../../libs/ng-esolve-connect/src/lib/shared/cookie/esolve-cookie.service.ts","../../../../libs/ng-esolve-connect/src/lib/shared/errors/esolve-http-error.model.ts","../../../../libs/ng-esolve-connect/src/lib/shared/errors/esolve-error-handler.service.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/classes/esolve-multiple-select-filter.model.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/classes/esolve-range-filter.model.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/classes/esolve-single-select-filter.model.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/classes/esolve-toggle-filter.model.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/classes/esolve-generic-filter.model.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/classes/index.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/interfaces/index.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/types/index.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/esolve-filter-factory.ts","../../../../libs/ng-esolve-connect/src/lib/shared/response/classes/esolve-response-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/shared/response/esolve-response-handler.service.ts","../../../../libs/ng-esolve-connect/src/lib/shared/sort/index.ts","../../../../libs/ng-esolve-connect/src/lib/shared/esolve-hex-hash.function.ts","../../../../libs/ng-esolve-connect/src/lib/shared/esolve-list.model.ts","../../../../libs/ng-esolve-connect/src/lib/shared/esolve-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/session/esolve-session.service.ts","../../../../libs/ng-esolve-connect/src/lib/session/esolve-session-metadata.service.ts","../../../../libs/ng-esolve-connect/src/lib/auth/esolve-auth.service.ts","../../../../libs/ng-esolve-connect/src/lib/auth/esolve-auth-interceptor.service.ts","../../../../libs/ng-esolve-connect/src/lib/auth/models/esolve-otp.model.ts","../../../../libs/ng-esolve-connect/src/lib/auth/models/esolve-otp-validation.model.ts","../../../../libs/ng-esolve-connect/src/lib/auth/esolve-otp.service.ts","../../../../libs/ng-esolve-connect/src/lib/auth/providers/esolve-eurus-auto-login.provider.ts","../../../../libs/ng-esolve-connect/src/lib/core/providers/provide-ng-esolve-connect.function.ts","../../../../libs/ng-esolve-connect/src/lib/ng-esolve-connect.module.ts","../../../../libs/ng-esolve-connect/src/lib/images/functions/is-esolve-cdn-path.function.ts","../../../../libs/ng-esolve-connect/src/lib/images/functions/is-ftg-cdn-path.function.ts","../../../../libs/ng-esolve-connect/src/lib/images/functions/is-legacy-esolve-cdn-path.function.ts","../../../../libs/ng-esolve-connect/src/lib/images/functions/process-image-src.function.ts","../../../../libs/ng-esolve-connect/src/lib/images/esolve-image-loader.provider.ts","../../../../libs/ng-esolve-connect/src/lib/images/directives/cdn-src.directive.ts","../../../../libs/ng-esolve-connect/src/lib/seo/classes/esolve-seo-info.model.ts","../../../../libs/ng-esolve-connect/src/lib/seo/esolve-seo.service.ts","../../../../libs/ng-esolve-connect/src/lib/geocoder/classes/esolve-geocode-address-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/geocoder/classes/esolve-geocode-coords-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/geocoder/classes/esolve-geocode-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/geocoder/esolve-geocoder.service.ts","../../../../libs/ng-esolve-connect/src/lib/assets/classes/esolve-linked-asset.model.ts","../../../../libs/ng-esolve-connect/src/lib/category-tree/classes/esolve-category-tree-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/category-tree/esolve-category-tree.service.ts","../../../../libs/ng-esolve-connect/src/lib/manufacturers/classes/esolve-manufacturer.model.ts","../../../../libs/ng-esolve-connect/src/lib/manufacturers/esolve-manufacturers.service.ts","../../../../libs/ng-esolve-connect/src/lib/ranges/classes/esolve-range.model.ts","../../../../libs/ng-esolve-connect/src/lib/ranges/esolve-ranges.service.ts","../../../../libs/ng-esolve-connect/src/lib/tags/classes/esolve-tag.model.ts","../../../../libs/ng-esolve-connect/src/lib/tags/esolve-tags.service.ts","../../../../libs/ng-esolve-connect/src/lib/topics/classes/esolve-topic.model.ts","../../../../libs/ng-esolve-connect/src/lib/topics/esolve-topic.service.ts","../../../../libs/ng-esolve-connect/src/lib/assets/classes/esolve-asset.model.ts","../../../../libs/ng-esolve-connect/src/lib/assets/esolve-assets.service.ts","../../../../libs/ng-esolve-connect/src/lib/account/address/classes/esolve-address-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/address/classes/esolve-address.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/address/classes/esolve-session-address-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-user-account-business.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-user-account-contact.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-user-account-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-statement-ageing.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-statement-balances.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-statement-transaction.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-statement.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-user-client-account.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-user-account.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-user-client-account-balances.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/password/esolve-change-password-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/password/esolve-reset-password-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/registration/esolve-registration-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/confirmation/esolve-account-confirmation-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/location/classes/esolve-location-update-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/cart/classes/esolve-empty-cart-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/cart/classes/esolve-checkout-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/cart/classes/esolve-cart-stock-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/cart/classes/esolve-cart-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/cart/classes/esolve-cart-totals.model.ts","../../../../libs/ng-esolve-connect/src/lib/cart/classes/esolve-transaction-analytics-data.model.ts","../../../../libs/ng-esolve-connect/src/lib/cart/classes/esolve-cart-alternative.model.ts","../../../../libs/ng-esolve-connect/src/lib/coupons/classes/esolve-coupon.model.ts","../../../../libs/ng-esolve-connect/src/lib/coupons/esolve-coupons.service.ts","../../../../libs/ng-esolve-connect/src/lib/coupons/index.ts","../../../../libs/ng-esolve-connect/src/lib/vouchers/classes/esolve-voucher.model.ts","../../../../libs/ng-esolve-connect/src/lib/vouchers/esolve-vouchers.service.ts","../../../../libs/ng-esolve-connect/src/lib/vouchers/index.ts","../../../../libs/ng-esolve-connect/src/lib/cart/esolve-cart.service.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-address.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-client.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-item-price.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-list.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/esolve-location-address.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/esolve-location-contact-info.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/esolve-location-geo.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/esolve-location-pobox-address.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/esolve-location-trading-day.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/esolve-location-trading-times.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/esolve-location.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/esolve-location-list.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/index.ts","../../../../libs/ng-esolve-connect/src/lib/locations/types/index.ts","../../../../libs/ng-esolve-connect/src/lib/locations/esolve-locations.service.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-location.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-payment-method.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-shipping-method.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-user.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-pick.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-time-slot.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/esolve-transactions.service.ts","../../../../libs/ng-esolve-connect/src/lib/account/esolve-session-shipping-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/esolve-account.service.ts","../../../../libs/ng-esolve-connect/src/lib/banners/classes/esolve-banner.model.ts","../../../../libs/ng-esolve-connect/src/lib/banners/classes/esolve-banner-image.model.ts","../../../../libs/ng-esolve-connect/src/lib/banners/classes/esolve-banner-image-hotspot.model.ts","../../../../libs/ng-esolve-connect/src/lib/banners/esolve-banner.service.ts","../../../../libs/ng-esolve-connect/src/lib/menu/classes/esolve-menu-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/menu/esolve-menu.service.ts","../../../../libs/ng-esolve-connect/src/lib/news/classes/esolve-news-article-author.model.ts","../../../../libs/ng-esolve-connect/src/lib/news/classes/esolve-news-article-list.model.ts","../../../../libs/ng-esolve-connect/src/lib/news/classes/esolve-news-group.model.ts","../../../../libs/ng-esolve-connect/src/lib/news/classes/esolve-news-article.model.ts","../../../../libs/ng-esolve-connect/src/lib/news/classes/esolve-newsletter-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/news/esolve-news.service.ts","../../../../libs/ng-esolve-connect/src/lib/stock/types/index.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-colour.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-badge.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-price.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-lead-times.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-transaction-history.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-item-base.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-dependant-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-group-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-group.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-item-list.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-recipe-stock-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-linked-stock-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-media-stock-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-image.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-additional-stock-image.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-image-collection.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-set-notify-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/index.ts","../../../../libs/ng-esolve-connect/src/lib/stock/interfaces/index.ts","../../../../libs/ng-esolve-connect/src/lib/stock/esolve-stock.service.ts","../../../../libs/ng-esolve-connect/src/lib/specials/classes/esolve-special-dates.model.ts","../../../../libs/ng-esolve-connect/src/lib/specials/classes/esolve-special-image.model.ts","../../../../libs/ng-esolve-connect/src/lib/specials/classes/esolve-special-image-collection.model.ts","../../../../libs/ng-esolve-connect/src/lib/specials/classes/esolve-special.model.ts","../../../../libs/ng-esolve-connect/src/lib/specials/esolve-specials.service.ts","../../../../libs/ng-esolve-connect/src/lib/payment/classes/esolve-banking-details.model.ts","../../../../libs/ng-esolve-connect/src/lib/payment/classes/esolve-payment-method.model.ts","../../../../libs/ng-esolve-connect/src/lib/payment/classes/esolve-payment-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/payment/classes/esolve-vault-item-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/payment/classes/esolve-vault-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/payment/esolve-payment.service.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/classes/esolve-shipping-totals.model.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/classes/esolve-shipping-cost.model.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/classes/esolve-shipping-method.model.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/classes/esolve-time-slot-date.model.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/classes/esolve-time-slot-days.model.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/classes/esolve-time-slot-times.model.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/classes/esolve-time-slot.model.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/classes/esolve-time-slot-config.model.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/esolve-shipping.service.ts","../../../../libs/ng-esolve-connect/src/lib/enquiry/classes/esolve-enquiry-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/enquiry/esolve-enquiry.service.ts","../../../../libs/ng-esolve-connect/src/lib/wishlist/classes/esolve-wishlist-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/wishlist/classes/esolve-empty-wishlist-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/wishlist/esolve-wishlist.service.ts","../../../../libs/ng-esolve-connect/src/lib/suppliers/classes/esolve-supplier.model.ts","../../../../libs/ng-esolve-connect/src/lib/suppliers/esolve-suppliers.service.ts","../../../../libs/ng-esolve-connect/src/lib/device/classes/esolve-set-device-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/device/classes/esolve-user-device.model.ts","../../../../libs/ng-esolve-connect/src/lib/device/esolve-device.service.ts","../../../../libs/ng-esolve-connect/src/lib/wallet/classes/esolve-wallet-balances.model.ts","../../../../libs/ng-esolve-connect/src/lib/wallet/classes/esolve-wallet-transaction.model.ts","../../../../libs/ng-esolve-connect/src/lib/wallet/classes/esolve-wallet-transactions-list.model.ts","../../../../libs/ng-esolve-connect/src/lib/wallet/esolve-wallet.service.ts","../../../../libs/ng-esolve-connect/src/lib/deliveries/classes/esolve-delivery.model.ts","../../../../libs/ng-esolve-connect/src/lib/deliveries/classes/esolve-delivery-status.model.ts","../../../../libs/ng-esolve-connect/src/lib/deliveries/esolve-deliveries.service.ts","../../../../libs/ng-esolve-connect/src/index.ts","../../../../libs/ng-esolve-connect/src/esolve-ng-esolve-connect.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { EsolveConnectConfig } from './esolve-connect-config.interface';\n\nexport const ESOLVE_CONNECT_CONFIG = new InjectionToken<EsolveConnectConfig>(\n 'esolve.connect.config',\n);\n","import { Injectable, inject } from '@angular/core';\n\nimport { EsolveConnectConfig } from './esolve-connect-config.interface';\nimport { ESOLVE_CONNECT_CONFIG } from './esolve-connect-config.constant';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveConfigService implements EsolveConnectConfig {\n public api_url = '';\n public site_url = '';\n public wsid = '';\n public title_prefix: string;\n public title_suffix: string;\n public title_separator = '|';\n public default_seo_title: string;\n public default_seo_description: string;\n public default_seo_keywords: string;\n public native: boolean;\n public session_storage_key = '_ng_eslv_token';\n public coupon_storage_key = '_ng_eslv_coupons';\n public voucher_storage_key = '_ng_eslv_vouchers';\n public device_designation = 'web';\n\n public legacy_cdn?: string;\n public cdn?: string;\n public ftg_cdn?: string;\n public error_image_path?: string;\n\n constructor() {\n const config = inject(ESOLVE_CONNECT_CONFIG);\n\n if (config.api_url === '' || config.wsid === '') {\n throw new Error('Invalid eSolve Eurus config');\n }\n\n this.api_url = config.api_url;\n this.site_url = config.site_url;\n this.wsid = config.wsid;\n\n this.title_prefix = config.title_prefix ?? '';\n this.title_suffix = config.title_suffix ?? '';\n this.default_seo_title = config.default_seo_title ?? '';\n this.default_seo_description = config.default_seo_description ?? '';\n this.default_seo_keywords = config.default_seo_keywords ?? '';\n\n this.native = config.native ?? false;\n\n if (config.session_storage_key) {\n this.session_storage_key = config.session_storage_key;\n }\n\n if (config.title_separator) {\n this.title_separator = config.title_separator;\n }\n\n if (config.coupon_storage_key) {\n this.coupon_storage_key = config.coupon_storage_key;\n }\n\n if (config.voucher_storage_key) {\n this.voucher_storage_key = config.voucher_storage_key;\n }\n\n if (this.native && config.device_designation) {\n this.device_designation = config.device_designation;\n }\n\n this.legacy_cdn = config.legacy_cdn;\n this.cdn = config.cdn;\n\n if (config.ftg_cdn) {\n this.ftg_cdn = config.ftg_cdn;\n }\n\n this.error_image_path = config.error_image_path;\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { SsrCookieService } from 'ngx-cookie-service-ssr';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveCookieService {\n private readonly cookieService = inject(SsrCookieService);\n\n public check(name: string): boolean {\n return this.cookieService.check(name);\n }\n\n public get(name: string): string {\n return this.cookieService.get(name);\n }\n\n public set(\n name: string,\n value: string,\n expires?: Date,\n path?: string,\n domain?: string,\n secure?: boolean,\n ): void {\n this.cookieService.set(name, value, expires, path, domain, secure);\n }\n\n public delete(\n name: string,\n path?: string,\n domain?: string,\n secure?: boolean,\n ): void {\n this.cookieService.delete(name, path, domain, secure);\n }\n}\n","export class EsolveHttpError extends Error {\n public readonly http_error = true;\n public type: 'error' | 'exception';\n public error_code: string;\n\n constructor(type: 'error' | 'exception', code: string, message: string) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, EsolveHttpError);\n }\n\n this.name = 'EsolveHttpError';\n this.type = type;\n this.error_code = code;\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { Observable, throwError } from 'rxjs';\n\nimport {\n EsolveResponse,\n EsolveDeleteResult,\n EsolvePostResponseItem,\n EsolveDeleteResponse,\n EsolveSetResponse,\n} from '../response';\nimport { EsolveHttpError } from './esolve-http-error.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveErrorHandlerService {\n public throwError(code: string, message: string): void {\n throw new EsolveHttpError('error', code, message);\n }\n\n public emitError(code: string, message: string): Observable<never> {\n return throwError(() => new EsolveHttpError('error', code, message));\n }\n\n public handleHttpPostError(\n service_type: string,\n errorRes:\n | HttpErrorResponse\n | EsolveSetResponse\n | EsolvePostResponseItem,\n ): Observable<never> {\n if (\n !(errorRes instanceof HttpErrorResponse) &&\n !('service_type' in errorRes) &&\n 'id' in errorRes &&\n 'esolve_id' in errorRes &&\n 'transaction_type' in errorRes &&\n 'status' in errorRes &&\n 'log' in errorRes\n ) {\n return throwError(() => this.parsePostErrors(errorRes));\n }\n\n return this.handleHttpError(service_type, errorRes);\n }\n\n public handleHttpDeleteError(\n service_type: string,\n errorRes: HttpErrorResponse | EsolveDeleteResponse | EsolveDeleteResult,\n ): Observable<never> {\n const is_not_base =\n !(errorRes instanceof HttpErrorResponse) &&\n !('service_type' in errorRes) &&\n 'id' in errorRes &&\n 'status' in errorRes &&\n 'message' in errorRes &&\n 'code' in errorRes;\n\n if (is_not_base) {\n return throwError(() => this.parseDeleteError(errorRes));\n }\n\n return this.handleHttpError(service_type, errorRes);\n }\n\n private handleHttpError(\n service_type: string,\n error_response: HttpErrorResponse | EsolveResponse,\n ): Observable<never> {\n if (error_response instanceof HttpErrorResponse) {\n if (error_response.status === 500) {\n const server_error = error_response.error;\n\n if (\n 'service_type' in server_error &&\n server_error.service_type === service_type\n ) {\n return throwError(() =>\n this.parseException(server_error as EsolveResponse),\n );\n }\n }\n } else {\n if (\n 'service_type' in error_response &&\n error_response.service_type === service_type\n ) {\n if (error_response.type === 'exception') {\n return throwError(() =>\n this.parseException(error_response),\n );\n } else if (error_response.type === 'error') {\n return throwError(() =>\n this.parseResponseError(error_response),\n );\n }\n }\n }\n\n return throwError(() => error_response);\n }\n\n private parseException(exception: EsolveResponse): EsolveHttpError {\n const error = new EsolveHttpError(\n 'exception',\n exception.additional_data.exception_type || 'unknown',\n exception.message || 'Unknown exception has occurred',\n );\n\n return error;\n }\n\n private parseResponseError(exception: EsolveResponse): EsolveHttpError {\n const error = new EsolveHttpError(\n 'error',\n exception.code || 'unknown',\n exception.message || 'Unknown error has occurred',\n );\n\n return error;\n }\n\n private parsePostErrors(response: EsolvePostResponseItem): EsolveHttpError {\n let error_code = 'unknown';\n let message = 'Unknown error has occurred';\n\n if (response.status.state === 'none' && response.log.length > 0) {\n error_code = 'no_response';\n message = 'Response was provided';\n } else if (response.status.state === 'error') {\n const login_error_log = response.log[0];\n\n error_code = login_error_log.message_code;\n message = login_error_log.message;\n }\n\n return new EsolveHttpError('error', error_code, message);\n }\n\n private parseDeleteError(result: EsolveDeleteResult): EsolveHttpError {\n return new EsolveHttpError('error', result.code, result.message);\n }\n}\n","import { HttpParams } from '@angular/common/http';\n\nimport { EsolveSelectFilter } from '../interfaces';\n\nexport class EsolveMultipleSelectFilter implements EsolveSelectFilter {\n public readonly type = 'multiple';\n public label = '';\n public options: (string | number)[] = [];\n\n private values?: (string | number)[];\n\n constructor(\n public field: string,\n options?: (string | number)[],\n ) {\n if (options) {\n this.options = options;\n }\n }\n\n public setValue(values: (string | number)[]) {\n this.values = values;\n }\n\n public toHttpParams(): { [x: string]: string | (string | number)[] };\n public toHttpParams(http_params: HttpParams): HttpParams;\n public toHttpParams(\n http_params?: HttpParams,\n ): HttpParams | { [x: string]: string | (string | number)[] } {\n if (!this.values) {\n throw new Error('No values set');\n }\n\n const base_property = `filter[${this.field}]`;\n const type_property = base_property + '[type]';\n const values_property = base_property + '[values][]';\n\n const params = {\n [type_property]: this.type,\n [values_property]: this.values,\n };\n\n if (http_params) {\n return http_params.appendAll(params);\n }\n\n return params;\n }\n}\n","import { HttpParams } from '@angular/common/http';\n\nimport { EsolveFilter } from '../interfaces';\n\nexport class EsolveRangeFilter implements EsolveFilter {\n public readonly type = 'range';\n public label = '';\n public min = 0;\n public max = 0;\n public options = {\n min: 0,\n max: 0,\n };\n\n constructor(\n public field: string,\n min = 0,\n max = 0,\n ) {\n this.options.min = min;\n this.options.max = max;\n\n if (max > 0 && min > max) {\n this.options.min = max;\n this.options.max = min;\n }\n }\n\n public setValue(min: number, max: number): void {\n this.min = min;\n this.max = max;\n\n if (max > 0 && min > max) {\n this.min = max;\n this.max = min;\n }\n }\n\n public toHttpParams(): { [x: string]: string | number };\n public toHttpParams(http_params: HttpParams): HttpParams;\n public toHttpParams(\n http_params?: HttpParams,\n ): HttpParams | { [x: string]: string | number } {\n if (this.min <= 0 && this.max <= 0) {\n throw new Error('No values set');\n }\n\n const base_property = `filter[${this.field}]`;\n const type_property = base_property + '[type]';\n const min_property = base_property + '[min]';\n const max_property = base_property + '[max]';\n\n const params = {\n [type_property]: this.type,\n [min_property]: this.min,\n [max_property]: this.max,\n };\n\n if (http_params) {\n return http_params.appendAll(params);\n }\n\n return params;\n }\n}\n","import { HttpParams } from '@angular/common/http';\n\nimport { EsolveSelectFilter } from '../interfaces';\n\nexport class EsolveSingleSelectFilter implements EsolveSelectFilter {\n public readonly type = 'single';\n public label = '';\n public options: (string | number)[] = [];\n\n private value?: string | number;\n\n constructor(field: string, options: (string | number)[]);\n constructor(field: string, value: string | number);\n constructor(\n public field: string,\n options_or_value: string | number | (string | number)[],\n ) {\n if (Array.isArray(options_or_value)) {\n this.options = options_or_value;\n } else {\n this.setValue(options_or_value);\n }\n }\n\n public setValue(value: string | number) {\n this.value = value;\n }\n\n public toHttpParams(): { [x: string]: string | number };\n public toHttpParams(http_params: HttpParams): HttpParams;\n public toHttpParams(\n http_params?: HttpParams,\n ): HttpParams | { [x: string]: string | number } {\n if (!this.value) {\n throw new Error('No values set');\n }\n\n const base_property = `filter[${this.field}]`;\n const type_property = base_property + '[type]';\n const values_property = base_property + '[value]';\n\n const params = {\n [type_property]: this.type,\n [values_property]: this.value,\n };\n\n if (http_params) {\n return http_params.appendAll(params);\n }\n\n return params;\n }\n}\n","import { HttpParams } from '@angular/common/http';\n\nimport { EsolveFilter } from '../interfaces';\n\nexport class EsolveToggleFilter implements EsolveFilter {\n public readonly type = 'toggle';\n public label = '';\n\n constructor(\n public field: string,\n private value: boolean,\n ) {}\n\n public toHttpParams(): { [x: string]: string | number };\n public toHttpParams(http_params: HttpParams): HttpParams;\n public toHttpParams(\n http_params?: HttpParams,\n ): HttpParams | { [x: string]: string | number } {\n const base_property = `filter[${this.field}]`;\n const type_property = base_property + '[type]';\n const values_property = base_property + '[value]';\n\n const params = {\n [type_property]: this.type,\n [values_property]: this.value ? 1 : 0,\n };\n\n if (http_params) {\n return http_params.appendAll(params);\n }\n\n return params;\n }\n}\n","import { HttpParams } from '@angular/common/http';\n\nimport { EsolveFilter, EsolveGenericFilterDefinition } from '../interfaces';\n\nexport class EsolveGenericFilter implements EsolveFilter {\n public readonly type = 'generic';\n public label = '';\n private value: string | number | boolean;\n private filter_type: string;\n\n constructor(\n public field: string,\n definition: EsolveGenericFilterDefinition,\n ) {\n this.filter_type = definition.type;\n this.value = definition.value;\n }\n\n public toHttpParams(): { [x: string]: string | number };\n public toHttpParams(http_params: HttpParams): HttpParams;\n public toHttpParams(\n http_params?: HttpParams,\n ): HttpParams | { [x: string]: string | number } {\n const base_property = `filter[${this.field}]`;\n const type_property = base_property + '[type]';\n const values_property = base_property + '[value]';\n\n let value = this.value;\n\n if (typeof value === 'boolean') {\n value = +value;\n }\n\n const params = {\n [type_property]: this.filter_type,\n [values_property]: value,\n };\n\n if (http_params) {\n return http_params.appendAll(params);\n }\n\n return params;\n }\n}\n","// Classes\nexport * from './esolve-multiple-select-filter.model';\nexport * from './esolve-range-filter.model';\nexport * from './esolve-single-select-filter.model';\nexport * from './esolve-toggle-filter.model';\nexport * from './esolve-generic-filter.model';\n","// Interfaces\nexport * from './esolve-filter-definitions.interface';\nexport * from './esolve-filter-record.interface';\nexport * from './esolve-filter.interface';\nexport * from './esolve-range-filter-record.interface';\nexport * from './esolve-select-filter-record.interface';\nexport * from './esolve-select-filter.interface';\nexport * from './esolve-generic-filter-definition.interface';\nexport * from './esolve-range-filter-definition.interface';\n","// Types\nexport * from './esolve-filter-list.type';\nexport * from './esolve-filter-record-list.type';\nexport * from './esolve-filter-type.type';\nexport * from './esolve-filter-toggle.type';\nexport * from './esolve-range-filter-type.type';\nexport * from './esolve-select-filter-type.type';\n","import { HttpParams } from '@angular/common/http';\n\nimport {\n EsolveGenericFilter,\n EsolveMultipleSelectFilter,\n EsolveRangeFilter,\n EsolveSingleSelectFilter,\n EsolveToggleFilter,\n} from './classes';\nimport {\n EsolveFilter,\n EsolveFilterDefinitions,\n EsolveGenericFilterDefinition,\n EsolveRangeFilterDefinition,\n} from './interfaces';\n\nfunction isGeneric(\n value: EsolveRangeFilterDefinition | EsolveGenericFilterDefinition,\n): value is EsolveGenericFilterDefinition {\n return 'type' in value && 'value' in value;\n}\n\nexport function createGenericWithValue(\n field: string,\n definition: EsolveGenericFilterDefinition,\n): EsolveGenericFilter {\n return new EsolveGenericFilter(field, definition);\n}\n\nexport function createRangeWithValue(\n field: string,\n min = 0,\n max = 0,\n): EsolveRangeFilter {\n const filter = new EsolveRangeFilter(field);\n filter.setValue(min, max);\n\n return filter;\n}\n\nexport function createSingleSelectWithValue(\n field: string,\n value: string | number,\n): EsolveSingleSelectFilter {\n const filter = new EsolveSingleSelectFilter(field, value);\n\n return filter;\n}\n\nexport function createToggleSelectWithValue(\n field: string,\n value: boolean,\n): EsolveToggleFilter {\n const filter = new EsolveToggleFilter(field, value);\n\n return filter;\n}\n\nexport function createMultipleSelectWithValue(\n field: string,\n value: (string | number)[],\n): EsolveMultipleSelectFilter {\n const filter = new EsolveMultipleSelectFilter(field);\n filter.setValue(value);\n\n return filter;\n}\n\nexport function covertFromObj(obj: EsolveFilterDefinitions): EsolveFilter[] {\n const filters: EsolveFilter[] = [];\n\n for (const field in obj) {\n const value = obj[field];\n let filter = null;\n\n if (Array.isArray(value)) {\n filter = createMultipleSelectWithValue(field, value);\n } else if (typeof value === 'object') {\n if (isGeneric(value)) {\n filter = createGenericWithValue(field, value);\n } else {\n filter = createRangeWithValue(field, value.min, value.max);\n }\n } else if (typeof value === 'boolean') {\n filter = createToggleSelectWithValue(field, value);\n } else {\n filter = createSingleSelectWithValue(field, value);\n }\n\n if (filter) {\n filters.push(filter);\n }\n }\n\n return filters;\n}\n\nexport function convertToHttpParams(filters: EsolveFilter[]): {\n [x: string]: string | number | (string | number)[];\n};\n\nexport function convertToHttpParams(\n filters: EsolveFilter[],\n http_params: HttpParams,\n): HttpParams;\n\nexport function convertToHttpParams(\n filters: EsolveFilter[],\n http_params?: HttpParams,\n): HttpParams | { [x: string]: string | number | (string | number)[] } {\n if (http_params) {\n for (const filter of filters) {\n http_params = filter.toHttpParams(http_params);\n }\n\n return http_params;\n }\n\n let params = {};\n\n for (const filter of filters) {\n params = {\n ...params,\n ...filter.toHttpParams(),\n };\n }\n\n return params;\n}\n","import { EsolveResponseLogItem, EsolvePostResponseItem } from '../interfaces';\n\nexport class EsolveResponseResult {\n public success_log: EsolveResponseLogItem[] = [];\n public error_log: EsolveResponseLogItem[] = [];\n\n constructor(response: EsolvePostResponseItem) {\n this.error_log.push(\n ...response.log.filter((log_item) => log_item.type === 'error'),\n );\n this.success_log.push(\n ...response.log.filter((log_item) => log_item.type === 'success'),\n );\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { EsolveResponseResult } from './classes';\nimport { EsolvePostResponseItem, EsolveSetResponse } from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveResponseHandlerService {\n /**\n * Parse single HTTP response\n *\n * @param http_response HTTP Response to eSolve service\n * @param resultHandler Function to parse response to a result\n *\n * @returns Parsed result of response\n */\n public validateSingleHttpResponse<\n R extends EsolveResponseResult,\n T extends EsolvePostResponseItem,\n >(\n http_response: EsolveSetResponse<T>,\n resultHandler: (response: T) => R,\n ): R {\n if (\n http_response.responses === undefined ||\n http_response.responses.length <= 0\n ) {\n throw http_response;\n }\n\n const response = http_response.responses[0];\n\n if (\n response.status.state === 'error' ||\n response.status.state === 'none'\n ) {\n throw response;\n }\n\n return resultHandler(response);\n }\n}\n","// Types\nexport * from './esolve-sort-order.type';\n// Interfaces\nexport * from './esolve-sort.interface';\n","/**\n * Generates a short hexadecimal hash that will be used to indicate a change in\n * state.\n *\n * NOTE: Not to be confused with an actual hash checksum, like MD5 or SHA256.\n * It should only be used to indicate that a state has changed. It should not be\n * used for encryption.\n *\n * @param values Raw strings and numbers to hash\n *\n * @returns Hexadecimal hash value\n */\nexport function esolveHexHash(...values: (string | number)[]): string {\n // Add an extra value to pad out hash\n values.push('esolve_eurus');\n\n // Create a string from the values\n const string = values.join('::');\n\n let hash = 0;\n\n for (let x = 0; x < string.length; x++) {\n const ch = string.charCodeAt(x);\n hash = (hash << 5) - hash + ch;\n hash = hash & hash;\n }\n\n return Math.abs(hash).toString(16);\n}\n","export class EsolveList<T> {\n constructor(\n public items: T[] = [],\n public page: number = 0,\n public rows: number = 0,\n public total: number = 0,\n ) {}\n}\n","export class EsolveResult {\n constructor(\n public status: string,\n public code: string,\n public message: string,\n ) {}\n}\n","import { Injectable, PLATFORM_ID, inject } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport {\n BehaviorSubject,\n Observable,\n Subject,\n switchMap,\n takeUntil,\n timer,\n combineLatest,\n map,\n shareReplay,\n filter,\n distinctUntilChanged,\n debounceTime,\n} from 'rxjs';\n\nimport { fromUnixTime } from 'date-fns';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveCookieService } from '../shared/cookie';\nimport { esolveHexHash } from '../shared/esolve-hex-hash.function';\nimport { EsolveSession } from './interfaces';\n\ninterface SessionUpdateOptions {\n user_id?: number;\n location_id?: number;\n addresses_id?: number;\n shipping_id?: number;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveSessionService {\n private readonly is_browser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly config = inject(EsolveConfigService);\n private readonly cookieService = inject(EsolveCookieService);\n\n private token$ = new BehaviorSubject<string>('');\n private user_id$ = new BehaviorSubject<number>(0);\n private access_level$ = new BehaviorSubject<number>(0);\n private location_id$ = new BehaviorSubject<number>(0);\n private addresses_id$ = new BehaviorSubject<number>(0);\n private shipping_id$ = new BehaviorSubject<number>(0);\n private state_hash = '';\n\n private _session: Observable<EsolveSession>;\n\n private storage_key = '';\n\n /* These are RxJS subjects used for managing the expiration of the user session. */\n private timer_start = new Subject<number | Date>();\n private timer_stop = new Subject<void>();\n private expire = new Subject<void>();\n private session_end = new Subject<void>();\n\n constructor() {\n this.setStorageKey();\n this._session = this.initSession();\n\n this.getSession()\n .pipe(\n map(({ token, user_id, location_id }) => {\n return esolveHexHash(token, user_id, location_id);\n }),\n )\n .subscribe((hash) => {\n this.state_hash = hash;\n });\n\n this.timer_start\n .pipe(\n switchMap((time) => {\n return timer(time).pipe(takeUntil(this.timer_stop));\n }),\n )\n .subscribe(() => {\n // Stored time expired. Check if session is valid\n this.session_end.next();\n });\n\n // Kill session and reset state\n this.onExpire().subscribe(() => {\n this.reset();\n });\n }\n\n private initSession(): Observable<EsolveSession> {\n const session = {\n token: this.onTokenUpdate(),\n user_id: this.onUserIdUpdate(),\n access_level: this.onAccessLevelUpdate(),\n location_id: this.onLocationIdUpdate(),\n addresses_id: this.onAddressesIdUpdate(),\n shipping_id: this.onShippingIdUpdate(),\n };\n\n return combineLatest(session).pipe(\n // Delays the emit only slightly incase multiple values are set\n debounceTime(10),\n shareReplay(1),\n );\n }\n\n public isValid() {\n return this.getToken() !== '';\n }\n\n public getSession(): Observable<EsolveSession> {\n return this._session;\n }\n\n public getSessionValue(): EsolveSession {\n return {\n token: this.token$.getValue(),\n user_id: this.user_id$.getValue(),\n access_level: this.access_level$.getValue(),\n location_id: this.location_id$.getValue(),\n addresses_id: this.addresses_id$.getValue(),\n shipping_id: this.shipping_id$.getValue(),\n };\n }\n\n public onSessionEnd(): Observable<void> {\n return this.session_end.asObservable();\n }\n\n public onExpire(): Observable<void> {\n return this.expire.asObservable();\n }\n\n public expireSession(): void {\n this.expire.next();\n }\n\n public getToken(): string {\n return this.token$.getValue();\n }\n\n public onTokenUpdate(): Observable<string> {\n return this.token$.asObservable().pipe(\n filter((token) => token !== ''),\n distinctUntilChanged(),\n );\n }\n\n public updateToken(token: string): void {\n this.token$.next(token);\n }\n\n public getUserId(): number {\n return this.user_id$.getValue();\n }\n\n public getAccessLevel(): number {\n return this.access_level$.getValue();\n }\n\n public onUserIdUpdate(): Observable<number> {\n return this.user_id$.asObservable().pipe(distinctUntilChanged());\n }\n\n public onAccessLevelUpdate(): Observable<number> {\n return this.access_level$.asObservable().pipe(distinctUntilChanged());\n }\n\n public updateUserId(user_id: number): void {\n this.user_id$.next(user_id);\n }\n\n public updateAccessLevel(access_level: number) {\n this.access_level$.next(access_level);\n }\n\n public getLocationId(): number {\n return this.location_id$.getValue();\n }\n\n public onLocationIdUpdate(): Observable<number> {\n return this.location_id$.asObservable().pipe(distinctUntilChanged());\n }\n\n public updateLocationId(location_id: number): void {\n this.location_id$.next(location_id);\n }\n\n public getAddressesId(): number {\n return this.addresses_id$.getValue();\n }\n\n public onAddressesIdUpdate(): Observable<number> {\n return this.addresses_id$.asObservable().pipe(distinctUntilChanged());\n }\n\n public updateAddressesId(addresses_id: number): void {\n this.addresses_id$.next(addresses_id);\n }\n\n public getShippingId(): number {\n return this.shipping_id$.getValue();\n }\n\n public onShippingIdUpdate(): Observable<number> {\n return this.shipping_id$.asObservable().pipe(distinctUntilChanged());\n }\n\n public updateShippingId(shipping_id: number): void {\n this.shipping_id$.next(shipping_id);\n }\n\n public getStateHash(): string {\n return this.state_hash;\n }\n\n public stopTimer(): void {\n this.timer_stop.next();\n }\n\n public startTimer(time: number | Date): void {\n this.timer_start.next(time);\n }\n\n public getCachedSession(): string | null {\n return this.getCache();\n }\n\n public reset(): void {\n this.removeCache();\n this.timer_stop.next();\n }\n\n public handleSession(\n session: EsolveSession,\n expiry_date_unix: number,\n grace_unix: number,\n ): void {\n const expiry_date = fromUnixTime(expiry_date_unix);\n const grace_expiry_date = fromUnixTime(expiry_date_unix + grace_unix);\n\n this.setCache(session.token, grace_expiry_date);\n this.updateUserId(session.user_id);\n this.updateAccessLevel(session.access_level);\n this.updateLocationId(session.location_id);\n this.updateAddressesId(session.addresses_id);\n this.updateShippingId(session.shipping_id);\n // Update token last to make sure session is correctly checked\n this.updateToken(session.token);\n\n this.startTimer(expiry_date);\n }\n\n public handleUpdateSession({\n user_id,\n location_id,\n addresses_id,\n shipping_id,\n }: SessionUpdateOptions): void {\n if (typeof user_id !== 'undefined') {\n this.updateUserId(user_id);\n }\n\n if (typeof location_id !== 'undefined') {\n this.updateLocationId(location_id);\n }\n\n if (typeof addresses_id !== 'undefined') {\n this.updateAddressesId(addresses_id);\n }\n\n if (typeof shipping_id !== 'undefined') {\n this.updateShippingId(shipping_id);\n }\n }\n\n private setStorageKey(): void {\n if (\n typeof this.config.session_storage_key === 'string' &&\n this.config.session_storage_key !== ''\n ) {\n this.storage_key = this.config.session_storage_key;\n }\n }\n\n private getCache(): string | null {\n const data = this.cookieService.get(this.storage_key);\n\n if (data !== '') {\n return data;\n }\n\n if (!this.is_browser || !localStorage) {\n return null;\n }\n\n return localStorage.getItem(this.storage_key);\n }\n\n private setCache(data: string, expiration_date?: Date): void {\n this.cookieService.set(this.storage_key, data, expiration_date, '/');\n\n if (!this.is_browser || !localStorage) {\n return;\n }\n\n localStorage.setItem(this.storage_key, data);\n }\n\n private removeCache(): void {\n this.cookieService.delete(this.storage_key, '/');\n\n if (!this.is_browser || !localStorage) {\n return;\n }\n\n localStorage.removeItem(this.storage_key);\n }\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveErrorHandlerService } from '../shared/errors';\nimport { EsolveResult } from '../shared/esolve-result.model';\nimport {\n EsolveDeleteResponse,\n EsolveGetResponse,\n EsolvePostResponseItem,\n EsolveResponseHandlerService,\n EsolveResponseResult,\n EsolveSetResponse,\n} from '../shared/response';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveSessionMetadataService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n public set(type: string, metadata: any): Observable<EsolveResponseResult> {\n return this.http\n .post<EsolveSetResponse<EsolvePostResponseItem>>(\n `${this.config.api_url}/set-sessions-metadata.php`,\n metadata,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n params: { type },\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveResponseResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-sessions-metadata',\n errorRes,\n );\n }),\n );\n }\n\n public get<T>(type: string): Observable<T> {\n return this.http\n .get<EsolveGetResponse<T>>(\n `${this.config.api_url}/get-sessions-metadata.php`,\n {\n params: { type },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n (Array.isArray(response.records) &&\n response.records.length === 0)\n ) {\n throw response;\n }\n\n return response.records as T;\n }),\n );\n }\n\n public delete(type: string): Observable<EsolveResult> {\n return this.http\n .delete<EsolveDeleteResponse>(\n `${this.config.api_url}/delete-sessions-metadata.php`,\n {\n params: { type },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) => {\n if (\n http_response.result === undefined ||\n http_response.result === null ||\n http_response.result.status !== 'success'\n ) {\n throw http_response;\n }\n\n return new EsolveResult(\n http_response.result.status,\n http_response.result.code,\n http_response.result.message,\n );\n }),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpDeleteError(\n 'delete-sessions-metadata',\n errorRes,\n );\n }),\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport {\n HttpClient,\n HttpParams,\n HttpErrorResponse,\n HttpHeaders,\n} from '@angular/common/http';\n\nimport { firstValueFrom, Observable, of, throwError } from 'rxjs';\nimport { tap, catchError, map, switchMap } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveErrorHandlerService } from '../shared';\n\nimport { EsolveSessionService } from '../session';\n\nimport {\n EsolveAuthGetResponse,\n EsolveAuthCheckResponse,\n EsolveAuthResult,\n EsolveLoginResponse,\n} from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveAuthService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly session = inject(EsolveSessionService);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n\n constructor() {\n this.session\n .onSessionEnd()\n .pipe(\n switchMap(() => this.checkAccessToken()),\n catchError(() => of(null)),\n )\n .subscribe((result) => {\n if (result) {\n this.handleAuthentication(result);\n } else {\n this.session.expireSession();\n }\n });\n\n this.session.onExpire().subscribe(() => {\n this.logout().catch(() => {\n // Deal with error gracefully\n });\n });\n }\n\n public getAccessToken(\n email: string,\n password: string,\n anonymous = false,\n ): Observable<EsolveAuthGetResponse> {\n let params = new HttpParams();\n\n if (anonymous) {\n params = params.set('anonymous', true);\n }\n\n if (email !== '') {\n params = params.set('email', email);\n }\n\n if (password !== '') {\n params = params.set('password', password);\n }\n\n return this.http\n .get<EsolveAuthGetResponse>(\n `${this.config.api_url}/get-access-token.php`,\n {\n params,\n headers: new HttpHeaders({\n 'Accept-Language': '*',\n }),\n },\n )\n .pipe(\n tap((response) => {\n if (\n response.type === 'error' ||\n response.type === 'exception'\n ) {\n throw response;\n }\n }),\n catchError(this.handleError),\n tap((response) => {\n this.handleAuthentication(response.additional_data);\n }),\n );\n }\n\n public getAnonymousSession(): Observable<EsolveAuthGetResponse> {\n return this.getAccessToken('', '', true);\n }\n\n public async autoLogin(): Promise<void> {\n let result = await this.restore();\n\n try {\n if (!result) {\n const response = await firstValueFrom(\n this.getAnonymousSession(),\n );\n\n result = response.additional_data;\n }\n\n this.handleAuthentication(result);\n } catch (error) {\n console.error(error);\n }\n }\n\n public login(email: string, password: string): Observable<number> {\n const body = {\n login: {\n email,\n password,\n },\n };\n\n return this.http\n .post<EsolveLoginResponse>(\n `${this.config.api_url}/set-login.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((response) => {\n if (\n response.responses === undefined ||\n response.responses.length <= 0\n ) {\n throw response;\n }\n\n const login_response = response.responses[0];\n const result = response.additional_data;\n\n if (\n login_response.status.state !== 'success' &&\n login_response.status.state !== 'warning'\n ) {\n throw login_response;\n }\n\n for (const response_log of login_response.log) {\n if (\n response_log.type === 'success' &&\n response_log.message_code === 'login_success'\n ) {\n const user_id = +login_response.esolve_id;\n\n if (Array.isArray(result)) {\n throw new Error('Invalid login');\n }\n\n this.handleAuthentication({\n key: result.key,\n user_id: result.user_id,\n access_level: result.access_level,\n location_id: result.location_id,\n addresses_id: result.addresses_id,\n shipping_id: result.shipping_id,\n expires: result.expires,\n expiry_time: result.expiry_time,\n grace_period: result.grace_period,\n });\n\n return user_id;\n }\n }\n\n throw login_response;\n }),\n catchError((errorRes: HttpErrorResponse) => {\n return this.errorHandler.handleHttpPostError(\n 'set-login',\n errorRes,\n );\n }),\n );\n }\n\n public async logout(): Promise<EsolveAuthGetResponse> {\n this.session.stopTimer();\n\n const response = await firstValueFrom(\n this.getAccessToken('', '', true),\n );\n\n return response;\n }\n\n public async validateCachedTokens(): Promise<boolean> {\n let valid = false;\n\n try {\n const session = this.session.getCachedSession();\n\n if (!session) {\n throw new Error('Invalid session');\n }\n\n const result = await this.checkAccessToken(session);\n\n if (!result.key) {\n throw new Error('Invalid key');\n }\n\n valid = true;\n } catch (error) {\n this.session.reset();\n }\n\n return valid;\n }\n\n private async checkAccessToken(\n token = this.session.getToken(),\n ): Promise<EsolveAuthResult> {\n if (token === '') {\n throw new Error('Invalid Token');\n }\n\n const response = await firstValueFrom(\n this.http.get<EsolveAuthCheckResponse>(\n `${this.config.api_url}/get-access-token.php`,\n {\n headers: new HttpHeaders({\n 'Accept-Language': '*',\n Authorization: `Bearer ${token}`,\n }),\n },\n ),\n );\n\n if (response.type === 'error' || response.type === 'exception') {\n throw response;\n }\n\n const additional_data = response.additional_data;\n\n if (!additional_data.key_okay) {\n throw response;\n }\n\n if (additional_data.key) {\n token = additional_data.key;\n }\n\n const result: EsolveAuthResult = {\n key: token,\n expires: +additional_data.expires,\n expiry_time: +additional_data.expiry_time,\n grace_period: +additional_data.grace_period,\n location_id: +additional_data.location_id,\n user_id: +additional_data.user_id,\n access_level: +additional_data.access_level,\n addresses_id: +additional_data.addresses_id,\n shipping_id: +additional_data.shipping_id,\n };\n\n return result;\n }\n\n private async restore(): Promise<EsolveAuthResult | null> {\n try {\n const token = this.session.getCachedSession();\n\n if (!token) {\n throw new Error('Invalid token');\n }\n\n const result = await this.checkAccessToken(token);\n\n return result;\n } catch (error) {\n this.session.reset();\n }\n\n return null;\n }\n\n // Handlers\n\n public handleExternalAuthentication(result: EsolveAuthResult): void {\n this.handleAuthentication(result);\n }\n\n private handleAuthentication(result: EsolveAuthResult): void {\n if (!result.key) {\n return;\n }\n\n this.session.handleSession(\n {\n token: result.key,\n user_id: +result.user_id,\n access_level: +result.access_level,\n location_id: +result.location_id,\n addresses_id: +result.addresses_id,\n shipping_id: +result.shipping_id,\n },\n +result.expiry_time,\n +result.grace_period,\n );\n }\n\n private handleError(\n errorRes: EsolveAuthGetResponse | EsolveAuthCheckResponse,\n ): Observable<never> {\n const error = {\n message: 'An unknown error occurred',\n data: {},\n };\n\n if (!errorRes.type || !errorRes.service_type || !errorRes.message) {\n return throwError(() => error);\n }\n\n if (errorRes.message.trim() !== '') {\n error.message = errorRes.message;\n }\n\n if (errorRes.additional_data) {\n error.data = errorRes.additional_data;\n }\n\n return throwError(() => error);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport {\n HttpInterceptor,\n HttpRequest,\n HttpHandler,\n HttpEvent,\n} from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\n\nimport { EsolveSessionService } from '../session';\nimport { EsolveConfigService } from '../core';\n\n@Injectable()\nexport class EsolveAuthInterceptorService implements HttpInterceptor {\n private readonly config = inject(EsolveConfigService);\n private readonly session = inject(EsolveSessionService);\n\n public intercept(\n req: HttpRequest<any>,\n next: HttpHandler,\n ): Observable<HttpEvent<any>> {\n if (req.url.startsWith(`${this.config.api_url}/`)) {\n const service_identifier = req.url.replace(\n `${this.config.api_url}/`,\n '',\n );\n\n const modified_url = req.url;\n let params = req.params;\n let headers = req.headers;\n\n if (this.session.isValid()) {\n if (service_identifier !== 'get-access-token.php') {\n headers = headers.set(\n 'Authorization',\n `Bearer ${this.session.getToken()}`,\n );\n }\n\n const state_hash = this.session.getStateHash();\n headers = headers.set('X-Esolve-State-Hash', state_hash);\n }\n\n params = params.set('ws_id', this.config.wsid);\n\n if (this.config.native && this.config.device_designation) {\n headers = headers.set(\n 'X-Device-Designation',\n this.config.device_designation,\n );\n }\n\n const modified_req = req.clone({\n url: modified_url,\n params,\n headers,\n });\n\n return next.handle(modified_req);\n }\n\n return next.handle(req);\n }\n}\n","import { EsolveOtpRecord } from '../interfaces';\n\nexport class EsolveOtp {\n public otp_generated = false;\n public otp_key = '';\n public otp_sms_sent = false;\n public otp_expiry?: Date;\n public sms_response = '';\n\n constructor(record: EsolveOtpRecord) {\n this.otp_generated = record.otp_generated;\n this.otp_key = record.otp_key;\n this.otp_sms_sent = record.otp_sms_sent;\n this.otp_expiry = new Date(+record.otp_expiry * 1000);\n this.sms_response = record.sms_response;\n }\n}\n","import {\n EsolveLoginPostResponseItem,\n EsolveOtpValidationRecord,\n} from '../interfaces';\nimport { EsolveOtpAction } from '../types';\n\nexport class EsolveOtpValidation {\n public otp_action: EsolveOtpAction = '';\n public otp_valid?: boolean;\n public otp_deleted?: boolean;\n public login_success?: boolean;\n public login_response?: EsolveLoginPostResponseItem;\n\n constructor(record: EsolveOtpValidationRecord) {\n this.otp_action = this.getAction(record.otp_action);\n this.otp_valid = record.otp_valid;\n this.otp_deleted = record.otp_deleted;\n this.login_success = record.login_success;\n this.login_response = record.login_response;\n }\n\n private getAction(otp_action?: string): EsolveOtpAction {\n if (otp_action === undefined) {\n return '';\n }\n\n if (otp_action !== 'login') {\n return '';\n }\n\n return otp_action;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { Observable, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared';\n\nimport { EsolveOtpAction, EsolveValidateOtpResponse } from './types';\nimport { EsolveOtpRecord } from './interfaces';\nimport { EsolveOtp, EsolveOtpValidation } from './models';\nimport { EsolveAuthService } from './esolve-auth.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveOtpService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly auth = inject(EsolveAuthService);\n\n public getOtp(recipient_number?: string): Observable<EsolveOtp> {\n let params = new HttpParams();\n\n if (recipient_number) {\n params = params.set('recipient_number', recipient_number);\n }\n\n try {\n return this.http\n .get<EsolveGetResponse<EsolveOtpRecord>>(\n `${this.config.api_url}/get-otp.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n return new EsolveOtp(response.records);\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n public getValidateOtp(\n otp_key: string,\n otp_code: string,\n otp_action: EsolveOtpAction = '',\n email = '',\n cellnumber = '',\n ): Observable<EsolveOtpValidation> {\n try {\n return this.http\n .get<EsolveValidateOtpResponse>(\n `${this.config.api_url}/get-otp-validation.php`,\n {\n params: {\n otp_key,\n otp_code,\n otp_action,\n email,\n cellnumber,\n },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n const additional_data = response.additional_data;\n\n if (\n !Array.isArray(additional_data) &&\n additional_data.key\n ) {\n this.auth.handleExternalAuthentication(\n additional_data,\n );\n }\n\n return new EsolveOtpValidation(response.records);\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n}\n","import { APP_INITIALIZER, Provider } from '@angular/core';\n\nimport { EsolveAuthService } from '../esolve-auth.service';\n\nexport const ESOLVE_EURUS_AUTO_LOGIN: Provider = {\n provide: APP_INITIALIZER,\n multi: true,\n deps: [EsolveAuthService],\n useFactory: (auth: EsolveAuthService) => async () => {\n await auth.autoLogin();\n\n return true;\n },\n};\n","import {\n HTTP_INTERCEPTORS,\n provideHttpClient,\n withInterceptorsFromDi,\n} from '@angular/common/http';\nimport { EnvironmentProviders, Provider } from '@angular/core';\n\nimport { SsrCookieService } from 'ngx-cookie-service-ssr';\n\nimport {\n EsolveAuthInterceptorService,\n ESOLVE_EURUS_AUTO_LOGIN,\n} from '../../auth';\n\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\nimport { EsolveConnectConfig } from '../esolve-connect-config.interface';\n\nexport function provideNgEsolveConnect(\n config: EsolveConnectConfig,\n auto_login = false,\n): (Provider | EnvironmentProviders)[] {\n const providers: (Provider | EnvironmentProviders)[] = [\n SsrCookieService,\n {\n provide: ESOLVE_CONNECT_CONFIG,\n useValue: config,\n },\n {\n provide: HTTP_INTERCEPTORS,\n useClass: EsolveAuthInterceptorService,\n multi: true,\n },\n provideHttpClient(withInterceptorsFromDi()),\n ];\n\n if (auto_login) {\n providers.push(ESOLVE_EURUS_AUTO_LOGIN);\n }\n\n return providers;\n}\n","import { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { EsolveConnectConfig, provideNgEsolveConnect } from './core';\n\n@NgModule({\n imports: [CommonModule, HttpClientModule],\n})\nexport class NgEsolveConnectModule {\n public static forRoot(\n config: EsolveConnectConfig,\n auto_login = false,\n ): ModuleWithProviders<NgEsolveConnectModule> {\n return {\n ngModule: NgEsolveConnectModule,\n providers: provideNgEsolveConnect(config, auto_login),\n };\n }\n}\n","export function isEsolveCdnPath(path: string): boolean {\n const cdn_regex =\n /^\\/?images\\/(?:stock|media|news|assets|banners|documents|manufacturers|ranges|categories|subcategories|tags|specials)\\//;\n\n return cdn_regex.test(path);\n}\n","export function isFtgCdnPath(path: string): boolean {\n const cdn_regex = /^\\/?images\\/(?:stock)\\//;\n\n return cdn_regex.test(path);\n}\n","export function isLegacyEsolveCdnPath(path: string): boolean {\n const cdn_regex =\n /^\\/?images\\/(?:media|news|assets|banners|documents|manufacturers|ranges|categories|subcategories|tags|specials)\\//;\n\n return cdn_regex.test(path);\n}\n","import { isEsolveCdnPath } from './is-esolve-cdn-path.function';\nimport { isFtgCdnPath } from './is-ftg-cdn-path.function';\nimport { isLegacyEsolveCdnPath } from './is-legacy-esolve-cdn-path.function';\n\nfunction isAbsoluteUrl(src: string): boolean {\n return /^https?:\\/\\//.test(src);\n}\nfunction normalizePath(path: string): string {\n return path.endsWith('/') ? path.slice(0, -1) : path;\n}\n\nfunction normalizeSrc(src: string): string {\n return src.startsWith('/') ? src.slice(1) : src;\n}\n\nexport function processEsolveImageSrc(\n src: string,\n cdn_url = '',\n legacy_cdn_url = '',\n ftg_cdn?: string,\n) {\n if (isAbsoluteUrl(src)) {\n return src;\n }\n\n cdn_url = normalizePath(cdn_url);\n legacy_cdn_url = normalizePath(legacy_cdn_url);\n\n if (cdn_url === '') {\n return src;\n }\n\n if (legacy_cdn_url === '') {\n legacy_cdn_url = cdn_url;\n }\n\n if (!isEsolveCdnPath(src)) {\n return src;\n }\n\n src = normalizeSrc(src);\n\n if (isLegacyEsolveCdnPath(src)) {\n return `${legacy_cdn_url}/${src}`;\n }\n\n if (ftg_cdn && isFtgCdnPath(src)) {\n ftg_cdn = normalizePath(ftg_cdn);\n\n return `${ftg_cdn}/${src}`;\n }\n\n return `${cdn_url}/${src}`;\n}\n","import { ImageLoaderConfig, IMAGE_LOADER } from '@angular/common';\nimport { Provider } from '@angular/core';\n\nimport { EsolveConfigService } from '../core';\nimport { processEsolveImageSrc } from './functions';\n\nconst ESOLVE_IMAGE_LOADER_PROVIDER: Provider = {\n provide: IMAGE_LOADER,\n useFactory: (esolveConfig: EsolveConfigService) => {\n return (config: ImageLoaderConfig) => {\n return processEsolveImageSrc(\n config.src,\n esolveConfig.cdn,\n esolveConfig.legacy_cdn,\n esolveConfig.ftg_cdn,\n );\n };\n },\n deps: [EsolveConfigService],\n};\n\nexport function provideEsolveImageLoader(): Provider {\n return ESOLVE_IMAGE_LOADER_PROVIDER;\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnChanges,\n inject,\n} from '@angular/core';\n\nimport { EsolveConfigService } from '../../core';\nimport { processEsolveImageSrc } from '../functions';\n\n/**\n * An alternative to optimised images to load a new image\n */\n@Directive({\n selector: '[eslvCdnSrc]',\n standalone: true,\n})\nexport class EsolveCdnSrcDirective implements OnChanges {\n private readonly el = inject(\n ElementRef<HTMLImageElement | HTMLSourceElement>,\n );\n private readonly config = inject(EsolveConfigService);\n\n @Input('eslvCdnSrc') public src = '';\n private no_image = false;\n private error_image_path = '/assets/no_image.jpg';\n\n constructor() {\n if (this.config.error_image_path) {\n this.error_image_path = this.config.error_image_path;\n }\n\n if (this.isImage(this.el.nativeElement)) {\n this.el.nativeElement.loading = 'lazy';\n }\n }\n\n public ngOnChanges(): void {\n this.init();\n }\n\n @HostListener('error')\n public onError() {\n this.setErrorImage();\n }\n\n public init(): void {\n this.no_image = false;\n\n if (this.src === '') {\n this.setErrorImage();\n\n return;\n }\n\n const image_src = processEsolveImageSrc(\n this.src,\n this.config.cdn,\n this.config.legacy_cdn,\n this.config.ftg_cdn,\n );\n\n this.setSrc(image_src);\n }\n\n private setSrc(src: string) {\n if (this.isImage(this.el.nativeElement)) {\n this.el.nativeElement.src = src;\n } else {\n this.el.nativeElement.srcset = src;\n }\n }\n\n private setErrorImage() {\n if (this.no_image) {\n return;\n }\n\n this.setSrc(this.error_image_path);\n this.no_image = true;\n }\n\n private isImage(\n el: HTMLImageElement | HTMLSourceElement,\n ): el is HTMLImageElement {\n return 'loading' in this.el.nativeElement;\n }\n}\n","/**\n * Search Engine Optimization information.\n */\nexport class EsolveSeoInfo {\n constructor(\n public title: string = '',\n public description: string = '',\n public keywords: string = '',\n public canonical_url: string = '',\n ) {}\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { DOCUMENT } from '@angular/common';\n\nimport { EsolveConfigService } from '../core';\n\nimport { EsolveSeoInfo } from './classes';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveSeoService {\n private readonly config = inject(EsolveConfigService);\n private readonly title = inject(Title);\n private readonly meta = inject(Meta);\n private readonly dom = inject(DOCUMENT);\n\n private title_prefix = '';\n private title_suffix = '';\n private title_separator = '|';\n\n private default_seo_title = '';\n private default_seo_description = '';\n private default_seo_keywords = '';\n private default_seo_url = '';\n\n constructor() {\n this.init();\n }\n\n /**\n * Sets SEO tags for page\n * @param seoInfo SEO object\n */\n public setTags(seoInfo: EsolveSeoInfo): void {\n seoInfo = this.validateAndSanitizeSeoInfo(seoInfo);\n\n this.setPageTitleTags(seoInfo.title);\n this.setPageDescriptionTags(seoInfo.description);\n this.setPageKeywordsTags(seoInfo.keywords);\n this.setPageCanonicalUrl(seoInfo.canonical_url);\n }\n\n private init(): void {\n this.title_prefix = this.config.title_prefix;\n this.title_suffix = this.config.title_suffix;\n this.title_separator = this.config.title_separator;\n this.default_seo_title = this.config.default_seo_title;\n this.default_seo_description = this.config.default_seo_description;\n this.default_seo_keywords = this.config.default_seo_keywords;\n this.default_seo_url = this.config.site_url;\n }\n\n private setPageTitleTags(title: string): void {\n this.title.setTitle(title);\n this.meta.updateTag({ property: 'og:title', content: title });\n }\n\n private setPageDescriptionTags(description: string): void {\n this.meta.updateTag({ name: 'description', content: description });\n this.meta.updateTag({\n property: 'og:description',\n content: description,\n });\n }\n\n private setPageKeywordsTags(keywords: string): void {\n this.meta.updateTag({ name: 'keywords', content: keywords });\n }\n\n private setPageCanonicalUrl(canonical_url: string): void {\n const head = this.dom.head;\n let element = this.dom.querySelector<HTMLLinkElement>(\n `link[rel='canonical']`,\n );\n\n if (!element) {\n element = this.dom.createElement('link');\n element.setAttribute('rel', 'canonical');\n head.appendChild(element);\n }\n\n element.setAttribute('href', canonical_url);\n }\n\n private validateAndSanitizeSeoInfo(seo_info: EsolveSeoInfo): EsolveSeoInfo {\n const pageSeo = new EsolveSeoInfo(\n this.default_seo_title,\n this.default_seo_description,\n this.default_seo_keywords,\n this.default_seo_url,\n );\n\n if (seo_info.description.trim() !== '') {\n pageSeo.description = seo_info.description;\n }\n\n if (seo_info.title.trim() !== '') {\n const titlePartsArray = [];\n\n if (this.title_prefix !== '') {\n titlePartsArray.push(this.title_prefix);\n\n if (this.title_separator !== '') {\n titlePartsArray.push(this.title_separator);\n }\n }\n\n titlePartsArray.push(seo_info.title);\n\n if (this.title_suffix !== '') {\n if (this.title_separator !== '') {\n titlePartsArray.push(this.title_separator);\n }\n\n titlePartsArray.push(this.title_suffix);\n }\n\n pageSeo.title = titlePartsArray.join(' ');\n\n if (seo_info.keywords.trim() === '') {\n const clean_title = seo_info.title\n .replace(/[^a-z0-9. ]+/gi, '')\n .trim();\n const keywords = clean_title.split(' ');\n const clean_keywords: string[] = [];\n\n for (let keyword of keywords) {\n keyword = keyword.trim();\n if (keyword.length > 2) {\n keyword = keyword.toLocaleLowerCase();\n if (!clean_keywords.includes(keyword)) {\n clean_keywords.push(keyword);\n }\n }\n }\n\n seo_info.keywords = clean_keywords.join(',');\n }\n }\n\n if (seo_info.keywords.trim() !== '') {\n pageSeo.keywords = seo_info.keywords;\n }\n\n if (seo_info.canonical_url.trim() !== '') {\n pageSeo.canonical_url = seo_info.canonical_url;\n }\n\n return pageSeo;\n }\n}\n","export class EsolveGeocodeAddressResult {\n constructor(\n public street_number: string,\n public street: string,\n public suburb: string,\n public city: string,\n public province: string,\n public country: string,\n public postal_code: string,\n ) {}\n}\n","export class EsolveGeocodeCoordsResult {\n constructor(\n public latitude: number,\n public longitude: number,\n ) {}\n}\n","import { EsolveGeocodeAddressResult } from './esolve-geocode-address-result.model';\nimport { EsolveGeocodeCoordsResult } from './esolve-geocode-coords-result.model';\n\nexport class EsolveGeocodeResult {\n constructor(\n public formatted_address: string,\n public address: EsolveGeocodeAddressResult,\n public coords: EsolveGeocodeCoordsResult,\n public status: string,\n public checksum: string,\n public cached: boolean,\n ) {}\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport {\n EsolveGeocodeResult,\n EsolveGeocodeAddressResult,\n EsolveGeocodeCoordsResult,\n} from './classes';\nimport { EsolveGeocodeResultRecord } from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveGeocoderService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n public geocode(\n street_number: string,\n street: string,\n suburb: string,\n city: string,\n province: string,\n country: string,\n postal_code: string,\n ): Observable<EsolveGeocodeResult> {\n return this.http\n .get<EsolveGetResponse<EsolveGeocodeResultRecord>>(\n `${this.config.api_url}/get-geocode.php`,\n {\n params: {\n street_number,\n street,\n suburb,\n city,\n province,\n country,\n postal_code,\n },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n const record = response.records;\n\n return this.processGeocodeResult(record);\n }),\n );\n }\n\n public reverseGeocode(\n latitude: number,\n longitude: number,\n ): Observable<EsolveGeocodeResult> {\n return this.http\n .get<EsolveGetResponse<EsolveGeocodeResultRecord>>(\n `${this.config.api_url}/get-geocode.php`,\n {\n params: {\n latitude: latitude,\n longitude: longitude,\n },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n const record = response.records;\n\n return this.processGeocodeResult(record);\n }),\n );\n }\n\n private processGeocodeResult(\n record: EsolveGeocodeResultRecord,\n ): EsolveGeocodeResult {\n const geocode_address = new EsolveGeocodeAddressResult(\n record.address.street_number,\n record.address.street,\n record.address.suburb,\n record.address.city,\n record.address.province,\n record.address.country,\n record.address.postal_code,\n );\n\n const geocode_coords = new EsolveGeocodeCoordsResult(\n record.latitude,\n record.longitude,\n );\n\n const geocode_result = new EsolveGeocodeResult(\n record.formatted_address,\n geocode_address,\n geocode_coords,\n record.status,\n record.checksum,\n record.cached,\n );\n\n return geocode_result;\n }\n}\n","import { EsolveAssetType } from '../types';\nimport { EsolveLinkedAssetRecord } from '../interfaces';\n\nexport class EsolveLinkedAsset {\n public id: number;\n public name: string;\n public type: EsolveAssetType;\n public description: string;\n public src: string;\n\n private image_name = '';\n\n /**\n * Shortcut to `getImagePath()`\n */\n public get image_src(): string {\n return this.getImagePath();\n }\n\n constructor(record: EsolveLinkedAssetRecord) {\n this.id = +record.id;\n this.name = record.name;\n this.type = record.type;\n this.description = record.description;\n this.src = record.src;\n this.image_name = record.image_name ?? '';\n }\n\n /**\n * Retrieve image path\n *\n * @returns Image path on CDN, else empty string if no image exists\n */\n public getImagePath(): string {\n if (this.image_name !== '') {\n return `/images/documents/${this.image_name}`;\n }\n\n return '';\n }\n}\n","import { EsolveSeoDetails, EsolveSeoInfo } from '../../seo';\n\nexport class EsolveCategoryTreeItem implements EsolveSeoDetails {\n public id = '';\n public seo_details: EsolveSeoInfo;\n public total_stock?: number;\n public children?: EsolveCategoryTreeItem[];\n\n private image_path = '';\n\n public get small_image_src(): string {\n return this.getImagePath('small');\n }\n\n public get thumbnail_image_src(): string {\n return this.getImagePath('thumb');\n }\n\n public get tiny_image_src(): string {\n return this.getImagePath('tiny');\n }\n\n constructor(\n public type: 'category' | 'subcategory',\n public esolve_id: string | number,\n public parent_id: string,\n public description: string,\n public sef_description: string,\n public short_description: string,\n public sort_priority: number,\n public active: boolean,\n public display_only: boolean,\n private image_name: string,\n seo_title: string,\n seo_keywords: string,\n seo_description: string,\n children?: EsolveCategoryTreeItem[],\n ) {\n if (this.type === 'category') {\n this.id = `<<CAT>>${this.esolve_id}`;\n\n if (children != null) {\n this.children = children;\n }\n\n this.image_path = '/images/categories/';\n } else {\n this.id = `<<SUB>>${this.esolve_id}`;\n this.image_path = '/images/subcategories/';\n }\n\n if (seo_title.trim() === '') {\n seo_title = this.description;\n }\n\n this.seo_details = new EsolveSeoInfo(\n seo_title,\n seo_description,\n seo_keywords,\n );\n }\n\n public getImagePath(image_size: 'small' | 'thumb' | 'tiny'): string {\n if (this.image_name !== '') {\n return `${this.image_path}${image_size}/${this.image_name}`;\n }\n\n return '';\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { Observable, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport { EsolveCategoryTreeItem } from './classes';\nimport {\n EsolveCategoryRecord,\n EsolveSubcategoryRecord,\n EsolveCategoryTreeItemOptions,\n EsolveCategoryTreeItemRecord,\n EsolveCategoryIdentifier,\n} from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveCategoryTreeService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n /**\n * Retrieves the category tree from eSolve instance and coverts it to the correct format.\n */\n public getCategoryTree(\n identifier?: string,\n ): Observable<EsolveCategoryTreeItem[]> {\n let params = new HttpParams();\n\n if (identifier) {\n params = params.set('identifier', identifier);\n }\n\n return this.http\n .get<\n EsolveGetResponse<\n (EsolveCategoryRecord | EsolveSubcategoryRecord)[]\n >\n >(`${this.config.api_url}/get-tree.php`, { params })\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processTree(response.records);\n }),\n );\n }\n\n /**\n * Retrieve the special tree structure for a specific special from the eSolve\n * instance and converts it into the correct format\n *\n * @param special_id Id of to special to get tree for\n *\n * @returns Observable containing special tree data\n */\n public getSpecialTree(\n special_id: number,\n ): Observable<EsolveCategoryTreeItem[]> {\n let params = new HttpParams();\n\n params = params.set('special_id', special_id);\n\n return this.http\n .get<\n EsolveGetResponse<\n (EsolveCategoryRecord | EsolveSubcategoryRecord)[]\n >\n >(`${this.config.api_url}/get-special-tree.php`, { params })\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processTree(response.records);\n }),\n );\n }\n\n /**\n * Retrieve the details of a category tree item from the eSolve instance and\n * converts it to the correct format.\n *\n * @param options Filter options\n */\n public getCategoryTreeItem(\n options: EsolveCategoryTreeItemOptions,\n ): Observable<EsolveCategoryTreeItem> {\n let type!: 'category' | 'subcategory';\n let esolve_id!: number | string;\n let sef_description;\n\n if (options.id) {\n const categoryIdentifier = this.processID(options.id);\n\n if (categoryIdentifier) {\n type = categoryIdentifier.type;\n esolve_id = categoryIdentifier.esolve_id;\n }\n } else if (options.type) {\n type = options.type;\n\n if (options.esolve_id) {\n esolve_id = options.esolve_id;\n } else if (options.sef_description) {\n sef_description = options.sef_description;\n }\n }\n\n if (type && (esolve_id || sef_description)) {\n let params = new HttpParams();\n\n params = params.set('type', type);\n\n if (esolve_id) {\n params = params.set('id', esolve_id);\n }\n\n if (sef_description) {\n params = params.set('sef_description', sef_description);\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveCategoryTreeItemRecord[]>>(\n `${this.config.api_url}/get-tree-item.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n return this.processTreeItem(response.records[0]);\n }),\n );\n }\n\n return throwError(() => 'Invalid options');\n }\n\n /**\n * Processes the eSolve tree records and converts them into the correct format.\n *\n * @param tree_records Records to process\n */\n private processTree(\n tree_records: (EsolveCategoryRecord | EsolveSubcategoryRecord)[],\n ): EsolveCategoryTreeItem[] {\n const tree_items: EsolveCategoryTreeItem[] = [];\n\n if (tree_records) {\n for (const tree_record of tree_records) {\n let esolve_id: string | number = '';\n let parent_id = '';\n let children: EsolveCategoryTreeItem[] = [];\n\n if (tree_record.type === 'category') {\n children = this.processTree(tree_record.children);\n esolve_id = tree_record.menu_id;\n parent_id = tree_record.owner_menu_id;\n } else {\n esolve_id = tree_record.id;\n parent_id = tree_record.menu_id;\n }\n\n tree_items.push(\n new EsolveCategoryTreeItem(\n tree_record.type,\n esolve_id,\n parent_id,\n tree_record.description,\n tree_record.sef_description,\n tree_record.seo_description,\n tree_record.sort_priority,\n tree_record.active,\n tree_record.display_only,\n tree_record.image,\n tree_record.seo_page_title,\n tree_record.seo_keywords,\n tree_record.short_description,\n children,\n ),\n );\n }\n }\n\n return tree_items;\n }\n\n private processTreeItem(\n record: EsolveCategoryTreeItemRecord,\n ): EsolveCategoryTreeItem {\n return new EsolveCategoryTreeItem(\n record.type,\n record.id,\n record.parent_id,\n record.description,\n record.sef_description,\n record.short_description,\n record.sort_priority,\n record.active,\n record.display_only,\n record.image,\n record.seo_page_title,\n record.seo_keywords,\n record.seo_description,\n );\n }\n\n private processID(id: string): EsolveCategoryIdentifier | null {\n let type: 'category' | 'subcategory';\n let esolve_id: number | string;\n\n const type_code_regex = /^<<(CAT|SUB)>>/g;\n const match_results = id.match(type_code_regex);\n\n if (match_results) {\n const type_code = match_results[0];\n\n type = type_code === '<<CAT>>' ? 'category' : 'subcategory';\n esolve_id = id.replace(type_code_regex, '');\n\n return {\n type,\n esolve_id,\n };\n }\n\n return null;\n }\n}\n","import { EsolveSeoDetails, EsolveSeoInfo } from '../../seo';\n\nimport { EsolveManufacturerRecord } from '../interfaces';\nimport { EsolveManufacturerImageSize } from '../types';\n\nexport class EsolveManufacturer implements EsolveSeoDetails {\n public id = 0;\n public manufacturer = '';\n public sef_manufacturer = '';\n public title = '';\n public article = '';\n public sort_priority = 0;\n public is_active = false;\n public featured = false;\n public image_name = '';\n public seo_details: EsolveSeoInfo;\n\n public get original_image_src(): string {\n return this.getImagePath('original');\n }\n\n public get small_image_src(): string {\n return this.getImagePath('small');\n }\n\n public get thumbnail_image_src(): string {\n return this.getImagePath('thumb');\n }\n\n public get tiny_image_src(): string {\n return this.getImagePath('tiny');\n }\n\n constructor(record?: Partial<EsolveManufacturerRecord>) {\n let seo_title = '';\n let seo_keywords = '';\n let seo_description = '';\n\n if (record) {\n this.id = +(record.id ?? 0);\n this.manufacturer = record.manufacturer ?? '';\n this.sef_manufacturer = record.sef_manufacturer ?? '';\n this.title = record.title ?? '';\n this.article = record.article ?? '';\n this.sort_priority = +(record.sort_priority ?? 0);\n this.image_name = record.image_name ?? '';\n\n seo_title = record.seo_page_title ?? '';\n seo_keywords = record.seo_keywords ?? '';\n seo_description = record.seo_description ?? '';\n\n if (record.is_active) {\n this.is_active = !!+record.is_active;\n }\n\n if (record.featured) {\n this.featured = !!+record.featured;\n }\n }\n\n if (this.title.trim() === '') {\n this.title = this.manufacturer;\n }\n\n if (seo_title.trim() === '') {\n seo_title = this.title;\n }\n\n this.seo_details = new EsolveSeoInfo(\n seo_title,\n seo_description,\n seo_keywords,\n );\n }\n\n public getImagePath(image_size: EsolveManufacturerImageSize): string {\n if (this.image_name !== '') {\n return `/images/manufacturers/${image_size}/${this.image_name}`;\n }\n\n return '';\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport { EsolveManufacturer } from './classes';\nimport {\n EsolveManufacturerOptions,\n EsolveManufacturerRecord,\n} from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveManufacturersService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n public getManufacturer(id: number): Observable<EsolveManufacturer> {\n const params = new HttpParams({\n fromObject: { manufacturers_id: id },\n });\n\n return this.getManufacturerSingle(params);\n }\n\n public getManufacturerFromSEF(\n sef_manufacturer: string,\n ): Observable<EsolveManufacturer> {\n const params = new HttpParams({\n fromObject: { sef_manufacturer },\n });\n\n return this.getManufacturerSingle(params);\n }\n\n public getManufacturers(\n options?: EsolveManufacturerOptions,\n ): Observable<EsolveManufacturer[]> {\n let params = new HttpParams();\n\n if (options?.featured_only) {\n params = params.set('featured_only', options.featured_only);\n }\n\n return this.getManufacturerRecords(params).pipe(\n map((records) => {\n const manufacturers: EsolveManufacturer[] = [];\n\n for (const record of records) {\n manufacturers.push(this.processManufacturer(record));\n }\n\n return manufacturers;\n }),\n catchError(() => {\n return of<EsolveManufacturer[]>([]);\n }),\n );\n }\n\n private getManufacturerSingle(\n params: HttpParams,\n ): Observable<EsolveManufacturer> {\n return this.getManufacturerRecords(params).pipe(\n map((records) => {\n const record = records[0];\n\n return this.processManufacturer(record);\n }),\n );\n }\n\n private getManufacturerRecords(\n params?: HttpParams,\n ): Observable<EsolveManufacturerRecord[]> {\n return this.http\n .get<EsolveGetResponse<EsolveManufacturerRecord[]>>(\n `${this.config.api_url}/get-manufacturers.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n return response.records;\n }),\n );\n }\n\n private processManufacturer(\n record: EsolveManufacturerRecord,\n ): EsolveManufacturer {\n return new EsolveManufacturer(record);\n }\n}\n","import { EsolveSeoDetails, EsolveSeoInfo } from '../../seo';\n\nimport { EsolveRangeRecord } from '../interfaces';\n\nexport class EsolveRange implements EsolveSeoDetails {\n public id = 0;\n public range = '';\n public sef_range = '';\n public manufacturers_id = 0;\n public title = '';\n public article = '';\n public is_active = false;\n public featured = false;\n public sort_priority = 0;\n public image_name = '';\n public seo_details: EsolveSeoInfo;\n\n public get image_src(): string {\n return this.getImagePath();\n }\n\n constructor(record?: Partial<EsolveRangeRecord>) {\n let seo_title = '';\n let seo_keywords = '';\n let seo_description = '';\n\n if (record) {\n this.id = +(record.id ?? 0);\n this.range = record.range ?? '';\n this.sef_range = record.sef_range ?? '';\n this.manufacturers_id = +(record.manufacturers_id ?? 0);\n this.title = record.title ?? '';\n this.article = record.article ?? '';\n this.sort_priority = +(record.sort_priority ?? 0);\n this.image_name = record.image_name ?? '';\n\n if (record.is_active) {\n this.is_active = !!+record.is_active;\n }\n\n if (record.featured) {\n this.featured = !!+record.featured;\n }\n\n seo_title = record.seo_page_title ?? '';\n seo_keywords = record.seo_keywords ?? '';\n seo_description = record.seo_description ?? '';\n }\n\n if (this.title.trim() === '') {\n this.title = this.range;\n }\n\n if (seo_title.trim() === '') {\n seo_title = this.title;\n }\n\n this.seo_details = new EsolveSeoInfo(\n seo_title,\n seo_description,\n seo_keywords,\n );\n }\n\n public getImagePath(): string {\n if (this.image_name !== '') {\n return `/images/ranges/${this.image_name}`;\n }\n\n return '';\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport { EsolveRange } from './classes';\nimport { EsolveRangeOptions, EsolveRangeRecord } from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveRangesService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n public getRange(id: number): Observable<EsolveRange> {\n const params = new HttpParams({\n fromObject: { ranges_id: id },\n });\n\n return this.getRangeSingle(params);\n }\n\n public getRangeFromSEF(sef_range: string): Observable<EsolveRange> {\n const params = new HttpParams({\n fromObject: { sef_range },\n });\n\n return this.getRangeSingle(params);\n }\n\n public getRanges(options?: EsolveRangeOptions): Observable<EsolveRange[]> {\n let params = new HttpParams();\n\n if (options?.featured_only) {\n params = params.set('featured_only', options.featured_only);\n }\n\n if (options?.manufacturers_id) {\n params = params.set('manufacturers_id', options.manufacturers_id);\n }\n\n return this.getRangeRecords(params).pipe(\n map((records) => {\n const ranges: EsolveRange[] = [];\n\n for (const record of records) {\n ranges.push(this.processRange(record));\n }\n\n return ranges;\n }),\n catchError(() => {\n return of<EsolveRange[]>([]);\n }),\n );\n }\n\n private getRangeSingle(params: HttpParams): Observable<EsolveRange> {\n return this.getRangeRecords(params).pipe(\n map((records) => {\n const record = records[0];\n\n return this.processRange(record);\n }),\n );\n }\n\n private getRangeRecords(\n params?: HttpParams,\n ): Observable<EsolveRangeRecord[]> {\n return this.http\n .get<EsolveGetResponse<EsolveRangeRecord[]>>(\n `${this.config.api_url}/get-ranges.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n return response.records;\n }),\n );\n }\n\n private processRange(record: EsolveRangeRecord): EsolveRange {\n return new EsolveRange(record);\n }\n}\n","import { EsolveTagRecord } from '../interfaces';\n\nexport class EsolveTag {\n public id = 0;\n public phrase = '';\n public weight = 0;\n public description = '';\n public image_name = '';\n\n /**\n * @deprecated To be removed in the future. Use `EsolveTag.phrase` instead\n */\n public get tag_phrase(): string {\n return this.phrase;\n }\n\n /**\n * @deprecated To be removed in the future. Use `EsolveTag.weight` instead\n */\n public get tag_weight(): number {\n return this.weight;\n }\n\n constructor(record?: Partial<EsolveTagRecord>) {\n if (record) {\n this.id = +(record.id ?? 0);\n this.phrase = record.tag_phrase ?? '';\n this.weight = +(record.tag_weight ?? 0);\n this.description = record.description ?? '';\n this.image_name = record.image_name ?? '';\n }\n }\n\n public getImagePath(): string {\n if (this.image_name !== '') {\n return `/images/tags/${this.image_name}`;\n }\n\n return '';\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport { EsolveTag } from './classes';\nimport { EsolveTagOptions, EsolveTagRecord } from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveTagsService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n /**\n * Retrieves active topics from the list of topic ID's. Note that inactive or expired\n * topics will not be retrieved.\n *\n * @param options Tag filters\n */\n public getTags(options?: EsolveTagOptions): Observable<EsolveTag[]> {\n const params = this.parseOptions(options);\n\n return this.http\n .get<EsolveGetResponse<EsolveTagRecord[]>>(\n `${this.config.api_url}/get-tags.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processTags(response.records);\n }),\n );\n }\n\n private parseOptions(options?: EsolveTagOptions) {\n let params = new HttpParams();\n\n if (options) {\n if (options.tags_id) {\n if (Array.isArray(options.tags_id)) {\n const tag_list = options.tags_id;\n\n if (tag_list.length > 0) {\n params = params.append('tags_id', tag_list.join(','));\n }\n } else {\n params = params.append('tags_id', options.tags_id);\n }\n } else {\n if (options.phrase && options.phrase !== '') {\n params = params.append('phrase', options.phrase);\n\n const phrase_match_mode = options.phrase_match_mode;\n\n if (phrase_match_mode) {\n params = params.append(\n 'phrase_match_mode',\n phrase_match_mode,\n );\n }\n }\n }\n }\n\n return params;\n }\n\n private processTags(records: EsolveTagRecord[]): EsolveTag[] {\n const tags: EsolveTag[] = [];\n\n if (records) {\n for (const record of records) {\n const tag = new EsolveTag(record);\n\n tags.push(tag);\n }\n }\n\n return tags;\n }\n}\n","import { EsolveTopicRecord } from '../interfaces';\n\nexport class EsolveTopic {\n public id = 0;\n public name = '';\n public short_description = '';\n public sort_priority = 0;\n\n constructor(record?: Partial<EsolveTopicRecord>) {\n if (record) {\n this.id = +(record.id ?? 0);\n this.name = record.name ?? '';\n this.short_description = record.short_description ?? '';\n this.sort_priority = +(record.sort_priority ?? 0);\n }\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport { EsolveTopic } from './classes';\nimport { EsolveTopicRecord } from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveTopicService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n /**\n * Retrieves active topics from the list of topic ID's. Note that inactive or expired\n * topics will not be retrieved.\n *\n * @param topic_id_list List of topic ID's that need to be retrieved\n */\n public getTopics(\n topic_id_list: readonly number[] = [],\n ): Observable<EsolveTopic[]> {\n let params = new HttpParams();\n\n if (topic_id_list.length > 0) {\n params = params.append('topic_id', topic_id_list.join(','));\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveTopicRecord[]>>(\n `${this.config.api_url}/get-topics.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processTopics(response.records);\n }),\n );\n }\n\n private processTopics(records: EsolveTopicRecord[]): EsolveTopic[] {\n const topics: EsolveTopic[] = [];\n\n if (records) {\n for (const record of records) {\n const topic = new EsolveTopic(record);\n\n topics.push(topic);\n }\n }\n\n return topics;\n }\n}\n","import { EsolveCategoryTreeItem } from '../../category-tree';\nimport { EsolveManufacturer } from '../../manufacturers';\nimport { EsolveRange } from '../../ranges';\nimport { EsolveTag } from '../../tags';\nimport { EsolveTopic } from '../../topics';\n\nimport { EsolveAssetType } from '../types';\nimport { EsolveAssetRecord } from '../interfaces';\n\nexport class EsolveAsset {\n public id = 0;\n public src = '';\n public name = '';\n public type?: EsolveAssetType;\n public description = '';\n public document_number = '';\n public document_type = '';\n public area_of_application = '';\n public asset_category = '';\n public asset_sub_category = '';\n public sort_priority = 0;\n public created?: string;\n public category?: EsolveCategoryTreeItem;\n public subcategory?: EsolveCategoryTreeItem;\n public manufacturer?: EsolveManufacturer;\n public range?: EsolveRange;\n public topics: EsolveTopic[] = [];\n public tags: EsolveTag[] = [];\n\n private image_name = '';\n\n /**\n * Shortcut to `getImagePath()`\n */\n public get image_src(): string {\n return this.getImagePath();\n }\n\n constructor(record: EsolveAssetRecord) {\n this.id = +record.id;\n this.src = record.src;\n this.name = record.name;\n this.type = record.type;\n this.description = record.description;\n\n this.document_number = record.document_number ?? '';\n this.document_type = record.document_type ?? '';\n this.area_of_application = record.area_of_application ?? '';\n this.asset_category = record.asset_category ?? '';\n this.asset_sub_category = record.asset_sub_category ?? '';\n this.sort_priority = +(record.sort_priority ?? '');\n this.image_name = record.image_name ?? '';\n\n if (record.created) {\n this.created = record.created;\n }\n\n if (record.category) {\n this.category = new EsolveCategoryTreeItem(\n record.category.type,\n record.category.id,\n record.category.parent_id,\n record.category.description,\n record.category.sef_description,\n record.category.short_description,\n record.category.sort_priority,\n record.category.active,\n record.category.display_only,\n record.category.image,\n record.category.seo_page_title,\n record.category.seo_keywords,\n record.category.seo_description,\n );\n }\n\n if (record.subcategory) {\n this.subcategory = new EsolveCategoryTreeItem(\n record.subcategory.type,\n record.subcategory.id,\n record.subcategory.parent_id,\n record.subcategory.description,\n record.subcategory.sef_description,\n record.subcategory.short_description,\n record.subcategory.sort_priority,\n record.subcategory.active,\n record.subcategory.display_only,\n record.subcategory.image,\n record.subcategory.seo_page_title,\n record.subcategory.seo_keywords,\n record.subcategory.seo_description,\n );\n }\n\n if (record.manufacturer) {\n this.manufacturer = new EsolveManufacturer(record.manufacturer);\n }\n\n if (record.range) {\n this.range = new EsolveRange(record.range);\n }\n\n if (record.topics && record.topics.length > 0) {\n for (const topic of record.topics) {\n this.topics.push(new EsolveTopic(topic));\n }\n }\n\n if (record.tags && record.tags.length > 0) {\n for (const tag of record.tags) {\n this.tags.push(new EsolveTag(tag));\n }\n }\n }\n\n /**\n * Retrieve image path\n *\n * @returns Image path on CDN, else empty string if no image exists\n */\n public getImagePath(): string {\n if (this.image_name !== '') {\n return `/images/documents/${this.image_name}`;\n }\n\n return '';\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { Observable, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse, EsolveList } from '../shared';\n\nimport { EsolveAsset } from './classes';\nimport {\n EsolveAssetOptions,\n EsolveMediaAssetOptions,\n EsolveAssetRecord,\n EsolveStockAssetOptions,\n} from './interfaces';\nimport { EsolveAssetList } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveAssetsService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n public getAsset(id: number): Observable<EsolveAsset> {\n const params = new HttpParams({ fromObject: { assets_id: id } });\n\n return this.getAssetRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const record = response.records[0];\n\n return this.processAsset(record);\n }),\n );\n }\n\n public getAssets(\n options?: EsolveAssetOptions,\n ): Observable<EsolveAssetList> {\n const params = this.parseOptions(options);\n\n return this.getAssetRecords(params).pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const additional_data = response.additional_data;\n const records = response.records;\n const total_records = +additional_data.total_records;\n\n return this.processAssetLists(records, total_records, options);\n }),\n );\n }\n\n public getMediaAssets(\n options: EsolveMediaAssetOptions,\n ): Observable<EsolveAssetList> {\n let params = this.parseOptions(options);\n\n if (options.media_id && options.media_id > 0) {\n params = params.set('media_id', options.media_id);\n } else if (\n options.media_identifier &&\n options.media_identifier !== ''\n ) {\n params = params.set('media_identifier', options.media_identifier);\n } else {\n return throwError(\n () => new Error('Media ID or identifier is required'),\n );\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveAssetRecord[]>>(\n `${this.config.api_url}/get-media-assets.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const additional_data = response.additional_data;\n const records = response.records;\n const total_records = +additional_data.total_records;\n\n return this.processAssetLists(\n records,\n total_records,\n options,\n );\n }),\n );\n }\n\n public getStockAssets(\n options: EsolveStockAssetOptions,\n ): Observable<EsolveAssetList> {\n let params = this.parseOptions(options);\n\n if (options.code && options.code !== '') {\n params = params.set('code', options.code);\n } else if (options.sef_name && options.sef_name !== '') {\n params = params.set('sef_name', options.sef_name);\n } else {\n return throwError(() => new Error('Code or SEF name is required'));\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveAssetRecord[]>>(\n `${this.config.api_url}/get-stock-assets.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const additional_data = response.additional_data;\n const records = response.records;\n const total_records = +additional_data.total_records;\n\n return this.processAssetLists(\n records,\n total_records,\n options,\n );\n }),\n );\n }\n\n private processAsset(record: EsolveAssetRecord): EsolveAsset {\n return new EsolveAsset(record);\n }\n\n private getAssetRecords(\n params: HttpParams,\n ): Observable<EsolveGetResponse<EsolveAssetRecord[]>> {\n return this.http.get<EsolveGetResponse<EsolveAssetRecord[]>>(\n `${this.config.api_url}/get-assets.php`,\n { params },\n );\n }\n\n private parseOptions(options?: EsolveAssetOptions): HttpParams {\n let params = new HttpParams();\n\n if (!options) {\n return params;\n }\n\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.asset_type) {\n params = params.set('asset_type', options.asset_type);\n }\n\n if (options.category_id) {\n params = params.set('category_id', options.category_id);\n }\n\n if (options.subcategory_id) {\n params = params.set('subcategory_id', options.subcategory_id);\n }\n\n if (options.manufacturers_id) {\n params = params.set('manufacturers_id', options.manufacturers_id);\n }\n\n if (options.ranges_id) {\n params = params.set('ranges_id', options.ranges_id);\n }\n\n if (options.asset_category) {\n params = params.set('asset_category', options.asset_category);\n }\n\n if (options.asset_sub_category) {\n params = params.set(\n 'asset_sub_category',\n options.asset_sub_category,\n );\n }\n\n if (options.document_number) {\n params = params.set('document_number', options.document_number);\n }\n\n if (options.document_type) {\n params = params.set('document_type', options.document_type);\n }\n\n if (options.area_of_application) {\n params = params.set(\n 'area_of_application',\n options.area_of_application,\n );\n }\n\n return params;\n }\n\n private processAssetLists(\n records: EsolveAssetRecord[],\n total_records: number,\n options?: EsolveAssetOptions,\n ) {\n const assets: EsolveAsset[] = [];\n\n for (const record of records) {\n assets.push(this.processAsset(record));\n }\n\n const page = options?.page ?? 0;\n const rows = options?.rows ?? 0;\n const total = total_records;\n\n return new EsolveList(assets, page, rows, total);\n }\n}\n","import { EsolveAddressResponse } from '../interfaces/esolve-address-response.interface';\nimport { EsolveGeocodeResponse } from '../../esolve-geocode-response.interface';\nimport { EsolveResponseResult } from '../../../shared/response';\n\nexport class EsolveAddressResult extends EsolveResponseResult {\n public id: number;\n public address_validated: boolean;\n public geocode_status: string;\n public geocode_result: EsolveGeocodeResponse | null;\n\n constructor(response: EsolveAddressResponse) {\n super(response);\n\n this.id = response.esolve_id;\n this.address_validated = response.address_validated;\n this.geocode_status = response.geocode_status;\n this.geocode_result = response.geocode_result;\n }\n}\n","import { EsolveAddressRecord } from '../interfaces/esolve-address-record.interface';\nimport { EsolveAddressType } from '../types/esolve-address-type.type';\n\nexport class EsolveAddress {\n public id = 0;\n public recipient = '';\n public address_type: EsolveAddressType = 'physical';\n public pobox = '';\n public place_name = '';\n public alias = '';\n public street_number = '';\n public street = '';\n public suburb = '';\n public city = '';\n public province = '';\n public country = '';\n public postal_code = '';\n public latitude = 0;\n public longitude = 0;\n\n constructor(record?: Partial<EsolveAddressRecord>) {\n if (record) {\n this.id = +(record.id ?? 0);\n this.recipient = record.recipient ?? '';\n this.address_type = record.address_type ?? 'physical';\n this.pobox = record.pobox ?? '';\n this.place_name = record.place_name ?? '';\n this.alias = record.alias ?? '';\n this.street_number = record.street_number ?? '';\n this.street = record.street ?? '';\n this.suburb = record.suburb ?? '';\n this.city = record.city ?? '';\n this.province = record.province ?? '';\n this.country = record.country ?? '';\n this.postal_code = record.postal_code ?? '';\n this.latitude = +(record.latitude ?? 0);\n this.longitude = +(record.longitude ?? 0);\n }\n }\n}\n","import { EsolvePostResponseItem, EsolveResponseResult } from '../../../shared';\n\nexport class EsolveSessionAddressUpdateResult extends EsolveResponseResult {\n public address_updated: boolean;\n\n constructor(response: EsolvePostResponseItem) {\n super(response);\n\n if (typeof response.esolve_id === 'string') {\n throw new Error('Invalid response id.');\n }\n\n this.address_updated = response.esolve_id > 0;\n }\n}\n","import { EsolveUserAccountRecord } from '../interfaces';\n\nexport class EsolveUserAccountBusiness {\n public name?: string;\n public vat_number?: string;\n public description?: string;\n public type?: string;\n\n constructor(record?: Partial<EsolveUserAccountRecord>) {\n if (record) {\n this.name = record.busname ?? '';\n this.vat_number = record.vatnum ?? '';\n this.description = record.busdescript ?? '';\n this.type = record.business_type ?? '';\n }\n }\n}\n","import { EsolveUserAccountRecord } from '../interfaces';\n\nexport class EsolveUserAccountContact {\n public tel_number?: string;\n public cell_number?: string;\n public fax_number?: string;\n\n constructor(record?: Partial<EsolveUserAccountRecord>) {\n if (record) {\n this.tel_number = record.telnumber ?? '';\n this.cell_number = record.cellnumber ?? '';\n this.fax_number = record.fax ?? '';\n }\n }\n}\n","import {\n EsolvePostResponseItem,\n EsolveResponseResult,\n} from '../../../shared/response';\n\nexport class EsolveUserAccountResult extends EsolveResponseResult {\n public id = 0;\n\n constructor(response: EsolvePostResponseItem) {\n super(response);\n\n this.id = +response.esolve_id;\n }\n}\n","import { EsolveStatementAgeingRecord } from '../interfaces';\n\nexport class EsolveStatementAgeing {\n public days?: number;\n public amount?: number;\n\n constructor(record?: Partial<EsolveStatementAgeingRecord>) {\n if (record) {\n this.days = +(record.days ?? 0);\n this.amount = +(record.amount ?? 0);\n }\n }\n}\n","import { EsolveStatementBalancesRecord } from '../interfaces';\n\nimport { EsolveStatementAgeing } from './esolve-statement-ageing.model';\n\nexport class EsolveStatementBalances {\n public total?: number;\n public ageing?: EsolveStatementAgeing[];\n\n constructor(record?: Partial<EsolveStatementBalancesRecord>) {\n if (record) {\n this.total = +(record.total ?? 0);\n\n if (record.ageing) {\n this.ageing = [];\n\n for (const key in record.ageing) {\n this.ageing.push(\n new EsolveStatementAgeing(record.ageing[key]),\n );\n }\n }\n }\n }\n}\n","import { EsolveStatementTransactionRecord } from '../interfaces';\n\nexport class EsolveStatementTransaction {\n public document_date?: string;\n public order_number?: string;\n public comment?: string;\n public account?: string;\n public iq_reference?: string;\n public total?: number;\n public amount_due?: number;\n public is_debit?: boolean;\n\n constructor(record?: Partial<EsolveStatementTransactionRecord>) {\n if (record) {\n this.document_date = record.document_date ?? '';\n this.order_number = record.order_number ?? '';\n this.comment = record.comment ?? '';\n this.account = record.account ?? '';\n this.iq_reference = record.iq_reference ?? '';\n this.total = +(record.total ?? 0);\n this.amount_due = +(record.amount_due ?? 0);\n this.is_debit = !!+(record.is_debit ?? true);\n }\n }\n}\n","import { EsolveStatementRecord } from '../interfaces';\n\nimport { EsolveStatementBalances } from './esolve-statement-balances.model';\nimport { EsolveStatementTransaction } from './esolve-statement-transaction.model';\n\nexport class EsolveStatement {\n public balances?: EsolveStatementBalances;\n public transactions?: EsolveStatementTransaction[];\n\n constructor(record?: Partial<EsolveStatementRecord>) {\n if (record) {\n this.balances = new EsolveStatementBalances(record.balances);\n this.transactions =\n record.transactions?.map(\n (e) => new EsolveStatementTransaction(e),\n ) ?? [];\n }\n }\n}\n","import { EsolveUserClientAccountRecord } from '../interfaces';\n\nimport { EsolveStatement } from './esolve-statement.model';\n\nexport class EsolveUserClientAccount {\n public esolve_id?: number;\n public account?: string;\n public branch_code?: string;\n public account_group?: string;\n public pricing_group?: string;\n public company_name?: string;\n public client_contact_person?: string;\n public client_firstname?: string;\n public client_surname?: string;\n public client_email?: string;\n public client_contact_number?: string;\n public client_fax_number?: string;\n public client_cellphone_number?: string;\n public client_id_number?: string;\n public address_description?: string;\n public street?: string;\n public suburb?: string;\n public city?: string;\n public province?: string;\n public country?: string;\n public postal_code?: string;\n public postal_address?: string;\n public delivery_address?: string;\n public vat_number?: string;\n public ageing?: string;\n public balance_last_updated?: string;\n public client_classification?: string;\n public override_stock_listing_identifiers?: string;\n public requires_transaction_approval?: string;\n public latitude?: number;\n public longitude?: number;\n public price_list?: number;\n public loyalty_classification_id?: number;\n public credit_limit?: number;\n public pending_invoice_balance?: number;\n public external_account_balance?: number;\n public default_sellprice?: number;\n public is_active?: boolean;\n public external_statement?: EsolveStatement;\n\n constructor(record?: Partial<EsolveUserClientAccountRecord>) {\n if (record) {\n this.esolve_id = +(record.id ?? 0);\n this.account = record.account ?? '';\n this.branch_code = record.branch_code ?? '';\n this.account_group = record.account_group ?? '';\n this.pricing_group = record.pricing_group ?? '';\n this.company_name = record.company_name ?? '';\n this.client_contact_person = record.client_contact_person ?? '';\n this.client_firstname = record.client_firstname ?? '';\n this.client_surname = record.client_surname ?? '';\n this.client_email = record.client_email ?? '';\n this.client_contact_number = record.client_contact_number ?? '';\n this.client_fax_number = record.client_fax_number ?? '';\n this.client_cellphone_number = record.client_cellphone_number ?? '';\n this.client_id_number = record.client_id_number ?? '';\n this.address_description = record.address_description ?? '';\n this.street = record.street ?? '';\n this.suburb = record.suburb;\n this.city = record.city ?? '';\n this.province = record.province ?? '';\n this.country = record.country ?? '';\n this.postal_code = record.postal_code ?? '';\n this.postal_address = record.postal_address ?? '';\n this.delivery_address = record.delivery_address ?? '';\n this.vat_number = record.vat_number ?? '';\n this.ageing = record.ageing ?? '';\n this.balance_last_updated = record.balance_last_updated ?? '';\n this.client_classification = record.client_classification ?? '';\n this.override_stock_listing_identifiers =\n record.override_stock_listing_identifiers ?? '';\n this.requires_transaction_approval =\n record.requires_transaction_approval ?? '';\n this.latitude = +(record.latitude ?? 0);\n this.longitude = +(record.longitude ?? 0);\n this.price_list = +(record.price_list ?? 0);\n this.loyalty_classification_id = +(\n record.loyalty_classification_id ?? 0\n );\n this.credit_limit = +(record.credit_limit ?? 0);\n this.pending_invoice_balance = +(\n record.pending_invoice_balance ?? 0\n );\n this.external_account_balance = +(\n record.external_account_balance ?? 0\n );\n this.default_sellprice = +(record.default_sellprice ?? 0);\n this.is_active = !!+(record.is_active ?? false);\n\n this.external_statement = new EsolveStatement(\n record.external_statement,\n );\n }\n }\n}\n","import { EsolveUserAccountRecord } from '../interfaces';\nimport { EsolveUserAccountBusiness } from './esolve-user-account-business.model';\nimport { EsolveUserAccountContact } from './esolve-user-account-contact.model';\nimport { EsolveUserClientAccount } from './esolve-user-client-account.model';\n\nexport class EsolveUserAccount {\n public esolve_id?: number;\n public email?: string;\n public registration_type?: string;\n public title?: string;\n public first_name?: string;\n public last_name?: string;\n public initials?: string;\n public gender?: string;\n public identification_number?: string;\n public account_number?: string;\n public loyalty_number?: string;\n public business_details?: EsolveUserAccountBusiness;\n public contact_details?: EsolveUserAccountContact;\n public client_details?: EsolveUserClientAccount;\n\n constructor(record?: Partial<EsolveUserAccountRecord>) {\n if (record) {\n this.esolve_id = +(record.userid ?? 0);\n this.email = record.email ?? '';\n this.registration_type = record.registration_type ?? '';\n this.title = record.title ?? '';\n this.first_name = record.firstname ?? '';\n this.last_name = record.surname ?? '';\n this.initials = record.initials ?? '';\n this.gender = record.gender ?? '';\n this.identification_number = record.idnumber ?? '';\n\n this.contact_details = new EsolveUserAccountContact(record);\n this.business_details = new EsolveUserAccountBusiness(record);\n\n if (record.client_details && record.client_details.account !== '') {\n this.client_details = new EsolveUserClientAccount(\n record.client_details,\n );\n }\n }\n }\n}\n","import { EsolveCartTotals } from '../../../cart';\n\nexport class EsolveUserClientAccountBalances {\n constructor(\n public clients_id?: number,\n public account?: string,\n public cart_totals?: EsolveCartTotals,\n public credit_limit?: number,\n public external_account_balance?: number,\n public external_available_balance?: number,\n public new_external_available_balance?: number,\n public credit_limit_okay?: boolean,\n ) {}\n}\n","import {\n EsolvePostResponseItem,\n EsolveResponseResult,\n} from '../../shared/response';\n\nexport class EsolveChangePasswordResult extends EsolveResponseResult {\n public password_updated: boolean;\n\n constructor(response: EsolvePostResponseItem) {\n super(response);\n\n this.password_updated = response.status.state === 'success';\n }\n}\n","import { EsolveResponseResult } from '../../shared/response';\nimport { EsolveForgotPasswordResponse } from './esolve-forgot-password-response.interface';\n\nexport class EsolveResetPasswordResult extends EsolveResponseResult {\n public id: number;\n public reset_success: boolean;\n public password_matches_old: boolean;\n public login_required: boolean;\n\n constructor(response: EsolveForgotPasswordResponse) {\n super(response);\n\n this.id = response.esolve_id;\n this.reset_success = response.reset_success;\n this.password_matches_old = response.password_matches_old;\n this.login_required = response.login_required;\n }\n}\n","import { EsolveResponseResult } from '../../shared/response';\nimport { EsolveRegistrationPostResponseItem } from './esolve-registration-post-response-item.interface';\n\nexport class EsolveRegistrationResult extends EsolveResponseResult {\n public user_id: number;\n public guest: boolean;\n public authentication_required: boolean;\n public auto_login: boolean;\n public location_id: number;\n\n constructor(response: EsolveRegistrationPostResponseItem) {\n super(response);\n\n this.user_id = response.esolve_id;\n this.guest = response.guest;\n this.auto_login = response.auto_login;\n this.authentication_required = response.authentication_required;\n this.location_id = response.session_data.location_id;\n }\n}\n","import { EsolveResponseResult } from '../../shared/response';\nimport { EsolveAccountConfirmationPostResponseItem } from './esolve-account-confirmation-post-response-item.interface';\n\nexport class EsolveAccountConfirmationResult extends EsolveResponseResult {\n public user_id: number;\n public location_id: number;\n public recalculated_cart: boolean;\n\n constructor(response: EsolveAccountConfirmationPostResponseItem) {\n super(response);\n\n this.user_id = +response.esolve_id;\n this.location_id = +response.location_id;\n this.recalculated_cart = !!+response.recalculated_cart;\n }\n}\n","import {\n EsolvePostResponseItem,\n EsolveResponseResult,\n} from '../../../shared/response';\n\nexport class EsolveLocationUpdateResult extends EsolveResponseResult {\n public location_updated: boolean;\n\n constructor(response: EsolvePostResponseItem) {\n super(response);\n\n if (typeof response.esolve_id === 'string') {\n throw new Error('Invalid response id.');\n }\n\n this.location_updated = response.esolve_id > 0;\n }\n}\n","import { EsolveResponseResult } from '../../shared/response';\n\nexport class EsolveEmptyCartResult extends EsolveResponseResult {}\n","import { EsolveResponseResult } from '../../shared/response';\n\nimport { EsolveCheckoutResponse } from '../interfaces';\n\nexport class EsolveCheckoutResult extends EsolveResponseResult {\n public id = 0;\n public process_payment: boolean;\n\n constructor(response: EsolveCheckoutResponse) {\n super(response);\n\n this.id = +response.esolve_id;\n this.process_payment = response.process_payment ?? false;\n }\n}\n","import { EsolveCartItemRecord } from '../interfaces';\n\nexport class EsolveCartStockItem {\n public code: string;\n public name: string;\n public sef_name: string;\n public description: string;\n public delivery_category: string;\n public pack_description: string;\n public pack_size: number;\n public onhand: number;\n public active: boolean;\n\n private image_name: string;\n\n /**\n * Path to tiny stock image\n */\n public get tiny_image_src(): string {\n return this.getImagePath('tiny');\n }\n\n /**\n * Path to thumbnail stock image\n */\n public get thumbnail_image_src(): string {\n return this.getImagePath('thumb');\n }\n\n /**\n * Path to small stock image\n */\n public get small_image_src(): string {\n return this.getImagePath('small');\n }\n\n /**\n * Path to big stock image\n */\n public get big_image_src(): string {\n return this.getImagePath('big');\n }\n\n /**\n * Path to original stock image\n */\n public get original_image_src(): string {\n return this.getImagePath('original');\n }\n\n constructor(record: Partial<EsolveCartItemRecord>) {\n this.code = record.code ?? '';\n this.name = record.name ?? '';\n this.sef_name = record.sef_name ?? '';\n this.description = record.description ?? '';\n this.delivery_category = record.delivery_category ?? '';\n this.image_name = record.image_name ?? '';\n this.pack_description = record.pack_description ?? '';\n this.pack_size = +(record.items_in_pack ?? 0);\n this.onhand = +(record.onhand ?? 0);\n this.active = record.is_active ?? false;\n }\n\n public getImagePath(\n image_size: 'tiny' | 'thumb' | 'small' | 'big' | 'original',\n ): string {\n if (this.image_name !== '') {\n return `/images/stock/${image_size}/${this.image_name}`;\n }\n\n return '';\n }\n}\n","import { EsolveCartItemRecord } from '../interfaces';\nimport { EsolveCartStockItem } from './esolve-cart-stock-item.model';\n\nexport class EsolveCartItem {\n public delivery_category: string;\n public type: string;\n public id: number;\n public qty: number;\n public price: number;\n public discount: number;\n public discount_interval: number;\n public vat_rate: number;\n public price_incl: number;\n public discount_price: number;\n public discount_price_incl: number;\n public discount_total: number;\n public vat_total: number;\n public total: number;\n public total_incl: number;\n public allow_quotes: boolean;\n public allow_orders: boolean;\n public must_collect: boolean;\n public requested_assembly: boolean;\n public is_dependency: boolean;\n public stock_item!: EsolveCartStockItem;\n\n constructor(record: Partial<EsolveCartItemRecord>) {\n this.delivery_category = record.delivery_category ?? '';\n this.type = record.type ?? '';\n this.id = +(record.id ?? 0);\n this.qty = +(record.qty ?? 0);\n this.price = +(record.price ?? 0);\n this.discount = +(record.discount ?? 0);\n this.discount_interval = +(record.discount_interval ?? 0);\n this.vat_rate = +(record.vat_rate ?? 0);\n this.price_incl = +(record.price_incl ?? 0);\n this.discount_price = +(record.discount_price ?? 0);\n this.discount_price_incl = +(record.discount_price_incl ?? 0);\n this.discount_total = +(record.discount_total ?? 0);\n this.vat_total = +(record.vat_total ?? 0);\n this.total = +(record.line_total ?? 0);\n this.total_incl = +(record.line_total_incl ?? 0);\n this.allow_quotes = record.allow_quotes ?? false;\n this.allow_orders = record.allow_orders ?? false;\n this.must_collect = record.must_collect ?? false;\n this.requested_assembly = record.requested_assembly ?? false;\n this.is_dependency = record.is_dependency ?? false;\n\n this.stock_item = new EsolveCartStockItem(record);\n }\n}\n","/**\n * Totals in cart\n */\nexport class EsolveCartTotals {\n /**\n * Grand total of cart which includes discount and VAT\n * (NOTE: shipping and insurance is not included)\n */\n public get total(): number {\n return (\n this.sub_total +\n this.vat_total -\n this.discount_total -\n this.voucher_total\n );\n }\n\n constructor(\n /**\n * Number of unique records in cart\n */\n public records: number = 0,\n /**\n * Total quantity of all items in a cart\n */\n public items: number = 0,\n /**\n * Total in cart before discount and VAT is added\n */\n public sub_total: number = 0,\n /**\n * Total VAT of all the items in the cart\n */\n public vat_total: number = 0,\n /**\n * Total discount of all the item in the cart\n */\n public discount_total: number = 0,\n /**\n * Total of all vouchers used\n */\n public voucher_total: number = 0,\n /**\n * Total of allowance\n */\n public allowance: number = 0,\n ) {}\n}\n","import { EsolveTransactionType } from '../../transactions';\nimport { EsolveTransactionAnalyticsDataRecord } from '../interfaces';\n\nexport class EsolveTransactionAnalyticsData<T = any> {\n public transaction_id = 0;\n public transaction_type: EsolveTransactionType = 'order';\n /**\n * Data generated for analytics\n */\n public analytics_data?: T;\n\n constructor(record?: Partial<EsolveTransactionAnalyticsDataRecord<T>>) {\n if (record) {\n this.transaction_id = +(record.transaction_id ?? 0);\n this.transaction_type = record.transaction_type ?? 'order';\n\n if (record.analytics_data) {\n this.analytics_data = record.analytics_data;\n }\n }\n }\n}\n","import { EsolveCartAlternativeRecord } from '../interfaces';\n\nexport class EsolveCartAlternative {\n public item_id = 0;\n public code = '';\n public name = '';\n public sef_name = '';\n public items_in_pack = 0;\n public pack_description = '';\n public price = 0;\n public price_inclusive = 0;\n public vat_rate = 0;\n\n private image_name = '';\n\n /**\n * Path to tiny stock image\n */\n public get tiny_image_src(): string {\n return this.getImagePath('tiny');\n }\n\n /**\n * Path to thumbnail stock image\n */\n public get thumbnail_image_src(): string {\n return this.getImagePath('thumb');\n }\n\n /**\n * Path to small stock image\n */\n public get small_image_src(): string {\n return this.getImagePath('small');\n }\n\n /**\n * Path to big stock image\n */\n public get big_image_src(): string {\n return this.getImagePath('big');\n }\n\n /**\n * Path to original stock image\n */\n public get original_image_src(): string {\n return this.getImagePath('original');\n }\n\n constructor(record?: Partial<EsolveCartAlternativeRecord>) {\n if (record) {\n this.item_id = +(record.item_id ?? 0);\n this.image_name = record.image_name ?? '';\n this.code = record.code ?? '';\n this.name = record.name ?? '';\n this.sef_name = record.sef_name ?? '';\n this.items_in_pack = +(record.items_in_pack ?? 0);\n this.pack_description = record.pack_description ?? '';\n this.price = +(record.price ?? 0);\n this.price_inclusive = +(record.price_inclusive ?? 0);\n this.vat_rate = +(record.vat_rate ?? 0);\n }\n }\n\n public getImagePath(\n image_size: 'tiny' | 'thumb' | 'small' | 'big' | 'original',\n ): string {\n if (this.image_name !== '') {\n return `/images/stock/${image_size}/${this.image_name}`;\n }\n\n return '';\n }\n}\n","import { EsolveCouponRecord } from '../interfaces';\n\nexport class EsolveCoupon {\n public id = 0;\n public identifier = '';\n public discount = 0;\n /**\n * Shows either the short code or the coupon key (if short code is not set)\n */\n public coupon_code = '';\n /**\n * Limit of the number of items it can apply to\n */\n public apply_on = 0;\n /**\n * Indicates if the discount does not apply to specified products, meaning\n * all items get the discount\n */\n public apply_to_full_cart = false;\n\n constructor(record?: EsolveCouponRecord) {\n if (record) {\n this.id = +record.id;\n this.identifier = record.identifier;\n this.discount = +record.discount;\n this.coupon_code = record.coupon_code;\n this.apply_on = +record.apply_on;\n this.apply_to_full_cart = record.apply_to_full_cart;\n }\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { inject, Injectable, PLATFORM_ID } from '@angular/core';\n\nimport { BehaviorSubject, firstValueFrom, Observable, of, Subject } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveCookieService, EsolveGetResponse } from '../shared';\n\nimport { EsolveCoupon } from './classes';\nimport {\n EsolveCouponRecord,\n EsolveCouponValidation,\n EsolveCouponValidationError,\n EsolveCouponValidationResult,\n} from './interfaces';\nimport { EsolveCouponsCache } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveCouponsService {\n private readonly is_browser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly http = inject(HttpClient);\n private readonly config = inject(EsolveConfigService);\n private readonly cookieService = inject(EsolveCookieService);\n\n private storage_key = '_ng_eslv_coupons';\n private cache: EsolveCouponsCache = new Map();\n private applied = new BehaviorSubject<void>(undefined);\n private validation_error = new Subject<\n EsolveCouponValidationError | undefined\n >();\n\n constructor() {\n this.setStorageKey();\n this.cache = this.retrieveCache();\n }\n\n public onValidationError(): Observable<\n EsolveCouponValidationError | undefined\n > {\n return this.validation_error.asObservable();\n }\n\n public onApplied(): Observable<void> {\n return this.applied.asObservable();\n }\n\n public validate(\n coupon_key: string,\n ): Observable<EsolveCouponValidationResult> {\n return this.http\n .get<EsolveGetResponse<EsolveCouponValidation>>(\n `${this.config.api_url}/get-validate-coupon.php`,\n {\n params: {\n coupon_key,\n },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n const valid = response.records.valid;\n\n const result: EsolveCouponValidationResult = {\n valid,\n };\n\n if (!valid) {\n const error = response.records.error;\n this.validation_error.next(error);\n } else if (valid) {\n result.id = response.records.id;\n }\n\n return result;\n }),\n catchError(() => {\n this.validation_error.next(undefined);\n\n return of({ valid: false });\n }),\n );\n }\n\n public async applyCoupon(coupon_key: string): Promise<boolean> {\n try {\n if (coupon_key.trim() === '') {\n return false;\n }\n\n const result = await firstValueFrom(this.validate(coupon_key));\n\n if (result.valid && result.id) {\n this.addCoupon(result.id, coupon_key);\n }\n\n return result.valid;\n } catch (error) {\n return false;\n }\n }\n\n public removeCoupon(id: number): void {\n this.cache.delete(id);\n\n this.cacheCoupons();\n this.applied.next();\n }\n\n public getAppliedCouponKeys(): string[] {\n return [...this.cache.values()];\n }\n\n public getAppliedCoupons(): Observable<EsolveCoupon[]> {\n const coupon_ids = [...this.cache.keys()];\n\n return this.http\n .get<EsolveGetResponse<EsolveCouponRecord[]>>(\n `${this.config.api_url}/get-applied-coupons.php`,\n {\n params: {\n coupons: coupon_ids.join(','),\n },\n },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processCoupons(response.records);\n }),\n );\n }\n\n public reset() {\n this.deleteCoupons();\n }\n\n private retrieveCache(): EsolveCouponsCache {\n if (this.cookieService.check(this.storage_key) || this.getBackup()) {\n let coupons_json = this.cookieService.get(this.storage_key);\n\n if (coupons_json === '') {\n const local_store_data = this.getBackup();\n\n if (local_store_data) {\n coupons_json = local_store_data;\n }\n }\n\n try {\n return this.jsonDecodeMap(coupons_json);\n } catch (error) {\n // soft error\n }\n }\n\n return new Map();\n }\n\n private cacheCoupons(): void {\n if (this.cache.size > 0) {\n const coupons_json = this.jsonEncodeMap(this.cache);\n\n this.cookieService.set(\n this.storage_key,\n coupons_json,\n undefined,\n '/',\n );\n\n this.setBackup(coupons_json);\n } else {\n this.deleteCoupons();\n }\n }\n\n private deleteCoupons(): void {\n this.cache.clear();\n this.cookieService.delete(this.storage_key, '/');\n\n this.removeBackup();\n }\n\n private getBackup(): string | null {\n if (!this.is_browser) {\n return null;\n }\n\n if (!localStorage) {\n return null;\n }\n\n return localStorage.getItem(this.storage_key);\n }\n\n private setBackup(data: string): void {\n if (!this.is_browser) {\n return;\n }\n\n if (!localStorage) {\n return;\n }\n\n localStorage.setItem(this.storage_key, data);\n }\n\n private removeBackup(): void {\n if (!this.is_browser) {\n return;\n }\n\n if (!localStorage) {\n return;\n }\n\n localStorage.removeItem(this.storage_key);\n }\n\n private addCoupon(id: number, key: string): void {\n if (!this.cache.has(id)) {\n this.cache.set(id, key);\n this.cacheCoupons();\n }\n\n this.applied.next();\n }\n\n private setStorageKey(): void {\n if (\n typeof this.config.coupon_storage_key === 'string' &&\n this.config.coupon_storage_key !== ''\n ) {\n this.storage_key = this.config.coupon_storage_key;\n }\n }\n\n private jsonEncodeMap(data: EsolveCouponsCache): string {\n if (!(data instanceof Map)) {\n throw new Error('Invalid map type');\n }\n\n return JSON.stringify(data, (key, value) => {\n if (value instanceof Map) {\n return {\n dataType: 'Map',\n value: [...value],\n };\n } else {\n return value;\n }\n });\n }\n\n private jsonDecodeMap(json_data: string): EsolveCouponsCache {\n const data = JSON.parse(json_data, (key, value) => {\n if (typeof value === 'object' && value !== null) {\n if (value.dataType === 'Map') {\n return new Map(value.value);\n }\n }\n\n return value;\n });\n\n if (data instanceof Map) {\n return data;\n }\n\n throw new Error('Invalid map type');\n }\n\n private processCoupons(records: EsolveCouponRecord[]): EsolveCoupon[] {\n const coupons: EsolveCoupon[] = [];\n\n if (records) {\n for (const record of records) {\n const coupon = new EsolveCoupon(record);\n\n coupons.push(coupon);\n }\n }\n\n return coupons;\n }\n}\n","// Classes\nexport * from './classes';\n\n// Interfaces\nexport * from './interfaces';\n\n// Types\nexport * from './types';\n\n// Service\nexport * from './esolve-coupons.service';\n","import { EsolveVoucherRecord } from '../interfaces';\n\nexport class EsolveVoucher {\n public id = 0;\n public identifier = '';\n public value = 0;\n /**\n * Shows either the short code or the coupon key (if short code is not set)\n */\n public voucher_code = '';\n\n constructor(record?: EsolveVoucherRecord) {\n if (record) {\n this.id = +record.id;\n this.identifier = record.identifier;\n this.value = +record.value;\n this.voucher_code = record.voucher_code;\n }\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { inject, Injectable, PLATFORM_ID } from '@angular/core';\n\nimport { BehaviorSubject, firstValueFrom, Observable, Subject } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveCookieService, EsolveGetResponse } from '../shared';\n\nimport { EsolveVoucher } from './classes';\nimport {\n EsolveVoucherRecord,\n EsolveVoucherValidation,\n EsolveVoucherValidationError,\n EsolveVoucherValidationResult,\n} from './interfaces';\nimport { EsolveVouchersCache } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveVouchersService {\n private readonly is_browser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly http = inject(HttpClient);\n private readonly config = inject(EsolveConfigService);\n private readonly cookieService = inject(EsolveCookieService);\n\n private storage_key = '_ng_eslv_vouchers';\n private cache: EsolveVouchersCache = new Map();\n private applied = new BehaviorSubject<void>(undefined);\n private validation_error = new Subject<\n EsolveVoucherValidationError | undefined\n >();\n\n constructor() {\n this.setStorageKey();\n this.cache = this.retrieveCache();\n }\n\n public onValidationError(): Observable<\n EsolveVoucherValidationError | undefined\n > {\n return this.validation_error.asObservable();\n }\n\n public onApplied(): Observable<void> {\n return this.applied.asObservable();\n }\n\n public validate(\n voucher_key: string,\n ): Observable<EsolveVoucherValidationResult> {\n return this.http\n .get<EsolveGetResponse<EsolveVoucherValidation>>(\n `${this.config.api_url}/get-validate-voucher.php`,\n {\n params: {\n voucher_key,\n },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n const valid = response.records.valid;\n\n const result: EsolveVoucherValidationResult = {\n valid,\n };\n\n if (!valid) {\n const error = response.records.error;\n this.validation_error.next(error);\n } else if (valid) {\n result.id = response.records.id;\n }\n\n return result;\n }),\n catchError(() => {\n this.validation_error.next(undefined);\n\n return [{ valid: false }];\n }),\n );\n }\n\n public async applyVoucher(voucher_key: string): Promise<boolean> {\n try {\n if (voucher_key.trim() === '') {\n return false;\n }\n\n const result = await firstValueFrom(this.validate(voucher_key));\n\n if (result.valid && result.id) {\n this.addVoucher(result.id, voucher_key);\n }\n\n return result.valid;\n } catch (error) {\n return false;\n }\n }\n\n public removeVoucher(id: number): void {\n this.cache.delete(id);\n\n this.cacheVouchers();\n this.applied.next();\n }\n\n public getAppliedVoucherKeys(): string[] {\n return [...this.cache.values()];\n }\n\n public getAppliedVouchers(): Observable<EsolveVoucher[]> {\n const voucher_ids = [...this.cache.keys()];\n\n return this.http\n .get<EsolveGetResponse<EsolveVoucherRecord[]>>(\n `${this.config.api_url}/get-applied-vouchers.php`,\n {\n params: {\n vouchers: voucher_ids.join(','),\n },\n },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processVouchers(response.records);\n }),\n );\n }\n\n public reset() {\n this.deleteVouchers();\n }\n\n private retrieveCache(): EsolveVouchersCache {\n if (this.cookieService.check(this.storage_key) || this.getBackup()) {\n let vouchers_json = this.cookieService.get(this.storage_key);\n\n if (vouchers_json === '') {\n const local_store_data = this.getBackup();\n\n if (local_store_data) {\n vouchers_json = local_store_data;\n }\n }\n\n try {\n return this.jsonDecodeMap(vouchers_json);\n } catch (error) {\n // soft error\n }\n }\n\n return new Map();\n }\n\n private cacheVouchers(): void {\n if (this.cache.size > 0) {\n const vouchers_json = this.jsonEncodeMap(this.cache);\n\n this.cookieService.set(\n this.storage_key,\n vouchers_json,\n undefined,\n '/',\n );\n\n this.setBackup(vouchers_json);\n } else {\n this.deleteVouchers();\n }\n }\n\n private deleteVouchers(): void {\n this.cache.clear();\n this.cookieService.delete(this.storage_key, '/');\n\n this.removeBackup();\n }\n\n private getBackup(): string | null {\n if (!this.is_browser) {\n return null;\n }\n\n if (!localStorage) {\n return null;\n }\n\n return localStorage.getItem(this.storage_key);\n }\n\n private setBackup(data: string): void {\n if (!this.is_browser) {\n return;\n }\n\n if (!localStorage) {\n return;\n }\n\n localStorage.setItem(this.storage_key, data);\n }\n\n private removeBackup(): void {\n if (!this.is_browser) {\n return;\n }\n\n if (!localStorage) {\n return;\n }\n\n localStorage.removeItem(this.storage_key);\n }\n\n private addVoucher(id: number, key: string): void {\n if (!this.cache.has(id)) {\n this.cache.set(id, key);\n this.cacheVouchers();\n }\n\n this.applied.next();\n }\n\n private setStorageKey(): void {\n if (\n typeof this.config.voucher_storage_key === 'string' &&\n this.config.voucher_storage_key !== ''\n ) {\n this.storage_key = this.config.voucher_storage_key;\n }\n }\n\n private jsonEncodeMap(data: EsolveVouchersCache): string {\n if (!(data instanceof Map)) {\n throw new Error('Invalid map type');\n }\n\n return JSON.stringify(data, (key, value) => {\n if (value instanceof Map) {\n return {\n dataType: 'Map',\n value: [...value],\n };\n } else {\n return value;\n }\n });\n }\n\n private jsonDecodeMap(json_data: string): EsolveVouchersCache {\n const data = JSON.parse(json_data, (key, value) => {\n if (typeof value === 'object' && value !== null) {\n if (value.dataType === 'Map') {\n return new Map(value.value);\n }\n }\n\n return value;\n });\n\n if (data instanceof Map) {\n return data;\n }\n\n throw new Error('Invalid map type');\n }\n\n private processVouchers(records: EsolveVoucherRecord[]): EsolveVoucher[] {\n const vouchers: EsolveVoucher[] = [];\n\n if (records) {\n for (const record of records) {\n const voucher = new EsolveVoucher(record);\n\n vouchers.push(voucher);\n }\n }\n\n return vouchers;\n }\n}\n","// Classes\nexport * from './classes';\n\n// Interfaces\nexport * from './interfaces';\n\n// Types\nexport * from './types';\n\n// Service\nexport * from './esolve-vouchers.service';\n","import { inject, Injectable } from '@angular/core';\n\nimport {\n HttpClient,\n HttpErrorResponse,\n HttpParams,\n} from '@angular/common/http';\n\nimport { iif, Observable, of } from 'rxjs';\nimport { catchError, map, switchMap } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveErrorHandlerService } from '../shared/errors';\nimport {\n EsolveDeleteResponse,\n EsolveGetResponse,\n EsolvePostResponseItem,\n EsolveResponseHandlerService,\n EsolveResponseResult,\n EsolveSetResponse,\n} from '../shared/response';\nimport { EsolveResult } from '../shared/esolve-result.model';\n\nimport { EsolveCouponsService } from '../coupons';\nimport { EsolveTransactionType } from '../transactions';\nimport { EsolveVouchersService } from '../vouchers';\n\nimport {\n EsolveCartAlternative,\n EsolveCartItem,\n EsolveCartTotals,\n EsolveCheckoutResult,\n EsolveEmptyCartResult,\n EsolveTransactionAnalyticsData,\n} from './classes';\nimport {\n EsolveAdditionalWhere,\n EsolveCartAlternativeRecord,\n EsolveCartItemRecord,\n EsolveCartItemResponse,\n EsolveCartSetItem,\n EsolveCartTotalsRecord,\n EsolveCheckoutBody,\n EsolveCheckoutResponse,\n EsolveTimeSlotCheckout,\n EsolveTrackingCode,\n EsolveTransactionAnalyticsDataRecord,\n} from './interfaces';\nimport {\n EsolveCart,\n EsolveCartSetAction,\n EsolveCartEmptyResponse,\n EsolveCartAlternativesMap,\n} from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveCartService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n private readonly coupons = inject(EsolveCouponsService);\n private readonly vouchers = inject(EsolveVouchersService);\n\n private _cached_tracking = 0;\n\n /**\n * Retrieves the current cart\n *\n * @returns An `Observable` with an array of cart items\n */\n public getCart(): Observable<EsolveCart> {\n let params = new HttpParams();\n\n const coupons = this.coupons.getAppliedCouponKeys();\n\n if (coupons.length > 0) {\n params = params.set('coupons', coupons.join(','));\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveCartItemRecord[]>>(\n `${this.config.api_url}/get-cart.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processCart(response.records);\n }),\n );\n }\n\n /**\n * Updates the cart by preforming various actions, such as adding, editing or removing items from the cart.\n *\n * @param items An array of options to update the cart\n * @param action The default action to preform\n *\n * @returns An `Observable` with an array of responses that gives feedback on the requested changes\n */\n public setCart(\n items: EsolveCartSetItem[],\n action: EsolveCartSetAction = 'add',\n ): Observable<EsolveCartItemResponse[]> {\n const body = {\n items,\n action,\n };\n\n return this.http\n .post<EsolveSetResponse<EsolveCartItemResponse>>(\n `${this.config.api_url}/set-cart-item.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((response) => {\n if (response.responses === undefined) {\n throw response;\n }\n\n return response.responses;\n }),\n );\n }\n\n public setCartEmpty(\n type: EsolveTransactionType,\n additional_where: EsolveAdditionalWhere[],\n ): Observable<EsolveEmptyCartResult> {\n const body = {\n type,\n additional_where,\n };\n\n return this.http\n .post<EsolveSetResponse<EsolveCartEmptyResponse>>(\n `${this.config.api_url}/set-cart-empty.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n this._cached_tracking = 0;\n\n return new EsolveEmptyCartResult(response);\n },\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-cart-empty',\n errorRes,\n );\n }),\n );\n }\n\n /**\n * Retrieves the totals of the cart with all the totals calculated\n *\n * @returns An `Observable` with an object containing cart totals\n */\n public getTotals(\n type?: EsolveTransactionType,\n ): Observable<EsolveCartTotals> {\n let params = new HttpParams({\n fromObject: {\n type: type ?? '',\n },\n });\n\n const vouchers = this.vouchers.getAppliedVoucherKeys();\n\n if (vouchers.length > 0) {\n params = params.set('vouchers', vouchers.join(','));\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveCartTotalsRecord>>(\n `${this.config.api_url}/get-cart-totals.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n return this.processCartTotals(response.records);\n }),\n );\n }\n\n /**\n * Retrieves a tracking code for the cart\n *\n * @returns An `Observable` with the cart tracking code\n */\n public getTrackingCode(): Observable<number> {\n return iif(\n () => this._cached_tracking > 0,\n of(this._cached_tracking),\n this.http\n .get<EsolveGetResponse<EsolveTrackingCode>>(\n `${this.config.api_url}/get-checkout-tracking.php`,\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n this._cached_tracking = response.records.tracking;\n\n return response.records.tracking;\n }),\n ),\n );\n }\n\n /**\n * Get the data of the transaction for the analytics\n *\n * @param transaction_id ID of the transaction used in eSolve\n *\n * @returns An `Observable` with the analytics data\n */\n public getTransactionAnalyticsData<T = any>(\n transaction_id: number,\n ): Observable<EsolveTransactionAnalyticsData<T>> {\n return this.http\n .get<EsolveGetResponse<EsolveTransactionAnalyticsDataRecord<T>>>(\n `${this.config.api_url}/get-transaction-analytics-data.php`,\n {\n params: {\n transaction_id,\n },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n return new EsolveTransactionAnalyticsData<T>(\n response.records,\n );\n }),\n );\n }\n\n /**\n * Initiates checkout of the cart items\n *\n * @param type The cart type that needs to be checked out\n * @param addresses_id The ID of the delivery address\n * @param shipping_id The ID of the shipping method\n * @param payment_method_id The ID of the selected payment method\n * @param location_id The ID of the selected branch from with shipping needs to be calculated\n * @param comments Additional comments on the cart\n *\n * @returns An `Observable` with the transaction ID\n */\n public checkout(\n type: EsolveTransactionType,\n addresses_id: number,\n shipping_id: number,\n payment_method_id = 0,\n location_id = 0,\n comments = '',\n time_slot?: EsolveTimeSlotCheckout,\n apply_wallet?: boolean,\n ): Observable<EsolveCheckoutResult> {\n const body: EsolveCheckoutBody = {\n type,\n addresses_id,\n shipping_id,\n payment_method_id,\n location_id,\n comments,\n tracking: 0,\n time_slot,\n apply_wallet,\n };\n\n return this.getTrackingCode().pipe(\n switchMap((tracking) => {\n if (tracking <= 0) {\n throw tracking;\n }\n\n body.tracking = tracking;\n\n const voucher_keys = this.vouchers.getAppliedVoucherKeys();\n\n if (voucher_keys.length > 0) {\n body.vouchers = voucher_keys;\n }\n\n return this.http\n .post<EsolveSetResponse<EsolveCheckoutResponse>>(\n `${this.config.api_url}/set-checkout.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n this._cached_tracking = 0;\n this.coupons.reset();\n this.vouchers.reset();\n\n return new EsolveCheckoutResult(response);\n },\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-checkout',\n errorRes,\n );\n }),\n );\n }),\n );\n }\n\n public getCartAlternatives(): Observable<EsolveCartAlternativesMap> {\n return this.http\n .get<EsolveGetResponse<EsolveCartAlternativeRecord[]>>(\n `${this.config.api_url}/get-cart-alternatives.php`,\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processCartAlternatives(response.records);\n }),\n );\n }\n\n /**\n * Set an alternative stock item to current cart item\n *\n * @param id It is used to identify the specific cart item for which the alternative is being set\n * @param alternative The alternative value that you want to set for a specific cart item.\n * @returns an Observable of type EsolveResponseResult.\n */\n public setCartAlternative(\n id: number,\n alternative: string,\n ): Observable<EsolveResponseResult> {\n return this.http\n .post<EsolveSetResponse<EsolvePostResponseItem>>(\n `${this.config.api_url}/set-cart-alternatives.php`,\n {\n cart_id: id,\n alternative: alternative,\n },\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveResponseResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-cart-alternatives',\n errorRes,\n );\n }),\n );\n }\n\n public deleteCartAlternative(id: number): Observable<EsolveResult> {\n return this.http\n .delete<EsolveDeleteResponse>(\n `${this.config.api_url}/delete-cart-alternative.php`,\n {\n params: { id },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) => {\n if (\n http_response.result === undefined ||\n http_response.result === null ||\n http_response.result.status !== 'success'\n ) {\n throw http_response;\n }\n\n return new EsolveResult(\n http_response.result.status,\n http_response.result.code,\n http_response.result.message,\n );\n }),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpDeleteError(\n 'delete-cart-alternative',\n errorRes,\n );\n }),\n );\n }\n\n /**\n * Processes the eSolve tree records\n *\n * @param cart_item_records Records to process\n * @returns An array of processed cart items\n */\n private processCart(cart_item_records: EsolveCartItemRecord[]): EsolveCart {\n const cart_items: EsolveCartItem[] = [];\n\n if (cart_item_records) {\n for (const cart_item_record of cart_item_records) {\n cart_items.push(new EsolveCartItem(cart_item_record));\n }\n }\n\n return cart_items;\n }\n\n /**\n * Processes the eSolve cart alternatives records\n *\n * @param records Records to process\n *\n * @returns A `Map` of processed cart alternatives\n */\n private processCartAlternatives(\n records: EsolveCartAlternativeRecord[],\n ): EsolveCartAlternativesMap {\n const alternatives: EsolveCartAlternativesMap = new Map();\n\n for (const record of records) {\n alternatives.set(\n +record.item_id,\n new EsolveCartAlternative(record),\n );\n }\n\n return alternatives;\n }\n\n /**\n * Processes the eSolve cart totals\n *\n * @param record Data to process\n * @returns Processed cart totals\n */\n private processCartTotals(\n record: EsolveCartTotalsRecord,\n ): EsolveCartTotals {\n const cart_totals = new EsolveCartTotals(\n +record.records,\n +record.items,\n +record.total,\n +record.vat,\n +record.discount,\n +record.vouchers,\n +record.allowance,\n );\n\n return cart_totals;\n }\n}\n","import { EsolveAddressType } from '../../account';\n\nexport class EsolveTransactionAddress {\n constructor(\n public recipient: string,\n public address_type: EsolveAddressType,\n public address_description: string,\n public street_number: string,\n public street: string,\n public suburb: string,\n public city: string,\n public province: string,\n public country: string,\n public postal_code: string,\n public pobox: string,\n ) {}\n}\n","export class EsolveTransactionClient {\n constructor(\n public id: number,\n public account: string,\n public company_name: string,\n public branch_code: string,\n public email: string,\n public first_name: string,\n public last_name: string,\n public contact_number: string,\n ) {}\n}\n","export class EsolveTransactionItemPrice {\n constructor(\n /**\n * Price without tax\n */\n public price: number,\n /**\n * Price with tax\n */\n public price_with_tax: number,\n /**\n * Price without tax and with discounts applied if applicable\n */\n public price_discounted: number,\n /**\n * Price with tax and with discounts applied if applicable\n */\n public price_with_tax_discounted: number,\n ) {}\n}\n","import { EsolveStockImageSize } from '../../stock';\n\nimport { EsolveTransactionItemRecord } from '../interfaces';\n\nimport { EsolveTransactionItemPrice } from './esolve-transaction-item-price.model';\n\nexport class EsolveTransactionItem {\n public id = 0;\n public code = '';\n public name = '';\n public sef_name = '';\n public image_name = '';\n public image_last_modified = '';\n public category_description = '';\n public subcategory_description = '';\n public pack_description = '';\n public pack_size = 0;\n public qty = 0;\n public discount = 0;\n public vat_rate = 0;\n public price: EsolveTransactionItemPrice;\n public line_total: EsolveTransactionItemPrice;\n\n /**\n * Path to tiny stock image\n */\n public get tiny_image_src(): string {\n return this.getImagePath('tiny');\n }\n\n /**\n * Path to thumbnail stock image\n */\n public get thumbnail_image_src(): string {\n return this.getImagePath('thumb');\n }\n\n /**\n * Path to small stock image\n */\n public get small_image_src(): string {\n return this.getImagePath('small');\n }\n\n /**\n * Path to big stock image\n */\n public get big_image_src(): string {\n return this.getImagePath('big');\n }\n\n /**\n * Path to original stock image\n */\n public get original_image_src(): string {\n return this.getImagePath('original');\n }\n\n constructor(record?: Partial<EsolveTransactionItemRecord>) {\n if (record) {\n this.id = record.id ?? 0;\n this.code = record.code ?? '';\n this.name = record.name ?? '';\n this.sef_name = record.sef_name ?? '';\n this.image_name = record.image_name ?? '';\n this.image_last_modified = record.image_last_modified ?? '';\n this.category_description = record.category_description ?? '';\n this.subcategory_description = record.subcategory_description ?? '';\n this.pack_description = record.pack_description ?? '';\n this.pack_size = +(record.items_in_pack ?? 0);\n this.qty = +(record.qty ?? 0);\n this.discount = +(record.discount ?? 0);\n this.vat_rate = +(record.vat_rate ?? 0);\n\n this.price = new EsolveTransactionItemPrice(\n +(record.price_exclusive ?? 0),\n +(record.price_inclusive ?? 0),\n +(record.price_exclusive_after_discount ?? 0),\n +(record.price_inclusive_after_discount ?? 0),\n );\n\n this.line_total = new EsolveTransactionItemPrice(\n +(record.line_total_exclusive ?? 0),\n +(record.line_total_inclusive ?? 0),\n +(record.line_total_exclusive_after_discount ?? 0),\n +(record.line_total_inclusive_after_discount ?? 0),\n );\n } else {\n this.price = new EsolveTransactionItemPrice(0, 0, 0, 0);\n this.line_total = new EsolveTransactionItemPrice(0, 0, 0, 0);\n }\n }\n\n public getImagePath(image_size: EsolveStockImageSize): string {\n if (this.image_name !== '') {\n let param = '';\n\n if (this.image_last_modified !== '') {\n param = `?t=${this.image_last_modified}`;\n }\n\n return `/images/stock/${image_size}/${this.image_name}${param}`;\n }\n\n return '';\n }\n}\n","import { EsolveList } from '../../shared/esolve-list.model';\n\nimport { EsolveTransaction } from './esolve-transaction.model';\n\nexport class EsolveTransactionList extends EsolveList<EsolveTransaction> {}\n","export class EsolveLocationAddress {\n constructor(\n public street: string,\n public suburb: string,\n public city: string,\n public province: string,\n public country: string,\n public postal_code: string,\n public latitude: number,\n public longitude: number,\n ) {}\n}\n","export class EsolveLocationContactInfo {\n constructor(\n public telnumber: string[],\n public cellnumber: string,\n public email: string,\n public fax: string,\n ) {}\n}\n","export class EsolveLocationGEO {\n constructor(\n public distance: number,\n public range: number,\n public target_description: string,\n ) {}\n}\n","export class EsolveLocationPOBoxAddress {\n constructor(\n public pobox: string,\n public city: string,\n public postal_code: string,\n ) {}\n}\n","export class EsolveLocationTradingDay {\n constructor(\n public open: string,\n public close: string,\n ) {}\n}\n","import { EsolveLocationTradingDay } from './esolve-location-trading-day.model';\n\nexport class EsolveLocationTradingTimes {\n constructor(\n public monday: EsolveLocationTradingDay,\n public tuesday: EsolveLocationTradingDay,\n public wednesday: EsolveLocationTradingDay,\n public thursday: EsolveLocationTradingDay,\n public friday: EsolveLocationTradingDay,\n public saturday: EsolveLocationTradingDay,\n public sunday: EsolveLocationTradingDay,\n public public_holiday: EsolveLocationTradingDay,\n public trading_hours_additional_info: string = '',\n ) {}\n}\n","import { EsolveLocationRecord } from '../interfaces';\nimport { EsolveLocationAddress } from './esolve-location-address.model';\nimport { EsolveLocationContactInfo } from './esolve-location-contact-info.model';\nimport { EsolveLocationPOBoxAddress } from './esolve-location-pobox-address.model';\nimport { EsolveLocationTradingTimes } from './esolve-location-trading-times.model';\nimport { EsolveLocationTradingDay } from './esolve-location-trading-day.model';\nimport { EsolveLocationGEO } from './esolve-location-geo.model';\nimport { EsolveCustomFields } from '../../shared/custom-fields';\n\nexport class EsolveLocation<T extends EsolveCustomFields = EsolveCustomFields> {\n public id: number;\n public identifier: string;\n public description: string;\n public head_office: boolean;\n public default_location_for_payment_methods: boolean;\n public external_system_code: string;\n public erp_identifier: string;\n public userid: number;\n public importance: number;\n public active: boolean;\n public dispatches_stock: boolean;\n public include_on_enquiries: boolean;\n public include_on_store_locator: boolean;\n public website_url: string;\n\n public address: EsolveLocationAddress;\n public pobox_address: EsolveLocationPOBoxAddress;\n public contact_info: EsolveLocationContactInfo;\n public trading_times: EsolveLocationTradingTimes;\n public geo?: EsolveLocationGEO;\n /**\n * Location custom fields\n */\n public custom_fields?: T;\n\n constructor(record: EsolveLocationRecord<T>) {\n this.id = +record.id;\n this.identifier = record.identifier;\n this.description = record.description;\n this.head_office = !!+record.head_office;\n this.erp_identifier = record.erp_identifier;\n this.external_system_code = record.external_system_code;\n this.default_location_for_payment_methods =\n !!+record.default_location_for_payment_methods;\n this.userid = +record.userid;\n this.importance = +record.importance;\n this.active = !!+record.is_active;\n this.dispatches_stock = !!+record.dispatches_stock;\n this.include_on_enquiries = !!+record.include_on_enquiries;\n this.include_on_store_locator = !!+record.include_on_store_locator;\n this.website_url = record.website_url;\n\n this.address = new EsolveLocationAddress(\n record.street,\n record.suburb,\n record.city,\n record.province,\n record.country,\n record.postal_code,\n +record.latitude,\n +record.longitude,\n );\n\n this.pobox_address = new EsolveLocationPOBoxAddress(\n record.pobox,\n record.pobox_city,\n record.pobox_postal_code,\n );\n\n const telnumbers = [];\n\n if (record.branch_telnumber.length > 0) {\n telnumbers.push(record.branch_telnumber);\n }\n\n if (record.branch_telnumber_2.length > 0) {\n telnumbers.push(record.branch_telnumber_2);\n }\n\n if (record.branch_telnumber_3.length > 0) {\n telnumbers.push(record.branch_telnumber_3);\n }\n\n this.contact_info = new EsolveLocationContactInfo(\n telnumbers,\n record.branch_cellnumber,\n record.branch_email,\n record.branch_fax,\n );\n\n const monday = new EsolveLocationTradingDay(\n record.monday_open_time,\n record.monday_close_time,\n );\n\n const tuesday = new EsolveLocationTradingDay(\n record.tuesday_open_time,\n record.tuesday_close_time,\n );\n\n const wednesday = new EsolveLocationTradingDay(\n record.wednesday_open_time,\n record.wednesday_close_time,\n );\n\n const thursday = new EsolveLocationTradingDay(\n record.thursday_open_time,\n record.thursday_close_time,\n );\n\n const friday = new EsolveLocationTradingDay(\n record.friday_open_time,\n record.friday_close_time,\n );\n\n const saturday = new EsolveLocationTradingDay(\n record.saturday_open_time,\n record.saturday_close_time,\n );\n\n const sunday = new EsolveLocationTradingDay(\n record.sunday_open_time,\n record.sunday_close_time,\n );\n\n const public_holiday = new EsolveLocationTradingDay(\n record.public_holiday_open_time,\n record.public_holiday_close_time,\n );\n\n this.trading_times = new EsolveLocationTradingTimes(\n monday,\n tuesday,\n wednesday,\n thursday,\n friday,\n saturday,\n sunday,\n public_holiday,\n record.trading_hours_additional_info,\n );\n\n this.geo = new EsolveLocationGEO(\n record.distance,\n record.range,\n record.target_description,\n );\n\n if (record.custom_fields) {\n this.custom_fields = record.custom_fields;\n }\n }\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\n\nimport { EsolveLocation } from './esolve-location.model';\n\n/**\n * Location object list\n */\nexport class EsolveLocationList<\n T extends EsolveCustomFields = EsolveCustomFields,\n> {\n constructor(\n public locations: EsolveLocation<T>[],\n public total: number,\n public page: number,\n ) {}\n}\n","// Classes\nexport * from './esolve-location-address.model';\nexport * from './esolve-location-contact-info.model';\nexport * from './esolve-location-geo.model';\nexport * from './esolve-location-pobox-address.model';\nexport * from './esolve-location-trading-day.model';\nexport * from './esolve-location-trading-times.model';\nexport * from './esolve-location.model';\nexport * from './esolve-location-list.model';\n","// Types\nexport * from './esolve-location-sort-field.type';\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\nimport { EsolveCustomFields } from '../shared/custom-fields';\nimport {\n EsolveFilterFactory,\n EsolveFilterList,\n EsolveFilterRecordList,\n EsolveMultipleSelectFilter,\n EsolveRangeFilter,\n EsolveSingleSelectFilter,\n} from '../shared/filters';\n\nimport {\n EsolveLocationFilterOptions,\n EsolveLocationOptions,\n EsolveLocationRecord,\n} from './interfaces';\nimport { EsolveLocation, EsolveLocationList } from './classes';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveLocationsService<\n T extends EsolveCustomFields = EsolveCustomFields,\n> {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n /**\n * Retrieves a list of stock locations\n *\n * @returns An `Observable` with an array of stock locations\n */\n public getStockLocations(\n options?: EsolveLocationOptions,\n ): Observable<EsolveLocationList<T>> {\n let params = new HttpParams();\n\n if (options) {\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.sort) {\n const sort = options.sort;\n\n if (sort.field) {\n params = params.set('sort', sort.field);\n }\n\n if (sort.order) {\n params = params.set('order', sort.order);\n }\n }\n\n if (options.search_phrase) {\n params = params.set('search_phrase', options.search_phrase);\n }\n\n if (options.is_active) {\n params = params.set('is_active', options.is_active);\n }\n\n if (options.dispatches_stock) {\n params = params.set(\n 'dispatches_stock',\n options.dispatches_stock,\n );\n }\n\n if (options.province) {\n params = params.set('province', options.province);\n }\n\n if (options.country) {\n params = params.set('country', options.country);\n }\n\n if (options.filters) {\n let filters = options.filters;\n\n if (!Array.isArray(filters)) {\n filters = EsolveFilterFactory.covertFromObj(filters);\n }\n\n params = EsolveFilterFactory.convertToHttpParams(\n filters,\n params,\n );\n }\n }\n\n return this.getLocationRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const locations: EsolveLocation<T>[] = [];\n\n response.records.forEach((locationRecord) => {\n locations.push(this.processLocation(locationRecord));\n });\n\n return new EsolveLocationList(\n locations,\n +response.additional_data.total_records,\n options?.page ?? 0,\n );\n }),\n );\n }\n\n /**\n * Retrieves a list of stock locations using the address_id as parameter or the latitude and longitude.\n * Set the addresses_id to 0 and the gps coordinates in order to retrieve the locations list when the address isn't\n * yet saved.\n *\n * @param addresses_id if supplied, the latitude and longitude on the address will be used.\n * @param latitude if supplied and address_id > 0, the value is ignored.\n * @param longitude if supplied and address_id > 0, the value is ignored.\n *\n * @returns An `Observable` with an array of stock locations\n */\n public getStockLocationsGeo(\n addresses_id = 0,\n latitude = 0,\n longitude = 0,\n ): Observable<EsolveLocation<T>[]> {\n return this.http\n .get<EsolveGetResponse<EsolveLocationRecord<T>[]>>(\n `${this.config.api_url}/get-locations-geo.php`,\n {\n params: {\n addresses_id,\n latitude,\n longitude,\n },\n },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processStockLocations(response.records);\n }),\n );\n }\n\n public getLocationFilters(\n options: EsolveLocationFilterOptions,\n ): Observable<EsolveFilterList> {\n const params = new HttpParams({\n fromObject: {\n country: options.country ?? '',\n province: options.province ?? '',\n fields: options.fields.join(','),\n },\n });\n\n return this.http\n .get<EsolveGetResponse<EsolveFilterRecordList>>(\n `${this.config.api_url}/get-location-filters.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const filters = [];\n\n for (const record of response.records) {\n let filter = null;\n\n if (record.type === 'range') {\n filter = new EsolveRangeFilter(\n record.field,\n +record.min,\n +record.max,\n );\n } else if (record.type === 'single') {\n filter = new EsolveSingleSelectFilter(\n record.field,\n record.values,\n );\n } else if (record.type === 'multiple') {\n filter = new EsolveMultipleSelectFilter(\n record.field,\n record.values,\n );\n }\n\n if (filter) {\n filters.push(filter);\n }\n }\n\n return filters;\n }),\n );\n }\n\n /**\n * Retrieves location records from HTTP params.\n * @param params HTTP client parameters\n */\n private getLocationRecords(\n params: HttpParams,\n ): Observable<EsolveGetResponse<EsolveLocationRecord<T>[]>> {\n return this.http.get<EsolveGetResponse<EsolveLocationRecord<T>[]>>(\n `${this.config.api_url}/get-locations.php`,\n { params },\n );\n }\n\n /**\n * Processes the eSolve stock location records.\n *\n * @param records Records to process\n * @returns An array of processed stock location records\n */\n private processStockLocations(\n records: EsolveLocationRecord<T>[],\n ): EsolveLocation<T>[] {\n const locations: EsolveLocation<T>[] = [];\n\n for (const record of records) {\n locations.push(this.processLocation(record));\n }\n\n return locations;\n }\n\n /**\n * Processes the eSolve stock item record and converts it to an object.\n *\n * @param record eSolve stock item record\n */\n private processLocation(\n record: EsolveLocationRecord<T>,\n ): EsolveLocation<T> {\n return new EsolveLocation<T>(record);\n }\n}\n","import { EsolveLocation } from '../../locations';\n\nexport class EsolveTransactionLocation extends EsolveLocation {}\n","export class EsolveTransactionPaymentMethod {\n constructor(\n public id: number,\n public name: string,\n public description: string,\n public integration_type: string,\n public service_provider: string,\n ) {}\n}\n","export class EsolveTransactionShippingMethod {\n constructor(\n public id: number,\n public name: string,\n public delivery_category: string,\n public location: string,\n public description: string,\n public pricing: string,\n public client_to_collect: boolean,\n ) {}\n}\n","export class EsolveTransactionUser {\n constructor(\n public id: number,\n public email: string,\n public first_name: string,\n public last_name: string,\n public tel_number: string,\n public cell_number: string,\n ) {}\n}\n","import { EsolvePickStatusType } from '../types';\n\nexport class EsolveTransactionPick {\n public start_date?: Date;\n public end_date?: Date;\n\n constructor(\n public pick_id: number,\n public status: EsolvePickStatusType,\n ) {}\n}\n","import { parseISO } from 'date-fns';\n\nimport { EsolveTransactionTimeSlotRecord } from '../interfaces';\n\nexport class EsolveTransactionTimeSlot {\n public id: number;\n public text: string;\n public target_date: Date;\n\n constructor(record: EsolveTransactionTimeSlotRecord) {\n this.id = +record.id;\n this.text = record.text;\n this.target_date = parseISO(record.target_date);\n }\n}\n","import {\n EsolveCartAlternative,\n EsolveCartAlternativeRecord,\n EsolveCartAlternativesMap,\n} from '../../cart';\n\nimport { EsolveTransactionType } from '../types';\nimport {\n EsolveTransactionRecord,\n EsolveTransactionItemRecord,\n} from '../interfaces';\n\nimport { EsolveTransactionAddress } from './esolve-transaction-address.model';\nimport { EsolveTransactionClient } from './esolve-transaction-client.model';\nimport { EsolveTransactionItem } from './esolve-transaction-item.model';\nimport { EsolveTransactionLocation } from './esolve-transaction-location.model';\nimport { EsolveTransactionPaymentMethod } from './esolve-transaction-payment-method.model';\nimport { EsolveTransactionShippingMethod } from './esolve-transaction-shipping-method.model';\nimport { EsolveTransactionUser } from './esolve-transaction-user.model';\nimport { EsolveTransactionPick } from './esolve-transaction-pick.model';\nimport { EsolveTransactionTimeSlot } from './esolve-transaction-time-slot.model';\n\nexport class EsolveTransaction {\n public id: number;\n public type: EsolveTransactionType;\n public status: string;\n public comment: string;\n public loyalty_number: string;\n public external_order_number: string;\n public external_invoice_number: string;\n\n // Dates\n public date: Date;\n public expected_date: Date;\n\n public client?: EsolveTransactionClient;\n public user?: EsolveTransactionUser;\n\n // Location\n public location?: EsolveTransactionLocation;\n\n // Totals\n public invoice_amount: number;\n public vat: number;\n public discount: number;\n public total: number;\n public shipping_total: number;\n public insurance_total: number;\n\n // Payment\n public payment_method?: EsolveTransactionPaymentMethod;\n public payment: number;\n public gateway_transaction_id: string;\n public payment_reference: string;\n public payment_description: string;\n\n // Shipping\n public shipping_method?: EsolveTransactionShippingMethod;\n\n // Address Details\n public address: EsolveTransactionAddress;\n\n // Transaction Items\n public items: EsolveTransactionItem[] = [];\n public alternatives?: EsolveCartAlternativesMap;\n\n public time_slot?: EsolveTransactionTimeSlot;\n\n //Picking\n public pick?: EsolveTransactionPick;\n\n constructor(record: EsolveTransactionRecord) {\n this.id = +record.id;\n this.type = record.transaction_type;\n this.status = record.status;\n this.comment = record.comment ?? '';\n this.loyalty_number = record.loyaltynumber;\n this.external_order_number = record.external_order_number;\n this.external_invoice_number = record.external_invoice_number;\n\n this.date = new Date(+record.txdate_timestamp * 1000);\n this.expected_date = new Date(+record.expected_date_timestamp * 1000);\n\n this.invoice_amount = +record.invoice_amount;\n this.vat = +record.vat;\n this.discount = +record.discount;\n this.total = +record.total;\n this.shipping_total = +record.shipping_total;\n this.insurance_total = +record.insurance_total;\n\n this.payment = +record.payment;\n this.payment_reference = record.payment_reference;\n this.payment_description = record.payment_description;\n this.gateway_transaction_id = record.gateway_transaction_id;\n\n this.address = new EsolveTransactionAddress(\n record.recipient,\n record.address_type,\n record.address_description,\n record.street_number,\n record.street,\n record.suburb,\n record.city,\n record.province,\n record.country,\n record.postal_code,\n record.pobox,\n );\n\n if (record.user) {\n this.user = new EsolveTransactionUser(\n +record.user.id,\n record.user.email,\n record.user.firstname,\n record.user.surname,\n record.user.telnumber,\n record.user.cellnumber,\n );\n }\n\n if (record.client) {\n this.client = new EsolveTransactionClient(\n +record.client.id,\n record.client.account,\n record.client.company_name,\n record.client.branch_code,\n record.client.email,\n record.client.firstname,\n record.client.surname,\n record.client.contact_number,\n );\n }\n\n if (record.location_details) {\n this.location = new EsolveTransactionLocation(\n record.location_details,\n );\n }\n\n if (record.payment_method_details) {\n this.payment_method = new EsolveTransactionPaymentMethod(\n record.payment_method_details.id,\n record.payment_method_details.paymethod_name,\n record.payment_method_details.description,\n record.payment_method_details.integration_type,\n record.payment_method_details.service_provider,\n );\n }\n\n if (record.shipping_method_details) {\n this.shipping_method = new EsolveTransactionShippingMethod(\n +record.shipping_method_details.id,\n record.shipping_method_details.carrier_name,\n record.shipping_method_details.delivery_category,\n record.shipping_method_details.location,\n record.shipping_method_details.description,\n record.shipping_method_details.pricing,\n !!record.shipping_method_details.client_to_collect,\n );\n }\n\n if (record.time_slot) {\n this.time_slot = new EsolveTransactionTimeSlot(record.time_slot);\n }\n\n this.parseTransactionItems(record.transaction_items);\n this.parseAlternatives(record.alternatives);\n\n if (record.cart_pick_id && record.pick_status) {\n this.pick = new EsolveTransactionPick(\n record.cart_pick_id,\n record.pick_status,\n );\n\n if (record.pick_start !== undefined && record.pick_start !== null) {\n this.pick.start_date = new Date(+record.pick_start * 1000);\n }\n\n if (record.pick_end !== undefined && record.pick_end !== null) {\n this.pick.end_date = new Date(+record.pick_end * 1000);\n }\n }\n }\n\n private parseTransactionItems(\n record_items: EsolveTransactionItemRecord[],\n ): void {\n for (const record_item of record_items) {\n this.items.push(new EsolveTransactionItem(record_item));\n }\n }\n\n private parseAlternatives(records?: EsolveCartAlternativeRecord[]) {\n if (!records || records.length === 0) {\n return;\n }\n\n this.alternatives = new Map();\n\n for (const record of records) {\n this.alternatives.set(\n record.item_id,\n new EsolveCartAlternative(record),\n );\n }\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { Observable, map, throwError } from 'rxjs';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveFilterFactory } from '../shared/filters';\nimport { EsolveGetResponse } from '../shared/response';\nimport { EsolveErrorHandlerService } from '../shared/errors';\nimport { EsolveSessionService } from '../session';\nimport {\n EsolveTransactionOptions,\n EsolveTransactionRecord,\n} from './interfaces';\nimport { EsolveTransaction, EsolveTransactionList } from './classes';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveTransactionsService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly sessionService = inject(EsolveSessionService);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n\n private _user_id = 0;\n\n public get user_id(): number {\n return this._user_id;\n }\n\n public set user_id(value: number) {\n value = value > 0 ? value : 0;\n\n if (this._user_id !== value) {\n this._user_id = value;\n }\n }\n\n constructor() {\n this.sessionService.getSession().subscribe((session) => {\n if (session.token !== '') {\n this.user_id = session.user_id;\n }\n });\n }\n\n public getTransactions(\n options: EsolveTransactionOptions = {},\n ): Observable<EsolveTransactionList> {\n try {\n this.loginGuard();\n\n let params = new HttpParams();\n\n params = params.set('user_id', this.user_id);\n\n if (options.user_id && options.user_id === -1) {\n params = params.set('user_id', -1);\n }\n\n if (options.erp_identifier) {\n params = params.set('erp_identifier', options.erp_identifier);\n }\n\n if (options.location_id) {\n params = params.set('location_id', options.location_id);\n }\n\n if (options.type) {\n params = params.set('type', options.type);\n }\n\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.from_date) {\n params = params.set('from_date', options.from_date);\n }\n\n if (options.to_date) {\n params = params.set('to_date', options.to_date);\n }\n\n if (options.pick_status) {\n params = params.set('pick_status', options.pick_status);\n }\n\n if (options.from_id) {\n params = params.set('from_id', options.from_id);\n }\n\n if (options.to_id) {\n params = params.set('to_id', options.to_id);\n }\n\n if (options.not_synced) {\n params = params.set('not_synced', options.not_synced);\n }\n\n if (options.sort) {\n const sort = options.sort;\n\n if (sort.field) {\n params = params.set('sort', sort.field);\n }\n\n if (sort.order) {\n params = params.set('order', sort.order);\n }\n }\n\n if (options.filters) {\n let filters = options.filters;\n\n if (!Array.isArray(filters)) {\n filters = EsolveFilterFactory.covertFromObj(filters);\n }\n\n params = EsolveFilterFactory.convertToHttpParams(\n filters,\n params,\n );\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveTransactionRecord[]>>(\n `${this.config.api_url}/get-transactions.php`,\n {\n params: params,\n },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const items = this.processTransactions(\n response.records,\n );\n const total =\n +response.additional_data.total_records ?? 0;\n const rows = options.rows ?? total;\n const page = options.page || 1;\n\n return new EsolveTransactionList(\n items,\n page,\n rows,\n total,\n );\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n public getTransaction(\n id: number,\n user_id?: number,\n ): Observable<EsolveTransaction> {\n try {\n this.loginGuard();\n\n return this.http\n .get<EsolveGetResponse<EsolveTransactionRecord[]>>(\n `${this.config.api_url}/get-transactions.php`,\n {\n params: {\n user_id: user_id ?? this.user_id,\n transaction_id: id,\n },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const items = this.processTransactions(\n response.records,\n );\n\n return items[0];\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n private loginGuard(): void {\n if (this.user_id <= 0) {\n this.errorHandler.throwError('login_required', 'Login is required');\n }\n }\n\n private processTransactions(\n records: EsolveTransactionRecord[],\n ): EsolveTransaction[] {\n const transactions: EsolveTransaction[] = [];\n\n if (records) {\n for (const record of records) {\n const transaction = new EsolveTransaction(record);\n\n transactions.push(transaction);\n }\n }\n\n return transactions;\n }\n}\n","import { EsolvePostResponseItem, EsolveResponseResult } from '../shared';\n\nexport class EsolveSessionShippingUpdateResult extends EsolveResponseResult {\n public shipping_updated: boolean;\n\n constructor(response: EsolvePostResponseItem) {\n super(response);\n\n if (typeof response.esolve_id === 'string') {\n throw new Error('Invalid response id.');\n }\n\n this.shipping_updated = response.esolve_id > 0;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport {\n HttpClient,\n HttpErrorResponse,\n HttpParams,\n} from '@angular/common/http';\n\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport {\n EsolveErrorHandlerService,\n EsolveResponseHandlerService,\n EsolveSetResponse,\n EsolveGetResponse,\n EsolveResult,\n EsolveDeleteResponse,\n EsolveFilterFactory,\n} from '../shared';\nimport { EsolveSessionService } from '../session';\nimport { EsolveCartTotals } from '../cart';\nimport {\n EsolveTransactionRecord,\n EsolveTransaction,\n EsolveTransactionOptions,\n EsolveTransactionList,\n} from '../transactions';\n\nimport {\n EsolveRegistrationPostResponseItem,\n EsolveRegistrationData,\n EsolveRegistrationResult,\n} from './registration';\nimport {\n EsolveAddress,\n EsolveAddressRecord,\n EsolveAddressResult,\n EsolveAddressPostData,\n EsolveAddressResponse,\n EsolveSessionAddressUpdateResult,\n} from './address';\nimport {\n EsolveChangePasswordResult,\n EsolveResetPasswordResult,\n EsolveForgotPasswordResponse,\n EsolveForgotPasswordGetResult,\n} from './password';\nimport {\n EsolveUserAccount,\n EsolveUserAccountData,\n EsolveUserAccountRecord,\n EsolveUserAccountResult,\n EsolveUserClientAccountBalances,\n EsolveUserClientAccountBalancesRecord,\n} from './user-account';\nimport {\n EsolveAccountConfirmationPostResponseItem,\n EsolveAccountConfirmationResult,\n} from './confirmation';\nimport { EsolveLocationOption, EsolveLocationUpdateResult } from './location';\n\nimport { EsolveSessionShippingUpdateResult } from './esolve-session-shipping-result.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveAccountService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly sessionService = inject(EsolveSessionService);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n private _user_id = 0;\n\n public get user_id(): number {\n return this._user_id;\n }\n\n public set user_id(value: number) {\n value = value > 0 ? value : 0;\n\n if (this._user_id !== value) {\n this._user_id = value;\n }\n }\n\n constructor() {\n this.sessionService.getSession().subscribe((session) => {\n if (session.token !== '') {\n this.user_id = session.user_id;\n }\n });\n }\n\n public updateUserAccount(\n user_account_data: EsolveUserAccountData,\n ): Observable<EsolveUserAccountResult> {\n const body = {\n account: user_account_data,\n };\n\n return this.http\n .post<EsolveSetResponse>(\n `${this.config.api_url}/set-user-account.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveUserAccountResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-user-account',\n errorRes,\n );\n }),\n );\n }\n\n public getUserAccount(): Observable<EsolveUserAccount> {\n return this.http\n .get<EsolveGetResponse<EsolveUserAccountRecord[]>>(\n `${this.config.api_url}/get-account.php`,\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length === 0\n ) {\n throw response;\n }\n\n const record = response.records[0];\n\n return this.processUserAccount(record);\n }),\n );\n }\n\n public deleteUserAccount(): Observable<EsolveResult> {\n return this.http\n .delete<EsolveDeleteResponse>(\n `${this.config.api_url}/delete-account.php`,\n {\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) => {\n if (\n http_response.result === undefined ||\n http_response.result === null ||\n http_response.result.status !== 'success'\n ) {\n throw http_response;\n }\n\n return new EsolveResult(\n http_response.result.status,\n http_response.result.code,\n http_response.result.message,\n );\n }),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpDeleteError(\n 'delete-account',\n errorRes,\n );\n }),\n );\n }\n\n public setAddress(\n address_post_data: EsolveAddressPostData,\n ): Observable<EsolveAddressResult> {\n const body = {\n address: address_post_data,\n };\n\n return this.http\n .post<EsolveSetResponse<EsolveAddressResponse>>(\n `${this.config.api_url}/set-address.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveAddressResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-address',\n errorRes,\n );\n }),\n );\n }\n\n public getAddresses(): Observable<EsolveAddress[]> {\n try {\n this.loginGuard();\n\n return this.http\n .get<EsolveGetResponse<EsolveAddressRecord[]>>(\n `${this.config.api_url}/get-addresses.php`,\n {\n params: { user_id: this.user_id },\n },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processUserAddress(response.records);\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n public deleteAddress(id: number): Observable<EsolveResult> {\n return this.http\n .delete<EsolveDeleteResponse>(\n `${this.config.api_url}/delete-address.php`,\n {\n params: { id },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) => {\n if (\n http_response.result === undefined ||\n http_response.result === null ||\n http_response.result.status !== 'success'\n ) {\n throw http_response;\n }\n\n return new EsolveResult(\n http_response.result.status,\n http_response.result.code,\n http_response.result.message,\n );\n }),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpDeleteError(\n 'delete-address',\n errorRes,\n );\n }),\n );\n }\n\n public register(\n user_registration: EsolveRegistrationData,\n guest = false,\n ): Observable<EsolveRegistrationResult> {\n const body = {\n user: user_registration,\n guest_registration: guest,\n };\n\n return this.http\n .post<EsolveSetResponse<EsolveRegistrationPostResponseItem>>(\n `${this.config.api_url}/set-registration.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n if (response.auto_login) {\n const session_data = response.session_data;\n\n this.sessionService.handleUpdateSession({\n user_id: +response.esolve_id,\n location_id: +session_data.location_id,\n addresses_id: +session_data.addresses_id,\n shipping_id: +session_data.shipping_id,\n });\n }\n\n return new EsolveRegistrationResult(response);\n },\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-registration',\n errorRes,\n );\n }),\n );\n }\n\n public changePassword(\n password: string,\n confirm_password: string,\n ): Observable<EsolveChangePasswordResult> {\n const body = {\n password,\n confirm_password,\n };\n\n return this.http\n .post<EsolveSetResponse>(\n `${this.config.api_url}/set-change-password.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n return new EsolveChangePasswordResult(response);\n },\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-change-password',\n errorRes,\n );\n }),\n );\n }\n\n /**\n * Submits the users confirmation key to the relevant backend server in order to\n * confirm the accounts validity. The key was emailed to the user hence if he received\n * it and enters the value, the email account can be seen as valid.\n *\n * @param key The key that was emailed to the registered user's email account.\n * @returns An `Observable` that contains the result of the account confirmation request.\n */\n public accountConfirmationRequest(\n key: string,\n ): Observable<EsolveAccountConfirmationResult> {\n const body = {\n key,\n };\n\n return this.http\n .post<EsolveSetResponse<EsolveAccountConfirmationPostResponseItem>>(\n `${this.config.api_url}/set-account-confirmation.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n if (response.auto_login) {\n this.sessionService.handleUpdateSession({\n user_id: +response.esolve_id,\n location_id: +response.location_id,\n addresses_id: +response.addresses_id,\n shipping_id: +response.shipping_id,\n });\n }\n\n return new EsolveAccountConfirmationResult(\n response,\n );\n },\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-account-confirmation',\n errorRes,\n );\n }),\n );\n }\n\n public sendForgotPasswordRequest(email: string): Observable<boolean> {\n return this.http\n .get<EsolveGetResponse<EsolveForgotPasswordGetResult>>(\n `${this.config.api_url}/get-forgot-password.php`,\n { params: { email } },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n !('reset_link_sent' in response.records)\n ) {\n throw response;\n }\n\n return response.records.reset_link_sent;\n }),\n );\n }\n\n public resetPassword(\n reset_key: string,\n password: string,\n confirm_password: string,\n auto_login = true,\n ): Observable<EsolveResetPasswordResult> {\n return this.http\n .post<EsolveSetResponse<EsolveForgotPasswordResponse>>(\n `${this.config.api_url}/set-forgot-password.php`,\n {\n reset_key,\n password,\n confirm_password,\n auto_login,\n },\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n if (!response.login_required) {\n const session_data = response.session_data;\n\n this.sessionService.handleUpdateSession({\n user_id: +response.esolve_id,\n location_id: +session_data.location_id,\n addresses_id: +session_data.addresses_id,\n shipping_id: +session_data.shipping_id,\n });\n }\n\n return new EsolveResetPasswordResult(response);\n },\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-forgot-password',\n errorRes,\n );\n }),\n );\n }\n\n public updateLocation(\n location_id: number,\n ): Observable<EsolveLocationUpdateResult> {\n return this.updateUserLocation({ location_id });\n }\n\n public updateLocationOnErp(\n erp: string,\n ): Observable<EsolveLocationUpdateResult> {\n return this.updateUserLocation({ erp });\n }\n\n public updateSessionAddress(\n addresses_id: number,\n ): Observable<EsolveSessionAddressUpdateResult> {\n return this.http\n .post<EsolveSetResponse>(\n `${this.config.api_url}/set-session-address.php`,\n {\n addresses_id,\n },\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n if (typeof response.esolve_id === 'string') {\n throw new Error('Invalid response id.');\n }\n\n this.sessionService.handleUpdateSession({\n addresses_id: +response.esolve_id,\n });\n\n return new EsolveSessionAddressUpdateResult(\n response,\n );\n },\n ),\n ),\n );\n }\n\n public updateSessionShipping(\n shipping_id: number,\n ): Observable<EsolveSessionShippingUpdateResult> {\n return this.http\n .post<EsolveSetResponse>(\n `${this.config.api_url}/set-session-shipping.php`,\n {\n shipping_id,\n },\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n if (typeof response.esolve_id === 'string') {\n throw new Error('Invalid response id.');\n }\n\n this.sessionService.handleUpdateSession({\n shipping_id: +response.esolve_id,\n });\n\n return new EsolveSessionShippingUpdateResult(\n response,\n );\n },\n ),\n ),\n );\n }\n\n /**\n * @deprecated Use EsolveTransactionsService for future transaction requests\n */\n public getTransactions(\n options: EsolveTransactionOptions = {},\n ): Observable<EsolveTransactionList> {\n try {\n this.loginGuard();\n\n let params = new HttpParams();\n\n params = params.set('user_id', this.user_id);\n\n if (options.type) {\n params = params.set('type', options.type);\n }\n\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.from_date) {\n params = params.set('from_date', options.from_date);\n }\n\n if (options.to_date) {\n params = params.set('to_date', options.to_date);\n }\n\n if (options.filters) {\n let filters = options.filters;\n\n if (!Array.isArray(filters)) {\n filters = EsolveFilterFactory.covertFromObj(filters);\n }\n\n params = EsolveFilterFactory.convertToHttpParams(\n filters,\n params,\n );\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveTransactionRecord[]>>(\n `${this.config.api_url}/get-transactions.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const items = this.processTransactions(\n response.records,\n );\n const total =\n +response.additional_data.total_records ?? 0;\n const rows = options.rows ?? total;\n const page = options.page || 1;\n\n return new EsolveTransactionList(\n items,\n page,\n rows,\n total,\n );\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n /**\n * @deprecated Use EsolveTransactionsService for future transaction requests\n */\n public getTransaction(id: number): Observable<EsolveTransaction> {\n try {\n this.loginGuard();\n\n return this.http\n .get<EsolveGetResponse<EsolveTransactionRecord[]>>(\n `${this.config.api_url}/get-transactions.php`,\n {\n params: {\n user_id: this.user_id,\n transaction_id: id,\n },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const items = this.processTransactions(\n response.records,\n );\n\n return items[0];\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n public getClientAccountBalances(): Observable<\n EsolveUserClientAccountBalances | undefined\n > {\n try {\n this.loginGuard();\n\n return this.http\n .get<\n EsolveGetResponse<EsolveUserClientAccountBalancesRecord[]>\n >(`${this.config.api_url}/get-client-account-balances.php`)\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processClientBalances(response.records);\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n public genrateStatementDownloadLink(clients_id: number): string {\n try {\n this.loginGuard();\n\n if (clients_id <= 0) {\n return '';\n }\n\n const base_url = `${this.config.api_url}/get-genrated-pdf.php`;\n const queries = [\n {\n key: 'ws_id',\n value: this.config.wsid,\n },\n {\n key: 'clients_id',\n value: clients_id,\n },\n {\n key: 'key',\n value: this.sessionService.getToken(),\n },\n ];\n\n const query_string = queries\n .map((query) => `${query.key}=${query.value}`)\n .join('&');\n\n return `${base_url}?${query_string}`;\n } catch (error) {\n return '';\n }\n }\n\n private processUserAccount(\n record: EsolveUserAccountRecord,\n ): EsolveUserAccount {\n if (!record) {\n throw new Error('Invalid record');\n }\n\n if (+record.userid !== this._user_id) {\n throw new Error('Invalid user account retrieved');\n }\n\n return new EsolveUserAccount(record);\n }\n\n private processUserAddress(\n records: EsolveAddressRecord[],\n ): EsolveAddress[] {\n const user_addresses: EsolveAddress[] = [];\n\n if (!records || this._user_id === 0) {\n return user_addresses;\n }\n\n for (const record of records) {\n if (+record.userid !== this._user_id) {\n continue;\n }\n\n user_addresses.push(new EsolveAddress(record));\n }\n\n return user_addresses;\n }\n\n private processTransactions(\n records: EsolveTransactionRecord[],\n ): EsolveTransaction[] {\n const transactions: EsolveTransaction[] = [];\n\n if (records) {\n for (const record of records) {\n const transaction = new EsolveTransaction(record);\n\n transactions.push(transaction);\n }\n }\n\n return transactions;\n }\n\n private processClientBalances(\n records: EsolveUserClientAccountBalancesRecord[],\n ): EsolveUserClientAccountBalances | undefined {\n for (const record of records) {\n if (+record.clients_id <= 0) {\n return undefined;\n }\n\n const cart_totals = new EsolveCartTotals(\n record.cart_totals.records,\n +record.cart_totals.items,\n +record.cart_totals.total,\n +record.cart_totals.vat,\n +record.cart_totals.discount,\n +record.cart_totals.vouchers,\n +record.cart_totals.allowance,\n );\n\n return new EsolveUserClientAccountBalances(\n +record.clients_id,\n record.account,\n cart_totals,\n +record.credit_limit,\n +record.external_account_balance,\n +record.external_available_balance,\n +record.new_external_available_balance,\n !!+record.credit_limit_okay,\n );\n }\n\n return undefined;\n }\n\n private loginGuard(): void {\n if (this.user_id <= 0) {\n this.errorHandler.throwError('login_required', 'Login is required');\n }\n }\n\n private updateUserLocation(\n body: EsolveLocationOption,\n ): Observable<EsolveLocationUpdateResult> {\n return this.http\n .post<EsolveSetResponse>(\n `${this.config.api_url}/set-session-location.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n if (typeof response.esolve_id === 'string') {\n throw new Error('Invalid response id.');\n }\n\n this.sessionService.handleUpdateSession({\n location_id: +response.esolve_id,\n });\n\n return new EsolveLocationUpdateResult(response);\n },\n ),\n ),\n );\n }\n}\n","import { EsolveBannerLink, EsolveBannerImageSet } from '../interfaces';\nimport { EsolveBannerType } from '../types';\n\nimport { EsolveBannerImage } from './esolve-banner-image.model';\n\nexport class EsolveBanner {\n public desktop_images: EsolveBannerImage[] = [];\n public mobile_images: EsolveBannerImage[] = [];\n public sub_images: EsolveBannerImage[] = [];\n\n constructor(\n public id: number,\n public banner_display_container: string,\n public identifier: string,\n public type: EsolveBannerType,\n public title: string,\n public sub_title: string,\n public catch_phrase: string,\n public background_colour: string,\n public button_caption: string,\n public article: string,\n public sort_priority: number,\n public link: EsolveBannerLink,\n images: EsolveBannerImageSet,\n ) {\n if (images.desktop) {\n this.desktop_images = images.desktop;\n }\n\n if (images.mobile) {\n this.mobile_images = images.mobile;\n }\n\n if (images.sub) {\n this.sub_images = images.sub;\n }\n }\n}\n","import { EsolveBannerImageType } from '../types';\n\nimport { EsolveBannerImageHotspot } from './esolve-banner-image-hotspot.model';\n\nexport class EsolveBannerImage {\n constructor(\n public id: number,\n public image_type: EsolveBannerImageType,\n public width: number,\n public height: number,\n public filename: string,\n public hotspots?: EsolveBannerImageHotspot[],\n ) {}\n\n public get src(): string {\n return '/images/banners/' + this.filename;\n }\n}\n","import { EsolveUrlTarget } from '../../shared/esolve-url-target.type';\n\nimport { EsolveBannerImageHotspotCoords } from '../interfaces';\n\nexport class EsolveBannerImageHotspot {\n constructor(\n public url: string,\n public target: EsolveUrlTarget,\n public coords: EsolveBannerImageHotspotCoords[],\n public coords_string: string,\n ) {}\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport {\n EsolveBanner,\n EsolveBannerImageHotspot,\n EsolveBannerImage,\n} from './classes';\nimport {\n EsolveBannerRecord,\n EsolveBannerImageHotspotRecord,\n EsolveBannerImageRecord,\n EsolveBannerImageSet,\n} from './interfaces';\nimport { EsolveBannerType } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveBannerService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n /**\n * Retrieves banners records from eSolve instance\n *\n * @returns An observable of eSolve banners.\n */\n public getBanners(\n identifier?: string,\n banner_display_container?: string,\n enable_date_filter = false,\n ): Observable<EsolveBanner[]> {\n let params = new HttpParams({\n fromObject: { enable_date_filter },\n });\n\n if (identifier) {\n params = params.set('identifier', identifier);\n }\n\n if (banner_display_container) {\n params = params.set(\n 'banner_display_container',\n banner_display_container,\n );\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveBannerRecord[]>>(\n `${this.config.api_url}/get-banners.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processBanners(response.records);\n }),\n );\n }\n\n private processBannerImageHotspots(\n hotspot_records: EsolveBannerImageHotspotRecord[],\n ): EsolveBannerImageHotspot[] {\n const hotspots: EsolveBannerImageHotspot[] = [];\n\n if (hotspot_records.length > 0) {\n for (const hotspot_record of hotspot_records) {\n const hotspot = new EsolveBannerImageHotspot(\n hotspot_record.url,\n hotspot_record.target,\n hotspot_record.coords,\n hotspot_record.coords_string,\n );\n\n hotspots.push(hotspot);\n }\n }\n\n return hotspots;\n }\n\n private processBannerImages(\n image_records: EsolveBannerImageRecord[],\n banner_type: EsolveBannerType,\n ): EsolveBannerImage[] {\n const images: EsolveBannerImage[] = [];\n\n if (image_records.length > 0) {\n for (const image_record of image_records) {\n const image = new EsolveBannerImage(\n +image_record.id,\n image_record.image_type,\n +image_record.width,\n +image_record.height,\n image_record.filename,\n );\n\n if (banner_type === 'hotspot' && image_record.hotspots) {\n const hotspots = this.processBannerImageHotspots(\n image_record.hotspots,\n );\n image.hotspots = hotspots;\n }\n\n images.push(image);\n }\n }\n\n return images;\n }\n\n /**\n * Process banner records into banner objects\n * @param records Array of records\n * @returns List of banners\n */\n private processBanners(records: EsolveBannerRecord[]): EsolveBanner[] {\n const banners: EsolveBanner[] = [];\n\n if (records && records.length > 0) {\n for (const record of records) {\n const image_sets: EsolveBannerImageSet = {};\n\n if (record.images.desktop) {\n image_sets.desktop = this.processBannerImages(\n record.images.desktop,\n record.type,\n );\n }\n\n if (record.images.mobile) {\n image_sets.mobile = this.processBannerImages(\n record.images.mobile,\n record.type,\n );\n }\n\n if (record.images.sub) {\n image_sets.sub = this.processBannerImages(\n record.images.sub,\n record.type,\n );\n }\n\n const banner = new EsolveBanner(\n +record.id,\n record.banner_display_container,\n record.identifier,\n record.type,\n record.title,\n record.sub_title,\n record.catch_phrase,\n record.background_colour,\n record.button_caption,\n record.article,\n +record.sort_priority,\n {\n url: record.link.url,\n target: record.link.target,\n },\n image_sets,\n );\n\n banners.push(banner);\n }\n }\n\n return banners;\n }\n}\n","import { EsolveUrlTarget } from '../../shared/esolve-url-target.type';\n\nimport { EsolveMenuTreeRecord } from '../interfaces';\n\nexport class EsolveMenuItem {\n public id = 0;\n public selected_id = '';\n public url = '';\n public name = '';\n public module = '';\n public sort_priority = 0;\n public target: EsolveUrlTarget = '_self';\n public children: EsolveMenuItem[] = [];\n\n constructor(record?: Partial<EsolveMenuTreeRecord>) {\n if (record) {\n this.id = +(record.id ?? 0);\n this.selected_id = record.selected_id ?? '';\n this.url = record.sef_url ?? '';\n this.name = record.name ?? '';\n this.module = record.module ?? '';\n this.sort_priority = +(record.sort_priority ?? 0);\n\n if (\n record.target &&\n (record.target === '_self' || record.target === '_blank')\n ) {\n this.target = record.target;\n }\n\n if (\n typeof record.children !== 'undefined' &&\n Array.isArray(record.children)\n ) {\n for (const child of record.children) {\n this.children.push(new EsolveMenuItem(child));\n }\n }\n }\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport { EsolveMenuItem } from './classes';\nimport { EsolveMenuTreeRecord } from './interfaces';\nimport { EsolveMenu } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveMenuService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n public getMenuTree(identifier: string): Observable<EsolveMenu> {\n return this.http\n .get<EsolveGetResponse<EsolveMenuTreeRecord[]>>(\n `${this.config.api_url}/get-menu-tree.php`,\n { params: { identifier } },\n )\n .pipe(\n map((response) => {\n if (!response || response.records === undefined) {\n throw response;\n } else if (response.records.length === 0) {\n return [];\n }\n\n return this.handleMenu(response.records);\n }),\n );\n }\n\n private handleMenu(records?: EsolveMenuTreeRecord[]): EsolveMenu {\n const menu: EsolveMenu = [];\n\n if (typeof records !== 'undefined') {\n for (const record of records) {\n menu.push(new EsolveMenuItem(record));\n }\n }\n\n return menu;\n }\n}\n","export class EsolveNewsArticleAuthor {\n constructor(\n public userid: number,\n public email: string,\n public firstname: string,\n public surname: string,\n ) {}\n}\n","import { EsolveNewsArticle } from './esolve-news-article.model';\n\nexport class EsolveNewsArticleList {\n constructor(\n public newsArticles: EsolveNewsArticle[],\n public total: number,\n public page: number,\n ) {}\n}\n","import { EsolveNewsGroupRecord } from '../interfaces';\n\nexport class EsolveNewsGroup {\n public id = 0;\n public name = '';\n public description = '';\n public sef_name = '';\n private image?: string;\n\n public get image_src(): string {\n return this.getImagePath();\n }\n\n constructor(record: EsolveNewsGroupRecord) {\n this.id = +record.id;\n this.name = record.name;\n this.description = record.description;\n this.sef_name = record.sef_name;\n\n if (record.image && record.image !== '') {\n this.image = record.image;\n }\n }\n\n public getImagePath(): string {\n if (!this.image) {\n return '';\n }\n\n return `/images/assets/${this.image}`;\n }\n}\n","import { EsolveSeoDetails, EsolveSeoInfo } from '../../seo';\n\nimport { EsolveTag } from '../../tags';\nimport { EsolveTopic } from '../../topics';\nimport { EsolveManufacturer } from '../../manufacturers';\nimport { EsolveRange } from '../../ranges';\n\nimport { EsolveNewsArticleRecord } from '../interfaces';\n\nimport { EsolveNewsGroup } from './esolve-news-group.model';\nimport { EsolveNewsArticleAuthor } from './esolve-news-article-author.model';\n\nexport class EsolveNewsArticle implements EsolveSeoDetails {\n public id = 0;\n public title = '';\n public sef_title = '';\n public article = '';\n public short_description = '';\n public txdate = '';\n public active = false;\n public image = '';\n public featured = false;\n public topics: EsolveTopic[] = [];\n public tags: EsolveTag[] = [];\n public author?: EsolveNewsArticleAuthor;\n public group?: EsolveNewsGroup;\n public manufacturer?: EsolveManufacturer;\n public range?: EsolveRange;\n public seo_details: EsolveSeoInfo;\n\n constructor(record?: Partial<EsolveNewsArticleRecord>) {\n let seo_title = '';\n let seo_description = '';\n let seo_keywords = '';\n\n if (record) {\n this.id = +(record.id ?? 0);\n this.title = record.title ?? '';\n this.sef_title = record.sef_title ?? '';\n this.article = record.article ?? '';\n this.txdate = record.txdate ?? '';\n this.image = record.image ?? '';\n this.short_description = record.short_description ?? '';\n\n if (record.active) {\n this.active = !!+record.active;\n }\n\n if (record.featured) {\n this.featured = !!+record.featured;\n }\n\n seo_title = record.seo_page_title ?? '';\n seo_description = record.short_description ?? '';\n seo_keywords = record.seo_keywords ?? '';\n\n if (record.news_group) {\n const group_record = record.news_group;\n\n this.group = new EsolveNewsGroup(group_record);\n }\n\n if (record.user) {\n this.author = new EsolveNewsArticleAuthor(\n record.user.userid,\n record.user.email,\n record.user.firstname,\n record.user.surname,\n );\n }\n\n if (record.manufacturer) {\n this.manufacturer = new EsolveManufacturer(record.manufacturer);\n }\n\n if (record.range) {\n this.range = new EsolveRange(record.range);\n }\n\n if (record.topics && record.topics.length > 0) {\n const topics = record.topics;\n\n for (const topic of topics) {\n this.topics.push(new EsolveTopic(topic));\n }\n }\n\n if (record.tags && record.tags.length > 0) {\n const tags = record.tags;\n\n for (const tag of tags) {\n this.tags.push(new EsolveTag(tag));\n }\n }\n }\n\n if (seo_title.trim() === '') {\n seo_title = this.title;\n }\n\n this.seo_details = new EsolveSeoInfo(\n seo_title,\n seo_description,\n seo_keywords,\n );\n }\n}\n","import { EsolveResponseResult } from '../../shared/response';\n\nimport { EsolveNewsletterResponse } from '../types';\n\nexport class EsolveNewsletterResult extends EsolveResponseResult {\n public id = 0;\n\n constructor(response: EsolveNewsletterResponse) {\n super(response);\n\n this.id = +response.esolve_id;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport {\n HttpClient,\n HttpErrorResponse,\n HttpParams,\n} from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport {\n EsolveGetResponse,\n EsolveResponseHandlerService,\n EsolveSetResponse,\n} from '../shared/response';\nimport { EsolveErrorHandlerService } from '../shared/errors';\n\nimport {\n EsolveNewsArticle,\n EsolveNewsArticleList,\n EsolveNewsGroup,\n EsolveNewsletterResult,\n} from './classes';\n\nimport {\n EsolveNewsArticleOptions,\n EsolveNewsGroupRecord,\n EsolveNewsArticleRecord,\n} from './interfaces';\n\nimport { EsolveNewsletterResponse } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveNewsService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n public getNewsArticle(identifier: string): Observable<EsolveNewsArticle> {\n const params = new HttpParams({\n fromObject: { sef_title: identifier },\n });\n\n return this.getNewsRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const record = response.records[0];\n\n if (!record.active) {\n throw response;\n }\n\n return this.processNewsArticle(record);\n }),\n );\n }\n\n public getNewsArticles(\n options?: EsolveNewsArticleOptions,\n ): Observable<EsolveNewsArticleList> {\n const params = this.parseOptions(options);\n\n return this.getNewsRecords(params).pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const news_articles: EsolveNewsArticle[] = [];\n\n for (const record of response.records) {\n news_articles.push(this.processNewsArticle(record));\n }\n\n const page = options?.page ?? 0;\n const total_records = +response.additional_data.total_records;\n\n return new EsolveNewsArticleList(\n news_articles,\n total_records,\n page,\n );\n }),\n );\n }\n\n public getNewsGroups(enable_images = false): Observable<EsolveNewsGroup[]> {\n return this.http\n .get<EsolveGetResponse<EsolveNewsGroupRecord[]>>(\n `${this.config.api_url}/get-news-groups.php`,\n {\n params: {\n enable_images,\n },\n },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const news_groups: EsolveNewsGroup[] = [];\n\n for (const record of response.records) {\n news_groups.push(new EsolveNewsGroup(record));\n }\n\n return news_groups;\n }),\n );\n }\n\n private processNewsArticle(\n record: EsolveNewsArticleRecord,\n ): EsolveNewsArticle {\n return new EsolveNewsArticle(record);\n }\n\n private getNewsRecords(\n params: HttpParams,\n ): Observable<EsolveGetResponse<EsolveNewsArticleRecord[]>> {\n return this.http.get<EsolveGetResponse<EsolveNewsArticleRecord[]>>(\n `${this.config.api_url}/get-news.php`,\n { params },\n );\n }\n\n private parseOptions(options?: EsolveNewsArticleOptions): HttpParams {\n let params = new HttpParams();\n\n if (!options) {\n return params;\n }\n\n if (options.news_group_id) {\n params = params.set('news_group_id', options.news_group_id);\n } else if (options.news_group_sef) {\n params = params.set('news_group_sef', options.news_group_sef);\n }\n\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.feature_only) {\n params = params.set('feature_only', options.feature_only);\n }\n\n if (options.manufacturers_id) {\n params = params.set('manufacturers_id', options.manufacturers_id);\n }\n\n if (options.ranges_id) {\n params = params.set('ranges_id', options.ranges_id);\n }\n\n if (options.from_date) {\n params = params.set('from_date', options.from_date);\n }\n\n if (options.to_date) {\n params = params.set('to_date', options.to_date);\n }\n\n if (options.search_phrase) {\n params = params.set('search_phrase', options.search_phrase);\n }\n\n return params;\n }\n\n public subscribeToNewsletter(\n form_data: FormData,\n ): Observable<EsolveNewsletterResult> {\n if (!form_data.has('email')) {\n return this.errorHandler.emitError(\n 'email_required',\n 'Email is required',\n );\n }\n\n return this.http\n .post<EsolveSetResponse<EsolveNewsletterResponse>>(\n `${this.config.api_url}/set-newsletter.php`,\n form_data,\n {\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveNewsletterResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-newsletter',\n errorRes,\n );\n }),\n );\n }\n}\n","// Types\nexport * from './esolve-stock-image-size.type';\nexport * from './esolve-media-stock-item-list.type';\nexport * from './esolve-stock-unit-of-measure.type';\nexport * from './esolve-stock-sort-field.type';\nexport * from './esolve-media-stock-sort-field.type';\nexport * from './esolve-stock-group-item-record.type';\nexport * from './esolve-media-stock-item-record.type';\n","import { EsolveColourRecord } from '../interfaces';\n\nexport class EsolveColour {\n public id: number;\n public colour: string;\n public description: string;\n\n constructor(record: Partial<EsolveColourRecord>) {\n this.id = record.id ?? 0;\n this.colour = record.colour ?? '';\n this.description = record.description ?? '';\n }\n}\n","export class EsolveStockBadge {\n constructor(\n public id: number,\n public text: string,\n public identifier: string,\n public font_colour: string,\n public badge_colour: string,\n public sort_priority: number,\n ) {}\n}\n","/**\n * Price of eSolve stock item\n */\nexport class EsolveStockPrice {\n public taxed: boolean;\n\n /**\n * Create stock price instance\n *\n * @param base_price Price without tax\n * @param base_price_with_tax Price with tax\n * @param sell_price Price without tax and with discounts applied if applicable\n * @param sell_price_with_tax Price with tax and with discounts applied if applicable\n * @param tax_rate Tax rate of the item\n * @param taxed Whether tax has been applied\n */\n constructor(\n /**\n * Price without tax\n */\n public base_price: number = 0,\n\n /**\n * Price with tax\n */\n public base_price_with_tax: number = 0,\n\n /**\n * Price without tax and with discounts applied if applicable\n */\n public sell_price: number = 0,\n\n /**\n * Price with tax and with discounts applied if applicable\n */\n public sell_price_with_tax: number = 0,\n\n /**\n * Vat Rate for the item\n */\n public tax_rate: number = 0,\n\n taxed?: boolean,\n ) {\n if (this.base_price === 0 && this.sell_price > 0) {\n this.base_price = this.sell_price;\n this.base_price_with_tax = this.sell_price_with_tax;\n } else if (this.base_price > 0 && this.sell_price === 0) {\n this.sell_price = this.base_price;\n this.sell_price_with_tax = this.base_price_with_tax;\n }\n\n this.taxed = taxed ?? this.base_price !== this.base_price_with_tax;\n }\n}\n","import { EsolveStockLeadTimesRecord } from '../interfaces';\n\nexport class EsolveStockLeadTimes {\n public min = 0;\n public max = 0;\n\n constructor(lead_times: EsolveStockLeadTimesRecord) {\n this.min = lead_times.min;\n this.max = lead_times.max;\n }\n}\n","export class EsolveStockTransactionHistory {\n constructor(\n public total_order_qty: number = 0,\n public total_quote_qty: number = 0,\n ) {}\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\nimport { EsolveSeoDetails, EsolveSeoInfo } from '../../seo';\n\nimport { EsolveCategoryTreeItem } from '../../category-tree';\nimport { EsolveManufacturer } from '../../manufacturers';\nimport { EsolveRange } from '../../ranges';\nimport { EsolveTag } from '../../tags';\nimport { EsolveTopic } from '../../topics';\n\nimport { EsolveStockImageSize, EsolveStockUnitOfMeasure } from '../types';\nimport { EsolveStockBaseRecord } from '../interfaces';\nimport { EsolveStockBadge } from './esolve-stock-badge.model';\nimport { EsolveStockPrice } from './esolve-stock-price.model';\nimport { EsolveColour } from './esolve-colour.model';\nimport { EsolveStockLeadTimes } from './esolve-stock-lead-times.model';\nimport { EsolveStockTransactionHistory } from './esolve-stock-transaction-history.model';\n\nexport class EsolveStockItemBase<\n T extends EsolveCustomFields = EsolveCustomFields,\n> implements EsolveSeoDetails\n{\n /**\n * eSolve Generated ID\n */\n public id = 0;\n /**\n * Code identifying the stock item\n */\n public code = '';\n /**\n * Code used by supplier\n */\n public supplier_code = '';\n /**\n * The barcode of the item\n */\n public barcode = '';\n /**\n * Name of the stock item\n */\n public name = '';\n /**\n * Search engine friendly name\n */\n public sef_name = '';\n /**\n * Search composite field made up of key phrases\n */\n public search_composite = '';\n /**\n * Type field. General high grouping\n */\n public type = '';\n /**\n * Sub type field. General high grouping\n */\n public sub_type = '';\n /**\n * Short description of stock item\n */\n public description = '';\n /**\n * Full description of stock item\n */\n public extended_description = '';\n /**\n * Active state\n */\n public active = false;\n /**\n * Featured state\n */\n public featured = false;\n /**\n * Display Only state\n */\n public display_only = false;\n /**\n * Quotable state\n */\n public allow_quotes = true;\n /**\n * Orderable state\n */\n public allow_orders = true;\n /**\n * Item must be collected, not delivery possible\n */\n public must_collect = false;\n /**\n * Item needs to be assembled after purchase\n */\n public requires_assembly = false;\n /**\n * The type of delivery category associated with the item\n */\n public delivery_category = 'regular_item';\n /**\n * Custom stock label added on to item to display for user\n */\n public custom_label = '';\n /**\n * Number of stock available\n */\n public amount_in_stock = 0;\n /**\n * Number of stock available\n */\n public limit_per_transaction = 0;\n /**\n * Total items linked to the item as a recipe\n */\n public total_recipe_items = 0;\n /**\n * Height measured in meters (m)\n */\n public height = 0;\n /**\n * Width measured in meters (m)\n */\n public width = 0;\n /**\n * Length / depth measured in meters (m)\n */\n public length = 0;\n /**\n * Weight measured in kilograms (kg)\n */\n public weight = 0;\n /**\n * Number of items in a pack\n */\n public pack_size = 0;\n /**\n * Description of the pack\n */\n public pack_description = '';\n /**\n * Units used to measure the quantity\n */\n public unit_of_measure: EsolveStockUnitOfMeasure = 'unit';\n /**\n * ID of default category linked to the stock item\n *\n * @deprecated Use `category.esolve_id` field instead\n */\n public category_id = '';\n /**\n * Default linked category\n */\n public category?: EsolveCategoryTreeItem;\n /**\n * ID of default subcategory linked to the stock item\n *\n * @deprecated Use `subcategory.esolve_id` field instead\n */\n public subcategory_id = 0;\n /**\n * Default linked subcategory\n */\n public subcategory?: EsolveCategoryTreeItem;\n /**\n * ID of linked manufacturer\n *\n * @deprecated Use `manufacturer.id` field instead\n */\n public manufacturers_id = 0;\n /**\n * Linked manufacturer\n */\n public manufacturer?: EsolveManufacturer;\n /**\n * ID of linked range\n *\n * @deprecated Use `range.id` field instead\n */\n public ranges_id = 0;\n /**\n * Linked range\n */\n public range?: EsolveRange;\n /**\n * Default price\n */\n public price: EsolveStockPrice;\n /**\n * SEO page details\n */\n public seo_details: EsolveSeoInfo;\n /**\n * Linked tags\n */\n public tags: EsolveTag[] = [];\n /**\n * Linked topics\n */\n public topics: EsolveTopic[] = [];\n /**\n * Stock badges\n */\n public badges: EsolveStockBadge[] = [];\n /**\n * Stock item custom fields.\n */\n public custom_fields?: T;\n /**\n * Colours\n */\n public colours: EsolveColour[] = [];\n /** Sizes */\n public sizes: string[] = [];\n /**\n * Stock Item Lead Times for supply\n */\n public lead_times?: EsolveStockLeadTimes;\n /**\n * Transaction history\n */\n public history?: EsolveStockTransactionHistory;\n\n /**\n * Image filename\n */\n private image_name = '';\n\n /**\n * Image Last modified\n */\n private image_last_modified = '';\n\n /**\n * Path to tiny stock image\n */\n public get tiny_image_src(): string {\n return this.getImagePath('tiny');\n }\n\n /**\n * Path to thumbnail stock image\n */\n public get thumbnail_image_src(): string {\n return this.getImagePath('thumb');\n }\n\n /**\n * Path to small stock image\n */\n public get small_image_src(): string {\n return this.getImagePath('small');\n }\n\n /**\n * Path to big stock image\n */\n public get big_image_src(): string {\n return this.getImagePath('big');\n }\n\n /**\n * Path to original stock image\n */\n public get original_image_src(): string {\n return this.getImagePath('original');\n }\n\n public get available(): boolean {\n return this.amount_in_stock > 0;\n }\n\n constructor(record: Partial<EsolveStockBaseRecord<T>> = {}) {\n let seo_title = '';\n let seo_keywords = '';\n let base_price = 0;\n let base_price_with_tax = 0;\n let sell_price = 0;\n let sell_price_with_tax = 0;\n\n if (record) {\n this.id = +(record.id ?? 0);\n this.code = record.code ?? '';\n this.supplier_code = record.supplier_code ?? '';\n this.barcode = record.barcode ?? '';\n this.name = record.name ?? '';\n this.sef_name = record.sef_name ?? '';\n this.search_composite = record.search_composite ?? '';\n this.type = record.type ?? '';\n this.sub_type = record.sub_type ?? '';\n this.description = record.description ?? '';\n this.extended_description = record.extended_description ?? '';\n this.image_name = record.image_name ?? '';\n this.image_last_modified = record.image_last_modified ?? '';\n\n this.category_id = record.category_id ?? '';\n this.subcategory_id = +(record.subcategory_id ?? 0);\n this.manufacturers_id = +(record.manufacturers_id ?? 0);\n this.ranges_id = +(record.ranges_id ?? 0);\n this.delivery_category = record.delivery_category ?? 'regular_item';\n this.custom_label = record.custom_label ?? '';\n\n this.must_collect = !!+(record.must_collect ?? false);\n this.requires_assembly = !!+(record.requires_assembly ?? false);\n this.active = !!+(record.is_active ?? false);\n this.featured = !!+(record.is_featured ?? false);\n this.display_only = !!+(record.display_only ?? false);\n this.allow_quotes = record.allow_quotes ?? true;\n this.allow_orders = record.allow_orders ?? true;\n\n this.amount_in_stock = +(record.onhand ?? 0);\n this.limit_per_transaction = +(record.limit_per_transaction ?? 0);\n this.total_recipe_items = +(record.total_recipe_items ?? 0);\n\n this.pack_size = +(record.items_in_pack ?? 0);\n this.pack_description = record.pack_description ?? '';\n\n this.height = +(record.height ?? 0);\n this.width = +(record.width ?? 0);\n this.length = +(record.length ?? 0);\n this.weight = +(record.weight ?? 0);\n\n if (record.unit_of_measure) {\n this.unit_of_measure = record.unit_of_measure;\n }\n\n base_price = +(record.regular_sellprice ?? 0);\n base_price_with_tax = +(record.regular_sellprice_inclusive ?? 0);\n sell_price = +(record.sellprice ?? 0);\n sell_price_with_tax = +(record.sellprice_inclusive ?? 0);\n\n if (record.tags && record.tags.length > 0) {\n for (const tag of record.tags) {\n this.tags.push(new EsolveTag(tag));\n }\n }\n\n if (record.topics && record.topics.length > 0) {\n for (const topic of record.topics) {\n this.topics.push(new EsolveTopic(topic));\n }\n }\n\n if (record.badges && record.badges.length > 0) {\n for (const badge of record.badges) {\n this.badges.push(\n new EsolveStockBadge(\n +badge.id,\n badge.text,\n badge.identifier,\n badge.font_colour,\n badge.badge_colour,\n +badge.sort_priority,\n ),\n );\n }\n }\n\n if (record.category) {\n this.category = new EsolveCategoryTreeItem(\n record.category.type,\n record.category.id,\n record.category.parent_id,\n record.category.description,\n record.category.sef_description,\n record.category.short_description,\n record.category.sort_priority,\n record.category.active,\n record.category.display_only,\n record.category.image,\n record.category.seo_page_title,\n record.category.seo_keywords,\n record.category.seo_description,\n );\n }\n\n if (record.subcategory) {\n this.subcategory = new EsolveCategoryTreeItem(\n record.subcategory.type,\n record.subcategory.id,\n record.subcategory.parent_id,\n record.subcategory.description,\n record.subcategory.sef_description,\n record.subcategory.short_description,\n record.subcategory.sort_priority,\n record.subcategory.active,\n record.subcategory.display_only,\n record.subcategory.image,\n record.subcategory.seo_page_title,\n record.subcategory.seo_keywords,\n record.subcategory.seo_description,\n );\n }\n\n if (record.manufacturer) {\n this.manufacturer = new EsolveManufacturer(record.manufacturer);\n }\n\n if (record.range) {\n this.range = new EsolveRange(record.range);\n }\n\n if (record.colours && record.colours.length > 0) {\n for (const colour of record.colours) {\n this.colours.push(new EsolveColour(colour));\n }\n }\n\n if (record.sizes && record.sizes.length > 0) {\n for (const size of record.sizes) {\n this.sizes.push(size);\n }\n }\n\n if (record.lead_times) {\n this.lead_times = new EsolveStockLeadTimes(record.lead_times);\n }\n\n if (record.custom_fields) {\n this.custom_fields = record.custom_fields;\n }\n\n if (record.total_order_qty || record.total_quote_qty) {\n const total_order_qty = +(record.total_order_qty ?? 0);\n const total_quote_qty = +(record.total_quote_qty ?? 0);\n this.history = new EsolveStockTransactionHistory(\n total_order_qty,\n total_quote_qty,\n );\n }\n\n seo_title = record.seo_page_title ?? '';\n seo_keywords = record.seo_keywords ?? '';\n }\n\n this.price = new EsolveStockPrice(\n base_price,\n base_price_with_tax,\n sell_price,\n sell_price_with_tax,\n record.vat_rate,\n record.vat_item,\n );\n\n if (seo_title.trim() === '') {\n seo_title = this.name;\n }\n\n this.seo_details = new EsolveSeoInfo(\n seo_title,\n this.description,\n seo_keywords,\n );\n }\n\n public getImagePath(image_size: EsolveStockImageSize): string {\n if (this.image_name !== '') {\n let param = '';\n\n if (this.image_last_modified !== '') {\n param = `?t=${this.image_last_modified}`;\n }\n\n return `/images/stock/${image_size}/${this.image_name}${param}`;\n }\n\n return '';\n }\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\n\nimport { EsolveDependantItemRecord } from '../interfaces';\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\n\nexport class EsolveDependantItem<\n T extends EsolveCustomFields = EsolveCustomFields,\n> extends EsolveStockItemBase<T> {\n public qty = 0;\n public dependency_description = '';\n\n constructor(record?: Partial<EsolveDependantItemRecord<T>>) {\n super(record);\n\n this.qty = +(record?.qty ?? 0);\n this.dependency_description = record?.dependency_description ?? '';\n }\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\nimport { EsolveStockGroupItemRecord } from '../types';\n\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\n\nexport class EsolveStockGroupItem<\n T extends EsolveCustomFields = EsolveCustomFields,\n> extends EsolveStockItemBase<T> {\n constructor(record?: Partial<EsolveStockGroupItemRecord<T>>) {\n super(record);\n }\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\nimport { EsolveStockGroupItemRecord } from '../types';\n\nimport { EsolveStockGroupItem } from './esolve-stock-group-item.model';\n\nexport class EsolveStockGroup<\n T extends EsolveCustomFields = EsolveCustomFields,\n> {\n public items: EsolveStockGroupItem<T>[] = [];\n\n constructor(\n public group: string,\n records: EsolveStockGroupItemRecord<T>[] = [],\n ) {\n if (records.length > 0) {\n for (const record of records) {\n this.items.push(new EsolveStockGroupItem(record));\n }\n }\n }\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\n\nimport { EsolveStockRecord } from '../interfaces';\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\nimport { EsolveDependantItem } from './esolve-dependant-item.model';\nimport { EsolveStockGroup } from './esolve-stock-group.model';\n\n/**\n * Stock Item object. It can be a service or a product (physical and/or digital).\n */\nexport class EsolveStockItem<\n T extends EsolveCustomFields = EsolveCustomFields,\n> extends EsolveStockItemBase<T> {\n public group?: EsolveStockGroup<T>;\n public dependencies?: EsolveDependantItem<T>[];\n\n /**\n * Constructs an instance of EsolveStockItem\n */\n constructor(record?: Partial<EsolveStockRecord<T>>) {\n super(record);\n\n if (record?.group && record.grouped_items) {\n this.group = new EsolveStockGroup(\n record.group,\n record.grouped_items,\n );\n }\n\n if (record?.dependencies) {\n this.dependencies = [];\n\n for (const dependant of record.dependencies) {\n this.dependencies.push(new EsolveDependantItem(dependant));\n }\n }\n }\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\n\nimport { EsolveStockItem } from './esolve-stock-item.model';\n\n/**\n * Stock item object list\n */\nexport class EsolveStockItemList<\n T extends EsolveCustomFields = EsolveCustomFields,\n> {\n constructor(\n public stock_items: EsolveStockItem<T>[],\n public total: number,\n public page: number,\n ) {}\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\n\nimport { EsolveRecipeItemRecord } from '../interfaces';\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\n\nexport class EsolveRecipeStockItem<\n T extends EsolveCustomFields = EsolveCustomFields,\n> extends EsolveStockItemBase<T> {\n public qty = 0;\n\n constructor(record?: Partial<EsolveRecipeItemRecord<T>>) {\n super(record);\n\n this.qty = +(record?.qty ?? 0);\n }\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\n\nimport { EsolveLinkedStockRecord } from '../interfaces';\nimport { EsolveStockItem } from './esolve-stock-item.model';\n\nexport class EsolveLinkedStockItem<\n T extends EsolveCustomFields = EsolveCustomFields,\n> extends EsolveStockItem<T> {\n public qty = 0;\n\n constructor(record?: Partial<EsolveLinkedStockRecord<T>>) {\n super(record);\n\n this.qty = +(record?.qty ?? 0);\n }\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\n\nimport { EsolveMediaStockItemRecord } from '../types';\nimport { EsolveStockItem } from './esolve-stock-item.model';\n\nexport class EsolveMediaStockItem<\n T extends EsolveCustomFields = EsolveCustomFields,\n> extends EsolveStockItem<T> {\n constructor(record?: Partial<EsolveMediaStockItemRecord<T>>) {\n super(record);\n }\n}\n","import { EsolveStockImageSize } from '../types';\n\nexport class EsolveStockImage {\n /**\n * Path to tiny stock image\n */\n public get tiny_src(): string {\n return this.getImagePath('tiny');\n }\n\n /**\n * Path to thumbnail stock image\n */\n public get thumbnail_src(): string {\n return this.getImagePath('thumb');\n }\n\n /**\n * Path to small stock image\n */\n public get small_src(): string {\n return this.getImagePath('small');\n }\n\n /**\n * Path to big stock image\n */\n public get big_src(): string {\n return this.getImagePath('big');\n }\n\n /**\n * Path to original stock image\n */\n public get original_src(): string {\n return this.getImagePath('original');\n }\n\n constructor(\n private image_name: string,\n private last_modified: string = '',\n ) {\n if (this.image_name === 'no_image.jpg') {\n this.image_name = '';\n }\n }\n\n public getImagePath(image_size: EsolveStockImageSize): string {\n if (this.image_name !== '') {\n let param = '';\n\n if (this.last_modified !== '') {\n param = `?t=${this.last_modified}`;\n }\n\n return `/images/stock/${image_size}/${this.image_name}${param}`;\n }\n\n return '';\n }\n}\n","import { EsolveAdditionalStockImageRecord } from '../interfaces';\n\nexport class EsolveAdditionalStockImage {\n public id = 0;\n public type = '';\n public url = '';\n public name = '';\n public etag?: string;\n public key?: string;\n\n constructor(record?: Partial<EsolveAdditionalStockImageRecord>) {\n if (record) {\n this.id = record.id ?? 0;\n this.type = record.type ?? '';\n this.url = record.url ?? '';\n this.name = record.name ?? '';\n\n if (record.etag) {\n this.etag = record.etag;\n }\n\n if (record.key) {\n this.key = record.key;\n }\n }\n }\n}\n","import { EsolveStockImageCollectionRecord } from '../interfaces';\nimport { EsolveAdditionalStockImage } from './esolve-additional-stock-image.model';\nimport { EsolveStockImage } from './esolve-stock-image.model';\n\nexport class EsolveStockImageCollection {\n public default_image: EsolveStockImage;\n public alt_images: EsolveStockImage[] = [];\n public additional_images: EsolveAdditionalStockImage[] = [];\n\n constructor(record?: Partial<EsolveStockImageCollectionRecord>) {\n this.default_image = new EsolveStockImage(\n record?.default_image ?? '',\n record?.default_image_last_modified ?? '',\n );\n\n if (!record) {\n return;\n }\n\n if (record.alt_images && record.alt_images.length > 0) {\n for (const alt_image_name of record.alt_images) {\n const alt_image = new EsolveStockImage(alt_image_name);\n\n this.alt_images.push(alt_image);\n }\n }\n\n if (record.additional_images && record.additional_images.length > 0) {\n for (const additional_image_record of record.additional_images) {\n const additional_image = new EsolveAdditionalStockImage(\n additional_image_record,\n );\n\n this.additional_images.push(additional_image);\n }\n }\n }\n}\n","import {\n EsolvePostResponseItem,\n EsolveResponseResult,\n} from '../../shared/response';\n\nexport class EsolveSetNotifyResult extends EsolveResponseResult {\n public id = 0;\n\n constructor(response: EsolvePostResponseItem) {\n super(response);\n\n this.id = +response.esolve_id;\n }\n}\n","// Classes\nexport * from './esolve-colour.model';\nexport * from './esolve-stock-item.model';\nexport * from './esolve-stock-price.model';\nexport * from './esolve-stock-badge.model';\nexport * from './esolve-stock-group.model';\nexport * from './esolve-stock-item-base.model';\nexport * from './esolve-stock-item-list.model';\nexport * from './esolve-stock-group-item.model';\nexport * from './esolve-recipe-stock-item.model';\nexport * from './esolve-linked-stock-item.model';\nexport * from './esolve-dependant-item.model';\nexport * from './esolve-stock-lead-times.model';\nexport * from './esolve-media-stock-item.model';\nexport * from './esolve-stock-image.model';\nexport * from './esolve-stock-image-collection.model';\nexport * from './esolve-additional-stock-image.model';\nexport * from './esolve-set-notify-result.model';\n","// Interfaces\nexport * from './esolve-stock-record.interface';\nexport * from './esolve-colour-record.interface';\nexport * from './esolve-stock-base-record.interface';\nexport * from './esolve-stock-item-options.interface';\nexport * from './esolve-stock-badge-record.interface';\nexport * from './esolve-recipe-item-record.interface';\nexport * from './esolve-stock-filter-options.interface';\nexport * from './esolve-recipe-stock-options.interface';\nexport * from './esolve-linked-stock-record.interface';\nexport * from './esolve-stock-linked-category-record.interface';\nexport * from './esolve-stock-lead-times-record.interface';\nexport * from './esolve-stock-image-collection-record.interface';\nexport * from './esolve-additional-stock-image-record.interface';\nexport * from './esolve-media-stock-item-options.interface';\nexport * from './esolve-dependant-item-record.interface';\n","import { Injectable, inject } from '@angular/core';\nimport {\n HttpClient,\n HttpErrorResponse,\n HttpParams,\n} from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\n\nimport {\n EsolveGetResponse,\n EsolveResponseHandlerService,\n EsolveSetResponse,\n} from '../shared/response';\n\nimport { EsolveErrorHandlerService } from '../shared/errors';\n\nimport { EsolveList } from '../shared/esolve-list.model';\nimport { EsolveCustomFields } from '../shared/custom-fields';\nimport {\n EsolveFilterFactory,\n EsolveFilterList,\n EsolveFilterRecordList,\n EsolveMultipleSelectFilter,\n EsolveRangeFilter,\n EsolveSingleSelectFilter,\n} from '../shared/filters';\n\nimport { EsolveMediaStockItemRecord, EsolveMediaStockItemList } from './types';\nimport {\n EsolveStockRecord,\n EsolveStockItemOptions,\n EsolveRecipeItemRecord,\n EsolveLinkedStockRecord,\n EsolveRecipeStockOptions,\n EsolveMediaStockItemOptions,\n EsolveStockImageCollectionRecord,\n EsolveStockFilterOptions,\n} from './interfaces';\nimport {\n EsolveStockItem,\n EsolveStockItemList,\n EsolveMediaStockItem,\n EsolveRecipeStockItem,\n EsolveLinkedStockItem,\n EsolveStockImageCollection,\n EsolveSetNotifyResult,\n} from './classes';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveStockService<\n T extends EsolveCustomFields = EsolveCustomFields,\n> {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n /**\n * Retrieves the stock record from the eSolve instance using the code.\n *\n * @param code eSolve stock code\n */\n public getStockItem(code: string): Observable<EsolveStockItem<T>> {\n const params = new HttpParams({\n fromObject: {\n code,\n },\n });\n\n return this.getStockRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const stockRecord = response.records[0];\n\n return this.processStockItem(stockRecord);\n }),\n );\n }\n\n /**\n * Retrieves the stock record from the eSolve instance using the SEF name.\n *\n * @param sef_name SEF name of the stock item\n */\n public getStockItemFromSEF(\n sef_name: string,\n ): Observable<EsolveStockItem<T>> {\n const params = new HttpParams({\n fromObject: {\n sef_name,\n },\n });\n\n return this.getStockRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const stockRecord = response.records[0];\n\n return this.processStockItem(stockRecord);\n }),\n );\n }\n\n /**\n * Retrieves list of stock from the eSolve instance using info provided\n *\n * @param options Stock filter options\n */\n public getStockItems(\n options: EsolveStockItemOptions,\n ): Observable<EsolveStockItemList<T>> {\n let params = new HttpParams();\n\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.sort) {\n const sort = options.sort;\n\n if (sort.field) {\n params = params.set('sort', sort.field);\n }\n\n if (sort.order) {\n params = params.set('order', sort.order);\n }\n }\n\n if (options.search_phrase) {\n params = params.set('search_phrase', options.search_phrase);\n }\n\n if (options.display_only) {\n params = params.set('display_only', options.display_only);\n }\n\n if (options.is_active) {\n params = params.set('is_active', options.is_active);\n }\n\n if (options.category_id) {\n params = params.set('category_id', options.category_id);\n }\n\n if (options.subcategory_id) {\n params = params.set('subcategory_id', options.subcategory_id);\n }\n\n if (options.manufacturers_id) {\n params = params.set('manufacturers_id', options.manufacturers_id);\n }\n\n if (options.ranges_id) {\n params = params.set('ranges_id', options.ranges_id);\n }\n\n if (options.specials_id) {\n params = params.set('specials_id', options.specials_id);\n }\n\n if (options.tag_id_list && options.tag_id_list.length > 0) {\n params = params.set('tag_id', options.tag_id_list.join(','));\n }\n\n if (options.topic_id_list && options.topic_id_list.length > 0) {\n params = params.set('topic_id', options.topic_id_list.join(','));\n }\n\n if (options.filters) {\n let filters = options.filters;\n\n if (!Array.isArray(filters)) {\n filters = EsolveFilterFactory.covertFromObj(filters);\n }\n\n params = EsolveFilterFactory.convertToHttpParams(filters, params);\n }\n\n return this.getStockRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const stockItems: EsolveStockItem<T>[] = [];\n\n response.records.forEach((stockRecord) => {\n stockItems.push(this.processStockItem(stockRecord));\n });\n\n return new EsolveStockItemList(\n stockItems,\n +response.additional_data.total_records,\n options.page ?? 0,\n );\n }),\n );\n }\n\n /**\n * Retrieves list of stock from the eSolve instance using info provided\n *\n * @param options Stock filter options\n */\n public getStockItemsTransactionHistory(\n options: EsolveStockItemOptions,\n ): Observable<EsolveStockItemList<T>> {\n let params = new HttpParams();\n\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.sort) {\n const sort = options.sort;\n\n if (sort.field) {\n params = params.set('sort', sort.field);\n }\n\n if (sort.order) {\n params = params.set('order', sort.order);\n }\n }\n\n if (options.search_phrase) {\n params = params.set('search_phrase', options.search_phrase);\n }\n\n if (options.display_only) {\n params = params.set('display_only', options.display_only);\n }\n\n if (options.is_active) {\n params = params.set('is_active', options.is_active);\n }\n\n if (options.category_id) {\n params = params.set('category_id', options.category_id);\n }\n\n if (options.subcategory_id) {\n params = params.set('subcategory_id', options.subcategory_id);\n }\n\n if (options.manufacturers_id) {\n params = params.set('manufacturers_id', options.manufacturers_id);\n }\n\n if (options.ranges_id) {\n params = params.set('ranges_id', options.ranges_id);\n }\n\n if (options.specials_id) {\n params = params.set('specials_id', options.specials_id);\n }\n\n if (options.tag_id_list && options.tag_id_list.length > 0) {\n params = params.set('tag_id', options.tag_id_list.join(','));\n }\n\n if (options.topic_id_list && options.topic_id_list.length > 0) {\n params = params.set('topic_id', options.topic_id_list.join(','));\n }\n\n if (options.filters) {\n let filters = options.filters;\n\n if (!Array.isArray(filters)) {\n filters = EsolveFilterFactory.covertFromObj(filters);\n }\n\n params = EsolveFilterFactory.convertToHttpParams(filters, params);\n }\n\n return this.getStockHistoryRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const stockItems: EsolveStockItem<T>[] = [];\n\n response.records.forEach((stockRecord) => {\n stockItems.push(this.processStockItem(stockRecord));\n });\n\n return new EsolveStockItemList(\n stockItems,\n +response.additional_data.total_records,\n options.page ?? 0,\n );\n }),\n );\n }\n\n /**\n * Retrieve list of stock items linked to a stock item from the eSolve API\n *\n * @param code Stock item code\n */\n public getLinkedItems(\n code: string,\n ): Observable<EsolveLinkedStockItem<T>[]> {\n return this.http\n .get<EsolveGetResponse<EsolveLinkedStockRecord<T>[]>>(\n `${this.config.api_url}/get-linked-items.php`,\n { params: { code } },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n return this.processLinkedItems(response.records);\n }),\n );\n }\n\n /**\n * Retrieve list of stock items on a recipe from the eSolve API\n *\n * @param code Stock item code\n */\n public getRecipeItems(\n code: string,\n options?: EsolveRecipeStockOptions,\n ): Observable<EsolveRecipeStockItem<T>[]> {\n let params = new HttpParams().set('code', code);\n\n if (options) {\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.sort) {\n const sort = options.sort;\n\n if (sort.field) {\n params = params.set('sort', sort.field);\n }\n\n if (sort.order) {\n params = params.set('order', sort.order);\n }\n }\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveRecipeItemRecord<T>[]>>(\n `${this.config.api_url}/get-recipe-items.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n return this.processRecipeItems(response.records);\n }),\n );\n }\n\n /**\n * Retrieve list of stock items linked to a stock item from the eSolve API\n *\n * @param options Filter options\n */\n public getMediaLinkedItems(\n options: EsolveMediaStockItemOptions,\n ): Observable<EsolveMediaStockItemList<T>> {\n let params = new HttpParams({\n fromObject: {\n rows: options.rows ?? 0,\n page: options.page ?? 0,\n ranges_id: options.ranges_id ?? 0,\n manufacturers_id: options.manufacturers_id ?? 0,\n display_only: options.display_only ?? false,\n is_active: options.is_active ?? true,\n },\n });\n\n if (options.sort) {\n const sort = options.sort;\n\n if (sort.field) {\n params = params.set('sort', sort.field);\n }\n\n if (sort.order) {\n params = params.set('order', sort.order);\n }\n }\n\n if (options.media_identifier) {\n params = params.append(\n 'media_identifier',\n options.media_identifier,\n );\n }\n\n if (options.media_id) {\n params = params.append('media_id', options.media_id);\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveMediaStockItemRecord<T>[]>>(\n `${this.config.api_url}/get-media-linked-items.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const items = this.processMediaStockItems(response.records);\n\n return new EsolveList(\n items,\n options.page,\n options.rows,\n +response.additional_data.total_records,\n );\n }),\n );\n }\n\n /**\n * Retrieves the full image collection of a stock item\n *\n * @param code Stock item code\n */\n public getStockImageCollection(\n code: string,\n ): Observable<EsolveStockImageCollection> {\n return this.http\n .get<EsolveGetResponse<EsolveStockImageCollectionRecord>>(\n `${this.config.api_url}/get-item-image-collection.php`,\n { params: { code } },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n const collection = new EsolveStockImageCollection(\n response.records,\n );\n\n return collection;\n }),\n );\n }\n\n public getStockFilters(\n options: EsolveStockFilterOptions,\n ): Observable<EsolveFilterList> {\n const params = new HttpParams({\n fromObject: {\n category_id: options.category_id ?? '',\n subcategory_id: options.subcategory_id ?? 0,\n ranges_id: options.ranges_id ?? 0,\n manufacturers_id: options.manufacturers_id ?? 0,\n specials_id: options.specials_id ?? 0,\n fields: options.fields.join(','),\n },\n });\n\n return this.http\n .get<EsolveGetResponse<EsolveFilterRecordList>>(\n `${this.config.api_url}/get-item-filters.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const filters = [];\n\n for (const record of response.records) {\n let filter = null;\n\n if (record.type === 'range') {\n filter = new EsolveRangeFilter(\n record.field,\n +record.min,\n +record.max,\n );\n } else if (record.type === 'single') {\n filter = new EsolveSingleSelectFilter(\n record.field,\n record.values,\n );\n } else if (record.type === 'multiple') {\n filter = new EsolveMultipleSelectFilter(\n record.field,\n record.values,\n );\n }\n\n if (filter) {\n if (record.label !== '') {\n filter.label = record.label;\n }\n\n filters.push(filter);\n }\n }\n\n return filters;\n }),\n );\n }\n\n /**\n * Processes the eSolve stock item record and converts it to an object.\n *\n * @param record eSolve stock item record\n */\n private processStockItem(record: EsolveStockRecord<T>): EsolveStockItem<T> {\n return new EsolveStockItem<T>(record);\n }\n\n /**\n * Processes the linked eSolve stock item records and converts them to objects.\n *\n * @param records Linked eSolve stock item records\n */\n private processLinkedItems(\n records: EsolveLinkedStockRecord<T>[],\n ): EsolveLinkedStockItem<T>[] {\n const items: EsolveLinkedStockItem<T>[] = [];\n\n if (records.length > 0) {\n for (const record of records) {\n items.push(new EsolveLinkedStockItem<T>(record));\n }\n }\n\n return items;\n }\n\n /**\n * Processes the recipe eSolve stock item records and converts them to objects.\n *\n * @param records Recipe eSolve stock item records\n */\n private processRecipeItems(\n records: EsolveRecipeItemRecord<T>[],\n ): EsolveRecipeStockItem<T>[] {\n const items: EsolveRecipeStockItem<T>[] = [];\n\n if (records.length > 0) {\n for (const record of records) {\n items.push(new EsolveRecipeStockItem<T>(record));\n }\n }\n\n return items;\n }\n\n /**\n * Processes the linked eSolve stock item records and converts them to objects.\n *\n * @param records Linked eSolve stock item records\n */\n private processMediaStockItems(\n records: EsolveMediaStockItemRecord<T>[],\n ): EsolveMediaStockItem<T>[] {\n const items: EsolveMediaStockItem<T>[] = [];\n\n if (records.length > 0) {\n for (const record of records) {\n items.push(new EsolveMediaStockItem<T>(record));\n }\n }\n\n return items;\n }\n\n /**\n * Retrieves stock records from HTTP params.\n * @param params HTTP client parameters\n */\n private getStockRecords(\n params: HttpParams,\n ): Observable<EsolveGetResponse<EsolveStockRecord<T>[]>> {\n return this.http.get<EsolveGetResponse<EsolveStockRecord<T>[]>>(\n `${this.config.api_url}/get-items.php`,\n { params },\n );\n }\n\n /**\n * Retrieves stock transaction history records from HTTP params.\n * @param params HTTP client parameters\n */\n private getStockHistoryRecords(\n params: HttpParams,\n ): Observable<EsolveGetResponse<EsolveStockRecord<T>[]>> {\n return this.http.get<EsolveGetResponse<EsolveStockRecord<T>[]>>(\n `${this.config.api_url}/get-items-transaction-history.php`,\n { params },\n );\n }\n\n public setNotify(\n code: string,\n notification_type = 'InStock',\n ): Observable<EsolveSetNotifyResult> {\n const body = {\n code,\n notification_type,\n };\n\n return this.http\n .post<EsolveSetResponse>(\n `${this.config.api_url}/set-notify.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveSetNotifyResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-notify',\n errorRes,\n );\n }),\n );\n }\n}\n","export class EsolveSpecialDates {\n constructor(\n public start: Date,\n public end: Date,\n ) {}\n}\n","import { EsolveSpecialImageRecord } from '../interfaces';\n\nexport class EsolveSpecialImage {\n public id: number;\n public width: number;\n public height: number;\n public src: string;\n\n constructor(record: EsolveSpecialImageRecord) {\n this.id = +record.id;\n this.width = +record.width;\n this.height = +record.height;\n this.src = record.src;\n }\n}\n","import { EsolveSpecialImage } from './esolve-special-image.model';\n\nimport { EsolveSpecialImageCollectionRecord } from '../interfaces';\n\nexport class EsolveSpecialImageCollection {\n public thumb?: EsolveSpecialImage[];\n public banner?: EsolveSpecialImage[];\n public banner_mobile?: EsolveSpecialImage[];\n\n constructor(\n public image_container: string,\n images: EsolveSpecialImageCollectionRecord,\n ) {\n if (images.thumb && images.thumb.length > 0) {\n this.thumb = [];\n\n for (const image_record of images.thumb) {\n this.thumb.push(new EsolveSpecialImage(image_record));\n }\n }\n\n if (images.banner && images.banner.length > 0) {\n this.banner = [];\n\n for (const image_record of images.banner) {\n this.banner.push(new EsolveSpecialImage(image_record));\n }\n }\n\n if (images.banner_mobile && images.banner_mobile.length > 0) {\n this.banner_mobile = [];\n\n for (const image_record of images.banner_mobile) {\n this.banner_mobile.push(new EsolveSpecialImage(image_record));\n }\n }\n }\n}\n","import { EsolveLinkedAsset } from '../../assets';\nimport { EsolveSeoDetails, EsolveSeoInfo } from '../../seo';\n\nimport { EsolveSpecialRecord } from '../interfaces';\n\nimport { EsolveSpecialDates } from './esolve-special-dates.model';\nimport { EsolveSpecialImageCollection } from './esolve-special-image-collection.model';\n\nexport class EsolveSpecial implements EsolveSeoDetails {\n public id: number;\n public identifier: string;\n public sort_priority: number;\n public name: string;\n public description: string;\n public discount_type: number;\n public special_type: string;\n public location_id: number;\n public active: boolean;\n public featured: boolean;\n public assets: EsolveLinkedAsset[];\n public seo_details: EsolveSeoInfo;\n public images?: EsolveSpecialImageCollection;\n public dates?: EsolveSpecialDates;\n\n constructor(record: EsolveSpecialRecord) {\n this.id = +record.id;\n this.identifier = record.identifier;\n this.sort_priority = +record.sort_priority;\n this.name = record.name;\n this.description = record.description;\n this.discount_type = +record.discount_type;\n this.special_type = record.special_type;\n this.location_id = +record.location_id;\n this.active = !!+record.active;\n this.featured = !!+record.featured;\n this.assets = [];\n\n if (record.assets.length > 0) {\n for (const asset_record of record.assets) {\n this.assets.push(new EsolveLinkedAsset(asset_record));\n }\n }\n\n if (\n record.images &&\n ((record.images.thumb && record.images.thumb.length > 0) ||\n (record.images.banner && record.images.banner.length > 0) ||\n (record.images.banner_mobile &&\n record.images.banner_mobile.length > 0)) &&\n record.image_container.trim() !== ''\n ) {\n this.images = new EsolveSpecialImageCollection(\n record.image_container,\n record.images,\n );\n }\n\n const start_date = new Date(+record.from_date_timestamp * 1000);\n const end_date = new Date(+record.to_date_timestamp * 1000);\n\n this.dates = new EsolveSpecialDates(start_date, end_date);\n\n if (record.seo_page_title.trim() === '') {\n record.seo_page_title = this.name;\n }\n\n this.seo_details = new EsolveSeoInfo(\n record.seo_page_title,\n record.seo_description,\n record.seo_keywords,\n );\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared';\n\nimport { EsolveSpecial } from './classes';\nimport { EsolveSpecialOptions, EsolveSpecialRecord } from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveSpecialsService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n public getSpecial(specials_id: number): Observable<EsolveSpecial> {\n const params = new HttpParams({\n fromObject: { specials_id },\n });\n\n return this.getSpecialSingle(params);\n }\n\n public getSpecialFromIdentifier(\n identifier: string,\n ): Observable<EsolveSpecial> {\n const params = new HttpParams({\n fromObject: { identifier },\n });\n\n return this.getSpecialSingle(params);\n }\n\n public getSpecials(\n options?: EsolveSpecialOptions,\n ): Observable<EsolveSpecial[]> {\n let params = new HttpParams();\n\n if (options?.featured_only) {\n params = params.set('featured_only', options.featured_only);\n }\n\n if (options?.image_container) {\n params = params.set('image_container', options.image_container);\n }\n\n if (options?.location_id) {\n params = params.set('location_id', options.location_id);\n }\n\n if (options?.special_type) {\n params = params.set('special_type', options.special_type);\n }\n\n return this.getSpecialRecords(params).pipe(\n map((records) => {\n const specials: EsolveSpecial[] = [];\n\n for (const record of records) {\n specials.push(this.processSpecial(record));\n }\n\n return specials;\n }),\n catchError(() => {\n return of<EsolveSpecial[]>([]);\n }),\n );\n }\n\n private getSpecialSingle(params: HttpParams): Observable<EsolveSpecial> {\n return this.getSpecialRecords(params).pipe(\n map((records) => {\n const record = records[0];\n\n return this.processSpecial(record);\n }),\n );\n }\n\n private getSpecialRecords(\n params?: HttpParams,\n ): Observable<EsolveSpecialRecord[]> {\n return this.http\n .get<EsolveGetResponse<EsolveSpecialRecord[]>>(\n `${this.config.api_url}/get-specials.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n return response.records;\n }),\n );\n }\n\n private processSpecial(record: EsolveSpecialRecord): EsolveSpecial {\n return new EsolveSpecial(record);\n }\n}\n","export class EsolveBankingDetails {\n constructor(\n public bank_name: string,\n public account_holder: string,\n public account: string,\n public account_type: string,\n public swift_number: string,\n public branch_code: string,\n ) {}\n}\n","import { EsolveIntegrationType } from '../types';\nimport { EsolvePaymentMethodRecord } from '../interfaces';\nimport { EsolveBankingDetails } from './esolve-banking-details.model';\n\nexport class EsolvePaymentMethod {\n public id: number;\n public location_id: number;\n public paymethod_name: string;\n public description: string;\n public display_banking_details: boolean;\n public currency_code: string;\n public merchant_id: string;\n public application_id: string;\n public api_signature: string;\n public is_gateway: boolean;\n public must_store_card_details: boolean;\n public allow_budget: boolean;\n public integration_type: EsolveIntegrationType;\n public bank_gateway_id: string;\n public accepted_card_types: string[];\n public post_transactions_to_gateway: boolean;\n public three_d_secure_url: string;\n public gateway_url: string;\n public generate_token_url: string;\n public widget_url: string;\n public successful_url: string;\n public failed_url: string;\n public enable_callback: boolean;\n public live: boolean;\n public default_module_id: number;\n public service_provider: string;\n public on_account: boolean;\n public sort_priority: number;\n public image_url: string;\n\n public banking_details: EsolveBankingDetails;\n\n constructor(record: EsolvePaymentMethodRecord) {\n this.id = +record.id;\n this.location_id = +record.location_id;\n this.paymethod_name = record.paymethod_name;\n this.description = record.description;\n this.display_banking_details = !!+record.display_banking_details;\n this.currency_code = record.currency_code;\n this.merchant_id = record.merchant_id;\n this.application_id = record.application_id;\n this.api_signature = record.api_signature;\n this.is_gateway = !!+record.is_gateway;\n this.must_store_card_details = !!+record.must_store_card_details;\n this.allow_budget = !!+record.allow_budget;\n this.integration_type = record.integration_type;\n this.bank_gateway_id = record.bank_gateway_id;\n this.accepted_card_types = record.accepted_card_types;\n this.post_transactions_to_gateway =\n !!+record.post_transactions_to_gateway;\n this.three_d_secure_url = record.three_d_secure_url;\n this.gateway_url = record.gateway_url;\n this.generate_token_url = record.generate_token_url;\n this.widget_url = record.widget_url;\n this.successful_url = record.successful_url;\n this.failed_url = record.failed_url;\n this.enable_callback = !!+record.enable_callback;\n this.live = !!+record.live;\n this.default_module_id = +record.default_module_id;\n this.service_provider = record.service_provider;\n this.on_account = !!+record.on_account;\n this.sort_priority = +record.sort_priority;\n this.image_url = record.image_url;\n\n this.banking_details = new EsolveBankingDetails(\n record.bank_name,\n record.account_holder,\n record.account,\n record.account_type,\n record.swift_number,\n record.branch_code,\n );\n }\n}\n","import { EsolveResponseResult } from '../../shared/response';\n\nimport { EsolveServiceProvider } from '../types';\nimport { EsolvePaymentResponse, EsolvePaymentFormInput } from '../interfaces';\n\nexport class EsolvePaymentResult extends EsolveResponseResult {\n public gateway_error_message: string;\n public redirect_required = false;\n public service_provider?: EsolveServiceProvider;\n public redirect_url?: string;\n /**\n * Form post variables\n *\n * Not available to SnapScan\n */\n public form_inputs?: EsolvePaymentFormInput[];\n /**\n * Form post content type\n *\n * Not available to SnapScan\n */\n public form_enctype?: string;\n /**\n * QR code image url\n *\n * Only available to SnapScan integrations\n */\n public qr_code_url?: string;\n\n constructor(response: EsolvePaymentResponse) {\n super(response);\n\n if (typeof response.service_provider !== 'undefined') {\n this.service_provider = response.service_provider;\n }\n\n if (typeof response.redirect_required !== 'undefined') {\n this.redirect_required = response.redirect_required;\n }\n\n this.gateway_error_message = response.gateway_error_message ?? '';\n\n // Check if redirect settings need to be set\n if (this.redirect_required && this.service_provider) {\n if (typeof response.redirect_url !== 'undefined') {\n this.redirect_url = response.redirect_url;\n }\n\n // Check integration specific settings\n if (this.service_provider === 'snapscan') {\n // QR code scan is required\n if (typeof response.qr_code_url !== 'undefined') {\n this.qr_code_url = response.qr_code_url;\n }\n } else {\n // Normal form posting redirect\n if (typeof response.form_inputs !== 'undefined') {\n this.form_inputs = response.form_inputs;\n }\n\n if (typeof response.form_enctype !== 'undefined') {\n this.form_enctype = response.form_enctype;\n }\n }\n }\n }\n}\n","import { EsolveResponseResult } from '../../shared/response';\n\nimport { EsolveVaultResponse } from '../interfaces';\n\nexport class EsolveVaultItemResult extends EsolveResponseResult {\n public id: number;\n public token?: string;\n public card_valid?: boolean;\n public card_details_validated?: boolean;\n public gateway_error_message?: string;\n\n constructor(response: EsolveVaultResponse) {\n super(response);\n\n this.id = +response.esolve_id;\n\n if (typeof response.token !== 'undefined') {\n this.token = response.token;\n }\n\n if (typeof response.card_valid !== 'undefined') {\n this.card_valid = response.card_valid;\n }\n\n if (typeof response.card_details_validated !== 'undefined') {\n this.card_details_validated = response.card_details_validated;\n }\n\n if (typeof response.gateway_error_message !== 'undefined') {\n this.gateway_error_message = response.gateway_error_message;\n }\n }\n}\n","import { EsolveVaultRecord } from '../interfaces';\n\nexport class EsolveVaultItem {\n public id = 0;\n public payment_methods_id = 0;\n public description = '';\n public last4 = '';\n public brand = '';\n private expiry: Date;\n\n public get expiry_month(): string {\n const month = this.expiry.getMonth() + 1;\n\n return month.toString().padStart(2, '0');\n }\n\n public get expiry_year(): number {\n return this.expiry.getFullYear();\n }\n\n public get masked_number(): string {\n return this.last4.padStart(19, '**** ');\n }\n\n constructor(record: EsolveVaultRecord) {\n this.id = +record.id;\n this.payment_methods_id = +record.payment_methods_id;\n this.description = record.description;\n this.last4 = record.last4;\n this.brand = record.brand;\n this.expiry = new Date(record.expiry_timestamp * 1000);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport {\n HttpClient,\n HttpErrorResponse,\n HttpParams,\n} from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport {\n EsolveErrorHandlerService,\n EsolveResponseHandlerService,\n EsolveGetResponse,\n EsolveSetResponse,\n EsolveResult,\n EsolveDeleteResponse,\n} from '../shared';\n\nimport {\n EsolvePaymentMethod,\n EsolvePaymentResult,\n EsolveVaultItem,\n EsolveVaultItemResult,\n} from './classes';\nimport {\n EsolveCardData,\n EsolvePaymentMethodOptions,\n EsolvePaymentMethodRecord,\n EsolvePaymentRedirectLinks,\n EsolvePaymentResponse,\n EsolvePaymentSetBody,\n EsolvePaymentStatus,\n EsolveVaultRecord,\n EsolveVaultResponse,\n} from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolvePaymentService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n /**\n * Retrieves a list of payment methods.\n *\n * @param options Filter options\n *\n * @returns An `Observable` with an array of payment methods\n */\n public getPaymentMethods(\n options?: EsolvePaymentMethodOptions,\n ): Observable<EsolvePaymentMethod[]> {\n return this.http\n .get<EsolveGetResponse<EsolvePaymentMethodRecord[]>>(\n `${this.config.api_url}/get-payment-methods.php`,\n { params: { ...options } },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processPaymentMethods(response.records);\n }),\n );\n }\n\n /**\n * Retrieve the payment status of the specified transaction\n *\n * @param transaction_id ID of the transaction\n *\n * @returns An `Observable` with the success status of the payment\n */\n public getPaymentStatus(transaction_id: number): Observable<boolean> {\n return this.http\n .get<EsolveGetResponse<EsolvePaymentStatus>>(\n `${this.config.api_url}/get-payment-status.php`,\n { params: { cart_id: transaction_id } },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n return response.records.success;\n }),\n );\n }\n\n /**\n * Retrieves a list of saved cards from the vault.\n *\n * @param payment_methods_id eSolve ID of a payment method\n *\n * @returns An `Observable` with an array of saved bank cards\n */\n public getVault(\n payment_methods_id?: number,\n ): Observable<EsolveVaultItem[]> {\n let params = new HttpParams();\n\n if (typeof payment_methods_id !== 'undefined') {\n params = params.set('payment_methods_id', payment_methods_id);\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveVaultRecord[]>>(\n `${this.config.api_url}/get-vault.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processVaultItems(response.records);\n }),\n );\n }\n\n /**\n * Sets a new card in the vault OR updates an existing one.\n *\n * @param payment_methods_id Selected payment method\n * @param card_data Information of bank card\n *\n * @returns An `Observable` with the result of the vault set.\n */\n public setVaultItem(\n payment_methods_id: number,\n card_data: EsolveCardData,\n ): Observable<EsolveVaultItemResult> {\n const body = {\n vault: {\n payment_methods_id,\n card_number: card_data.card_number,\n card_name: card_data.name,\n card_cvv: card_data.cvv,\n card_expiry: this.generateExpiry(card_data),\n },\n };\n\n return this.http\n .post<EsolveSetResponse<EsolveVaultResponse>>(\n `${this.config.api_url}/set-vault.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveVaultItemResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-vault',\n errorRes,\n );\n }),\n );\n }\n\n /**\n * Delete a card in the vault\n *\n * @param id ID of the vault item\n *\n * @returns An `Observable` with the result of the vault delete.\n */\n public deleteVaultItem(id: number): Observable<EsolveResult> {\n return this.http\n .delete<EsolveDeleteResponse>(\n `${this.config.api_url}/delete-vault.php`,\n {\n params: { id },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) => {\n if (\n http_response.result === undefined ||\n http_response.result === null ||\n http_response.result.status !== 'success'\n ) {\n throw http_response;\n }\n\n return new EsolveResult(\n http_response.result.status,\n http_response.result.code,\n http_response.result.message,\n );\n }),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpDeleteError(\n 'delete-vault',\n errorRes,\n );\n }),\n );\n }\n\n /**\n * Sets the payment for the specified transaction using selected payment\n * method.\n *\n * @param transaction_id eSolve ID to the transaction\n * @param payment_methods_id eSolve ID to the selected payment method\n * @param card ID of selected card from the vault or information to a brand new card\n *\n * @returns An `Observable` with the result of the payment\n */\n public setPayment(\n transaction_id: number,\n payment_methods_id: number,\n card?: EsolveCardData | number,\n links?: EsolvePaymentRedirectLinks,\n ): Observable<EsolvePaymentResult> {\n const body: EsolvePaymentSetBody = {\n payment: {\n cart_id: transaction_id,\n payment_methods_id,\n },\n };\n\n if (card) {\n if (typeof card === 'number') {\n body.payment.user_vault_id = card;\n } else {\n body.card = {\n card_number: card.card_number,\n card_name: card.name,\n card_cvv: card.cvv,\n card_expiry: this.generateExpiry(card),\n };\n }\n }\n\n if (links) {\n body.links = links;\n }\n\n return this.http\n .post<EsolveSetResponse<EsolvePaymentResponse>>(\n `${this.config.api_url}/set-payment.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolvePaymentResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-payment',\n errorRes,\n );\n }),\n );\n }\n\n /**\n * Processes the eSolve payment method records.\n *\n * @param records Records to process\n *\n * @returns An array of processed payment methods.\n */\n private processPaymentMethods(\n records: EsolvePaymentMethodRecord[],\n ): EsolvePaymentMethod[] {\n const payment_methods: EsolvePaymentMethod[] = [];\n\n if (records) {\n for (const record of records) {\n const payment_method = new EsolvePaymentMethod(record);\n\n payment_methods.push(payment_method);\n }\n }\n\n return payment_methods;\n }\n\n /**\n * Processes the eSolve vault records.\n *\n * @param records Records to process\n *\n * @returns An array of processed vault items (a.k.a. cards)\n */\n private processVaultItems(records: EsolveVaultRecord[]): EsolveVaultItem[] {\n const vault: EsolveVaultItem[] = [];\n\n if (records) {\n for (const record of records) {\n vault.push(new EsolveVaultItem(record));\n }\n }\n\n return vault;\n }\n\n /**\n * Generate a concatenated string with the expiry month and year\n *\n * @param card_data Credit card data\n *\n * @returns Expiry string\n */\n private generateExpiry(card_data: EsolveCardData): string {\n const month_string = card_data.expiry_month.padStart(2, '0');\n const year_string = card_data.expiry_year.padStart(4, '0');\n\n return `${month_string}${year_string}`;\n }\n}\n","export class EsolveShippingTotals {\n constructor(\n public total: number,\n public vat: number,\n public savings: number,\n ) {}\n}\n","import { EsolveShippingTotals } from './esolve-shipping-totals.model';\n\nexport class EsolveShippingCost {\n public shipping: EsolveShippingTotals;\n public insurance: EsolveShippingTotals;\n\n constructor(\n // Shipping\n shipping_total = 0,\n shipping_vat = 0,\n shipping_total_savings = 0,\n // Insurance\n insurance_total = 0,\n insurance_vat = 0,\n insurance_total_savings = 0,\n ) {\n this.shipping = new EsolveShippingTotals(\n shipping_total,\n shipping_vat,\n shipping_total_savings,\n );\n\n this.insurance = new EsolveShippingTotals(\n insurance_total,\n insurance_vat,\n insurance_total_savings,\n );\n }\n}\n","import { EsolveShippingMethodRecord } from '../interfaces';\nimport {\n EsolveShippingLocation,\n EsolveShippingCalculationMethod,\n EsolveInsuranceCalculationMethod,\n} from '../types';\n\nexport class EsolveShippingMethod {\n public id: number;\n public carrier_name: string;\n public delivery_category: string;\n public description: string;\n public location: EsolveShippingLocation;\n public pricing: string;\n public link_to_carrier_website: string;\n public days_to_deliver: number;\n public shipping_cost_calculation_method: EsolveShippingCalculationMethod;\n public insurance_cost_calculation_method: EsolveInsuranceCalculationMethod;\n public insurance_cost_percentage: number;\n public metric_factor: number;\n public allow_immediate_payment_processing: boolean;\n public allow_postal_address: boolean;\n public allow_physical_address: boolean;\n public client_to_collect: boolean;\n public is_default: boolean;\n public location_id: number;\n public use_zones: boolean;\n public min_distance: number;\n public max_distance: number;\n public shipping_surge_condition: number;\n public shipping_surge_percentage: number;\n public sort_priority: number;\n public shipping_group: string;\n public shipping_slot_identifier: string;\n public shipping_slot_delay_hours: number;\n public image_url: string;\n\n constructor(record: EsolveShippingMethodRecord) {\n this.id = +record.id;\n this.carrier_name = record.carrier_name;\n this.delivery_category = record.delivery_category;\n this.description = record.description;\n this.location = record.location;\n this.pricing = record.pricing;\n this.link_to_carrier_website = record.link_to_carrier_website;\n this.days_to_deliver = +record.days_to_deliver;\n this.shipping_cost_calculation_method =\n record.shipping_cost_calculation_method;\n this.insurance_cost_calculation_method =\n record.insurance_cost_calculation_method;\n this.insurance_cost_percentage = +record.insurance_cost_percentage;\n this.metric_factor = +record.metric_factor;\n this.allow_immediate_payment_processing =\n !!+record.allow_immediate_payment_processing;\n this.allow_postal_address = !!+record.allow_postal_address;\n this.allow_physical_address = !!+record.allow_physical_address;\n this.client_to_collect = !!+record.client_to_collect;\n this.is_default = !!+record.is_default_shipping_method;\n this.location_id = +record.location_id;\n this.use_zones = !!+record.use_zones;\n this.min_distance = +record.min_distance;\n this.max_distance = +record.max_distance;\n this.shipping_surge_condition = +record.shipping_surge_condition;\n this.shipping_surge_percentage = +record.shipping_surge_percentage;\n this.sort_priority = +record.sort_priority;\n this.shipping_group = record.shipping_group;\n this.shipping_slot_identifier = record.shipping_slot_identifier;\n this.shipping_slot_delay_hours = +record.shipping_slot_delay_hours;\n this.image_url = record.image_url;\n }\n}\n","import { EsolveTimeSlotDateRecord } from '../interfaces';\n\nexport class EsolveTimeSlotDate {\n public time_slots_id = 0;\n public available = 0;\n public date: Date;\n\n constructor(record?: EsolveTimeSlotDateRecord) {\n let timestamp = 0;\n\n if (record) {\n this.time_slots_id = record.time_slots_id;\n this.available = record.available;\n timestamp = record.timestamp * 1000;\n }\n\n this.date = new Date(timestamp);\n }\n}\n","import { EsolveTimeSlotDaysRecord } from '../interfaces';\n\nexport class EsolveTimeSlotDays {\n public mon = false;\n public tue = false;\n public wed = false;\n public thu = false;\n public fri = false;\n public sat = false;\n public sun = false;\n\n constructor(record?: EsolveTimeSlotDaysRecord) {\n if (record) {\n this.mon = record.mon;\n this.tue = record.tue;\n this.wed = record.wed;\n this.thu = record.thu;\n this.fri = record.fri;\n this.sat = record.sat;\n this.sun = record.sun;\n }\n }\n}\n","import { EsolveTimeSlotTimesRecord } from '../interfaces';\n\nexport class EsolveTimeSlotTimes {\n public open = '00:00';\n public close = '23:59';\n\n constructor(record?: EsolveTimeSlotTimesRecord) {\n if (record) {\n this.open = record.open;\n this.close = record.close;\n }\n }\n}\n","import { EsolveTimeSlotRecord } from '../interfaces';\n\nimport { EsolveTimeSlotDays } from './esolve-time-slot-days.model';\nimport { EsolveTimeSlotTimes } from './esolve-time-slot-times.model';\n\nexport class EsolveTimeSlot {\n public id = 0;\n public identifier = '';\n public name = '';\n public limit = 0;\n\n public days: EsolveTimeSlotDays;\n public times: EsolveTimeSlotTimes;\n\n constructor(record?: EsolveTimeSlotRecord) {\n if (record) {\n this.id = record.id;\n this.identifier = record.identifier;\n this.name = record.name;\n this.limit = record.limit;\n }\n\n this.days = new EsolveTimeSlotDays(record?.days);\n this.times = new EsolveTimeSlotTimes(record?.times);\n }\n}\n","import { EsolveTimeSlotConfigRecord } from '../interfaces';\n\nimport { EsolveTimeSlotDate } from './esolve-time-slot-date.model';\nimport { EsolveTimeSlot } from './esolve-time-slot.model';\n\nexport class EsolveTimeSlotConfig {\n public slots: EsolveTimeSlot[] = [];\n public dates: EsolveTimeSlotDate[] = [];\n\n constructor(record?: EsolveTimeSlotConfigRecord) {\n if (record) {\n for (const slot_record of record.slots) {\n this.slots.push(new EsolveTimeSlot(slot_record));\n }\n\n for (const date_record of record.dates) {\n this.dates.push(new EsolveTimeSlotDate(date_record));\n }\n }\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\nimport { EsolveTransactionType } from '../transactions';\n\nimport {\n EsolveShippingCost,\n EsolveShippingMethod,\n EsolveTimeSlotConfig,\n} from './classes';\nimport {\n EsolveShippingCostRecord,\n EsolveShippingMethodRecord,\n EsolveShippingMethodOptions,\n EsolveTimeSlotConfigRecord,\n} from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveShippingService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n /**\n * Retrieves a list of shipping methods\n *\n * @param options Filter options\n *\n * @returns An `Observable` with an array of shipping methods\n */\n public getShippingMethods(\n options?: EsolveShippingMethodOptions,\n ): Observable<EsolveShippingMethod[]> {\n let params = new HttpParams();\n\n if (options) {\n if (typeof options.addresses_id !== 'undefined') {\n params = params.set('addresses_id', options.addresses_id);\n }\n\n if (typeof options.location_id !== 'undefined') {\n params = params.set('location_id', options.location_id);\n }\n\n if (typeof options.type !== 'undefined') {\n params = params.set('type', options.type);\n }\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveShippingMethodRecord[]>>(\n `${this.config.api_url}/get-shipping-methods.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processShippingMethods(response.records);\n }),\n );\n }\n\n /**\n * Retrieves the shipping costs\n *\n * @param shipping_id\n * @param addresses_id\n * @param location_id\n *\n * @returns An `Observable` with the shipping costs\n */\n public getShippingCost(\n shipping_id: number,\n addresses_id: number,\n location_id?: number,\n type: EsolveTransactionType = 'order',\n ): Observable<EsolveShippingCost> {\n try {\n let params = new HttpParams();\n\n if (typeof shipping_id === 'undefined') {\n throw new Error('Shipping ID is required');\n } else {\n params = params.set('shipping_id', shipping_id);\n }\n\n if (typeof addresses_id === 'undefined') {\n throw new Error('Address ID is required');\n } else {\n params = params.set('addresses_id', addresses_id);\n }\n\n if (typeof location_id !== 'undefined') {\n params = params.set('location_id', location_id);\n }\n\n params = params.set('type', type);\n\n return this.http\n .get<EsolveGetResponse<EsolveShippingCostRecord[]>>(\n `${this.config.api_url}/get-shipping-cost.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processShippingCost(response.records[0]);\n }),\n );\n } catch (err) {\n return throwError(() => err);\n }\n }\n\n /**\n * Retrieves the time slot config from a shipping method\n *\n * @param shipping_id\n *\n * @returns An `Observable` with the time slots configurations\n */\n public getTimeSlots(shipping_id: number): Observable<EsolveTimeSlotConfig> {\n try {\n let params = new HttpParams();\n\n if (typeof shipping_id === 'undefined') {\n throw new Error('Shipping ID is required');\n } else {\n params = params.set('shipping_id', shipping_id);\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveTimeSlotConfigRecord>>(\n `${this.config.api_url}/get-time-slots.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n return new EsolveTimeSlotConfig(response.records);\n }),\n );\n } catch (err) {\n return throwError(() => err);\n }\n }\n\n /**\n * Processes the eSolve shipping method records.\n *\n * @param records Records to process\n *\n * @returns An array of processed shipping methods\n */\n private processShippingMethods(\n records: EsolveShippingMethodRecord[],\n ): EsolveShippingMethod[] {\n const shipping_methods: EsolveShippingMethod[] = [];\n\n if (records) {\n for (const record of records) {\n shipping_methods.push(new EsolveShippingMethod(record));\n }\n }\n\n return shipping_methods;\n }\n\n /**\n * Processes the eSolve shipping costs record.+\n *\n * @param record Data to process\n *\n * @returns Processed shipping costs\n */\n private processShippingCost(\n record: EsolveShippingCostRecord,\n ): EsolveShippingCost {\n const shipping_cost = new EsolveShippingCost(\n +record.shipping_total,\n +record.vat_on_shipping,\n +record.total_saving_on_shipping,\n +record.insurance_total,\n +record.vat_on_insurance,\n +record.total_saving_on_insurance,\n );\n\n return shipping_cost;\n }\n}\n","import { EsolveResponseResult } from '../../shared/response';\n\nimport { EsolveEnquiryResponse } from '../types';\n\nexport class EsolveEnquiryResult extends EsolveResponseResult {\n public id = 0;\n\n constructor(response: EsolveEnquiryResponse) {\n super(response);\n\n this.id = +response.esolve_id;\n }\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveErrorHandlerService } from '../shared/errors';\nimport {\n EsolveResponseHandlerService,\n EsolveSetResponse,\n} from '../shared/response';\n\nimport { EsolveEnquiryResult } from './classes';\nimport { EsolveEnquiryResponse } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveEnquiryService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n public send(form_data: FormData): Observable<EsolveEnquiryResult> {\n if (!form_data.has('email')) {\n return this.errorHandler.emitError(\n 'email_required',\n 'Email is required',\n );\n }\n\n return this.http\n .post<EsolveSetResponse<EsolveEnquiryResponse>>(\n `${this.config.api_url}/set-enquiry.php`,\n form_data,\n {\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveEnquiryResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-enquiry',\n errorRes,\n );\n }),\n );\n }\n}\n","import { EsolveStockItem } from '../../stock';\n\nexport class EsolveWishlistItem {\n constructor(\n public id: number,\n public qty: number,\n public vat_rate: number,\n public price: number,\n public price_incl: number,\n public vat_total: number,\n public total: number,\n public total_incl: number,\n public stock_item?: EsolveStockItem,\n ) {}\n}\n","import { EsolveResponseResult } from '../../shared/response';\n\nexport class EsolveEmptyWishlistResult extends EsolveResponseResult {}\n","import { Injectable, inject } from '@angular/core';\nimport {\n HttpClient,\n HttpErrorResponse,\n HttpParams,\n} from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport {\n EsolveSetResponse,\n EsolveGetResponse,\n EsolveResponseHandlerService,\n} from '../shared/response';\nimport { EsolveErrorHandlerService } from '../shared/errors';\nimport { EsolveStockItem } from '../stock';\n\nimport { EsolveWishlist, EsolveWishlistSetAction } from './types';\nimport { EsolveWishlistItem, EsolveEmptyWishlistResult } from './classes';\nimport {\n EsolveWishlistItemRecord,\n EsolveWishlistItemResponse,\n EsolveWishlistSetItem,\n} from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveWishlistService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n /**\n * Retrieves the current wishlist\n *\n * @returns An `Observable` with an array of cart items\n */\n public getWishlist(): Observable<EsolveWishlist> {\n return this.getWishlistRecords().pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processWishlist(response.records);\n }),\n );\n }\n\n /**\n * Updates the wishlist by preforming various actions, such as adding, editing or removing items from the list.\n *\n * @param items An array of options to update the wishlist\n * @param default_action The default action to preform\n *\n * @returns An `Observable` with an array of responses that gives feedback on the requested changes\n */\n public setWishlist(\n items: EsolveWishlistSetItem[],\n default_action: EsolveWishlistSetAction = 'add',\n ): Observable<EsolveWishlistItemResponse[]> {\n const body = {\n items,\n default_action,\n };\n\n return this.http\n .post<EsolveSetResponse<EsolveWishlistItemResponse>>(\n `${this.config.api_url}/set-wishlist-item.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((response) => {\n if (response.responses === undefined) {\n throw response;\n }\n\n return response.responses;\n }),\n );\n }\n\n /**\n * Empties the wishlist for the logged in user.\n *\n * @returns Observable of type EsolveEmptyWishlistResult\n */\n public setWishlistEmpty(): Observable<EsolveEmptyWishlistResult> {\n return this.http\n .post<EsolveSetResponse<EsolveWishlistItemResponse>>(\n `${this.config.api_url}/set-wishlist-empty.php`,\n { empty: true },\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n return new EsolveEmptyWishlistResult(response);\n },\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-wishlist-empty',\n errorRes,\n );\n }),\n );\n }\n\n /**\n * Processes the eSolve wishlist records\n *\n * @param wishlist_item_records Records to process\n *\n * @returns An array of processed cart items\n */\n private processWishlist(\n wishlist_item_records: EsolveWishlistItemRecord[],\n ): EsolveWishlist {\n const wishlist_items: EsolveWishlist = [];\n\n if (wishlist_item_records) {\n for (const item of wishlist_item_records) {\n const stock_item = new EsolveStockItem(item.stock_item);\n\n const wishlist_item = new EsolveWishlistItem(\n +item.id,\n +item.qty,\n +item.vat_rate,\n +item.price,\n +item.price_incl,\n +item.vat_total,\n +item.line_total,\n +item.line_total_incl,\n stock_item,\n );\n\n wishlist_items.push(wishlist_item);\n }\n }\n\n return wishlist_items;\n }\n\n /**\n * Retrieves stock records from HTTP params.\n *\n * @param params HTTP client parameters\n */\n private getWishlistRecords(\n params?: HttpParams,\n ): Observable<EsolveGetResponse<EsolveWishlistItemRecord[]>> {\n return this.http.get<EsolveGetResponse<EsolveWishlistItemRecord[]>>(\n `${this.config.api_url}/get-wishlist.php`,\n { params },\n );\n }\n}\n","import { EsolveSupplierRecord } from '../interfaces';\n\nexport class EsolveSupplier {\n public id?: number;\n public internal_account?: string;\n public external_account?: string;\n public company_name: string;\n public owner_firstname: string;\n public owner_surname: string;\n public owner_email: string;\n public owner_contact_number: string;\n public rep_firstname: string;\n public rep_surname: string;\n public rep_email: string;\n public rep_contact_number: string;\n public street: string;\n public suburb: string;\n public city: string;\n public province: string;\n public country: string;\n public postal_code: string;\n public catalogue_ref_1: string;\n public catalogue_ref_2: string;\n public is_active?: boolean;\n public industry_type: string;\n\n constructor(record?: Partial<EsolveSupplierRecord>) {\n this.id = record?.id;\n this.internal_account = record?.internal_account;\n this.external_account = record?.external_account;\n this.company_name = record?.company_name ?? '';\n this.owner_firstname = record?.owner_firstname ?? '';\n this.owner_surname = record?.owner_surname ?? '';\n this.owner_email = record?.owner_email ?? '';\n this.owner_contact_number = record?.owner_contact_number ?? '';\n this.rep_firstname = record?.rep_firstname ?? '';\n this.rep_surname = record?.rep_surname ?? '';\n this.rep_email = record?.rep_email ?? '';\n this.rep_contact_number = record?.rep_contact_number ?? '';\n this.street = record?.street ?? '';\n this.suburb = record?.suburb ?? '';\n this.city = record?.city ?? '';\n this.province = record?.province ?? '';\n this.country = record?.country ?? '';\n this.postal_code = record?.postal_code ?? '';\n this.catalogue_ref_1 = record?.catalogue_ref_1 ?? '';\n this.catalogue_ref_2 = record?.catalogue_ref_2 ?? '';\n this.is_active = record?.is_active;\n this.industry_type = record?.industry_type ?? '';\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport { EsolveSupplier } from './classes';\nimport { EsolveSupplierRecord, EsolveSupplierOptions } from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveSuppliersService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n public getSuppliers(\n options?: EsolveSupplierOptions,\n ): Observable<EsolveSupplier[]> {\n let params = new HttpParams();\n\n if (options?.industry_type) {\n params = params.set('industry_type', options.industry_type);\n }\n if (options?.internal_account) {\n params = params.set('internal_account', options.internal_account);\n }\n\n return this.getSupplierRecords(params).pipe(\n map((records) => {\n const suppliers: EsolveSupplier[] = [];\n\n for (const record of records) {\n suppliers.push(this.processSuppliers(record));\n }\n\n return suppliers;\n }),\n catchError(() => {\n return of<EsolveSupplier[]>([]);\n }),\n );\n }\n\n private getSupplierRecords(\n params: HttpParams,\n ): Observable<EsolveSupplierRecord[]> {\n return this.http\n .get<EsolveGetResponse<EsolveSupplierRecord[]>>(\n `${this.config.api_url}/get-suppliers.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length === 0\n ) {\n throw response;\n }\n\n return response.records;\n }),\n );\n }\n\n private processSuppliers(record: EsolveSupplierRecord): EsolveSupplier {\n return new EsolveSupplier(record);\n }\n}\n","import {\n EsolvePostResponseItem,\n EsolveResponseResult,\n} from '../../shared/response';\n\nexport class EsolveSetDeviceResult extends EsolveResponseResult {\n public id = 0;\n\n constructor(response: EsolvePostResponseItem) {\n super(response);\n\n this.id = +response.esolve_id;\n }\n}\n","import { EsolveUserDeviceRecord } from '../interfaces';\n\nexport class EsolveUserDevice {\n public userid: number;\n public devices_id: number;\n public location_id: number;\n public email: string;\n public account: string;\n public gender: string;\n public title: string;\n public initials: string;\n public firstname: string;\n public surname: string;\n public idnumber: string;\n public telnumber: string;\n public cellnumber: string;\n public uuid: string;\n public alias: string;\n public platform: string;\n public platform_version: string;\n public manufacturer: string;\n public model: string;\n public messaging_id: string;\n public is_active: boolean;\n\n constructor(record: EsolveUserDeviceRecord) {\n this.userid = +record.userid;\n this.devices_id = +record.devices_id;\n this.location_id = +record.location_id;\n this.email = record.email;\n this.account = record.account;\n this.gender = record.gender;\n this.title = record.title;\n this.initials = record.initials;\n this.firstname = record.firstname;\n this.surname = record.surname;\n this.idnumber = record.idnumber;\n this.telnumber = record.telnumber;\n this.cellnumber = record.cellnumber;\n this.uuid = record.uuid;\n this.alias = record.alias;\n this.platform = record.platform;\n this.platform_version = record.platform_version;\n this.manufacturer = record.manufacturer;\n this.model = record.model;\n this.messaging_id = record.messaging_id;\n this.is_active = !!record.is_active;\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { Observable, catchError, map } from 'rxjs';\nimport {\n HttpClient,\n HttpErrorResponse,\n HttpParams,\n} from '@angular/common/http';\n\nimport { EsolveConfigService } from '../core';\n\nimport {\n EsolveGetResponse,\n EsolveResponseHandlerService,\n EsolveSetResponse,\n} from '../shared/response';\nimport { EsolveErrorHandlerService } from '../shared/errors';\n\nimport {\n EsolveDevice,\n EsolveUserDeviceOptions,\n EsolveUserDeviceRecord,\n} from './interfaces';\nimport { EsolveSetDeviceResult, EsolveUserDevice } from './classes';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveDeviceService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n public setDevice(device: EsolveDevice): Observable<EsolveSetDeviceResult> {\n const body = {\n device,\n };\n\n return this.http\n .post<EsolveSetResponse>(\n `${this.config.api_url}/set-device.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveSetDeviceResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-device',\n errorRes,\n );\n }),\n );\n }\n\n public getUserDevices(\n options?: EsolveUserDeviceOptions,\n ): Observable<EsolveUserDevice[]> {\n let params = new HttpParams();\n\n if (options) {\n if (options.location_id) {\n params = params.set('location_id', +options.location_id);\n }\n\n if (options.devices_id) {\n params = params.set('devices_id', +options.devices_id);\n }\n\n if (options.user_id) {\n params = params.set('user_id', options.user_id);\n }\n }\n\n return this.getUserDeviceRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const devices: EsolveUserDevice[] = [];\n\n response.records.forEach((deviceRecord) => {\n devices.push(this.processDevice(deviceRecord));\n });\n\n return devices;\n }),\n );\n }\n\n private getUserDeviceRecords(\n params: HttpParams,\n ): Observable<EsolveGetResponse<EsolveUserDeviceRecord[]>> {\n return this.http.get<EsolveGetResponse<EsolveUserDeviceRecord[]>>(\n `${this.config.api_url}/get-user-devices.php`,\n { params },\n );\n }\n\n private processDevice(record: EsolveUserDeviceRecord): EsolveUserDevice {\n return new EsolveUserDevice(record);\n }\n}\n","import { EsolveWalletBalancesRecord } from '../interfaces';\n\nexport class EsolveWalletBalances {\n public reliable = 0;\n public unreliable = 0;\n public total = 0;\n\n constructor(record?: EsolveWalletBalancesRecord) {\n if (record) {\n this.reliable = +record.reliable;\n this.unreliable = +record.unreliable;\n this.total = +record.total;\n }\n }\n}\n","import { EsolveWalletTransactionRecord } from '../interfaces';\nimport { EsolveWalletTransactionType } from '../types';\n\nexport class EsolveWalletTransaction {\n public id = 0;\n public description = '';\n public cart_id = 0;\n public reliable = false;\n public amount = 0;\n public type: EsolveWalletTransactionType = 'debit';\n public date = new Date();\n\n constructor(record: Partial<EsolveWalletTransactionRecord>) {\n this.id = +(record.id ?? 0);\n this.description = record.description ?? '';\n this.cart_id = record.cart_id ?? 0;\n this.amount = record.amount ?? 0;\n\n if (\n record.type &&\n (record.type === 'credit' || record.type === 'debit')\n ) {\n this.type = record.type;\n }\n\n if (record.txdate_timestamp) {\n this.date = new Date(+record.txdate_timestamp * 1000);\n }\n }\n}\n","import { EsolveList } from '../../shared';\n\nimport { EsolveWalletTransaction } from '.';\n\nexport class EsolveWalletTransactionsList extends EsolveList<EsolveWalletTransaction> {}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { Observable, map, throwError } from 'rxjs';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveSessionService } from '../session';\nimport { EsolveErrorHandlerService, EsolveGetResponse } from '../shared';\n\nimport {\n EsolveWalletBalancesRecord,\n EsolveWalletTransactionOptions,\n EsolveWalletTransactionRecord,\n} from './interfaces';\nimport {\n EsolveWalletBalances,\n EsolveWalletTransaction,\n EsolveWalletTransactionsList,\n} from './classes';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveWalletService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly sessionService = inject(EsolveSessionService);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n\n private _user_id = 0;\n\n public get user_id(): number {\n return this._user_id;\n }\n\n public set user_id(value: number) {\n value = value > 0 ? value : 0;\n\n if (this._user_id !== value) {\n this._user_id = value;\n }\n }\n\n constructor() {\n this.sessionService.getSession().subscribe((session) => {\n if (session.token !== '') {\n this.user_id = session.user_id;\n }\n });\n }\n\n /**\n * Retrieves wallet balances\n *\n * @returns An `Observable` with an array of cart items\n */\n public getBalances(): Observable<EsolveWalletBalances> {\n return this.http\n .get<EsolveGetResponse<EsolveWalletBalancesRecord>>(\n `${this.config.api_url}/get-wallet-totals.php`,\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n return new EsolveWalletBalances(response.records);\n }),\n );\n }\n\n public getTransactions(\n options: EsolveWalletTransactionOptions = {},\n ): Observable<EsolveWalletTransactionsList> {\n try {\n this.loginGuard();\n\n let params = new HttpParams();\n\n if (options.reliable !== undefined) {\n params = params.set('reliable', options.reliable);\n }\n\n if (options.type) {\n params = params.set('type', options.type);\n }\n\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.from_date) {\n params = params.set('from_date', options.from_date);\n }\n\n if (options.to_date) {\n params = params.set('to_date', options.to_date);\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveWalletTransactionRecord[]>>(\n `${this.config.api_url}/get-wallet-transactions.php`,\n {\n params: params,\n },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const items = this.processTransactions(\n response.records,\n );\n const total = +(\n response.additional_data.total_records ?? 0\n );\n const rows = options.rows ?? total;\n const page = options.page || 1;\n\n return new EsolveWalletTransactionsList(\n items,\n page,\n rows,\n total,\n );\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n private loginGuard(): void {\n if (this.user_id <= 0) {\n this.errorHandler.throwError('login_required', 'Login is required');\n }\n }\n\n private processTransactions(\n records: EsolveWalletTransactionRecord[],\n ): EsolveWalletTransaction[] {\n const transactions: EsolveWalletTransaction[] = [];\n\n if (records) {\n for (const record of records) {\n const transaction = new EsolveWalletTransaction(record);\n\n transactions.push(transaction);\n }\n }\n\n return transactions;\n }\n}\n","import { EsolveDeliveryRecord } from '../interfaces';\nimport { EsolveDeliveryStatusType, EsolveDeliveryType } from '../types';\n\nexport class EsolveDelivery {\n public id: number;\n public version: number;\n public cart_id: number;\n public shipping_id: number;\n public location_id: number;\n public cart_pick_id: number;\n public txdate: Date;\n public type: EsolveDeliveryType;\n public status: EsolveDeliveryStatusType;\n public courier_quote_error: any;\n public courier_delivery_error: any;\n public courier_delivery_id: string;\n public courier_status: string;\n public quoted_cost: number;\n public delivery_started: Date;\n public delivery_completed: Date;\n public delivery_cancelled: Date;\n public delivery_resumed: Date;\n public courier_cancellation_reason: string;\n public quote: any;\n public delivery: any;\n public proof: any;\n public tracking: any;\n public last_tracked: Date;\n public last_latitude: number;\n public last_longitude: number;\n\n constructor(record: EsolveDeliveryRecord) {\n this.id = +record.id;\n this.version = +record.version;\n this.cart_id = +record.cart_id;\n this.shipping_id = +record.shipping_id;\n this.location_id = +record.location_id;\n this.cart_pick_id = +record.cart_pick_id;\n this.txdate = new Date(+record.txdate * 1000);\n this.type = record.type as EsolveDeliveryType;\n this.status = record.status as EsolveDeliveryStatusType;\n this.courier_quote_error = record.courier_delivery_error;\n this.courier_delivery_error = record.courier_quote_error;\n this.courier_delivery_id = record.courier_delivery_id;\n this.courier_status = record.courier_status;\n this.quoted_cost = +record.quoted_cost\n this.delivery_started = new Date(+record.delivery_started * 1000);\n this.delivery_completed = new Date(+record.delivery_completed * 1000);\n this.delivery_cancelled = new Date(+record.delivery_cancelled * 1000);\n this.delivery_resumed = new Date(+record.delivery_resumed * 1000);\n this.courier_cancellation_reason = record.courier_cancellation_reason;\n this.proof = record.proof;\n this.tracking = record.tracking;\n this.last_tracked = new Date(+record.last_tracked * 1000);\n this.last_latitude = +record.last_latitude;\n this.last_longitude = +record.last_longitude;\n\n }\n}\n","import { EsolveDeliveryStatusRecord } from \"../interfaces\";\n\nexport class EsolveDeliveryStatus {\n public delivery_id: number;\n public complete: boolean;\n public cancelled: boolean;\n public last_update: Date;\n public latitude: number;\n public longitude: number;\n public pickup_eta: Date;\n public pickup_status: string;\n public dropoff_eta: Date;\n public driver_picture_href?: URL;\n public driver_name: string;\n public driver_phone_number: string;\n public rating: number;\n public vehicle_color: string;\n public vehicle_make: string;\n public vehicle_model: string;\n public vehicle_type: string;\n\n constructor(record: EsolveDeliveryStatusRecord) {\n this.delivery_id = +record.delivery_id;\n this.complete = record.complete;\n this.cancelled = record.cancelled;\n this.last_update = new Date(+record.last_update * 1000);\n this.latitude = +record.latitude;\n this.longitude = +record.longitude;\n this.pickup_eta = new Date(+record.pickup_eta * 1000);\n this.pickup_status = record.pickup_status;\n this.dropoff_eta = new Date(+record.dropoff_eta * 1000);\n if (record.driver_picture_href != \"\") {\n this.driver_picture_href = new URL(record.driver_picture_href);\n }\n this.driver_name = record.driver_name;\n this.driver_phone_number = record.driver_phone_number;\n this.rating = record.rating;\n this.vehicle_color = record.vehicle_color;\n this.vehicle_make = record.vehicle_make;\n this.vehicle_model = record.vehicle_model;\n this.vehicle_type = record.vehicle_type;\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { Observable, map, throwError } from 'rxjs';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { EsolveConfigService } from '../core';\n\nimport {\n EsolveGetResponse,\n EsolveResponseHandlerService,\n} from '../shared/response';\nimport { EsolveErrorHandlerService } from '../shared/errors';\n\nimport {\n EsolveDeliveriesOptions,\n EsolveDeliveryRecord,\n EsolveDeliveryStatusRecord,\n} from './interfaces';\nimport { EsolveDelivery } from './classes';\nimport { EsolveFilterFactory } from '../shared';\nimport { EsolveDeliveryStatus } from './classes/esolve-delivery-status.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveDeliveriesService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n public getDeliveryStatus(cart_id: number): Observable<EsolveDeliveryStatus> {\n let params = new HttpParams();\n\n if (cart_id > 0) {\n params = params.set('cart_id', cart_id);\n }\n\n try {\n return this.http\n .get<EsolveGetResponse<EsolveDeliveryStatusRecord>>(\n `${this.config.api_url}/get-delivery-status.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n return new EsolveDeliveryStatus(response.records);\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n public getDeliveries(\n options?: EsolveDeliveriesOptions,\n ): Observable<EsolveDelivery[]> {\n let params = new HttpParams();\n\n if (options) {\n\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.deliveries_id) {\n params = params.set('deliveries_id', +options.deliveries_id);\n }\n\n if (options.version) {\n params = params.set('version', +options.version);\n }\n\n if (options.cart_id) {\n params = params.set('cart_id', +options.cart_id);\n }\n\n if (options.location_id) {\n params = params.set('location_id', +options.location_id);\n }\n\n if (options.status) {\n params = params.set('status', +options.status);\n }\n\n if (options.from_date) {\n params = params.set('from_date', +options.from_date);\n }\n\n if (options.to_date) {\n params = params.set('from_date', +options.to_date);\n }\n\n if (options.sort) {\n const sort = options.sort;\n\n if (sort.field) {\n params = params.set('sort', sort.field);\n }\n\n if (sort.order) {\n params = params.set('order', sort.order);\n }\n }\n\n if (options.filters) {\n let filters = options.filters;\n\n if (!Array.isArray(filters)) {\n filters = EsolveFilterFactory.covertFromObj(filters);\n }\n\n params = EsolveFilterFactory.convertToHttpParams(\n filters,\n params,\n );\n }\n }\n\n return this.getDeliveriesRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const deliveries: EsolveDelivery[] = [];\n\n response.records.forEach((deviceRecord) => {\n deliveries.push(this.processDelivery(deviceRecord));\n });\n\n return deliveries;\n }),\n );\n }\n\n private getDeliveriesRecords(\n params: HttpParams,\n ): Observable<EsolveGetResponse<EsolveDeliveryRecord[]>> {\n try {\n return this.http.get<EsolveGetResponse<EsolveDeliveryRecord[]>>(\n `${this.config.api_url}/get-deliveries.php`,\n { params },\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n private processDelivery(record: EsolveDeliveryRecord): EsolveDelivery {\n return new EsolveDelivery(record);\n }\n}\n","/*\n * Public API Surface of ng-esolve-connect\n */\n\nexport * from './lib/ng-esolve-connect.module';\nexport * from './lib/core';\nexport * from './lib/images';\nexport * from './lib/shared';\n\n// SEO\nexport * from './lib/seo';\n\n// Geocoder\nexport * from './lib/geocoder';\n\n// Assets\nexport * from './lib/assets';\n\n// Session\nexport * from './lib/session';\n\n// Auth\nexport * from './lib/auth';\n\n// Account\nexport * from './lib/account';\n\n// Banners\nexport * from './lib/banners';\n\n// Menu\nexport * from './lib/menu';\n\n// News\nexport * from './lib/news';\n\n// Topics\nexport * from './lib/topics';\n\n// Tags\nexport * from './lib/tags';\n\n// Stock\nexport * from './lib/stock';\n\n// Category Tree\nexport * from './lib/category-tree';\n\n// Manufacturers\nexport * from './lib/manufacturers';\n\n// Ranges\nexport * from './lib/ranges';\n\n// Specials\nexport * from './lib/specials';\n\n// Cart\nexport * from './lib/cart';\n\n// Payment\nexport * from './lib/payment';\n\n// Shipping\nexport * from './lib/shipping';\n\n// Locations\nexport * from './lib/locations';\n\n// Enquiry\nexport * from './lib/enquiry';\n\n// Wishlist\nexport * from './lib/wishlist';\n\n// Suppliers\nexport * from './lib/suppliers';\n\n// Coupons\nexport * from './lib/coupons';\n\n// Vouchers\nexport * from './lib/vouchers';\n\n// Transactions\nexport * from './lib/transactions';\n\n//Device\nexport * from './lib/device';\n\n// Wallet\nexport * from './lib/wallet';\n\n//Deliveries\nexport * from './lib/deliveries';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["map","switchMap","EsolveFilterFactory.covertFromObj","EsolveFilterFactory.convertToHttpParams","catchError"],"mappings":"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"}
1
+ {"version":3,"file":"esolve-ng-esolve-connect.mjs","sources":["../../../../libs/ng-esolve-connect/src/lib/core/esolve-connect-config.constant.ts","../../../../libs/ng-esolve-connect/src/lib/core/esolve-config.service.ts","../../../../libs/ng-esolve-connect/src/lib/shared/cookie/esolve-cookie.service.ts","../../../../libs/ng-esolve-connect/src/lib/shared/errors/esolve-http-error.model.ts","../../../../libs/ng-esolve-connect/src/lib/shared/errors/esolve-error-handler.service.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/classes/esolve-multiple-select-filter.model.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/classes/esolve-range-filter.model.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/classes/esolve-single-select-filter.model.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/classes/esolve-toggle-filter.model.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/classes/esolve-generic-filter.model.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/classes/index.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/interfaces/index.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/types/index.ts","../../../../libs/ng-esolve-connect/src/lib/shared/filters/esolve-filter-factory.ts","../../../../libs/ng-esolve-connect/src/lib/shared/response/classes/esolve-response-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/shared/response/esolve-response-handler.service.ts","../../../../libs/ng-esolve-connect/src/lib/shared/sort/index.ts","../../../../libs/ng-esolve-connect/src/lib/shared/esolve-hex-hash.function.ts","../../../../libs/ng-esolve-connect/src/lib/shared/esolve-list.model.ts","../../../../libs/ng-esolve-connect/src/lib/shared/esolve-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/session/esolve-session.service.ts","../../../../libs/ng-esolve-connect/src/lib/session/esolve-session-metadata.service.ts","../../../../libs/ng-esolve-connect/src/lib/auth/esolve-auth.service.ts","../../../../libs/ng-esolve-connect/src/lib/auth/esolve-auth-interceptor.service.ts","../../../../libs/ng-esolve-connect/src/lib/auth/models/esolve-otp.model.ts","../../../../libs/ng-esolve-connect/src/lib/auth/models/esolve-otp-validation.model.ts","../../../../libs/ng-esolve-connect/src/lib/auth/esolve-otp.service.ts","../../../../libs/ng-esolve-connect/src/lib/auth/providers/esolve-eurus-auto-login.provider.ts","../../../../libs/ng-esolve-connect/src/lib/core/providers/provide-ng-esolve-connect.function.ts","../../../../libs/ng-esolve-connect/src/lib/ng-esolve-connect.module.ts","../../../../libs/ng-esolve-connect/src/lib/images/functions/is-esolve-cdn-path.function.ts","../../../../libs/ng-esolve-connect/src/lib/images/functions/is-ftg-cdn-path.function.ts","../../../../libs/ng-esolve-connect/src/lib/images/functions/is-legacy-esolve-cdn-path.function.ts","../../../../libs/ng-esolve-connect/src/lib/images/functions/process-image-src.function.ts","../../../../libs/ng-esolve-connect/src/lib/images/esolve-image-loader.provider.ts","../../../../libs/ng-esolve-connect/src/lib/images/directives/cdn-src.directive.ts","../../../../libs/ng-esolve-connect/src/lib/seo/classes/esolve-seo-info.model.ts","../../../../libs/ng-esolve-connect/src/lib/seo/esolve-seo.service.ts","../../../../libs/ng-esolve-connect/src/lib/geocoder/classes/esolve-geocode-address-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/geocoder/classes/esolve-geocode-coords-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/geocoder/classes/esolve-geocode-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/geocoder/esolve-geocoder.service.ts","../../../../libs/ng-esolve-connect/src/lib/assets/classes/esolve-linked-asset.model.ts","../../../../libs/ng-esolve-connect/src/lib/category-tree/classes/esolve-category-tree-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/category-tree/esolve-category-tree.service.ts","../../../../libs/ng-esolve-connect/src/lib/manufacturers/classes/esolve-manufacturer.model.ts","../../../../libs/ng-esolve-connect/src/lib/manufacturers/esolve-manufacturers.service.ts","../../../../libs/ng-esolve-connect/src/lib/ranges/classes/esolve-range.model.ts","../../../../libs/ng-esolve-connect/src/lib/ranges/esolve-ranges.service.ts","../../../../libs/ng-esolve-connect/src/lib/tags/classes/esolve-tag.model.ts","../../../../libs/ng-esolve-connect/src/lib/tags/esolve-tags.service.ts","../../../../libs/ng-esolve-connect/src/lib/topics/classes/esolve-topic.model.ts","../../../../libs/ng-esolve-connect/src/lib/topics/esolve-topic.service.ts","../../../../libs/ng-esolve-connect/src/lib/assets/classes/esolve-asset.model.ts","../../../../libs/ng-esolve-connect/src/lib/assets/esolve-assets.service.ts","../../../../libs/ng-esolve-connect/src/lib/account/address/classes/esolve-address-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/address/classes/esolve-address.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/address/classes/esolve-session-address-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-user-account-business.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-user-account-contact.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-user-account-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-statement-ageing.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-statement-balances.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-statement-transaction.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-statement.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-user-client-account.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-user-account.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/user-account/classes/esolve-user-client-account-balances.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/password/esolve-change-password-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/password/esolve-reset-password-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/registration/esolve-registration-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/confirmation/esolve-account-confirmation-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/location/classes/esolve-location-update-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/cart/classes/esolve-empty-cart-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/cart/classes/esolve-checkout-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/cart/classes/esolve-cart-stock-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/cart/classes/esolve-cart-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/cart/classes/esolve-cart-totals.model.ts","../../../../libs/ng-esolve-connect/src/lib/cart/classes/esolve-transaction-analytics-data.model.ts","../../../../libs/ng-esolve-connect/src/lib/cart/classes/esolve-cart-alternative.model.ts","../../../../libs/ng-esolve-connect/src/lib/coupons/classes/esolve-coupon.model.ts","../../../../libs/ng-esolve-connect/src/lib/coupons/esolve-coupons.service.ts","../../../../libs/ng-esolve-connect/src/lib/coupons/index.ts","../../../../libs/ng-esolve-connect/src/lib/vouchers/classes/esolve-voucher.model.ts","../../../../libs/ng-esolve-connect/src/lib/vouchers/esolve-vouchers.service.ts","../../../../libs/ng-esolve-connect/src/lib/vouchers/index.ts","../../../../libs/ng-esolve-connect/src/lib/cart/esolve-cart.service.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-address.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-client.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-item-price.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-list.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/esolve-location-address.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/esolve-location-contact-info.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/esolve-location-geo.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/esolve-location-pobox-address.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/esolve-location-trading-day.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/esolve-location-trading-times.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/esolve-location.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/esolve-location-list.model.ts","../../../../libs/ng-esolve-connect/src/lib/locations/classes/index.ts","../../../../libs/ng-esolve-connect/src/lib/locations/types/index.ts","../../../../libs/ng-esolve-connect/src/lib/locations/esolve-locations.service.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-location.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-payment-method.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-shipping-method.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-user.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-pick.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-time-slot.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction-delivery.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/classes/esolve-transaction.model.ts","../../../../libs/ng-esolve-connect/src/lib/transactions/esolve-transactions.service.ts","../../../../libs/ng-esolve-connect/src/lib/account/esolve-session-shipping-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/account/esolve-account.service.ts","../../../../libs/ng-esolve-connect/src/lib/banners/classes/esolve-banner.model.ts","../../../../libs/ng-esolve-connect/src/lib/banners/classes/esolve-banner-image.model.ts","../../../../libs/ng-esolve-connect/src/lib/banners/classes/esolve-banner-image-hotspot.model.ts","../../../../libs/ng-esolve-connect/src/lib/banners/esolve-banner.service.ts","../../../../libs/ng-esolve-connect/src/lib/menu/classes/esolve-menu-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/menu/esolve-menu.service.ts","../../../../libs/ng-esolve-connect/src/lib/news/classes/esolve-news-article-author.model.ts","../../../../libs/ng-esolve-connect/src/lib/news/classes/esolve-news-article-list.model.ts","../../../../libs/ng-esolve-connect/src/lib/news/classes/esolve-news-group.model.ts","../../../../libs/ng-esolve-connect/src/lib/news/classes/esolve-news-article.model.ts","../../../../libs/ng-esolve-connect/src/lib/news/classes/esolve-newsletter-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/news/esolve-news.service.ts","../../../../libs/ng-esolve-connect/src/lib/stock/types/index.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-colour.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-badge.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-price.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-lead-times.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-transaction-history.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-item-base.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-dependant-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-group-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-group.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-item-list.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-recipe-stock-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-linked-stock-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-media-stock-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-image.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-additional-stock-image.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-stock-image-collection.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/esolve-set-notify-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/stock/classes/index.ts","../../../../libs/ng-esolve-connect/src/lib/stock/interfaces/index.ts","../../../../libs/ng-esolve-connect/src/lib/stock/esolve-stock.service.ts","../../../../libs/ng-esolve-connect/src/lib/specials/classes/esolve-special-dates.model.ts","../../../../libs/ng-esolve-connect/src/lib/specials/classes/esolve-special-image.model.ts","../../../../libs/ng-esolve-connect/src/lib/specials/classes/esolve-special-image-collection.model.ts","../../../../libs/ng-esolve-connect/src/lib/specials/classes/esolve-special.model.ts","../../../../libs/ng-esolve-connect/src/lib/specials/esolve-specials.service.ts","../../../../libs/ng-esolve-connect/src/lib/payment/classes/esolve-banking-details.model.ts","../../../../libs/ng-esolve-connect/src/lib/payment/classes/esolve-payment-method.model.ts","../../../../libs/ng-esolve-connect/src/lib/payment/classes/esolve-payment-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/payment/classes/esolve-vault-item-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/payment/classes/esolve-vault-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/payment/esolve-payment.service.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/classes/esolve-shipping-totals.model.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/classes/esolve-shipping-cost.model.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/classes/esolve-shipping-method.model.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/classes/esolve-time-slot-date.model.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/classes/esolve-time-slot-days.model.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/classes/esolve-time-slot-times.model.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/classes/esolve-time-slot.model.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/classes/esolve-time-slot-config.model.ts","../../../../libs/ng-esolve-connect/src/lib/shipping/esolve-shipping.service.ts","../../../../libs/ng-esolve-connect/src/lib/enquiry/classes/esolve-enquiry-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/enquiry/esolve-enquiry.service.ts","../../../../libs/ng-esolve-connect/src/lib/wishlist/classes/esolve-wishlist-item.model.ts","../../../../libs/ng-esolve-connect/src/lib/wishlist/classes/esolve-empty-wishlist-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/wishlist/esolve-wishlist.service.ts","../../../../libs/ng-esolve-connect/src/lib/suppliers/classes/esolve-supplier.model.ts","../../../../libs/ng-esolve-connect/src/lib/suppliers/esolve-suppliers.service.ts","../../../../libs/ng-esolve-connect/src/lib/device/classes/esolve-set-device-result.model.ts","../../../../libs/ng-esolve-connect/src/lib/device/classes/esolve-user-device.model.ts","../../../../libs/ng-esolve-connect/src/lib/device/esolve-device.service.ts","../../../../libs/ng-esolve-connect/src/lib/wallet/classes/esolve-wallet-balances.model.ts","../../../../libs/ng-esolve-connect/src/lib/wallet/classes/esolve-wallet-transaction.model.ts","../../../../libs/ng-esolve-connect/src/lib/wallet/classes/esolve-wallet-transactions-list.model.ts","../../../../libs/ng-esolve-connect/src/lib/wallet/esolve-wallet.service.ts","../../../../libs/ng-esolve-connect/src/lib/deliveries/classes/esolve-delivery.model.ts","../../../../libs/ng-esolve-connect/src/lib/deliveries/classes/esolve-delivery-status.model.ts","../../../../libs/ng-esolve-connect/src/lib/deliveries/esolve-deliveries.service.ts","../../../../libs/ng-esolve-connect/src/index.ts","../../../../libs/ng-esolve-connect/src/esolve-ng-esolve-connect.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { EsolveConnectConfig } from './esolve-connect-config.interface';\n\nexport const ESOLVE_CONNECT_CONFIG = new InjectionToken<EsolveConnectConfig>(\n 'esolve.connect.config',\n);\n","import { Injectable, inject } from '@angular/core';\n\nimport { EsolveConnectConfig } from './esolve-connect-config.interface';\nimport { ESOLVE_CONNECT_CONFIG } from './esolve-connect-config.constant';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveConfigService implements EsolveConnectConfig {\n public api_url = '';\n public site_url = '';\n public wsid = '';\n public title_prefix: string;\n public title_suffix: string;\n public title_separator = '|';\n public default_seo_title: string;\n public default_seo_description: string;\n public default_seo_keywords: string;\n public native: boolean;\n public session_storage_key = '_ng_eslv_token';\n public coupon_storage_key = '_ng_eslv_coupons';\n public voucher_storage_key = '_ng_eslv_vouchers';\n public device_designation = 'web';\n\n public legacy_cdn?: string;\n public cdn?: string;\n public ftg_cdn?: string;\n public error_image_path?: string;\n\n constructor() {\n const config = inject(ESOLVE_CONNECT_CONFIG);\n\n if (config.api_url === '' || config.wsid === '') {\n throw new Error('Invalid eSolve Eurus config');\n }\n\n this.api_url = config.api_url;\n this.site_url = config.site_url;\n this.wsid = config.wsid;\n\n this.title_prefix = config.title_prefix ?? '';\n this.title_suffix = config.title_suffix ?? '';\n this.default_seo_title = config.default_seo_title ?? '';\n this.default_seo_description = config.default_seo_description ?? '';\n this.default_seo_keywords = config.default_seo_keywords ?? '';\n\n this.native = config.native ?? false;\n\n if (config.session_storage_key) {\n this.session_storage_key = config.session_storage_key;\n }\n\n if (config.title_separator) {\n this.title_separator = config.title_separator;\n }\n\n if (config.coupon_storage_key) {\n this.coupon_storage_key = config.coupon_storage_key;\n }\n\n if (config.voucher_storage_key) {\n this.voucher_storage_key = config.voucher_storage_key;\n }\n\n if (this.native && config.device_designation) {\n this.device_designation = config.device_designation;\n }\n\n this.legacy_cdn = config.legacy_cdn;\n this.cdn = config.cdn;\n\n if (config.ftg_cdn) {\n this.ftg_cdn = config.ftg_cdn;\n }\n\n this.error_image_path = config.error_image_path;\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { SsrCookieService } from 'ngx-cookie-service-ssr';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveCookieService {\n private readonly cookieService = inject(SsrCookieService);\n\n public check(name: string): boolean {\n return this.cookieService.check(name);\n }\n\n public get(name: string): string {\n return this.cookieService.get(name);\n }\n\n public set(\n name: string,\n value: string,\n expires?: Date,\n path?: string,\n domain?: string,\n secure?: boolean,\n ): void {\n this.cookieService.set(name, value, expires, path, domain, secure);\n }\n\n public delete(\n name: string,\n path?: string,\n domain?: string,\n secure?: boolean,\n ): void {\n this.cookieService.delete(name, path, domain, secure);\n }\n}\n","export class EsolveHttpError extends Error {\n public readonly http_error = true;\n public type: 'error' | 'exception';\n public error_code: string;\n\n constructor(type: 'error' | 'exception', code: string, message: string) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(message);\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, EsolveHttpError);\n }\n\n this.name = 'EsolveHttpError';\n this.type = type;\n this.error_code = code;\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { Observable, throwError } from 'rxjs';\n\nimport {\n EsolveResponse,\n EsolveDeleteResult,\n EsolvePostResponseItem,\n EsolveDeleteResponse,\n EsolveSetResponse,\n} from '../response';\nimport { EsolveHttpError } from './esolve-http-error.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveErrorHandlerService {\n public throwError(code: string, message: string): void {\n throw new EsolveHttpError('error', code, message);\n }\n\n public emitError(code: string, message: string): Observable<never> {\n return throwError(() => new EsolveHttpError('error', code, message));\n }\n\n public handleHttpPostError(\n service_type: string,\n errorRes:\n | HttpErrorResponse\n | EsolveSetResponse\n | EsolvePostResponseItem,\n ): Observable<never> {\n if (\n !(errorRes instanceof HttpErrorResponse) &&\n !('service_type' in errorRes) &&\n 'id' in errorRes &&\n 'esolve_id' in errorRes &&\n 'transaction_type' in errorRes &&\n 'status' in errorRes &&\n 'log' in errorRes\n ) {\n return throwError(() => this.parsePostErrors(errorRes));\n }\n\n return this.handleHttpError(service_type, errorRes);\n }\n\n public handleHttpDeleteError(\n service_type: string,\n errorRes: HttpErrorResponse | EsolveDeleteResponse | EsolveDeleteResult,\n ): Observable<never> {\n const is_not_base =\n !(errorRes instanceof HttpErrorResponse) &&\n !('service_type' in errorRes) &&\n 'id' in errorRes &&\n 'status' in errorRes &&\n 'message' in errorRes &&\n 'code' in errorRes;\n\n if (is_not_base) {\n return throwError(() => this.parseDeleteError(errorRes));\n }\n\n return this.handleHttpError(service_type, errorRes);\n }\n\n private handleHttpError(\n service_type: string,\n error_response: HttpErrorResponse | EsolveResponse,\n ): Observable<never> {\n if (error_response instanceof HttpErrorResponse) {\n if (error_response.status === 500) {\n const server_error = error_response.error;\n\n if (\n 'service_type' in server_error &&\n server_error.service_type === service_type\n ) {\n return throwError(() =>\n this.parseException(server_error as EsolveResponse),\n );\n }\n }\n } else {\n if (\n 'service_type' in error_response &&\n error_response.service_type === service_type\n ) {\n if (error_response.type === 'exception') {\n return throwError(() =>\n this.parseException(error_response),\n );\n } else if (error_response.type === 'error') {\n return throwError(() =>\n this.parseResponseError(error_response),\n );\n }\n }\n }\n\n return throwError(() => error_response);\n }\n\n private parseException(exception: EsolveResponse): EsolveHttpError {\n const error = new EsolveHttpError(\n 'exception',\n exception.additional_data.exception_type || 'unknown',\n exception.message || 'Unknown exception has occurred',\n );\n\n return error;\n }\n\n private parseResponseError(exception: EsolveResponse): EsolveHttpError {\n const error = new EsolveHttpError(\n 'error',\n exception.code || 'unknown',\n exception.message || 'Unknown error has occurred',\n );\n\n return error;\n }\n\n private parsePostErrors(response: EsolvePostResponseItem): EsolveHttpError {\n let error_code = 'unknown';\n let message = 'Unknown error has occurred';\n\n if (response.status.state === 'none' && response.log.length > 0) {\n error_code = 'no_response';\n message = 'Response was provided';\n } else if (response.status.state === 'error') {\n const login_error_log = response.log[0];\n\n error_code = login_error_log.message_code;\n message = login_error_log.message;\n }\n\n return new EsolveHttpError('error', error_code, message);\n }\n\n private parseDeleteError(result: EsolveDeleteResult): EsolveHttpError {\n return new EsolveHttpError('error', result.code, result.message);\n }\n}\n","import { HttpParams } from '@angular/common/http';\n\nimport { EsolveSelectFilter } from '../interfaces';\n\nexport class EsolveMultipleSelectFilter implements EsolveSelectFilter {\n public readonly type = 'multiple';\n public label = '';\n public options: (string | number)[] = [];\n\n private values?: (string | number)[];\n\n constructor(\n public field: string,\n options?: (string | number)[],\n ) {\n if (options) {\n this.options = options;\n }\n }\n\n public setValue(values: (string | number)[]) {\n this.values = values;\n }\n\n public toHttpParams(): { [x: string]: string | (string | number)[] };\n public toHttpParams(http_params: HttpParams): HttpParams;\n public toHttpParams(\n http_params?: HttpParams,\n ): HttpParams | { [x: string]: string | (string | number)[] } {\n if (!this.values) {\n throw new Error('No values set');\n }\n\n const base_property = `filter[${this.field}]`;\n const type_property = base_property + '[type]';\n const values_property = base_property + '[values][]';\n\n const params = {\n [type_property]: this.type,\n [values_property]: this.values,\n };\n\n if (http_params) {\n return http_params.appendAll(params);\n }\n\n return params;\n }\n}\n","import { HttpParams } from '@angular/common/http';\n\nimport { EsolveFilter } from '../interfaces';\n\nexport class EsolveRangeFilter implements EsolveFilter {\n public readonly type = 'range';\n public label = '';\n public min = 0;\n public max = 0;\n public options = {\n min: 0,\n max: 0,\n };\n\n constructor(\n public field: string,\n min = 0,\n max = 0,\n ) {\n this.options.min = min;\n this.options.max = max;\n\n if (max > 0 && min > max) {\n this.options.min = max;\n this.options.max = min;\n }\n }\n\n public setValue(min: number, max: number): void {\n this.min = min;\n this.max = max;\n\n if (max > 0 && min > max) {\n this.min = max;\n this.max = min;\n }\n }\n\n public toHttpParams(): { [x: string]: string | number };\n public toHttpParams(http_params: HttpParams): HttpParams;\n public toHttpParams(\n http_params?: HttpParams,\n ): HttpParams | { [x: string]: string | number } {\n if (this.min <= 0 && this.max <= 0) {\n throw new Error('No values set');\n }\n\n const base_property = `filter[${this.field}]`;\n const type_property = base_property + '[type]';\n const min_property = base_property + '[min]';\n const max_property = base_property + '[max]';\n\n const params = {\n [type_property]: this.type,\n [min_property]: this.min,\n [max_property]: this.max,\n };\n\n if (http_params) {\n return http_params.appendAll(params);\n }\n\n return params;\n }\n}\n","import { HttpParams } from '@angular/common/http';\n\nimport { EsolveSelectFilter } from '../interfaces';\n\nexport class EsolveSingleSelectFilter implements EsolveSelectFilter {\n public readonly type = 'single';\n public label = '';\n public options: (string | number)[] = [];\n\n private value?: string | number;\n\n constructor(field: string, options: (string | number)[]);\n constructor(field: string, value: string | number);\n constructor(\n public field: string,\n options_or_value: string | number | (string | number)[],\n ) {\n if (Array.isArray(options_or_value)) {\n this.options = options_or_value;\n } else {\n this.setValue(options_or_value);\n }\n }\n\n public setValue(value: string | number) {\n this.value = value;\n }\n\n public toHttpParams(): { [x: string]: string | number };\n public toHttpParams(http_params: HttpParams): HttpParams;\n public toHttpParams(\n http_params?: HttpParams,\n ): HttpParams | { [x: string]: string | number } {\n if (!this.value) {\n throw new Error('No values set');\n }\n\n const base_property = `filter[${this.field}]`;\n const type_property = base_property + '[type]';\n const values_property = base_property + '[value]';\n\n const params = {\n [type_property]: this.type,\n [values_property]: this.value,\n };\n\n if (http_params) {\n return http_params.appendAll(params);\n }\n\n return params;\n }\n}\n","import { HttpParams } from '@angular/common/http';\n\nimport { EsolveFilter } from '../interfaces';\n\nexport class EsolveToggleFilter implements EsolveFilter {\n public readonly type = 'toggle';\n public label = '';\n\n constructor(\n public field: string,\n private value: boolean,\n ) {}\n\n public toHttpParams(): { [x: string]: string | number };\n public toHttpParams(http_params: HttpParams): HttpParams;\n public toHttpParams(\n http_params?: HttpParams,\n ): HttpParams | { [x: string]: string | number } {\n const base_property = `filter[${this.field}]`;\n const type_property = base_property + '[type]';\n const values_property = base_property + '[value]';\n\n const params = {\n [type_property]: this.type,\n [values_property]: this.value ? 1 : 0,\n };\n\n if (http_params) {\n return http_params.appendAll(params);\n }\n\n return params;\n }\n}\n","import { HttpParams } from '@angular/common/http';\n\nimport { EsolveFilter, EsolveGenericFilterDefinition } from '../interfaces';\n\nexport class EsolveGenericFilter implements EsolveFilter {\n public readonly type = 'generic';\n public label = '';\n private value: string | number | boolean;\n private filter_type: string;\n\n constructor(\n public field: string,\n definition: EsolveGenericFilterDefinition,\n ) {\n this.filter_type = definition.type;\n this.value = definition.value;\n }\n\n public toHttpParams(): { [x: string]: string | number };\n public toHttpParams(http_params: HttpParams): HttpParams;\n public toHttpParams(\n http_params?: HttpParams,\n ): HttpParams | { [x: string]: string | number } {\n const base_property = `filter[${this.field}]`;\n const type_property = base_property + '[type]';\n const values_property = base_property + '[value]';\n\n let value = this.value;\n\n if (typeof value === 'boolean') {\n value = +value;\n }\n\n const params = {\n [type_property]: this.filter_type,\n [values_property]: value,\n };\n\n if (http_params) {\n return http_params.appendAll(params);\n }\n\n return params;\n }\n}\n","// Classes\nexport * from './esolve-multiple-select-filter.model';\nexport * from './esolve-range-filter.model';\nexport * from './esolve-single-select-filter.model';\nexport * from './esolve-toggle-filter.model';\nexport * from './esolve-generic-filter.model';\n","// Interfaces\nexport * from './esolve-filter-definitions.interface';\nexport * from './esolve-filter-record.interface';\nexport * from './esolve-filter.interface';\nexport * from './esolve-range-filter-record.interface';\nexport * from './esolve-select-filter-record.interface';\nexport * from './esolve-select-filter.interface';\nexport * from './esolve-generic-filter-definition.interface';\nexport * from './esolve-range-filter-definition.interface';\n","// Types\nexport * from './esolve-filter-list.type';\nexport * from './esolve-filter-record-list.type';\nexport * from './esolve-filter-type.type';\nexport * from './esolve-filter-toggle.type';\nexport * from './esolve-range-filter-type.type';\nexport * from './esolve-select-filter-type.type';\n","import { HttpParams } from '@angular/common/http';\n\nimport {\n EsolveGenericFilter,\n EsolveMultipleSelectFilter,\n EsolveRangeFilter,\n EsolveSingleSelectFilter,\n EsolveToggleFilter,\n} from './classes';\nimport {\n EsolveFilter,\n EsolveFilterDefinitions,\n EsolveGenericFilterDefinition,\n EsolveRangeFilterDefinition,\n} from './interfaces';\n\nfunction isGeneric(\n value: EsolveRangeFilterDefinition | EsolveGenericFilterDefinition,\n): value is EsolveGenericFilterDefinition {\n return 'type' in value && 'value' in value;\n}\n\nexport function createGenericWithValue(\n field: string,\n definition: EsolveGenericFilterDefinition,\n): EsolveGenericFilter {\n return new EsolveGenericFilter(field, definition);\n}\n\nexport function createRangeWithValue(\n field: string,\n min = 0,\n max = 0,\n): EsolveRangeFilter {\n const filter = new EsolveRangeFilter(field);\n filter.setValue(min, max);\n\n return filter;\n}\n\nexport function createSingleSelectWithValue(\n field: string,\n value: string | number,\n): EsolveSingleSelectFilter {\n const filter = new EsolveSingleSelectFilter(field, value);\n\n return filter;\n}\n\nexport function createToggleSelectWithValue(\n field: string,\n value: boolean,\n): EsolveToggleFilter {\n const filter = new EsolveToggleFilter(field, value);\n\n return filter;\n}\n\nexport function createMultipleSelectWithValue(\n field: string,\n value: (string | number)[],\n): EsolveMultipleSelectFilter {\n const filter = new EsolveMultipleSelectFilter(field);\n filter.setValue(value);\n\n return filter;\n}\n\nexport function covertFromObj(obj: EsolveFilterDefinitions): EsolveFilter[] {\n const filters: EsolveFilter[] = [];\n\n for (const field in obj) {\n const value = obj[field];\n let filter = null;\n\n if (Array.isArray(value)) {\n filter = createMultipleSelectWithValue(field, value);\n } else if (typeof value === 'object') {\n if (isGeneric(value)) {\n filter = createGenericWithValue(field, value);\n } else {\n filter = createRangeWithValue(field, value.min, value.max);\n }\n } else if (typeof value === 'boolean') {\n filter = createToggleSelectWithValue(field, value);\n } else {\n filter = createSingleSelectWithValue(field, value);\n }\n\n if (filter) {\n filters.push(filter);\n }\n }\n\n return filters;\n}\n\nexport function convertToHttpParams(filters: EsolveFilter[]): {\n [x: string]: string | number | (string | number)[];\n};\n\nexport function convertToHttpParams(\n filters: EsolveFilter[],\n http_params: HttpParams,\n): HttpParams;\n\nexport function convertToHttpParams(\n filters: EsolveFilter[],\n http_params?: HttpParams,\n): HttpParams | { [x: string]: string | number | (string | number)[] } {\n if (http_params) {\n for (const filter of filters) {\n http_params = filter.toHttpParams(http_params);\n }\n\n return http_params;\n }\n\n let params = {};\n\n for (const filter of filters) {\n params = {\n ...params,\n ...filter.toHttpParams(),\n };\n }\n\n return params;\n}\n","import { EsolveResponseLogItem, EsolvePostResponseItem } from '../interfaces';\n\nexport class EsolveResponseResult {\n public success_log: EsolveResponseLogItem[] = [];\n public error_log: EsolveResponseLogItem[] = [];\n\n constructor(response: EsolvePostResponseItem) {\n this.error_log.push(\n ...response.log.filter((log_item) => log_item.type === 'error'),\n );\n this.success_log.push(\n ...response.log.filter((log_item) => log_item.type === 'success'),\n );\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { EsolveResponseResult } from './classes';\nimport { EsolvePostResponseItem, EsolveSetResponse } from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveResponseHandlerService {\n /**\n * Parse single HTTP response\n *\n * @param http_response HTTP Response to eSolve service\n * @param resultHandler Function to parse response to a result\n *\n * @returns Parsed result of response\n */\n public validateSingleHttpResponse<\n R extends EsolveResponseResult,\n T extends EsolvePostResponseItem,\n >(\n http_response: EsolveSetResponse<T>,\n resultHandler: (response: T) => R,\n ): R {\n if (\n http_response.responses === undefined ||\n http_response.responses.length <= 0\n ) {\n throw http_response;\n }\n\n const response = http_response.responses[0];\n\n if (\n response.status.state === 'error' ||\n response.status.state === 'none'\n ) {\n throw response;\n }\n\n return resultHandler(response);\n }\n}\n","// Types\nexport * from './esolve-sort-order.type';\n// Interfaces\nexport * from './esolve-sort.interface';\n","/**\n * Generates a short hexadecimal hash that will be used to indicate a change in\n * state.\n *\n * NOTE: Not to be confused with an actual hash checksum, like MD5 or SHA256.\n * It should only be used to indicate that a state has changed. It should not be\n * used for encryption.\n *\n * @param values Raw strings and numbers to hash\n *\n * @returns Hexadecimal hash value\n */\nexport function esolveHexHash(...values: (string | number)[]): string {\n // Add an extra value to pad out hash\n values.push('esolve_eurus');\n\n // Create a string from the values\n const string = values.join('::');\n\n let hash = 0;\n\n for (let x = 0; x < string.length; x++) {\n const ch = string.charCodeAt(x);\n hash = (hash << 5) - hash + ch;\n hash = hash & hash;\n }\n\n return Math.abs(hash).toString(16);\n}\n","export class EsolveList<T> {\n constructor(\n public items: T[] = [],\n public page: number = 0,\n public rows: number = 0,\n public total: number = 0,\n ) {}\n}\n","export class EsolveResult {\n constructor(\n public status: string,\n public code: string,\n public message: string,\n ) {}\n}\n","import { Injectable, PLATFORM_ID, inject } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport {\n BehaviorSubject,\n Observable,\n Subject,\n switchMap,\n takeUntil,\n timer,\n combineLatest,\n map,\n shareReplay,\n filter,\n distinctUntilChanged,\n debounceTime,\n} from 'rxjs';\n\nimport { fromUnixTime } from 'date-fns';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveCookieService } from '../shared/cookie';\nimport { esolveHexHash } from '../shared/esolve-hex-hash.function';\nimport { EsolveSession } from './interfaces';\n\ninterface SessionUpdateOptions {\n user_id?: number;\n location_id?: number;\n addresses_id?: number;\n shipping_id?: number;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveSessionService {\n private readonly is_browser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly config = inject(EsolveConfigService);\n private readonly cookieService = inject(EsolveCookieService);\n\n private token$ = new BehaviorSubject<string>('');\n private user_id$ = new BehaviorSubject<number>(0);\n private access_level$ = new BehaviorSubject<number>(0);\n private location_id$ = new BehaviorSubject<number>(0);\n private addresses_id$ = new BehaviorSubject<number>(0);\n private shipping_id$ = new BehaviorSubject<number>(0);\n private state_hash = '';\n\n private _session: Observable<EsolveSession>;\n\n private storage_key = '';\n\n /* These are RxJS subjects used for managing the expiration of the user session. */\n private timer_start = new Subject<number | Date>();\n private timer_stop = new Subject<void>();\n private expire = new Subject<void>();\n private session_end = new Subject<void>();\n\n constructor() {\n this.setStorageKey();\n this._session = this.initSession();\n\n this.getSession()\n .pipe(\n map(({ token, user_id, location_id }) => {\n return esolveHexHash(token, user_id, location_id);\n }),\n )\n .subscribe((hash) => {\n this.state_hash = hash;\n });\n\n this.timer_start\n .pipe(\n switchMap((time) => {\n return timer(time).pipe(takeUntil(this.timer_stop));\n }),\n )\n .subscribe(() => {\n // Stored time expired. Check if session is valid\n this.session_end.next();\n });\n\n // Kill session and reset state\n this.onExpire().subscribe(() => {\n this.reset();\n });\n }\n\n private initSession(): Observable<EsolveSession> {\n const session = {\n token: this.onTokenUpdate(),\n user_id: this.onUserIdUpdate(),\n access_level: this.onAccessLevelUpdate(),\n location_id: this.onLocationIdUpdate(),\n addresses_id: this.onAddressesIdUpdate(),\n shipping_id: this.onShippingIdUpdate(),\n };\n\n return combineLatest(session).pipe(\n // Delays the emit only slightly incase multiple values are set\n debounceTime(10),\n shareReplay(1),\n );\n }\n\n public isValid() {\n return this.getToken() !== '';\n }\n\n public getSession(): Observable<EsolveSession> {\n return this._session;\n }\n\n public getSessionValue(): EsolveSession {\n return {\n token: this.token$.getValue(),\n user_id: this.user_id$.getValue(),\n access_level: this.access_level$.getValue(),\n location_id: this.location_id$.getValue(),\n addresses_id: this.addresses_id$.getValue(),\n shipping_id: this.shipping_id$.getValue(),\n };\n }\n\n public onSessionEnd(): Observable<void> {\n return this.session_end.asObservable();\n }\n\n public onExpire(): Observable<void> {\n return this.expire.asObservable();\n }\n\n public expireSession(): void {\n this.expire.next();\n }\n\n public getToken(): string {\n return this.token$.getValue();\n }\n\n public onTokenUpdate(): Observable<string> {\n return this.token$.asObservable().pipe(\n filter((token) => token !== ''),\n distinctUntilChanged(),\n );\n }\n\n public updateToken(token: string): void {\n this.token$.next(token);\n }\n\n public getUserId(): number {\n return this.user_id$.getValue();\n }\n\n public getAccessLevel(): number {\n return this.access_level$.getValue();\n }\n\n public onUserIdUpdate(): Observable<number> {\n return this.user_id$.asObservable().pipe(distinctUntilChanged());\n }\n\n public onAccessLevelUpdate(): Observable<number> {\n return this.access_level$.asObservable().pipe(distinctUntilChanged());\n }\n\n public updateUserId(user_id: number): void {\n this.user_id$.next(user_id);\n }\n\n public updateAccessLevel(access_level: number) {\n this.access_level$.next(access_level);\n }\n\n public getLocationId(): number {\n return this.location_id$.getValue();\n }\n\n public onLocationIdUpdate(): Observable<number> {\n return this.location_id$.asObservable().pipe(distinctUntilChanged());\n }\n\n public updateLocationId(location_id: number): void {\n this.location_id$.next(location_id);\n }\n\n public getAddressesId(): number {\n return this.addresses_id$.getValue();\n }\n\n public onAddressesIdUpdate(): Observable<number> {\n return this.addresses_id$.asObservable().pipe(distinctUntilChanged());\n }\n\n public updateAddressesId(addresses_id: number): void {\n this.addresses_id$.next(addresses_id);\n }\n\n public getShippingId(): number {\n return this.shipping_id$.getValue();\n }\n\n public onShippingIdUpdate(): Observable<number> {\n return this.shipping_id$.asObservable().pipe(distinctUntilChanged());\n }\n\n public updateShippingId(shipping_id: number): void {\n this.shipping_id$.next(shipping_id);\n }\n\n public getStateHash(): string {\n return this.state_hash;\n }\n\n public stopTimer(): void {\n this.timer_stop.next();\n }\n\n public startTimer(time: number | Date): void {\n this.timer_start.next(time);\n }\n\n public getCachedSession(): string | null {\n return this.getCache();\n }\n\n public reset(): void {\n this.removeCache();\n this.timer_stop.next();\n }\n\n public handleSession(\n session: EsolveSession,\n expiry_date_unix: number,\n grace_unix: number,\n ): void {\n const expiry_date = fromUnixTime(expiry_date_unix);\n const grace_expiry_date = fromUnixTime(expiry_date_unix + grace_unix);\n\n this.setCache(session.token, grace_expiry_date);\n this.updateUserId(session.user_id);\n this.updateAccessLevel(session.access_level);\n this.updateLocationId(session.location_id);\n this.updateAddressesId(session.addresses_id);\n this.updateShippingId(session.shipping_id);\n // Update token last to make sure session is correctly checked\n this.updateToken(session.token);\n\n this.startTimer(expiry_date);\n }\n\n public handleUpdateSession({\n user_id,\n location_id,\n addresses_id,\n shipping_id,\n }: SessionUpdateOptions): void {\n if (typeof user_id !== 'undefined') {\n this.updateUserId(user_id);\n }\n\n if (typeof location_id !== 'undefined') {\n this.updateLocationId(location_id);\n }\n\n if (typeof addresses_id !== 'undefined') {\n this.updateAddressesId(addresses_id);\n }\n\n if (typeof shipping_id !== 'undefined') {\n this.updateShippingId(shipping_id);\n }\n }\n\n private setStorageKey(): void {\n if (\n typeof this.config.session_storage_key === 'string' &&\n this.config.session_storage_key !== ''\n ) {\n this.storage_key = this.config.session_storage_key;\n }\n }\n\n private getCache(): string | null {\n const data = this.cookieService.get(this.storage_key);\n\n if (data !== '') {\n return data;\n }\n\n if (!this.is_browser || !localStorage) {\n return null;\n }\n\n return localStorage.getItem(this.storage_key);\n }\n\n private setCache(data: string, expiration_date?: Date): void {\n this.cookieService.set(this.storage_key, data, expiration_date, '/');\n\n if (!this.is_browser || !localStorage) {\n return;\n }\n\n localStorage.setItem(this.storage_key, data);\n }\n\n private removeCache(): void {\n this.cookieService.delete(this.storage_key, '/');\n\n if (!this.is_browser || !localStorage) {\n return;\n }\n\n localStorage.removeItem(this.storage_key);\n }\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveErrorHandlerService } from '../shared/errors';\nimport { EsolveResult } from '../shared/esolve-result.model';\nimport {\n EsolveDeleteResponse,\n EsolveGetResponse,\n EsolvePostResponseItem,\n EsolveResponseHandlerService,\n EsolveResponseResult,\n EsolveSetResponse,\n} from '../shared/response';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveSessionMetadataService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n public set(type: string, metadata: any): Observable<EsolveResponseResult> {\n return this.http\n .post<EsolveSetResponse<EsolvePostResponseItem>>(\n `${this.config.api_url}/set-sessions-metadata.php`,\n metadata,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n params: { type },\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveResponseResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-sessions-metadata',\n errorRes,\n );\n }),\n );\n }\n\n public get<T>(type: string): Observable<T> {\n return this.http\n .get<EsolveGetResponse<T>>(\n `${this.config.api_url}/get-sessions-metadata.php`,\n {\n params: { type },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n (Array.isArray(response.records) &&\n response.records.length === 0)\n ) {\n throw response;\n }\n\n return response.records as T;\n }),\n );\n }\n\n public delete(type: string): Observable<EsolveResult> {\n return this.http\n .delete<EsolveDeleteResponse>(\n `${this.config.api_url}/delete-sessions-metadata.php`,\n {\n params: { type },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) => {\n if (\n http_response.result === undefined ||\n http_response.result === null ||\n http_response.result.status !== 'success'\n ) {\n throw http_response;\n }\n\n return new EsolveResult(\n http_response.result.status,\n http_response.result.code,\n http_response.result.message,\n );\n }),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpDeleteError(\n 'delete-sessions-metadata',\n errorRes,\n );\n }),\n );\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport {\n HttpClient,\n HttpParams,\n HttpErrorResponse,\n HttpHeaders,\n} from '@angular/common/http';\n\nimport { firstValueFrom, Observable, of, throwError } from 'rxjs';\nimport { tap, catchError, map, switchMap } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveErrorHandlerService } from '../shared';\n\nimport { EsolveSessionService } from '../session';\n\nimport {\n EsolveAuthGetResponse,\n EsolveAuthCheckResponse,\n EsolveAuthResult,\n EsolveLoginResponse,\n} from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveAuthService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly session = inject(EsolveSessionService);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n\n constructor() {\n this.session\n .onSessionEnd()\n .pipe(\n switchMap(() => this.checkAccessToken()),\n catchError(() => of(null)),\n )\n .subscribe((result) => {\n if (result) {\n this.handleAuthentication(result);\n } else {\n this.session.expireSession();\n }\n });\n\n this.session.onExpire().subscribe(() => {\n this.logout().catch(() => {\n // Deal with error gracefully\n });\n });\n }\n\n public getAccessToken(\n email: string,\n password: string,\n anonymous = false,\n ): Observable<EsolveAuthGetResponse> {\n let params = new HttpParams();\n\n if (anonymous) {\n params = params.set('anonymous', true);\n }\n\n if (email !== '') {\n params = params.set('email', email);\n }\n\n if (password !== '') {\n params = params.set('password', password);\n }\n\n return this.http\n .get<EsolveAuthGetResponse>(\n `${this.config.api_url}/get-access-token.php`,\n {\n params,\n headers: new HttpHeaders({\n 'Accept-Language': '*',\n }),\n },\n )\n .pipe(\n tap((response) => {\n if (\n response.type === 'error' ||\n response.type === 'exception'\n ) {\n throw response;\n }\n }),\n catchError(this.handleError),\n tap((response) => {\n this.handleAuthentication(response.additional_data);\n }),\n );\n }\n\n public getAnonymousSession(): Observable<EsolveAuthGetResponse> {\n return this.getAccessToken('', '', true);\n }\n\n public async autoLogin(): Promise<void> {\n let result = await this.restore();\n\n try {\n if (!result) {\n const response = await firstValueFrom(\n this.getAnonymousSession(),\n );\n\n result = response.additional_data;\n }\n\n this.handleAuthentication(result);\n } catch (error) {\n console.error(error);\n }\n }\n\n public login(email: string, password: string): Observable<number> {\n const body = {\n login: {\n email,\n password,\n },\n };\n\n return this.http\n .post<EsolveLoginResponse>(\n `${this.config.api_url}/set-login.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((response) => {\n if (\n response.responses === undefined ||\n response.responses.length <= 0\n ) {\n throw response;\n }\n\n const login_response = response.responses[0];\n const result = response.additional_data;\n\n if (\n login_response.status.state !== 'success' &&\n login_response.status.state !== 'warning'\n ) {\n throw login_response;\n }\n\n for (const response_log of login_response.log) {\n if (\n response_log.type === 'success' &&\n response_log.message_code === 'login_success'\n ) {\n const user_id = +login_response.esolve_id;\n\n if (Array.isArray(result)) {\n throw new Error('Invalid login');\n }\n\n this.handleAuthentication({\n key: result.key,\n user_id: result.user_id,\n access_level: result.access_level,\n location_id: result.location_id,\n addresses_id: result.addresses_id,\n shipping_id: result.shipping_id,\n expires: result.expires,\n expiry_time: result.expiry_time,\n grace_period: result.grace_period,\n });\n\n return user_id;\n }\n }\n\n throw login_response;\n }),\n catchError((errorRes: HttpErrorResponse) => {\n return this.errorHandler.handleHttpPostError(\n 'set-login',\n errorRes,\n );\n }),\n );\n }\n\n public async logout(): Promise<EsolveAuthGetResponse> {\n this.session.stopTimer();\n\n const response = await firstValueFrom(\n this.getAccessToken('', '', true),\n );\n\n return response;\n }\n\n public async validateCachedTokens(): Promise<boolean> {\n let valid = false;\n\n try {\n const session = this.session.getCachedSession();\n\n if (!session) {\n throw new Error('Invalid session');\n }\n\n const result = await this.checkAccessToken(session);\n\n if (!result.key) {\n throw new Error('Invalid key');\n }\n\n valid = true;\n } catch (error) {\n this.session.reset();\n }\n\n return valid;\n }\n\n private async checkAccessToken(\n token = this.session.getToken(),\n ): Promise<EsolveAuthResult> {\n if (token === '') {\n throw new Error('Invalid Token');\n }\n\n const response = await firstValueFrom(\n this.http.get<EsolveAuthCheckResponse>(\n `${this.config.api_url}/get-access-token.php`,\n {\n headers: new HttpHeaders({\n 'Accept-Language': '*',\n Authorization: `Bearer ${token}`,\n }),\n },\n ),\n );\n\n if (response.type === 'error' || response.type === 'exception') {\n throw response;\n }\n\n const additional_data = response.additional_data;\n\n if (!additional_data.key_okay) {\n throw response;\n }\n\n if (additional_data.key) {\n token = additional_data.key;\n }\n\n const result: EsolveAuthResult = {\n key: token,\n expires: +additional_data.expires,\n expiry_time: +additional_data.expiry_time,\n grace_period: +additional_data.grace_period,\n location_id: +additional_data.location_id,\n user_id: +additional_data.user_id,\n access_level: +additional_data.access_level,\n addresses_id: +additional_data.addresses_id,\n shipping_id: +additional_data.shipping_id,\n };\n\n return result;\n }\n\n private async restore(): Promise<EsolveAuthResult | null> {\n try {\n const token = this.session.getCachedSession();\n\n if (!token) {\n throw new Error('Invalid token');\n }\n\n const result = await this.checkAccessToken(token);\n\n return result;\n } catch (error) {\n this.session.reset();\n }\n\n return null;\n }\n\n // Handlers\n\n public handleExternalAuthentication(result: EsolveAuthResult): void {\n this.handleAuthentication(result);\n }\n\n private handleAuthentication(result: EsolveAuthResult): void {\n if (!result.key) {\n return;\n }\n\n this.session.handleSession(\n {\n token: result.key,\n user_id: +result.user_id,\n access_level: +result.access_level,\n location_id: +result.location_id,\n addresses_id: +result.addresses_id,\n shipping_id: +result.shipping_id,\n },\n +result.expiry_time,\n +result.grace_period,\n );\n }\n\n private handleError(\n errorRes: EsolveAuthGetResponse | EsolveAuthCheckResponse,\n ): Observable<never> {\n const error = {\n message: 'An unknown error occurred',\n data: {},\n };\n\n if (!errorRes.type || !errorRes.service_type || !errorRes.message) {\n return throwError(() => error);\n }\n\n if (errorRes.message.trim() !== '') {\n error.message = errorRes.message;\n }\n\n if (errorRes.additional_data) {\n error.data = errorRes.additional_data;\n }\n\n return throwError(() => error);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport {\n HttpInterceptor,\n HttpRequest,\n HttpHandler,\n HttpEvent,\n} from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\n\nimport { EsolveSessionService } from '../session';\nimport { EsolveConfigService } from '../core';\n\n@Injectable()\nexport class EsolveAuthInterceptorService implements HttpInterceptor {\n private readonly config = inject(EsolveConfigService);\n private readonly session = inject(EsolveSessionService);\n\n public intercept(\n req: HttpRequest<any>,\n next: HttpHandler,\n ): Observable<HttpEvent<any>> {\n if (req.url.startsWith(`${this.config.api_url}/`)) {\n const service_identifier = req.url.replace(\n `${this.config.api_url}/`,\n '',\n );\n\n const modified_url = req.url;\n let params = req.params;\n let headers = req.headers;\n\n if (this.session.isValid()) {\n if (service_identifier !== 'get-access-token.php') {\n headers = headers.set(\n 'Authorization',\n `Bearer ${this.session.getToken()}`,\n );\n }\n\n const state_hash = this.session.getStateHash();\n headers = headers.set('X-Esolve-State-Hash', state_hash);\n }\n\n params = params.set('ws_id', this.config.wsid);\n\n if (this.config.native && this.config.device_designation) {\n headers = headers.set(\n 'X-Device-Designation',\n this.config.device_designation,\n );\n }\n\n const modified_req = req.clone({\n url: modified_url,\n params,\n headers,\n });\n\n return next.handle(modified_req);\n }\n\n return next.handle(req);\n }\n}\n","import { EsolveOtpRecord } from '../interfaces';\n\nexport class EsolveOtp {\n public otp_generated = false;\n public otp_key = '';\n public otp_sms_sent = false;\n public otp_expiry?: Date;\n public sms_response = '';\n\n constructor(record: EsolveOtpRecord) {\n this.otp_generated = record.otp_generated;\n this.otp_key = record.otp_key;\n this.otp_sms_sent = record.otp_sms_sent;\n this.otp_expiry = new Date(+record.otp_expiry * 1000);\n this.sms_response = record.sms_response;\n }\n}\n","import {\n EsolveLoginPostResponseItem,\n EsolveOtpValidationRecord,\n} from '../interfaces';\nimport { EsolveOtpAction } from '../types';\n\nexport class EsolveOtpValidation {\n public otp_action: EsolveOtpAction = '';\n public otp_valid?: boolean;\n public otp_deleted?: boolean;\n public login_success?: boolean;\n public login_response?: EsolveLoginPostResponseItem;\n\n constructor(record: EsolveOtpValidationRecord) {\n this.otp_action = this.getAction(record.otp_action);\n this.otp_valid = record.otp_valid;\n this.otp_deleted = record.otp_deleted;\n this.login_success = record.login_success;\n this.login_response = record.login_response;\n }\n\n private getAction(otp_action?: string): EsolveOtpAction {\n if (otp_action === undefined) {\n return '';\n }\n\n if (otp_action !== 'login') {\n return '';\n }\n\n return otp_action;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { Observable, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared';\n\nimport { EsolveOtpAction, EsolveValidateOtpResponse } from './types';\nimport { EsolveOtpRecord } from './interfaces';\nimport { EsolveOtp, EsolveOtpValidation } from './models';\nimport { EsolveAuthService } from './esolve-auth.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveOtpService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly auth = inject(EsolveAuthService);\n\n public getOtp(recipient_number?: string): Observable<EsolveOtp> {\n let params = new HttpParams();\n\n if (recipient_number) {\n params = params.set('recipient_number', recipient_number);\n }\n\n try {\n return this.http\n .get<EsolveGetResponse<EsolveOtpRecord>>(\n `${this.config.api_url}/get-otp.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n return new EsolveOtp(response.records);\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n public getValidateOtp(\n otp_key: string,\n otp_code: string,\n otp_action: EsolveOtpAction = '',\n email = '',\n cellnumber = '',\n ): Observable<EsolveOtpValidation> {\n try {\n return this.http\n .get<EsolveValidateOtpResponse>(\n `${this.config.api_url}/get-otp-validation.php`,\n {\n params: {\n otp_key,\n otp_code,\n otp_action,\n email,\n cellnumber,\n },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n const additional_data = response.additional_data;\n\n if (\n !Array.isArray(additional_data) &&\n additional_data.key\n ) {\n this.auth.handleExternalAuthentication(\n additional_data,\n );\n }\n\n return new EsolveOtpValidation(response.records);\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n}\n","import { APP_INITIALIZER, Provider } from '@angular/core';\n\nimport { EsolveAuthService } from '../esolve-auth.service';\n\nexport const ESOLVE_EURUS_AUTO_LOGIN: Provider = {\n provide: APP_INITIALIZER,\n multi: true,\n deps: [EsolveAuthService],\n useFactory: (auth: EsolveAuthService) => async () => {\n await auth.autoLogin();\n\n return true;\n },\n};\n","import {\n HTTP_INTERCEPTORS,\n provideHttpClient,\n withInterceptorsFromDi,\n} from '@angular/common/http';\nimport { EnvironmentProviders, Provider } from '@angular/core';\n\nimport { SsrCookieService } from 'ngx-cookie-service-ssr';\n\nimport {\n EsolveAuthInterceptorService,\n ESOLVE_EURUS_AUTO_LOGIN,\n} from '../../auth';\n\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\nimport { EsolveConnectConfig } from '../esolve-connect-config.interface';\n\nexport function provideNgEsolveConnect(\n config: EsolveConnectConfig,\n auto_login = false,\n): (Provider | EnvironmentProviders)[] {\n const providers: (Provider | EnvironmentProviders)[] = [\n SsrCookieService,\n {\n provide: ESOLVE_CONNECT_CONFIG,\n useValue: config,\n },\n {\n provide: HTTP_INTERCEPTORS,\n useClass: EsolveAuthInterceptorService,\n multi: true,\n },\n provideHttpClient(withInterceptorsFromDi()),\n ];\n\n if (auto_login) {\n providers.push(ESOLVE_EURUS_AUTO_LOGIN);\n }\n\n return providers;\n}\n","import { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { EsolveConnectConfig, provideNgEsolveConnect } from './core';\n\n@NgModule({\n imports: [CommonModule, HttpClientModule],\n})\nexport class NgEsolveConnectModule {\n public static forRoot(\n config: EsolveConnectConfig,\n auto_login = false,\n ): ModuleWithProviders<NgEsolveConnectModule> {\n return {\n ngModule: NgEsolveConnectModule,\n providers: provideNgEsolveConnect(config, auto_login),\n };\n }\n}\n","export function isEsolveCdnPath(path: string): boolean {\n const cdn_regex =\n /^\\/?images\\/(?:stock|media|news|assets|banners|documents|manufacturers|ranges|categories|subcategories|tags|specials)\\//;\n\n return cdn_regex.test(path);\n}\n","export function isFtgCdnPath(path: string): boolean {\n const cdn_regex = /^\\/?images\\/(?:stock)\\//;\n\n return cdn_regex.test(path);\n}\n","export function isLegacyEsolveCdnPath(path: string): boolean {\n const cdn_regex =\n /^\\/?images\\/(?:media|news|assets|banners|documents|manufacturers|ranges|categories|subcategories|tags|specials)\\//;\n\n return cdn_regex.test(path);\n}\n","import { isEsolveCdnPath } from './is-esolve-cdn-path.function';\nimport { isFtgCdnPath } from './is-ftg-cdn-path.function';\nimport { isLegacyEsolveCdnPath } from './is-legacy-esolve-cdn-path.function';\n\nfunction isAbsoluteUrl(src: string): boolean {\n return /^https?:\\/\\//.test(src);\n}\nfunction normalizePath(path: string): string {\n return path.endsWith('/') ? path.slice(0, -1) : path;\n}\n\nfunction normalizeSrc(src: string): string {\n return src.startsWith('/') ? src.slice(1) : src;\n}\n\nexport function processEsolveImageSrc(\n src: string,\n cdn_url = '',\n legacy_cdn_url = '',\n ftg_cdn?: string,\n) {\n if (isAbsoluteUrl(src)) {\n return src;\n }\n\n cdn_url = normalizePath(cdn_url);\n legacy_cdn_url = normalizePath(legacy_cdn_url);\n\n if (cdn_url === '') {\n return src;\n }\n\n if (legacy_cdn_url === '') {\n legacy_cdn_url = cdn_url;\n }\n\n if (!isEsolveCdnPath(src)) {\n return src;\n }\n\n src = normalizeSrc(src);\n\n if (isLegacyEsolveCdnPath(src)) {\n return `${legacy_cdn_url}/${src}`;\n }\n\n if (ftg_cdn && isFtgCdnPath(src)) {\n ftg_cdn = normalizePath(ftg_cdn);\n\n return `${ftg_cdn}/${src}`;\n }\n\n return `${cdn_url}/${src}`;\n}\n","import { ImageLoaderConfig, IMAGE_LOADER } from '@angular/common';\nimport { Provider } from '@angular/core';\n\nimport { EsolveConfigService } from '../core';\nimport { processEsolveImageSrc } from './functions';\n\nconst ESOLVE_IMAGE_LOADER_PROVIDER: Provider = {\n provide: IMAGE_LOADER,\n useFactory: (esolveConfig: EsolveConfigService) => {\n return (config: ImageLoaderConfig) => {\n return processEsolveImageSrc(\n config.src,\n esolveConfig.cdn,\n esolveConfig.legacy_cdn,\n esolveConfig.ftg_cdn,\n );\n };\n },\n deps: [EsolveConfigService],\n};\n\nexport function provideEsolveImageLoader(): Provider {\n return ESOLVE_IMAGE_LOADER_PROVIDER;\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n Input,\n OnChanges,\n inject,\n} from '@angular/core';\n\nimport { EsolveConfigService } from '../../core';\nimport { processEsolveImageSrc } from '../functions';\n\n/**\n * An alternative to optimised images to load a new image\n */\n@Directive({\n selector: '[eslvCdnSrc]',\n standalone: true,\n})\nexport class EsolveCdnSrcDirective implements OnChanges {\n private readonly el = inject(\n ElementRef<HTMLImageElement | HTMLSourceElement>,\n );\n private readonly config = inject(EsolveConfigService);\n\n @Input('eslvCdnSrc') public src = '';\n private no_image = false;\n private error_image_path = '/assets/no_image.jpg';\n\n constructor() {\n if (this.config.error_image_path) {\n this.error_image_path = this.config.error_image_path;\n }\n\n if (this.isImage(this.el.nativeElement)) {\n this.el.nativeElement.loading = 'lazy';\n }\n }\n\n public ngOnChanges(): void {\n this.init();\n }\n\n @HostListener('error')\n public onError() {\n this.setErrorImage();\n }\n\n public init(): void {\n this.no_image = false;\n\n if (this.src === '') {\n this.setErrorImage();\n\n return;\n }\n\n const image_src = processEsolveImageSrc(\n this.src,\n this.config.cdn,\n this.config.legacy_cdn,\n this.config.ftg_cdn,\n );\n\n this.setSrc(image_src);\n }\n\n private setSrc(src: string) {\n if (this.isImage(this.el.nativeElement)) {\n this.el.nativeElement.src = src;\n } else {\n this.el.nativeElement.srcset = src;\n }\n }\n\n private setErrorImage() {\n if (this.no_image) {\n return;\n }\n\n this.setSrc(this.error_image_path);\n this.no_image = true;\n }\n\n private isImage(\n el: HTMLImageElement | HTMLSourceElement,\n ): el is HTMLImageElement {\n return 'loading' in this.el.nativeElement;\n }\n}\n","/**\n * Search Engine Optimization information.\n */\nexport class EsolveSeoInfo {\n constructor(\n public title: string = '',\n public description: string = '',\n public keywords: string = '',\n public canonical_url: string = '',\n ) {}\n}\n","import { Injectable, inject } from '@angular/core';\nimport { Meta, Title } from '@angular/platform-browser';\nimport { DOCUMENT } from '@angular/common';\n\nimport { EsolveConfigService } from '../core';\n\nimport { EsolveSeoInfo } from './classes';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveSeoService {\n private readonly config = inject(EsolveConfigService);\n private readonly title = inject(Title);\n private readonly meta = inject(Meta);\n private readonly dom = inject(DOCUMENT);\n\n private title_prefix = '';\n private title_suffix = '';\n private title_separator = '|';\n\n private default_seo_title = '';\n private default_seo_description = '';\n private default_seo_keywords = '';\n private default_seo_url = '';\n\n constructor() {\n this.init();\n }\n\n /**\n * Sets SEO tags for page\n * @param seoInfo SEO object\n */\n public setTags(seoInfo: EsolveSeoInfo): void {\n seoInfo = this.validateAndSanitizeSeoInfo(seoInfo);\n\n this.setPageTitleTags(seoInfo.title);\n this.setPageDescriptionTags(seoInfo.description);\n this.setPageKeywordsTags(seoInfo.keywords);\n this.setPageCanonicalUrl(seoInfo.canonical_url);\n }\n\n private init(): void {\n this.title_prefix = this.config.title_prefix;\n this.title_suffix = this.config.title_suffix;\n this.title_separator = this.config.title_separator;\n this.default_seo_title = this.config.default_seo_title;\n this.default_seo_description = this.config.default_seo_description;\n this.default_seo_keywords = this.config.default_seo_keywords;\n this.default_seo_url = this.config.site_url;\n }\n\n private setPageTitleTags(title: string): void {\n this.title.setTitle(title);\n this.meta.updateTag({ property: 'og:title', content: title });\n }\n\n private setPageDescriptionTags(description: string): void {\n this.meta.updateTag({ name: 'description', content: description });\n this.meta.updateTag({\n property: 'og:description',\n content: description,\n });\n }\n\n private setPageKeywordsTags(keywords: string): void {\n this.meta.updateTag({ name: 'keywords', content: keywords });\n }\n\n private setPageCanonicalUrl(canonical_url: string): void {\n const head = this.dom.head;\n let element = this.dom.querySelector<HTMLLinkElement>(\n `link[rel='canonical']`,\n );\n\n if (!element) {\n element = this.dom.createElement('link');\n element.setAttribute('rel', 'canonical');\n head.appendChild(element);\n }\n\n element.setAttribute('href', canonical_url);\n }\n\n private validateAndSanitizeSeoInfo(seo_info: EsolveSeoInfo): EsolveSeoInfo {\n const pageSeo = new EsolveSeoInfo(\n this.default_seo_title,\n this.default_seo_description,\n this.default_seo_keywords,\n this.default_seo_url,\n );\n\n if (seo_info.description.trim() !== '') {\n pageSeo.description = seo_info.description;\n }\n\n if (seo_info.title.trim() !== '') {\n const titlePartsArray = [];\n\n if (this.title_prefix !== '') {\n titlePartsArray.push(this.title_prefix);\n\n if (this.title_separator !== '') {\n titlePartsArray.push(this.title_separator);\n }\n }\n\n titlePartsArray.push(seo_info.title);\n\n if (this.title_suffix !== '') {\n if (this.title_separator !== '') {\n titlePartsArray.push(this.title_separator);\n }\n\n titlePartsArray.push(this.title_suffix);\n }\n\n pageSeo.title = titlePartsArray.join(' ');\n\n if (seo_info.keywords.trim() === '') {\n const clean_title = seo_info.title\n .replace(/[^a-z0-9. ]+/gi, '')\n .trim();\n const keywords = clean_title.split(' ');\n const clean_keywords: string[] = [];\n\n for (let keyword of keywords) {\n keyword = keyword.trim();\n if (keyword.length > 2) {\n keyword = keyword.toLocaleLowerCase();\n if (!clean_keywords.includes(keyword)) {\n clean_keywords.push(keyword);\n }\n }\n }\n\n seo_info.keywords = clean_keywords.join(',');\n }\n }\n\n if (seo_info.keywords.trim() !== '') {\n pageSeo.keywords = seo_info.keywords;\n }\n\n if (seo_info.canonical_url.trim() !== '') {\n pageSeo.canonical_url = seo_info.canonical_url;\n }\n\n return pageSeo;\n }\n}\n","export class EsolveGeocodeAddressResult {\n constructor(\n public street_number: string,\n public street: string,\n public suburb: string,\n public city: string,\n public province: string,\n public country: string,\n public postal_code: string,\n ) {}\n}\n","export class EsolveGeocodeCoordsResult {\n constructor(\n public latitude: number,\n public longitude: number,\n ) {}\n}\n","import { EsolveGeocodeAddressResult } from './esolve-geocode-address-result.model';\nimport { EsolveGeocodeCoordsResult } from './esolve-geocode-coords-result.model';\n\nexport class EsolveGeocodeResult {\n constructor(\n public formatted_address: string,\n public address: EsolveGeocodeAddressResult,\n public coords: EsolveGeocodeCoordsResult,\n public status: string,\n public checksum: string,\n public cached: boolean,\n ) {}\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport {\n EsolveGeocodeResult,\n EsolveGeocodeAddressResult,\n EsolveGeocodeCoordsResult,\n} from './classes';\nimport { EsolveGeocodeResultRecord } from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveGeocoderService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n public geocode(\n street_number: string,\n street: string,\n suburb: string,\n city: string,\n province: string,\n country: string,\n postal_code: string,\n ): Observable<EsolveGeocodeResult> {\n return this.http\n .get<EsolveGetResponse<EsolveGeocodeResultRecord>>(\n `${this.config.api_url}/get-geocode.php`,\n {\n params: {\n street_number,\n street,\n suburb,\n city,\n province,\n country,\n postal_code,\n },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n const record = response.records;\n\n return this.processGeocodeResult(record);\n }),\n );\n }\n\n public reverseGeocode(\n latitude: number,\n longitude: number,\n ): Observable<EsolveGeocodeResult> {\n return this.http\n .get<EsolveGetResponse<EsolveGeocodeResultRecord>>(\n `${this.config.api_url}/get-geocode.php`,\n {\n params: {\n latitude: latitude,\n longitude: longitude,\n },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n const record = response.records;\n\n return this.processGeocodeResult(record);\n }),\n );\n }\n\n private processGeocodeResult(\n record: EsolveGeocodeResultRecord,\n ): EsolveGeocodeResult {\n const geocode_address = new EsolveGeocodeAddressResult(\n record.address.street_number,\n record.address.street,\n record.address.suburb,\n record.address.city,\n record.address.province,\n record.address.country,\n record.address.postal_code,\n );\n\n const geocode_coords = new EsolveGeocodeCoordsResult(\n record.latitude,\n record.longitude,\n );\n\n const geocode_result = new EsolveGeocodeResult(\n record.formatted_address,\n geocode_address,\n geocode_coords,\n record.status,\n record.checksum,\n record.cached,\n );\n\n return geocode_result;\n }\n}\n","import { EsolveAssetType } from '../types';\nimport { EsolveLinkedAssetRecord } from '../interfaces';\n\nexport class EsolveLinkedAsset {\n public id: number;\n public name: string;\n public type: EsolveAssetType;\n public description: string;\n public src: string;\n\n private image_name = '';\n\n /**\n * Shortcut to `getImagePath()`\n */\n public get image_src(): string {\n return this.getImagePath();\n }\n\n constructor(record: EsolveLinkedAssetRecord) {\n this.id = +record.id;\n this.name = record.name;\n this.type = record.type;\n this.description = record.description;\n this.src = record.src;\n this.image_name = record.image_name ?? '';\n }\n\n /**\n * Retrieve image path\n *\n * @returns Image path on CDN, else empty string if no image exists\n */\n public getImagePath(): string {\n if (this.image_name !== '') {\n return `/images/documents/${this.image_name}`;\n }\n\n return '';\n }\n}\n","import { EsolveSeoDetails, EsolveSeoInfo } from '../../seo';\n\nexport class EsolveCategoryTreeItem implements EsolveSeoDetails {\n public id = '';\n public seo_details: EsolveSeoInfo;\n public total_stock?: number;\n public children?: EsolveCategoryTreeItem[];\n\n private image_path = '';\n\n public get small_image_src(): string {\n return this.getImagePath('small');\n }\n\n public get thumbnail_image_src(): string {\n return this.getImagePath('thumb');\n }\n\n public get tiny_image_src(): string {\n return this.getImagePath('tiny');\n }\n\n constructor(\n public type: 'category' | 'subcategory',\n public esolve_id: string | number,\n public parent_id: string,\n public description: string,\n public sef_description: string,\n public short_description: string,\n public sort_priority: number,\n public active: boolean,\n public display_only: boolean,\n private image_name: string,\n seo_title: string,\n seo_keywords: string,\n seo_description: string,\n children?: EsolveCategoryTreeItem[],\n ) {\n if (this.type === 'category') {\n this.id = `<<CAT>>${this.esolve_id}`;\n\n if (children != null) {\n this.children = children;\n }\n\n this.image_path = '/images/categories/';\n } else {\n this.id = `<<SUB>>${this.esolve_id}`;\n this.image_path = '/images/subcategories/';\n }\n\n if (seo_title.trim() === '') {\n seo_title = this.description;\n }\n\n this.seo_details = new EsolveSeoInfo(\n seo_title,\n seo_description,\n seo_keywords,\n );\n }\n\n public getImagePath(image_size: 'small' | 'thumb' | 'tiny'): string {\n if (this.image_name !== '') {\n return `${this.image_path}${image_size}/${this.image_name}`;\n }\n\n return '';\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { Observable, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport { EsolveCategoryTreeItem } from './classes';\nimport {\n EsolveCategoryRecord,\n EsolveSubcategoryRecord,\n EsolveCategoryTreeItemOptions,\n EsolveCategoryTreeItemRecord,\n EsolveCategoryIdentifier,\n} from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveCategoryTreeService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n /**\n * Retrieves the category tree from eSolve instance and coverts it to the correct format.\n */\n public getCategoryTree(\n identifier?: string,\n ): Observable<EsolveCategoryTreeItem[]> {\n let params = new HttpParams();\n\n if (identifier) {\n params = params.set('identifier', identifier);\n }\n\n return this.http\n .get<\n EsolveGetResponse<\n (EsolveCategoryRecord | EsolveSubcategoryRecord)[]\n >\n >(`${this.config.api_url}/get-tree.php`, { params })\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processTree(response.records);\n }),\n );\n }\n\n /**\n * Retrieve the special tree structure for a specific special from the eSolve\n * instance and converts it into the correct format\n *\n * @param special_id Id of to special to get tree for\n *\n * @returns Observable containing special tree data\n */\n public getSpecialTree(\n special_id: number,\n ): Observable<EsolveCategoryTreeItem[]> {\n let params = new HttpParams();\n\n params = params.set('special_id', special_id);\n\n return this.http\n .get<\n EsolveGetResponse<\n (EsolveCategoryRecord | EsolveSubcategoryRecord)[]\n >\n >(`${this.config.api_url}/get-special-tree.php`, { params })\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processTree(response.records);\n }),\n );\n }\n\n /**\n * Retrieve the details of a category tree item from the eSolve instance and\n * converts it to the correct format.\n *\n * @param options Filter options\n */\n public getCategoryTreeItem(\n options: EsolveCategoryTreeItemOptions,\n ): Observable<EsolveCategoryTreeItem> {\n let type!: 'category' | 'subcategory';\n let esolve_id!: number | string;\n let sef_description;\n\n if (options.id) {\n const categoryIdentifier = this.processID(options.id);\n\n if (categoryIdentifier) {\n type = categoryIdentifier.type;\n esolve_id = categoryIdentifier.esolve_id;\n }\n } else if (options.type) {\n type = options.type;\n\n if (options.esolve_id) {\n esolve_id = options.esolve_id;\n } else if (options.sef_description) {\n sef_description = options.sef_description;\n }\n }\n\n if (type && (esolve_id || sef_description)) {\n let params = new HttpParams();\n\n params = params.set('type', type);\n\n if (esolve_id) {\n params = params.set('id', esolve_id);\n }\n\n if (sef_description) {\n params = params.set('sef_description', sef_description);\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveCategoryTreeItemRecord[]>>(\n `${this.config.api_url}/get-tree-item.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n return this.processTreeItem(response.records[0]);\n }),\n );\n }\n\n return throwError(() => 'Invalid options');\n }\n\n /**\n * Processes the eSolve tree records and converts them into the correct format.\n *\n * @param tree_records Records to process\n */\n private processTree(\n tree_records: (EsolveCategoryRecord | EsolveSubcategoryRecord)[],\n ): EsolveCategoryTreeItem[] {\n const tree_items: EsolveCategoryTreeItem[] = [];\n\n if (tree_records) {\n for (const tree_record of tree_records) {\n let esolve_id: string | number = '';\n let parent_id = '';\n let children: EsolveCategoryTreeItem[] = [];\n\n if (tree_record.type === 'category') {\n children = this.processTree(tree_record.children);\n esolve_id = tree_record.menu_id;\n parent_id = tree_record.owner_menu_id;\n } else {\n esolve_id = tree_record.id;\n parent_id = tree_record.menu_id;\n }\n\n tree_items.push(\n new EsolveCategoryTreeItem(\n tree_record.type,\n esolve_id,\n parent_id,\n tree_record.description,\n tree_record.sef_description,\n tree_record.seo_description,\n tree_record.sort_priority,\n tree_record.active,\n tree_record.display_only,\n tree_record.image,\n tree_record.seo_page_title,\n tree_record.seo_keywords,\n tree_record.short_description,\n children,\n ),\n );\n }\n }\n\n return tree_items;\n }\n\n private processTreeItem(\n record: EsolveCategoryTreeItemRecord,\n ): EsolveCategoryTreeItem {\n return new EsolveCategoryTreeItem(\n record.type,\n record.id,\n record.parent_id,\n record.description,\n record.sef_description,\n record.short_description,\n record.sort_priority,\n record.active,\n record.display_only,\n record.image,\n record.seo_page_title,\n record.seo_keywords,\n record.seo_description,\n );\n }\n\n private processID(id: string): EsolveCategoryIdentifier | null {\n let type: 'category' | 'subcategory';\n let esolve_id: number | string;\n\n const type_code_regex = /^<<(CAT|SUB)>>/g;\n const match_results = id.match(type_code_regex);\n\n if (match_results) {\n const type_code = match_results[0];\n\n type = type_code === '<<CAT>>' ? 'category' : 'subcategory';\n esolve_id = id.replace(type_code_regex, '');\n\n return {\n type,\n esolve_id,\n };\n }\n\n return null;\n }\n}\n","import { EsolveSeoDetails, EsolveSeoInfo } from '../../seo';\n\nimport { EsolveManufacturerRecord } from '../interfaces';\nimport { EsolveManufacturerImageSize } from '../types';\n\nexport class EsolveManufacturer implements EsolveSeoDetails {\n public id = 0;\n public manufacturer = '';\n public sef_manufacturer = '';\n public title = '';\n public article = '';\n public sort_priority = 0;\n public is_active = false;\n public featured = false;\n public image_name = '';\n public seo_details: EsolveSeoInfo;\n\n public get original_image_src(): string {\n return this.getImagePath('original');\n }\n\n public get small_image_src(): string {\n return this.getImagePath('small');\n }\n\n public get thumbnail_image_src(): string {\n return this.getImagePath('thumb');\n }\n\n public get tiny_image_src(): string {\n return this.getImagePath('tiny');\n }\n\n constructor(record?: Partial<EsolveManufacturerRecord>) {\n let seo_title = '';\n let seo_keywords = '';\n let seo_description = '';\n\n if (record) {\n this.id = +(record.id ?? 0);\n this.manufacturer = record.manufacturer ?? '';\n this.sef_manufacturer = record.sef_manufacturer ?? '';\n this.title = record.title ?? '';\n this.article = record.article ?? '';\n this.sort_priority = +(record.sort_priority ?? 0);\n this.image_name = record.image_name ?? '';\n\n seo_title = record.seo_page_title ?? '';\n seo_keywords = record.seo_keywords ?? '';\n seo_description = record.seo_description ?? '';\n\n if (record.is_active) {\n this.is_active = !!+record.is_active;\n }\n\n if (record.featured) {\n this.featured = !!+record.featured;\n }\n }\n\n if (this.title.trim() === '') {\n this.title = this.manufacturer;\n }\n\n if (seo_title.trim() === '') {\n seo_title = this.title;\n }\n\n this.seo_details = new EsolveSeoInfo(\n seo_title,\n seo_description,\n seo_keywords,\n );\n }\n\n public getImagePath(image_size: EsolveManufacturerImageSize): string {\n if (this.image_name !== '') {\n return `/images/manufacturers/${image_size}/${this.image_name}`;\n }\n\n return '';\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport { EsolveManufacturer } from './classes';\nimport {\n EsolveManufacturerOptions,\n EsolveManufacturerRecord,\n} from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveManufacturersService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n public getManufacturer(id: number): Observable<EsolveManufacturer> {\n const params = new HttpParams({\n fromObject: { manufacturers_id: id },\n });\n\n return this.getManufacturerSingle(params);\n }\n\n public getManufacturerFromSEF(\n sef_manufacturer: string,\n ): Observable<EsolveManufacturer> {\n const params = new HttpParams({\n fromObject: { sef_manufacturer },\n });\n\n return this.getManufacturerSingle(params);\n }\n\n public getManufacturers(\n options?: EsolveManufacturerOptions,\n ): Observable<EsolveManufacturer[]> {\n let params = new HttpParams();\n\n if (options?.featured_only) {\n params = params.set('featured_only', options.featured_only);\n }\n\n return this.getManufacturerRecords(params).pipe(\n map((records) => {\n const manufacturers: EsolveManufacturer[] = [];\n\n for (const record of records) {\n manufacturers.push(this.processManufacturer(record));\n }\n\n return manufacturers;\n }),\n catchError(() => {\n return of<EsolveManufacturer[]>([]);\n }),\n );\n }\n\n private getManufacturerSingle(\n params: HttpParams,\n ): Observable<EsolveManufacturer> {\n return this.getManufacturerRecords(params).pipe(\n map((records) => {\n const record = records[0];\n\n return this.processManufacturer(record);\n }),\n );\n }\n\n private getManufacturerRecords(\n params?: HttpParams,\n ): Observable<EsolveManufacturerRecord[]> {\n return this.http\n .get<EsolveGetResponse<EsolveManufacturerRecord[]>>(\n `${this.config.api_url}/get-manufacturers.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n return response.records;\n }),\n );\n }\n\n private processManufacturer(\n record: EsolveManufacturerRecord,\n ): EsolveManufacturer {\n return new EsolveManufacturer(record);\n }\n}\n","import { EsolveSeoDetails, EsolveSeoInfo } from '../../seo';\n\nimport { EsolveRangeRecord } from '../interfaces';\n\nexport class EsolveRange implements EsolveSeoDetails {\n public id = 0;\n public range = '';\n public sef_range = '';\n public manufacturers_id = 0;\n public title = '';\n public article = '';\n public is_active = false;\n public featured = false;\n public sort_priority = 0;\n public image_name = '';\n public seo_details: EsolveSeoInfo;\n\n public get image_src(): string {\n return this.getImagePath();\n }\n\n constructor(record?: Partial<EsolveRangeRecord>) {\n let seo_title = '';\n let seo_keywords = '';\n let seo_description = '';\n\n if (record) {\n this.id = +(record.id ?? 0);\n this.range = record.range ?? '';\n this.sef_range = record.sef_range ?? '';\n this.manufacturers_id = +(record.manufacturers_id ?? 0);\n this.title = record.title ?? '';\n this.article = record.article ?? '';\n this.sort_priority = +(record.sort_priority ?? 0);\n this.image_name = record.image_name ?? '';\n\n if (record.is_active) {\n this.is_active = !!+record.is_active;\n }\n\n if (record.featured) {\n this.featured = !!+record.featured;\n }\n\n seo_title = record.seo_page_title ?? '';\n seo_keywords = record.seo_keywords ?? '';\n seo_description = record.seo_description ?? '';\n }\n\n if (this.title.trim() === '') {\n this.title = this.range;\n }\n\n if (seo_title.trim() === '') {\n seo_title = this.title;\n }\n\n this.seo_details = new EsolveSeoInfo(\n seo_title,\n seo_description,\n seo_keywords,\n );\n }\n\n public getImagePath(): string {\n if (this.image_name !== '') {\n return `/images/ranges/${this.image_name}`;\n }\n\n return '';\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport { EsolveRange } from './classes';\nimport { EsolveRangeOptions, EsolveRangeRecord } from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveRangesService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n public getRange(id: number): Observable<EsolveRange> {\n const params = new HttpParams({\n fromObject: { ranges_id: id },\n });\n\n return this.getRangeSingle(params);\n }\n\n public getRangeFromSEF(sef_range: string): Observable<EsolveRange> {\n const params = new HttpParams({\n fromObject: { sef_range },\n });\n\n return this.getRangeSingle(params);\n }\n\n public getRanges(options?: EsolveRangeOptions): Observable<EsolveRange[]> {\n let params = new HttpParams();\n\n if (options?.featured_only) {\n params = params.set('featured_only', options.featured_only);\n }\n\n if (options?.manufacturers_id) {\n params = params.set('manufacturers_id', options.manufacturers_id);\n }\n\n return this.getRangeRecords(params).pipe(\n map((records) => {\n const ranges: EsolveRange[] = [];\n\n for (const record of records) {\n ranges.push(this.processRange(record));\n }\n\n return ranges;\n }),\n catchError(() => {\n return of<EsolveRange[]>([]);\n }),\n );\n }\n\n private getRangeSingle(params: HttpParams): Observable<EsolveRange> {\n return this.getRangeRecords(params).pipe(\n map((records) => {\n const record = records[0];\n\n return this.processRange(record);\n }),\n );\n }\n\n private getRangeRecords(\n params?: HttpParams,\n ): Observable<EsolveRangeRecord[]> {\n return this.http\n .get<EsolveGetResponse<EsolveRangeRecord[]>>(\n `${this.config.api_url}/get-ranges.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n return response.records;\n }),\n );\n }\n\n private processRange(record: EsolveRangeRecord): EsolveRange {\n return new EsolveRange(record);\n }\n}\n","import { EsolveTagRecord } from '../interfaces';\n\nexport class EsolveTag {\n public id = 0;\n public phrase = '';\n public weight = 0;\n public description = '';\n public image_name = '';\n\n /**\n * @deprecated To be removed in the future. Use `EsolveTag.phrase` instead\n */\n public get tag_phrase(): string {\n return this.phrase;\n }\n\n /**\n * @deprecated To be removed in the future. Use `EsolveTag.weight` instead\n */\n public get tag_weight(): number {\n return this.weight;\n }\n\n constructor(record?: Partial<EsolveTagRecord>) {\n if (record) {\n this.id = +(record.id ?? 0);\n this.phrase = record.tag_phrase ?? '';\n this.weight = +(record.tag_weight ?? 0);\n this.description = record.description ?? '';\n this.image_name = record.image_name ?? '';\n }\n }\n\n public getImagePath(): string {\n if (this.image_name !== '') {\n return `/images/tags/${this.image_name}`;\n }\n\n return '';\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport { EsolveTag } from './classes';\nimport { EsolveTagOptions, EsolveTagRecord } from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveTagsService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n /**\n * Retrieves active topics from the list of topic ID's. Note that inactive or expired\n * topics will not be retrieved.\n *\n * @param options Tag filters\n */\n public getTags(options?: EsolveTagOptions): Observable<EsolveTag[]> {\n const params = this.parseOptions(options);\n\n return this.http\n .get<EsolveGetResponse<EsolveTagRecord[]>>(\n `${this.config.api_url}/get-tags.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processTags(response.records);\n }),\n );\n }\n\n private parseOptions(options?: EsolveTagOptions) {\n let params = new HttpParams();\n\n if (options) {\n if (options.tags_id) {\n if (Array.isArray(options.tags_id)) {\n const tag_list = options.tags_id;\n\n if (tag_list.length > 0) {\n params = params.append('tags_id', tag_list.join(','));\n }\n } else {\n params = params.append('tags_id', options.tags_id);\n }\n } else {\n if (options.phrase && options.phrase !== '') {\n params = params.append('phrase', options.phrase);\n\n const phrase_match_mode = options.phrase_match_mode;\n\n if (phrase_match_mode) {\n params = params.append(\n 'phrase_match_mode',\n phrase_match_mode,\n );\n }\n }\n }\n }\n\n return params;\n }\n\n private processTags(records: EsolveTagRecord[]): EsolveTag[] {\n const tags: EsolveTag[] = [];\n\n if (records) {\n for (const record of records) {\n const tag = new EsolveTag(record);\n\n tags.push(tag);\n }\n }\n\n return tags;\n }\n}\n","import { EsolveTopicRecord } from '../interfaces';\n\nexport class EsolveTopic {\n public id = 0;\n public name = '';\n public short_description = '';\n public sort_priority = 0;\n\n constructor(record?: Partial<EsolveTopicRecord>) {\n if (record) {\n this.id = +(record.id ?? 0);\n this.name = record.name ?? '';\n this.short_description = record.short_description ?? '';\n this.sort_priority = +(record.sort_priority ?? 0);\n }\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport { EsolveTopic } from './classes';\nimport { EsolveTopicRecord } from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveTopicService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n /**\n * Retrieves active topics from the list of topic ID's. Note that inactive or expired\n * topics will not be retrieved.\n *\n * @param topic_id_list List of topic ID's that need to be retrieved\n */\n public getTopics(\n topic_id_list: readonly number[] = [],\n ): Observable<EsolveTopic[]> {\n let params = new HttpParams();\n\n if (topic_id_list.length > 0) {\n params = params.append('topic_id', topic_id_list.join(','));\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveTopicRecord[]>>(\n `${this.config.api_url}/get-topics.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processTopics(response.records);\n }),\n );\n }\n\n private processTopics(records: EsolveTopicRecord[]): EsolveTopic[] {\n const topics: EsolveTopic[] = [];\n\n if (records) {\n for (const record of records) {\n const topic = new EsolveTopic(record);\n\n topics.push(topic);\n }\n }\n\n return topics;\n }\n}\n","import { EsolveCategoryTreeItem } from '../../category-tree';\nimport { EsolveManufacturer } from '../../manufacturers';\nimport { EsolveRange } from '../../ranges';\nimport { EsolveTag } from '../../tags';\nimport { EsolveTopic } from '../../topics';\n\nimport { EsolveAssetType } from '../types';\nimport { EsolveAssetRecord } from '../interfaces';\n\nexport class EsolveAsset {\n public id = 0;\n public src = '';\n public name = '';\n public type?: EsolveAssetType;\n public description = '';\n public document_number = '';\n public document_type = '';\n public area_of_application = '';\n public asset_category = '';\n public asset_sub_category = '';\n public sort_priority = 0;\n public created?: string;\n public category?: EsolveCategoryTreeItem;\n public subcategory?: EsolveCategoryTreeItem;\n public manufacturer?: EsolveManufacturer;\n public range?: EsolveRange;\n public topics: EsolveTopic[] = [];\n public tags: EsolveTag[] = [];\n\n private image_name = '';\n\n /**\n * Shortcut to `getImagePath()`\n */\n public get image_src(): string {\n return this.getImagePath();\n }\n\n constructor(record: EsolveAssetRecord) {\n this.id = +record.id;\n this.src = record.src;\n this.name = record.name;\n this.type = record.type;\n this.description = record.description;\n\n this.document_number = record.document_number ?? '';\n this.document_type = record.document_type ?? '';\n this.area_of_application = record.area_of_application ?? '';\n this.asset_category = record.asset_category ?? '';\n this.asset_sub_category = record.asset_sub_category ?? '';\n this.sort_priority = +(record.sort_priority ?? '');\n this.image_name = record.image_name ?? '';\n\n if (record.created) {\n this.created = record.created;\n }\n\n if (record.category) {\n this.category = new EsolveCategoryTreeItem(\n record.category.type,\n record.category.id,\n record.category.parent_id,\n record.category.description,\n record.category.sef_description,\n record.category.short_description,\n record.category.sort_priority,\n record.category.active,\n record.category.display_only,\n record.category.image,\n record.category.seo_page_title,\n record.category.seo_keywords,\n record.category.seo_description,\n );\n }\n\n if (record.subcategory) {\n this.subcategory = new EsolveCategoryTreeItem(\n record.subcategory.type,\n record.subcategory.id,\n record.subcategory.parent_id,\n record.subcategory.description,\n record.subcategory.sef_description,\n record.subcategory.short_description,\n record.subcategory.sort_priority,\n record.subcategory.active,\n record.subcategory.display_only,\n record.subcategory.image,\n record.subcategory.seo_page_title,\n record.subcategory.seo_keywords,\n record.subcategory.seo_description,\n );\n }\n\n if (record.manufacturer) {\n this.manufacturer = new EsolveManufacturer(record.manufacturer);\n }\n\n if (record.range) {\n this.range = new EsolveRange(record.range);\n }\n\n if (record.topics && record.topics.length > 0) {\n for (const topic of record.topics) {\n this.topics.push(new EsolveTopic(topic));\n }\n }\n\n if (record.tags && record.tags.length > 0) {\n for (const tag of record.tags) {\n this.tags.push(new EsolveTag(tag));\n }\n }\n }\n\n /**\n * Retrieve image path\n *\n * @returns Image path on CDN, else empty string if no image exists\n */\n public getImagePath(): string {\n if (this.image_name !== '') {\n return `/images/documents/${this.image_name}`;\n }\n\n return '';\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { Observable, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse, EsolveList } from '../shared';\n\nimport { EsolveAsset } from './classes';\nimport {\n EsolveAssetOptions,\n EsolveMediaAssetOptions,\n EsolveAssetRecord,\n EsolveStockAssetOptions,\n} from './interfaces';\nimport { EsolveAssetList } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveAssetsService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n public getAsset(id: number): Observable<EsolveAsset> {\n const params = new HttpParams({ fromObject: { assets_id: id } });\n\n return this.getAssetRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const record = response.records[0];\n\n return this.processAsset(record);\n }),\n );\n }\n\n public getAssets(\n options?: EsolveAssetOptions,\n ): Observable<EsolveAssetList> {\n const params = this.parseOptions(options);\n\n return this.getAssetRecords(params).pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const additional_data = response.additional_data;\n const records = response.records;\n const total_records = +additional_data.total_records;\n\n return this.processAssetLists(records, total_records, options);\n }),\n );\n }\n\n public getMediaAssets(\n options: EsolveMediaAssetOptions,\n ): Observable<EsolveAssetList> {\n let params = this.parseOptions(options);\n\n if (options.media_id && options.media_id > 0) {\n params = params.set('media_id', options.media_id);\n } else if (\n options.media_identifier &&\n options.media_identifier !== ''\n ) {\n params = params.set('media_identifier', options.media_identifier);\n } else {\n return throwError(\n () => new Error('Media ID or identifier is required'),\n );\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveAssetRecord[]>>(\n `${this.config.api_url}/get-media-assets.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const additional_data = response.additional_data;\n const records = response.records;\n const total_records = +additional_data.total_records;\n\n return this.processAssetLists(\n records,\n total_records,\n options,\n );\n }),\n );\n }\n\n public getStockAssets(\n options: EsolveStockAssetOptions,\n ): Observable<EsolveAssetList> {\n let params = this.parseOptions(options);\n\n if (options.code && options.code !== '') {\n params = params.set('code', options.code);\n } else if (options.sef_name && options.sef_name !== '') {\n params = params.set('sef_name', options.sef_name);\n } else {\n return throwError(() => new Error('Code or SEF name is required'));\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveAssetRecord[]>>(\n `${this.config.api_url}/get-stock-assets.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const additional_data = response.additional_data;\n const records = response.records;\n const total_records = +additional_data.total_records;\n\n return this.processAssetLists(\n records,\n total_records,\n options,\n );\n }),\n );\n }\n\n private processAsset(record: EsolveAssetRecord): EsolveAsset {\n return new EsolveAsset(record);\n }\n\n private getAssetRecords(\n params: HttpParams,\n ): Observable<EsolveGetResponse<EsolveAssetRecord[]>> {\n return this.http.get<EsolveGetResponse<EsolveAssetRecord[]>>(\n `${this.config.api_url}/get-assets.php`,\n { params },\n );\n }\n\n private parseOptions(options?: EsolveAssetOptions): HttpParams {\n let params = new HttpParams();\n\n if (!options) {\n return params;\n }\n\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.asset_type) {\n params = params.set('asset_type', options.asset_type);\n }\n\n if (options.category_id) {\n params = params.set('category_id', options.category_id);\n }\n\n if (options.subcategory_id) {\n params = params.set('subcategory_id', options.subcategory_id);\n }\n\n if (options.manufacturers_id) {\n params = params.set('manufacturers_id', options.manufacturers_id);\n }\n\n if (options.ranges_id) {\n params = params.set('ranges_id', options.ranges_id);\n }\n\n if (options.asset_category) {\n params = params.set('asset_category', options.asset_category);\n }\n\n if (options.asset_sub_category) {\n params = params.set(\n 'asset_sub_category',\n options.asset_sub_category,\n );\n }\n\n if (options.document_number) {\n params = params.set('document_number', options.document_number);\n }\n\n if (options.document_type) {\n params = params.set('document_type', options.document_type);\n }\n\n if (options.area_of_application) {\n params = params.set(\n 'area_of_application',\n options.area_of_application,\n );\n }\n\n return params;\n }\n\n private processAssetLists(\n records: EsolveAssetRecord[],\n total_records: number,\n options?: EsolveAssetOptions,\n ) {\n const assets: EsolveAsset[] = [];\n\n for (const record of records) {\n assets.push(this.processAsset(record));\n }\n\n const page = options?.page ?? 0;\n const rows = options?.rows ?? 0;\n const total = total_records;\n\n return new EsolveList(assets, page, rows, total);\n }\n}\n","import { EsolveAddressResponse } from '../interfaces/esolve-address-response.interface';\nimport { EsolveGeocodeResponse } from '../../esolve-geocode-response.interface';\nimport { EsolveResponseResult } from '../../../shared/response';\n\nexport class EsolveAddressResult extends EsolveResponseResult {\n public id: number;\n public address_validated: boolean;\n public geocode_status: string;\n public geocode_result: EsolveGeocodeResponse | null;\n\n constructor(response: EsolveAddressResponse) {\n super(response);\n\n this.id = response.esolve_id;\n this.address_validated = response.address_validated;\n this.geocode_status = response.geocode_status;\n this.geocode_result = response.geocode_result;\n }\n}\n","import { EsolveAddressRecord } from '../interfaces/esolve-address-record.interface';\nimport { EsolveAddressType } from '../types/esolve-address-type.type';\n\nexport class EsolveAddress {\n public id = 0;\n public recipient = '';\n public address_type: EsolveAddressType = 'physical';\n public pobox = '';\n public place_name = '';\n public alias = '';\n public street_number = '';\n public street = '';\n public suburb = '';\n public city = '';\n public province = '';\n public country = '';\n public postal_code = '';\n public latitude = 0;\n public longitude = 0;\n\n constructor(record?: Partial<EsolveAddressRecord>) {\n if (record) {\n this.id = +(record.id ?? 0);\n this.recipient = record.recipient ?? '';\n this.address_type = record.address_type ?? 'physical';\n this.pobox = record.pobox ?? '';\n this.place_name = record.place_name ?? '';\n this.alias = record.alias ?? '';\n this.street_number = record.street_number ?? '';\n this.street = record.street ?? '';\n this.suburb = record.suburb ?? '';\n this.city = record.city ?? '';\n this.province = record.province ?? '';\n this.country = record.country ?? '';\n this.postal_code = record.postal_code ?? '';\n this.latitude = +(record.latitude ?? 0);\n this.longitude = +(record.longitude ?? 0);\n }\n }\n}\n","import { EsolvePostResponseItem, EsolveResponseResult } from '../../../shared';\n\nexport class EsolveSessionAddressUpdateResult extends EsolveResponseResult {\n public address_updated: boolean;\n\n constructor(response: EsolvePostResponseItem) {\n super(response);\n\n if (typeof response.esolve_id === 'string') {\n throw new Error('Invalid response id.');\n }\n\n this.address_updated = response.esolve_id > 0;\n }\n}\n","import { EsolveUserAccountRecord } from '../interfaces';\n\nexport class EsolveUserAccountBusiness {\n public name?: string;\n public vat_number?: string;\n public description?: string;\n public type?: string;\n\n constructor(record?: Partial<EsolveUserAccountRecord>) {\n if (record) {\n this.name = record.busname ?? '';\n this.vat_number = record.vatnum ?? '';\n this.description = record.busdescript ?? '';\n this.type = record.business_type ?? '';\n }\n }\n}\n","import { EsolveUserAccountRecord } from '../interfaces';\n\nexport class EsolveUserAccountContact {\n public tel_number?: string;\n public cell_number?: string;\n public fax_number?: string;\n\n constructor(record?: Partial<EsolveUserAccountRecord>) {\n if (record) {\n this.tel_number = record.telnumber ?? '';\n this.cell_number = record.cellnumber ?? '';\n this.fax_number = record.fax ?? '';\n }\n }\n}\n","import {\n EsolvePostResponseItem,\n EsolveResponseResult,\n} from '../../../shared/response';\n\nexport class EsolveUserAccountResult extends EsolveResponseResult {\n public id = 0;\n\n constructor(response: EsolvePostResponseItem) {\n super(response);\n\n this.id = +response.esolve_id;\n }\n}\n","import { EsolveStatementAgeingRecord } from '../interfaces';\n\nexport class EsolveStatementAgeing {\n public days?: number;\n public amount?: number;\n\n constructor(record?: Partial<EsolveStatementAgeingRecord>) {\n if (record) {\n this.days = +(record.days ?? 0);\n this.amount = +(record.amount ?? 0);\n }\n }\n}\n","import { EsolveStatementBalancesRecord } from '../interfaces';\n\nimport { EsolveStatementAgeing } from './esolve-statement-ageing.model';\n\nexport class EsolveStatementBalances {\n public total?: number;\n public ageing?: EsolveStatementAgeing[];\n\n constructor(record?: Partial<EsolveStatementBalancesRecord>) {\n if (record) {\n this.total = +(record.total ?? 0);\n\n if (record.ageing) {\n this.ageing = [];\n\n for (const key in record.ageing) {\n this.ageing.push(\n new EsolveStatementAgeing(record.ageing[key]),\n );\n }\n }\n }\n }\n}\n","import { EsolveStatementTransactionRecord } from '../interfaces';\n\nexport class EsolveStatementTransaction {\n public document_date?: string;\n public order_number?: string;\n public comment?: string;\n public account?: string;\n public iq_reference?: string;\n public total?: number;\n public amount_due?: number;\n public is_debit?: boolean;\n\n constructor(record?: Partial<EsolveStatementTransactionRecord>) {\n if (record) {\n this.document_date = record.document_date ?? '';\n this.order_number = record.order_number ?? '';\n this.comment = record.comment ?? '';\n this.account = record.account ?? '';\n this.iq_reference = record.iq_reference ?? '';\n this.total = +(record.total ?? 0);\n this.amount_due = +(record.amount_due ?? 0);\n this.is_debit = !!+(record.is_debit ?? true);\n }\n }\n}\n","import { EsolveStatementRecord } from '../interfaces';\n\nimport { EsolveStatementBalances } from './esolve-statement-balances.model';\nimport { EsolveStatementTransaction } from './esolve-statement-transaction.model';\n\nexport class EsolveStatement {\n public balances?: EsolveStatementBalances;\n public transactions?: EsolveStatementTransaction[];\n\n constructor(record?: Partial<EsolveStatementRecord>) {\n if (record) {\n this.balances = new EsolveStatementBalances(record.balances);\n this.transactions =\n record.transactions?.map(\n (e) => new EsolveStatementTransaction(e),\n ) ?? [];\n }\n }\n}\n","import { EsolveUserClientAccountRecord } from '../interfaces';\n\nimport { EsolveStatement } from './esolve-statement.model';\n\nexport class EsolveUserClientAccount {\n public esolve_id?: number;\n public account?: string;\n public branch_code?: string;\n public account_group?: string;\n public pricing_group?: string;\n public company_name?: string;\n public client_contact_person?: string;\n public client_firstname?: string;\n public client_surname?: string;\n public client_email?: string;\n public client_contact_number?: string;\n public client_fax_number?: string;\n public client_cellphone_number?: string;\n public client_id_number?: string;\n public address_description?: string;\n public street?: string;\n public suburb?: string;\n public city?: string;\n public province?: string;\n public country?: string;\n public postal_code?: string;\n public postal_address?: string;\n public delivery_address?: string;\n public vat_number?: string;\n public ageing?: string;\n public balance_last_updated?: string;\n public client_classification?: string;\n public override_stock_listing_identifiers?: string;\n public requires_transaction_approval?: string;\n public latitude?: number;\n public longitude?: number;\n public price_list?: number;\n public loyalty_classification_id?: number;\n public credit_limit?: number;\n public pending_invoice_balance?: number;\n public external_account_balance?: number;\n public default_sellprice?: number;\n public is_active?: boolean;\n public external_statement?: EsolveStatement;\n\n constructor(record?: Partial<EsolveUserClientAccountRecord>) {\n if (record) {\n this.esolve_id = +(record.id ?? 0);\n this.account = record.account ?? '';\n this.branch_code = record.branch_code ?? '';\n this.account_group = record.account_group ?? '';\n this.pricing_group = record.pricing_group ?? '';\n this.company_name = record.company_name ?? '';\n this.client_contact_person = record.client_contact_person ?? '';\n this.client_firstname = record.client_firstname ?? '';\n this.client_surname = record.client_surname ?? '';\n this.client_email = record.client_email ?? '';\n this.client_contact_number = record.client_contact_number ?? '';\n this.client_fax_number = record.client_fax_number ?? '';\n this.client_cellphone_number = record.client_cellphone_number ?? '';\n this.client_id_number = record.client_id_number ?? '';\n this.address_description = record.address_description ?? '';\n this.street = record.street ?? '';\n this.suburb = record.suburb;\n this.city = record.city ?? '';\n this.province = record.province ?? '';\n this.country = record.country ?? '';\n this.postal_code = record.postal_code ?? '';\n this.postal_address = record.postal_address ?? '';\n this.delivery_address = record.delivery_address ?? '';\n this.vat_number = record.vat_number ?? '';\n this.ageing = record.ageing ?? '';\n this.balance_last_updated = record.balance_last_updated ?? '';\n this.client_classification = record.client_classification ?? '';\n this.override_stock_listing_identifiers =\n record.override_stock_listing_identifiers ?? '';\n this.requires_transaction_approval =\n record.requires_transaction_approval ?? '';\n this.latitude = +(record.latitude ?? 0);\n this.longitude = +(record.longitude ?? 0);\n this.price_list = +(record.price_list ?? 0);\n this.loyalty_classification_id = +(\n record.loyalty_classification_id ?? 0\n );\n this.credit_limit = +(record.credit_limit ?? 0);\n this.pending_invoice_balance = +(\n record.pending_invoice_balance ?? 0\n );\n this.external_account_balance = +(\n record.external_account_balance ?? 0\n );\n this.default_sellprice = +(record.default_sellprice ?? 0);\n this.is_active = !!+(record.is_active ?? false);\n\n this.external_statement = new EsolveStatement(\n record.external_statement,\n );\n }\n }\n}\n","import { EsolveUserAccountRecord } from '../interfaces';\nimport { EsolveUserAccountBusiness } from './esolve-user-account-business.model';\nimport { EsolveUserAccountContact } from './esolve-user-account-contact.model';\nimport { EsolveUserClientAccount } from './esolve-user-client-account.model';\n\nexport class EsolveUserAccount {\n public esolve_id?: number;\n public email?: string;\n public registration_type?: string;\n public title?: string;\n public first_name?: string;\n public last_name?: string;\n public initials?: string;\n public gender?: string;\n public identification_number?: string;\n public account_number?: string;\n public loyalty_number?: string;\n public business_details?: EsolveUserAccountBusiness;\n public contact_details?: EsolveUserAccountContact;\n public client_details?: EsolveUserClientAccount;\n\n constructor(record?: Partial<EsolveUserAccountRecord>) {\n if (record) {\n this.esolve_id = +(record.userid ?? 0);\n this.email = record.email ?? '';\n this.registration_type = record.registration_type ?? '';\n this.title = record.title ?? '';\n this.first_name = record.firstname ?? '';\n this.last_name = record.surname ?? '';\n this.initials = record.initials ?? '';\n this.gender = record.gender ?? '';\n this.identification_number = record.idnumber ?? '';\n\n this.contact_details = new EsolveUserAccountContact(record);\n this.business_details = new EsolveUserAccountBusiness(record);\n\n if (record.client_details && record.client_details.account !== '') {\n this.client_details = new EsolveUserClientAccount(\n record.client_details,\n );\n }\n }\n }\n}\n","import { EsolveCartTotals } from '../../../cart';\n\nexport class EsolveUserClientAccountBalances {\n constructor(\n public clients_id?: number,\n public account?: string,\n public cart_totals?: EsolveCartTotals,\n public credit_limit?: number,\n public external_account_balance?: number,\n public external_available_balance?: number,\n public new_external_available_balance?: number,\n public credit_limit_okay?: boolean,\n ) {}\n}\n","import {\n EsolvePostResponseItem,\n EsolveResponseResult,\n} from '../../shared/response';\n\nexport class EsolveChangePasswordResult extends EsolveResponseResult {\n public password_updated: boolean;\n\n constructor(response: EsolvePostResponseItem) {\n super(response);\n\n this.password_updated = response.status.state === 'success';\n }\n}\n","import { EsolveResponseResult } from '../../shared/response';\nimport { EsolveForgotPasswordResponse } from './esolve-forgot-password-response.interface';\n\nexport class EsolveResetPasswordResult extends EsolveResponseResult {\n public id: number;\n public reset_success: boolean;\n public password_matches_old: boolean;\n public login_required: boolean;\n\n constructor(response: EsolveForgotPasswordResponse) {\n super(response);\n\n this.id = response.esolve_id;\n this.reset_success = response.reset_success;\n this.password_matches_old = response.password_matches_old;\n this.login_required = response.login_required;\n }\n}\n","import { EsolveResponseResult } from '../../shared/response';\nimport { EsolveRegistrationPostResponseItem } from './esolve-registration-post-response-item.interface';\n\nexport class EsolveRegistrationResult extends EsolveResponseResult {\n public user_id: number;\n public guest: boolean;\n public authentication_required: boolean;\n public auto_login: boolean;\n public location_id: number;\n\n constructor(response: EsolveRegistrationPostResponseItem) {\n super(response);\n\n this.user_id = response.esolve_id;\n this.guest = response.guest;\n this.auto_login = response.auto_login;\n this.authentication_required = response.authentication_required;\n this.location_id = response.session_data.location_id;\n }\n}\n","import { EsolveResponseResult } from '../../shared/response';\nimport { EsolveAccountConfirmationPostResponseItem } from './esolve-account-confirmation-post-response-item.interface';\n\nexport class EsolveAccountConfirmationResult extends EsolveResponseResult {\n public user_id: number;\n public location_id: number;\n public recalculated_cart: boolean;\n\n constructor(response: EsolveAccountConfirmationPostResponseItem) {\n super(response);\n\n this.user_id = +response.esolve_id;\n this.location_id = +response.location_id;\n this.recalculated_cart = !!+response.recalculated_cart;\n }\n}\n","import {\n EsolvePostResponseItem,\n EsolveResponseResult,\n} from '../../../shared/response';\n\nexport class EsolveLocationUpdateResult extends EsolveResponseResult {\n public location_updated: boolean;\n\n constructor(response: EsolvePostResponseItem) {\n super(response);\n\n if (typeof response.esolve_id === 'string') {\n throw new Error('Invalid response id.');\n }\n\n this.location_updated = response.esolve_id > 0;\n }\n}\n","import { EsolveResponseResult } from '../../shared/response';\n\nexport class EsolveEmptyCartResult extends EsolveResponseResult {}\n","import { EsolveResponseResult } from '../../shared/response';\n\nimport { EsolveCheckoutResponse } from '../interfaces';\n\nexport class EsolveCheckoutResult extends EsolveResponseResult {\n public id = 0;\n public process_payment: boolean;\n\n constructor(response: EsolveCheckoutResponse) {\n super(response);\n\n this.id = +response.esolve_id;\n this.process_payment = response.process_payment ?? false;\n }\n}\n","import { EsolveCartItemRecord } from '../interfaces';\n\nexport class EsolveCartStockItem {\n public code: string;\n public name: string;\n public sef_name: string;\n public description: string;\n public delivery_category: string;\n public pack_description: string;\n public pack_size: number;\n public onhand: number;\n public active: boolean;\n\n private image_name: string;\n\n /**\n * Path to tiny stock image\n */\n public get tiny_image_src(): string {\n return this.getImagePath('tiny');\n }\n\n /**\n * Path to thumbnail stock image\n */\n public get thumbnail_image_src(): string {\n return this.getImagePath('thumb');\n }\n\n /**\n * Path to small stock image\n */\n public get small_image_src(): string {\n return this.getImagePath('small');\n }\n\n /**\n * Path to big stock image\n */\n public get big_image_src(): string {\n return this.getImagePath('big');\n }\n\n /**\n * Path to original stock image\n */\n public get original_image_src(): string {\n return this.getImagePath('original');\n }\n\n constructor(record: Partial<EsolveCartItemRecord>) {\n this.code = record.code ?? '';\n this.name = record.name ?? '';\n this.sef_name = record.sef_name ?? '';\n this.description = record.description ?? '';\n this.delivery_category = record.delivery_category ?? '';\n this.image_name = record.image_name ?? '';\n this.pack_description = record.pack_description ?? '';\n this.pack_size = +(record.items_in_pack ?? 0);\n this.onhand = +(record.onhand ?? 0);\n this.active = record.is_active ?? false;\n }\n\n public getImagePath(\n image_size: 'tiny' | 'thumb' | 'small' | 'big' | 'original',\n ): string {\n if (this.image_name !== '') {\n return `/images/stock/${image_size}/${this.image_name}`;\n }\n\n return '';\n }\n}\n","import { EsolveCartItemRecord } from '../interfaces';\nimport { EsolveCartStockItem } from './esolve-cart-stock-item.model';\n\nexport class EsolveCartItem {\n public delivery_category: string;\n public type: string;\n public id: number;\n public qty: number;\n public price: number;\n public discount: number;\n public discount_interval: number;\n public vat_rate: number;\n public price_incl: number;\n public discount_price: number;\n public discount_price_incl: number;\n public discount_total: number;\n public vat_total: number;\n public total: number;\n public total_incl: number;\n public allow_quotes: boolean;\n public allow_orders: boolean;\n public must_collect: boolean;\n public requested_assembly: boolean;\n public is_dependency: boolean;\n public stock_item!: EsolveCartStockItem;\n\n constructor(record: Partial<EsolveCartItemRecord>) {\n this.delivery_category = record.delivery_category ?? '';\n this.type = record.type ?? '';\n this.id = +(record.id ?? 0);\n this.qty = +(record.qty ?? 0);\n this.price = +(record.price ?? 0);\n this.discount = +(record.discount ?? 0);\n this.discount_interval = +(record.discount_interval ?? 0);\n this.vat_rate = +(record.vat_rate ?? 0);\n this.price_incl = +(record.price_incl ?? 0);\n this.discount_price = +(record.discount_price ?? 0);\n this.discount_price_incl = +(record.discount_price_incl ?? 0);\n this.discount_total = +(record.discount_total ?? 0);\n this.vat_total = +(record.vat_total ?? 0);\n this.total = +(record.line_total ?? 0);\n this.total_incl = +(record.line_total_incl ?? 0);\n this.allow_quotes = record.allow_quotes ?? false;\n this.allow_orders = record.allow_orders ?? false;\n this.must_collect = record.must_collect ?? false;\n this.requested_assembly = record.requested_assembly ?? false;\n this.is_dependency = record.is_dependency ?? false;\n\n this.stock_item = new EsolveCartStockItem(record);\n }\n}\n","/**\n * Totals in cart\n */\nexport class EsolveCartTotals {\n /**\n * Grand total of cart which includes discount and VAT\n * (NOTE: shipping and insurance is not included)\n */\n public get total(): number {\n return (\n this.sub_total +\n this.vat_total -\n this.discount_total -\n this.voucher_total\n );\n }\n\n constructor(\n /**\n * Number of unique records in cart\n */\n public records: number = 0,\n /**\n * Total quantity of all items in a cart\n */\n public items: number = 0,\n /**\n * Total in cart before discount and VAT is added\n */\n public sub_total: number = 0,\n /**\n * Total VAT of all the items in the cart\n */\n public vat_total: number = 0,\n /**\n * Total discount of all the item in the cart\n */\n public discount_total: number = 0,\n /**\n * Total of all vouchers used\n */\n public voucher_total: number = 0,\n /**\n * Total of allowance\n */\n public allowance: number = 0,\n ) {}\n}\n","import { EsolveTransactionType } from '../../transactions';\nimport { EsolveTransactionAnalyticsDataRecord } from '../interfaces';\n\nexport class EsolveTransactionAnalyticsData<T = any> {\n public transaction_id = 0;\n public transaction_type: EsolveTransactionType = 'order';\n /**\n * Data generated for analytics\n */\n public analytics_data?: T;\n\n constructor(record?: Partial<EsolveTransactionAnalyticsDataRecord<T>>) {\n if (record) {\n this.transaction_id = +(record.transaction_id ?? 0);\n this.transaction_type = record.transaction_type ?? 'order';\n\n if (record.analytics_data) {\n this.analytics_data = record.analytics_data;\n }\n }\n }\n}\n","import { EsolveCartAlternativeRecord } from '../interfaces';\n\nexport class EsolveCartAlternative {\n public item_id = 0;\n public code = '';\n public name = '';\n public sef_name = '';\n public items_in_pack = 0;\n public pack_description = '';\n public price = 0;\n public price_inclusive = 0;\n public vat_rate = 0;\n\n private image_name = '';\n\n /**\n * Path to tiny stock image\n */\n public get tiny_image_src(): string {\n return this.getImagePath('tiny');\n }\n\n /**\n * Path to thumbnail stock image\n */\n public get thumbnail_image_src(): string {\n return this.getImagePath('thumb');\n }\n\n /**\n * Path to small stock image\n */\n public get small_image_src(): string {\n return this.getImagePath('small');\n }\n\n /**\n * Path to big stock image\n */\n public get big_image_src(): string {\n return this.getImagePath('big');\n }\n\n /**\n * Path to original stock image\n */\n public get original_image_src(): string {\n return this.getImagePath('original');\n }\n\n constructor(record?: Partial<EsolveCartAlternativeRecord>) {\n if (record) {\n this.item_id = +(record.item_id ?? 0);\n this.image_name = record.image_name ?? '';\n this.code = record.code ?? '';\n this.name = record.name ?? '';\n this.sef_name = record.sef_name ?? '';\n this.items_in_pack = +(record.items_in_pack ?? 0);\n this.pack_description = record.pack_description ?? '';\n this.price = +(record.price ?? 0);\n this.price_inclusive = +(record.price_inclusive ?? 0);\n this.vat_rate = +(record.vat_rate ?? 0);\n }\n }\n\n public getImagePath(\n image_size: 'tiny' | 'thumb' | 'small' | 'big' | 'original',\n ): string {\n if (this.image_name !== '') {\n return `/images/stock/${image_size}/${this.image_name}`;\n }\n\n return '';\n }\n}\n","import { EsolveCouponRecord } from '../interfaces';\n\nexport class EsolveCoupon {\n public id = 0;\n public identifier = '';\n public discount = 0;\n /**\n * Shows either the short code or the coupon key (if short code is not set)\n */\n public coupon_code = '';\n /**\n * Limit of the number of items it can apply to\n */\n public apply_on = 0;\n /**\n * Indicates if the discount does not apply to specified products, meaning\n * all items get the discount\n */\n public apply_to_full_cart = false;\n\n constructor(record?: EsolveCouponRecord) {\n if (record) {\n this.id = +record.id;\n this.identifier = record.identifier;\n this.discount = +record.discount;\n this.coupon_code = record.coupon_code;\n this.apply_on = +record.apply_on;\n this.apply_to_full_cart = record.apply_to_full_cart;\n }\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { inject, Injectable, PLATFORM_ID } from '@angular/core';\n\nimport { BehaviorSubject, firstValueFrom, Observable, of, Subject } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveCookieService, EsolveGetResponse } from '../shared';\n\nimport { EsolveCoupon } from './classes';\nimport {\n EsolveCouponRecord,\n EsolveCouponValidation,\n EsolveCouponValidationError,\n EsolveCouponValidationResult,\n} from './interfaces';\nimport { EsolveCouponsCache } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveCouponsService {\n private readonly is_browser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly http = inject(HttpClient);\n private readonly config = inject(EsolveConfigService);\n private readonly cookieService = inject(EsolveCookieService);\n\n private storage_key = '_ng_eslv_coupons';\n private cache: EsolveCouponsCache = new Map();\n private applied = new BehaviorSubject<void>(undefined);\n private validation_error = new Subject<\n EsolveCouponValidationError | undefined\n >();\n\n constructor() {\n this.setStorageKey();\n this.cache = this.retrieveCache();\n }\n\n public onValidationError(): Observable<\n EsolveCouponValidationError | undefined\n > {\n return this.validation_error.asObservable();\n }\n\n public onApplied(): Observable<void> {\n return this.applied.asObservable();\n }\n\n public validate(\n coupon_key: string,\n ): Observable<EsolveCouponValidationResult> {\n return this.http\n .get<EsolveGetResponse<EsolveCouponValidation>>(\n `${this.config.api_url}/get-validate-coupon.php`,\n {\n params: {\n coupon_key,\n },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n const valid = response.records.valid;\n\n const result: EsolveCouponValidationResult = {\n valid,\n };\n\n if (!valid) {\n const error = response.records.error;\n this.validation_error.next(error);\n } else if (valid) {\n result.id = response.records.id;\n }\n\n return result;\n }),\n catchError(() => {\n this.validation_error.next(undefined);\n\n return of({ valid: false });\n }),\n );\n }\n\n public async applyCoupon(coupon_key: string): Promise<boolean> {\n try {\n if (coupon_key.trim() === '') {\n return false;\n }\n\n const result = await firstValueFrom(this.validate(coupon_key));\n\n if (result.valid && result.id) {\n this.addCoupon(result.id, coupon_key);\n }\n\n return result.valid;\n } catch (error) {\n return false;\n }\n }\n\n public removeCoupon(id: number): void {\n this.cache.delete(id);\n\n this.cacheCoupons();\n this.applied.next();\n }\n\n public getAppliedCouponKeys(): string[] {\n return [...this.cache.values()];\n }\n\n public getAppliedCoupons(): Observable<EsolveCoupon[]> {\n const coupon_ids = [...this.cache.keys()];\n\n return this.http\n .get<EsolveGetResponse<EsolveCouponRecord[]>>(\n `${this.config.api_url}/get-applied-coupons.php`,\n {\n params: {\n coupons: coupon_ids.join(','),\n },\n },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processCoupons(response.records);\n }),\n );\n }\n\n public reset() {\n this.deleteCoupons();\n }\n\n private retrieveCache(): EsolveCouponsCache {\n if (this.cookieService.check(this.storage_key) || this.getBackup()) {\n let coupons_json = this.cookieService.get(this.storage_key);\n\n if (coupons_json === '') {\n const local_store_data = this.getBackup();\n\n if (local_store_data) {\n coupons_json = local_store_data;\n }\n }\n\n try {\n return this.jsonDecodeMap(coupons_json);\n } catch (error) {\n // soft error\n }\n }\n\n return new Map();\n }\n\n private cacheCoupons(): void {\n if (this.cache.size > 0) {\n const coupons_json = this.jsonEncodeMap(this.cache);\n\n this.cookieService.set(\n this.storage_key,\n coupons_json,\n undefined,\n '/',\n );\n\n this.setBackup(coupons_json);\n } else {\n this.deleteCoupons();\n }\n }\n\n private deleteCoupons(): void {\n this.cache.clear();\n this.cookieService.delete(this.storage_key, '/');\n\n this.removeBackup();\n }\n\n private getBackup(): string | null {\n if (!this.is_browser) {\n return null;\n }\n\n if (!localStorage) {\n return null;\n }\n\n return localStorage.getItem(this.storage_key);\n }\n\n private setBackup(data: string): void {\n if (!this.is_browser) {\n return;\n }\n\n if (!localStorage) {\n return;\n }\n\n localStorage.setItem(this.storage_key, data);\n }\n\n private removeBackup(): void {\n if (!this.is_browser) {\n return;\n }\n\n if (!localStorage) {\n return;\n }\n\n localStorage.removeItem(this.storage_key);\n }\n\n private addCoupon(id: number, key: string): void {\n if (!this.cache.has(id)) {\n this.cache.set(id, key);\n this.cacheCoupons();\n }\n\n this.applied.next();\n }\n\n private setStorageKey(): void {\n if (\n typeof this.config.coupon_storage_key === 'string' &&\n this.config.coupon_storage_key !== ''\n ) {\n this.storage_key = this.config.coupon_storage_key;\n }\n }\n\n private jsonEncodeMap(data: EsolveCouponsCache): string {\n if (!(data instanceof Map)) {\n throw new Error('Invalid map type');\n }\n\n return JSON.stringify(data, (key, value) => {\n if (value instanceof Map) {\n return {\n dataType: 'Map',\n value: [...value],\n };\n } else {\n return value;\n }\n });\n }\n\n private jsonDecodeMap(json_data: string): EsolveCouponsCache {\n const data = JSON.parse(json_data, (key, value) => {\n if (typeof value === 'object' && value !== null) {\n if (value.dataType === 'Map') {\n return new Map(value.value);\n }\n }\n\n return value;\n });\n\n if (data instanceof Map) {\n return data;\n }\n\n throw new Error('Invalid map type');\n }\n\n private processCoupons(records: EsolveCouponRecord[]): EsolveCoupon[] {\n const coupons: EsolveCoupon[] = [];\n\n if (records) {\n for (const record of records) {\n const coupon = new EsolveCoupon(record);\n\n coupons.push(coupon);\n }\n }\n\n return coupons;\n }\n}\n","// Classes\nexport * from './classes';\n\n// Interfaces\nexport * from './interfaces';\n\n// Types\nexport * from './types';\n\n// Service\nexport * from './esolve-coupons.service';\n","import { EsolveVoucherRecord } from '../interfaces';\n\nexport class EsolveVoucher {\n public id = 0;\n public identifier = '';\n public value = 0;\n /**\n * Shows either the short code or the coupon key (if short code is not set)\n */\n public voucher_code = '';\n\n constructor(record?: EsolveVoucherRecord) {\n if (record) {\n this.id = +record.id;\n this.identifier = record.identifier;\n this.value = +record.value;\n this.voucher_code = record.voucher_code;\n }\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { inject, Injectable, PLATFORM_ID } from '@angular/core';\n\nimport { BehaviorSubject, firstValueFrom, Observable, Subject } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveCookieService, EsolveGetResponse } from '../shared';\n\nimport { EsolveVoucher } from './classes';\nimport {\n EsolveVoucherRecord,\n EsolveVoucherValidation,\n EsolveVoucherValidationError,\n EsolveVoucherValidationResult,\n} from './interfaces';\nimport { EsolveVouchersCache } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveVouchersService {\n private readonly is_browser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly http = inject(HttpClient);\n private readonly config = inject(EsolveConfigService);\n private readonly cookieService = inject(EsolveCookieService);\n\n private storage_key = '_ng_eslv_vouchers';\n private cache: EsolveVouchersCache = new Map();\n private applied = new BehaviorSubject<void>(undefined);\n private validation_error = new Subject<\n EsolveVoucherValidationError | undefined\n >();\n\n constructor() {\n this.setStorageKey();\n this.cache = this.retrieveCache();\n }\n\n public onValidationError(): Observable<\n EsolveVoucherValidationError | undefined\n > {\n return this.validation_error.asObservable();\n }\n\n public onApplied(): Observable<void> {\n return this.applied.asObservable();\n }\n\n public validate(\n voucher_key: string,\n ): Observable<EsolveVoucherValidationResult> {\n return this.http\n .get<EsolveGetResponse<EsolveVoucherValidation>>(\n `${this.config.api_url}/get-validate-voucher.php`,\n {\n params: {\n voucher_key,\n },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n const valid = response.records.valid;\n\n const result: EsolveVoucherValidationResult = {\n valid,\n };\n\n if (!valid) {\n const error = response.records.error;\n this.validation_error.next(error);\n } else if (valid) {\n result.id = response.records.id;\n }\n\n return result;\n }),\n catchError(() => {\n this.validation_error.next(undefined);\n\n return [{ valid: false }];\n }),\n );\n }\n\n public async applyVoucher(voucher_key: string): Promise<boolean> {\n try {\n if (voucher_key.trim() === '') {\n return false;\n }\n\n const result = await firstValueFrom(this.validate(voucher_key));\n\n if (result.valid && result.id) {\n this.addVoucher(result.id, voucher_key);\n }\n\n return result.valid;\n } catch (error) {\n return false;\n }\n }\n\n public removeVoucher(id: number): void {\n this.cache.delete(id);\n\n this.cacheVouchers();\n this.applied.next();\n }\n\n public getAppliedVoucherKeys(): string[] {\n return [...this.cache.values()];\n }\n\n public getAppliedVouchers(): Observable<EsolveVoucher[]> {\n const voucher_ids = [...this.cache.keys()];\n\n return this.http\n .get<EsolveGetResponse<EsolveVoucherRecord[]>>(\n `${this.config.api_url}/get-applied-vouchers.php`,\n {\n params: {\n vouchers: voucher_ids.join(','),\n },\n },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processVouchers(response.records);\n }),\n );\n }\n\n public reset() {\n this.deleteVouchers();\n }\n\n private retrieveCache(): EsolveVouchersCache {\n if (this.cookieService.check(this.storage_key) || this.getBackup()) {\n let vouchers_json = this.cookieService.get(this.storage_key);\n\n if (vouchers_json === '') {\n const local_store_data = this.getBackup();\n\n if (local_store_data) {\n vouchers_json = local_store_data;\n }\n }\n\n try {\n return this.jsonDecodeMap(vouchers_json);\n } catch (error) {\n // soft error\n }\n }\n\n return new Map();\n }\n\n private cacheVouchers(): void {\n if (this.cache.size > 0) {\n const vouchers_json = this.jsonEncodeMap(this.cache);\n\n this.cookieService.set(\n this.storage_key,\n vouchers_json,\n undefined,\n '/',\n );\n\n this.setBackup(vouchers_json);\n } else {\n this.deleteVouchers();\n }\n }\n\n private deleteVouchers(): void {\n this.cache.clear();\n this.cookieService.delete(this.storage_key, '/');\n\n this.removeBackup();\n }\n\n private getBackup(): string | null {\n if (!this.is_browser) {\n return null;\n }\n\n if (!localStorage) {\n return null;\n }\n\n return localStorage.getItem(this.storage_key);\n }\n\n private setBackup(data: string): void {\n if (!this.is_browser) {\n return;\n }\n\n if (!localStorage) {\n return;\n }\n\n localStorage.setItem(this.storage_key, data);\n }\n\n private removeBackup(): void {\n if (!this.is_browser) {\n return;\n }\n\n if (!localStorage) {\n return;\n }\n\n localStorage.removeItem(this.storage_key);\n }\n\n private addVoucher(id: number, key: string): void {\n if (!this.cache.has(id)) {\n this.cache.set(id, key);\n this.cacheVouchers();\n }\n\n this.applied.next();\n }\n\n private setStorageKey(): void {\n if (\n typeof this.config.voucher_storage_key === 'string' &&\n this.config.voucher_storage_key !== ''\n ) {\n this.storage_key = this.config.voucher_storage_key;\n }\n }\n\n private jsonEncodeMap(data: EsolveVouchersCache): string {\n if (!(data instanceof Map)) {\n throw new Error('Invalid map type');\n }\n\n return JSON.stringify(data, (key, value) => {\n if (value instanceof Map) {\n return {\n dataType: 'Map',\n value: [...value],\n };\n } else {\n return value;\n }\n });\n }\n\n private jsonDecodeMap(json_data: string): EsolveVouchersCache {\n const data = JSON.parse(json_data, (key, value) => {\n if (typeof value === 'object' && value !== null) {\n if (value.dataType === 'Map') {\n return new Map(value.value);\n }\n }\n\n return value;\n });\n\n if (data instanceof Map) {\n return data;\n }\n\n throw new Error('Invalid map type');\n }\n\n private processVouchers(records: EsolveVoucherRecord[]): EsolveVoucher[] {\n const vouchers: EsolveVoucher[] = [];\n\n if (records) {\n for (const record of records) {\n const voucher = new EsolveVoucher(record);\n\n vouchers.push(voucher);\n }\n }\n\n return vouchers;\n }\n}\n","// Classes\nexport * from './classes';\n\n// Interfaces\nexport * from './interfaces';\n\n// Types\nexport * from './types';\n\n// Service\nexport * from './esolve-vouchers.service';\n","import { inject, Injectable } from '@angular/core';\n\nimport {\n HttpClient,\n HttpErrorResponse,\n HttpParams,\n} from '@angular/common/http';\n\nimport { iif, Observable, of } from 'rxjs';\nimport { catchError, map, switchMap } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveErrorHandlerService } from '../shared/errors';\nimport {\n EsolveDeleteResponse,\n EsolveGetResponse,\n EsolvePostResponseItem,\n EsolveResponseHandlerService,\n EsolveResponseResult,\n EsolveSetResponse,\n} from '../shared/response';\nimport { EsolveResult } from '../shared/esolve-result.model';\n\nimport { EsolveCouponsService } from '../coupons';\nimport { EsolveTransactionType } from '../transactions';\nimport { EsolveVouchersService } from '../vouchers';\n\nimport {\n EsolveCartAlternative,\n EsolveCartItem,\n EsolveCartTotals,\n EsolveCheckoutResult,\n EsolveEmptyCartResult,\n EsolveTransactionAnalyticsData,\n} from './classes';\nimport {\n EsolveAdditionalWhere,\n EsolveCartAlternativeRecord,\n EsolveCartItemRecord,\n EsolveCartItemResponse,\n EsolveCartSetItem,\n EsolveCartTotalsRecord,\n EsolveCheckoutBody,\n EsolveCheckoutResponse,\n EsolveTimeSlotCheckout,\n EsolveTrackingCode,\n EsolveTransactionAnalyticsDataRecord,\n} from './interfaces';\nimport {\n EsolveCart,\n EsolveCartSetAction,\n EsolveCartEmptyResponse,\n EsolveCartAlternativesMap,\n} from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveCartService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n private readonly coupons = inject(EsolveCouponsService);\n private readonly vouchers = inject(EsolveVouchersService);\n\n private _cached_tracking = 0;\n\n /**\n * Retrieves the current cart\n *\n * @returns An `Observable` with an array of cart items\n */\n public getCart(): Observable<EsolveCart> {\n let params = new HttpParams();\n\n const coupons = this.coupons.getAppliedCouponKeys();\n\n if (coupons.length > 0) {\n params = params.set('coupons', coupons.join(','));\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveCartItemRecord[]>>(\n `${this.config.api_url}/get-cart.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processCart(response.records);\n }),\n );\n }\n\n /**\n * Updates the cart by preforming various actions, such as adding, editing or removing items from the cart.\n *\n * @param items An array of options to update the cart\n * @param action The default action to preform\n *\n * @returns An `Observable` with an array of responses that gives feedback on the requested changes\n */\n public setCart(\n items: EsolveCartSetItem[],\n action: EsolveCartSetAction = 'add',\n ): Observable<EsolveCartItemResponse[]> {\n const body = {\n items,\n action,\n };\n\n return this.http\n .post<EsolveSetResponse<EsolveCartItemResponse>>(\n `${this.config.api_url}/set-cart-item.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((response) => {\n if (response.responses === undefined) {\n throw response;\n }\n\n return response.responses;\n }),\n );\n }\n\n public setCartEmpty(\n type: EsolveTransactionType,\n additional_where: EsolveAdditionalWhere[],\n ): Observable<EsolveEmptyCartResult> {\n const body = {\n type,\n additional_where,\n };\n\n return this.http\n .post<EsolveSetResponse<EsolveCartEmptyResponse>>(\n `${this.config.api_url}/set-cart-empty.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n this._cached_tracking = 0;\n\n return new EsolveEmptyCartResult(response);\n },\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-cart-empty',\n errorRes,\n );\n }),\n );\n }\n\n /**\n * Retrieves the totals of the cart with all the totals calculated\n *\n * @returns An `Observable` with an object containing cart totals\n */\n public getTotals(\n type?: EsolveTransactionType,\n ): Observable<EsolveCartTotals> {\n let params = new HttpParams({\n fromObject: {\n type: type ?? '',\n },\n });\n\n const vouchers = this.vouchers.getAppliedVoucherKeys();\n\n if (vouchers.length > 0) {\n params = params.set('vouchers', vouchers.join(','));\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveCartTotalsRecord>>(\n `${this.config.api_url}/get-cart-totals.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n return this.processCartTotals(response.records);\n }),\n );\n }\n\n /**\n * Retrieves a tracking code for the cart\n *\n * @returns An `Observable` with the cart tracking code\n */\n public getTrackingCode(): Observable<number> {\n return iif(\n () => this._cached_tracking > 0,\n of(this._cached_tracking),\n this.http\n .get<EsolveGetResponse<EsolveTrackingCode>>(\n `${this.config.api_url}/get-checkout-tracking.php`,\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n this._cached_tracking = response.records.tracking;\n\n return response.records.tracking;\n }),\n ),\n );\n }\n\n /**\n * Get the data of the transaction for the analytics\n *\n * @param transaction_id ID of the transaction used in eSolve\n *\n * @returns An `Observable` with the analytics data\n */\n public getTransactionAnalyticsData<T = any>(\n transaction_id: number,\n ): Observable<EsolveTransactionAnalyticsData<T>> {\n return this.http\n .get<EsolveGetResponse<EsolveTransactionAnalyticsDataRecord<T>>>(\n `${this.config.api_url}/get-transaction-analytics-data.php`,\n {\n params: {\n transaction_id,\n },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n return new EsolveTransactionAnalyticsData<T>(\n response.records,\n );\n }),\n );\n }\n\n /**\n * Initiates checkout of the cart items\n *\n * @param type The cart type that needs to be checked out\n * @param addresses_id The ID of the delivery address\n * @param shipping_id The ID of the shipping method\n * @param payment_method_id The ID of the selected payment method\n * @param location_id The ID of the selected branch from with shipping needs to be calculated\n * @param comments Additional comments on the cart\n *\n * @returns An `Observable` with the transaction ID\n */\n public checkout(\n type: EsolveTransactionType,\n addresses_id: number,\n shipping_id: number,\n payment_method_id = 0,\n location_id = 0,\n comments = '',\n time_slot?: EsolveTimeSlotCheckout,\n apply_wallet?: boolean,\n ): Observable<EsolveCheckoutResult> {\n const body: EsolveCheckoutBody = {\n type,\n addresses_id,\n shipping_id,\n payment_method_id,\n location_id,\n comments,\n tracking: 0,\n time_slot,\n apply_wallet,\n };\n\n return this.getTrackingCode().pipe(\n switchMap((tracking) => {\n if (tracking <= 0) {\n throw tracking;\n }\n\n body.tracking = tracking;\n\n const voucher_keys = this.vouchers.getAppliedVoucherKeys();\n\n if (voucher_keys.length > 0) {\n body.vouchers = voucher_keys;\n }\n\n return this.http\n .post<EsolveSetResponse<EsolveCheckoutResponse>>(\n `${this.config.api_url}/set-checkout.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n this._cached_tracking = 0;\n this.coupons.reset();\n this.vouchers.reset();\n\n return new EsolveCheckoutResult(response);\n },\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-checkout',\n errorRes,\n );\n }),\n );\n }),\n );\n }\n\n public getCartAlternatives(): Observable<EsolveCartAlternativesMap> {\n return this.http\n .get<EsolveGetResponse<EsolveCartAlternativeRecord[]>>(\n `${this.config.api_url}/get-cart-alternatives.php`,\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processCartAlternatives(response.records);\n }),\n );\n }\n\n /**\n * Set an alternative stock item to current cart item\n *\n * @param id It is used to identify the specific cart item for which the alternative is being set\n * @param alternative The alternative value that you want to set for a specific cart item.\n * @returns an Observable of type EsolveResponseResult.\n */\n public setCartAlternative(\n id: number,\n alternative: string,\n ): Observable<EsolveResponseResult> {\n return this.http\n .post<EsolveSetResponse<EsolvePostResponseItem>>(\n `${this.config.api_url}/set-cart-alternatives.php`,\n {\n cart_id: id,\n alternative: alternative,\n },\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveResponseResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-cart-alternatives',\n errorRes,\n );\n }),\n );\n }\n\n public deleteCartAlternative(id: number): Observable<EsolveResult> {\n return this.http\n .delete<EsolveDeleteResponse>(\n `${this.config.api_url}/delete-cart-alternative.php`,\n {\n params: { id },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) => {\n if (\n http_response.result === undefined ||\n http_response.result === null ||\n http_response.result.status !== 'success'\n ) {\n throw http_response;\n }\n\n return new EsolveResult(\n http_response.result.status,\n http_response.result.code,\n http_response.result.message,\n );\n }),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpDeleteError(\n 'delete-cart-alternative',\n errorRes,\n );\n }),\n );\n }\n\n /**\n * Processes the eSolve tree records\n *\n * @param cart_item_records Records to process\n * @returns An array of processed cart items\n */\n private processCart(cart_item_records: EsolveCartItemRecord[]): EsolveCart {\n const cart_items: EsolveCartItem[] = [];\n\n if (cart_item_records) {\n for (const cart_item_record of cart_item_records) {\n cart_items.push(new EsolveCartItem(cart_item_record));\n }\n }\n\n return cart_items;\n }\n\n /**\n * Processes the eSolve cart alternatives records\n *\n * @param records Records to process\n *\n * @returns A `Map` of processed cart alternatives\n */\n private processCartAlternatives(\n records: EsolveCartAlternativeRecord[],\n ): EsolveCartAlternativesMap {\n const alternatives: EsolveCartAlternativesMap = new Map();\n\n for (const record of records) {\n alternatives.set(\n +record.item_id,\n new EsolveCartAlternative(record),\n );\n }\n\n return alternatives;\n }\n\n /**\n * Processes the eSolve cart totals\n *\n * @param record Data to process\n * @returns Processed cart totals\n */\n private processCartTotals(\n record: EsolveCartTotalsRecord,\n ): EsolveCartTotals {\n const cart_totals = new EsolveCartTotals(\n +record.records,\n +record.items,\n +record.total,\n +record.vat,\n +record.discount,\n +record.vouchers,\n +record.allowance,\n );\n\n return cart_totals;\n }\n}\n","import { EsolveAddressType } from '../../account';\n\nexport class EsolveTransactionAddress {\n constructor(\n public recipient: string,\n public address_type: EsolveAddressType,\n public address_description: string,\n public street_number: string,\n public street: string,\n public suburb: string,\n public city: string,\n public province: string,\n public country: string,\n public postal_code: string,\n public pobox: string,\n ) {}\n}\n","export class EsolveTransactionClient {\n constructor(\n public id: number,\n public account: string,\n public company_name: string,\n public branch_code: string,\n public email: string,\n public first_name: string,\n public last_name: string,\n public contact_number: string,\n ) {}\n}\n","export class EsolveTransactionItemPrice {\n constructor(\n /**\n * Price without tax\n */\n public price: number,\n /**\n * Price with tax\n */\n public price_with_tax: number,\n /**\n * Price without tax and with discounts applied if applicable\n */\n public price_discounted: number,\n /**\n * Price with tax and with discounts applied if applicable\n */\n public price_with_tax_discounted: number,\n ) {}\n}\n","import { EsolveStockImageSize } from '../../stock';\n\nimport { EsolveTransactionItemRecord } from '../interfaces';\n\nimport { EsolveTransactionItemPrice } from './esolve-transaction-item-price.model';\n\nexport class EsolveTransactionItem {\n public id = 0;\n public code = '';\n public name = '';\n public sef_name = '';\n public image_name = '';\n public image_last_modified = '';\n public category_description = '';\n public subcategory_description = '';\n public pack_description = '';\n public pack_size = 0;\n public qty = 0;\n public discount = 0;\n public vat_rate = 0;\n public price: EsolveTransactionItemPrice;\n public line_total: EsolveTransactionItemPrice;\n\n /**\n * Path to tiny stock image\n */\n public get tiny_image_src(): string {\n return this.getImagePath('tiny');\n }\n\n /**\n * Path to thumbnail stock image\n */\n public get thumbnail_image_src(): string {\n return this.getImagePath('thumb');\n }\n\n /**\n * Path to small stock image\n */\n public get small_image_src(): string {\n return this.getImagePath('small');\n }\n\n /**\n * Path to big stock image\n */\n public get big_image_src(): string {\n return this.getImagePath('big');\n }\n\n /**\n * Path to original stock image\n */\n public get original_image_src(): string {\n return this.getImagePath('original');\n }\n\n constructor(record?: Partial<EsolveTransactionItemRecord>) {\n if (record) {\n this.id = record.id ?? 0;\n this.code = record.code ?? '';\n this.name = record.name ?? '';\n this.sef_name = record.sef_name ?? '';\n this.image_name = record.image_name ?? '';\n this.image_last_modified = record.image_last_modified ?? '';\n this.category_description = record.category_description ?? '';\n this.subcategory_description = record.subcategory_description ?? '';\n this.pack_description = record.pack_description ?? '';\n this.pack_size = +(record.items_in_pack ?? 0);\n this.qty = +(record.qty ?? 0);\n this.discount = +(record.discount ?? 0);\n this.vat_rate = +(record.vat_rate ?? 0);\n\n this.price = new EsolveTransactionItemPrice(\n +(record.price_exclusive ?? 0),\n +(record.price_inclusive ?? 0),\n +(record.price_exclusive_after_discount ?? 0),\n +(record.price_inclusive_after_discount ?? 0),\n );\n\n this.line_total = new EsolveTransactionItemPrice(\n +(record.line_total_exclusive ?? 0),\n +(record.line_total_inclusive ?? 0),\n +(record.line_total_exclusive_after_discount ?? 0),\n +(record.line_total_inclusive_after_discount ?? 0),\n );\n } else {\n this.price = new EsolveTransactionItemPrice(0, 0, 0, 0);\n this.line_total = new EsolveTransactionItemPrice(0, 0, 0, 0);\n }\n }\n\n public getImagePath(image_size: EsolveStockImageSize): string {\n if (this.image_name !== '') {\n let param = '';\n\n if (this.image_last_modified !== '') {\n param = `?t=${this.image_last_modified}`;\n }\n\n return `/images/stock/${image_size}/${this.image_name}${param}`;\n }\n\n return '';\n }\n}\n","import { EsolveList } from '../../shared/esolve-list.model';\n\nimport { EsolveTransaction } from './esolve-transaction.model';\n\nexport class EsolveTransactionList extends EsolveList<EsolveTransaction> {}\n","export class EsolveLocationAddress {\n constructor(\n public street: string,\n public suburb: string,\n public city: string,\n public province: string,\n public country: string,\n public postal_code: string,\n public latitude: number,\n public longitude: number,\n ) {}\n}\n","export class EsolveLocationContactInfo {\n constructor(\n public telnumber: string[],\n public cellnumber: string,\n public email: string,\n public fax: string,\n ) {}\n}\n","export class EsolveLocationGEO {\n constructor(\n public distance: number,\n public range: number,\n public target_description: string,\n ) {}\n}\n","export class EsolveLocationPOBoxAddress {\n constructor(\n public pobox: string,\n public city: string,\n public postal_code: string,\n ) {}\n}\n","export class EsolveLocationTradingDay {\n constructor(\n public open: string,\n public close: string,\n ) {}\n}\n","import { EsolveLocationTradingDay } from './esolve-location-trading-day.model';\n\nexport class EsolveLocationTradingTimes {\n constructor(\n public monday: EsolveLocationTradingDay,\n public tuesday: EsolveLocationTradingDay,\n public wednesday: EsolveLocationTradingDay,\n public thursday: EsolveLocationTradingDay,\n public friday: EsolveLocationTradingDay,\n public saturday: EsolveLocationTradingDay,\n public sunday: EsolveLocationTradingDay,\n public public_holiday: EsolveLocationTradingDay,\n public trading_hours_additional_info: string = '',\n ) {}\n}\n","import { EsolveLocationRecord } from '../interfaces';\nimport { EsolveLocationAddress } from './esolve-location-address.model';\nimport { EsolveLocationContactInfo } from './esolve-location-contact-info.model';\nimport { EsolveLocationPOBoxAddress } from './esolve-location-pobox-address.model';\nimport { EsolveLocationTradingTimes } from './esolve-location-trading-times.model';\nimport { EsolveLocationTradingDay } from './esolve-location-trading-day.model';\nimport { EsolveLocationGEO } from './esolve-location-geo.model';\nimport { EsolveCustomFields } from '../../shared/custom-fields';\n\nexport class EsolveLocation<T extends EsolveCustomFields = EsolveCustomFields> {\n public id: number;\n public identifier: string;\n public description: string;\n public head_office: boolean;\n public default_location_for_payment_methods: boolean;\n public external_system_code: string;\n public erp_identifier: string;\n public userid: number;\n public importance: number;\n public active: boolean;\n public dispatches_stock: boolean;\n public include_on_enquiries: boolean;\n public include_on_store_locator: boolean;\n public website_url: string;\n\n public address: EsolveLocationAddress;\n public pobox_address: EsolveLocationPOBoxAddress;\n public contact_info: EsolveLocationContactInfo;\n public trading_times: EsolveLocationTradingTimes;\n public geo?: EsolveLocationGEO;\n /**\n * Location custom fields\n */\n public custom_fields?: T;\n\n constructor(record: EsolveLocationRecord<T>) {\n this.id = +record.id;\n this.identifier = record.identifier;\n this.description = record.description;\n this.head_office = !!+record.head_office;\n this.erp_identifier = record.erp_identifier;\n this.external_system_code = record.external_system_code;\n this.default_location_for_payment_methods =\n !!+record.default_location_for_payment_methods;\n this.userid = +record.userid;\n this.importance = +record.importance;\n this.active = !!+record.is_active;\n this.dispatches_stock = !!+record.dispatches_stock;\n this.include_on_enquiries = !!+record.include_on_enquiries;\n this.include_on_store_locator = !!+record.include_on_store_locator;\n this.website_url = record.website_url;\n\n this.address = new EsolveLocationAddress(\n record.street,\n record.suburb,\n record.city,\n record.province,\n record.country,\n record.postal_code,\n +record.latitude,\n +record.longitude,\n );\n\n this.pobox_address = new EsolveLocationPOBoxAddress(\n record.pobox,\n record.pobox_city,\n record.pobox_postal_code,\n );\n\n const telnumbers = [];\n\n if (record.branch_telnumber.length > 0) {\n telnumbers.push(record.branch_telnumber);\n }\n\n if (record.branch_telnumber_2.length > 0) {\n telnumbers.push(record.branch_telnumber_2);\n }\n\n if (record.branch_telnumber_3.length > 0) {\n telnumbers.push(record.branch_telnumber_3);\n }\n\n this.contact_info = new EsolveLocationContactInfo(\n telnumbers,\n record.branch_cellnumber,\n record.branch_email,\n record.branch_fax,\n );\n\n const monday = new EsolveLocationTradingDay(\n record.monday_open_time,\n record.monday_close_time,\n );\n\n const tuesday = new EsolveLocationTradingDay(\n record.tuesday_open_time,\n record.tuesday_close_time,\n );\n\n const wednesday = new EsolveLocationTradingDay(\n record.wednesday_open_time,\n record.wednesday_close_time,\n );\n\n const thursday = new EsolveLocationTradingDay(\n record.thursday_open_time,\n record.thursday_close_time,\n );\n\n const friday = new EsolveLocationTradingDay(\n record.friday_open_time,\n record.friday_close_time,\n );\n\n const saturday = new EsolveLocationTradingDay(\n record.saturday_open_time,\n record.saturday_close_time,\n );\n\n const sunday = new EsolveLocationTradingDay(\n record.sunday_open_time,\n record.sunday_close_time,\n );\n\n const public_holiday = new EsolveLocationTradingDay(\n record.public_holiday_open_time,\n record.public_holiday_close_time,\n );\n\n this.trading_times = new EsolveLocationTradingTimes(\n monday,\n tuesday,\n wednesday,\n thursday,\n friday,\n saturday,\n sunday,\n public_holiday,\n record.trading_hours_additional_info,\n );\n\n this.geo = new EsolveLocationGEO(\n record.distance,\n record.range,\n record.target_description,\n );\n\n if (record.custom_fields) {\n this.custom_fields = record.custom_fields;\n }\n }\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\n\nimport { EsolveLocation } from './esolve-location.model';\n\n/**\n * Location object list\n */\nexport class EsolveLocationList<\n T extends EsolveCustomFields = EsolveCustomFields,\n> {\n constructor(\n public locations: EsolveLocation<T>[],\n public total: number,\n public page: number,\n ) {}\n}\n","// Classes\nexport * from './esolve-location-address.model';\nexport * from './esolve-location-contact-info.model';\nexport * from './esolve-location-geo.model';\nexport * from './esolve-location-pobox-address.model';\nexport * from './esolve-location-trading-day.model';\nexport * from './esolve-location-trading-times.model';\nexport * from './esolve-location.model';\nexport * from './esolve-location-list.model';\n","// Types\nexport * from './esolve-location-sort-field.type';\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\nimport { EsolveCustomFields } from '../shared/custom-fields';\nimport {\n EsolveFilterFactory,\n EsolveFilterList,\n EsolveFilterRecordList,\n EsolveMultipleSelectFilter,\n EsolveRangeFilter,\n EsolveSingleSelectFilter,\n} from '../shared/filters';\n\nimport {\n EsolveLocationFilterOptions,\n EsolveLocationOptions,\n EsolveLocationRecord,\n} from './interfaces';\nimport { EsolveLocation, EsolveLocationList } from './classes';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveLocationsService<\n T extends EsolveCustomFields = EsolveCustomFields,\n> {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n /**\n * Retrieves a list of stock locations\n *\n * @returns An `Observable` with an array of stock locations\n */\n public getStockLocations(\n options?: EsolveLocationOptions,\n ): Observable<EsolveLocationList<T>> {\n let params = new HttpParams();\n\n if (options) {\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.sort) {\n const sort = options.sort;\n\n if (sort.field) {\n params = params.set('sort', sort.field);\n }\n\n if (sort.order) {\n params = params.set('order', sort.order);\n }\n }\n\n if (options.search_phrase) {\n params = params.set('search_phrase', options.search_phrase);\n }\n\n if (options.is_active) {\n params = params.set('is_active', options.is_active);\n }\n\n if (options.dispatches_stock) {\n params = params.set(\n 'dispatches_stock',\n options.dispatches_stock,\n );\n }\n\n if (options.province) {\n params = params.set('province', options.province);\n }\n\n if (options.country) {\n params = params.set('country', options.country);\n }\n\n if (options.filters) {\n let filters = options.filters;\n\n if (!Array.isArray(filters)) {\n filters = EsolveFilterFactory.covertFromObj(filters);\n }\n\n params = EsolveFilterFactory.convertToHttpParams(\n filters,\n params,\n );\n }\n }\n\n return this.getLocationRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const locations: EsolveLocation<T>[] = [];\n\n response.records.forEach((locationRecord) => {\n locations.push(this.processLocation(locationRecord));\n });\n\n return new EsolveLocationList(\n locations,\n +response.additional_data.total_records,\n options?.page ?? 0,\n );\n }),\n );\n }\n\n /**\n * Retrieves a list of stock locations using the address_id as parameter or the latitude and longitude.\n * Set the addresses_id to 0 and the gps coordinates in order to retrieve the locations list when the address isn't\n * yet saved.\n *\n * @param addresses_id if supplied, the latitude and longitude on the address will be used.\n * @param latitude if supplied and address_id > 0, the value is ignored.\n * @param longitude if supplied and address_id > 0, the value is ignored.\n *\n * @returns An `Observable` with an array of stock locations\n */\n public getStockLocationsGeo(\n addresses_id = 0,\n latitude = 0,\n longitude = 0,\n ): Observable<EsolveLocation<T>[]> {\n return this.http\n .get<EsolveGetResponse<EsolveLocationRecord<T>[]>>(\n `${this.config.api_url}/get-locations-geo.php`,\n {\n params: {\n addresses_id,\n latitude,\n longitude,\n },\n },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processStockLocations(response.records);\n }),\n );\n }\n\n public getLocationFilters(\n options: EsolveLocationFilterOptions,\n ): Observable<EsolveFilterList> {\n const params = new HttpParams({\n fromObject: {\n country: options.country ?? '',\n province: options.province ?? '',\n fields: options.fields.join(','),\n },\n });\n\n return this.http\n .get<EsolveGetResponse<EsolveFilterRecordList>>(\n `${this.config.api_url}/get-location-filters.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const filters = [];\n\n for (const record of response.records) {\n let filter = null;\n\n if (record.type === 'range') {\n filter = new EsolveRangeFilter(\n record.field,\n +record.min,\n +record.max,\n );\n } else if (record.type === 'single') {\n filter = new EsolveSingleSelectFilter(\n record.field,\n record.values,\n );\n } else if (record.type === 'multiple') {\n filter = new EsolveMultipleSelectFilter(\n record.field,\n record.values,\n );\n }\n\n if (filter) {\n filters.push(filter);\n }\n }\n\n return filters;\n }),\n );\n }\n\n /**\n * Retrieves location records from HTTP params.\n * @param params HTTP client parameters\n */\n private getLocationRecords(\n params: HttpParams,\n ): Observable<EsolveGetResponse<EsolveLocationRecord<T>[]>> {\n return this.http.get<EsolveGetResponse<EsolveLocationRecord<T>[]>>(\n `${this.config.api_url}/get-locations.php`,\n { params },\n );\n }\n\n /**\n * Processes the eSolve stock location records.\n *\n * @param records Records to process\n * @returns An array of processed stock location records\n */\n private processStockLocations(\n records: EsolveLocationRecord<T>[],\n ): EsolveLocation<T>[] {\n const locations: EsolveLocation<T>[] = [];\n\n for (const record of records) {\n locations.push(this.processLocation(record));\n }\n\n return locations;\n }\n\n /**\n * Processes the eSolve stock item record and converts it to an object.\n *\n * @param record eSolve stock item record\n */\n private processLocation(\n record: EsolveLocationRecord<T>,\n ): EsolveLocation<T> {\n return new EsolveLocation<T>(record);\n }\n}\n","import { EsolveLocation } from '../../locations';\n\nexport class EsolveTransactionLocation extends EsolveLocation {}\n","export class EsolveTransactionPaymentMethod {\n constructor(\n public id: number,\n public name: string,\n public description: string,\n public integration_type: string,\n public service_provider: string,\n ) {}\n}\n","export class EsolveTransactionShippingMethod {\n constructor(\n public id: number,\n public name: string,\n public delivery_category: string,\n public location: string,\n public description: string,\n public pricing: string,\n public client_to_collect: boolean,\n ) {}\n}\n","export class EsolveTransactionUser {\n constructor(\n public id: number,\n public email: string,\n public first_name: string,\n public last_name: string,\n public tel_number: string,\n public cell_number: string,\n ) {}\n}\n","import { EsolvePickStatusType } from '../types';\n\nexport class EsolveTransactionPick {\n public start_date?: Date;\n public end_date?: Date;\n\n constructor(\n public pick_id: number,\n public status: EsolvePickStatusType,\n ) {}\n}\n","import { parseISO } from 'date-fns';\n\nimport { EsolveTransactionTimeSlotRecord } from '../interfaces';\n\nexport class EsolveTransactionTimeSlot {\n public id: number;\n public text: string;\n public target_date: Date;\n\n constructor(record: EsolveTransactionTimeSlotRecord) {\n this.id = +record.id;\n this.text = record.text;\n this.target_date = parseISO(record.target_date);\n }\n}\n","import { EsolveTransactionRecord } from \"../interfaces\";\n\nexport class EsolveTransactionDelivery {\n public deliveries_id: number;\n public delivery_started?: Date | null;\n public delivery_completed?: Date | null;\n public delivery_cancelled?: Date | null;\n public delivery_resumed?: Date | null;\n public driver_name?: string;\n public driver_rating?: number;\n public vehicle_make?: string;\n public vehicle_model?: string;\n public vehicle_color?: string;\n public vehicle_type?: string;\n\n constructor(record: EsolveTransactionRecord) {\n this.deliveries_id = record.deliveries_id ? +record.deliveries_id : 0;\n\n this.delivery_started = null;\n if (record.delivery_started) {\n this.delivery_started = new Date(+record.delivery_started * 1000);\n }\n\n this.delivery_completed = null;\n if (record.delivery_completed) {\n this.delivery_completed = new Date(+record.delivery_completed * 1000);\n }\n\n this.delivery_cancelled = null;\n if (record.delivery_cancelled) {\n this.delivery_cancelled = new Date(+record.delivery_cancelled * 1000);\n }\n\n this.delivery_resumed = null;\n if (record.delivery_resumed) {\n this.delivery_resumed = new Date(+record.delivery_resumed * 1000);\n }\n\n this.driver_name = record.driver_name;\n this.driver_rating = record.driver_rating;\n this.vehicle_make = record.vehicle_make;\n this.vehicle_model = record.vehicle_model;\n this.vehicle_color = record.vehicle_color;\n this.vehicle_type = record.vehicle_type;\n }\n\n}\n","import {\n EsolveCartAlternative,\n EsolveCartAlternativeRecord,\n EsolveCartAlternativesMap,\n} from '../../cart';\n\nimport { EsolveTransactionType } from '../types';\nimport {\n EsolveTransactionRecord,\n EsolveTransactionItemRecord,\n} from '../interfaces';\n\nimport { EsolveTransactionAddress } from './esolve-transaction-address.model';\nimport { EsolveTransactionClient } from './esolve-transaction-client.model';\nimport { EsolveTransactionItem } from './esolve-transaction-item.model';\nimport { EsolveTransactionLocation } from './esolve-transaction-location.model';\nimport { EsolveTransactionPaymentMethod } from './esolve-transaction-payment-method.model';\nimport { EsolveTransactionShippingMethod } from './esolve-transaction-shipping-method.model';\nimport { EsolveTransactionUser } from './esolve-transaction-user.model';\nimport { EsolveTransactionPick } from './esolve-transaction-pick.model';\nimport { EsolveTransactionTimeSlot } from './esolve-transaction-time-slot.model';\nimport { EsolveTransactionDelivery } from './esolve-transaction-delivery.model';\n\nexport class EsolveTransaction {\n public id: number;\n public type: EsolveTransactionType;\n public status: string;\n public comment: string;\n public loyalty_number: string;\n public external_order_number: string;\n public external_invoice_number: string;\n\n // Dates\n public date: Date;\n public expected_date: Date;\n\n public client?: EsolveTransactionClient;\n public user?: EsolveTransactionUser;\n\n // Location\n public location?: EsolveTransactionLocation;\n\n // Totals\n public invoice_amount: number;\n public vat: number;\n public discount: number;\n public total: number;\n public shipping_total: number;\n public insurance_total: number;\n public allowance: number;\n\n // Payment\n public payment_method?: EsolveTransactionPaymentMethod;\n public payment: number;\n public gateway_transaction_id: string;\n public payment_reference: string;\n public payment_description: string;\n\n // Shipping\n public shipping_method?: EsolveTransactionShippingMethod;\n\n // Address Details\n public address: EsolveTransactionAddress;\n\n // Transaction Items\n public items: EsolveTransactionItem[] = [];\n public alternatives?: EsolveCartAlternativesMap;\n\n public time_slot?: EsolveTransactionTimeSlot;\n\n //Picking\n public pick?: EsolveTransactionPick;\n\n //Delivery\n public delivery?: EsolveTransactionDelivery;\n\n constructor(record: EsolveTransactionRecord) {\n this.id = +record.id;\n this.type = record.transaction_type;\n this.status = record.status;\n this.comment = record.comment ?? '';\n this.loyalty_number = record.loyaltynumber;\n this.external_order_number = record.external_order_number;\n this.external_invoice_number = record.external_invoice_number;\n\n this.date = new Date(+record.txdate_timestamp * 1000);\n this.expected_date = new Date(+record.expected_date_timestamp * 1000);\n\n this.invoice_amount = +record.invoice_amount;\n this.vat = +record.vat;\n this.discount = +record.discount;\n this.total = +record.total;\n this.shipping_total = +record.shipping_total;\n this.insurance_total = +record.insurance_total;\n this.allowance = +record.allowance;\n\n this.payment = +record.payment;\n this.payment_reference = record.payment_reference;\n this.payment_description = record.payment_description;\n this.gateway_transaction_id = record.gateway_transaction_id;\n\n this.address = new EsolveTransactionAddress(\n record.recipient,\n record.address_type,\n record.address_description,\n record.street_number,\n record.street,\n record.suburb,\n record.city,\n record.province,\n record.country,\n record.postal_code,\n record.pobox,\n );\n\n if (record.user) {\n this.user = new EsolveTransactionUser(\n +record.user.id,\n record.user.email,\n record.user.firstname,\n record.user.surname,\n record.user.telnumber,\n record.user.cellnumber,\n );\n }\n\n if (record.client) {\n this.client = new EsolveTransactionClient(\n +record.client.id,\n record.client.account,\n record.client.company_name,\n record.client.branch_code,\n record.client.email,\n record.client.firstname,\n record.client.surname,\n record.client.contact_number,\n );\n }\n\n if (record.location_details) {\n this.location = new EsolveTransactionLocation(\n record.location_details,\n );\n }\n\n if (record.payment_method_details) {\n this.payment_method = new EsolveTransactionPaymentMethod(\n record.payment_method_details.id,\n record.payment_method_details.paymethod_name,\n record.payment_method_details.description,\n record.payment_method_details.integration_type,\n record.payment_method_details.service_provider,\n );\n }\n\n if (record.shipping_method_details) {\n this.shipping_method = new EsolveTransactionShippingMethod(\n +record.shipping_method_details.id,\n record.shipping_method_details.carrier_name,\n record.shipping_method_details.delivery_category,\n record.shipping_method_details.location,\n record.shipping_method_details.description,\n record.shipping_method_details.pricing,\n !!record.shipping_method_details.client_to_collect,\n );\n }\n\n if (record.time_slot) {\n this.time_slot = new EsolveTransactionTimeSlot(record.time_slot);\n }\n\n this.parseTransactionItems(record.transaction_items);\n this.parseAlternatives(record.alternatives);\n\n if (record.cart_pick_id && record.pick_status) {\n this.pick = new EsolveTransactionPick(\n record.cart_pick_id,\n record.pick_status,\n );\n\n if (record.pick_start !== undefined && record.pick_start !== null) {\n this.pick.start_date = new Date(+record.pick_start * 1000);\n }\n\n if (record.pick_end !== undefined && record.pick_end !== null) {\n this.pick.end_date = new Date(+record.pick_end * 1000);\n }\n }\n\n this.delivery = new EsolveTransactionDelivery(record);\n }\n\n private parseTransactionItems(\n record_items: EsolveTransactionItemRecord[],\n ): void {\n for (const record_item of record_items) {\n this.items.push(new EsolveTransactionItem(record_item));\n }\n }\n\n private parseAlternatives(records?: EsolveCartAlternativeRecord[]) {\n if (!records || records.length === 0) {\n return;\n }\n\n this.alternatives = new Map();\n\n for (const record of records) {\n this.alternatives.set(\n record.item_id,\n new EsolveCartAlternative(record),\n );\n }\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { Observable, map, throwError } from 'rxjs';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveFilterFactory } from '../shared/filters';\nimport { EsolveGetResponse } from '../shared/response';\nimport { EsolveErrorHandlerService } from '../shared/errors';\nimport { EsolveSessionService } from '../session';\nimport {\n EsolveTransactionOptions,\n EsolveTransactionRecord,\n} from './interfaces';\nimport { EsolveTransaction, EsolveTransactionList } from './classes';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveTransactionsService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly sessionService = inject(EsolveSessionService);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n\n private _user_id = 0;\n\n public get user_id(): number {\n return this._user_id;\n }\n\n public set user_id(value: number) {\n value = value > 0 ? value : 0;\n\n if (this._user_id !== value) {\n this._user_id = value;\n }\n }\n\n constructor() {\n this.sessionService.getSession().subscribe((session) => {\n if (session.token !== '') {\n this.user_id = session.user_id;\n }\n });\n }\n\n public getTransactions(\n options: EsolveTransactionOptions = {},\n ): Observable<EsolveTransactionList> {\n try {\n this.loginGuard();\n\n let params = new HttpParams();\n\n params = params.set('user_id', this.user_id);\n\n if (options.user_id && options.user_id === -1) {\n params = params.set('user_id', -1);\n }\n\n if (options.erp_identifier) {\n params = params.set('erp_identifier', options.erp_identifier);\n }\n\n if (options.location_id) {\n params = params.set('location_id', options.location_id);\n }\n\n if (options.type) {\n params = params.set('type', options.type);\n }\n\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.from_date) {\n params = params.set('from_date', options.from_date);\n }\n\n if (options.to_date) {\n params = params.set('to_date', options.to_date);\n }\n\n if (options.pick_status) {\n params = params.set('pick_status', options.pick_status);\n }\n\n if (options.from_id) {\n params = params.set('from_id', options.from_id);\n }\n\n if (options.to_id) {\n params = params.set('to_id', options.to_id);\n }\n\n if (options.not_synced) {\n params = params.set('not_synced', options.not_synced);\n }\n\n if (options.sort) {\n const sort = options.sort;\n\n if (sort.field) {\n params = params.set('sort', sort.field);\n }\n\n if (sort.order) {\n params = params.set('order', sort.order);\n }\n }\n\n if (options.filters) {\n let filters = options.filters;\n\n if (!Array.isArray(filters)) {\n filters = EsolveFilterFactory.covertFromObj(filters);\n }\n\n params = EsolveFilterFactory.convertToHttpParams(\n filters,\n params,\n );\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveTransactionRecord[]>>(\n `${this.config.api_url}/get-transactions.php`,\n {\n params: params,\n },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const items = this.processTransactions(\n response.records,\n );\n const total =\n +response.additional_data.total_records ?? 0;\n const rows = options.rows ?? total;\n const page = options.page || 1;\n\n return new EsolveTransactionList(\n items,\n page,\n rows,\n total,\n );\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n public getTransaction(\n id: number,\n user_id?: number,\n ): Observable<EsolveTransaction> {\n try {\n this.loginGuard();\n\n return this.http\n .get<EsolveGetResponse<EsolveTransactionRecord[]>>(\n `${this.config.api_url}/get-transactions.php`,\n {\n params: {\n user_id: user_id ?? this.user_id,\n transaction_id: id,\n },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const items = this.processTransactions(\n response.records,\n );\n\n return items[0];\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n private loginGuard(): void {\n if (this.user_id <= 0) {\n this.errorHandler.throwError('login_required', 'Login is required');\n }\n }\n\n private processTransactions(\n records: EsolveTransactionRecord[],\n ): EsolveTransaction[] {\n const transactions: EsolveTransaction[] = [];\n\n if (records) {\n for (const record of records) {\n const transaction = new EsolveTransaction(record);\n\n transactions.push(transaction);\n }\n }\n\n return transactions;\n }\n}\n","import { EsolvePostResponseItem, EsolveResponseResult } from '../shared';\n\nexport class EsolveSessionShippingUpdateResult extends EsolveResponseResult {\n public shipping_updated: boolean;\n\n constructor(response: EsolvePostResponseItem) {\n super(response);\n\n if (typeof response.esolve_id === 'string') {\n throw new Error('Invalid response id.');\n }\n\n this.shipping_updated = response.esolve_id > 0;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport {\n HttpClient,\n HttpErrorResponse,\n HttpParams,\n} from '@angular/common/http';\n\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport {\n EsolveErrorHandlerService,\n EsolveResponseHandlerService,\n EsolveSetResponse,\n EsolveGetResponse,\n EsolveResult,\n EsolveDeleteResponse,\n EsolveFilterFactory,\n} from '../shared';\nimport { EsolveSessionService } from '../session';\nimport { EsolveCartTotals } from '../cart';\nimport {\n EsolveTransactionRecord,\n EsolveTransaction,\n EsolveTransactionOptions,\n EsolveTransactionList,\n} from '../transactions';\n\nimport {\n EsolveRegistrationPostResponseItem,\n EsolveRegistrationData,\n EsolveRegistrationResult,\n} from './registration';\nimport {\n EsolveAddress,\n EsolveAddressRecord,\n EsolveAddressResult,\n EsolveAddressPostData,\n EsolveAddressResponse,\n EsolveSessionAddressUpdateResult,\n} from './address';\nimport {\n EsolveChangePasswordResult,\n EsolveResetPasswordResult,\n EsolveForgotPasswordResponse,\n EsolveForgotPasswordGetResult,\n} from './password';\nimport {\n EsolveUserAccount,\n EsolveUserAccountData,\n EsolveUserAccountRecord,\n EsolveUserAccountResult,\n EsolveUserClientAccountBalances,\n EsolveUserClientAccountBalancesRecord,\n} from './user-account';\nimport {\n EsolveAccountConfirmationPostResponseItem,\n EsolveAccountConfirmationResult,\n} from './confirmation';\nimport { EsolveLocationOption, EsolveLocationUpdateResult } from './location';\n\nimport { EsolveSessionShippingUpdateResult } from './esolve-session-shipping-result.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveAccountService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly sessionService = inject(EsolveSessionService);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n private _user_id = 0;\n\n public get user_id(): number {\n return this._user_id;\n }\n\n public set user_id(value: number) {\n value = value > 0 ? value : 0;\n\n if (this._user_id !== value) {\n this._user_id = value;\n }\n }\n\n constructor() {\n this.sessionService.getSession().subscribe((session) => {\n if (session.token !== '') {\n this.user_id = session.user_id;\n }\n });\n }\n\n public updateUserAccount(\n user_account_data: EsolveUserAccountData,\n ): Observable<EsolveUserAccountResult> {\n const body = {\n account: user_account_data,\n };\n\n return this.http\n .post<EsolveSetResponse>(\n `${this.config.api_url}/set-user-account.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveUserAccountResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-user-account',\n errorRes,\n );\n }),\n );\n }\n\n public getUserAccount(): Observable<EsolveUserAccount> {\n return this.http\n .get<EsolveGetResponse<EsolveUserAccountRecord[]>>(\n `${this.config.api_url}/get-account.php`,\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length === 0\n ) {\n throw response;\n }\n\n const record = response.records[0];\n\n return this.processUserAccount(record);\n }),\n );\n }\n\n public deleteUserAccount(): Observable<EsolveResult> {\n return this.http\n .delete<EsolveDeleteResponse>(\n `${this.config.api_url}/delete-account.php`,\n {\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) => {\n if (\n http_response.result === undefined ||\n http_response.result === null ||\n http_response.result.status !== 'success'\n ) {\n throw http_response;\n }\n\n return new EsolveResult(\n http_response.result.status,\n http_response.result.code,\n http_response.result.message,\n );\n }),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpDeleteError(\n 'delete-account',\n errorRes,\n );\n }),\n );\n }\n\n public setAddress(\n address_post_data: EsolveAddressPostData,\n ): Observable<EsolveAddressResult> {\n const body = {\n address: address_post_data,\n };\n\n return this.http\n .post<EsolveSetResponse<EsolveAddressResponse>>(\n `${this.config.api_url}/set-address.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveAddressResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-address',\n errorRes,\n );\n }),\n );\n }\n\n public getAddresses(): Observable<EsolveAddress[]> {\n try {\n this.loginGuard();\n\n return this.http\n .get<EsolveGetResponse<EsolveAddressRecord[]>>(\n `${this.config.api_url}/get-addresses.php`,\n {\n params: { user_id: this.user_id },\n },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processUserAddress(response.records);\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n public deleteAddress(id: number): Observable<EsolveResult> {\n return this.http\n .delete<EsolveDeleteResponse>(\n `${this.config.api_url}/delete-address.php`,\n {\n params: { id },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) => {\n if (\n http_response.result === undefined ||\n http_response.result === null ||\n http_response.result.status !== 'success'\n ) {\n throw http_response;\n }\n\n return new EsolveResult(\n http_response.result.status,\n http_response.result.code,\n http_response.result.message,\n );\n }),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpDeleteError(\n 'delete-address',\n errorRes,\n );\n }),\n );\n }\n\n public register(\n user_registration: EsolveRegistrationData,\n guest = false,\n ): Observable<EsolveRegistrationResult> {\n const body = {\n user: user_registration,\n guest_registration: guest,\n };\n\n return this.http\n .post<EsolveSetResponse<EsolveRegistrationPostResponseItem>>(\n `${this.config.api_url}/set-registration.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n if (response.auto_login) {\n const session_data = response.session_data;\n\n this.sessionService.handleUpdateSession({\n user_id: +response.esolve_id,\n location_id: +session_data.location_id,\n addresses_id: +session_data.addresses_id,\n shipping_id: +session_data.shipping_id,\n });\n }\n\n return new EsolveRegistrationResult(response);\n },\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-registration',\n errorRes,\n );\n }),\n );\n }\n\n public changePassword(\n password: string,\n confirm_password: string,\n ): Observable<EsolveChangePasswordResult> {\n const body = {\n password,\n confirm_password,\n };\n\n return this.http\n .post<EsolveSetResponse>(\n `${this.config.api_url}/set-change-password.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n return new EsolveChangePasswordResult(response);\n },\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-change-password',\n errorRes,\n );\n }),\n );\n }\n\n /**\n * Submits the users confirmation key to the relevant backend server in order to\n * confirm the accounts validity. The key was emailed to the user hence if he received\n * it and enters the value, the email account can be seen as valid.\n *\n * @param key The key that was emailed to the registered user's email account.\n * @returns An `Observable` that contains the result of the account confirmation request.\n */\n public accountConfirmationRequest(\n key: string,\n ): Observable<EsolveAccountConfirmationResult> {\n const body = {\n key,\n };\n\n return this.http\n .post<EsolveSetResponse<EsolveAccountConfirmationPostResponseItem>>(\n `${this.config.api_url}/set-account-confirmation.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n if (response.auto_login) {\n this.sessionService.handleUpdateSession({\n user_id: +response.esolve_id,\n location_id: +response.location_id,\n addresses_id: +response.addresses_id,\n shipping_id: +response.shipping_id,\n });\n }\n\n return new EsolveAccountConfirmationResult(\n response,\n );\n },\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-account-confirmation',\n errorRes,\n );\n }),\n );\n }\n\n public sendForgotPasswordRequest(email: string): Observable<boolean> {\n return this.http\n .get<EsolveGetResponse<EsolveForgotPasswordGetResult>>(\n `${this.config.api_url}/get-forgot-password.php`,\n { params: { email } },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n !('reset_link_sent' in response.records)\n ) {\n throw response;\n }\n\n return response.records.reset_link_sent;\n }),\n );\n }\n\n public resetPassword(\n reset_key: string,\n password: string,\n confirm_password: string,\n auto_login = true,\n ): Observable<EsolveResetPasswordResult> {\n return this.http\n .post<EsolveSetResponse<EsolveForgotPasswordResponse>>(\n `${this.config.api_url}/set-forgot-password.php`,\n {\n reset_key,\n password,\n confirm_password,\n auto_login,\n },\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n if (!response.login_required) {\n const session_data = response.session_data;\n\n this.sessionService.handleUpdateSession({\n user_id: +response.esolve_id,\n location_id: +session_data.location_id,\n addresses_id: +session_data.addresses_id,\n shipping_id: +session_data.shipping_id,\n });\n }\n\n return new EsolveResetPasswordResult(response);\n },\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-forgot-password',\n errorRes,\n );\n }),\n );\n }\n\n public updateLocation(\n location_id: number,\n ): Observable<EsolveLocationUpdateResult> {\n return this.updateUserLocation({ location_id });\n }\n\n public updateLocationOnErp(\n erp: string,\n ): Observable<EsolveLocationUpdateResult> {\n return this.updateUserLocation({ erp });\n }\n\n public updateSessionAddress(\n addresses_id: number,\n ): Observable<EsolveSessionAddressUpdateResult> {\n return this.http\n .post<EsolveSetResponse>(\n `${this.config.api_url}/set-session-address.php`,\n {\n addresses_id,\n },\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n if (typeof response.esolve_id === 'string') {\n throw new Error('Invalid response id.');\n }\n\n this.sessionService.handleUpdateSession({\n addresses_id: +response.esolve_id,\n });\n\n return new EsolveSessionAddressUpdateResult(\n response,\n );\n },\n ),\n ),\n );\n }\n\n public updateSessionShipping(\n shipping_id: number,\n ): Observable<EsolveSessionShippingUpdateResult> {\n return this.http\n .post<EsolveSetResponse>(\n `${this.config.api_url}/set-session-shipping.php`,\n {\n shipping_id,\n },\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n if (typeof response.esolve_id === 'string') {\n throw new Error('Invalid response id.');\n }\n\n this.sessionService.handleUpdateSession({\n shipping_id: +response.esolve_id,\n });\n\n return new EsolveSessionShippingUpdateResult(\n response,\n );\n },\n ),\n ),\n );\n }\n\n /**\n * @deprecated Use EsolveTransactionsService for future transaction requests\n */\n public getTransactions(\n options: EsolveTransactionOptions = {},\n ): Observable<EsolveTransactionList> {\n try {\n this.loginGuard();\n\n let params = new HttpParams();\n\n params = params.set('user_id', this.user_id);\n\n if (options.type) {\n params = params.set('type', options.type);\n }\n\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.from_date) {\n params = params.set('from_date', options.from_date);\n }\n\n if (options.to_date) {\n params = params.set('to_date', options.to_date);\n }\n\n if (options.filters) {\n let filters = options.filters;\n\n if (!Array.isArray(filters)) {\n filters = EsolveFilterFactory.covertFromObj(filters);\n }\n\n params = EsolveFilterFactory.convertToHttpParams(\n filters,\n params,\n );\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveTransactionRecord[]>>(\n `${this.config.api_url}/get-transactions.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const items = this.processTransactions(\n response.records,\n );\n const total =\n +response.additional_data.total_records ?? 0;\n const rows = options.rows ?? total;\n const page = options.page || 1;\n\n return new EsolveTransactionList(\n items,\n page,\n rows,\n total,\n );\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n /**\n * @deprecated Use EsolveTransactionsService for future transaction requests\n */\n public getTransaction(id: number): Observable<EsolveTransaction> {\n try {\n this.loginGuard();\n\n return this.http\n .get<EsolveGetResponse<EsolveTransactionRecord[]>>(\n `${this.config.api_url}/get-transactions.php`,\n {\n params: {\n user_id: this.user_id,\n transaction_id: id,\n },\n },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const items = this.processTransactions(\n response.records,\n );\n\n return items[0];\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n public getClientAccountBalances(): Observable<\n EsolveUserClientAccountBalances | undefined\n > {\n try {\n this.loginGuard();\n\n return this.http\n .get<\n EsolveGetResponse<EsolveUserClientAccountBalancesRecord[]>\n >(`${this.config.api_url}/get-client-account-balances.php`)\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processClientBalances(response.records);\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n public genrateStatementDownloadLink(clients_id: number): string {\n try {\n this.loginGuard();\n\n if (clients_id <= 0) {\n return '';\n }\n\n const base_url = `${this.config.api_url}/get-genrated-pdf.php`;\n const queries = [\n {\n key: 'ws_id',\n value: this.config.wsid,\n },\n {\n key: 'clients_id',\n value: clients_id,\n },\n {\n key: 'key',\n value: this.sessionService.getToken(),\n },\n ];\n\n const query_string = queries\n .map((query) => `${query.key}=${query.value}`)\n .join('&');\n\n return `${base_url}?${query_string}`;\n } catch (error) {\n return '';\n }\n }\n\n private processUserAccount(\n record: EsolveUserAccountRecord,\n ): EsolveUserAccount {\n if (!record) {\n throw new Error('Invalid record');\n }\n\n if (+record.userid !== this._user_id) {\n throw new Error('Invalid user account retrieved');\n }\n\n return new EsolveUserAccount(record);\n }\n\n private processUserAddress(\n records: EsolveAddressRecord[],\n ): EsolveAddress[] {\n const user_addresses: EsolveAddress[] = [];\n\n if (!records || this._user_id === 0) {\n return user_addresses;\n }\n\n for (const record of records) {\n if (+record.userid !== this._user_id) {\n continue;\n }\n\n user_addresses.push(new EsolveAddress(record));\n }\n\n return user_addresses;\n }\n\n private processTransactions(\n records: EsolveTransactionRecord[],\n ): EsolveTransaction[] {\n const transactions: EsolveTransaction[] = [];\n\n if (records) {\n for (const record of records) {\n const transaction = new EsolveTransaction(record);\n\n transactions.push(transaction);\n }\n }\n\n return transactions;\n }\n\n private processClientBalances(\n records: EsolveUserClientAccountBalancesRecord[],\n ): EsolveUserClientAccountBalances | undefined {\n for (const record of records) {\n if (+record.clients_id <= 0) {\n return undefined;\n }\n\n const cart_totals = new EsolveCartTotals(\n record.cart_totals.records,\n +record.cart_totals.items,\n +record.cart_totals.total,\n +record.cart_totals.vat,\n +record.cart_totals.discount,\n +record.cart_totals.vouchers,\n +record.cart_totals.allowance,\n );\n\n return new EsolveUserClientAccountBalances(\n +record.clients_id,\n record.account,\n cart_totals,\n +record.credit_limit,\n +record.external_account_balance,\n +record.external_available_balance,\n +record.new_external_available_balance,\n !!+record.credit_limit_okay,\n );\n }\n\n return undefined;\n }\n\n private loginGuard(): void {\n if (this.user_id <= 0) {\n this.errorHandler.throwError('login_required', 'Login is required');\n }\n }\n\n private updateUserLocation(\n body: EsolveLocationOption,\n ): Observable<EsolveLocationUpdateResult> {\n return this.http\n .post<EsolveSetResponse>(\n `${this.config.api_url}/set-session-location.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n if (typeof response.esolve_id === 'string') {\n throw new Error('Invalid response id.');\n }\n\n this.sessionService.handleUpdateSession({\n location_id: +response.esolve_id,\n });\n\n return new EsolveLocationUpdateResult(response);\n },\n ),\n ),\n );\n }\n}\n","import { EsolveBannerLink, EsolveBannerImageSet } from '../interfaces';\nimport { EsolveBannerType } from '../types';\n\nimport { EsolveBannerImage } from './esolve-banner-image.model';\n\nexport class EsolveBanner {\n public desktop_images: EsolveBannerImage[] = [];\n public mobile_images: EsolveBannerImage[] = [];\n public sub_images: EsolveBannerImage[] = [];\n\n constructor(\n public id: number,\n public banner_display_container: string,\n public identifier: string,\n public type: EsolveBannerType,\n public title: string,\n public sub_title: string,\n public catch_phrase: string,\n public background_colour: string,\n public button_caption: string,\n public article: string,\n public sort_priority: number,\n public link: EsolveBannerLink,\n images: EsolveBannerImageSet,\n ) {\n if (images.desktop) {\n this.desktop_images = images.desktop;\n }\n\n if (images.mobile) {\n this.mobile_images = images.mobile;\n }\n\n if (images.sub) {\n this.sub_images = images.sub;\n }\n }\n}\n","import { EsolveBannerImageType } from '../types';\n\nimport { EsolveBannerImageHotspot } from './esolve-banner-image-hotspot.model';\n\nexport class EsolveBannerImage {\n constructor(\n public id: number,\n public image_type: EsolveBannerImageType,\n public width: number,\n public height: number,\n public filename: string,\n public hotspots?: EsolveBannerImageHotspot[],\n ) {}\n\n public get src(): string {\n return '/images/banners/' + this.filename;\n }\n}\n","import { EsolveUrlTarget } from '../../shared/esolve-url-target.type';\n\nimport { EsolveBannerImageHotspotCoords } from '../interfaces';\n\nexport class EsolveBannerImageHotspot {\n constructor(\n public url: string,\n public target: EsolveUrlTarget,\n public coords: EsolveBannerImageHotspotCoords[],\n public coords_string: string,\n ) {}\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport {\n EsolveBanner,\n EsolveBannerImageHotspot,\n EsolveBannerImage,\n} from './classes';\nimport {\n EsolveBannerRecord,\n EsolveBannerImageHotspotRecord,\n EsolveBannerImageRecord,\n EsolveBannerImageSet,\n} from './interfaces';\nimport { EsolveBannerType } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveBannerService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n /**\n * Retrieves banners records from eSolve instance\n *\n * @returns An observable of eSolve banners.\n */\n public getBanners(\n identifier?: string,\n banner_display_container?: string,\n enable_date_filter = false,\n ): Observable<EsolveBanner[]> {\n let params = new HttpParams({\n fromObject: { enable_date_filter },\n });\n\n if (identifier) {\n params = params.set('identifier', identifier);\n }\n\n if (banner_display_container) {\n params = params.set(\n 'banner_display_container',\n banner_display_container,\n );\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveBannerRecord[]>>(\n `${this.config.api_url}/get-banners.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processBanners(response.records);\n }),\n );\n }\n\n private processBannerImageHotspots(\n hotspot_records: EsolveBannerImageHotspotRecord[],\n ): EsolveBannerImageHotspot[] {\n const hotspots: EsolveBannerImageHotspot[] = [];\n\n if (hotspot_records.length > 0) {\n for (const hotspot_record of hotspot_records) {\n const hotspot = new EsolveBannerImageHotspot(\n hotspot_record.url,\n hotspot_record.target,\n hotspot_record.coords,\n hotspot_record.coords_string,\n );\n\n hotspots.push(hotspot);\n }\n }\n\n return hotspots;\n }\n\n private processBannerImages(\n image_records: EsolveBannerImageRecord[],\n banner_type: EsolveBannerType,\n ): EsolveBannerImage[] {\n const images: EsolveBannerImage[] = [];\n\n if (image_records.length > 0) {\n for (const image_record of image_records) {\n const image = new EsolveBannerImage(\n +image_record.id,\n image_record.image_type,\n +image_record.width,\n +image_record.height,\n image_record.filename,\n );\n\n if (banner_type === 'hotspot' && image_record.hotspots) {\n const hotspots = this.processBannerImageHotspots(\n image_record.hotspots,\n );\n image.hotspots = hotspots;\n }\n\n images.push(image);\n }\n }\n\n return images;\n }\n\n /**\n * Process banner records into banner objects\n * @param records Array of records\n * @returns List of banners\n */\n private processBanners(records: EsolveBannerRecord[]): EsolveBanner[] {\n const banners: EsolveBanner[] = [];\n\n if (records && records.length > 0) {\n for (const record of records) {\n const image_sets: EsolveBannerImageSet = {};\n\n if (record.images.desktop) {\n image_sets.desktop = this.processBannerImages(\n record.images.desktop,\n record.type,\n );\n }\n\n if (record.images.mobile) {\n image_sets.mobile = this.processBannerImages(\n record.images.mobile,\n record.type,\n );\n }\n\n if (record.images.sub) {\n image_sets.sub = this.processBannerImages(\n record.images.sub,\n record.type,\n );\n }\n\n const banner = new EsolveBanner(\n +record.id,\n record.banner_display_container,\n record.identifier,\n record.type,\n record.title,\n record.sub_title,\n record.catch_phrase,\n record.background_colour,\n record.button_caption,\n record.article,\n +record.sort_priority,\n {\n url: record.link.url,\n target: record.link.target,\n },\n image_sets,\n );\n\n banners.push(banner);\n }\n }\n\n return banners;\n }\n}\n","import { EsolveUrlTarget } from '../../shared/esolve-url-target.type';\n\nimport { EsolveMenuTreeRecord } from '../interfaces';\n\nexport class EsolveMenuItem {\n public id = 0;\n public selected_id = '';\n public url = '';\n public name = '';\n public module = '';\n public sort_priority = 0;\n public target: EsolveUrlTarget = '_self';\n public children: EsolveMenuItem[] = [];\n\n constructor(record?: Partial<EsolveMenuTreeRecord>) {\n if (record) {\n this.id = +(record.id ?? 0);\n this.selected_id = record.selected_id ?? '';\n this.url = record.sef_url ?? '';\n this.name = record.name ?? '';\n this.module = record.module ?? '';\n this.sort_priority = +(record.sort_priority ?? 0);\n\n if (\n record.target &&\n (record.target === '_self' || record.target === '_blank')\n ) {\n this.target = record.target;\n }\n\n if (\n typeof record.children !== 'undefined' &&\n Array.isArray(record.children)\n ) {\n for (const child of record.children) {\n this.children.push(new EsolveMenuItem(child));\n }\n }\n }\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport { EsolveMenuItem } from './classes';\nimport { EsolveMenuTreeRecord } from './interfaces';\nimport { EsolveMenu } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveMenuService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n public getMenuTree(identifier: string): Observable<EsolveMenu> {\n return this.http\n .get<EsolveGetResponse<EsolveMenuTreeRecord[]>>(\n `${this.config.api_url}/get-menu-tree.php`,\n { params: { identifier } },\n )\n .pipe(\n map((response) => {\n if (!response || response.records === undefined) {\n throw response;\n } else if (response.records.length === 0) {\n return [];\n }\n\n return this.handleMenu(response.records);\n }),\n );\n }\n\n private handleMenu(records?: EsolveMenuTreeRecord[]): EsolveMenu {\n const menu: EsolveMenu = [];\n\n if (typeof records !== 'undefined') {\n for (const record of records) {\n menu.push(new EsolveMenuItem(record));\n }\n }\n\n return menu;\n }\n}\n","export class EsolveNewsArticleAuthor {\n constructor(\n public userid: number,\n public email: string,\n public firstname: string,\n public surname: string,\n ) {}\n}\n","import { EsolveNewsArticle } from './esolve-news-article.model';\n\nexport class EsolveNewsArticleList {\n constructor(\n public newsArticles: EsolveNewsArticle[],\n public total: number,\n public page: number,\n ) {}\n}\n","import { EsolveNewsGroupRecord } from '../interfaces';\n\nexport class EsolveNewsGroup {\n public id = 0;\n public name = '';\n public description = '';\n public sef_name = '';\n private image?: string;\n\n public get image_src(): string {\n return this.getImagePath();\n }\n\n constructor(record: EsolveNewsGroupRecord) {\n this.id = +record.id;\n this.name = record.name;\n this.description = record.description;\n this.sef_name = record.sef_name;\n\n if (record.image && record.image !== '') {\n this.image = record.image;\n }\n }\n\n public getImagePath(): string {\n if (!this.image) {\n return '';\n }\n\n return `/images/assets/${this.image}`;\n }\n}\n","import { EsolveSeoDetails, EsolveSeoInfo } from '../../seo';\n\nimport { EsolveTag } from '../../tags';\nimport { EsolveTopic } from '../../topics';\nimport { EsolveManufacturer } from '../../manufacturers';\nimport { EsolveRange } from '../../ranges';\n\nimport { EsolveNewsArticleRecord } from '../interfaces';\n\nimport { EsolveNewsGroup } from './esolve-news-group.model';\nimport { EsolveNewsArticleAuthor } from './esolve-news-article-author.model';\n\nexport class EsolveNewsArticle implements EsolveSeoDetails {\n public id = 0;\n public title = '';\n public sef_title = '';\n public article = '';\n public short_description = '';\n public txdate = '';\n public active = false;\n public image = '';\n public featured = false;\n public topics: EsolveTopic[] = [];\n public tags: EsolveTag[] = [];\n public author?: EsolveNewsArticleAuthor;\n public group?: EsolveNewsGroup;\n public manufacturer?: EsolveManufacturer;\n public range?: EsolveRange;\n public seo_details: EsolveSeoInfo;\n\n constructor(record?: Partial<EsolveNewsArticleRecord>) {\n let seo_title = '';\n let seo_description = '';\n let seo_keywords = '';\n\n if (record) {\n this.id = +(record.id ?? 0);\n this.title = record.title ?? '';\n this.sef_title = record.sef_title ?? '';\n this.article = record.article ?? '';\n this.txdate = record.txdate ?? '';\n this.image = record.image ?? '';\n this.short_description = record.short_description ?? '';\n\n if (record.active) {\n this.active = !!+record.active;\n }\n\n if (record.featured) {\n this.featured = !!+record.featured;\n }\n\n seo_title = record.seo_page_title ?? '';\n seo_description = record.short_description ?? '';\n seo_keywords = record.seo_keywords ?? '';\n\n if (record.news_group) {\n const group_record = record.news_group;\n\n this.group = new EsolveNewsGroup(group_record);\n }\n\n if (record.user) {\n this.author = new EsolveNewsArticleAuthor(\n record.user.userid,\n record.user.email,\n record.user.firstname,\n record.user.surname,\n );\n }\n\n if (record.manufacturer) {\n this.manufacturer = new EsolveManufacturer(record.manufacturer);\n }\n\n if (record.range) {\n this.range = new EsolveRange(record.range);\n }\n\n if (record.topics && record.topics.length > 0) {\n const topics = record.topics;\n\n for (const topic of topics) {\n this.topics.push(new EsolveTopic(topic));\n }\n }\n\n if (record.tags && record.tags.length > 0) {\n const tags = record.tags;\n\n for (const tag of tags) {\n this.tags.push(new EsolveTag(tag));\n }\n }\n }\n\n if (seo_title.trim() === '') {\n seo_title = this.title;\n }\n\n this.seo_details = new EsolveSeoInfo(\n seo_title,\n seo_description,\n seo_keywords,\n );\n }\n}\n","import { EsolveResponseResult } from '../../shared/response';\n\nimport { EsolveNewsletterResponse } from '../types';\n\nexport class EsolveNewsletterResult extends EsolveResponseResult {\n public id = 0;\n\n constructor(response: EsolveNewsletterResponse) {\n super(response);\n\n this.id = +response.esolve_id;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport {\n HttpClient,\n HttpErrorResponse,\n HttpParams,\n} from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport {\n EsolveGetResponse,\n EsolveResponseHandlerService,\n EsolveSetResponse,\n} from '../shared/response';\nimport { EsolveErrorHandlerService } from '../shared/errors';\n\nimport {\n EsolveNewsArticle,\n EsolveNewsArticleList,\n EsolveNewsGroup,\n EsolveNewsletterResult,\n} from './classes';\n\nimport {\n EsolveNewsArticleOptions,\n EsolveNewsGroupRecord,\n EsolveNewsArticleRecord,\n} from './interfaces';\n\nimport { EsolveNewsletterResponse } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveNewsService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n public getNewsArticle(identifier: string): Observable<EsolveNewsArticle> {\n const params = new HttpParams({\n fromObject: { sef_title: identifier },\n });\n\n return this.getNewsRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const record = response.records[0];\n\n if (!record.active) {\n throw response;\n }\n\n return this.processNewsArticle(record);\n }),\n );\n }\n\n public getNewsArticles(\n options?: EsolveNewsArticleOptions,\n ): Observable<EsolveNewsArticleList> {\n const params = this.parseOptions(options);\n\n return this.getNewsRecords(params).pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const news_articles: EsolveNewsArticle[] = [];\n\n for (const record of response.records) {\n news_articles.push(this.processNewsArticle(record));\n }\n\n const page = options?.page ?? 0;\n const total_records = +response.additional_data.total_records;\n\n return new EsolveNewsArticleList(\n news_articles,\n total_records,\n page,\n );\n }),\n );\n }\n\n public getNewsGroups(enable_images = false): Observable<EsolveNewsGroup[]> {\n return this.http\n .get<EsolveGetResponse<EsolveNewsGroupRecord[]>>(\n `${this.config.api_url}/get-news-groups.php`,\n {\n params: {\n enable_images,\n },\n },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const news_groups: EsolveNewsGroup[] = [];\n\n for (const record of response.records) {\n news_groups.push(new EsolveNewsGroup(record));\n }\n\n return news_groups;\n }),\n );\n }\n\n private processNewsArticle(\n record: EsolveNewsArticleRecord,\n ): EsolveNewsArticle {\n return new EsolveNewsArticle(record);\n }\n\n private getNewsRecords(\n params: HttpParams,\n ): Observable<EsolveGetResponse<EsolveNewsArticleRecord[]>> {\n return this.http.get<EsolveGetResponse<EsolveNewsArticleRecord[]>>(\n `${this.config.api_url}/get-news.php`,\n { params },\n );\n }\n\n private parseOptions(options?: EsolveNewsArticleOptions): HttpParams {\n let params = new HttpParams();\n\n if (!options) {\n return params;\n }\n\n if (options.news_group_id) {\n params = params.set('news_group_id', options.news_group_id);\n } else if (options.news_group_sef) {\n params = params.set('news_group_sef', options.news_group_sef);\n }\n\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.feature_only) {\n params = params.set('feature_only', options.feature_only);\n }\n\n if (options.manufacturers_id) {\n params = params.set('manufacturers_id', options.manufacturers_id);\n }\n\n if (options.ranges_id) {\n params = params.set('ranges_id', options.ranges_id);\n }\n\n if (options.from_date) {\n params = params.set('from_date', options.from_date);\n }\n\n if (options.to_date) {\n params = params.set('to_date', options.to_date);\n }\n\n if (options.search_phrase) {\n params = params.set('search_phrase', options.search_phrase);\n }\n\n return params;\n }\n\n public subscribeToNewsletter(\n form_data: FormData,\n ): Observable<EsolveNewsletterResult> {\n if (!form_data.has('email')) {\n return this.errorHandler.emitError(\n 'email_required',\n 'Email is required',\n );\n }\n\n return this.http\n .post<EsolveSetResponse<EsolveNewsletterResponse>>(\n `${this.config.api_url}/set-newsletter.php`,\n form_data,\n {\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveNewsletterResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-newsletter',\n errorRes,\n );\n }),\n );\n }\n}\n","// Types\nexport * from './esolve-stock-image-size.type';\nexport * from './esolve-media-stock-item-list.type';\nexport * from './esolve-stock-unit-of-measure.type';\nexport * from './esolve-stock-sort-field.type';\nexport * from './esolve-media-stock-sort-field.type';\nexport * from './esolve-stock-group-item-record.type';\nexport * from './esolve-media-stock-item-record.type';\n","import { EsolveColourRecord } from '../interfaces';\n\nexport class EsolveColour {\n public id: number;\n public colour: string;\n public description: string;\n\n constructor(record: Partial<EsolveColourRecord>) {\n this.id = record.id ?? 0;\n this.colour = record.colour ?? '';\n this.description = record.description ?? '';\n }\n}\n","export class EsolveStockBadge {\n constructor(\n public id: number,\n public text: string,\n public identifier: string,\n public font_colour: string,\n public badge_colour: string,\n public sort_priority: number,\n ) {}\n}\n","/**\n * Price of eSolve stock item\n */\nexport class EsolveStockPrice {\n public taxed: boolean;\n\n /**\n * Create stock price instance\n *\n * @param base_price Price without tax\n * @param base_price_with_tax Price with tax\n * @param sell_price Price without tax and with discounts applied if applicable\n * @param sell_price_with_tax Price with tax and with discounts applied if applicable\n * @param tax_rate Tax rate of the item\n * @param taxed Whether tax has been applied\n */\n constructor(\n /**\n * Price without tax\n */\n public base_price: number = 0,\n\n /**\n * Price with tax\n */\n public base_price_with_tax: number = 0,\n\n /**\n * Price without tax and with discounts applied if applicable\n */\n public sell_price: number = 0,\n\n /**\n * Price with tax and with discounts applied if applicable\n */\n public sell_price_with_tax: number = 0,\n\n /**\n * Vat Rate for the item\n */\n public tax_rate: number = 0,\n\n taxed?: boolean,\n ) {\n if (this.base_price === 0 && this.sell_price > 0) {\n this.base_price = this.sell_price;\n this.base_price_with_tax = this.sell_price_with_tax;\n } else if (this.base_price > 0 && this.sell_price === 0) {\n this.sell_price = this.base_price;\n this.sell_price_with_tax = this.base_price_with_tax;\n }\n\n this.taxed = taxed ?? this.base_price !== this.base_price_with_tax;\n }\n}\n","import { EsolveStockLeadTimesRecord } from '../interfaces';\n\nexport class EsolveStockLeadTimes {\n public min = 0;\n public max = 0;\n\n constructor(lead_times: EsolveStockLeadTimesRecord) {\n this.min = lead_times.min;\n this.max = lead_times.max;\n }\n}\n","export class EsolveStockTransactionHistory {\n constructor(\n public total_order_qty: number = 0,\n public total_quote_qty: number = 0,\n ) {}\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\nimport { EsolveSeoDetails, EsolveSeoInfo } from '../../seo';\n\nimport { EsolveCategoryTreeItem } from '../../category-tree';\nimport { EsolveManufacturer } from '../../manufacturers';\nimport { EsolveRange } from '../../ranges';\nimport { EsolveTag } from '../../tags';\nimport { EsolveTopic } from '../../topics';\n\nimport { EsolveStockImageSize, EsolveStockUnitOfMeasure } from '../types';\nimport { EsolveStockBaseRecord } from '../interfaces';\nimport { EsolveStockBadge } from './esolve-stock-badge.model';\nimport { EsolveStockPrice } from './esolve-stock-price.model';\nimport { EsolveColour } from './esolve-colour.model';\nimport { EsolveStockLeadTimes } from './esolve-stock-lead-times.model';\nimport { EsolveStockTransactionHistory } from './esolve-stock-transaction-history.model';\n\nexport class EsolveStockItemBase<\n T extends EsolveCustomFields = EsolveCustomFields,\n> implements EsolveSeoDetails\n{\n /**\n * eSolve Generated ID\n */\n public id = 0;\n /**\n * Code identifying the stock item\n */\n public code = '';\n /**\n * Code used by supplier\n */\n public supplier_code = '';\n /**\n * The barcode of the item\n */\n public barcode = '';\n /**\n * Name of the stock item\n */\n public name = '';\n /**\n * Search engine friendly name\n */\n public sef_name = '';\n /**\n * Search composite field made up of key phrases\n */\n public search_composite = '';\n /**\n * Type field. General high grouping\n */\n public type = '';\n /**\n * Sub type field. General high grouping\n */\n public sub_type = '';\n /**\n * Short description of stock item\n */\n public description = '';\n /**\n * Full description of stock item\n */\n public extended_description = '';\n /**\n * Active state\n */\n public active = false;\n /**\n * Featured state\n */\n public featured = false;\n /**\n * Display Only state\n */\n public display_only = false;\n /**\n * Quotable state\n */\n public allow_quotes = true;\n /**\n * Orderable state\n */\n public allow_orders = true;\n /**\n * Item must be collected, not delivery possible\n */\n public must_collect = false;\n /**\n * Item needs to be assembled after purchase\n */\n public requires_assembly = false;\n /**\n * The type of delivery category associated with the item\n */\n public delivery_category = 'regular_item';\n /**\n * Custom stock label added on to item to display for user\n */\n public custom_label = '';\n /**\n * Number of stock available\n */\n public amount_in_stock = 0;\n /**\n * Number of stock available\n */\n public limit_per_transaction = 0;\n /**\n * Total items linked to the item as a recipe\n */\n public total_recipe_items = 0;\n /**\n * Height measured in meters (m)\n */\n public height = 0;\n /**\n * Width measured in meters (m)\n */\n public width = 0;\n /**\n * Length / depth measured in meters (m)\n */\n public length = 0;\n /**\n * Weight measured in kilograms (kg)\n */\n public weight = 0;\n /**\n * Number of items in a pack\n */\n public pack_size = 0;\n /**\n * Description of the pack\n */\n public pack_description = '';\n /**\n * Units used to measure the quantity\n */\n public unit_of_measure: EsolveStockUnitOfMeasure = 'unit';\n /**\n * ID of default category linked to the stock item\n *\n * @deprecated Use `category.esolve_id` field instead\n */\n public category_id = '';\n /**\n * Default linked category\n */\n public category?: EsolveCategoryTreeItem;\n /**\n * ID of default subcategory linked to the stock item\n *\n * @deprecated Use `subcategory.esolve_id` field instead\n */\n public subcategory_id = 0;\n /**\n * Default linked subcategory\n */\n public subcategory?: EsolveCategoryTreeItem;\n /**\n * ID of linked manufacturer\n *\n * @deprecated Use `manufacturer.id` field instead\n */\n public manufacturers_id = 0;\n /**\n * Linked manufacturer\n */\n public manufacturer?: EsolveManufacturer;\n /**\n * ID of linked range\n *\n * @deprecated Use `range.id` field instead\n */\n public ranges_id = 0;\n /**\n * Linked range\n */\n public range?: EsolveRange;\n /**\n * Default price\n */\n public price: EsolveStockPrice;\n /**\n * SEO page details\n */\n public seo_details: EsolveSeoInfo;\n /**\n * Linked tags\n */\n public tags: EsolveTag[] = [];\n /**\n * Linked topics\n */\n public topics: EsolveTopic[] = [];\n /**\n * Stock badges\n */\n public badges: EsolveStockBadge[] = [];\n /**\n * Stock item custom fields.\n */\n public custom_fields?: T;\n /**\n * Colours\n */\n public colours: EsolveColour[] = [];\n /** Sizes */\n public sizes: string[] = [];\n /**\n * Stock Item Lead Times for supply\n */\n public lead_times?: EsolveStockLeadTimes;\n /**\n * Transaction history\n */\n public history?: EsolveStockTransactionHistory;\n\n /**\n * Image filename\n */\n private image_name = '';\n\n /**\n * Image Last modified\n */\n private image_last_modified = '';\n\n /**\n * Path to tiny stock image\n */\n public get tiny_image_src(): string {\n return this.getImagePath('tiny');\n }\n\n /**\n * Path to thumbnail stock image\n */\n public get thumbnail_image_src(): string {\n return this.getImagePath('thumb');\n }\n\n /**\n * Path to small stock image\n */\n public get small_image_src(): string {\n return this.getImagePath('small');\n }\n\n /**\n * Path to big stock image\n */\n public get big_image_src(): string {\n return this.getImagePath('big');\n }\n\n /**\n * Path to original stock image\n */\n public get original_image_src(): string {\n return this.getImagePath('original');\n }\n\n public get available(): boolean {\n return this.amount_in_stock > 0;\n }\n\n constructor(record: Partial<EsolveStockBaseRecord<T>> = {}) {\n let seo_title = '';\n let seo_keywords = '';\n let base_price = 0;\n let base_price_with_tax = 0;\n let sell_price = 0;\n let sell_price_with_tax = 0;\n\n if (record) {\n this.id = +(record.id ?? 0);\n this.code = record.code ?? '';\n this.supplier_code = record.supplier_code ?? '';\n this.barcode = record.barcode ?? '';\n this.name = record.name ?? '';\n this.sef_name = record.sef_name ?? '';\n this.search_composite = record.search_composite ?? '';\n this.type = record.type ?? '';\n this.sub_type = record.sub_type ?? '';\n this.description = record.description ?? '';\n this.extended_description = record.extended_description ?? '';\n this.image_name = record.image_name ?? '';\n this.image_last_modified = record.image_last_modified ?? '';\n\n this.category_id = record.category_id ?? '';\n this.subcategory_id = +(record.subcategory_id ?? 0);\n this.manufacturers_id = +(record.manufacturers_id ?? 0);\n this.ranges_id = +(record.ranges_id ?? 0);\n this.delivery_category = record.delivery_category ?? 'regular_item';\n this.custom_label = record.custom_label ?? '';\n\n this.must_collect = !!+(record.must_collect ?? false);\n this.requires_assembly = !!+(record.requires_assembly ?? false);\n this.active = !!+(record.is_active ?? false);\n this.featured = !!+(record.is_featured ?? false);\n this.display_only = !!+(record.display_only ?? false);\n this.allow_quotes = record.allow_quotes ?? true;\n this.allow_orders = record.allow_orders ?? true;\n\n this.amount_in_stock = +(record.onhand ?? 0);\n this.limit_per_transaction = +(record.limit_per_transaction ?? 0);\n this.total_recipe_items = +(record.total_recipe_items ?? 0);\n\n this.pack_size = +(record.items_in_pack ?? 0);\n this.pack_description = record.pack_description ?? '';\n\n this.height = +(record.height ?? 0);\n this.width = +(record.width ?? 0);\n this.length = +(record.length ?? 0);\n this.weight = +(record.weight ?? 0);\n\n if (record.unit_of_measure) {\n this.unit_of_measure = record.unit_of_measure;\n }\n\n base_price = +(record.regular_sellprice ?? 0);\n base_price_with_tax = +(record.regular_sellprice_inclusive ?? 0);\n sell_price = +(record.sellprice ?? 0);\n sell_price_with_tax = +(record.sellprice_inclusive ?? 0);\n\n if (record.tags && record.tags.length > 0) {\n for (const tag of record.tags) {\n this.tags.push(new EsolveTag(tag));\n }\n }\n\n if (record.topics && record.topics.length > 0) {\n for (const topic of record.topics) {\n this.topics.push(new EsolveTopic(topic));\n }\n }\n\n if (record.badges && record.badges.length > 0) {\n for (const badge of record.badges) {\n this.badges.push(\n new EsolveStockBadge(\n +badge.id,\n badge.text,\n badge.identifier,\n badge.font_colour,\n badge.badge_colour,\n +badge.sort_priority,\n ),\n );\n }\n }\n\n if (record.category) {\n this.category = new EsolveCategoryTreeItem(\n record.category.type,\n record.category.id,\n record.category.parent_id,\n record.category.description,\n record.category.sef_description,\n record.category.short_description,\n record.category.sort_priority,\n record.category.active,\n record.category.display_only,\n record.category.image,\n record.category.seo_page_title,\n record.category.seo_keywords,\n record.category.seo_description,\n );\n }\n\n if (record.subcategory) {\n this.subcategory = new EsolveCategoryTreeItem(\n record.subcategory.type,\n record.subcategory.id,\n record.subcategory.parent_id,\n record.subcategory.description,\n record.subcategory.sef_description,\n record.subcategory.short_description,\n record.subcategory.sort_priority,\n record.subcategory.active,\n record.subcategory.display_only,\n record.subcategory.image,\n record.subcategory.seo_page_title,\n record.subcategory.seo_keywords,\n record.subcategory.seo_description,\n );\n }\n\n if (record.manufacturer) {\n this.manufacturer = new EsolveManufacturer(record.manufacturer);\n }\n\n if (record.range) {\n this.range = new EsolveRange(record.range);\n }\n\n if (record.colours && record.colours.length > 0) {\n for (const colour of record.colours) {\n this.colours.push(new EsolveColour(colour));\n }\n }\n\n if (record.sizes && record.sizes.length > 0) {\n for (const size of record.sizes) {\n this.sizes.push(size);\n }\n }\n\n if (record.lead_times) {\n this.lead_times = new EsolveStockLeadTimes(record.lead_times);\n }\n\n if (record.custom_fields) {\n this.custom_fields = record.custom_fields;\n }\n\n if (record.total_order_qty || record.total_quote_qty) {\n const total_order_qty = +(record.total_order_qty ?? 0);\n const total_quote_qty = +(record.total_quote_qty ?? 0);\n this.history = new EsolveStockTransactionHistory(\n total_order_qty,\n total_quote_qty,\n );\n }\n\n seo_title = record.seo_page_title ?? '';\n seo_keywords = record.seo_keywords ?? '';\n }\n\n this.price = new EsolveStockPrice(\n base_price,\n base_price_with_tax,\n sell_price,\n sell_price_with_tax,\n record.vat_rate,\n record.vat_item,\n );\n\n if (seo_title.trim() === '') {\n seo_title = this.name;\n }\n\n this.seo_details = new EsolveSeoInfo(\n seo_title,\n this.description,\n seo_keywords,\n );\n }\n\n public getImagePath(image_size: EsolveStockImageSize): string {\n if (this.image_name !== '') {\n let param = '';\n\n if (this.image_last_modified !== '') {\n param = `?t=${this.image_last_modified}`;\n }\n\n return `/images/stock/${image_size}/${this.image_name}${param}`;\n }\n\n return '';\n }\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\n\nimport { EsolveDependantItemRecord } from '../interfaces';\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\n\nexport class EsolveDependantItem<\n T extends EsolveCustomFields = EsolveCustomFields,\n> extends EsolveStockItemBase<T> {\n public qty = 0;\n public dependency_description = '';\n\n constructor(record?: Partial<EsolveDependantItemRecord<T>>) {\n super(record);\n\n this.qty = +(record?.qty ?? 0);\n this.dependency_description = record?.dependency_description ?? '';\n }\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\nimport { EsolveStockGroupItemRecord } from '../types';\n\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\n\nexport class EsolveStockGroupItem<\n T extends EsolveCustomFields = EsolveCustomFields,\n> extends EsolveStockItemBase<T> {\n constructor(record?: Partial<EsolveStockGroupItemRecord<T>>) {\n super(record);\n }\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\nimport { EsolveStockGroupItemRecord } from '../types';\n\nimport { EsolveStockGroupItem } from './esolve-stock-group-item.model';\n\nexport class EsolveStockGroup<\n T extends EsolveCustomFields = EsolveCustomFields,\n> {\n public items: EsolveStockGroupItem<T>[] = [];\n\n constructor(\n public group: string,\n records: EsolveStockGroupItemRecord<T>[] = [],\n ) {\n if (records.length > 0) {\n for (const record of records) {\n this.items.push(new EsolveStockGroupItem(record));\n }\n }\n }\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\n\nimport { EsolveStockRecord } from '../interfaces';\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\nimport { EsolveDependantItem } from './esolve-dependant-item.model';\nimport { EsolveStockGroup } from './esolve-stock-group.model';\n\n/**\n * Stock Item object. It can be a service or a product (physical and/or digital).\n */\nexport class EsolveStockItem<\n T extends EsolveCustomFields = EsolveCustomFields,\n> extends EsolveStockItemBase<T> {\n public group?: EsolveStockGroup<T>;\n public dependencies?: EsolveDependantItem<T>[];\n\n /**\n * Constructs an instance of EsolveStockItem\n */\n constructor(record?: Partial<EsolveStockRecord<T>>) {\n super(record);\n\n if (record?.group && record.grouped_items) {\n this.group = new EsolveStockGroup(\n record.group,\n record.grouped_items,\n );\n }\n\n if (record?.dependencies) {\n this.dependencies = [];\n\n for (const dependant of record.dependencies) {\n this.dependencies.push(new EsolveDependantItem(dependant));\n }\n }\n }\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\n\nimport { EsolveStockItem } from './esolve-stock-item.model';\n\n/**\n * Stock item object list\n */\nexport class EsolveStockItemList<\n T extends EsolveCustomFields = EsolveCustomFields,\n> {\n constructor(\n public stock_items: EsolveStockItem<T>[],\n public total: number,\n public page: number,\n ) {}\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\n\nimport { EsolveRecipeItemRecord } from '../interfaces';\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\n\nexport class EsolveRecipeStockItem<\n T extends EsolveCustomFields = EsolveCustomFields,\n> extends EsolveStockItemBase<T> {\n public qty = 0;\n\n constructor(record?: Partial<EsolveRecipeItemRecord<T>>) {\n super(record);\n\n this.qty = +(record?.qty ?? 0);\n }\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\n\nimport { EsolveLinkedStockRecord } from '../interfaces';\nimport { EsolveStockItem } from './esolve-stock-item.model';\n\nexport class EsolveLinkedStockItem<\n T extends EsolveCustomFields = EsolveCustomFields,\n> extends EsolveStockItem<T> {\n public qty = 0;\n\n constructor(record?: Partial<EsolveLinkedStockRecord<T>>) {\n super(record);\n\n this.qty = +(record?.qty ?? 0);\n }\n}\n","import { EsolveCustomFields } from '../../shared/custom-fields';\n\nimport { EsolveMediaStockItemRecord } from '../types';\nimport { EsolveStockItem } from './esolve-stock-item.model';\n\nexport class EsolveMediaStockItem<\n T extends EsolveCustomFields = EsolveCustomFields,\n> extends EsolveStockItem<T> {\n constructor(record?: Partial<EsolveMediaStockItemRecord<T>>) {\n super(record);\n }\n}\n","import { EsolveStockImageSize } from '../types';\n\nexport class EsolveStockImage {\n /**\n * Path to tiny stock image\n */\n public get tiny_src(): string {\n return this.getImagePath('tiny');\n }\n\n /**\n * Path to thumbnail stock image\n */\n public get thumbnail_src(): string {\n return this.getImagePath('thumb');\n }\n\n /**\n * Path to small stock image\n */\n public get small_src(): string {\n return this.getImagePath('small');\n }\n\n /**\n * Path to big stock image\n */\n public get big_src(): string {\n return this.getImagePath('big');\n }\n\n /**\n * Path to original stock image\n */\n public get original_src(): string {\n return this.getImagePath('original');\n }\n\n constructor(\n private image_name: string,\n private last_modified: string = '',\n ) {\n if (this.image_name === 'no_image.jpg') {\n this.image_name = '';\n }\n }\n\n public getImagePath(image_size: EsolveStockImageSize): string {\n if (this.image_name !== '') {\n let param = '';\n\n if (this.last_modified !== '') {\n param = `?t=${this.last_modified}`;\n }\n\n return `/images/stock/${image_size}/${this.image_name}${param}`;\n }\n\n return '';\n }\n}\n","import { EsolveAdditionalStockImageRecord } from '../interfaces';\n\nexport class EsolveAdditionalStockImage {\n public id = 0;\n public type = '';\n public url = '';\n public name = '';\n public etag?: string;\n public key?: string;\n\n constructor(record?: Partial<EsolveAdditionalStockImageRecord>) {\n if (record) {\n this.id = record.id ?? 0;\n this.type = record.type ?? '';\n this.url = record.url ?? '';\n this.name = record.name ?? '';\n\n if (record.etag) {\n this.etag = record.etag;\n }\n\n if (record.key) {\n this.key = record.key;\n }\n }\n }\n}\n","import { EsolveStockImageCollectionRecord } from '../interfaces';\nimport { EsolveAdditionalStockImage } from './esolve-additional-stock-image.model';\nimport { EsolveStockImage } from './esolve-stock-image.model';\n\nexport class EsolveStockImageCollection {\n public default_image: EsolveStockImage;\n public alt_images: EsolveStockImage[] = [];\n public additional_images: EsolveAdditionalStockImage[] = [];\n\n constructor(record?: Partial<EsolveStockImageCollectionRecord>) {\n this.default_image = new EsolveStockImage(\n record?.default_image ?? '',\n record?.default_image_last_modified ?? '',\n );\n\n if (!record) {\n return;\n }\n\n if (record.alt_images && record.alt_images.length > 0) {\n for (const alt_image_name of record.alt_images) {\n const alt_image = new EsolveStockImage(alt_image_name);\n\n this.alt_images.push(alt_image);\n }\n }\n\n if (record.additional_images && record.additional_images.length > 0) {\n for (const additional_image_record of record.additional_images) {\n const additional_image = new EsolveAdditionalStockImage(\n additional_image_record,\n );\n\n this.additional_images.push(additional_image);\n }\n }\n }\n}\n","import {\n EsolvePostResponseItem,\n EsolveResponseResult,\n} from '../../shared/response';\n\nexport class EsolveSetNotifyResult extends EsolveResponseResult {\n public id = 0;\n\n constructor(response: EsolvePostResponseItem) {\n super(response);\n\n this.id = +response.esolve_id;\n }\n}\n","// Classes\nexport * from './esolve-colour.model';\nexport * from './esolve-stock-item.model';\nexport * from './esolve-stock-price.model';\nexport * from './esolve-stock-badge.model';\nexport * from './esolve-stock-group.model';\nexport * from './esolve-stock-item-base.model';\nexport * from './esolve-stock-item-list.model';\nexport * from './esolve-stock-group-item.model';\nexport * from './esolve-recipe-stock-item.model';\nexport * from './esolve-linked-stock-item.model';\nexport * from './esolve-dependant-item.model';\nexport * from './esolve-stock-lead-times.model';\nexport * from './esolve-media-stock-item.model';\nexport * from './esolve-stock-image.model';\nexport * from './esolve-stock-image-collection.model';\nexport * from './esolve-additional-stock-image.model';\nexport * from './esolve-set-notify-result.model';\n","// Interfaces\nexport * from './esolve-stock-record.interface';\nexport * from './esolve-colour-record.interface';\nexport * from './esolve-stock-base-record.interface';\nexport * from './esolve-stock-item-options.interface';\nexport * from './esolve-stock-badge-record.interface';\nexport * from './esolve-recipe-item-record.interface';\nexport * from './esolve-stock-filter-options.interface';\nexport * from './esolve-recipe-stock-options.interface';\nexport * from './esolve-linked-stock-record.interface';\nexport * from './esolve-stock-linked-category-record.interface';\nexport * from './esolve-stock-lead-times-record.interface';\nexport * from './esolve-stock-image-collection-record.interface';\nexport * from './esolve-additional-stock-image-record.interface';\nexport * from './esolve-media-stock-item-options.interface';\nexport * from './esolve-dependant-item-record.interface';\n","import { Injectable, inject } from '@angular/core';\nimport {\n HttpClient,\n HttpErrorResponse,\n HttpParams,\n} from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\n\nimport {\n EsolveGetResponse,\n EsolveResponseHandlerService,\n EsolveSetResponse,\n} from '../shared/response';\n\nimport { EsolveErrorHandlerService } from '../shared/errors';\n\nimport { EsolveList } from '../shared/esolve-list.model';\nimport { EsolveCustomFields } from '../shared/custom-fields';\nimport {\n EsolveFilterFactory,\n EsolveFilterList,\n EsolveFilterRecordList,\n EsolveMultipleSelectFilter,\n EsolveRangeFilter,\n EsolveSingleSelectFilter,\n} from '../shared/filters';\n\nimport { EsolveMediaStockItemRecord, EsolveMediaStockItemList } from './types';\nimport {\n EsolveStockRecord,\n EsolveStockItemOptions,\n EsolveRecipeItemRecord,\n EsolveLinkedStockRecord,\n EsolveRecipeStockOptions,\n EsolveMediaStockItemOptions,\n EsolveStockImageCollectionRecord,\n EsolveStockFilterOptions,\n} from './interfaces';\nimport {\n EsolveStockItem,\n EsolveStockItemList,\n EsolveMediaStockItem,\n EsolveRecipeStockItem,\n EsolveLinkedStockItem,\n EsolveStockImageCollection,\n EsolveSetNotifyResult,\n} from './classes';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveStockService<\n T extends EsolveCustomFields = EsolveCustomFields,\n> {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n /**\n * Retrieves the stock record from the eSolve instance using the code.\n *\n * @param code eSolve stock code\n */\n public getStockItem(code: string): Observable<EsolveStockItem<T>> {\n const params = new HttpParams({\n fromObject: {\n code,\n },\n });\n\n return this.getStockRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const stockRecord = response.records[0];\n\n return this.processStockItem(stockRecord);\n }),\n );\n }\n\n /**\n * Retrieves the stock record from the eSolve instance using the SEF name.\n *\n * @param sef_name SEF name of the stock item\n */\n public getStockItemFromSEF(\n sef_name: string,\n ): Observable<EsolveStockItem<T>> {\n const params = new HttpParams({\n fromObject: {\n sef_name,\n },\n });\n\n return this.getStockRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const stockRecord = response.records[0];\n\n return this.processStockItem(stockRecord);\n }),\n );\n }\n\n /**\n * Retrieves list of stock from the eSolve instance using info provided\n *\n * @param options Stock filter options\n */\n public getStockItems(\n options: EsolveStockItemOptions,\n ): Observable<EsolveStockItemList<T>> {\n let params = new HttpParams();\n\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.sort) {\n const sort = options.sort;\n\n if (sort.field) {\n params = params.set('sort', sort.field);\n }\n\n if (sort.order) {\n params = params.set('order', sort.order);\n }\n }\n\n if (options.search_phrase) {\n params = params.set('search_phrase', options.search_phrase);\n }\n\n if (options.display_only) {\n params = params.set('display_only', options.display_only);\n }\n\n if (options.is_active) {\n params = params.set('is_active', options.is_active);\n }\n\n if (options.category_id) {\n params = params.set('category_id', options.category_id);\n }\n\n if (options.subcategory_id) {\n params = params.set('subcategory_id', options.subcategory_id);\n }\n\n if (options.manufacturers_id) {\n params = params.set('manufacturers_id', options.manufacturers_id);\n }\n\n if (options.ranges_id) {\n params = params.set('ranges_id', options.ranges_id);\n }\n\n if (options.specials_id) {\n params = params.set('specials_id', options.specials_id);\n }\n\n if (options.tag_id_list && options.tag_id_list.length > 0) {\n params = params.set('tag_id', options.tag_id_list.join(','));\n }\n\n if (options.topic_id_list && options.topic_id_list.length > 0) {\n params = params.set('topic_id', options.topic_id_list.join(','));\n }\n\n if (options.filters) {\n let filters = options.filters;\n\n if (!Array.isArray(filters)) {\n filters = EsolveFilterFactory.covertFromObj(filters);\n }\n\n params = EsolveFilterFactory.convertToHttpParams(filters, params);\n }\n\n return this.getStockRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const stockItems: EsolveStockItem<T>[] = [];\n\n response.records.forEach((stockRecord) => {\n stockItems.push(this.processStockItem(stockRecord));\n });\n\n return new EsolveStockItemList(\n stockItems,\n +response.additional_data.total_records,\n options.page ?? 0,\n );\n }),\n );\n }\n\n /**\n * Retrieves list of stock from the eSolve instance using info provided\n *\n * @param options Stock filter options\n */\n public getStockItemsTransactionHistory(\n options: EsolveStockItemOptions,\n ): Observable<EsolveStockItemList<T>> {\n let params = new HttpParams();\n\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.sort) {\n const sort = options.sort;\n\n if (sort.field) {\n params = params.set('sort', sort.field);\n }\n\n if (sort.order) {\n params = params.set('order', sort.order);\n }\n }\n\n if (options.search_phrase) {\n params = params.set('search_phrase', options.search_phrase);\n }\n\n if (options.display_only) {\n params = params.set('display_only', options.display_only);\n }\n\n if (options.is_active) {\n params = params.set('is_active', options.is_active);\n }\n\n if (options.category_id) {\n params = params.set('category_id', options.category_id);\n }\n\n if (options.subcategory_id) {\n params = params.set('subcategory_id', options.subcategory_id);\n }\n\n if (options.manufacturers_id) {\n params = params.set('manufacturers_id', options.manufacturers_id);\n }\n\n if (options.ranges_id) {\n params = params.set('ranges_id', options.ranges_id);\n }\n\n if (options.specials_id) {\n params = params.set('specials_id', options.specials_id);\n }\n\n if (options.tag_id_list && options.tag_id_list.length > 0) {\n params = params.set('tag_id', options.tag_id_list.join(','));\n }\n\n if (options.topic_id_list && options.topic_id_list.length > 0) {\n params = params.set('topic_id', options.topic_id_list.join(','));\n }\n\n if (options.filters) {\n let filters = options.filters;\n\n if (!Array.isArray(filters)) {\n filters = EsolveFilterFactory.covertFromObj(filters);\n }\n\n params = EsolveFilterFactory.convertToHttpParams(filters, params);\n }\n\n return this.getStockHistoryRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const stockItems: EsolveStockItem<T>[] = [];\n\n response.records.forEach((stockRecord) => {\n stockItems.push(this.processStockItem(stockRecord));\n });\n\n return new EsolveStockItemList(\n stockItems,\n +response.additional_data.total_records,\n options.page ?? 0,\n );\n }),\n );\n }\n\n /**\n * Retrieve list of stock items linked to a stock item from the eSolve API\n *\n * @param code Stock item code\n */\n public getLinkedItems(\n code: string,\n ): Observable<EsolveLinkedStockItem<T>[]> {\n return this.http\n .get<EsolveGetResponse<EsolveLinkedStockRecord<T>[]>>(\n `${this.config.api_url}/get-linked-items.php`,\n { params: { code } },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n return this.processLinkedItems(response.records);\n }),\n );\n }\n\n /**\n * Retrieve list of stock items on a recipe from the eSolve API\n *\n * @param code Stock item code\n */\n public getRecipeItems(\n code: string,\n options?: EsolveRecipeStockOptions,\n ): Observable<EsolveRecipeStockItem<T>[]> {\n let params = new HttpParams().set('code', code);\n\n if (options) {\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.sort) {\n const sort = options.sort;\n\n if (sort.field) {\n params = params.set('sort', sort.field);\n }\n\n if (sort.order) {\n params = params.set('order', sort.order);\n }\n }\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveRecipeItemRecord<T>[]>>(\n `${this.config.api_url}/get-recipe-items.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n return this.processRecipeItems(response.records);\n }),\n );\n }\n\n /**\n * Retrieve list of stock items linked to a stock item from the eSolve API\n *\n * @param options Filter options\n */\n public getMediaLinkedItems(\n options: EsolveMediaStockItemOptions,\n ): Observable<EsolveMediaStockItemList<T>> {\n let params = new HttpParams({\n fromObject: {\n rows: options.rows ?? 0,\n page: options.page ?? 0,\n ranges_id: options.ranges_id ?? 0,\n manufacturers_id: options.manufacturers_id ?? 0,\n display_only: options.display_only ?? false,\n is_active: options.is_active ?? true,\n },\n });\n\n if (options.sort) {\n const sort = options.sort;\n\n if (sort.field) {\n params = params.set('sort', sort.field);\n }\n\n if (sort.order) {\n params = params.set('order', sort.order);\n }\n }\n\n if (options.media_identifier) {\n params = params.append(\n 'media_identifier',\n options.media_identifier,\n );\n }\n\n if (options.media_id) {\n params = params.append('media_id', options.media_id);\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveMediaStockItemRecord<T>[]>>(\n `${this.config.api_url}/get-media-linked-items.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const items = this.processMediaStockItems(response.records);\n\n return new EsolveList(\n items,\n options.page,\n options.rows,\n +response.additional_data.total_records,\n );\n }),\n );\n }\n\n /**\n * Retrieves the full image collection of a stock item\n *\n * @param code Stock item code\n */\n public getStockImageCollection(\n code: string,\n ): Observable<EsolveStockImageCollection> {\n return this.http\n .get<EsolveGetResponse<EsolveStockImageCollectionRecord>>(\n `${this.config.api_url}/get-item-image-collection.php`,\n { params: { code } },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n const collection = new EsolveStockImageCollection(\n response.records,\n );\n\n return collection;\n }),\n );\n }\n\n public getStockFilters(\n options: EsolveStockFilterOptions,\n ): Observable<EsolveFilterList> {\n const params = new HttpParams({\n fromObject: {\n category_id: options.category_id ?? '',\n subcategory_id: options.subcategory_id ?? 0,\n ranges_id: options.ranges_id ?? 0,\n manufacturers_id: options.manufacturers_id ?? 0,\n specials_id: options.specials_id ?? 0,\n fields: options.fields.join(','),\n },\n });\n\n return this.http\n .get<EsolveGetResponse<EsolveFilterRecordList>>(\n `${this.config.api_url}/get-item-filters.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const filters = [];\n\n for (const record of response.records) {\n let filter = null;\n\n if (record.type === 'range') {\n filter = new EsolveRangeFilter(\n record.field,\n +record.min,\n +record.max,\n );\n } else if (record.type === 'single') {\n filter = new EsolveSingleSelectFilter(\n record.field,\n record.values,\n );\n } else if (record.type === 'multiple') {\n filter = new EsolveMultipleSelectFilter(\n record.field,\n record.values,\n );\n }\n\n if (filter) {\n if (record.label !== '') {\n filter.label = record.label;\n }\n\n filters.push(filter);\n }\n }\n\n return filters;\n }),\n );\n }\n\n /**\n * Processes the eSolve stock item record and converts it to an object.\n *\n * @param record eSolve stock item record\n */\n private processStockItem(record: EsolveStockRecord<T>): EsolveStockItem<T> {\n return new EsolveStockItem<T>(record);\n }\n\n /**\n * Processes the linked eSolve stock item records and converts them to objects.\n *\n * @param records Linked eSolve stock item records\n */\n private processLinkedItems(\n records: EsolveLinkedStockRecord<T>[],\n ): EsolveLinkedStockItem<T>[] {\n const items: EsolveLinkedStockItem<T>[] = [];\n\n if (records.length > 0) {\n for (const record of records) {\n items.push(new EsolveLinkedStockItem<T>(record));\n }\n }\n\n return items;\n }\n\n /**\n * Processes the recipe eSolve stock item records and converts them to objects.\n *\n * @param records Recipe eSolve stock item records\n */\n private processRecipeItems(\n records: EsolveRecipeItemRecord<T>[],\n ): EsolveRecipeStockItem<T>[] {\n const items: EsolveRecipeStockItem<T>[] = [];\n\n if (records.length > 0) {\n for (const record of records) {\n items.push(new EsolveRecipeStockItem<T>(record));\n }\n }\n\n return items;\n }\n\n /**\n * Processes the linked eSolve stock item records and converts them to objects.\n *\n * @param records Linked eSolve stock item records\n */\n private processMediaStockItems(\n records: EsolveMediaStockItemRecord<T>[],\n ): EsolveMediaStockItem<T>[] {\n const items: EsolveMediaStockItem<T>[] = [];\n\n if (records.length > 0) {\n for (const record of records) {\n items.push(new EsolveMediaStockItem<T>(record));\n }\n }\n\n return items;\n }\n\n /**\n * Retrieves stock records from HTTP params.\n * @param params HTTP client parameters\n */\n private getStockRecords(\n params: HttpParams,\n ): Observable<EsolveGetResponse<EsolveStockRecord<T>[]>> {\n return this.http.get<EsolveGetResponse<EsolveStockRecord<T>[]>>(\n `${this.config.api_url}/get-items.php`,\n { params },\n );\n }\n\n /**\n * Retrieves stock transaction history records from HTTP params.\n * @param params HTTP client parameters\n */\n private getStockHistoryRecords(\n params: HttpParams,\n ): Observable<EsolveGetResponse<EsolveStockRecord<T>[]>> {\n return this.http.get<EsolveGetResponse<EsolveStockRecord<T>[]>>(\n `${this.config.api_url}/get-items-transaction-history.php`,\n { params },\n );\n }\n\n public setNotify(\n code: string,\n notification_type = 'InStock',\n ): Observable<EsolveSetNotifyResult> {\n const body = {\n code,\n notification_type,\n };\n\n return this.http\n .post<EsolveSetResponse>(\n `${this.config.api_url}/set-notify.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveSetNotifyResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-notify',\n errorRes,\n );\n }),\n );\n }\n}\n","export class EsolveSpecialDates {\n constructor(\n public start: Date,\n public end: Date,\n ) {}\n}\n","import { EsolveSpecialImageRecord } from '../interfaces';\n\nexport class EsolveSpecialImage {\n public id: number;\n public width: number;\n public height: number;\n public src: string;\n\n constructor(record: EsolveSpecialImageRecord) {\n this.id = +record.id;\n this.width = +record.width;\n this.height = +record.height;\n this.src = record.src;\n }\n}\n","import { EsolveSpecialImage } from './esolve-special-image.model';\n\nimport { EsolveSpecialImageCollectionRecord } from '../interfaces';\n\nexport class EsolveSpecialImageCollection {\n public thumb?: EsolveSpecialImage[];\n public banner?: EsolveSpecialImage[];\n public banner_mobile?: EsolveSpecialImage[];\n\n constructor(\n public image_container: string,\n images: EsolveSpecialImageCollectionRecord,\n ) {\n if (images.thumb && images.thumb.length > 0) {\n this.thumb = [];\n\n for (const image_record of images.thumb) {\n this.thumb.push(new EsolveSpecialImage(image_record));\n }\n }\n\n if (images.banner && images.banner.length > 0) {\n this.banner = [];\n\n for (const image_record of images.banner) {\n this.banner.push(new EsolveSpecialImage(image_record));\n }\n }\n\n if (images.banner_mobile && images.banner_mobile.length > 0) {\n this.banner_mobile = [];\n\n for (const image_record of images.banner_mobile) {\n this.banner_mobile.push(new EsolveSpecialImage(image_record));\n }\n }\n }\n}\n","import { EsolveLinkedAsset } from '../../assets';\nimport { EsolveSeoDetails, EsolveSeoInfo } from '../../seo';\n\nimport { EsolveSpecialRecord } from '../interfaces';\n\nimport { EsolveSpecialDates } from './esolve-special-dates.model';\nimport { EsolveSpecialImageCollection } from './esolve-special-image-collection.model';\n\nexport class EsolveSpecial implements EsolveSeoDetails {\n public id: number;\n public identifier: string;\n public sort_priority: number;\n public name: string;\n public description: string;\n public discount_type: number;\n public special_type: string;\n public location_id: number;\n public active: boolean;\n public featured: boolean;\n public assets: EsolveLinkedAsset[];\n public seo_details: EsolveSeoInfo;\n public images?: EsolveSpecialImageCollection;\n public dates?: EsolveSpecialDates;\n\n constructor(record: EsolveSpecialRecord) {\n this.id = +record.id;\n this.identifier = record.identifier;\n this.sort_priority = +record.sort_priority;\n this.name = record.name;\n this.description = record.description;\n this.discount_type = +record.discount_type;\n this.special_type = record.special_type;\n this.location_id = +record.location_id;\n this.active = !!+record.active;\n this.featured = !!+record.featured;\n this.assets = [];\n\n if (record.assets.length > 0) {\n for (const asset_record of record.assets) {\n this.assets.push(new EsolveLinkedAsset(asset_record));\n }\n }\n\n if (\n record.images &&\n ((record.images.thumb && record.images.thumb.length > 0) ||\n (record.images.banner && record.images.banner.length > 0) ||\n (record.images.banner_mobile &&\n record.images.banner_mobile.length > 0)) &&\n record.image_container.trim() !== ''\n ) {\n this.images = new EsolveSpecialImageCollection(\n record.image_container,\n record.images,\n );\n }\n\n const start_date = new Date(+record.from_date_timestamp * 1000);\n const end_date = new Date(+record.to_date_timestamp * 1000);\n\n this.dates = new EsolveSpecialDates(start_date, end_date);\n\n if (record.seo_page_title.trim() === '') {\n record.seo_page_title = this.name;\n }\n\n this.seo_details = new EsolveSeoInfo(\n record.seo_page_title,\n record.seo_description,\n record.seo_keywords,\n );\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared';\n\nimport { EsolveSpecial } from './classes';\nimport { EsolveSpecialOptions, EsolveSpecialRecord } from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveSpecialsService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n public getSpecial(specials_id: number): Observable<EsolveSpecial> {\n const params = new HttpParams({\n fromObject: { specials_id },\n });\n\n return this.getSpecialSingle(params);\n }\n\n public getSpecialFromIdentifier(\n identifier: string,\n ): Observable<EsolveSpecial> {\n const params = new HttpParams({\n fromObject: { identifier },\n });\n\n return this.getSpecialSingle(params);\n }\n\n public getSpecials(\n options?: EsolveSpecialOptions,\n ): Observable<EsolveSpecial[]> {\n let params = new HttpParams();\n\n if (options?.featured_only) {\n params = params.set('featured_only', options.featured_only);\n }\n\n if (options?.image_container) {\n params = params.set('image_container', options.image_container);\n }\n\n if (options?.location_id) {\n params = params.set('location_id', options.location_id);\n }\n\n if (options?.special_type) {\n params = params.set('special_type', options.special_type);\n }\n\n return this.getSpecialRecords(params).pipe(\n map((records) => {\n const specials: EsolveSpecial[] = [];\n\n for (const record of records) {\n specials.push(this.processSpecial(record));\n }\n\n return specials;\n }),\n catchError(() => {\n return of<EsolveSpecial[]>([]);\n }),\n );\n }\n\n private getSpecialSingle(params: HttpParams): Observable<EsolveSpecial> {\n return this.getSpecialRecords(params).pipe(\n map((records) => {\n const record = records[0];\n\n return this.processSpecial(record);\n }),\n );\n }\n\n private getSpecialRecords(\n params?: HttpParams,\n ): Observable<EsolveSpecialRecord[]> {\n return this.http\n .get<EsolveGetResponse<EsolveSpecialRecord[]>>(\n `${this.config.api_url}/get-specials.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n return response.records;\n }),\n );\n }\n\n private processSpecial(record: EsolveSpecialRecord): EsolveSpecial {\n return new EsolveSpecial(record);\n }\n}\n","export class EsolveBankingDetails {\n constructor(\n public bank_name: string,\n public account_holder: string,\n public account: string,\n public account_type: string,\n public swift_number: string,\n public branch_code: string,\n ) {}\n}\n","import { EsolveIntegrationType } from '../types';\nimport { EsolvePaymentMethodRecord } from '../interfaces';\nimport { EsolveBankingDetails } from './esolve-banking-details.model';\n\nexport class EsolvePaymentMethod {\n public id: number;\n public location_id: number;\n public paymethod_name: string;\n public description: string;\n public display_banking_details: boolean;\n public currency_code: string;\n public merchant_id: string;\n public application_id: string;\n public api_signature: string;\n public is_gateway: boolean;\n public must_store_card_details: boolean;\n public allow_budget: boolean;\n public integration_type: EsolveIntegrationType;\n public bank_gateway_id: string;\n public accepted_card_types: string[];\n public post_transactions_to_gateway: boolean;\n public three_d_secure_url: string;\n public gateway_url: string;\n public generate_token_url: string;\n public widget_url: string;\n public successful_url: string;\n public failed_url: string;\n public enable_callback: boolean;\n public live: boolean;\n public default_module_id: number;\n public service_provider: string;\n public on_account: boolean;\n public sort_priority: number;\n public image_url: string;\n\n public banking_details: EsolveBankingDetails;\n\n constructor(record: EsolvePaymentMethodRecord) {\n this.id = +record.id;\n this.location_id = +record.location_id;\n this.paymethod_name = record.paymethod_name;\n this.description = record.description;\n this.display_banking_details = !!+record.display_banking_details;\n this.currency_code = record.currency_code;\n this.merchant_id = record.merchant_id;\n this.application_id = record.application_id;\n this.api_signature = record.api_signature;\n this.is_gateway = !!+record.is_gateway;\n this.must_store_card_details = !!+record.must_store_card_details;\n this.allow_budget = !!+record.allow_budget;\n this.integration_type = record.integration_type;\n this.bank_gateway_id = record.bank_gateway_id;\n this.accepted_card_types = record.accepted_card_types;\n this.post_transactions_to_gateway =\n !!+record.post_transactions_to_gateway;\n this.three_d_secure_url = record.three_d_secure_url;\n this.gateway_url = record.gateway_url;\n this.generate_token_url = record.generate_token_url;\n this.widget_url = record.widget_url;\n this.successful_url = record.successful_url;\n this.failed_url = record.failed_url;\n this.enable_callback = !!+record.enable_callback;\n this.live = !!+record.live;\n this.default_module_id = +record.default_module_id;\n this.service_provider = record.service_provider;\n this.on_account = !!+record.on_account;\n this.sort_priority = +record.sort_priority;\n this.image_url = record.image_url;\n\n this.banking_details = new EsolveBankingDetails(\n record.bank_name,\n record.account_holder,\n record.account,\n record.account_type,\n record.swift_number,\n record.branch_code,\n );\n }\n}\n","import { EsolveResponseResult } from '../../shared/response';\n\nimport { EsolveServiceProvider } from '../types';\nimport { EsolvePaymentResponse, EsolvePaymentFormInput } from '../interfaces';\n\nexport class EsolvePaymentResult extends EsolveResponseResult {\n public gateway_error_message: string;\n public redirect_required = false;\n public service_provider?: EsolveServiceProvider;\n public redirect_url?: string;\n /**\n * Form post variables\n *\n * Not available to SnapScan\n */\n public form_inputs?: EsolvePaymentFormInput[];\n /**\n * Form post content type\n *\n * Not available to SnapScan\n */\n public form_enctype?: string;\n /**\n * QR code image url\n *\n * Only available to SnapScan integrations\n */\n public qr_code_url?: string;\n\n constructor(response: EsolvePaymentResponse) {\n super(response);\n\n if (typeof response.service_provider !== 'undefined') {\n this.service_provider = response.service_provider;\n }\n\n if (typeof response.redirect_required !== 'undefined') {\n this.redirect_required = response.redirect_required;\n }\n\n this.gateway_error_message = response.gateway_error_message ?? '';\n\n // Check if redirect settings need to be set\n if (this.redirect_required && this.service_provider) {\n if (typeof response.redirect_url !== 'undefined') {\n this.redirect_url = response.redirect_url;\n }\n\n // Check integration specific settings\n if (this.service_provider === 'snapscan') {\n // QR code scan is required\n if (typeof response.qr_code_url !== 'undefined') {\n this.qr_code_url = response.qr_code_url;\n }\n } else {\n // Normal form posting redirect\n if (typeof response.form_inputs !== 'undefined') {\n this.form_inputs = response.form_inputs;\n }\n\n if (typeof response.form_enctype !== 'undefined') {\n this.form_enctype = response.form_enctype;\n }\n }\n }\n }\n}\n","import { EsolveResponseResult } from '../../shared/response';\n\nimport { EsolveVaultResponse } from '../interfaces';\n\nexport class EsolveVaultItemResult extends EsolveResponseResult {\n public id: number;\n public token?: string;\n public card_valid?: boolean;\n public card_details_validated?: boolean;\n public gateway_error_message?: string;\n\n constructor(response: EsolveVaultResponse) {\n super(response);\n\n this.id = +response.esolve_id;\n\n if (typeof response.token !== 'undefined') {\n this.token = response.token;\n }\n\n if (typeof response.card_valid !== 'undefined') {\n this.card_valid = response.card_valid;\n }\n\n if (typeof response.card_details_validated !== 'undefined') {\n this.card_details_validated = response.card_details_validated;\n }\n\n if (typeof response.gateway_error_message !== 'undefined') {\n this.gateway_error_message = response.gateway_error_message;\n }\n }\n}\n","import { EsolveVaultRecord } from '../interfaces';\n\nexport class EsolveVaultItem {\n public id = 0;\n public payment_methods_id = 0;\n public description = '';\n public last4 = '';\n public brand = '';\n private expiry: Date;\n\n public get expiry_month(): string {\n const month = this.expiry.getMonth() + 1;\n\n return month.toString().padStart(2, '0');\n }\n\n public get expiry_year(): number {\n return this.expiry.getFullYear();\n }\n\n public get masked_number(): string {\n return this.last4.padStart(19, '**** ');\n }\n\n constructor(record: EsolveVaultRecord) {\n this.id = +record.id;\n this.payment_methods_id = +record.payment_methods_id;\n this.description = record.description;\n this.last4 = record.last4;\n this.brand = record.brand;\n this.expiry = new Date(record.expiry_timestamp * 1000);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport {\n HttpClient,\n HttpErrorResponse,\n HttpParams,\n} from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport {\n EsolveErrorHandlerService,\n EsolveResponseHandlerService,\n EsolveGetResponse,\n EsolveSetResponse,\n EsolveResult,\n EsolveDeleteResponse,\n} from '../shared';\n\nimport {\n EsolvePaymentMethod,\n EsolvePaymentResult,\n EsolveVaultItem,\n EsolveVaultItemResult,\n} from './classes';\nimport {\n EsolveCardData,\n EsolvePaymentMethodOptions,\n EsolvePaymentMethodRecord,\n EsolvePaymentRedirectLinks,\n EsolvePaymentResponse,\n EsolvePaymentSetBody,\n EsolvePaymentStatus,\n EsolveVaultRecord,\n EsolveVaultResponse,\n} from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolvePaymentService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n /**\n * Retrieves a list of payment methods.\n *\n * @param options Filter options\n *\n * @returns An `Observable` with an array of payment methods\n */\n public getPaymentMethods(\n options?: EsolvePaymentMethodOptions,\n ): Observable<EsolvePaymentMethod[]> {\n return this.http\n .get<EsolveGetResponse<EsolvePaymentMethodRecord[]>>(\n `${this.config.api_url}/get-payment-methods.php`,\n { params: { ...options } },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processPaymentMethods(response.records);\n }),\n );\n }\n\n /**\n * Retrieve the payment status of the specified transaction\n *\n * @param transaction_id ID of the transaction\n *\n * @returns An `Observable` with the success status of the payment\n */\n public getPaymentStatus(transaction_id: number): Observable<boolean> {\n return this.http\n .get<EsolveGetResponse<EsolvePaymentStatus>>(\n `${this.config.api_url}/get-payment-status.php`,\n { params: { cart_id: transaction_id } },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n return response.records.success;\n }),\n );\n }\n\n /**\n * Retrieves a list of saved cards from the vault.\n *\n * @param payment_methods_id eSolve ID of a payment method\n *\n * @returns An `Observable` with an array of saved bank cards\n */\n public getVault(\n payment_methods_id?: number,\n ): Observable<EsolveVaultItem[]> {\n let params = new HttpParams();\n\n if (typeof payment_methods_id !== 'undefined') {\n params = params.set('payment_methods_id', payment_methods_id);\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveVaultRecord[]>>(\n `${this.config.api_url}/get-vault.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processVaultItems(response.records);\n }),\n );\n }\n\n /**\n * Sets a new card in the vault OR updates an existing one.\n *\n * @param payment_methods_id Selected payment method\n * @param card_data Information of bank card\n *\n * @returns An `Observable` with the result of the vault set.\n */\n public setVaultItem(\n payment_methods_id: number,\n card_data: EsolveCardData,\n ): Observable<EsolveVaultItemResult> {\n const body = {\n vault: {\n payment_methods_id,\n card_number: card_data.card_number,\n card_name: card_data.name,\n card_cvv: card_data.cvv,\n card_expiry: this.generateExpiry(card_data),\n },\n };\n\n return this.http\n .post<EsolveSetResponse<EsolveVaultResponse>>(\n `${this.config.api_url}/set-vault.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveVaultItemResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-vault',\n errorRes,\n );\n }),\n );\n }\n\n /**\n * Delete a card in the vault\n *\n * @param id ID of the vault item\n *\n * @returns An `Observable` with the result of the vault delete.\n */\n public deleteVaultItem(id: number): Observable<EsolveResult> {\n return this.http\n .delete<EsolveDeleteResponse>(\n `${this.config.api_url}/delete-vault.php`,\n {\n params: { id },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) => {\n if (\n http_response.result === undefined ||\n http_response.result === null ||\n http_response.result.status !== 'success'\n ) {\n throw http_response;\n }\n\n return new EsolveResult(\n http_response.result.status,\n http_response.result.code,\n http_response.result.message,\n );\n }),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpDeleteError(\n 'delete-vault',\n errorRes,\n );\n }),\n );\n }\n\n /**\n * Sets the payment for the specified transaction using selected payment\n * method.\n *\n * @param transaction_id eSolve ID to the transaction\n * @param payment_methods_id eSolve ID to the selected payment method\n * @param card ID of selected card from the vault or information to a brand new card\n *\n * @returns An `Observable` with the result of the payment\n */\n public setPayment(\n transaction_id: number,\n payment_methods_id: number,\n card?: EsolveCardData | number,\n links?: EsolvePaymentRedirectLinks,\n ): Observable<EsolvePaymentResult> {\n const body: EsolvePaymentSetBody = {\n payment: {\n cart_id: transaction_id,\n payment_methods_id,\n },\n };\n\n if (card) {\n if (typeof card === 'number') {\n body.payment.user_vault_id = card;\n } else {\n body.card = {\n card_number: card.card_number,\n card_name: card.name,\n card_cvv: card.cvv,\n card_expiry: this.generateExpiry(card),\n };\n }\n }\n\n if (links) {\n body.links = links;\n }\n\n return this.http\n .post<EsolveSetResponse<EsolvePaymentResponse>>(\n `${this.config.api_url}/set-payment.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolvePaymentResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-payment',\n errorRes,\n );\n }),\n );\n }\n\n /**\n * Processes the eSolve payment method records.\n *\n * @param records Records to process\n *\n * @returns An array of processed payment methods.\n */\n private processPaymentMethods(\n records: EsolvePaymentMethodRecord[],\n ): EsolvePaymentMethod[] {\n const payment_methods: EsolvePaymentMethod[] = [];\n\n if (records) {\n for (const record of records) {\n const payment_method = new EsolvePaymentMethod(record);\n\n payment_methods.push(payment_method);\n }\n }\n\n return payment_methods;\n }\n\n /**\n * Processes the eSolve vault records.\n *\n * @param records Records to process\n *\n * @returns An array of processed vault items (a.k.a. cards)\n */\n private processVaultItems(records: EsolveVaultRecord[]): EsolveVaultItem[] {\n const vault: EsolveVaultItem[] = [];\n\n if (records) {\n for (const record of records) {\n vault.push(new EsolveVaultItem(record));\n }\n }\n\n return vault;\n }\n\n /**\n * Generate a concatenated string with the expiry month and year\n *\n * @param card_data Credit card data\n *\n * @returns Expiry string\n */\n private generateExpiry(card_data: EsolveCardData): string {\n const month_string = card_data.expiry_month.padStart(2, '0');\n const year_string = card_data.expiry_year.padStart(4, '0');\n\n return `${month_string}${year_string}`;\n }\n}\n","export class EsolveShippingTotals {\n constructor(\n public total: number,\n public vat: number,\n public savings: number,\n ) {}\n}\n","import { EsolveShippingTotals } from './esolve-shipping-totals.model';\n\nexport class EsolveShippingCost {\n public shipping: EsolveShippingTotals;\n public insurance: EsolveShippingTotals;\n\n constructor(\n // Shipping\n shipping_total = 0,\n shipping_vat = 0,\n shipping_total_savings = 0,\n // Insurance\n insurance_total = 0,\n insurance_vat = 0,\n insurance_total_savings = 0,\n ) {\n this.shipping = new EsolveShippingTotals(\n shipping_total,\n shipping_vat,\n shipping_total_savings,\n );\n\n this.insurance = new EsolveShippingTotals(\n insurance_total,\n insurance_vat,\n insurance_total_savings,\n );\n }\n}\n","import { EsolveShippingMethodRecord } from '../interfaces';\nimport {\n EsolveShippingLocation,\n EsolveShippingCalculationMethod,\n EsolveInsuranceCalculationMethod,\n} from '../types';\n\nexport class EsolveShippingMethod {\n public id: number;\n public carrier_name: string;\n public delivery_category: string;\n public description: string;\n public location: EsolveShippingLocation;\n public pricing: string;\n public link_to_carrier_website: string;\n public days_to_deliver: number;\n public shipping_cost_calculation_method: EsolveShippingCalculationMethod;\n public insurance_cost_calculation_method: EsolveInsuranceCalculationMethod;\n public insurance_cost_percentage: number;\n public metric_factor: number;\n public allow_immediate_payment_processing: boolean;\n public allow_postal_address: boolean;\n public allow_physical_address: boolean;\n public client_to_collect: boolean;\n public is_default: boolean;\n public location_id: number;\n public use_zones: boolean;\n public min_distance: number;\n public max_distance: number;\n public shipping_surge_condition: number;\n public shipping_surge_percentage: number;\n public sort_priority: number;\n public shipping_group: string;\n public shipping_slot_identifier: string;\n public shipping_slot_delay_hours: number;\n public image_url: string;\n\n constructor(record: EsolveShippingMethodRecord) {\n this.id = +record.id;\n this.carrier_name = record.carrier_name;\n this.delivery_category = record.delivery_category;\n this.description = record.description;\n this.location = record.location;\n this.pricing = record.pricing;\n this.link_to_carrier_website = record.link_to_carrier_website;\n this.days_to_deliver = +record.days_to_deliver;\n this.shipping_cost_calculation_method =\n record.shipping_cost_calculation_method;\n this.insurance_cost_calculation_method =\n record.insurance_cost_calculation_method;\n this.insurance_cost_percentage = +record.insurance_cost_percentage;\n this.metric_factor = +record.metric_factor;\n this.allow_immediate_payment_processing =\n !!+record.allow_immediate_payment_processing;\n this.allow_postal_address = !!+record.allow_postal_address;\n this.allow_physical_address = !!+record.allow_physical_address;\n this.client_to_collect = !!+record.client_to_collect;\n this.is_default = !!+record.is_default_shipping_method;\n this.location_id = +record.location_id;\n this.use_zones = !!+record.use_zones;\n this.min_distance = +record.min_distance;\n this.max_distance = +record.max_distance;\n this.shipping_surge_condition = +record.shipping_surge_condition;\n this.shipping_surge_percentage = +record.shipping_surge_percentage;\n this.sort_priority = +record.sort_priority;\n this.shipping_group = record.shipping_group;\n this.shipping_slot_identifier = record.shipping_slot_identifier;\n this.shipping_slot_delay_hours = +record.shipping_slot_delay_hours;\n this.image_url = record.image_url;\n }\n}\n","import { EsolveTimeSlotDateRecord } from '../interfaces';\n\nexport class EsolveTimeSlotDate {\n public time_slots_id = 0;\n public available = 0;\n public date: Date;\n\n constructor(record?: EsolveTimeSlotDateRecord) {\n let timestamp = 0;\n\n if (record) {\n this.time_slots_id = record.time_slots_id;\n this.available = record.available;\n timestamp = record.timestamp * 1000;\n }\n\n this.date = new Date(timestamp);\n }\n}\n","import { EsolveTimeSlotDaysRecord } from '../interfaces';\n\nexport class EsolveTimeSlotDays {\n public mon = false;\n public tue = false;\n public wed = false;\n public thu = false;\n public fri = false;\n public sat = false;\n public sun = false;\n\n constructor(record?: EsolveTimeSlotDaysRecord) {\n if (record) {\n this.mon = record.mon;\n this.tue = record.tue;\n this.wed = record.wed;\n this.thu = record.thu;\n this.fri = record.fri;\n this.sat = record.sat;\n this.sun = record.sun;\n }\n }\n}\n","import { EsolveTimeSlotTimesRecord } from '../interfaces';\n\nexport class EsolveTimeSlotTimes {\n public open = '00:00';\n public close = '23:59';\n\n constructor(record?: EsolveTimeSlotTimesRecord) {\n if (record) {\n this.open = record.open;\n this.close = record.close;\n }\n }\n}\n","import { EsolveTimeSlotRecord } from '../interfaces';\n\nimport { EsolveTimeSlotDays } from './esolve-time-slot-days.model';\nimport { EsolveTimeSlotTimes } from './esolve-time-slot-times.model';\n\nexport class EsolveTimeSlot {\n public id = 0;\n public identifier = '';\n public name = '';\n public limit = 0;\n\n public days: EsolveTimeSlotDays;\n public times: EsolveTimeSlotTimes;\n\n constructor(record?: EsolveTimeSlotRecord) {\n if (record) {\n this.id = record.id;\n this.identifier = record.identifier;\n this.name = record.name;\n this.limit = record.limit;\n }\n\n this.days = new EsolveTimeSlotDays(record?.days);\n this.times = new EsolveTimeSlotTimes(record?.times);\n }\n}\n","import { EsolveTimeSlotConfigRecord } from '../interfaces';\n\nimport { EsolveTimeSlotDate } from './esolve-time-slot-date.model';\nimport { EsolveTimeSlot } from './esolve-time-slot.model';\n\nexport class EsolveTimeSlotConfig {\n public slots: EsolveTimeSlot[] = [];\n public dates: EsolveTimeSlotDate[] = [];\n\n constructor(record?: EsolveTimeSlotConfigRecord) {\n if (record) {\n for (const slot_record of record.slots) {\n this.slots.push(new EsolveTimeSlot(slot_record));\n }\n\n for (const date_record of record.dates) {\n this.dates.push(new EsolveTimeSlotDate(date_record));\n }\n }\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable, throwError } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\nimport { EsolveTransactionType } from '../transactions';\n\nimport {\n EsolveShippingCost,\n EsolveShippingMethod,\n EsolveTimeSlotConfig,\n} from './classes';\nimport {\n EsolveShippingCostRecord,\n EsolveShippingMethodRecord,\n EsolveShippingMethodOptions,\n EsolveTimeSlotConfigRecord,\n} from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveShippingService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n /**\n * Retrieves a list of shipping methods\n *\n * @param options Filter options\n *\n * @returns An `Observable` with an array of shipping methods\n */\n public getShippingMethods(\n options?: EsolveShippingMethodOptions,\n ): Observable<EsolveShippingMethod[]> {\n let params = new HttpParams();\n\n if (options) {\n if (typeof options.addresses_id !== 'undefined') {\n params = params.set('addresses_id', options.addresses_id);\n }\n\n if (typeof options.location_id !== 'undefined') {\n params = params.set('location_id', options.location_id);\n }\n\n if (typeof options.type !== 'undefined') {\n params = params.set('type', options.type);\n }\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveShippingMethodRecord[]>>(\n `${this.config.api_url}/get-shipping-methods.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processShippingMethods(response.records);\n }),\n );\n }\n\n /**\n * Retrieves the shipping costs\n *\n * @param shipping_id\n * @param addresses_id\n * @param location_id\n *\n * @returns An `Observable` with the shipping costs\n */\n public getShippingCost(\n shipping_id: number,\n addresses_id: number,\n location_id?: number,\n type: EsolveTransactionType = 'order',\n ): Observable<EsolveShippingCost> {\n try {\n let params = new HttpParams();\n\n if (typeof shipping_id === 'undefined') {\n throw new Error('Shipping ID is required');\n } else {\n params = params.set('shipping_id', shipping_id);\n }\n\n if (typeof addresses_id === 'undefined') {\n throw new Error('Address ID is required');\n } else {\n params = params.set('addresses_id', addresses_id);\n }\n\n if (typeof location_id !== 'undefined') {\n params = params.set('location_id', location_id);\n }\n\n params = params.set('type', type);\n\n return this.http\n .get<EsolveGetResponse<EsolveShippingCostRecord[]>>(\n `${this.config.api_url}/get-shipping-cost.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processShippingCost(response.records[0]);\n }),\n );\n } catch (err) {\n return throwError(() => err);\n }\n }\n\n /**\n * Retrieves the time slot config from a shipping method\n *\n * @param shipping_id\n *\n * @returns An `Observable` with the time slots configurations\n */\n public getTimeSlots(shipping_id: number): Observable<EsolveTimeSlotConfig> {\n try {\n let params = new HttpParams();\n\n if (typeof shipping_id === 'undefined') {\n throw new Error('Shipping ID is required');\n } else {\n params = params.set('shipping_id', shipping_id);\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveTimeSlotConfigRecord>>(\n `${this.config.api_url}/get-time-slots.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n return new EsolveTimeSlotConfig(response.records);\n }),\n );\n } catch (err) {\n return throwError(() => err);\n }\n }\n\n /**\n * Processes the eSolve shipping method records.\n *\n * @param records Records to process\n *\n * @returns An array of processed shipping methods\n */\n private processShippingMethods(\n records: EsolveShippingMethodRecord[],\n ): EsolveShippingMethod[] {\n const shipping_methods: EsolveShippingMethod[] = [];\n\n if (records) {\n for (const record of records) {\n shipping_methods.push(new EsolveShippingMethod(record));\n }\n }\n\n return shipping_methods;\n }\n\n /**\n * Processes the eSolve shipping costs record.+\n *\n * @param record Data to process\n *\n * @returns Processed shipping costs\n */\n private processShippingCost(\n record: EsolveShippingCostRecord,\n ): EsolveShippingCost {\n const shipping_cost = new EsolveShippingCost(\n +record.shipping_total,\n +record.vat_on_shipping,\n +record.total_saving_on_shipping,\n +record.insurance_total,\n +record.vat_on_insurance,\n +record.total_saving_on_insurance,\n );\n\n return shipping_cost;\n }\n}\n","import { EsolveResponseResult } from '../../shared/response';\n\nimport { EsolveEnquiryResponse } from '../types';\n\nexport class EsolveEnquiryResult extends EsolveResponseResult {\n public id = 0;\n\n constructor(response: EsolveEnquiryResponse) {\n super(response);\n\n this.id = +response.esolve_id;\n }\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveErrorHandlerService } from '../shared/errors';\nimport {\n EsolveResponseHandlerService,\n EsolveSetResponse,\n} from '../shared/response';\n\nimport { EsolveEnquiryResult } from './classes';\nimport { EsolveEnquiryResponse } from './types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveEnquiryService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n public send(form_data: FormData): Observable<EsolveEnquiryResult> {\n if (!form_data.has('email')) {\n return this.errorHandler.emitError(\n 'email_required',\n 'Email is required',\n );\n }\n\n return this.http\n .post<EsolveSetResponse<EsolveEnquiryResponse>>(\n `${this.config.api_url}/set-enquiry.php`,\n form_data,\n {\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveEnquiryResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-enquiry',\n errorRes,\n );\n }),\n );\n }\n}\n","import { EsolveStockItem } from '../../stock';\n\nexport class EsolveWishlistItem {\n constructor(\n public id: number,\n public qty: number,\n public vat_rate: number,\n public price: number,\n public price_incl: number,\n public vat_total: number,\n public total: number,\n public total_incl: number,\n public stock_item?: EsolveStockItem,\n ) {}\n}\n","import { EsolveResponseResult } from '../../shared/response';\n\nexport class EsolveEmptyWishlistResult extends EsolveResponseResult {}\n","import { Injectable, inject } from '@angular/core';\nimport {\n HttpClient,\n HttpErrorResponse,\n HttpParams,\n} from '@angular/common/http';\n\nimport { Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport {\n EsolveSetResponse,\n EsolveGetResponse,\n EsolveResponseHandlerService,\n} from '../shared/response';\nimport { EsolveErrorHandlerService } from '../shared/errors';\nimport { EsolveStockItem } from '../stock';\n\nimport { EsolveWishlist, EsolveWishlistSetAction } from './types';\nimport { EsolveWishlistItem, EsolveEmptyWishlistResult } from './classes';\nimport {\n EsolveWishlistItemRecord,\n EsolveWishlistItemResponse,\n EsolveWishlistSetItem,\n} from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveWishlistService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n /**\n * Retrieves the current wishlist\n *\n * @returns An `Observable` with an array of cart items\n */\n public getWishlist(): Observable<EsolveWishlist> {\n return this.getWishlistRecords().pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n return this.processWishlist(response.records);\n }),\n );\n }\n\n /**\n * Updates the wishlist by preforming various actions, such as adding, editing or removing items from the list.\n *\n * @param items An array of options to update the wishlist\n * @param default_action The default action to preform\n *\n * @returns An `Observable` with an array of responses that gives feedback on the requested changes\n */\n public setWishlist(\n items: EsolveWishlistSetItem[],\n default_action: EsolveWishlistSetAction = 'add',\n ): Observable<EsolveWishlistItemResponse[]> {\n const body = {\n items,\n default_action,\n };\n\n return this.http\n .post<EsolveSetResponse<EsolveWishlistItemResponse>>(\n `${this.config.api_url}/set-wishlist-item.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((response) => {\n if (response.responses === undefined) {\n throw response;\n }\n\n return response.responses;\n }),\n );\n }\n\n /**\n * Empties the wishlist for the logged in user.\n *\n * @returns Observable of type EsolveEmptyWishlistResult\n */\n public setWishlistEmpty(): Observable<EsolveEmptyWishlistResult> {\n return this.http\n .post<EsolveSetResponse<EsolveWishlistItemResponse>>(\n `${this.config.api_url}/set-wishlist-empty.php`,\n { empty: true },\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => {\n return new EsolveEmptyWishlistResult(response);\n },\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-wishlist-empty',\n errorRes,\n );\n }),\n );\n }\n\n /**\n * Processes the eSolve wishlist records\n *\n * @param wishlist_item_records Records to process\n *\n * @returns An array of processed cart items\n */\n private processWishlist(\n wishlist_item_records: EsolveWishlistItemRecord[],\n ): EsolveWishlist {\n const wishlist_items: EsolveWishlist = [];\n\n if (wishlist_item_records) {\n for (const item of wishlist_item_records) {\n const stock_item = new EsolveStockItem(item.stock_item);\n\n const wishlist_item = new EsolveWishlistItem(\n +item.id,\n +item.qty,\n +item.vat_rate,\n +item.price,\n +item.price_incl,\n +item.vat_total,\n +item.line_total,\n +item.line_total_incl,\n stock_item,\n );\n\n wishlist_items.push(wishlist_item);\n }\n }\n\n return wishlist_items;\n }\n\n /**\n * Retrieves stock records from HTTP params.\n *\n * @param params HTTP client parameters\n */\n private getWishlistRecords(\n params?: HttpParams,\n ): Observable<EsolveGetResponse<EsolveWishlistItemRecord[]>> {\n return this.http.get<EsolveGetResponse<EsolveWishlistItemRecord[]>>(\n `${this.config.api_url}/get-wishlist.php`,\n { params },\n );\n }\n}\n","import { EsolveSupplierRecord } from '../interfaces';\n\nexport class EsolveSupplier {\n public id?: number;\n public internal_account?: string;\n public external_account?: string;\n public company_name: string;\n public owner_firstname: string;\n public owner_surname: string;\n public owner_email: string;\n public owner_contact_number: string;\n public rep_firstname: string;\n public rep_surname: string;\n public rep_email: string;\n public rep_contact_number: string;\n public street: string;\n public suburb: string;\n public city: string;\n public province: string;\n public country: string;\n public postal_code: string;\n public catalogue_ref_1: string;\n public catalogue_ref_2: string;\n public is_active?: boolean;\n public industry_type: string;\n\n constructor(record?: Partial<EsolveSupplierRecord>) {\n this.id = record?.id;\n this.internal_account = record?.internal_account;\n this.external_account = record?.external_account;\n this.company_name = record?.company_name ?? '';\n this.owner_firstname = record?.owner_firstname ?? '';\n this.owner_surname = record?.owner_surname ?? '';\n this.owner_email = record?.owner_email ?? '';\n this.owner_contact_number = record?.owner_contact_number ?? '';\n this.rep_firstname = record?.rep_firstname ?? '';\n this.rep_surname = record?.rep_surname ?? '';\n this.rep_email = record?.rep_email ?? '';\n this.rep_contact_number = record?.rep_contact_number ?? '';\n this.street = record?.street ?? '';\n this.suburb = record?.suburb ?? '';\n this.city = record?.city ?? '';\n this.province = record?.province ?? '';\n this.country = record?.country ?? '';\n this.postal_code = record?.postal_code ?? '';\n this.catalogue_ref_1 = record?.catalogue_ref_1 ?? '';\n this.catalogue_ref_2 = record?.catalogue_ref_2 ?? '';\n this.is_active = record?.is_active;\n this.industry_type = record?.industry_type ?? '';\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveGetResponse } from '../shared/response';\n\nimport { EsolveSupplier } from './classes';\nimport { EsolveSupplierRecord, EsolveSupplierOptions } from './interfaces';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveSuppliersService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n\n public getSuppliers(\n options?: EsolveSupplierOptions,\n ): Observable<EsolveSupplier[]> {\n let params = new HttpParams();\n\n if (options?.industry_type) {\n params = params.set('industry_type', options.industry_type);\n }\n if (options?.internal_account) {\n params = params.set('internal_account', options.internal_account);\n }\n\n return this.getSupplierRecords(params).pipe(\n map((records) => {\n const suppliers: EsolveSupplier[] = [];\n\n for (const record of records) {\n suppliers.push(this.processSuppliers(record));\n }\n\n return suppliers;\n }),\n catchError(() => {\n return of<EsolveSupplier[]>([]);\n }),\n );\n }\n\n private getSupplierRecords(\n params: HttpParams,\n ): Observable<EsolveSupplierRecord[]> {\n return this.http\n .get<EsolveGetResponse<EsolveSupplierRecord[]>>(\n `${this.config.api_url}/get-suppliers.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length === 0\n ) {\n throw response;\n }\n\n return response.records;\n }),\n );\n }\n\n private processSuppliers(record: EsolveSupplierRecord): EsolveSupplier {\n return new EsolveSupplier(record);\n }\n}\n","import {\n EsolvePostResponseItem,\n EsolveResponseResult,\n} from '../../shared/response';\n\nexport class EsolveSetDeviceResult extends EsolveResponseResult {\n public id = 0;\n\n constructor(response: EsolvePostResponseItem) {\n super(response);\n\n this.id = +response.esolve_id;\n }\n}\n","import { EsolveUserDeviceRecord } from '../interfaces';\n\nexport class EsolveUserDevice {\n public userid: number;\n public devices_id: number;\n public location_id: number;\n public email: string;\n public account: string;\n public gender: string;\n public title: string;\n public initials: string;\n public firstname: string;\n public surname: string;\n public idnumber: string;\n public telnumber: string;\n public cellnumber: string;\n public uuid: string;\n public alias: string;\n public platform: string;\n public platform_version: string;\n public manufacturer: string;\n public model: string;\n public messaging_id: string;\n public is_active: boolean;\n\n constructor(record: EsolveUserDeviceRecord) {\n this.userid = +record.userid;\n this.devices_id = +record.devices_id;\n this.location_id = +record.location_id;\n this.email = record.email;\n this.account = record.account;\n this.gender = record.gender;\n this.title = record.title;\n this.initials = record.initials;\n this.firstname = record.firstname;\n this.surname = record.surname;\n this.idnumber = record.idnumber;\n this.telnumber = record.telnumber;\n this.cellnumber = record.cellnumber;\n this.uuid = record.uuid;\n this.alias = record.alias;\n this.platform = record.platform;\n this.platform_version = record.platform_version;\n this.manufacturer = record.manufacturer;\n this.model = record.model;\n this.messaging_id = record.messaging_id;\n this.is_active = !!record.is_active;\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { Observable, catchError, map } from 'rxjs';\nimport {\n HttpClient,\n HttpErrorResponse,\n HttpParams,\n} from '@angular/common/http';\n\nimport { EsolveConfigService } from '../core';\n\nimport {\n EsolveGetResponse,\n EsolveResponseHandlerService,\n EsolveSetResponse,\n} from '../shared/response';\nimport { EsolveErrorHandlerService } from '../shared/errors';\n\nimport {\n EsolveDevice,\n EsolveUserDeviceOptions,\n EsolveUserDeviceRecord,\n} from './interfaces';\nimport { EsolveSetDeviceResult, EsolveUserDevice } from './classes';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveDeviceService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n public setDevice(device: EsolveDevice): Observable<EsolveSetDeviceResult> {\n const body = {\n device,\n };\n\n return this.http\n .post<EsolveSetResponse>(\n `${this.config.api_url}/set-device.php`,\n body,\n {\n headers: {\n 'Content-Type':\n 'application/x-www-form-urlencoded;charset=utf-8;',\n },\n responseType: 'json',\n observe: 'body',\n },\n )\n .pipe(\n map((http_response) =>\n this.responseHandler.validateSingleHttpResponse(\n http_response,\n (response) => new EsolveSetDeviceResult(response),\n ),\n ),\n catchError((errorRes: HttpErrorResponse | any) => {\n return this.errorHandler.handleHttpPostError(\n 'set-device',\n errorRes,\n );\n }),\n );\n }\n\n public getUserDevices(\n options?: EsolveUserDeviceOptions,\n ): Observable<EsolveUserDevice[]> {\n let params = new HttpParams();\n\n if (options) {\n if (options.location_id) {\n params = params.set('location_id', +options.location_id);\n }\n\n if (options.devices_id) {\n params = params.set('devices_id', +options.devices_id);\n }\n\n if (options.user_id) {\n params = params.set('user_id', options.user_id);\n }\n }\n\n return this.getUserDeviceRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const devices: EsolveUserDevice[] = [];\n\n response.records.forEach((deviceRecord) => {\n devices.push(this.processDevice(deviceRecord));\n });\n\n return devices;\n }),\n );\n }\n\n private getUserDeviceRecords(\n params: HttpParams,\n ): Observable<EsolveGetResponse<EsolveUserDeviceRecord[]>> {\n return this.http.get<EsolveGetResponse<EsolveUserDeviceRecord[]>>(\n `${this.config.api_url}/get-user-devices.php`,\n { params },\n );\n }\n\n private processDevice(record: EsolveUserDeviceRecord): EsolveUserDevice {\n return new EsolveUserDevice(record);\n }\n}\n","import { EsolveWalletBalancesRecord } from '../interfaces';\n\nexport class EsolveWalletBalances {\n public reliable = 0;\n public unreliable = 0;\n public total = 0;\n\n constructor(record?: EsolveWalletBalancesRecord) {\n if (record) {\n this.reliable = +record.reliable;\n this.unreliable = +record.unreliable;\n this.total = +record.total;\n }\n }\n}\n","import { EsolveWalletTransactionRecord } from '../interfaces';\nimport { EsolveWalletTransactionType } from '../types';\n\nexport class EsolveWalletTransaction {\n public id = 0;\n public description = '';\n public cart_id = 0;\n public reliable = false;\n public amount = 0;\n public type: EsolveWalletTransactionType = 'debit';\n public date = new Date();\n\n constructor(record: Partial<EsolveWalletTransactionRecord>) {\n this.id = +(record.id ?? 0);\n this.description = record.description ?? '';\n this.cart_id = record.cart_id ?? 0;\n this.amount = record.amount ?? 0;\n\n if (\n record.type &&\n (record.type === 'credit' || record.type === 'debit')\n ) {\n this.type = record.type;\n }\n\n if (record.txdate_timestamp) {\n this.date = new Date(+record.txdate_timestamp * 1000);\n }\n }\n}\n","import { EsolveList } from '../../shared';\n\nimport { EsolveWalletTransaction } from '.';\n\nexport class EsolveWalletTransactionsList extends EsolveList<EsolveWalletTransaction> {}\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { Observable, map, throwError } from 'rxjs';\n\nimport { EsolveConfigService } from '../core';\nimport { EsolveSessionService } from '../session';\nimport { EsolveErrorHandlerService, EsolveGetResponse } from '../shared';\n\nimport {\n EsolveWalletBalancesRecord,\n EsolveWalletTransactionOptions,\n EsolveWalletTransactionRecord,\n} from './interfaces';\nimport {\n EsolveWalletBalances,\n EsolveWalletTransaction,\n EsolveWalletTransactionsList,\n} from './classes';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveWalletService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly sessionService = inject(EsolveSessionService);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n\n private _user_id = 0;\n\n public get user_id(): number {\n return this._user_id;\n }\n\n public set user_id(value: number) {\n value = value > 0 ? value : 0;\n\n if (this._user_id !== value) {\n this._user_id = value;\n }\n }\n\n constructor() {\n this.sessionService.getSession().subscribe((session) => {\n if (session.token !== '') {\n this.user_id = session.user_id;\n }\n });\n }\n\n /**\n * Retrieves wallet balances\n *\n * @returns An `Observable` with an array of cart items\n */\n public getBalances(): Observable<EsolveWalletBalances> {\n return this.http\n .get<EsolveGetResponse<EsolveWalletBalancesRecord>>(\n `${this.config.api_url}/get-wallet-totals.php`,\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n return new EsolveWalletBalances(response.records);\n }),\n );\n }\n\n public getTransactions(\n options: EsolveWalletTransactionOptions = {},\n ): Observable<EsolveWalletTransactionsList> {\n try {\n this.loginGuard();\n\n let params = new HttpParams();\n\n if (options.reliable !== undefined) {\n params = params.set('reliable', options.reliable);\n }\n\n if (options.type) {\n params = params.set('type', options.type);\n }\n\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.from_date) {\n params = params.set('from_date', options.from_date);\n }\n\n if (options.to_date) {\n params = params.set('to_date', options.to_date);\n }\n\n return this.http\n .get<EsolveGetResponse<EsolveWalletTransactionRecord[]>>(\n `${this.config.api_url}/get-wallet-transactions.php`,\n {\n params: params,\n },\n )\n .pipe(\n map((response) => {\n if (response.records === undefined) {\n throw response;\n }\n\n const items = this.processTransactions(\n response.records,\n );\n const total = +(\n response.additional_data.total_records ?? 0\n );\n const rows = options.rows ?? total;\n const page = options.page || 1;\n\n return new EsolveWalletTransactionsList(\n items,\n page,\n rows,\n total,\n );\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n private loginGuard(): void {\n if (this.user_id <= 0) {\n this.errorHandler.throwError('login_required', 'Login is required');\n }\n }\n\n private processTransactions(\n records: EsolveWalletTransactionRecord[],\n ): EsolveWalletTransaction[] {\n const transactions: EsolveWalletTransaction[] = [];\n\n if (records) {\n for (const record of records) {\n const transaction = new EsolveWalletTransaction(record);\n\n transactions.push(transaction);\n }\n }\n\n return transactions;\n }\n}\n","import { EsolveDeliveryRecord } from '../interfaces';\nimport { EsolveDeliveryStatusType, EsolveDeliveryType } from '../types';\n\nexport class EsolveDelivery {\n public id: number;\n public version: number;\n public cart_id: number;\n public shipping_id: number;\n public location_id: number;\n public cart_pick_id: number;\n public txdate: Date;\n public type: EsolveDeliveryType;\n public status: EsolveDeliveryStatusType;\n public courier_quote_error: any;\n public courier_delivery_error: any;\n public courier_delivery_id: string;\n public courier_status: string;\n public quoted_cost: number;\n public delivery_started: Date;\n public delivery_completed: Date;\n public delivery_cancelled: Date;\n public delivery_resumed: Date;\n public courier_cancellation_reason: string;\n public quote: any;\n public delivery: any;\n public proof: any;\n public tracking: any;\n public last_tracked: Date;\n public last_latitude: number;\n public last_longitude: number;\n\n constructor(record: EsolveDeliveryRecord) {\n this.id = +record.id;\n this.version = +record.version;\n this.cart_id = +record.cart_id;\n this.shipping_id = +record.shipping_id;\n this.location_id = +record.location_id;\n this.cart_pick_id = +record.cart_pick_id;\n this.txdate = new Date(+record.txdate * 1000);\n this.type = record.type as EsolveDeliveryType;\n this.status = record.status as EsolveDeliveryStatusType;\n this.courier_quote_error = record.courier_delivery_error;\n this.courier_delivery_error = record.courier_quote_error;\n this.courier_delivery_id = record.courier_delivery_id;\n this.courier_status = record.courier_status;\n this.quoted_cost = +record.quoted_cost\n this.delivery_started = new Date(+record.delivery_started * 1000);\n this.delivery_completed = new Date(+record.delivery_completed * 1000);\n this.delivery_cancelled = new Date(+record.delivery_cancelled * 1000);\n this.delivery_resumed = new Date(+record.delivery_resumed * 1000);\n this.courier_cancellation_reason = record.courier_cancellation_reason;\n this.proof = record.proof;\n this.tracking = record.tracking;\n this.last_tracked = new Date(+record.last_tracked * 1000);\n this.last_latitude = +record.last_latitude;\n this.last_longitude = +record.last_longitude;\n\n }\n}\n","import { EsolveDeliveryStatusRecord } from \"../interfaces\";\n\nexport class EsolveDeliveryStatus {\n public delivery_id: number;\n public complete: boolean;\n public cancelled: boolean;\n public last_update: Date;\n public latitude: number;\n public longitude: number;\n public pickup_eta: Date;\n public pickup_status: string;\n public dropoff_eta: Date;\n public driver_picture_href?: URL;\n public driver_name: string;\n public driver_phone_number: string;\n public rating: number;\n public vehicle_color: string;\n public vehicle_make: string;\n public vehicle_model: string;\n public vehicle_type: string;\n\n constructor(record: EsolveDeliveryStatusRecord) {\n this.delivery_id = +record.delivery_id;\n this.complete = record.complete;\n this.cancelled = record.cancelled;\n this.last_update = new Date(+record.last_update * 1000);\n this.latitude = +record.latitude;\n this.longitude = +record.longitude;\n this.pickup_eta = new Date(+record.pickup_eta * 1000);\n this.pickup_status = record.pickup_status;\n this.dropoff_eta = new Date(+record.dropoff_eta * 1000);\n if (record.driver_picture_href != \"\") {\n this.driver_picture_href = new URL(record.driver_picture_href);\n }\n this.driver_name = record.driver_name;\n this.driver_phone_number = record.driver_phone_number;\n this.rating = record.rating;\n this.vehicle_color = record.vehicle_color;\n this.vehicle_make = record.vehicle_make;\n this.vehicle_model = record.vehicle_model;\n this.vehicle_type = record.vehicle_type;\n }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { Observable, map, throwError } from 'rxjs';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { EsolveConfigService } from '../core';\n\nimport {\n EsolveGetResponse,\n EsolveResponseHandlerService,\n} from '../shared/response';\nimport { EsolveErrorHandlerService } from '../shared/errors';\n\nimport {\n EsolveDeliveriesOptions,\n EsolveDeliveryRecord,\n EsolveDeliveryStatusRecord,\n} from './interfaces';\nimport { EsolveDelivery } from './classes';\nimport { EsolveFilterFactory } from '../shared';\nimport { EsolveDeliveryStatus } from './classes/esolve-delivery-status.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EsolveDeliveriesService {\n private readonly config = inject(EsolveConfigService);\n private readonly http = inject(HttpClient);\n private readonly errorHandler = inject(EsolveErrorHandlerService);\n private readonly responseHandler = inject(EsolveResponseHandlerService);\n\n public getDeliveryStatus(cart_id: number): Observable<EsolveDeliveryStatus> {\n let params = new HttpParams();\n\n if (cart_id > 0) {\n params = params.set('cart_id', cart_id);\n }\n\n try {\n return this.http\n .get<EsolveGetResponse<EsolveDeliveryStatusRecord>>(\n `${this.config.api_url}/get-delivery-status.php`,\n { params },\n )\n .pipe(\n map((response) => {\n if (\n response.records === undefined ||\n Array.isArray(response.records)\n ) {\n throw response;\n }\n\n return new EsolveDeliveryStatus(response.records);\n }),\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n public getDeliveries(\n options?: EsolveDeliveriesOptions,\n ): Observable<EsolveDelivery[]> {\n let params = new HttpParams();\n\n if (options) {\n\n if (options.page) {\n params = params.set('page', options.page);\n }\n\n if (options.rows) {\n params = params.set('rows', options.rows);\n }\n\n if (options.deliveries_id) {\n params = params.set('deliveries_id', +options.deliveries_id);\n }\n\n if (options.version) {\n params = params.set('version', +options.version);\n }\n\n if (options.cart_id) {\n params = params.set('cart_id', +options.cart_id);\n }\n\n if (options.location_id) {\n params = params.set('location_id', +options.location_id);\n }\n\n if (options.status) {\n params = params.set('status', +options.status);\n }\n\n if (options.from_date) {\n params = params.set('from_date', +options.from_date);\n }\n\n if (options.to_date) {\n params = params.set('from_date', +options.to_date);\n }\n\n if (options.sort) {\n const sort = options.sort;\n\n if (sort.field) {\n params = params.set('sort', sort.field);\n }\n\n if (sort.order) {\n params = params.set('order', sort.order);\n }\n }\n\n if (options.filters) {\n let filters = options.filters;\n\n if (!Array.isArray(filters)) {\n filters = EsolveFilterFactory.covertFromObj(filters);\n }\n\n params = EsolveFilterFactory.convertToHttpParams(\n filters,\n params,\n );\n }\n }\n\n return this.getDeliveriesRecords(params).pipe(\n map((response) => {\n if (\n response.records === undefined ||\n response.records.length <= 0\n ) {\n throw response;\n }\n\n const deliveries: EsolveDelivery[] = [];\n\n response.records.forEach((deviceRecord) => {\n deliveries.push(this.processDelivery(deviceRecord));\n });\n\n return deliveries;\n }),\n );\n }\n\n private getDeliveriesRecords(\n params: HttpParams,\n ): Observable<EsolveGetResponse<EsolveDeliveryRecord[]>> {\n try {\n return this.http.get<EsolveGetResponse<EsolveDeliveryRecord[]>>(\n `${this.config.api_url}/get-deliveries.php`,\n { params },\n );\n } catch (error) {\n return throwError(() => error);\n }\n }\n\n private processDelivery(record: EsolveDeliveryRecord): EsolveDelivery {\n return new EsolveDelivery(record);\n }\n}\n","/*\n * Public API Surface of ng-esolve-connect\n */\n\nexport * from './lib/ng-esolve-connect.module';\nexport * from './lib/core';\nexport * from './lib/images';\nexport * from './lib/shared';\n\n// SEO\nexport * from './lib/seo';\n\n// Geocoder\nexport * from './lib/geocoder';\n\n// Assets\nexport * from './lib/assets';\n\n// Session\nexport * from './lib/session';\n\n// Auth\nexport * from './lib/auth';\n\n// Account\nexport * from './lib/account';\n\n// Banners\nexport * from './lib/banners';\n\n// Menu\nexport * from './lib/menu';\n\n// News\nexport * from './lib/news';\n\n// Topics\nexport * from './lib/topics';\n\n// Tags\nexport * from './lib/tags';\n\n// Stock\nexport * from './lib/stock';\n\n// Category Tree\nexport * from './lib/category-tree';\n\n// Manufacturers\nexport * from './lib/manufacturers';\n\n// Ranges\nexport * from './lib/ranges';\n\n// Specials\nexport * from './lib/specials';\n\n// Cart\nexport * from './lib/cart';\n\n// Payment\nexport * from './lib/payment';\n\n// Shipping\nexport * from './lib/shipping';\n\n// Locations\nexport * from './lib/locations';\n\n// Enquiry\nexport * from './lib/enquiry';\n\n// Wishlist\nexport * from './lib/wishlist';\n\n// Suppliers\nexport * from './lib/suppliers';\n\n// Coupons\nexport * from './lib/coupons';\n\n// Vouchers\nexport * from './lib/vouchers';\n\n// Transactions\nexport * from './lib/transactions';\n\n//Device\nexport * from './lib/device';\n\n// Wallet\nexport * from './lib/wallet';\n\n//Deliveries\nexport * from './lib/deliveries';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["map","switchMap","EsolveFilterFactory.covertFromObj","EsolveFilterFactory.convertToHttpParams","catchError"],"mappings":"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"}