@esolve/ng-esolve-connect 0.26.0 → 0.26.2
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.
- package/esm2020/lib/manufacturers/esolve-manufacturer.model.mjs +4 -1
- package/fesm2015/esolve-ng-esolve-connect.mjs +4 -1
- package/fesm2015/esolve-ng-esolve-connect.mjs.map +1 -1
- package/fesm2020/esolve-ng-esolve-connect.mjs +3 -0
- package/fesm2020/esolve-ng-esolve-connect.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esolve-ng-esolve-connect.mjs","sources":["../../../projects/ng-esolve-connect/src/lib/esolve-connect-config.constant.ts","../../../projects/ng-esolve-connect/src/lib/session/esolve-session.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/cookie/esolve-cookie.service.ts","../../../projects/ng-esolve-connect/src/lib/session/esolve-session.service.ts","../../../projects/ng-esolve-connect/src/lib/auth/esolve-auth-interceptor.service.ts","../../../projects/ng-esolve-connect/src/lib/ng-esolve-connect.module.ts","../../../projects/ng-esolve-connect/src/lib/shared/esolve-list.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/esolve-result.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/filters/classes/esolve-multiple-select-filter.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/filters/classes/esolve-range-filter.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/filters/classes/esolve-single-select-filter.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/filters/classes/index.ts","../../../projects/ng-esolve-connect/src/lib/shared/filters/interfaces/index.ts","../../../projects/ng-esolve-connect/src/lib/shared/filters/types/index.ts","../../../projects/ng-esolve-connect/src/lib/shared/filters/esolve-filter-factory.ts","../../../projects/ng-esolve-connect/src/lib/shared/response/esolve-response-result.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/response/esolve-response-handler.service.ts","../../../projects/ng-esolve-connect/src/lib/shared/errors/esolve-http-error.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/errors/esolve-error-handler.service.ts","../../../projects/ng-esolve-connect/src/lib/shared/sort/index.ts","../../../projects/ng-esolve-connect/src/lib/shared/seo/esolve-seo-info.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/seo/esolve-seo.service.ts","../../../projects/ng-esolve-connect/src/lib/shared/geocoder/esolve-geocode-address-result.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/geocoder/esolve-geocode-coords-result.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/geocoder/esolve-geocode-result.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/geocoder/esolve-geocoder.service.ts","../../../projects/ng-esolve-connect/src/lib/shared/assets/esolve-linked-asset.model.ts","../../../projects/ng-esolve-connect/src/lib/category-tree/esolve-category-tree-item.model.ts","../../../projects/ng-esolve-connect/src/lib/category-tree/esolve-category-tree.service.ts","../../../projects/ng-esolve-connect/src/lib/manufacturers/esolve-manufacturer.model.ts","../../../projects/ng-esolve-connect/src/lib/manufacturers/esolve-manufacturers.service.ts","../../../projects/ng-esolve-connect/src/lib/manufacturers/index.ts","../../../projects/ng-esolve-connect/src/lib/ranges/esolve-range.model.ts","../../../projects/ng-esolve-connect/src/lib/ranges/esolve-ranges.service.ts","../../../projects/ng-esolve-connect/src/lib/tags/esolve-tag.model.ts","../../../projects/ng-esolve-connect/src/lib/tags/esolve-tags.service.ts","../../../projects/ng-esolve-connect/src/lib/tags/index.ts","../../../projects/ng-esolve-connect/src/lib/topics/esolve-topic.model.ts","../../../projects/ng-esolve-connect/src/lib/topics/esolve-topic.service.ts","../../../projects/ng-esolve-connect/src/lib/shared/assets/esolve-asset.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/assets/esolve-assets.service.ts","../../../projects/ng-esolve-connect/src/lib/shared/assets/index.ts","../../../projects/ng-esolve-connect/src/lib/auth/esolve-auth.service.ts","../../../projects/ng-esolve-connect/src/lib/account/address/esolve-address.model.ts","../../../projects/ng-esolve-connect/src/lib/account/address/esolve-address-result.model.ts","../../../projects/ng-esolve-connect/src/lib/account/user-account/esolve-user-account.model.ts","../../../projects/ng-esolve-connect/src/lib/account/user-account/esolve-user-account-result.model.ts","../../../projects/ng-esolve-connect/src/lib/account/user-account/esolve-user-account-business.model.ts","../../../projects/ng-esolve-connect/src/lib/account/user-account/esolve-user-account-contact.model.ts","../../../projects/ng-esolve-connect/src/lib/account/user-account/esolve-user-client-account.model.ts","../../../projects/ng-esolve-connect/src/lib/account/user-account/esolve-user-client-account-balances.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-address.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-client.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-item.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-item-price.model.ts","../../../projects/ng-esolve-connect/src/lib/locations/classes/esolve-location-address.model.ts","../../../projects/ng-esolve-connect/src/lib/locations/classes/esolve-location-contact-info.model.ts","../../../projects/ng-esolve-connect/src/lib/locations/classes/esolve-location-geo.model.ts","../../../projects/ng-esolve-connect/src/lib/locations/classes/esolve-location-pobox-address.model.ts","../../../projects/ng-esolve-connect/src/lib/locations/classes/esolve-location-trading-day.model.ts","../../../projects/ng-esolve-connect/src/lib/locations/classes/esolve-location-trading-times.model.ts","../../../projects/ng-esolve-connect/src/lib/locations/classes/esolve-location.model.ts","../../../projects/ng-esolve-connect/src/lib/locations/classes/index.ts","../../../projects/ng-esolve-connect/src/lib/locations/esolve-locations.service.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-location.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-payment-method.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-shipping-method.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-user.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-list.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/index.ts","../../../projects/ng-esolve-connect/src/lib/account/password/esolve-change-password-result.model.ts","../../../projects/ng-esolve-connect/src/lib/account/password/esolve-reset-password-result.model.ts","../../../projects/ng-esolve-connect/src/lib/account/registration/esolve-registration-result.model.ts","../../../projects/ng-esolve-connect/src/lib/account/confirmation/esolve-account-confirmation-result.model.ts","../../../projects/ng-esolve-connect/src/lib/account/esolve-location-update-result.model.ts","../../../projects/ng-esolve-connect/src/lib/cart/classes/esolve-empty-cart-result.model.ts","../../../projects/ng-esolve-connect/src/lib/cart/classes/esolve-checkout-result.model.ts","../../../projects/ng-esolve-connect/src/lib/cart/classes/esolve-cart-item.model.ts","../../../projects/ng-esolve-connect/src/lib/cart/classes/esolve-cart-stock-item.model.ts","../../../projects/ng-esolve-connect/src/lib/cart/classes/esolve-cart-totals.model.ts","../../../projects/ng-esolve-connect/src/lib/cart/classes/esolve-transaction-analytics-data.model.ts","../../../projects/ng-esolve-connect/src/lib/cart/esolve-cart.service.ts","../../../projects/ng-esolve-connect/src/lib/account/esolve-account.service.ts","../../../projects/ng-esolve-connect/src/lib/banners/esolve-banner.model.ts","../../../projects/ng-esolve-connect/src/lib/banners/esolve-banner-image.model.ts","../../../projects/ng-esolve-connect/src/lib/banners/esolve-banner-image-hotspot.model.ts","../../../projects/ng-esolve-connect/src/lib/banners/esolve-banner.service.ts","../../../projects/ng-esolve-connect/src/lib/banners/index.ts","../../../projects/ng-esolve-connect/src/lib/menu/esolve-menu-item.model.ts","../../../projects/ng-esolve-connect/src/lib/menu/esolve-menu.service.ts","../../../projects/ng-esolve-connect/src/lib/news/esolve-news-group.model.ts","../../../projects/ng-esolve-connect/src/lib/news/esolve-news-article-author.model.ts","../../../projects/ng-esolve-connect/src/lib/news/esolve-news-article.model.ts","../../../projects/ng-esolve-connect/src/lib/news/esolve-news-article-list.model.ts","../../../projects/ng-esolve-connect/src/lib/news/esolve-news.service.ts","../../../projects/ng-esolve-connect/src/lib/stock/types/index.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-colour.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-badge.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-price.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-lead-times.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-item-base.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-dependant-item.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-group-item.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-group.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-item.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-item-list.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-recipe-stock-item.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-linked-stock-item.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-media-stock-item.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-image.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-additional-stock-image.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-image-collection.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/index.ts","../../../projects/ng-esolve-connect/src/lib/stock/interfaces/esolve-stock-image-collection-record.interface.ts","../../../projects/ng-esolve-connect/src/lib/stock/interfaces/index.ts","../../../projects/ng-esolve-connect/src/lib/stock/esolve-stock.service.ts","../../../projects/ng-esolve-connect/src/lib/specials/esolve-special-image.model.ts","../../../projects/ng-esolve-connect/src/lib/specials/esolve-special-image-collection.model.ts","../../../projects/ng-esolve-connect/src/lib/specials/esolve-special-dates.model.ts","../../../projects/ng-esolve-connect/src/lib/specials/esolve-special.model.ts","../../../projects/ng-esolve-connect/src/lib/specials/esolve-specials.service.ts","../../../projects/ng-esolve-connect/src/lib/payment/interfaces/index.ts","../../../projects/ng-esolve-connect/src/lib/payment/classes/esolve-banking-details.model.ts","../../../projects/ng-esolve-connect/src/lib/payment/classes/esolve-payment-method.model.ts","../../../projects/ng-esolve-connect/src/lib/payment/classes/esolve-payment-result.model.ts","../../../projects/ng-esolve-connect/src/lib/payment/classes/esolve-vault-item-result.model.ts","../../../projects/ng-esolve-connect/src/lib/payment/classes/esolve-vault-item.model.ts","../../../projects/ng-esolve-connect/src/lib/payment/esolve-payment.service.ts","../../../projects/ng-esolve-connect/src/lib/shipping/esolve-shipping-method.model.ts","../../../projects/ng-esolve-connect/src/lib/shipping/esolve-shipping-totals.model.ts","../../../projects/ng-esolve-connect/src/lib/shipping/esolve-shipping-cost.model.ts","../../../projects/ng-esolve-connect/src/lib/shipping/esolve-shipping.service.ts","../../../projects/ng-esolve-connect/src/lib/enquiry/esolve-enquiry-result.model.ts","../../../projects/ng-esolve-connect/src/lib/enquiry/esolve-enquiry.service.ts","../../../projects/ng-esolve-connect/src/lib/wishlist/classes/esolve-wishlist-item.model.ts","../../../projects/ng-esolve-connect/src/lib/wishlist/classes/esolve-empty-wishlist-result.model.ts","../../../projects/ng-esolve-connect/src/lib/wishlist/esolve-wishlist.service.ts","../../../projects/ng-esolve-connect/src/lib/suppliers/classes/esolve-supplier.model.ts","../../../projects/ng-esolve-connect/src/lib/suppliers/esolve-suppliers.service.ts","../../../projects/ng-esolve-connect/src/public-api.ts","../../../projects/ng-esolve-connect/src/esolve-ng-esolve-connect.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nimport { EsolveConnectConfig } from './esolve-connect.config';\r\n\r\nexport const ESOLVE_CONNECT_CONFIG = new InjectionToken<EsolveConnectConfig>('esolve.connect.config');\r\n","import { EsolveSessionData } from './esolve-session-data.interface';\r\n\r\nexport class EsolveSession implements EsolveSessionData {\r\n constructor(\r\n public id: number = -1,\r\n public location_id: number = 0,\r\n public readonly key: string = '',\r\n public readonly expiration_date?: Date,\r\n ) { }\r\n\r\n public get expired(): boolean {\r\n const current_date = new Date();\r\n\r\n return (\r\n (this.expiration_date === undefined) ||\r\n (current_date >= this.expiration_date)\r\n );\r\n }\r\n\r\n public get authenticated(): boolean {\r\n return (this.id > 0);\r\n }\r\n\r\n public get valid(): boolean {\r\n return (\r\n (this.key !== '') &&\r\n (this.expiration_date !== undefined) &&\r\n (this.id >= 0)\r\n );\r\n }\r\n\r\n public updateUser(user_id: number): void {\r\n this.id = user_id;\r\n }\r\n\r\n public updateLocation(location_id: number): void {\r\n this.location_id = location_id;\r\n }\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Inject, Injectable, Optional, PLATFORM_ID } from '@angular/core';\r\n\r\nimport { Request, Response } from 'express';\r\n\r\nimport { CookieService } from 'ngx-cookie-service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveCookieService {\r\n private is_browser: boolean = isPlatformBrowser(this.platformId);\r\n\r\n constructor(\r\n private ngxCookies: CookieService,\r\n @Inject(PLATFORM_ID) private platformId: Object,\r\n @Optional() @Inject('REQUEST') private request: Request,\r\n @Optional() @Inject('RESPONSE') private response: Response,\r\n ) { }\r\n\r\n public check(name: string): boolean {\r\n if (this.is_browser) {\r\n return this.ngxCookies.check(name);\r\n }\r\n\r\n const server_cookies = this.request.headers.cookie;\r\n\r\n if (!server_cookies) {\r\n return false;\r\n }\r\n\r\n name = encodeURIComponent(name);\r\n const regExp = this.getCookieRegExp(name);\r\n return regExp.test(server_cookies);\r\n }\r\n\r\n public get(name: string): string {\r\n if (this.is_browser) {\r\n return this.ngxCookies.get(name);\r\n }\r\n\r\n if (!this.check(name)) {\r\n return '';\r\n }\r\n\r\n const server_cookies = this.request.headers.cookie ?? '';\r\n\r\n const regExp = this.getCookieRegExp(name);\r\n const result = regExp.exec(server_cookies);\r\n\r\n return result && result[1] ? this.safeDecodeURIComponent(result[1]) : '';\r\n }\r\n\r\n public set(\r\n name: string,\r\n value: string,\r\n expires?: Date,\r\n path?: string,\r\n domain?: string,\r\n secure?: boolean,\r\n ): void {\r\n if (this.is_browser) {\r\n this.ngxCookies.set(name, value, expires, path, domain, secure);\r\n\r\n return;\r\n }\r\n\r\n this.response.cookie(name, value, { domain, path, expires, secure });\r\n }\r\n\r\n public delete(\r\n name: string,\r\n path?: string,\r\n domain?: string,\r\n secure?: boolean,\r\n ): void {\r\n if (this.is_browser) {\r\n this.ngxCookies.delete(name, path, domain, secure);\r\n\r\n return;\r\n }\r\n\r\n this.response.clearCookie(name, { path, domain, secure });\r\n }\r\n\r\n /*\r\n * Following functions come from ngx-cookie-service project since they are primarily the same\r\n */\r\n\r\n /**\r\n * Get cookie Regular Expression\r\n *\r\n * @param name Cookie name\r\n * @returns property RegExp\r\n *\r\n * @link https://github.com/stevermeister/ngx-cookie-service/blob/bcb6ac203487c487fcd126896bffaa14981c709c/projects/ngx-cookie-service/src/lib/cookie.service.ts#L31\r\n */\r\n private getCookieRegExp(name: string): RegExp {\r\n const escapedName: string = name.replace(/([\\[\\]\\{\\}\\(\\)\\|\\=\\;\\+\\?\\,\\.\\*\\^\\$])/gi, '\\\\$1');\r\n\r\n return new RegExp('(?:^' + escapedName + '|;\\\\s*' + escapedName + ')=(.*?)(?:;|$)', 'g');\r\n }\r\n\r\n /**\r\n * Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).\r\n *\r\n * @param encodedURIComponent A value representing an encoded URI component.\r\n *\r\n * @returns The unencoded version of an encoded component of a Uniform Resource Identifier (URI).\r\n *\r\n * @link https://github.com/stevermeister/ngx-cookie-service/blob/bcb6ac203487c487fcd126896bffaa14981c709c/projects/ngx-cookie-service/src/lib/cookie.service.ts#L47\r\n */\r\n private safeDecodeURIComponent(encodedURIComponent: string): string {\r\n try {\r\n return decodeURIComponent(encodedURIComponent);\r\n } catch {\r\n // probably it is not uri encoded. return as is\r\n return encodedURIComponent;\r\n }\r\n }\r\n}\r\n","import { Inject, Injectable, PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\nimport { EsolveCookieService } from '../shared/cookie/esolve-cookie.service';\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveStoredSession } from './esolve-stored-session.interface';\r\nimport { EsolveSession } from './esolve-session.model';\r\n\r\n// TODO: Rewrite session manager to use a pure rxjs solution.\r\n\r\ninterface SessionUpdateOptions {\r\n user_id?: number;\r\n location_id?: number;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveSessionService {\r\n public session: Observable<EsolveSession>;\r\n\r\n private _session: BehaviorSubject<EsolveSession>;\r\n private key_expiration_timer: any;\r\n private storage_key = 'ngEslvUserSession';\r\n private is_browser: boolean;\r\n\r\n public get currentSession(): EsolveSession {\r\n return this._session.value;\r\n }\r\n\r\n constructor(\r\n @Inject(PLATFORM_ID) private platformId: Object,\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private cookieService: EsolveCookieService,\r\n ) {\r\n this.setStorageKey();\r\n this._session = new BehaviorSubject<EsolveSession>(new EsolveSession());\r\n this.session = this._session.asObservable();\r\n this.is_browser = isPlatformBrowser(this.platformId);\r\n }\r\n\r\n public clearTimer(): void {\r\n if (this.key_expiration_timer) {\r\n clearTimeout(this.key_expiration_timer);\r\n }\r\n }\r\n\r\n public restore(\r\n expirationCallback: (session?: EsolveSession) => void,\r\n invalidSessionCallback: () => void,\r\n ): void {\r\n if (this.currentSession.valid) {\r\n return;\r\n }\r\n\r\n const stored_session_json = this.cookieService.get(this.storage_key);\r\n const stored_session: EsolveStoredSession = (stored_session_json ? JSON.parse(stored_session_json) : null);\r\n\r\n if (!stored_session) {\r\n invalidSessionCallback();\r\n\r\n return;\r\n }\r\n\r\n const expiration_date = new Date(stored_session.expiration_date);\r\n\r\n const loaded_session = new EsolveSession(\r\n stored_session.id,\r\n stored_session.location_id,\r\n stored_session.key,\r\n expiration_date,\r\n );\r\n\r\n if (!loaded_session.expired) {\r\n this._session.next(loaded_session);\r\n const expiration_duration = expiration_date.getTime() - new Date().getTime();\r\n this.startTimer(expirationCallback, expiration_duration);\r\n } else {\r\n expirationCallback(loaded_session);\r\n }\r\n }\r\n\r\n public handleSession(\r\n user_id: number,\r\n location_id: number,\r\n key: string,\r\n expiry_time: number,\r\n expires: number,\r\n expirationCallback: () => void,\r\n ): void {\r\n const expiration_date = new Date(expiry_time * 1000);\r\n const session = new EsolveSession(\r\n user_id,\r\n location_id,\r\n key,\r\n expiration_date,\r\n );\r\n\r\n this.cookieService.set(\r\n this.storage_key,\r\n JSON.stringify(session),\r\n expiration_date,\r\n '/',\r\n );\r\n this._session.next(session);\r\n this.startTimer(expirationCallback, expires * 1000);\r\n }\r\n\r\n public handleUpdateSession(\r\n {\r\n user_id,\r\n location_id,\r\n }: SessionUpdateOptions,\r\n callback?: () => void,\r\n ): void {\r\n const current_session = this.currentSession;\r\n\r\n if (typeof user_id !== 'undefined') {\r\n current_session.updateUser(user_id);\r\n }\r\n\r\n if (typeof location_id !== 'undefined') {\r\n current_session.updateLocation(location_id);\r\n }\r\n\r\n this.cookieService.set(\r\n this.storage_key,\r\n JSON.stringify(current_session),\r\n current_session.expiration_date,\r\n '/',\r\n );\r\n\r\n this._session.next(current_session);\r\n\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }\r\n\r\n private setStorageKey(): void {\r\n if (\r\n (typeof this.config.user_session_storage_key === 'string') &&\r\n (this.config.user_session_storage_key !== '')\r\n ) {\r\n this.storage_key = this.config.user_session_storage_key;\r\n }\r\n }\r\n\r\n private startTimer(callback: () => void, duration: number): void {\r\n if (this.is_browser) {\r\n this.key_expiration_timer = setTimeout(callback, duration);\r\n }\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport {\r\n HttpInterceptor,\r\n HttpRequest,\r\n HttpHandler,\r\n HttpEvent,\r\n} from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveSessionService } from '../session/esolve-session.service';\r\n\r\n@Injectable()\r\nexport class EsolveAuthInterceptorService implements HttpInterceptor {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private session: EsolveSessionService,\r\n ) { }\r\n\r\n public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (req.url.startsWith(`${this.config.api_url}/`)) {\r\n const service_identifier = req.url.replace(`${this.config.api_url}/`, '');\r\n\r\n const modified_url = req.url;\r\n let params = req.params;\r\n\r\n const session = this.session.currentSession;\r\n\r\n if (session.valid) {\r\n if (service_identifier !== 'get-access-token.php') {\r\n params = params.set('key', session.key);\r\n }\r\n }\r\n\r\n params = params.set('ws_id', this.config.wsid);\r\n\r\n const modified_req = req.clone({\r\n url: modified_url,\r\n params,\r\n });\r\n\r\n return next.handle(modified_req);\r\n }\r\n\r\n return next.handle(req);\r\n }\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\n\r\nimport { CookieService } from 'ngx-cookie-service';\r\n\r\nimport { EsolveConnectConfig } from './esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from './esolve-connect-config.constant';\r\n\r\nimport { EsolveAuthInterceptorService } from './auth/esolve-auth-interceptor.service';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n ],\r\n providers: [CookieService],\r\n exports: [],\r\n})\r\nexport class NgEsolveConnectModule {\r\n public static forRoot(config: EsolveConnectConfig): ModuleWithProviders<NgEsolveConnectModule> {\r\n return {\r\n ngModule: NgEsolveConnectModule,\r\n providers: [\r\n {\r\n provide: ESOLVE_CONNECT_CONFIG,\r\n useValue: config,\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: EsolveAuthInterceptorService,\r\n multi: true,\r\n },\r\n ],\r\n };\r\n }\r\n}\r\n","export class EsolveList<T> {\r\n constructor(\r\n public items: T[] = [],\r\n public page: number = 0,\r\n public rows: number = 0,\r\n public total: number = 0,\r\n ) { }\r\n}\r\n","export class EsolveResult {\r\n constructor(\r\n public status: string,\r\n public code: string,\r\n public message: string,\r\n ) { }\r\n}\r\n","import { HttpParams } from '@angular/common/http';\r\n\r\nimport { EsolveSelectFilter } from '../interfaces';\r\n\r\nexport class EsolveMultipleSelectFilter implements EsolveSelectFilter {\r\n public readonly type = 'multiple';\r\n public options: (string | number)[] = [];\r\n\r\n private values?: (string | number)[];\r\n\r\n constructor(\r\n public field: string,\r\n options?: (string | number)[],\r\n ) {\r\n if (options) {\r\n this.options = options;\r\n }\r\n }\r\n\r\n public setValue(values: (string | number)[]) {\r\n this.values = values;\r\n }\r\n\r\n public toHttpParams(): { [x: string]: string | (string | number)[]; };\r\n public toHttpParams(http_params: HttpParams): HttpParams;\r\n public toHttpParams(\r\n http_params?: HttpParams,\r\n ): HttpParams | { [x: string]: string | (string | number)[]; } {\r\n if (!this.values) {\r\n throw new Error('No values set');\r\n }\r\n\r\n const base_property = `filter[${this.field}]`;\r\n const type_property = base_property + '[type]';\r\n const values_property = base_property + '[values][]';\r\n\r\n const params = {\r\n [type_property]: this.type,\r\n [values_property]: this.values,\r\n };\r\n\r\n if (http_params) {\r\n return http_params.appendAll(params);\r\n }\r\n\r\n return params;\r\n }\r\n}\r\n","import { HttpParams } from '@angular/common/http';\r\nimport { EsolveFilter } from '../interfaces';\r\n\r\nexport class EsolveRangeFilter implements EsolveFilter {\r\n public readonly type = 'range';\r\n public min: number = 0;\r\n public max: number = 0;\r\n public options = {\r\n min: 0,\r\n max: 0,\r\n };\r\n\r\n constructor(\r\n public field: string,\r\n min: number = 0,\r\n max: number = 0,\r\n ) {\r\n this.options.min = min;\r\n this.options.max = max;\r\n\r\n if ((max > 0) && (min > max)) {\r\n this.options.min = max;\r\n this.options.max = min;\r\n }\r\n }\r\n\r\n public setValue(min: number, max: number): void {\r\n this.min = min;\r\n this.max = max;\r\n\r\n if ((max > 0) && (min > max)) {\r\n this.min = max;\r\n this.max = min;\r\n }\r\n }\r\n\r\n public toHttpParams(): { [x: string]: string | number; };\r\n public toHttpParams(http_params: HttpParams): HttpParams;\r\n public toHttpParams(\r\n http_params?: HttpParams,\r\n ): HttpParams | { [x: string]: string | number; } {\r\n if (this.min <= 0 && this.max <= 0) {\r\n throw new Error('No values set');\r\n }\r\n\r\n const base_property = `filter[${this.field}]`;\r\n const type_property = base_property + '[type]';\r\n const min_property = base_property + '[min]';\r\n const max_property = base_property + '[max]';\r\n\r\n const params = {\r\n [type_property]: this.type,\r\n [min_property]: this.min,\r\n [max_property]: this.max,\r\n };\r\n\r\n if (http_params) {\r\n return http_params.appendAll(params);\r\n }\r\n\r\n return params;\r\n }\r\n}\r\n","import { HttpParams } from '@angular/common/http';\r\n\r\nimport { EsolveSelectFilter } from '../interfaces';\r\n\r\nexport class EsolveSingleSelectFilter implements EsolveSelectFilter {\r\n public readonly type = 'single';\r\n public options: (string | number)[] = [];\r\n\r\n private value?: string | number;\r\n\r\n constructor(field: string, options: (string | number)[]);\r\n constructor(field: string, value: string | number);\r\n constructor(\r\n public field: string,\r\n options_or_value: string | number | (string | number)[],\r\n ) {\r\n if (Array.isArray(options_or_value)) {\r\n this.options = options_or_value;\r\n } else {\r\n this.setValue(options_or_value);\r\n }\r\n }\r\n\r\n public setValue(value: string | number) {\r\n this.value = value;\r\n }\r\n\r\n public toHttpParams(): { [x: string]: string | number; };\r\n public toHttpParams(http_params: HttpParams): HttpParams;\r\n public toHttpParams(\r\n http_params?: HttpParams,\r\n ): HttpParams | { [x: string]: string | number; } {\r\n if (!this.value) {\r\n throw new Error('No values set');\r\n }\r\n\r\n const base_property = `filter[${this.field}]`;\r\n const type_property = base_property + '[type]';\r\n const values_property = base_property + '[value]';\r\n\r\n const params = {\r\n [type_property]: this.type,\r\n [values_property]: this.value,\r\n };\r\n\r\n if (http_params) {\r\n return http_params.appendAll(params);\r\n }\r\n\r\n return params;\r\n }\r\n}\r\n","// Classes\r\nexport * from './esolve-multiple-select-filter.model';\r\nexport * from './esolve-range-filter.model';\r\nexport * from './esolve-single-select-filter.model';\r\n","// Interfaces\r\nexport * from './esolve-filter-definitions.interface';\r\nexport * from './esolve-filter-record.interface';\r\nexport * from './esolve-filter.interface';\r\nexport * from './esolve-range-filter-record.interface';\r\nexport * from './esolve-select-filter-record.interface';\r\nexport * from './esolve-select-filter.interface';\r\n","// Types\r\nexport * from './esolve-filter-list.type';\r\nexport * from './esolve-filter-record-list.type';\r\nexport * from './esolve-filter-type.type';\r\nexport * from './esolve-range-filter-type.type';\r\nexport * from './esolve-select-filter-type.type';\r\n","import { HttpParams } from '@angular/common/http';\r\n\r\nimport {\r\n EsolveMultipleSelectFilter,\r\n EsolveRangeFilter,\r\n EsolveSingleSelectFilter,\r\n} from './classes';\r\nimport { EsolveFilter, EsolveFilterDefinitions } from './interfaces';\r\n\r\nexport namespace EsolveFilterFactory {\r\n export function createRangeWithValue(\r\n field: string,\r\n min: number = 0,\r\n max: number = 0,\r\n ): EsolveRangeFilter {\r\n const filter = new EsolveRangeFilter(field);\r\n filter.setValue(min, max);\r\n\r\n return filter;\r\n }\r\n\r\n export function createSingleSelectWithValue(\r\n field: string,\r\n value: string | number,\r\n ): EsolveSingleSelectFilter {\r\n const filter = new EsolveSingleSelectFilter(field, value);\r\n\r\n return filter;\r\n }\r\n\r\n export function createMultipleSelectWithValue(\r\n field: string,\r\n value: (string | number)[],\r\n ): EsolveMultipleSelectFilter {\r\n const filter = new EsolveMultipleSelectFilter(field);\r\n filter.setValue(value);\r\n\r\n return filter;\r\n }\r\n\r\n export function covertFromObj(obj: EsolveFilterDefinitions): EsolveFilter[] {\r\n const filters: EsolveFilter[] = [];\r\n\r\n for (const field in obj) {\r\n const value = obj[field];\r\n let filter = null;\r\n\r\n if (Array.isArray(value)) {\r\n filter = createMultipleSelectWithValue(field, value);\r\n } else if (typeof value === 'object') {\r\n filter = createRangeWithValue(field, value.min, value.max);\r\n } else {\r\n filter = createSingleSelectWithValue(field, value);\r\n }\r\n\r\n if (filter) {\r\n filters.push(filter);\r\n }\r\n }\r\n\r\n return filters;\r\n }\r\n\r\n export function convertToHttpParams(\r\n filters: EsolveFilter[],\r\n ): { [x: string]: string | number | (string | number)[]; };\r\n\r\n export function convertToHttpParams(\r\n filters: EsolveFilter[],\r\n http_params: HttpParams,\r\n ): HttpParams;\r\n\r\n export function convertToHttpParams(\r\n filters: EsolveFilter[],\r\n http_params?: HttpParams,\r\n ): HttpParams | { [x: string]: string | number | (string | number)[]; } {\r\n if (http_params) {\r\n for (const filter of filters) {\r\n http_params = filter.toHttpParams(http_params);\r\n }\r\n\r\n return http_params;\r\n }\r\n\r\n let params = {};\r\n\r\n for (const filter of filters) {\r\n params = {\r\n ...params,\r\n ...filter.toHttpParams(),\r\n };\r\n }\r\n\r\n return params;\r\n }\r\n}\r\n","import { EsolveResponseLogItem } from './esolve-response-log-item.interface';\r\nimport { EsolvePostResponseItem } from './esolve-post-response-item.interface';\r\n\r\nexport class EsolveResponseResult {\r\n public success_log: EsolveResponseLogItem[] = [];\r\n public error_log: EsolveResponseLogItem[] = [];\r\n\r\n constructor(response: EsolvePostResponseItem) {\r\n this.error_log.push(...response.log.filter((log_item) => log_item.type === 'error'));\r\n this.success_log.push(...response.log.filter((log_item) => log_item.type === 'success'));\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { EsolvePostResponseItem } from './esolve-post-response-item.interface';\r\nimport { EsolveSetResponse } from './esolve-set-response.interface';\r\nimport { EsolveResponseResult } from './esolve-response-result.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveResponseHandlerService {\r\n constructor() { }\r\n\r\n /**\r\n * Parse single HTTP response\r\n *\r\n * @param http_response HTTP Response to eSolve service\r\n * @param resultHandler Function to parse response to a result\r\n *\r\n * @returns Parsed result of response\r\n */\r\n public validateSingleHttpResponse<R extends EsolveResponseResult, T extends EsolvePostResponseItem>(\r\n http_response: EsolveSetResponse<T>,\r\n resultHandler: (response: T) => R,\r\n ): R {\r\n if (\r\n (http_response.responses === undefined) ||\r\n (http_response.responses.length <= 0)\r\n ) {\r\n throw http_response;\r\n }\r\n\r\n const response = http_response.responses[0];\r\n\r\n if (\r\n (response.status.state === 'error') ||\r\n (response.status.state === 'none')\r\n ) {\r\n throw response;\r\n }\r\n\r\n return resultHandler(response);\r\n }\r\n}\r\n","export class EsolveHttpError extends Error {\r\n public readonly http_error = true;\r\n public type: 'error' | 'exception';\r\n public error_code: string;\r\n\r\n constructor(type: 'error' | 'exception', code: string, message: string, ...params: any[]) {\r\n // Pass remaining arguments (including vendor specific ones) to parent constructor\r\n super(...[message, ...params]);\r\n\r\n // Maintains proper stack trace for where our error was thrown (only available on V8)\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, EsolveHttpError);\r\n }\r\n\r\n this.name = 'EsolveHttpError';\r\n this.type = type;\r\n this.error_code = code;\r\n }\r\n}\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { Observable, throwError } from 'rxjs';\r\n\r\nimport {\r\n EsolveResponse,\r\n EsolveDeleteResult,\r\n EsolvePostResponseItem,\r\n EsolveDeleteResponse,\r\n EsolveSetResponse,\r\n} from '../response';\r\nimport { EsolveHttpError } from './esolve-http-error.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveErrorHandlerService {\r\n constructor() { }\r\n\r\n public throwError(code: string, message: string): void {\r\n throw new EsolveHttpError('error', message, code);\r\n }\r\n\r\n public emitError(code: string, message: string): Observable<never> {\r\n return throwError(() => new EsolveHttpError('error', message, code));\r\n }\r\n\r\n public handleHttpPostError(\r\n service_type: string,\r\n errorRes: HttpErrorResponse | EsolveSetResponse | EsolvePostResponseItem,\r\n ): Observable<never> {\r\n if (\r\n !(errorRes instanceof HttpErrorResponse) &&\r\n !('service_type' in errorRes) &&\r\n (\r\n ('id' in errorRes) &&\r\n ('esolve_id' in errorRes) &&\r\n ('transaction_type' in errorRes) &&\r\n ('status' in errorRes) &&\r\n ('log' in errorRes)\r\n )\r\n ) {\r\n return throwError(() => this.parsePostErrors(errorRes));\r\n }\r\n\r\n return this.handleHttpError(service_type, errorRes);\r\n }\r\n\r\n public handleHttpDeleteError(\r\n service_type: string,\r\n errorRes: HttpErrorResponse | EsolveDeleteResponse | EsolveDeleteResult,\r\n ): Observable<never> {\r\n const is_not_base = (\r\n !(errorRes instanceof HttpErrorResponse) &&\r\n !('service_type' in errorRes) &&\r\n (\r\n ('id' in errorRes) &&\r\n ('status' in errorRes) &&\r\n ('message' in errorRes) &&\r\n ('code' in errorRes)\r\n )\r\n );\r\n\r\n if (is_not_base) {\r\n return throwError(() => this.parseDeleteError(errorRes));\r\n }\r\n\r\n return this.handleHttpError(service_type, errorRes);\r\n }\r\n\r\n private handleHttpError(\r\n service_type: string,\r\n error_response: HttpErrorResponse | EsolveResponse,\r\n ): Observable<never> {\r\n if (error_response instanceof HttpErrorResponse) {\r\n if (error_response.status === 500) {\r\n const server_error = error_response.error;\r\n\r\n if (\r\n ('service_type' in server_error) &&\r\n (server_error.service_type === service_type)\r\n ) {\r\n return throwError(() => this.parseException(server_error as EsolveResponse));\r\n }\r\n }\r\n } else {\r\n if (\r\n ('service_type' in error_response) &&\r\n (error_response.service_type === service_type)\r\n ) {\r\n if (error_response.type === 'exception') {\r\n return throwError(() => this.parseException(error_response));\r\n } else if (error_response.type === 'error') {\r\n return throwError(() => this.parseResponseError(error_response));\r\n }\r\n }\r\n }\r\n\r\n return throwError(() => error_response);\r\n }\r\n\r\n private parseException(exception: EsolveResponse): EsolveHttpError {\r\n const error = new EsolveHttpError(\r\n 'exception',\r\n exception.message || 'Unknown exception has occurred',\r\n exception.additional_data.exception_type || 'unknown',\r\n );\r\n\r\n return error;\r\n }\r\n\r\n private parseResponseError(exception: EsolveResponse): EsolveHttpError {\r\n const error = new EsolveHttpError(\r\n 'error',\r\n exception.message || 'Unknown error has occurred',\r\n exception.code || 'unknown',\r\n );\r\n\r\n return error;\r\n }\r\n\r\n private parsePostErrors(response: EsolvePostResponseItem): EsolveHttpError {\r\n let error_code = 'unknown';\r\n let message = 'Unknown error has occurred';\r\n\r\n\r\n if ((response.status.state === 'none') && (response.log.length > 0)) {\r\n error_code = 'no_response';\r\n message = 'Response was provided';\r\n } else if (response.status.state === 'error') {\r\n const login_error_log = response.log[0];\r\n\r\n error_code = login_error_log.message_code;\r\n message = login_error_log.message;\r\n }\r\n\r\n return new EsolveHttpError('error', error_code, message);\r\n }\r\n\r\n private parseDeleteError(result: EsolveDeleteResult): EsolveHttpError {\r\n return new EsolveHttpError('error', result.message, result.code);\r\n }\r\n}\r\n","// Types\r\nexport * from './esolve-sort-order.type';\r\n// Interfaces\r\nexport * from './esolve-sort.interface';\r\n","/**\r\n * Search Engine Optimization information.\r\n */\r\nexport class EsolveSeoInfo {\r\n constructor(\r\n public title: string = '',\r\n public description: string = '',\r\n public keywords: string = '',\r\n ) { }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { Meta, Title } from '@angular/platform-browser';\r\n\r\nimport { EsolveConnectConfig } from '../../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../../esolve-connect-config.constant';\r\n\r\nimport { EsolveSeoInfo } from './esolve-seo-info.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveSeoService {\r\n private title_prefix = '';\r\n private title_suffix = '';\r\n private title_separator = '|';\r\n\r\n private default_seo_title = '';\r\n private default_seo_description = '';\r\n private default_seo_keywords = '';\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private title: Title,\r\n private meta: Meta,\r\n ) {\r\n this.init();\r\n }\r\n\r\n /**\r\n * Sets SEO tags for page\r\n * @param seoInfo SEO object\r\n */\r\n public setTags(seoInfo: EsolveSeoInfo): void {\r\n seoInfo = this.validateAndSanitizeSeoInfo(seoInfo);\r\n\r\n this.setPageTitleTags(seoInfo.title);\r\n this.setPageDescriptionTags(seoInfo.description);\r\n this.setPageKeywordsTags(seoInfo.keywords);\r\n }\r\n\r\n private init(): void {\r\n if (typeof this.config.title_prefix !== 'undefined') {\r\n this.title_prefix = this.config.title_prefix;\r\n }\r\n\r\n if (typeof this.config.title_suffix !== 'undefined') {\r\n this.title_suffix = this.config.title_suffix;\r\n }\r\n\r\n if (typeof this.config.title_separator !== 'undefined') {\r\n this.title_separator = this.config.title_separator;\r\n }\r\n\r\n if (typeof this.config.default_seo_title !== 'undefined') {\r\n this.default_seo_title = this.config.default_seo_title;\r\n }\r\n\r\n if (typeof this.config.default_seo_description !== 'undefined') {\r\n this.default_seo_description = this.config.default_seo_description;\r\n }\r\n\r\n if (typeof this.config.default_seo_keywords !== 'undefined') {\r\n this.default_seo_keywords = this.config.default_seo_keywords;\r\n }\r\n }\r\n\r\n private setPageTitleTags(title: string): void {\r\n this.title.setTitle(title);\r\n this.meta.updateTag({ property: 'og:title', content: title });\r\n }\r\n\r\n private setPageDescriptionTags(description: string): void {\r\n this.meta.updateTag({ name: 'description', content: description });\r\n this.meta.updateTag({ property: 'og:description', content: description });\r\n }\r\n\r\n private setPageKeywordsTags(keywords: string): void {\r\n this.meta.updateTag({ name: 'keywords', content: keywords });\r\n }\r\n\r\n private validateAndSanitizeSeoInfo(seoInfo: EsolveSeoInfo): EsolveSeoInfo {\r\n const pageSeo = new EsolveSeoInfo(\r\n this.default_seo_title,\r\n this.default_seo_description,\r\n this.default_seo_keywords,\r\n );\r\n\r\n if (seoInfo.description.trim() !== '') {\r\n pageSeo.description = seoInfo.description;\r\n }\r\n\r\n if (seoInfo.title.trim() !== '') {\r\n const titlePartsArray = [];\r\n\r\n if (this.title_prefix !== '') {\r\n titlePartsArray.push(this.title_prefix);\r\n\r\n if (this.title_separator !== '') {\r\n titlePartsArray.push(this.title_separator);\r\n }\r\n }\r\n\r\n titlePartsArray.push(seoInfo.title);\r\n\r\n if (this.title_suffix !== '') {\r\n if (this.title_separator !== '') {\r\n titlePartsArray.push(this.title_separator);\r\n }\r\n\r\n titlePartsArray.push(this.title_suffix);\r\n }\r\n\r\n pageSeo.title = titlePartsArray.join(' ');\r\n\r\n if (seoInfo.keywords.trim() === '') {\r\n const clean_title = seoInfo.title.replace(/[^a-zA-Z0-9\\. ]+/gi, '').trim();\r\n const keywords = clean_title.split(' ');\r\n const clean_keywords: string[] = [];\r\n\r\n for (let keyword of keywords) {\r\n keyword = keyword.trim();\r\n if (keyword.length > 2) {\r\n keyword = keyword.toLocaleLowerCase();\r\n if (!clean_keywords.includes(keyword)) {\r\n clean_keywords.push(keyword);\r\n }\r\n }\r\n }\r\n\r\n seoInfo.keywords = clean_keywords.join(',');\r\n }\r\n }\r\n\r\n if (seoInfo.keywords.trim() !== '') {\r\n pageSeo.keywords = seoInfo.keywords;\r\n }\r\n\r\n return pageSeo;\r\n }\r\n}\r\n","export class EsolveGeocodeAddressResult {\r\n constructor(\r\n public street_number: string,\r\n public street: string,\r\n public suburb: string,\r\n public city: string,\r\n public province: string,\r\n public country: string,\r\n public postal_code: string,\r\n ) { }\r\n}\r\n","export class EsolveGeocodeCoordsResult {\r\n constructor(\r\n public latitude: number,\r\n public longitude: number,\r\n ) { }\r\n}\r\n","import { EsolveGeocodeAddressResult } from './esolve-geocode-address-result.model';\r\nimport { EsolveGeocodeCoordsResult } from './esolve-geocode-coords-result.model';\r\n\r\nexport class EsolveGeocodeResult {\r\n constructor(\r\n public formatted_address: string,\r\n public address: EsolveGeocodeAddressResult,\r\n public coords: EsolveGeocodeCoordsResult,\r\n public status: string,\r\n public checksum: string,\r\n public cached: boolean,\r\n ) { }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../response';\r\n\r\nimport { EsolveGeocodeResultRecord } from './esolve-geocode-result-record.interface';\r\nimport { EsolveGeocodeResult } from './esolve-geocode-result.model';\r\nimport { EsolveGeocodeAddressResult } from './esolve-geocode-address-result.model';\r\nimport { EsolveGeocodeCoordsResult } from './esolve-geocode-coords-result.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveGeocoderService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n public geocode(\r\n street_number: string,\r\n street: string,\r\n suburb: string,\r\n city: string,\r\n province: string,\r\n country: string,\r\n postal_code: string,\r\n ): Observable<EsolveGeocodeResult> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveGeocodeResultRecord>>(\r\n `${this.config.api_url}/get-geocode.php`,\r\n {\r\n params: {\r\n street_number,\r\n street,\r\n suburb,\r\n city,\r\n province,\r\n country,\r\n postal_code,\r\n },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const record = response.records;\r\n\r\n return this.processGeocodeResult(record);\r\n }),\r\n );\r\n }\r\n\r\n public reverseGeocode(latitude: number, longitude: number): Observable<EsolveGeocodeResult> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveGeocodeResultRecord>>(\r\n `${this.config.api_url}/get-geocode.php`,\r\n {\r\n params: {\r\n latitude: latitude,\r\n longitude: longitude,\r\n },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const record = response.records;\r\n\r\n return this.processGeocodeResult(record);\r\n }),\r\n );\r\n }\r\n\r\n private processGeocodeResult(record: EsolveGeocodeResultRecord): EsolveGeocodeResult {\r\n const geocode_address = new EsolveGeocodeAddressResult(\r\n record.address.street_number,\r\n record.address.street,\r\n record.address.suburb,\r\n record.address.city,\r\n record.address.province,\r\n record.address.country,\r\n record.address.postal_code,\r\n );\r\n\r\n const geocode_coords = new EsolveGeocodeCoordsResult(\r\n record.latitude,\r\n record.longitude,\r\n );\r\n\r\n const geocode_result = new EsolveGeocodeResult(\r\n record.formatted_address,\r\n geocode_address,\r\n geocode_coords,\r\n record.status,\r\n record.checksum,\r\n record.cached,\r\n );\r\n\r\n return geocode_result;\r\n }\r\n}\r\n","import { EsolveAssetType } from './esolve-asset-type.type';\r\nimport { EsolveLinkedAssetRecord } from './esolve-linked-asset-record.interface';\r\n\r\nexport class EsolveLinkedAsset {\r\n public id: number;\r\n public name: string;\r\n public type: EsolveAssetType;\r\n public description: string;\r\n public src: string;\r\n\r\n constructor(record: EsolveLinkedAssetRecord) {\r\n this.id = +record.id;\r\n this.name = record.name;\r\n this.type = record.type;\r\n this.description = record.description;\r\n this.src = record.src;\r\n }\r\n}\r\n","import { EsolveSeoInfo } from '../shared/seo/esolve-seo-info.model';\r\nimport { EsolveSeoDetails } from '../shared/seo/esolve-seo-details.interface';\r\n\r\nexport class EsolveCategoryTreeItem implements EsolveSeoDetails {\r\n public id = '';\r\n public seo_details: EsolveSeoInfo;\r\n public total_stock?: number;\r\n public children?: EsolveCategoryTreeItem[];\r\n\r\n private image_path = '';\r\n\r\n public get small_image_src(): string {\r\n return this.getImagePath('small');\r\n }\r\n\r\n public get thumbnail_image_src(): string {\r\n return this.getImagePath('thumb');\r\n }\r\n\r\n public get tiny_image_src(): string {\r\n return this.getImagePath('tiny');\r\n }\r\n\r\n constructor(\r\n public type: 'category' | 'subcategory',\r\n public esolve_id: string | number,\r\n public parent_id: string,\r\n public description: string,\r\n public sef_description: string,\r\n public short_description: string,\r\n public sort_priority: number,\r\n public active: boolean,\r\n public display_only: boolean,\r\n private image_name: string,\r\n seo_title: string,\r\n seo_keywords: string,\r\n seo_description: string,\r\n children?: EsolveCategoryTreeItem[],\r\n ) {\r\n if (this.type === 'category') {\r\n this.id = `<<CAT>>${this.esolve_id}`;\r\n\r\n if (children != null) {\r\n this.children = children;\r\n }\r\n\r\n this.image_path = '/images/categories/';\r\n } else {\r\n this.id = `<<SUB>>${this.esolve_id}`;\r\n this.image_path = '/images/subcategories/';\r\n }\r\n\r\n if (seo_title.trim() === '') {\r\n seo_title = this.description;\r\n }\r\n\r\n this.seo_details = new EsolveSeoInfo(seo_title, seo_description, seo_keywords);\r\n }\r\n\r\n public getImagePath(image_size: 'small' | 'thumb' | 'tiny'): string {\r\n if (this.image_name !== '') {\r\n return `${this.image_path}${image_size}/${this.image_name}`;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveCategoryRecord } from './esolve-category-record.interface';\r\nimport { EsolveSubcategoryRecord } from './esolve-subcategory-record.interface';\r\nimport { EsolveCategoryTreeItem } from './esolve-category-tree-item.model';\r\nimport { EsolveCategoryTreeItemRecord } from './esolve-category-tree-item-record.interface';\r\nimport { EsolveCategoryTreeItemOptions } from './esolve-category-tree-item-options.interface';\r\nimport { EsolveCategoryIdentifier } from './esolve-category-identifier.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveCategoryTreeService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n /**\r\n * Retrieves the category tree from eSolve instance and coverts it to the correct format.\r\n */\r\n public getCategoryTree(): Observable<EsolveCategoryTreeItem[]> {\r\n return this.http\r\n .get<EsolveGetResponse<(EsolveCategoryRecord | EsolveSubcategoryRecord)[]>>(\r\n `${this.config.api_url}/get-tree.php`,\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processTree(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve the special tree structure for a specific special from the eSolve\r\n * instance and converts it into the correct format\r\n *\r\n * @param special_id Id of to special to get tree for\r\n *\r\n * @returns Observable containing special tree data\r\n */\r\n public getSpecialTree(\r\n special_id: number,\r\n ): Observable<EsolveCategoryTreeItem[]>{\r\n let params = new HttpParams();\r\n\r\n params = params.set('special_id', special_id);\r\n\r\n return this.http\r\n .get<EsolveGetResponse<(EsolveCategoryRecord | EsolveSubcategoryRecord)[]>>(\r\n `${this.config.api_url}/get-special-tree.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processTree(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve the details of a category tree item from the eSolve instance and\r\n * converts it to the correct format.\r\n *\r\n * @param options Filter options\r\n */\r\n public getCategoryTreeItem(\r\n options: EsolveCategoryTreeItemOptions,\r\n ): Observable<EsolveCategoryTreeItem> {\r\n let type!: 'category' | 'subcategory';\r\n let esolve_id!: number | string;\r\n let sef_description;\r\n\r\n if (options.id) {\r\n const categoryIdentifier = this.processID(options.id);\r\n\r\n if (categoryIdentifier) {\r\n type = categoryIdentifier.type;\r\n esolve_id = categoryIdentifier.esolve_id;\r\n }\r\n } else if (options.type) {\r\n type = options.type;\r\n\r\n if (options.esolve_id) {\r\n esolve_id = options.esolve_id;\r\n } else if (options.sef_description) {\r\n sef_description = options.sef_description;\r\n }\r\n }\r\n\r\n if (type && (esolve_id || sef_description)) {\r\n let params = new HttpParams();\r\n\r\n params = params.set('type', type);\r\n\r\n if (esolve_id) {\r\n params = params.set('id', esolve_id);\r\n }\r\n\r\n if (sef_description) {\r\n params = params.set('sef_description', sef_description);\r\n }\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveCategoryTreeItemRecord[]>>(\r\n `${this.config.api_url}/get-tree-item.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n return this.processTreeItem(response.records[0]);\r\n }),\r\n );\r\n }\r\n\r\n return throwError(() => 'Invalid options');\r\n }\r\n\r\n /**\r\n * Processes the eSolve tree records and converts them into the correct format.\r\n *\r\n * @param tree_records Records to process\r\n */\r\n private processTree(\r\n tree_records: (EsolveCategoryRecord | EsolveSubcategoryRecord)[],\r\n ): EsolveCategoryTreeItem[] {\r\n const tree_items: EsolveCategoryTreeItem[] = [];\r\n\r\n if (tree_records) {\r\n for (const tree_record of tree_records) {\r\n let esolve_id: string | number = '';\r\n let parent_id = '';\r\n let children: EsolveCategoryTreeItem[] = [];\r\n\r\n if (tree_record.type === 'category') {\r\n children = this.processTree(tree_record.children);\r\n esolve_id = tree_record.menu_id;\r\n parent_id = tree_record.owner_menu_id;\r\n } else {\r\n esolve_id = tree_record.id;\r\n parent_id = tree_record.menu_id;\r\n }\r\n\r\n tree_items.push(new EsolveCategoryTreeItem(\r\n tree_record.type,\r\n esolve_id,\r\n parent_id,\r\n tree_record.description,\r\n tree_record.sef_description,\r\n tree_record.seo_description,\r\n tree_record.sort_priority,\r\n tree_record.active,\r\n tree_record.display_only,\r\n tree_record.image,\r\n tree_record.seo_page_title,\r\n tree_record.seo_keywords,\r\n tree_record.short_description,\r\n children,\r\n ));\r\n }\r\n }\r\n\r\n return tree_items;\r\n }\r\n\r\n private processTreeItem(record: EsolveCategoryTreeItemRecord): EsolveCategoryTreeItem {\r\n return new EsolveCategoryTreeItem(\r\n record.type,\r\n record.id,\r\n record.parent_id,\r\n record.description,\r\n record.sef_description,\r\n record.short_description,\r\n record.sort_priority,\r\n record.active,\r\n record.display_only,\r\n record.image,\r\n record.seo_page_title,\r\n record.seo_keywords,\r\n record.seo_description,\r\n );\r\n }\r\n\r\n private processID(id: string): EsolveCategoryIdentifier | null {\r\n let type: 'category' | 'subcategory';\r\n let esolve_id: number | string;\r\n\r\n const type_code_regex = /^\\<\\<(CAT|SUB)\\>\\>/g;\r\n const match_results = id.match(type_code_regex);\r\n\r\n if (match_results) {\r\n const type_code = match_results[0];\r\n\r\n type = (type_code === '<<CAT>>' ? 'category' : 'subcategory');\r\n esolve_id = id.replace(type_code_regex, '');\r\n\r\n return {\r\n type,\r\n esolve_id,\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import { EsolveSeoInfo } from '../shared/seo/esolve-seo-info.model';\r\nimport { EsolveSeoDetails } from '../shared/seo/esolve-seo-details.interface';\r\n\r\nimport { EsolveManufacturerRecord } from './esolve-manufacturer-record.interface';\r\nimport { EsolveManufacturerImageSize } from './esolve-manufacturer-image-size.type';\r\n\r\nexport class EsolveManufacturer implements EsolveSeoDetails {\r\n public id: number = 0;\r\n public manufacturer: string = '';\r\n public sef_manufacturer: string = '';\r\n public title: string = '';\r\n public article: string = '';\r\n public sort_priority: number = 0;\r\n public is_active: boolean = false;\r\n public featured: boolean = false;\r\n public image_name: string = '';\r\n public seo_details: EsolveSeoInfo;\r\n\r\n public get original_image_src(): string {\r\n return this.getImagePath('original');\r\n }\r\n\r\n public get small_image_src(): string {\r\n return this.getImagePath('small');\r\n }\r\n\r\n public get thumbnail_image_src(): string {\r\n return this.getImagePath('thumb');\r\n }\r\n\r\n public get tiny_image_src(): string {\r\n return this.getImagePath('tiny');\r\n }\r\n\r\n constructor(record?: Partial<EsolveManufacturerRecord>) {\r\n let seo_title: string = '';\r\n let seo_keywords: string = '';\r\n let seo_description: string = '';\r\n\r\n if (record) {\r\n this.id = +(record.id ?? 0);\r\n this.manufacturer = record.manufacturer ?? '';\r\n this.sef_manufacturer = record.sef_manufacturer ?? '';\r\n this.title = record.title ?? '';\r\n this.article = record.article ?? '';\r\n this.sort_priority = +(record.sort_priority ?? 0);\r\n this.image_name = record.image_name ?? '';\r\n\r\n if (record.is_active) {\r\n this.is_active = !!+record.is_active;\r\n }\r\n\r\n if (record.featured) {\r\n this.featured = !!+record.featured;\r\n }\r\n }\r\n\r\n if (this.title.trim() === '') {\r\n this.title = this.manufacturer;\r\n }\r\n\r\n if (seo_title.trim() === '') {\r\n seo_title = this.title;\r\n }\r\n\r\n this.seo_details = new EsolveSeoInfo(\r\n seo_title,\r\n seo_description,\r\n seo_keywords,\r\n );\r\n }\r\n\r\n public getImagePath(image_size: EsolveManufacturerImageSize): string {\r\n if (this.image_name !== '') {\r\n return `/images/manufacturers/${image_size}/${this.image_name}`;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\nimport { Observable, of } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveManufacturer } from './esolve-manufacturer.model';\r\nimport { EsolveManufacturerOptions } from './esolve-manufacturer-options.interface';\r\nimport { EsolveManufacturerRecord } from './esolve-manufacturer-record.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveManufacturersService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n public getManufacturer(id: number): Observable<EsolveManufacturer> {\r\n const params = new HttpParams({\r\n fromObject: { manufacturers_id: id },\r\n });\r\n\r\n return this.getManufacturerSingle(params);\r\n }\r\n\r\n public getManufacturerFromSEF(sef_manufacturer: string): Observable<EsolveManufacturer> {\r\n const params = new HttpParams({\r\n fromObject: { sef_manufacturer },\r\n });\r\n\r\n return this.getManufacturerSingle(params);\r\n }\r\n\r\n public getManufacturers(options?: EsolveManufacturerOptions): Observable<EsolveManufacturer[]> {\r\n let params = new HttpParams();\r\n\r\n if (options?.featured_only) {\r\n params = params.set('featured_only', options.featured_only);\r\n }\r\n\r\n return this.getManufacturerRecords(params).pipe(\r\n map((records) => {\r\n const manufacturers: EsolveManufacturer[] = [];\r\n\r\n for (const record of records) {\r\n manufacturers.push(this.processManufacturer(record));\r\n }\r\n\r\n return manufacturers;\r\n }),\r\n catchError(() => {\r\n return of<EsolveManufacturer[]>([]);\r\n }),\r\n );\r\n }\r\n\r\n private getManufacturerSingle(params: HttpParams): Observable<EsolveManufacturer> {\r\n return this.getManufacturerRecords(params).pipe(\r\n map((records) => {\r\n const record = records[0];\r\n\r\n return this.processManufacturer(record);\r\n }),\r\n );\r\n }\r\n\r\n private getManufacturerRecords(\r\n params?: HttpParams,\r\n ): Observable<EsolveManufacturerRecord[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveManufacturerRecord[]>>(\r\n `${this.config.api_url}/get-manufacturers.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n return response.records;\r\n }),\r\n );\r\n }\r\n\r\n private processManufacturer(record: EsolveManufacturerRecord): EsolveManufacturer {\r\n return new EsolveManufacturer(record);\r\n }\r\n}\r\n","// Types\r\nexport * from './esolve-manufacturer-image-size.type';\r\n// Interfaces\r\nexport * from './esolve-manufacturer-record.interface';\r\nexport * from './esolve-manufacturer-options.interface';\r\n// Classes\r\nexport * from './esolve-manufacturer.model';\r\n// Service\r\nexport * from './esolve-manufacturers.service';\r\n","import { EsolveSeoInfo } from '../shared/seo/esolve-seo-info.model';\r\nimport { EsolveSeoDetails } from '../shared/seo/esolve-seo-details.interface';\r\n\r\nimport { EsolveRangeRecord } from './esolve-range-record.interface';\r\n\r\nexport class EsolveRange implements EsolveSeoDetails {\r\n public id: number = 0;\r\n public range: string = '';\r\n public sef_range: string = '';\r\n public manufacturers_id: number = 0;\r\n public title: string = '';\r\n public article: string = '';\r\n public is_active: boolean = false;\r\n public featured: boolean = false;\r\n public sort_priority: number = 0;\r\n public image_name: string = '';\r\n public seo_details: EsolveSeoInfo;\r\n\r\n public get image_src(): string {\r\n return this.getImagePath();\r\n }\r\n\r\n constructor(record?: Partial<EsolveRangeRecord>) {\r\n let seo_title: string = '';\r\n let seo_keywords: string = '';\r\n let seo_description: string = '';\r\n\r\n if (record) {\r\n this.id = +(record.id ?? 0);\r\n this.range = record.range ?? '';\r\n this.sef_range = record.sef_range ?? '';\r\n this.manufacturers_id = +(record.manufacturers_id ?? 0);\r\n this.title = record.title ?? '';\r\n this.article = record.article ?? '';\r\n this.sort_priority = +(record.sort_priority ?? 0);\r\n this.image_name = record.image_name ?? '';\r\n\r\n if (record.is_active) {\r\n this.is_active = !!+record.is_active;\r\n }\r\n\r\n if (record.featured) {\r\n this.featured = !!+record.featured;\r\n }\r\n\r\n seo_title = record.seo_page_title ?? '';\r\n seo_keywords = record.seo_keywords ?? '';\r\n seo_description = record.seo_description ?? '';\r\n }\r\n\r\n if (this.title.trim() === '') {\r\n this.title = this.range;\r\n }\r\n\r\n if (seo_title.trim() === '') {\r\n seo_title = this.title;\r\n }\r\n\r\n this.seo_details = new EsolveSeoInfo(\r\n seo_title,\r\n seo_description,\r\n seo_keywords,\r\n );\r\n }\r\n\r\n public getImagePath(): string {\r\n if (this.image_name !== '') {\r\n return `/images/ranges/${this.image_name}`;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\nimport { Observable, of } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveRange } from './esolve-range.model';\r\nimport { EsolveRangeOptions } from './esolve-range-options.interface';\r\nimport { EsolveRangeRecord } from './esolve-range-record.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveRangesService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n public getRange(id: number): Observable<EsolveRange> {\r\n const params = new HttpParams({\r\n fromObject: { ranges_id: id },\r\n });\r\n\r\n return this.getRangeSingle(params);\r\n }\r\n\r\n public getRangeFromSEF(sef_range: string): Observable<EsolveRange> {\r\n const params = new HttpParams({\r\n fromObject: { sef_range },\r\n });\r\n\r\n return this.getRangeSingle(params);\r\n }\r\n\r\n public getRanges(options?: EsolveRangeOptions): Observable<EsolveRange[]> {\r\n let params = new HttpParams();\r\n\r\n if (options?.featured_only) {\r\n params = params.set('featured_only', options.featured_only);\r\n }\r\n\r\n if (options?.manufacturers_id) {\r\n params = params.set('manufacturers_id', options.manufacturers_id);\r\n }\r\n\r\n return this.getRangeRecords(params).pipe(\r\n map((records) => {\r\n const ranges: EsolveRange[] = [];\r\n\r\n for (const record of records) {\r\n ranges.push(this.processRange(record));\r\n }\r\n\r\n return ranges;\r\n }),\r\n catchError(() => {\r\n return of<EsolveRange[]>([]);\r\n }),\r\n );\r\n }\r\n\r\n private getRangeSingle(params: HttpParams): Observable<EsolveRange> {\r\n return this.getRangeRecords(params).pipe(\r\n map((records) => {\r\n const record = records[0];\r\n\r\n return this.processRange(record);\r\n }),\r\n );\r\n }\r\n\r\n private getRangeRecords(\r\n params?: HttpParams,\r\n ): Observable<EsolveRangeRecord[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveRangeRecord[]>>(\r\n `${this.config.api_url}/get-ranges.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n return response.records;\r\n }),\r\n );\r\n }\r\n\r\n private processRange(record: EsolveRangeRecord): EsolveRange {\r\n return new EsolveRange(record);\r\n }\r\n}\r\n","import { EsolveTagRecord } from './esolve-tag-record.interface';\r\n\r\nexport class EsolveTag {\r\n public id: number = 0;\r\n public phrase: string = '';\r\n public weight: number = 0;\r\n public description: string = '';\r\n public image_name: string = '';\r\n\r\n /**\r\n * @deprecated To be removed in the future. Use `EsolveTag.phrase` instead\r\n */\r\n public get tag_phrase(): string {\r\n return this.phrase;\r\n }\r\n\r\n /**\r\n * @deprecated To be removed in the future. Use `EsolveTag.weight` instead\r\n */\r\n public get tag_weight(): number {\r\n return this.weight;\r\n }\r\n\r\n constructor(record?: Partial<EsolveTagRecord>) {\r\n if (record) {\r\n this.id = +(record.id ?? 0);\r\n this.phrase = record.tag_phrase ?? '';\r\n this.weight = +(record.tag_weight ?? 0);\r\n this.description = record.description ?? '';\r\n this.image_name = record.image_name ?? '';\r\n }\r\n }\r\n\r\n public getImagePath(): string {\r\n if (this.image_name !== '') {\r\n return `/images/tags/${this.image_name}`;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveTag } from './esolve-tag.model';\r\nimport { EsolveTagRecord } from './esolve-tag-record.interface';\r\nimport { EsolveTagOptions } from './esolve-tag-options.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveTagsService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n /**\r\n * Retrieves active topics from the list of topic ID's. Note that inactive or expired\r\n * topics will not be retrieved.\r\n *\r\n * @param options Tag filters\r\n */\r\n public getTags(options?: EsolveTagOptions): Observable<EsolveTag[]> {\r\n const params = this.parseOptions(options);\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveTagRecord[]>>(\r\n `${this.config.api_url}/get-tags.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processTags(response.records);\r\n }),\r\n );\r\n }\r\n\r\n private parseOptions(options?: EsolveTagOptions) {\r\n let params = new HttpParams();\r\n\r\n if (options) {\r\n if (options.tags_id) {\r\n if (Array.isArray(options.tags_id)) {\r\n const tag_list = options.tags_id;\r\n\r\n if (tag_list.length > 0) {\r\n params = params.append('tags_id', tag_list.join(','));\r\n }\r\n } else {\r\n params = params.append('tags_id', options.tags_id);\r\n }\r\n } else {\r\n if (options.phrase && options.phrase !== '') {\r\n params = params.append('phrase', options.phrase);\r\n\r\n const phrase_match_mode = options.phrase_match_mode;\r\n\r\n if (phrase_match_mode) {\r\n params = params.append('phrase_match_mode', phrase_match_mode);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return params;\r\n }\r\n\r\n private processTags(records: EsolveTagRecord[]): EsolveTag[] {\r\n const tags: EsolveTag[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n const tag = new EsolveTag(record);\r\n\r\n tags.push(tag);\r\n }\r\n }\r\n\r\n return tags;\r\n }\r\n}\r\n","// Types\r\nexport * from './esolve-tag-phrase-match-mode.type';\r\n// Interfaces\r\nexport * from './esolve-tag-record.interface';\r\nexport * from './esolve-tag-options.interface';\r\n// Classes\r\nexport * from './esolve-tag.model';\r\n// Service\r\nexport * from './esolve-tags.service';\r\n","export class EsolveTopic {\r\n public id: number = 0;\r\n public name: string = '';\r\n public short_description: string = '';\r\n public sort_priority: number = 0;\r\n\r\n constructor(record?: Partial<EsolveTopic>) {\r\n if (record) {\r\n this.id = +(record.id ?? 0);\r\n this.name = record.name ?? '';\r\n this.short_description = record.short_description ?? '';\r\n this.sort_priority = +(record.sort_priority ?? 0);\r\n }\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\nimport { EsolveTopic } from './esolve-topic.model';\r\nimport { EsolveTopicRecord } from './esolve-topic-record.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveTopicService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n /**\r\n * Retrieves active topics from the list of topic ID's. Note that inactive or expired\r\n * topics will not be retrieved.\r\n *\r\n * @param topic_id_list List of topic ID's that need to be retrieved\r\n */\r\n public getTopics(topic_id_list: readonly number[] = []): Observable<EsolveTopic[]> {\r\n let params = new HttpParams();\r\n\r\n if (topic_id_list.length > 0) {\r\n params = params.append('topic_id', topic_id_list.join(','));\r\n }\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveTopicRecord[]>>(\r\n `${this.config.api_url}/get-topics.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processTopics(response.records);\r\n }),\r\n );\r\n }\r\n\r\n private processTopics(records: EsolveTopicRecord[]): EsolveTopic[] {\r\n const topics: EsolveTopic[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n const topic = new EsolveTopic(record);\r\n\r\n topics.push(topic);\r\n }\r\n }\r\n\r\n return topics;\r\n }\r\n}\r\n","import { EsolveCategoryTreeItem } from '../../category-tree';\r\nimport { EsolveManufacturer } from '../../manufacturers';\r\nimport { EsolveRange } from '../../ranges';\r\nimport { EsolveTag } from '../../tags';\r\nimport { EsolveTopic } from '../../topics';\r\n\r\nimport { EsolveAssetType } from './esolve-asset-type.type';\r\nimport { EsolveAssetRecord } from './esolve-asset-record.interface';\r\n\r\nexport class EsolveAsset {\r\n public id: number = 0;\r\n public src: string = '';\r\n public name: string = '';\r\n public type?: EsolveAssetType;\r\n public description: string = '';\r\n public document_number: string = '';\r\n public document_type: string = '';\r\n public area_of_application: string = '';\r\n public asset_category: string = '';\r\n public asset_sub_category: string = '';\r\n public sort_priority: number = 0;\r\n public created?: string;\r\n public category?: EsolveCategoryTreeItem;\r\n public subcategory?: EsolveCategoryTreeItem;\r\n public manufacturer?: EsolveManufacturer;\r\n public range?: EsolveRange;\r\n public topics: EsolveTopic[] = [];\r\n public tags: EsolveTag[] = [];\r\n\r\n private image_name: string = '';\r\n\r\n /**\r\n * Shortcut to `getImagePath()`\r\n */\r\n public get image_src(): string {\r\n return this.getImagePath();\r\n }\r\n\r\n constructor(record: EsolveAssetRecord) {\r\n this.id = +record.id;\r\n this.src = record.src;\r\n this.name = record.name;\r\n this.type = record.type;\r\n this.description = record.description;\r\n\r\n this.document_number = record.document_number ?? '';\r\n this.document_type = record.document_type ?? '';\r\n this.area_of_application = record.area_of_application ?? '';\r\n this.asset_category = record.asset_category ?? '';\r\n this.asset_sub_category = record.asset_sub_category ?? '';\r\n this.sort_priority = +(record.sort_priority ?? '');\r\n this.image_name = record.image_name ?? '';\r\n\r\n if (record.created) {\r\n this.created = record.created;\r\n }\r\n\r\n if (record.category) {\r\n this.category = new EsolveCategoryTreeItem(\r\n record.category.type,\r\n record.category.id,\r\n record.category.parent_id,\r\n record.category.description,\r\n record.category.sef_description,\r\n record.category.short_description,\r\n record.category.sort_priority,\r\n record.category.active,\r\n record.category.display_only,\r\n record.category.image,\r\n record.category.seo_page_title,\r\n record.category.seo_keywords,\r\n record.category.seo_description,\r\n );\r\n }\r\n\r\n if (record.subcategory) {\r\n this.subcategory = new EsolveCategoryTreeItem(\r\n record.subcategory.type,\r\n record.subcategory.id,\r\n record.subcategory.parent_id,\r\n record.subcategory.description,\r\n record.subcategory.sef_description,\r\n record.subcategory.short_description,\r\n record.subcategory.sort_priority,\r\n record.subcategory.active,\r\n record.subcategory.display_only,\r\n record.subcategory.image,\r\n record.subcategory.seo_page_title,\r\n record.subcategory.seo_keywords,\r\n record.subcategory.seo_description,\r\n );\r\n }\r\n\r\n\r\n if (record.manufacturer) {\r\n this.manufacturer = new EsolveManufacturer(record.manufacturer);\r\n }\r\n\r\n if (record.range) {\r\n this.range = new EsolveRange(record.range);\r\n }\r\n\r\n if (record.topics && record.topics.length > 0) {\r\n for (const topic of record.topics) {\r\n this.topics.push(new EsolveTopic(topic));\r\n }\r\n }\r\n\r\n if (record.tags && record.tags.length > 0) {\r\n for (const tag of record.tags) {\r\n this.tags.push(new EsolveTag(tag));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Retrieve image path\r\n *\r\n * @returns Image path on CDN, else empty string if no image exists\r\n */\r\n public getImagePath(): string {\r\n if (this.image_name !== '') {\r\n return `/images/documents/${this.image_name}`;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { ESOLVE_CONNECT_CONFIG } from '../../esolve-connect-config.constant';\r\nimport { EsolveConnectConfig } from '../../esolve-connect.config';\r\nimport { EsolveGetResponse } from '../response';\r\nimport { EsolveList } from '../esolve-list.model';\r\n\r\nimport { EsolveAssetOptions } from './esolve-asset-options.interface';\r\nimport { EsolveAssetRecord } from './esolve-asset-record.interface';\r\nimport { EsolveAsset } from './esolve-asset.model';\r\nimport { EsolveAssetList } from './esolve-asset-list.type';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveAssetsService {\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n public getAsset(id: number): Observable<EsolveAsset> {\r\n const params = new HttpParams({ fromObject: { assets_id: id }});\r\n\r\n return this.getAssetRecords(params).pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const record = response.records[0];\r\n\r\n return this.processAsset(record);\r\n }),\r\n );\r\n }\r\n\r\n public getAssets(\r\n options?: EsolveAssetOptions,\r\n ): Observable<EsolveAssetList> {\r\n const params = this.parseOptions(options);\r\n\r\n return this.getAssetRecords(params).pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const assets: EsolveAsset[] = [];\r\n\r\n for (const record of response.records) {\r\n assets.push(this.processAsset(record));\r\n }\r\n\r\n const page = options?.page ?? 0;\r\n const rows = options?.rows ?? 0;\r\n const total = +response.additional_data.total_records;\r\n\r\n return new EsolveList(assets, page, rows, total);\r\n }),\r\n );\r\n }\r\n\r\n private processAsset(record: EsolveAssetRecord): EsolveAsset {\r\n return new EsolveAsset(record);\r\n }\r\n\r\n private getAssetRecords(\r\n params: HttpParams,\r\n ): Observable<EsolveGetResponse<EsolveAssetRecord[]>> {\r\n return this.http.get<EsolveGetResponse<EsolveAssetRecord[]>>(\r\n `${this.config.api_url}/get-assets.php`,\r\n { params },\r\n );\r\n }\r\n\r\n private parseOptions(options?: EsolveAssetOptions): HttpParams {\r\n let params = new HttpParams();\r\n\r\n if (!options) {\r\n return params;\r\n }\r\n\r\n if (options.page) {\r\n params = params.set('page', options.page);\r\n }\r\n\r\n if (options.rows) {\r\n params = params.set('rows', options.rows);\r\n }\r\n\r\n if (options.asset_type) {\r\n params = params.set('asset_type', options.asset_type);\r\n }\r\n\r\n if (options.category_id) {\r\n params = params.set('category_id', options.category_id);\r\n }\r\n\r\n if (options.subcategory_id) {\r\n params = params.set('subcategory_id', options.subcategory_id);\r\n }\r\n\r\n if (options.manufacturers_id) {\r\n params = params.set('manufacturers_id', options.manufacturers_id);\r\n }\r\n\r\n if (options.ranges_id) {\r\n params = params.set('ranges_id', options.ranges_id);\r\n }\r\n\r\n if (options.asset_category) {\r\n params = params.set('asset_category', options.asset_category);\r\n }\r\n\r\n if (options.asset_sub_category) {\r\n params = params.set('asset_sub_category', options.asset_sub_category);\r\n }\r\n\r\n if (options.document_number) {\r\n params = params.set('document_number', options.document_number);\r\n }\r\n\r\n if (options.document_type) {\r\n params = params.set('document_type', options.document_type);\r\n }\r\n\r\n if (options.area_of_application) {\r\n params = params.set('area_of_application', options.area_of_application);\r\n }\r\n\r\n return params;\r\n }\r\n}\r\n","// Types\r\nexport * from './esolve-asset-list.type';\r\nexport * from './esolve-asset-type.type';\r\n// Interfaces\r\nexport * from './esolve-linked-asset-record.interface';\r\nexport * from './esolve-asset-options.interface';\r\nexport * from './esolve-asset-record.interface';\r\n// Classes\r\nexport * from './esolve-linked-asset.model';\r\nexport * from './esolve-asset.model';\r\n// Service\r\nexport * from './esolve-assets.service';\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport {\r\n HttpClient,\r\n HttpParams,\r\n HttpErrorResponse,\r\n HttpHeaders,\r\n} from '@angular/common/http';\r\n\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { tap, catchError, map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveCookieService } from '../shared/cookie/esolve-cookie.service';\r\nimport { EsolveErrorHandlerService } from '../shared/errors/esolve-error-handler.service';\r\nimport { EsolveSetResponse } from '../shared/response';\r\n\r\nimport { EsolveSession } from '../session/esolve-session.model';\r\nimport { EsolveSessionService } from '../session/esolve-session.service';\r\n\r\nimport { EsolveLoginPostResponseItem } from './esolve-login-post-response-item.interface';\r\nimport { EsolveAuthGetResponse } from './esolve-auth-get-response.interface';\r\nimport { EsolveAuthCheckResponse } from './esolve-auth-check-response.interface';\r\nimport { EsolveAuthResult } from './esolve-auth-result.type';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveAuthService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n private session: EsolveSessionService,\r\n private errorHandler: EsolveErrorHandlerService,\r\n private cookieService: EsolveCookieService,\r\n ) { }\r\n\r\n public getAccessToken(\r\n email: string,\r\n password: string,\r\n anonymous: boolean = false,\r\n ): Observable<EsolveAuthGetResponse> {\r\n let params = new HttpParams();\r\n\r\n if (anonymous) {\r\n params = params.set('anonymous', true);\r\n }\r\n\r\n if (email !== '') {\r\n params = params.set('email', email);\r\n }\r\n\r\n if (password !== '') {\r\n params = params.set('password', password);\r\n }\r\n\r\n return this.http\r\n .get<EsolveAuthGetResponse>(\r\n `${this.config.api_url}/get-access-token.php`,\r\n {\r\n params,\r\n headers: new HttpHeaders({\r\n 'Accept-Language': '*',\r\n }),\r\n },\r\n )\r\n .pipe(\r\n tap((responseData) => {\r\n if (\r\n (responseData.type === 'error') ||\r\n (responseData.type === 'exception')\r\n ) {\r\n throw responseData;\r\n }\r\n }),\r\n catchError(this.handleError),\r\n tap((responseData) => {\r\n this.handleAuthentication(responseData.additional_data);\r\n }),\r\n );\r\n }\r\n\r\n public autoLogin(): void {\r\n this.session.restore(\r\n this.handleExpiration(),\r\n () => {\r\n this.getAccessToken('', '', true).toPromise().then(\r\n () => { },\r\n (error) => {\r\n console.error(error);\r\n },\r\n );\r\n },\r\n );\r\n }\r\n\r\n public login(email: string, password: string): Observable<number> {\r\n const body = {\r\n login: {\r\n email,\r\n password,\r\n },\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveLoginPostResponseItem>>(\r\n `${this.config.api_url}/set-login.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.responses === undefined) ||\r\n (response.responses.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const login_response = response.responses[0];\r\n\r\n if (\r\n (login_response.status.state !== 'success') &&\r\n (login_response.status.state !== 'warning')\r\n ) {\r\n throw login_response;\r\n }\r\n\r\n for (const response_log of login_response.log) {\r\n if (\r\n (response_log.type === 'success') &&\r\n (response_log.message_code === 'login_success')\r\n ) {\r\n const session_data = login_response.session_data;\r\n const user_id = +login_response.esolve_id;\r\n const location_id = +session_data.location_id;\r\n\r\n this.session.handleUpdateSession({\r\n user_id: user_id,\r\n location_id: location_id,\r\n });\r\n\r\n return user_id;\r\n }\r\n }\r\n\r\n throw login_response;\r\n }),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-login', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n public async logout(): Promise<EsolveAuthGetResponse> {\r\n this.session.clearTimer();\r\n this.cookieService.delete('_ws_id');\r\n\r\n const response = await this.getAccessToken('', '', true).toPromise();\r\n\r\n if (response) {\r\n return response;\r\n }\r\n\r\n throw new Error('Invalid response');\r\n }\r\n\r\n private checkAccessToken(session?: EsolveSession): Observable<EsolveAuthResult> {\r\n session = session || this.session.currentSession;\r\n\r\n const token = session?.key ?? '';\r\n\r\n return this.http\r\n .get<EsolveAuthCheckResponse>(\r\n `${this.config.api_url}/get-access-token.php`,\r\n {\r\n params: { key: token },\r\n headers: new HttpHeaders({\r\n 'Accept-Language': '*',\r\n }),\r\n },\r\n )\r\n .pipe(\r\n map((responseData) => {\r\n if (\r\n (responseData.type === 'error') ||\r\n (responseData.type === 'exception') ||\r\n (!responseData.additional_data.key_okay)\r\n ) {\r\n throw responseData;\r\n }\r\n\r\n const additional_data = responseData.additional_data;\r\n\r\n const result: EsolveAuthResult = {\r\n key: token,\r\n expires: additional_data.expires,\r\n expiry_time: additional_data.expiry_time,\r\n location_id: additional_data.location_id,\r\n user_id: additional_data.user_id,\r\n };\r\n\r\n return result;\r\n }),\r\n );\r\n }\r\n\r\n // Handlers\r\n private handleExpiration(): (session?: EsolveSession) => void {\r\n return (session?: EsolveSession) => {\r\n this.checkAccessToken(session).toPromise().then(\r\n (response) => {\r\n if (response) {\r\n this.handleAuthentication(response);\r\n }\r\n },\r\n () => {\r\n this.logout();\r\n },\r\n );\r\n };\r\n }\r\n\r\n private handleAuthentication(result: EsolveAuthResult): void {\r\n if (!result.key) {\r\n return;\r\n }\r\n\r\n this.session.handleSession(\r\n +result.user_id,\r\n +result.location_id,\r\n result.key,\r\n +result.expiry_time,\r\n +result.expires,\r\n this.handleExpiration(),\r\n );\r\n }\r\n\r\n private handleError(\r\n errorRes: EsolveAuthGetResponse | EsolveAuthCheckResponse,\r\n ): Observable<never> {\r\n const error = {\r\n message: 'An unknown error occurred',\r\n data: {},\r\n };\r\n\r\n if (\r\n (!errorRes.type) ||\r\n (!errorRes.service_type) ||\r\n (!errorRes.message)\r\n ) {\r\n return throwError(() => error);\r\n }\r\n\r\n if (errorRes.message.trim() !== '') {\r\n error.message = errorRes.message;\r\n }\r\n\r\n if (errorRes.additional_data) {\r\n error.data = errorRes.additional_data;\r\n }\r\n\r\n return throwError(() => error);\r\n }\r\n}\r\n","import { EsolveAddressType } from './esolve-address-type.type';\r\n\r\nexport class EsolveAddress {\r\n constructor(\r\n public id: number,\r\n public recipient: string,\r\n public address_type: EsolveAddressType,\r\n public pobox: string,\r\n public place_name: string,\r\n public street_number: string,\r\n public street: string,\r\n public suburb: string,\r\n public city: string,\r\n public province: string,\r\n public country: string,\r\n public postal_code: string,\r\n public latitude: number,\r\n public longitude: number,\r\n ) { }\r\n}\r\n","import { EsolveAddressResponse } from './esolve-address-response.interface';\r\nimport { EsolveGeocodeResult } from '../esolve-geocode-result.interface';\r\nimport { EsolveResponseResult } from '../../shared/response';\r\n\r\nexport class EsolveAddressResult extends EsolveResponseResult {\r\n public id: number;\r\n public address_validated: boolean;\r\n public geocode_status: string;\r\n public geocode_result: EsolveGeocodeResult | null;\r\n\r\n constructor(\r\n response: EsolveAddressResponse,\r\n ) {\r\n super(response);\r\n\r\n this.id = response.esolve_id;\r\n this.address_validated = response.address_validated;\r\n this.geocode_status = response.geocode_status;\r\n this.geocode_result = response.geocode_result;\r\n }\r\n}\r\n","import { EsolveUserAccountBusiness } from './esolve-user-account-business.model';\r\nimport { EsolveUserAccountContact } from './esolve-user-account-contact.model';\r\nimport { EsolveUserClientAccount } from './esolve-user-client-account.model';\r\n\r\nexport class EsolveUserAccount {\r\n public account_number?: string;\r\n public loyalty_number?: string;\r\n public business_details?: EsolveUserAccountBusiness;\r\n public contact_details?: EsolveUserAccountContact;\r\n public client_details?: EsolveUserClientAccount;\r\n\r\n constructor(\r\n public esolve_id: number,\r\n public email: string,\r\n public registration_type: string,\r\n public title: string,\r\n public first_name: string,\r\n public last_name: string,\r\n public initials: string,\r\n public gender: string,\r\n public identification_number: string,\r\n ) { }\r\n}\r\n","import {\r\n EsolvePostResponseItem,\r\n EsolveResponseResult,\r\n} from '../../shared/response';\r\n\r\nexport class EsolveUserAccountResult extends EsolveResponseResult {\r\n public id = 0;\r\n\r\n constructor(\r\n response: EsolvePostResponseItem,\r\n ) {\r\n super(response);\r\n\r\n this.id = +response.esolve_id;\r\n }\r\n}\r\n","export class EsolveUserAccountBusiness {\r\n constructor(\r\n public name: string,\r\n public vat_number: string,\r\n public description: string,\r\n public type: string,\r\n ) { }\r\n}\r\n","export class EsolveUserAccountContact {\r\n constructor(\r\n public tel_number?: string,\r\n public cell_number?: string,\r\n public fax_number?: string,\r\n ) { }\r\n}\r\n","export class EsolveUserClientAccount {\r\n constructor(\r\n public account?: string,\r\n public branch_code?: string,\r\n public account_group?: string,\r\n public pricing_group?: string,\r\n public price_list?: number,\r\n public loyalty_classification_id?: number,\r\n public company_name?: string,\r\n public client_contact_person?: string,\r\n public client_firstname?: string,\r\n public client_surname?: string,\r\n public client_email?: string,\r\n public client_contact_number?: string,\r\n public client_fax_number?: string,\r\n public client_cellphone_number?: string,\r\n public client_id_number?: string,\r\n public address_description?: string,\r\n public street?: string,\r\n public suburb?: string,\r\n public city?: string,\r\n public province?: string,\r\n public country?: string,\r\n public postal_code?: string,\r\n public postal_address?: string,\r\n public delivery_address?: string,\r\n public latitude?: number,\r\n public longitude?: number,\r\n public vat_number?: string,\r\n public credit_limit?: number,\r\n public pending_invoice_balance?: number,\r\n public external_account_balance?: number,\r\n public ageing?: string,\r\n public balance_last_updated?: string,\r\n public default_sellprice?: number,\r\n public client_classification?: string,\r\n public override_stock_listing_identifiers?: string,\r\n public requires_transaction_approval?: string,\r\n public is_active?: boolean,\r\n ) { }\r\n}\r\n","import { EsolveCartTotals } from '../../cart';\r\n\r\nexport class EsolveUserClientAccountBalances {\r\n constructor (\r\n public clients_id?: number,\r\n public account?: string,\r\n public cart_totals?: EsolveCartTotals,\r\n public credit_limit?: number,\r\n public external_account_balance?: number,\r\n public external_available_balance?: number,\r\n public new_external_available_balance?: number,\r\n public credit_limit_okay?: boolean,\r\n ) {}\r\n}\r\n","import { EsolveAddressType } from '../address';\r\n\r\nexport class EsolveTransactionAddress {\r\n constructor(\r\n public recipient: string,\r\n public address_type: EsolveAddressType,\r\n public address_description: string,\r\n public street_number: string,\r\n public street: string,\r\n public suburb: string,\r\n public city: string,\r\n public province: string,\r\n public country: string,\r\n public postal_code: string,\r\n public pobox: string,\r\n ) { }\r\n}\r\n","export class EsolveTransactionClient {\r\n constructor(\r\n public id: number,\r\n public account: string,\r\n public company_name: string,\r\n public branch_code: string,\r\n public email: string,\r\n public first_name: string,\r\n public last_name: string,\r\n public contact_number: string,\r\n ) { }\r\n}\r\n","import { EsolveTransactionItemPrice } from './esolve-transaction-item-price.model';\r\n\r\nexport class EsolveTransactionItem {\r\n constructor(\r\n public code: string,\r\n public name: string,\r\n public qty: number,\r\n public discount: number,\r\n public vat_rate: number,\r\n public price: EsolveTransactionItemPrice,\r\n public line_total: EsolveTransactionItemPrice,\r\n ) { }\r\n}\r\n","export class EsolveTransactionItemPrice {\r\n constructor(\r\n /**\r\n * Price without tax\r\n */\r\n public price: number,\r\n /**\r\n * Price with tax\r\n */\r\n public price_with_tax: number,\r\n /**\r\n * Price without tax and with discounts applied if applicable\r\n */\r\n public price_discounted: number,\r\n /**\r\n * Price with tax and with discounts applied if applicable\r\n */\r\n public price_with_tax_discounted: number,\r\n ) { }\r\n}\r\n","export class EsolveLocationAddress {\r\n constructor(\r\n public street: string,\r\n public suburb: string,\r\n public city: string,\r\n public province: string,\r\n public country: string,\r\n public postal_code: string,\r\n public latitude: number,\r\n public longitude: number,\r\n ) { }\r\n}\r\n","export class EsolveLocationContactInfo {\r\n constructor(\r\n public telnumber: string[],\r\n public cellnumber: string,\r\n public email: string,\r\n public fax: string,\r\n ) { }\r\n}\r\n","export class EsolveLocationGEO {\r\n constructor(\r\n public distance: number,\r\n public range: number,\r\n public target_description: string,\r\n ) { }\r\n}\r\n","export class EsolveLocationPOBoxAddress {\r\n constructor(\r\n public pobox: string,\r\n public city: string,\r\n public postal_code: string,\r\n ) { }\r\n}\r\n","export class EsolveLocationTradingDay {\r\n constructor(\r\n public open: string,\r\n public close: string,\r\n ) { }\r\n}\r\n","import { EsolveLocationTradingDay } from './esolve-location-trading-day.model';\r\n\r\nexport class EsolveLocationTradingTimes {\r\n constructor(\r\n public monday: EsolveLocationTradingDay,\r\n public tuesday: EsolveLocationTradingDay,\r\n public wednesday: EsolveLocationTradingDay,\r\n public thursday: EsolveLocationTradingDay,\r\n public friday: EsolveLocationTradingDay,\r\n public saturday: EsolveLocationTradingDay,\r\n public sunday: EsolveLocationTradingDay,\r\n public public_holiday: EsolveLocationTradingDay,\r\n public trading_hours_additional_info: string = '',\r\n ) { }\r\n}\r\n","import { EsolveLocationRecord } from '../interfaces/esolve-location-record.interface';\r\nimport { EsolveLocationAddress } from './esolve-location-address.model';\r\nimport { EsolveLocationContactInfo } from './esolve-location-contact-info.model';\r\nimport { EsolveLocationPOBoxAddress } from './esolve-location-pobox-address.model';\r\nimport { EsolveLocationTradingTimes } from './esolve-location-trading-times.model';\r\nimport { EsolveLocationTradingDay } from './esolve-location-trading-day.model';\r\nimport { EsolveLocationGEO } from './esolve-location-geo.model';\r\n\r\nexport class EsolveLocation {\r\n public id: number;\r\n public identifier: string;\r\n public description: string;\r\n public head_office: boolean;\r\n public default_location_for_payment_methods: boolean;\r\n public external_system_code: string;\r\n public erp_identifier: string;\r\n public userid: number;\r\n public importance: number;\r\n public active: boolean;\r\n public dispatches_stock: boolean;\r\n public include_on_enquiries: boolean;\r\n public include_on_store_locator: boolean;\r\n public website_url: string;\r\n\r\n public address: EsolveLocationAddress;\r\n public pobox_address: EsolveLocationPOBoxAddress;\r\n public contact_info: EsolveLocationContactInfo;\r\n public trading_times: EsolveLocationTradingTimes;\r\n public geo?: EsolveLocationGEO;\r\n\r\n constructor(record: EsolveLocationRecord) {\r\n this.id = +record.id;\r\n this.identifier = record.identifier;\r\n this.description = record.description;\r\n this.head_office = !!+record.head_office;\r\n this.erp_identifier = record.erp_identifier;\r\n this.external_system_code = record.external_system_code;\r\n this.default_location_for_payment_methods = !!+record.default_location_for_payment_methods;\r\n this.userid = +record.userid;\r\n this.importance = +record.importance;\r\n this.active = !!+record.is_active;\r\n this.dispatches_stock = !!+record.dispatches_stock;\r\n this.include_on_enquiries = !!+record.include_on_enquiries;\r\n this.include_on_store_locator = !!+record.include_on_store_locator;\r\n this.website_url = record.website_url;\r\n\r\n this.address = new EsolveLocationAddress(\r\n record.street,\r\n record.suburb,\r\n record.city,\r\n record.province,\r\n record.country,\r\n record.postal_code,\r\n +record.latitude,\r\n +record.longitude,\r\n );\r\n\r\n this.pobox_address = new EsolveLocationPOBoxAddress(\r\n record.pobox,\r\n record.pobox_city,\r\n record.pobox_postal_code,\r\n );\r\n\r\n const telnumbers = [];\r\n\r\n if (record.branch_telnumber.length > 0) {\r\n telnumbers.push(record.branch_telnumber);\r\n }\r\n\r\n if (record.branch_telnumber_2.length > 0) {\r\n telnumbers.push(record.branch_telnumber_2);\r\n }\r\n\r\n if (record.branch_telnumber_3.length > 0) {\r\n telnumbers.push(record.branch_telnumber_3);\r\n }\r\n\r\n this.contact_info = new EsolveLocationContactInfo(\r\n telnumbers,\r\n record.branch_cellnumber,\r\n record.branch_email,\r\n record.branch_fax,\r\n );\r\n\r\n const monday = new EsolveLocationTradingDay(\r\n record.monday_open_time,\r\n record.monday_close_time,\r\n );\r\n\r\n const tuesday = new EsolveLocationTradingDay(\r\n record.tuesday_open_time,\r\n record.tuesday_close_time,\r\n );\r\n\r\n const wednesday = new EsolveLocationTradingDay(\r\n record.wednesday_open_time,\r\n record.wednesday_close_time,\r\n );\r\n\r\n const thursday = new EsolveLocationTradingDay(\r\n record.thursday_open_time,\r\n record.thursday_close_time,\r\n );\r\n\r\n const friday = new EsolveLocationTradingDay(\r\n record.friday_open_time,\r\n record.friday_close_time,\r\n );\r\n\r\n const saturday = new EsolveLocationTradingDay(\r\n record.saturday_open_time,\r\n record.saturday_close_time,\r\n );\r\n\r\n const sunday = new EsolveLocationTradingDay(\r\n record.sunday_open_time,\r\n record.sunday_close_time,\r\n );\r\n\r\n const public_holiday = new EsolveLocationTradingDay(\r\n record.public_holiday_open_time,\r\n record.public_holiday_close_time,\r\n );\r\n\r\n this.trading_times = new EsolveLocationTradingTimes(\r\n monday,\r\n tuesday,\r\n wednesday,\r\n thursday,\r\n friday,\r\n saturday,\r\n sunday,\r\n public_holiday,\r\n record.trading_hours_additional_info,\r\n );\r\n\r\n this.geo = new EsolveLocationGEO(\r\n record.distance,\r\n record.range,\r\n record.target_description,\r\n );\r\n }\r\n}\r\n\r\n\r\n","// Classes\r\nexport * from './esolve-location-address.model';\r\nexport * from './esolve-location-contact-info.model';\r\nexport * from './esolve-location-geo.model';\r\nexport * from './esolve-location-pobox-address.model';\r\nexport * from './esolve-location-trading-day.model';\r\nexport * from './esolve-location-trading-times.model';\r\nexport * from './esolve-location.model';\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveLocation } from './classes/esolve-location.model';\r\nimport { EsolveLocationRecord } from './interfaces/esolve-location-record.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveLocationsService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n /**\r\n * Retrieves a list of stock locations\r\n *\r\n * @returns An `Observable` with an array of stock locations\r\n */\r\n public getStockLocations(): Observable<EsolveLocation[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveLocationRecord[]>>(\r\n `${this.config.api_url}/get-locations.php`,\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processStockLocations(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves a list of stock locations using the address_id as parameter or the latitude and longitude.\r\n * Set the addresses_id to 0 and the gps coordinates in order to retrieve the locations list when the address isn't\r\n * yet saved.\r\n *\r\n * @param addresses_id if supplied, the latitude and longitude on the address will be used.\r\n * @param latitude if supplied and address_id > 0, the value is ignored.\r\n * @param longitude if supplied and address_id > 0, the value is ignored.\r\n *\r\n * @returns An `Observable` with an array of stock locations\r\n */\r\n public getStockLocationsGeo(\r\n addresses_id: number = 0,\r\n latitude: number = 0,\r\n longitude: number = 0,\r\n ): Observable<EsolveLocation[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveLocationRecord[]>>(\r\n `${this.config.api_url}/get-locations-geo.php`,\r\n {\r\n params: {\r\n addresses_id,\r\n latitude,\r\n longitude,\r\n },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processStockLocations(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Processes the eSolve stock location records.\r\n *\r\n * @param records Records to process\r\n * @returns An array of processed stock location records\r\n */\r\n private processStockLocations(records: EsolveLocationRecord[]): EsolveLocation[] {\r\n const stock_locations: EsolveLocation[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n stock_locations.push(new EsolveLocation(record));\r\n }\r\n }\r\n\r\n return stock_locations;\r\n }\r\n}\r\n","import { EsolveLocation } from '../../locations';\r\n\r\nexport class EsolveTransactionLocation extends EsolveLocation { }\r\n","export class EsolveTransactionPaymentMethod {\r\n constructor(\r\n public id: number,\r\n public name: string,\r\n public description: string,\r\n public integration_type: string,\r\n public service_provider: string,\r\n ) { }\r\n}\r\n","export class EsolveTransactionShippingMethod {\r\n constructor(\r\n public id: number,\r\n public name: string,\r\n public delivery_category: string,\r\n public location: string,\r\n public description: string,\r\n public pricing: string,\r\n public client_to_collect: boolean,\r\n ) { }\r\n}\r\n","export class EsolveTransactionUser {\r\n constructor(\r\n public id: number,\r\n public email: string,\r\n public first_name: string,\r\n public last_name: string,\r\n public tel_number: string,\r\n public cell_number: string,\r\n ) { }\r\n}\r\n","import { EsolveTransactionAddress } from './esolve-transaction-address.model';\r\nimport { EsolveTransactionClient } from './esolve-transaction-client.model';\r\nimport { EsolveTransactionItem } from './esolve-transaction-item.model';\r\nimport { EsolveTransactionItemPrice } from './esolve-transaction-item-price.model';\r\nimport { EsolveTransactionItemRecord } from './esolve-transaction-item-record.interface';\r\nimport { EsolveTransactionLocation } from './esolve-transaction-location.model';\r\nimport { EsolveTransactionPaymentMethod } from './esolve-transaction-payment-method.model';\r\nimport { EsolveTransactionRecord } from './esolve-transaction-record.interface';\r\nimport { EsolveTransactionShippingMethod } from './esolve-transaction-shipping-method.model';\r\nimport { EsolveTransactionType } from './esolve-transaction-type.type';\r\nimport { EsolveTransactionUser } from './esolve-transaction-user.model';\r\n\r\nexport class EsolveTransaction {\r\n public id: number;\r\n public type: EsolveTransactionType;\r\n public status: string;\r\n public loyalty_number: string;\r\n public external_order_number: string;\r\n public external_invoice_number: string;\r\n\r\n // Dates\r\n public date: Date;\r\n public expected_date: Date;\r\n\r\n public client?: EsolveTransactionClient;\r\n public user?: EsolveTransactionUser;\r\n\r\n // Location\r\n public location?: EsolveTransactionLocation;\r\n\r\n // Totals\r\n public invoice_amount: number;\r\n public vat: number;\r\n public discount: number;\r\n public total: number;\r\n public shipping_total: number;\r\n public insurance_total: number;\r\n\r\n // Payment\r\n public payment_method?: EsolveTransactionPaymentMethod;\r\n public payment: number;\r\n public gateway_transaction_id: string;\r\n public payment_reference: string;\r\n public payment_description: string;\r\n\r\n // Shipping\r\n public shipping_method?: EsolveTransactionShippingMethod;\r\n\r\n // Address Details\r\n public address: EsolveTransactionAddress;\r\n\r\n // Transaction Items\r\n public items: EsolveTransactionItem[] = [];\r\n\r\n constructor(record: EsolveTransactionRecord) {\r\n this.id = +record.id;\r\n this.type = record.transaction_type;\r\n this.status = record.status;\r\n this.loyalty_number = record.loyaltynumber;\r\n this.external_order_number = record.external_order_number;\r\n this.external_invoice_number = record.external_invoice_number;\r\n\r\n this.date = new Date(+record.txdate_timestamp * 1000);\r\n this.expected_date = new Date(+record.expected_date_timestamp * 1000);\r\n\r\n this.invoice_amount = +record.invoice_amount;\r\n this.vat = +record.vat;\r\n this.discount = +record.discount;\r\n this.total = +record.total;\r\n this.shipping_total = +record.shipping_total;\r\n this.insurance_total = +record.insurance_total;\r\n\r\n this.payment = +record.payment;\r\n this.payment_reference = record.payment_reference;\r\n this.payment_description = record.payment_description;\r\n this.gateway_transaction_id = record.gateway_transaction_id;\r\n\r\n this.address = new EsolveTransactionAddress(\r\n record.recipient,\r\n record.address_type,\r\n record.address_description,\r\n record.street_number,\r\n record.street,\r\n record.suburb,\r\n record.city,\r\n record.province,\r\n record.country,\r\n record.postal_code,\r\n record.pobox,\r\n );\r\n\r\n if (record.user) {\r\n this.user = new EsolveTransactionUser(\r\n +record.user.id,\r\n record.user.email,\r\n record.user.firstname,\r\n record.user.surname,\r\n record.user.telnumber,\r\n record.user.cellnumber,\r\n );\r\n }\r\n\r\n if (record.client) {\r\n this.client = new EsolveTransactionClient(\r\n +record.client.id,\r\n record.client.account,\r\n record.client.company_name,\r\n record.client.branch_code,\r\n record.client.email,\r\n record.client.firstname,\r\n record.client.surname,\r\n record.client.contact_number,\r\n );\r\n }\r\n\r\n if (record.location_details) {\r\n this.location = new EsolveTransactionLocation(record.location_details);\r\n }\r\n\r\n if (record.payment_method_details) {\r\n this.payment_method = new EsolveTransactionPaymentMethod(\r\n record.payment_method_details.id,\r\n record.payment_method_details.paymethod_name,\r\n record.payment_method_details.description,\r\n record.payment_method_details.integration_type,\r\n record.payment_method_details.service_provider,\r\n );\r\n }\r\n\r\n if (record.shipping_method_details) {\r\n this.shipping_method = new EsolveTransactionShippingMethod(\r\n +record.shipping_method_details.id,\r\n record.shipping_method_details.carrier_name,\r\n record.shipping_method_details.delivery_category,\r\n record.shipping_method_details.location,\r\n record.shipping_method_details.description,\r\n record.shipping_method_details.pricing,\r\n !!record.shipping_method_details.client_to_collect,\r\n );\r\n }\r\n\r\n this.parseTransactionItems(record.transaction_items);\r\n }\r\n\r\n private parseTransactionItems(record_items: EsolveTransactionItemRecord[]): void {\r\n for (const record_item of record_items) {\r\n const price = new EsolveTransactionItemPrice(\r\n +record_item.price_exclusive,\r\n +record_item.price_inclusive,\r\n +record_item.price_exclusive_after_discount,\r\n +record_item.price_inclusive_after_discount,\r\n );\r\n\r\n const line_total = new EsolveTransactionItemPrice(\r\n +record_item.line_total_exclusive,\r\n +record_item.line_total_inclusive,\r\n +record_item.line_total_exclusive_after_discount,\r\n +record_item.line_total_inclusive_after_discount,\r\n );\r\n\r\n const item = new EsolveTransactionItem(\r\n record_item.code,\r\n record_item.name,\r\n +record_item.qty,\r\n +record_item.discount,\r\n +record_item.vat_rate,\r\n price,\r\n line_total,\r\n );\r\n\r\n this.items.push(item);\r\n }\r\n }\r\n}\r\n","import { EsolveList } from '../../shared/esolve-list.model';\r\nimport { EsolveTransaction } from './esolve-transaction.model';\r\n\r\nexport class EsolveTransactionList extends EsolveList<EsolveTransaction> { }\r\n","// Classes\r\nexport * from './esolve-transaction.model';\r\nexport * from './esolve-transaction-address.model';\r\nexport * from './esolve-transaction-client.model';\r\nexport * from './esolve-transaction-item.model';\r\nexport * from './esolve-transaction-list.model';\r\nexport * from './esolve-transaction-item-price.model';\r\nexport * from './esolve-transaction-location.model';\r\nexport * from './esolve-transaction-options.interface';\r\nexport * from './esolve-transaction-payment-method.model';\r\nexport * from './esolve-transaction-shipping-method.model';\r\nexport * from './esolve-transaction-user.model';\r\n// Interfaces\r\nexport * from './esolve-transaction-record.interface';\r\nexport * from './esolve-transaction-client-record.interface';\r\nexport * from './esolve-transaction-item-record.interface';\r\nexport * from './esolve-transaction-location-record.interface';\r\nexport * from './esolve-transaction-payment-method-record.interface';\r\nexport * from './esolve-transaction-shipping-method-record.interface';\r\nexport * from './esolve-transaction-user-record.interface';\r\n// Types\r\nexport * from './esolve-transaction-type.type';\r\n","import {\r\n EsolvePostResponseItem,\r\n EsolveResponseResult,\r\n} from '../../shared/response';\r\n\r\nexport class EsolveChangePasswordResult extends EsolveResponseResult {\r\n public password_updated: boolean;\r\n\r\n constructor(\r\n response: EsolvePostResponseItem,\r\n ) {\r\n super(response);\r\n\r\n this.password_updated = (response.status.state === 'success');\r\n }\r\n}\r\n","import { EsolveResponseResult } from '../../shared/response';\r\nimport { EsolveForgotPasswordResponse } from './esolve-forgot-password-response.interface';\r\n\r\nexport class EsolveResetPasswordResult extends EsolveResponseResult {\r\n public id: number;\r\n public reset_success: boolean;\r\n public password_matches_old: boolean;\r\n public login_required: boolean;\r\n\r\n constructor(\r\n response: EsolveForgotPasswordResponse,\r\n ) {\r\n super(response);\r\n\r\n this.id = response.esolve_id;\r\n this.reset_success = response.reset_success;\r\n this.password_matches_old = response.password_matches_old;\r\n this.login_required = response.login_required;\r\n }\r\n}\r\n","import { EsolveResponseResult } from '../../shared/response';\r\nimport { EsolveRegistrationPostResponseItem } from './esolve-registration-post-response-item.interface';\r\n\r\nexport class EsolveRegistrationResult extends EsolveResponseResult {\r\n public user_id: number;\r\n public guest: boolean;\r\n public authentication_required: boolean;\r\n public auto_login: boolean;\r\n public location_id: number;\r\n\r\n constructor(\r\n response: EsolveRegistrationPostResponseItem,\r\n ) {\r\n super(response);\r\n\r\n this.user_id = response.esolve_id;\r\n this.guest = response.guest;\r\n this.auto_login = response.auto_login;\r\n this.authentication_required = response.authentication_required;\r\n this.location_id = response.session_data.location_id;\r\n }\r\n}\r\n","import { EsolveResponseResult } from '../../shared/response';\r\nimport { EsolveAccountConfirmationPostResponseItem } from './esolve-account-confirmation-post-response-item.interface';\r\n\r\nexport class EsolveAccountConfirmationResult extends EsolveResponseResult {\r\n public user_id: number;\r\n public location_id: number;\r\n public recalculated_cart: boolean;\r\n\r\n constructor(\r\n response: EsolveAccountConfirmationPostResponseItem,\r\n ) {\r\n super(response);\r\n\r\n this.user_id = +response.esolve_id;\r\n this.location_id = +response.location_id;\r\n this.recalculated_cart = !!+response.recalculated_cart;\r\n }\r\n}\r\n","import {\r\n EsolvePostResponseItem,\r\n EsolveResponseResult,\r\n} from '../shared/response';\r\n\r\nexport class EsolveLocationUpdateResult extends EsolveResponseResult {\r\n public location_updated: boolean;\r\n\r\n constructor(\r\n response: EsolvePostResponseItem,\r\n ) {\r\n super(response);\r\n\r\n this.location_updated = (response.esolve_id > 0);\r\n }\r\n}\r\n","import { EsolveResponseResult } from '../../shared/response';\r\n\r\nexport class EsolveEmptyCartResult extends EsolveResponseResult { }\r\n","import { EsolveResponseResult } from '../../shared/response';\r\n\r\nimport { EsolveCheckoutResponse } from '../interfaces';\r\n\r\nexport class EsolveCheckoutResult extends EsolveResponseResult {\r\n public id = 0;\r\n public process_payment: boolean;\r\n\r\n constructor(response: EsolveCheckoutResponse) {\r\n super(response);\r\n\r\n this.id = +response.esolve_id;\r\n this.process_payment = response.process_payment ?? false;\r\n }\r\n}\r\n","import { EsolveCartStockItem } from './esolve-cart-stock-item.model';\r\n\r\nexport class EsolveCartItem {\r\n constructor(\r\n public id: number,\r\n public stock_item: EsolveCartStockItem,\r\n public qty: number,\r\n public delivery_category: string,\r\n public type: string,\r\n\r\n public price: number,\r\n public discount: number,\r\n public discount_interval: number,\r\n public vat_rate: number,\r\n\r\n public allow_quotes: boolean,\r\n public allow_orders: boolean,\r\n public must_collect: boolean,\r\n public requested_assembly: boolean,\r\n\r\n public price_incl: number,\r\n public discount_price: number,\r\n public discount_price_incl: number,\r\n public discount_total: number,\r\n public vat_total: number,\r\n public total: number,\r\n public total_incl: number,\r\n ) { }\r\n}\r\n","export class EsolveCartStockItem {\r\n /**\r\n * Path to tiny stock image\r\n */\r\n public get tiny_image_src(): string {\r\n return this.getImagePath('tiny');\r\n }\r\n\r\n /**\r\n * Path to thumbnail stock image\r\n */\r\n public get thumbnail_image_src(): string {\r\n return this.getImagePath('thumb');\r\n }\r\n\r\n /**\r\n * Path to small stock image\r\n */\r\n public get small_image_src(): string {\r\n return this.getImagePath('small');\r\n }\r\n\r\n /**\r\n * Path to big stock image\r\n */\r\n public get big_image_src(): string {\r\n return this.getImagePath('big');\r\n }\r\n\r\n /**\r\n * Path to original stock image\r\n */\r\n public get original_image_src(): string {\r\n return this.getImagePath('original');\r\n }\r\n\r\n constructor(\r\n public code: string,\r\n public name: string,\r\n public sef_name: string,\r\n public description: string,\r\n public active: boolean,\r\n public items_in_pack: number,\r\n public delivery_category: string,\r\n public onhand: number,\r\n private image_name: string,\r\n ) { }\r\n\r\n public getImagePath(\r\n image_size: 'tiny' | 'thumb' | 'small' | 'big' | 'original',\r\n ): string {\r\n if (this.image_name !== '') {\r\n return `/images/stock/${image_size}/${this.image_name}`;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","/**\r\n * Totals in cart\r\n */\r\nexport class EsolveCartTotals {\r\n /**\r\n * Grand total of cart which includes discount and VAT (NOTE: shipping and insurance is not included)\r\n */\r\n public get total(): number {\r\n return this.sub_total + this.vat_total - this.discount_total;\r\n }\r\n\r\n constructor(\r\n /**\r\n * Number of unique records in cart\r\n */\r\n public records: number = 0,\r\n /**\r\n * Total quantity of all items in a cart\r\n */\r\n public items: number = 0,\r\n /**\r\n * Total in cart before discount and VAT is added\r\n */\r\n public sub_total: number = 0,\r\n /**\r\n * Total VAT of all the items in the cart\r\n */\r\n public vat_total: number = 0,\r\n /**\r\n * Total discount of all the item in the cart\r\n */\r\n public discount_total: number = 0,\r\n ) { }\r\n}\r\n","import { EsolveTransactionType } from '../../account';\r\n\r\nimport { EsolveTransactionAnalyticsDataRecord } from '../interfaces';\r\n\r\nexport class EsolveTransactionAnalyticsData<T = any> {\r\n public transaction_id: number = 0;\r\n public transaction_type: EsolveTransactionType = 'order';\r\n /**\r\n * Data generated for analytics\r\n */\r\n public analytics_data?: T;\r\n\r\n constructor(record?: Partial<EsolveTransactionAnalyticsDataRecord<T>>) {\r\n if (record) {\r\n this.transaction_id = +(record.transaction_id ?? 0);\r\n this.transaction_type = record.transaction_type ?? 'order';\r\n\r\n if (record.analytics_data) {\r\n this.analytics_data = record.analytics_data;\r\n }\r\n }\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\n\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\n\r\nimport { iif, Observable, of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveErrorHandlerService } from '../shared/errors/esolve-error-handler.service';\r\nimport {\r\n EsolveGetResponse,\r\n EsolveResponseHandlerService,\r\n EsolveSetResponse,\r\n} from '../shared/response';\r\n\r\nimport { EsolveTransactionType } from '../account';\r\n\r\nimport {\r\n EsolveCartItem,\r\n EsolveCartStockItem,\r\n EsolveCartTotals,\r\n EsolveCheckoutResult,\r\n EsolveEmptyCartResult,\r\n EsolveTransactionAnalyticsData,\r\n} from './classes';\r\nimport {\r\n EsolveAdditionalWhere,\r\n EsolveCartEmptyResponse,\r\n EsolveCartItemRecord,\r\n EsolveCartItemResponse,\r\n EsolveCartSetItem,\r\n EsolveCartTotalsRecord,\r\n EsolveCheckoutResponse,\r\n EsolveTrackingCode,\r\n EsolveTransactionAnalyticsDataRecord,\r\n} from './interfaces';\r\nimport { EsolveCart, EsolveCartSetAction } from './types';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveCartService {\r\n private _cached_tracking = 0;\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n private errorHandler: EsolveErrorHandlerService,\r\n private responseHandler: EsolveResponseHandlerService,\r\n ) { }\r\n\r\n /**\r\n * Retrieves the current cart\r\n *\r\n * @returns An `Observable` with an array of cart items\r\n */\r\n public getCart(): Observable<EsolveCart> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveCartItemRecord[]>>(\r\n `${this.config.api_url}/get-cart.php`,\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processCart(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Updates the cart by preforming various actions, such as adding, editing or removing items from the cart.\r\n *\r\n * @param items An array of options to update the cart\r\n * @param action The default action to preform\r\n * @returns An `Observable` with an array of responses that gives feedback on the requested changes\r\n */\r\n public setCart(\r\n items: EsolveCartSetItem[],\r\n action: EsolveCartSetAction = 'add',\r\n ): Observable<EsolveCartItemResponse[]> {\r\n const body = {\r\n items,\r\n action,\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveCartItemResponse>>(\r\n `${this.config.api_url}/set-cart-item.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.responses === undefined) {\r\n throw response;\r\n }\r\n\r\n return response.responses;\r\n }),\r\n );\r\n }\r\n\r\n public setCartEmpty(\r\n type: EsolveTransactionType,\r\n additional_where: EsolveAdditionalWhere[],\r\n ): Observable<EsolveEmptyCartResult> {\r\n const body = {\r\n type,\r\n additional_where,\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveCartEmptyResponse>>(\r\n `${this.config.api_url}/set-cart-empty.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => {\r\n this._cached_tracking = 0;\r\n\r\n return new EsolveEmptyCartResult(response);\r\n },\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-cart-empty', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves the totals of the cart with all the totals calculated\r\n *\r\n * @returns An `Observable` with an object containing cart totals\r\n */\r\n public getTotals(type?: EsolveTransactionType): Observable<EsolveCartTotals> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveCartTotalsRecord>>(\r\n `${this.config.api_url}/get-cart-totals.php`,\r\n {\r\n params: {\r\n type: type ?? '',\r\n },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processCartTotals(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves a tracking code for the cart\r\n *\r\n * @returns An `Observable` with the cart tracking code\r\n */\r\n public getTrackingCode(): Observable<number> {\r\n return iif(\r\n () => this._cached_tracking > 0,\r\n of(this._cached_tracking),\r\n this.http\r\n .get<EsolveGetResponse<EsolveTrackingCode>>(\r\n `${this.config.api_url}/get-checkout-tracking.php`,\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n this._cached_tracking = response.records.tracking;\r\n\r\n return response.records.tracking;\r\n }),\r\n ),\r\n );\r\n }\r\n\r\n /**\r\n * Get the data of the transaction for the analytics\r\n *\r\n * @param transaction_id ID of the transaction used in eSolve\r\n *\r\n * @returns An `Observable` with the analytics data\r\n */\r\n public getTransactionAnalyticsData<T = any>(\r\n transaction_id: number,\r\n ): Observable<EsolveTransactionAnalyticsData<T>> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveTransactionAnalyticsDataRecord<T>>>(\r\n `${this.config.api_url}/get-transaction-analytics-data.php`,\r\n {\r\n params: {\r\n transaction_id,\r\n },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return new EsolveTransactionAnalyticsData<T>(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Initiates checkout of the cart items\r\n *\r\n * @param type The cart type that needs to be checked out\r\n * @param addresses_id The ID of the delivery address\r\n * @param shipping_id The ID of the shipping method\r\n * @param payment_method_id The ID of the selected payment method\r\n * @param location_id The ID of the selected branch from with shipping needs to be calculated\r\n * @param comments Additional comments on the cart\r\n * @returns An `Observable` with the transaction ID\r\n */\r\n public checkout(\r\n type: EsolveTransactionType,\r\n addresses_id: number,\r\n shipping_id: number,\r\n payment_method_id = 0,\r\n location_id = 0,\r\n comments = '',\r\n ): Observable<EsolveCheckoutResult> {\r\n const body = {\r\n type,\r\n addresses_id,\r\n shipping_id,\r\n payment_method_id,\r\n location_id,\r\n comments,\r\n tracking: 0,\r\n };\r\n\r\n return this.getTrackingCode().pipe(\r\n switchMap((tracking) => {\r\n if (tracking <= 0) {\r\n throw tracking;\r\n }\r\n\r\n body.tracking = tracking;\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveCheckoutResponse>>(\r\n `${this.config.api_url}/set-checkout.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => {\r\n this._cached_tracking = 0;\r\n\r\n return new EsolveCheckoutResult(response);\r\n },\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-checkout', errorRes);\r\n }),\r\n );\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Processes the eSolve tree records\r\n *\r\n * @param cart_item_records Records to process\r\n * @returns An array of processed cart items\r\n */\r\n private processCart(cart_item_records: EsolveCartItemRecord[]): EsolveCart {\r\n const cart_items: EsolveCartItem[] = [];\r\n\r\n if (cart_item_records) {\r\n for (const cart_item_record of cart_item_records) {\r\n const cart_stock_item = new EsolveCartStockItem(\r\n cart_item_record.code,\r\n cart_item_record.name,\r\n cart_item_record.sef_name,\r\n cart_item_record.description,\r\n cart_item_record.is_active,\r\n +cart_item_record.items_in_pack,\r\n cart_item_record.delivery_category,\r\n +cart_item_record.onhand,\r\n cart_item_record.image_name,\r\n );\r\n\r\n cart_items.push(new EsolveCartItem(\r\n +cart_item_record.id,\r\n cart_stock_item,\r\n +cart_item_record.qty,\r\n cart_item_record.delivery_category,\r\n cart_item_record.type,\r\n +cart_item_record.price,\r\n +cart_item_record.discount,\r\n +cart_item_record.discount_interval,\r\n cart_item_record.vat_rate,\r\n cart_item_record.allow_quotes,\r\n cart_item_record.allow_orders,\r\n cart_item_record.must_collect,\r\n cart_item_record.requested_assembly,\r\n +cart_item_record.price_incl,\r\n +cart_item_record.discount_price,\r\n +cart_item_record.discount_price_incl,\r\n +cart_item_record.discount_total,\r\n +cart_item_record.vat_total,\r\n +cart_item_record.line_total,\r\n +cart_item_record.line_total_incl,\r\n ));\r\n }\r\n }\r\n\r\n return cart_items;\r\n }\r\n\r\n /**\r\n * Processes the eSolve cart totals\r\n *\r\n * @param record Data to process\r\n * @returns Processed cart totals\r\n */\r\n private processCartTotals(record: EsolveCartTotalsRecord): EsolveCartTotals {\r\n const cart_totals = new EsolveCartTotals(\r\n +record.records,\r\n +record.items,\r\n +record.total,\r\n +record.vat,\r\n +record.discount,\r\n );\r\n\r\n return cart_totals;\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\n\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\n\r\nimport { EsolveResult } from '../shared/esolve-result.model';\r\nimport { EsolveErrorHandlerService } from '../shared/errors';\r\nimport {\r\n EsolveDeleteResponse,\r\n EsolveSetResponse,\r\n EsolveGetResponse,\r\n EsolveResponseHandlerService,\r\n} from '../shared/response';\r\n\r\nimport { EsolveSessionService } from '../session/esolve-session.service';\r\n\r\nimport { EsolveLocationUpdateResult } from './esolve-location-update-result.model';\r\nimport {\r\n EsolveRegistrationPostResponseItem,\r\n EsolveRegistrationData,\r\n EsolveRegistrationResult,\r\n} from './registration';\r\nimport {\r\n EsolveAddress,\r\n EsolveAddressRecord,\r\n EsolveAddressResult,\r\n EsolveAddressPostData,\r\n EsolveAddressResponse,\r\n} from './address';\r\nimport {\r\n EsolveChangePasswordResult,\r\n EsolveResetPasswordResult,\r\n EsolveForgotPasswordResponse,\r\n EsolveForgotPasswordGetResult,\r\n} from './password';\r\nimport {\r\n EsolveTransactionRecord,\r\n EsolveTransaction,\r\n EsolveTransactionOptions,\r\n EsolveTransactionList,\r\n} from './transaction';\r\nimport {\r\n EsolveUserAccount,\r\n EsolveUserAccountData,\r\n EsolveUserAccountRecord,\r\n EsolveUserAccountResult,\r\n EsolveUserAccountContact,\r\n EsolveUserAccountBusiness,\r\n EsolveUserClientAccount,\r\n} from './user-account';\r\nimport { EsolveAccountConfirmationPostResponseItem, EsolveAccountConfirmationResult } from './confirmation';\r\nimport { EsolveUserClientAccountBalancesRecord } from './user-account/esolve-user-client-account-balances-record.interface';\r\nimport { EsolveUserClientAccountBalances } from './user-account/esolve-user-client-account-balances.model';\r\nimport { EsolveCartTotals } from '../cart';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveAccountService {\r\n private _user_id = 0;\r\n\r\n public get user_id(): number {\r\n return this._user_id;\r\n }\r\n\r\n public set user_id(value: number) {\r\n value = ((value > 0) ? value : 0);\r\n\r\n if (this._user_id !== value) {\r\n this._user_id = value;\r\n }\r\n }\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n private sessionService: EsolveSessionService,\r\n private errorHandler: EsolveErrorHandlerService,\r\n private responseHandler: EsolveResponseHandlerService,\r\n ) {\r\n this.sessionService.session.subscribe((session) => {\r\n if (session.key !== '') {\r\n this.user_id = session.id;\r\n }\r\n });\r\n }\r\n\r\n public updateUserAccount(user_account_data: EsolveUserAccountData): Observable<EsolveUserAccountResult> {\r\n const body = {\r\n account: user_account_data,\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse>(\r\n `${this.config.api_url}/set-user-account.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => new EsolveUserAccountResult(response),\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-user-account', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n public getUserAccount(): Observable<EsolveUserAccount> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveUserAccountRecord[]>>(\r\n `${this.config.api_url}/get-account.php`,\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length === 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const record = response.records[0];\r\n\r\n return this.processUserAccount(record);\r\n }),\r\n );\r\n }\r\n\r\n public setAddress(address_post_data: EsolveAddressPostData): Observable<EsolveAddressResult> {\r\n const body = {\r\n address: address_post_data,\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveAddressResponse>>(\r\n `${this.config.api_url}/set-address.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) =>\r\n this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => new EsolveAddressResult(response),\r\n ),\r\n ),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-registration', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n public getAddresses(): Observable<EsolveAddress[]> {\r\n try {\r\n this.loginGuard();\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveAddressRecord[]>>(\r\n `${this.config.api_url}/get-addresses.php`,\r\n {\r\n params: { user_id: this.user_id },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processUserAddress(response.records);\r\n }),\r\n );\r\n } catch (error) {\r\n return throwError(() => error);\r\n }\r\n }\r\n\r\n public deleteAddress(id: number): Observable<EsolveResult> {\r\n return this.http\r\n .delete<EsolveDeleteResponse>(\r\n `${this.config.api_url}/delete-address.php`,\r\n {\r\n params: { id },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => {\r\n if (\r\n (http_response.result === undefined) ||\r\n (http_response.result === null) ||\r\n (http_response.result.status !== 'success')\r\n ) {\r\n throw http_response;\r\n }\r\n\r\n return new EsolveResult(\r\n http_response.result.status,\r\n http_response.result.code,\r\n http_response.result.message,\r\n );\r\n }),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpDeleteError('delete-address', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n public register(user_registration: EsolveRegistrationData): Observable<EsolveRegistrationResult> {\r\n const body = {\r\n user: user_registration,\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveRegistrationPostResponseItem>>(\r\n `${this.config.api_url}/set-registration.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => {\r\n if (response.auto_login) {\r\n this.sessionService.handleUpdateSession({\r\n user_id: +response.esolve_id,\r\n location_id: +response.session_data.location_id,\r\n });\r\n }\r\n\r\n return new EsolveRegistrationResult(response);\r\n },\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-registration', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n public changePassword(password: string, confirm_password: string): Observable<EsolveChangePasswordResult> {\r\n const body = {\r\n password,\r\n confirm_password,\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse>(\r\n `${this.config.api_url}/set-change-password.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => {\r\n return new EsolveChangePasswordResult(response);\r\n },\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-change-password', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Submits the users confirmation key to the relevant backend server in order to\r\n * confirm the accounts validity. The key was emailed to the user hence if he received\r\n * it and enters the value, the email account can be seen as valid.\r\n *\r\n * @param key The key that was emailed to the registered user's email account.\r\n * @returns An `Observable` that contains the result of the account confirmation request.\r\n */\r\n public accountConfirmationRequest(key: string): Observable<EsolveAccountConfirmationResult> {\r\n const body = {\r\n key,\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveAccountConfirmationPostResponseItem>>(\r\n `${this.config.api_url}/set-account-confirmation.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => {\r\n if (response.auto_login) {\r\n this.sessionService.handleUpdateSession({\r\n user_id: +response.esolve_id,\r\n location_id: +response.location_id,\r\n });\r\n }\r\n\r\n return new EsolveAccountConfirmationResult(response);\r\n },\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-account-confirmation', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n public sendForgotPasswordRequest(email: string): Observable<boolean> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveForgotPasswordGetResult>>(\r\n `${this.config.api_url}/get-forgot-password.php`,\r\n { params: { email } },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n !('reset_link_sent' in response.records)\r\n ) {\r\n throw response;\r\n }\r\n\r\n return response.records.reset_link_sent;\r\n }),\r\n );\r\n }\r\n\r\n public resetPassword(\r\n reset_key: string,\r\n password: string,\r\n confirm_password: string,\r\n auto_login = true,\r\n ): Observable<EsolveResetPasswordResult> {\r\n return this.http\r\n .post<EsolveSetResponse<EsolveForgotPasswordResponse>>(\r\n `${this.config.api_url}/set-forgot-password.php`,\r\n {\r\n reset_key,\r\n password,\r\n confirm_password,\r\n auto_login,\r\n },\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => {\r\n if (!response.login_required) {\r\n this.sessionService.handleUpdateSession({\r\n user_id: +response.esolve_id,\r\n location_id: +response.session_data.location_id,\r\n });\r\n }\r\n\r\n return new EsolveResetPasswordResult(response);\r\n },\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-forgot-password', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n public updateLocation(location_id: number): Observable<EsolveLocationUpdateResult> {\r\n const body = { location_id };\r\n\r\n return this.http\r\n .post<EsolveSetResponse>(\r\n `${this.config.api_url}/set-session-location.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => {\r\n this.sessionService.handleUpdateSession({ location_id });\r\n\r\n return new EsolveLocationUpdateResult(response);\r\n },\r\n )),\r\n );\r\n }\r\n\r\n public getTransactions(options: EsolveTransactionOptions = {}): Observable<EsolveTransactionList> {\r\n try {\r\n this.loginGuard();\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveTransactionRecord[]>>(\r\n `${this.config.api_url}/get-transactions.php`,\r\n {\r\n params: {\r\n user_id: this.user_id,\r\n ...options,\r\n },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const items = this.processTransactions(response.records);\r\n const total = +response.additional_data.total_records ?? 0;\r\n const rows = options.rows ?? total;\r\n const page = options.page || 1;\r\n\r\n return new EsolveTransactionList(items, page, rows, total);\r\n }),\r\n );\r\n } catch (error) {\r\n return throwError(() => error);\r\n }\r\n }\r\n\r\n public getTransaction(id: number): Observable<EsolveTransaction> {\r\n try {\r\n this.loginGuard();\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveTransactionRecord[]>>(\r\n `${this.config.api_url}/get-transactions.php`,\r\n {\r\n params: {\r\n user_id: this.user_id,\r\n transaction_id: id,\r\n },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const items = this.processTransactions(response.records);\r\n\r\n return items[0];\r\n }),\r\n );\r\n } catch (error) {\r\n return throwError(() => error);\r\n }\r\n }\r\n\r\n public getClientAccountBalances(): Observable<EsolveUserClientAccountBalances | undefined> {\r\n try {\r\n this.loginGuard();\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveUserClientAccountBalancesRecord[]>>(\r\n `${this.config.api_url}/get-client-account-balances.php`,\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processClientBalances(response.records);\r\n }),\r\n );\r\n } catch (error) {\r\n return throwError(() => error);\r\n }\r\n }\r\n\r\n private processUserAccount(record: EsolveUserAccountRecord): EsolveUserAccount {\r\n if (!record) {\r\n throw new Error('Invalid record');\r\n }\r\n\r\n if (+record.userid !== this._user_id) {\r\n throw new Error('Invalid user account retrieved');\r\n }\r\n\r\n const user_account = new EsolveUserAccount(\r\n +record.userid,\r\n record.email,\r\n record.registration_type,\r\n record.title,\r\n record.firstname,\r\n record.surname,\r\n record.initials,\r\n record.gender,\r\n record.idnumber,\r\n );\r\n\r\n user_account.contact_details = new EsolveUserAccountContact(\r\n record.telnumber,\r\n record.cellnumber,\r\n record.fax,\r\n );\r\n\r\n user_account.business_details = new EsolveUserAccountBusiness(\r\n record.busname,\r\n record.vatnum,\r\n record.busdescript,\r\n record.business_type,\r\n );\r\n\r\n if (record.client_details != undefined) {\r\n if (record.client_details?.account !== '') {\r\n user_account.client_details = new EsolveUserClientAccount(\r\n record.client_details.account,\r\n record.client_details.branch_code,\r\n record.client_details.account_group,\r\n record.client_details.pricing_group,\r\n +record.client_details.price_list,\r\n +record.client_details.loyalty_classification_id,\r\n record.client_details.company_name,\r\n record.client_details.client_contact_person,\r\n record.client_details.client_firstname,\r\n record.client_details.client_surname,\r\n record.client_details.client_email,\r\n record.client_details.client_contact_number,\r\n record.client_details.client_fax_number,\r\n record.client_details.client_cellphone_number,\r\n record.client_details.client_id_number,\r\n record.client_details.address_description,\r\n record.client_details.street,\r\n record.client_details.suburb,\r\n record.client_details.city,\r\n record.client_details.province,\r\n record.client_details.country,\r\n record.client_details.postal_code,\r\n record.client_details.postal_address,\r\n record.client_details.delivery_address,\r\n +record.client_details.latitude,\r\n +record.client_details.longitude,\r\n record.client_details.vat_number,\r\n +record.client_details.credit_limit,\r\n +record.client_details.pending_invoice_balance,\r\n +record.client_details.external_account_balance,\r\n record.client_details.ageing,\r\n record.client_details.balance_last_updated,\r\n +record.client_details.default_sellprice,\r\n record.client_details.client_classification,\r\n record.client_details.override_stock_listing_identifiers,\r\n record.client_details.requires_transaction_approval,\r\n record.client_details.is_active as boolean,\r\n );\r\n }\r\n }\r\n\r\n return user_account;\r\n }\r\n\r\n private processUserAddress(records: EsolveAddressRecord[]): EsolveAddress[] {\r\n const user_addresses: EsolveAddress[] = [];\r\n\r\n if (!records || (this._user_id === 0)) {\r\n return user_addresses;\r\n }\r\n\r\n for (const record of records) {\r\n if (+record.userid !== this._user_id) {\r\n continue;\r\n }\r\n\r\n user_addresses.push(new EsolveAddress(\r\n +record.id,\r\n record.recipient,\r\n record.address_type,\r\n record.pobox,\r\n record.place_name,\r\n record.street_number,\r\n record.street,\r\n record.suburb,\r\n record.city,\r\n record.province,\r\n record.country,\r\n record.postal_code,\r\n +record.latitude,\r\n +record.longitude,\r\n ));\r\n }\r\n\r\n return user_addresses;\r\n }\r\n\r\n private processTransactions(records: EsolveTransactionRecord[]): EsolveTransaction[] {\r\n const transactions: EsolveTransaction[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n const transaction = new EsolveTransaction(record);\r\n\r\n transactions.push(transaction);\r\n }\r\n }\r\n\r\n return transactions;\r\n }\r\n\r\n private processClientBalances(\r\n records: EsolveUserClientAccountBalancesRecord[],\r\n ): EsolveUserClientAccountBalances | undefined {\r\n\r\n for (const record of records) {\r\n if (!(+record.clients_id > 0)) {\r\n return undefined;\r\n }\r\n\r\n const cart_totals = new EsolveCartTotals(\r\n record.cart_totals.records,\r\n +record.cart_totals.items,\r\n +record.cart_totals.total,\r\n +record.cart_totals.vat,\r\n +record.cart_totals.discount,\r\n );\r\n\r\n return new EsolveUserClientAccountBalances (\r\n +record.clients_id,\r\n record.account,\r\n cart_totals,\r\n +record.credit_limit,\r\n +record.external_account_balance,\r\n +record.external_available_balance,\r\n +record.new_external_available_balance,\r\n !!+record.credit_limit_okay,\r\n );\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private loginGuard(): void {\r\n if (this.user_id <= 0) {\r\n this.errorHandler.throwError('login_required', 'Login is required');\r\n }\r\n }\r\n}\r\n","import { EsolveBannerType } from './esolve-banner-type.type';\r\nimport { EsolveBannerLink } from './esolve-banner-link.interface';\r\nimport { EsolveBannerImage } from './esolve-banner-image.model';\r\nimport { EsolveBannerImageSet } from './esolve-banner-image-set.interface';\r\n\r\nexport class EsolveBanner {\r\n public desktop_images: EsolveBannerImage[] = [];\r\n public mobile_images: EsolveBannerImage[] = [];\r\n public sub_images: EsolveBannerImage[] = [];\r\n\r\n constructor(\r\n public id: number,\r\n public banner_display_container: string,\r\n public identifier: string,\r\n public type: EsolveBannerType,\r\n public title: string,\r\n public article: string,\r\n public sort_priority: number,\r\n public link: EsolveBannerLink,\r\n images: EsolveBannerImageSet,\r\n ) {\r\n if (images.desktop) {\r\n this.desktop_images = images.desktop;\r\n }\r\n\r\n if (images.mobile) {\r\n this.mobile_images = images.mobile;\r\n }\r\n\r\n if (images.sub) {\r\n this.sub_images = images.sub;\r\n }\r\n }\r\n}\r\n","import { EsolveBannerImageType } from './esolve-banner-image-type.type';\r\nimport { EsolveBannerImageHotspot } from './esolve-banner-image-hotspot.model';\r\n\r\nexport class EsolveBannerImage {\r\n constructor(\r\n public id: number,\r\n public image_type: EsolveBannerImageType,\r\n public width: number,\r\n public height: number,\r\n public filename: string,\r\n public hotspots?: EsolveBannerImageHotspot[],\r\n ) { }\r\n\r\n public get src(): string {\r\n return '/images/banners/' + this.filename;\r\n }\r\n}\r\n","import { EsolveUrlTarget } from '../shared/esolve-url-target.type';\r\nimport { EsolveBannerImageHotspotCoords } from './esolve-banner-image-hotspot-coords.interface';\r\n\r\nexport class EsolveBannerImageHotspot {\r\n constructor(\r\n public url: string,\r\n public target: EsolveUrlTarget,\r\n public coords: EsolveBannerImageHotspotCoords[],\r\n public coords_string: string,\r\n ) { }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveBannerType } from './esolve-banner-type.type';\r\nimport { EsolveBanner } from './esolve-banner.model';\r\nimport { EsolveBannerImageSet } from './esolve-banner-image-set.interface';\r\nimport { EsolveBannerImage } from './esolve-banner-image.model';\r\nimport { EsolveBannerImageHotspot } from './esolve-banner-image-hotspot.model';\r\nimport { EsolveBannerRecord } from './esolve-banner-record.interface';\r\nimport { EsolveBannerImageHotspotRecord } from './esolve-banner-image-hotspot-record.interface';\r\nimport { EsolveBannerImageRecord } from './esolve-banner-image-record.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveBannerService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n /**\r\n * Retrieves banners records from eSolve instance\r\n *\r\n * @returns An observable of eSolve banners.\r\n */\r\n public getBanners(\r\n identifier?: string,\r\n banner_display_container?: string,\r\n enable_date_filter: boolean = false,\r\n ): Observable<EsolveBanner[]> {\r\n let params = new HttpParams({\r\n fromObject: { enable_date_filter },\r\n });\r\n\r\n if (identifier) {\r\n params = params.set('identifier', identifier);\r\n }\r\n\r\n if (banner_display_container) {\r\n params = params.set('banner_display_container', banner_display_container);\r\n }\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveBannerRecord[]>>(\r\n `${this.config.api_url}/get-banners.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processBanners(response.records);\r\n }),\r\n );\r\n }\r\n\r\n private processBannerImageHotspots(\r\n hotspot_records: EsolveBannerImageHotspotRecord[],\r\n ): EsolveBannerImageHotspot[] {\r\n const hotspots: EsolveBannerImageHotspot[] = [];\r\n\r\n if (hotspot_records.length > 0) {\r\n for (const hotspot_record of hotspot_records) {\r\n const hotspot = new EsolveBannerImageHotspot(\r\n hotspot_record.url,\r\n hotspot_record.target,\r\n hotspot_record.coords,\r\n hotspot_record.coords_string,\r\n );\r\n\r\n hotspots.push(hotspot);\r\n }\r\n }\r\n\r\n return hotspots;\r\n }\r\n\r\n private processBannerImages(\r\n image_records: EsolveBannerImageRecord[],\r\n banner_type: EsolveBannerType,\r\n ): EsolveBannerImage[] {\r\n const images: EsolveBannerImage[] = [];\r\n\r\n if (image_records.length > 0) {\r\n for (const image_record of image_records) {\r\n const image = new EsolveBannerImage(\r\n +image_record.id,\r\n image_record.image_type,\r\n +image_record.width,\r\n +image_record.height,\r\n image_record.filename,\r\n );\r\n\r\n if ((banner_type === 'hotspot') && (image_record.hotspots)) {\r\n const hotspots = this.processBannerImageHotspots(image_record.hotspots);\r\n image.hotspots = hotspots;\r\n }\r\n\r\n images.push(image);\r\n }\r\n }\r\n\r\n return images;\r\n }\r\n\r\n /**\r\n * Process banner records into banner objects\r\n * @param records Array of records\r\n * @returns List of banners\r\n */\r\n private processBanners(records: EsolveBannerRecord[]): EsolveBanner[] {\r\n const banners: EsolveBanner[] = [];\r\n\r\n if ((records) && (records.length > 0)) {\r\n for (const record of records) {\r\n const image_sets: EsolveBannerImageSet = {};\r\n\r\n if (record.images.desktop) {\r\n image_sets.desktop = this.processBannerImages(\r\n record.images.desktop,\r\n record.type,\r\n );\r\n }\r\n\r\n if (record.images.mobile) {\r\n image_sets.mobile = this.processBannerImages(\r\n record.images.mobile,\r\n record.type,\r\n );\r\n }\r\n\r\n if (record.images.sub) {\r\n image_sets.sub = this.processBannerImages(\r\n record.images.sub,\r\n record.type,\r\n );\r\n }\r\n\r\n const banner = new EsolveBanner(\r\n +record.id,\r\n record.banner_display_container,\r\n record.identifier,\r\n record.type,\r\n record.title,\r\n record.article,\r\n +record.sort_priority,\r\n {\r\n url: record.link.url,\r\n target: record.link.target,\r\n },\r\n image_sets,\r\n );\r\n\r\n banners.push(banner);\r\n }\r\n }\r\n\r\n return banners;\r\n }\r\n}\r\n","// Types\r\nexport * from './esolve-banner-image-type.type';\r\n\r\n// Classes\r\nexport * from './esolve-banner.model';\r\nexport * from './esolve-banner-image.model';\r\nexport * from './esolve-banner-image-hotspot.model';\r\n\r\n// Interfaces\r\nexport * from './esolve-banner-image-set.interface';\r\nexport * from './esolve-banner-image-record.interface';\r\nexport * from './esolve-banner-image-hotspot-coords.interface';\r\nexport * from './esolve-banner-image-hotspot-record.interface';\r\n\r\n// Service\r\nexport * from './esolve-banner.service';\r\n","export class EsolveMenuItem {\r\n constructor(\r\n public url: string,\r\n public name: string,\r\n public target: string,\r\n public children: EsolveMenuItem[] = [],\r\n ) { }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveMenuTreeRecord } from './esolve-menu-tree-record.interface';\r\nimport { EsolveMenuItem } from './esolve-menu-item.model';\r\nimport { EsolveMenu } from './esolve-menu.type';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveMenuService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n public getMenuTree(identifier: string): Observable<EsolveMenu> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveMenuTreeRecord[]>>(\r\n `${this.config.api_url}/get-menu-tree.php`,\r\n { params: { identifier } },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if ((!response) || (response.records === undefined)) {\r\n throw response;\r\n } else if (response.records.length === 0) {\r\n return [];\r\n }\r\n\r\n return this.handleMenu(response.records);\r\n }),\r\n );\r\n }\r\n\r\n private handleMenu(records?: EsolveMenuTreeRecord[]): EsolveMenu {\r\n const menu: EsolveMenu = [];\r\n\r\n if (typeof records !== 'undefined') {\r\n for (const menuTreeRecord of records) {\r\n menu.push(new EsolveMenuItem(\r\n menuTreeRecord.sef_url,\r\n menuTreeRecord.name,\r\n menuTreeRecord.target,\r\n this.handleMenu(menuTreeRecord.children),\r\n ));\r\n }\r\n }\r\n\r\n return menu;\r\n }\r\n}\r\n","export class EsolveNewsGroup {\r\n constructor(\r\n public id: number,\r\n public name: string,\r\n public description: string,\r\n public sef_name: string,\r\n ) { }\r\n}\r\n","export class EsolveNewsArticleAuthor {\r\n constructor(\r\n public userid: number,\r\n public email: string,\r\n public firstname: string,\r\n public surname: string,\r\n ) { }\r\n}\r\n","import { EsolveSeoInfo } from '../shared/seo/esolve-seo-info.model';\r\nimport { EsolveSeoDetails } from '../shared/seo/esolve-seo-details.interface';\r\n\r\nimport { EsolveTag } from '../tags';\r\nimport { EsolveTopic } from '../topics';\r\nimport { EsolveManufacturer } from '../manufacturers';\r\nimport { EsolveRange } from '../ranges';\r\n\r\nimport { EsolveNewsGroup } from './esolve-news-group.model';\r\nimport { EsolveNewsArticleAuthor } from './esolve-news-article-author.model';\r\nimport { EsolveNewsArticleRecord } from './esolve-news-article-record.interface';\r\n\r\nexport class EsolveNewsArticle implements EsolveSeoDetails {\r\n public id: number = 0;\r\n public title: string = '';\r\n public sef_title: string = '';\r\n public article: string = '';\r\n public short_description: string = '';\r\n public txdate: string = '';\r\n public active: boolean = false;\r\n public image: string = '';\r\n public featured: boolean = false;\r\n public topics: EsolveTopic[] = [];\r\n public tags: EsolveTag[] = [];\r\n public author?: EsolveNewsArticleAuthor;\r\n public group?: EsolveNewsGroup;\r\n public manufacturer?: EsolveManufacturer;\r\n public range?: EsolveRange;\r\n public seo_details: EsolveSeoInfo;\r\n\r\n constructor(record?: Partial<EsolveNewsArticleRecord>) {\r\n let seo_title = '';\r\n let seo_description = '';\r\n let seo_keywords = '';\r\n\r\n if (record) {\r\n this.id = +(record.id ?? 0);\r\n this.title = record.title ?? '';\r\n this.sef_title = record.sef_title ?? '';\r\n this.article = record.article ?? '';\r\n this.txdate = record.txdate ?? '';\r\n this.image = record.image ?? '';\r\n this.short_description = record.short_description ?? '';\r\n\r\n if (record.active) {\r\n this.active = !!+record.active;\r\n }\r\n\r\n if (record.featured) {\r\n this.featured = !!+record.featured;\r\n }\r\n\r\n seo_title = record.seo_page_title ?? '';\r\n seo_description = record.short_description ?? '';\r\n seo_keywords = record.seo_keywords ?? '';\r\n\r\n if (record.news_group) {\r\n const group_record = record.news_group;\r\n\r\n this.group = new EsolveNewsGroup(\r\n +group_record.id,\r\n group_record.name,\r\n group_record.description,\r\n group_record.sef_name,\r\n );\r\n }\r\n\r\n if (record.user) {\r\n this.author = new EsolveNewsArticleAuthor(\r\n record.user.userid,\r\n record.user.email,\r\n record.user.firstname,\r\n record.user.surname,\r\n );\r\n }\r\n\r\n if (record.manufacturer) {\r\n this.manufacturer = new EsolveManufacturer(record.manufacturer);\r\n }\r\n\r\n if (record.range) {\r\n this.range = new EsolveRange(record.range);\r\n }\r\n\r\n if (record.topics && record.topics.length > 0) {\r\n const topics = record.topics;\r\n\r\n for (const topic of topics) {\r\n this.topics.push(new EsolveTopic(topic));\r\n }\r\n }\r\n\r\n if (record.tags && record.tags.length > 0) {\r\n const tags = record.tags;\r\n\r\n for (const tag of tags) {\r\n this.tags.push(new EsolveTag(tag));\r\n }\r\n }\r\n }\r\n\r\n if (seo_title.trim() === '') {\r\n seo_title = this.title;\r\n }\r\n\r\n this.seo_details = new EsolveSeoInfo(\r\n seo_title,\r\n seo_description,\r\n seo_keywords,\r\n );\r\n }\r\n}\r\n","import { EsolveNewsArticle } from './esolve-news-article.model';\r\n\r\nexport class EsolveNewsArticleList {\r\n constructor(\r\n public newsArticles: EsolveNewsArticle[],\r\n public total: number,\r\n public page: number,\r\n ) { }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveNewsArticle } from './esolve-news-article.model';\r\nimport { EsolveNewsGroup } from './esolve-news-group.model';\r\nimport { EsolveNewsArticleRecord } from './esolve-news-article-record.interface';\r\nimport { EsolveNewsGroupRecord } from './esolve-news-group-record.interface';\r\nimport { EsolveNewsArticleList } from './esolve-news-article-list.model';\r\nimport { EsolveNewsArticleOptions } from './esolve-news-article-options.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveNewsService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n public getNewsArticle(identifier: string): Observable<EsolveNewsArticle> {\r\n const params = new HttpParams({ fromObject: { sef_title: identifier }});\r\n\r\n return this.getNewsRecords(params).pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const record = response.records[0];\r\n\r\n if (!record.active) {\r\n throw response;\r\n }\r\n\r\n return this.processNewsArticle(record);\r\n }),\r\n );\r\n }\r\n\r\n public getNewsArticles(\r\n options?: EsolveNewsArticleOptions,\r\n ): Observable<EsolveNewsArticleList> {\r\n const params = this.parseOptions(options);\r\n\r\n return this.getNewsRecords(params).pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const news_articles: EsolveNewsArticle[] = [];\r\n\r\n for (const record of response.records) {\r\n news_articles.push(this.processNewsArticle(record));\r\n }\r\n\r\n const page = options?.page ?? 0;\r\n const total_records = +response.additional_data.total_records;\r\n\r\n return new EsolveNewsArticleList(\r\n news_articles,\r\n total_records,\r\n page,\r\n );\r\n }),\r\n );\r\n }\r\n\r\n public getNewsGroups(): Observable<EsolveNewsGroup[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveNewsGroupRecord[]>>(\r\n `${this.config.api_url}/get-news-groups.php`,\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const news_groups: EsolveNewsGroup[] = [];\r\n\r\n for (const record of response.records) {\r\n news_groups.push(new EsolveNewsGroup(\r\n record.id,\r\n record.name,\r\n record.description,\r\n record.sef_name,\r\n ));\r\n }\r\n\r\n return news_groups;\r\n }),\r\n );\r\n }\r\n\r\n private processNewsArticle(record: EsolveNewsArticleRecord): EsolveNewsArticle {\r\n return new EsolveNewsArticle(record);\r\n }\r\n\r\n private getNewsRecords(\r\n params: HttpParams,\r\n ): Observable<EsolveGetResponse<EsolveNewsArticleRecord[]>> {\r\n return this.http.get<EsolveGetResponse<EsolveNewsArticleRecord[]>>(\r\n `${this.config.api_url}/get-news.php`,\r\n { params },\r\n );\r\n }\r\n\r\n private parseOptions(options?: EsolveNewsArticleOptions): HttpParams {\r\n let params = new HttpParams();\r\n\r\n if (!options) {\r\n return params;\r\n }\r\n\r\n if (options.news_group_id) {\r\n params = params.set('news_group_id', options.news_group_id);\r\n } else if (options.news_group_sef) {\r\n params = params.set('news_group_sef', options.news_group_sef);\r\n }\r\n\r\n if (options.page) {\r\n params = params.set('page', options.page);\r\n }\r\n\r\n if (options.rows) {\r\n params = params.set('rows', options.rows);\r\n }\r\n\r\n if (options.feature_only) {\r\n params = params.set('feature_only', options.feature_only);\r\n }\r\n\r\n if (options.manufacturers_id) {\r\n params = params.set('manufacturers_id', options.manufacturers_id);\r\n }\r\n\r\n if (options.ranges_id) {\r\n params = params.set('ranges_id', options.ranges_id);\r\n }\r\n\r\n if (options.from_date) {\r\n params = params.set('from_date', options.from_date);\r\n }\r\n\r\n if (options.to_date) {\r\n params = params.set('to_date', options.to_date);\r\n }\r\n\r\n if (options.search_phrase) {\r\n params = params.set('search_phrase', options.search_phrase);\r\n }\r\n\r\n return params;\r\n }\r\n}\r\n","// Types\r\nexport * from './esolve-stock-image-size.type';\r\nexport * from './esolve-media-stock-item-list.type';\r\nexport * from './esolve-stock-unit-of-measure.type';\r\nexport * from './esolve-stock-sort-field.type';\r\nexport * from './esolve-media-stock-sort-field.type';\r\n","import { EsolveColourRecord } from '../interfaces';\r\n\r\nexport class EsolveColour {\r\n public id: number;\r\n public colour: string;\r\n public description: string;\r\n\r\n constructor(record: Partial<EsolveColourRecord>) {\r\n this.id = record.id ?? 0;\r\n this.colour = record.colour ?? '';\r\n this.description = record.description ?? '';\r\n }\r\n}\r\n","export class EsolveStockBadge {\r\n constructor(\r\n public id: number,\r\n public text: string,\r\n public identifier: string,\r\n public font_colour: string,\r\n public badge_colour: string,\r\n public sort_priority: number,\r\n ) { }\r\n}\r\n","/**\r\n * Price of eSolve stock item\r\n */\r\nexport class EsolveStockPrice {\r\n public taxed: boolean;\r\n\r\n /**\r\n * Create stock price instance\r\n *\r\n * @param base_price Price without tax\r\n * @param base_price_with_tax Price with tax\r\n * @param sell_price Price without tax and with discounts applied if applicable\r\n * @param sell_price_with_tax Price with tax and with discounts applied if applicable\r\n * @param tax_rate Tax rate of the item\r\n * @param taxed Whether tax has been applied\r\n */\r\n constructor(\r\n /**\r\n * Price without tax\r\n */\r\n public base_price: number = 0,\r\n\r\n /**\r\n * Price with tax\r\n */\r\n public base_price_with_tax: number = 0,\r\n\r\n /**\r\n * Price without tax and with discounts applied if applicable\r\n */\r\n public sell_price: number = 0,\r\n\r\n /**\r\n * Price with tax and with discounts applied if applicable\r\n */\r\n public sell_price_with_tax: number = 0,\r\n\r\n /**\r\n * Vat Rate for the item\r\n */\r\n public tax_rate: number = 0,\r\n\r\n taxed?: boolean,\r\n ) {\r\n if ((this.base_price === 0) && (this.sell_price > 0)) {\r\n this.base_price = this.sell_price;\r\n this.base_price_with_tax = this.sell_price_with_tax;\r\n } else if ((this.base_price > 0) && (this.sell_price === 0)) {\r\n this.sell_price = this.base_price;\r\n this.sell_price_with_tax = this.base_price_with_tax;\r\n }\r\n\r\n this.taxed = taxed ?? this.base_price !== this.base_price_with_tax;\r\n }\r\n}\r\n","import { EsolveStockLeadTimesRecord } from '../interfaces';\r\n\r\nexport class EsolveStockLeadTimes {\r\n public min: number = 0;\r\n public max: number = 0;\r\n\r\n constructor(lead_times: EsolveStockLeadTimesRecord) {\r\n this.min = lead_times.min;\r\n this.max = lead_times.max;\r\n }\r\n}\r\n","import { EsolveCustomFields } from '../../shared/custom-fields';\r\nimport { EsolveSeoDetails, EsolveSeoInfo } from '../../shared/seo';\r\n\r\nimport { EsolveCategoryTreeItem } from '../../category-tree';\r\nimport { EsolveManufacturer } from '../../manufacturers';\r\nimport { EsolveRange } from '../../ranges';\r\nimport { EsolveTag } from '../../tags';\r\nimport { EsolveTopic } from '../../topics';\r\n\r\nimport { EsolveStockImageSize, EsolveStockUnitOfMeasure } from '../types';\r\nimport { EsolveStockBaseRecord } from '../interfaces';\r\nimport { EsolveStockBadge } from './esolve-stock-badge.model';\r\nimport { EsolveStockPrice } from './esolve-stock-price.model';\r\nimport { EsolveColour } from './esolve-colour.model';\r\nimport { EsolveStockLeadTimes } from './esolve-stock-lead-times.model';\r\n\r\nexport class EsolveStockItemBase<T extends EsolveCustomFields = EsolveCustomFields> implements EsolveSeoDetails {\r\n /**\r\n * eSolve Generated ID\r\n */\r\n public id: number = 0;\r\n /**\r\n * Code identifying the stock item\r\n */\r\n public code: string = '';\r\n /**\r\n * Name of the stock item\r\n */\r\n public name: string = '';\r\n /**\r\n * Search engine friendly name\r\n */\r\n public sef_name: string = '';\r\n /**\r\n * Short description of stock item\r\n */\r\n public description: string = '';\r\n /**\r\n * Full description of stock item\r\n */\r\n public extended_description: string = '';\r\n /**\r\n * Active state\r\n */\r\n public active: boolean = false;\r\n /**\r\n * Featured state\r\n */\r\n public featured: boolean = false;\r\n /**\r\n * Quotable state\r\n */\r\n public allow_quotes: boolean = true;\r\n /**\r\n * Orderable state\r\n */\r\n public allow_orders: boolean = true;\r\n /**\r\n * Item must be collected, not delivery possible\r\n */\r\n public must_collect: boolean = false;\r\n /**\r\n * Item needs to be assembled after purchase\r\n */\r\n public requires_assembly: boolean = false;\r\n /**\r\n * The type of delivery category associated with the item\r\n */\r\n public delivery_category: string = 'regular_item';\r\n /**\r\n * Number of stock available\r\n */\r\n public amount_in_stock: number = 0;\r\n /**\r\n * Total items linked to the item as a recipe\r\n */\r\n public total_recipe_items: number = 0;\r\n /**\r\n * Height measured in meters (m)\r\n */\r\n public height: number = 0;\r\n /**\r\n * Width measured in meters (m)\r\n */\r\n public width: number = 0;\r\n /**\r\n * Length / depth measured in meters (m)\r\n */\r\n public length: number = 0;\r\n /**\r\n * Weight measured in kilograms (kg)\r\n */\r\n public weight: number = 0;\r\n /**\r\n * Units used to measure the quantity\r\n */\r\n public unit_of_measure: EsolveStockUnitOfMeasure = 'unit';\r\n /**\r\n * ID of default category linked to the stock item\r\n *\r\n * @deprecated Use `category.esolve_id` field instead\r\n */\r\n public category_id: string = '';\r\n /**\r\n * Default linked category\r\n */\r\n public category?: EsolveCategoryTreeItem;\r\n /**\r\n * ID of default subcategory linked to the stock item\r\n *\r\n * @deprecated Use `subcategory.esolve_id` field instead\r\n */\r\n public subcategory_id: number = 0;\r\n /**\r\n * Default linked subcategory\r\n */\r\n public subcategory?: EsolveCategoryTreeItem;\r\n /**\r\n * ID of linked manufacturer\r\n *\r\n * @deprecated Use `manufacturer.id` field instead\r\n */\r\n public manufacturers_id: number = 0;\r\n /**\r\n * Linked manufacturer\r\n */\r\n public manufacturer?: EsolveManufacturer;\r\n /**\r\n * ID of linked range\r\n *\r\n * @deprecated Use `range.id` field instead\r\n */\r\n public ranges_id: number = 0;\r\n /**\r\n * Linked range\r\n */\r\n public range?: EsolveRange;\r\n /**\r\n * Default price\r\n */\r\n public price: EsolveStockPrice;\r\n /**\r\n * SEO page details\r\n */\r\n public seo_details: EsolveSeoInfo;\r\n /**\r\n * Linked tags\r\n */\r\n public tags: EsolveTag[] = [];\r\n /**\r\n * Linked topics\r\n */\r\n public topics: EsolveTopic[] = [];\r\n /**\r\n * Stock badges\r\n */\r\n public badges: EsolveStockBadge[] = [];\r\n /**\r\n * Stock item custom fields.\r\n */\r\n public custom_fields?: T;\r\n /**\r\n * Colours\r\n */\r\n public colours: EsolveColour[] = [];\r\n /**\r\n * Stock Item Lead Times for supply\r\n */\r\n public lead_times?: EsolveStockLeadTimes;\r\n\r\n /**\r\n * Image filename\r\n */\r\n private image_name: string = '';\r\n\r\n /**\r\n * Path to tiny stock image\r\n */\r\n public get tiny_image_src(): string {\r\n return this.getImagePath('tiny');\r\n }\r\n\r\n /**\r\n * Path to thumbnail stock image\r\n */\r\n public get thumbnail_image_src(): string {\r\n return this.getImagePath('thumb');\r\n }\r\n\r\n /**\r\n * Path to small stock image\r\n */\r\n public get small_image_src(): string {\r\n return this.getImagePath('small');\r\n }\r\n\r\n /**\r\n * Path to big stock image\r\n */\r\n public get big_image_src(): string {\r\n return this.getImagePath('big');\r\n }\r\n\r\n /**\r\n * Path to original stock image\r\n */\r\n public get original_image_src(): string {\r\n return this.getImagePath('original');\r\n }\r\n\r\n public get available(): boolean {\r\n return (this.amount_in_stock > 0);\r\n }\r\n\r\n constructor(record: Partial<EsolveStockBaseRecord<T>> = {}) {\r\n let seo_title = '';\r\n let seo_keywords = '';\r\n let base_price = 0;\r\n let base_price_with_tax = 0;\r\n let sell_price = 0;\r\n let sell_price_with_tax = 0;\r\n\r\n if (record) {\r\n this.id = +(record.id ?? 0);\r\n this.code = record.code ?? '';\r\n this.name = record.name ?? '';\r\n this.sef_name = record.sef_name ?? '';\r\n this.description = record.description ?? '';\r\n this.extended_description = record.extended_description ?? '';\r\n this.image_name = record.image_name ?? '';\r\n this.category_id = record.category_id ?? '';\r\n this.subcategory_id = +(record.subcategory_id ?? 0);\r\n this.manufacturers_id = +(record.manufacturers_id ?? 0);\r\n this.ranges_id = +(record.ranges_id ?? 0);\r\n this.delivery_category = record.delivery_category ?? 'regular_item';\r\n\r\n this.must_collect = !!+(record.must_collect ?? false);\r\n this.requires_assembly = !!+(record.requires_assembly ?? false);\r\n this.active = !!+(record.is_active ?? false);\r\n this.featured = !!+(record.is_featured ?? false);\r\n this.allow_quotes = (record.allow_quotes ?? true);\r\n this.allow_orders = (record.allow_orders ?? true);\r\n\r\n this.amount_in_stock = +(record.onhand ?? 0);\r\n this.total_recipe_items = +(record.total_recipe_items ?? 0);\r\n\r\n this.height = +(record.height ?? 0);\r\n this.width = +(record.width ?? 0);\r\n this.length = +(record.length ?? 0);\r\n this.weight = +(record.weight ?? 0);\r\n\r\n if (record.unit_of_measure) {\r\n this.unit_of_measure = record.unit_of_measure;\r\n }\r\n\r\n base_price = +(record.regular_sellprice ?? 0);\r\n base_price_with_tax = +(record.regular_sellprice_inclusive ?? 0);\r\n sell_price = +(record.sellprice ?? 0);\r\n sell_price_with_tax = +(record.sellprice_inclusive ?? 0);\r\n\r\n if ((record.tags) && (record.tags.length > 0)) {\r\n for (const tag of record.tags) {\r\n this.tags.push(new EsolveTag(tag));\r\n }\r\n }\r\n\r\n if ((record.topics) && (record.topics.length > 0)) {\r\n for (const topic of record.topics) {\r\n this.topics.push(new EsolveTopic(topic));\r\n }\r\n }\r\n\r\n if ((record.badges) && (record.badges.length > 0)) {\r\n for (const badge of record.badges) {\r\n this.badges.push(new EsolveStockBadge(\r\n +badge.id,\r\n badge.text,\r\n badge.identifier,\r\n badge.font_colour,\r\n badge.badge_colour,\r\n +badge.sort_priority,\r\n ));\r\n }\r\n }\r\n\r\n if (record.category) {\r\n this.category = new EsolveCategoryTreeItem(\r\n record.category.type,\r\n record.category.id,\r\n record.category.parent_id,\r\n record.category.description,\r\n record.category.sef_description,\r\n record.category.short_description,\r\n record.category.sort_priority,\r\n record.category.active,\r\n record.category.display_only,\r\n record.category.image,\r\n record.category.seo_page_title,\r\n record.category.seo_keywords,\r\n record.category.seo_description,\r\n );\r\n }\r\n\r\n if (record.subcategory) {\r\n this.subcategory = new EsolveCategoryTreeItem(\r\n record.subcategory.type,\r\n record.subcategory.id,\r\n record.subcategory.parent_id,\r\n record.subcategory.description,\r\n record.subcategory.sef_description,\r\n record.subcategory.short_description,\r\n record.subcategory.sort_priority,\r\n record.subcategory.active,\r\n record.subcategory.display_only,\r\n record.subcategory.image,\r\n record.subcategory.seo_page_title,\r\n record.subcategory.seo_keywords,\r\n record.subcategory.seo_description,\r\n );\r\n }\r\n\r\n if (record.manufacturer) {\r\n this.manufacturer = new EsolveManufacturer(record.manufacturer);\r\n }\r\n\r\n if (record.range) {\r\n this.range = new EsolveRange(record.range);\r\n }\r\n\r\n if (record.colours && record.colours.length > 0) {\r\n for (const colour of record.colours) {\r\n this.colours.push(new EsolveColour(colour));\r\n }\r\n }\r\n\r\n if (record.lead_times) {\r\n this.lead_times = new EsolveStockLeadTimes(record.lead_times);\r\n }\r\n\r\n if (record.custom_fields) {\r\n this.custom_fields = record.custom_fields;\r\n }\r\n\r\n seo_title = record.seo_page_title ?? '';\r\n seo_keywords = record.seo_keywords ?? '';\r\n }\r\n\r\n this.price = new EsolveStockPrice(\r\n base_price,\r\n base_price_with_tax,\r\n sell_price,\r\n sell_price_with_tax,\r\n record.vat_rate,\r\n record.vat_item,\r\n );\r\n\r\n if (seo_title.trim() === '') {\r\n seo_title = this.name;\r\n }\r\n\r\n this.seo_details = new EsolveSeoInfo(\r\n seo_title,\r\n this.description,\r\n seo_keywords,\r\n );\r\n }\r\n\r\n public getImagePath(image_size: EsolveStockImageSize): string {\r\n if (this.image_name !== '') {\r\n return `/images/stock/${image_size}/${this.image_name}`;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","\r\nimport { EsolveCustomFields } from '../../shared/custom-fields';\r\n\r\nimport { EsolveDependantItemRecord } from '../interfaces';\r\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\r\n\r\nexport class EsolveDependantItem<T extends EsolveCustomFields = EsolveCustomFields> extends EsolveStockItemBase<T> {\r\n public qty: number = 0;\r\n public dependency_description: string = '';\r\n\r\n constructor(record?: Partial<EsolveDependantItemRecord<T>>) {\r\n super(record);\r\n\r\n this.qty = +(record?.qty ?? 0);\r\n this.dependency_description = record?.dependency_description ?? '';\r\n }\r\n}\r\n","import { EsolveCustomFields } from '../../shared/custom-fields';\r\n\r\nimport { EsolveStockGroupItemRecord } from '../interfaces';\r\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\r\n\r\nexport class EsolveStockGroupItem<T extends EsolveCustomFields = EsolveCustomFields> extends EsolveStockItemBase<T> {\r\n constructor(record?: Partial<EsolveStockGroupItemRecord<T>>) {\r\n super(record);\r\n }\r\n}\r\n","import { EsolveCustomFields } from '../../shared/custom-fields';\r\n\r\nimport { EsolveStockGroupItemRecord } from '../interfaces';\r\nimport { EsolveStockGroupItem } from './esolve-stock-group-item.model';\r\n\r\nexport class EsolveStockGroup<T extends EsolveCustomFields = EsolveCustomFields> {\r\n public items: EsolveStockGroupItem<T>[] = [];\r\n\r\n constructor(\r\n public group: string,\r\n records: EsolveStockGroupItemRecord<T>[] = [],\r\n ) {\r\n if (records.length > 0) {\r\n for (const record of records) {\r\n this.items.push(new EsolveStockGroupItem(record));\r\n }\r\n }\r\n }\r\n}\r\n","import { EsolveCustomFields } from '../../shared/custom-fields';\r\n\r\nimport { EsolveStockRecord } from '../interfaces';\r\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\r\nimport { EsolveDependantItem } from './esolve-dependant-item.model';\r\nimport { EsolveStockGroup } from './esolve-stock-group.model';\r\n\r\n/**\r\n * Stock Item object. It can be a service or a product (physical and/or digital).\r\n */\r\nexport class EsolveStockItem<T extends EsolveCustomFields = EsolveCustomFields> extends EsolveStockItemBase<T> {\r\n public group?: EsolveStockGroup<T>;\r\n public dependencies?: EsolveDependantItem<T>[];\r\n\r\n /**\r\n * Constructs an instance of EsolveStockItem\r\n */\r\n constructor(record?: Partial<EsolveStockRecord<T>>) {\r\n super(record);\r\n\r\n if (record?.group && record.grouped_items) {\r\n this.group = new EsolveStockGroup(\r\n record.group,\r\n record.grouped_items,\r\n );\r\n }\r\n\r\n if (record?.dependencies) {\r\n this.dependencies = [];\r\n\r\n for (const dependant of record.dependencies) {\r\n this.dependencies.push(new EsolveDependantItem(dependant));\r\n }\r\n }\r\n }\r\n}\r\n","import { EsolveCustomFields } from '../../shared/custom-fields';\r\n\r\nimport { EsolveStockItem } from './esolve-stock-item.model';\r\n\r\n/**\r\n * Stock item object list\r\n */\r\nexport class EsolveStockItemList<T extends EsolveCustomFields = EsolveCustomFields> {\r\n constructor(\r\n public stock_items: EsolveStockItem<T>[],\r\n public total: number,\r\n public page: number,\r\n ) { }\r\n}\r\n","import { EsolveCustomFields } from '../../shared/custom-fields';\r\n\r\nimport { EsolveRecipeItemRecord } from '../interfaces';\r\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\r\n\r\nexport class EsolveRecipeStockItem<T extends EsolveCustomFields = EsolveCustomFields> extends EsolveStockItemBase<T> {\r\n public qty: number = 0;\r\n\r\n constructor(record?: Partial<EsolveRecipeItemRecord<T>>) {\r\n super(record);\r\n\r\n this.qty = +(record?.qty ?? 0);\r\n }\r\n}\r\n","import { EsolveCustomFields } from '../../shared/custom-fields';\r\n\r\nimport { EsolveLinkedStockRecord } from '../interfaces';\r\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\r\n\r\nexport class EsolveLinkedStockItem<T extends EsolveCustomFields = EsolveCustomFields> extends EsolveStockItemBase<T> {\r\n public qty: number = 0;\r\n\r\n constructor(record?: Partial<EsolveLinkedStockRecord<T>>) {\r\n super(record);\r\n\r\n this.qty = +(record?.qty ?? 0);\r\n }\r\n}\r\n","import { EsolveCustomFields } from '../../shared/custom-fields';\r\n\r\nimport { EsolveMediaStockItemRecord } from '../interfaces';\r\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\r\n\r\nexport class EsolveMediaStockItem<\r\n T extends EsolveCustomFields = EsolveCustomFields,\r\n> extends EsolveStockItemBase<T> {\r\n constructor(record?: Partial<EsolveMediaStockItemRecord<T>>) {\r\n super(record);\r\n }\r\n}\r\n","import { EsolveStockImageSize } from '../types';\r\n\r\nexport class EsolveStockImage {\r\n /**\r\n * Path to tiny stock image\r\n */\r\n public get tiny_src(): string {\r\n return this.getImagePath('tiny');\r\n }\r\n\r\n /**\r\n * Path to thumbnail stock image\r\n */\r\n public get thumbnail_src(): string {\r\n return this.getImagePath('thumb');\r\n }\r\n\r\n /**\r\n * Path to small stock image\r\n */\r\n public get small_src(): string {\r\n return this.getImagePath('small');\r\n }\r\n\r\n /**\r\n * Path to big stock image\r\n */\r\n public get big_src(): string {\r\n return this.getImagePath('big');\r\n }\r\n\r\n /**\r\n * Path to original stock image\r\n */\r\n public get original_src(): string {\r\n return this.getImagePath('original');\r\n }\r\n\r\n constructor(\r\n private image_name: string,\r\n ) {\r\n if (this.image_name === 'no_image.jpg') {\r\n this.image_name = '';\r\n }\r\n }\r\n\r\n public getImagePath(image_size: EsolveStockImageSize): string {\r\n if (this.image_name !== '') {\r\n return `/images/stock/${image_size}/${this.image_name}`;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","import { EsolveAdditionalStockImageRecord } from '../interfaces';\r\n\r\nexport class EsolveAdditionalStockImage {\r\n public id: number = 0;\r\n public type: string = '';\r\n public url: string = '';\r\n public name: string = '';\r\n public etag?: string;\r\n public key?: string;\r\n\r\n constructor(record?: Partial<EsolveAdditionalStockImageRecord>) {\r\n if (record) {\r\n this.id = record.id ?? 0;\r\n this.type = record.type ?? '';\r\n this.url = record.url ?? '';\r\n this.name = record.name ?? '';\r\n\r\n if (record.etag) {\r\n this.etag = record.etag;\r\n }\r\n\r\n if (record.key) {\r\n this.key = record.key;\r\n }\r\n }\r\n }\r\n}\r\n","import { EsolveStockImageCollectionRecord } from '../interfaces';\r\nimport { EsolveAdditionalStockImage } from './esolve-additional-stock-image.model';\r\nimport { EsolveStockImage } from './esolve-stock-image.model';\r\n\r\nexport class EsolveStockImageCollection {\r\n public default_image: EsolveStockImage;\r\n public alt_images: EsolveStockImage[] = [];\r\n public additional_images: EsolveAdditionalStockImage[] = [];\r\n\r\n constructor(record?: Partial<EsolveStockImageCollectionRecord>) {\r\n this.default_image = new EsolveStockImage(\r\n record?.default_image ?? '',\r\n );\r\n\r\n if (!record) {\r\n return;\r\n }\r\n\r\n if (record.alt_images && record.alt_images.length > 0) {\r\n for (const alt_image_name of record.alt_images) {\r\n const alt_image = new EsolveStockImage(alt_image_name);\r\n\r\n this.alt_images.push(alt_image);\r\n }\r\n }\r\n\r\n if (record.additional_images && record.additional_images.length > 0) {\r\n for (const additional_image_record of record.additional_images) {\r\n const additional_image = new EsolveAdditionalStockImage(\r\n additional_image_record,\r\n );\r\n\r\n this.additional_images.push(additional_image);\r\n }\r\n }\r\n }\r\n};\r\n","// Classes\r\nexport * from './esolve-colour.model';\r\nexport * from './esolve-stock-item.model';\r\nexport * from './esolve-stock-price.model';\r\nexport * from './esolve-stock-badge.model';\r\nexport * from './esolve-stock-group.model';\r\nexport * from './esolve-stock-item-base.model';\r\nexport * from './esolve-stock-item-list.model';\r\nexport * from './esolve-stock-group-item.model';\r\nexport * from './esolve-recipe-stock-item.model';\r\nexport * from './esolve-linked-stock-item.model';\r\nexport * from './esolve-dependant-item.model';\r\nexport * from './esolve-stock-lead-times.model';\r\nexport * from './esolve-media-stock-item.model';\r\nexport * from './esolve-stock-image.model';\r\nexport * from './esolve-stock-image-collection.model';\r\nexport * from './esolve-additional-stock-image.model';\r\n","import { EsolveAdditionalStockImageRecord } from './esolve-additional-stock-image-record.interface';\r\n\r\nexport interface EsolveStockImageCollectionRecord {\r\n default_image: string;\r\n alt_images: string[];\r\n additional_images: EsolveAdditionalStockImageRecord[];\r\n};\r\n","// Interfaces\r\nexport * from './esolve-stock-record.interface';\r\nexport * from './esolve-colour-record.interface';\r\nexport * from './esolve-stock-base-record.interface';\r\nexport * from './esolve-stock-item-options.interface';\r\nexport * from './esolve-stock-badge-record.interface';\r\nexport * from './esolve-recipe-item-record.interface';\r\nexport * from './esolve-stock-filter-options.interface';\r\nexport * from './esolve-recipe-stock-options.interface';\r\nexport * from './esolve-linked-stock-record.interface';\r\nexport * from './esolve-stock-group-item-record.interface';\r\nexport * from './esolve-stock-linked-category-record.interface';\r\nexport * from './esolve-stock-lead-times-record.interface';\r\nexport * from './esolve-stock-image-collection-record.interface';\r\nexport * from './esolve-additional-stock-image-record.interface';\r\nexport * from './esolve-media-stock-item-record.interface';\r\nexport * from './esolve-media-stock-item-options.interface';\r\nexport * from './esolve-dependant-item-record.interface';\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\n\r\nimport { EsolveList } from '../shared/esolve-list.model';\r\nimport { EsolveGetResponse } from '../shared/response';\r\nimport { EsolveCustomFields } from '../shared/custom-fields';\r\nimport {\r\n EsolveFilterFactory,\r\n EsolveFilterList,\r\n EsolveFilterRecordList,\r\n EsolveMultipleSelectFilter,\r\n EsolveRangeFilter,\r\n EsolveSingleSelectFilter,\r\n} from '../shared/filters';\r\n\r\nimport { EsolveMediaStockItemList } from './types';\r\nimport {\r\n EsolveStockRecord,\r\n EsolveStockItemOptions,\r\n EsolveRecipeItemRecord,\r\n EsolveLinkedStockRecord,\r\n EsolveRecipeStockOptions,\r\n EsolveMediaStockItemRecord,\r\n EsolveMediaStockItemOptions,\r\n EsolveStockImageCollectionRecord,\r\n EsolveStockFilterOptions,\r\n} from './interfaces';\r\nimport {\r\n EsolveStockItem,\r\n EsolveStockItemList,\r\n EsolveMediaStockItem,\r\n EsolveRecipeStockItem,\r\n EsolveLinkedStockItem,\r\n EsolveStockImageCollection,\r\n} from './classes';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveStockService<T extends EsolveCustomFields = EsolveCustomFields> {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n /**\r\n * Retrieves the stock record from the eSolve instance using the code.\r\n *\r\n * @param code eSolve stock code\r\n */\r\n public getStockItem(code: string): Observable<EsolveStockItem<T>> {\r\n const params = new HttpParams({\r\n fromObject: {\r\n code,\r\n },\r\n });\r\n\r\n return this.getStockRecords(params).pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const stockRecord = response.records[0];\r\n\r\n return this.processStockItem(stockRecord);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves the stock record from the eSolve instance using the SEF name.\r\n *\r\n * @param sef_name SEF name of the stock item\r\n */\r\n public getStockItemFromSEF(sef_name: string): Observable<EsolveStockItem<T>> {\r\n const params = new HttpParams({\r\n fromObject: {\r\n sef_name,\r\n },\r\n });\r\n\r\n return this.getStockRecords(params).pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const stockRecord = response.records[0];\r\n\r\n return this.processStockItem(stockRecord);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves list of stock from the eSolve instance using info provided\r\n *\r\n * @param options Stock filter options\r\n */\r\n public getStockItems(\r\n options: EsolveStockItemOptions,\r\n ): Observable<EsolveStockItemList<T>> {\r\n let params = new HttpParams();\r\n\r\n if (options.page) {\r\n params = params.set('page', options.page);\r\n }\r\n\r\n if (options.rows) {\r\n params = params.set('rows', options.rows);\r\n }\r\n\r\n if (options.sort) {\r\n const sort = options.sort;\r\n\r\n if (sort.field) {\r\n params = params.set('sort', sort.field);\r\n }\r\n\r\n if (sort.order) {\r\n params = params.set('order', sort.order);\r\n }\r\n }\r\n\r\n if (options.search_phrase) {\r\n params = params.set('search_phrase', options.search_phrase);\r\n }\r\n\r\n if (options.display_only) {\r\n params = params.set('display_only', options.display_only);\r\n }\r\n\r\n if (options.is_active) {\r\n params = params.set('is_active', options.is_active);\r\n }\r\n\r\n if (options.category_id) {\r\n params = params.set('category_id', options.category_id);\r\n }\r\n\r\n if (options.subcategory_id) {\r\n params = params.set('subcategory_id', options.subcategory_id);\r\n }\r\n\r\n if (options.manufacturers_id) {\r\n params = params.set('manufacturers_id', options.manufacturers_id);\r\n }\r\n\r\n if (options.ranges_id) {\r\n params = params.set('ranges_id', options.ranges_id);\r\n }\r\n\r\n if (options.specials_id) {\r\n params = params.set('specials_id', options.specials_id);\r\n }\r\n\r\n if (options.tag_id_list && options.tag_id_list.length > 0) {\r\n params = params.set('tag_id', options.tag_id_list.join(','));\r\n }\r\n\r\n if (options.topic_id_list && options.topic_id_list.length > 0) {\r\n params = params.set('topic_id', options.topic_id_list.join(','));\r\n }\r\n\r\n if (options.filters) {\r\n let filters = options.filters;\r\n\r\n if (!Array.isArray(filters)) {\r\n filters = EsolveFilterFactory.covertFromObj(filters);\r\n }\r\n\r\n params = EsolveFilterFactory.convertToHttpParams(filters, params);\r\n }\r\n\r\n return this.getStockRecords(params).pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const stockItems: EsolveStockItem<T>[] = [];\r\n\r\n response.records.forEach((stockRecord) => {\r\n stockItems.push(this.processStockItem(stockRecord));\r\n });\r\n\r\n return new EsolveStockItemList(\r\n stockItems,\r\n +response.additional_data.total_records,\r\n options.page ?? 0,\r\n );\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve list of stock items linked to a stock item from the eSolve API\r\n *\r\n * @param code Stock item code\r\n */\r\n public getLinkedItems(\r\n code: string,\r\n ): Observable<EsolveLinkedStockItem<T>[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveLinkedStockRecord<T>[]>>(\r\n `${this.config.api_url}/get-linked-items.php`,\r\n { params: { code } },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n return this.processLinkedItems(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve list of stock items on a recipe from the eSolve API\r\n *\r\n * @param code Stock item code\r\n */\r\n public getRecipeItems(\r\n code: string,\r\n options?: EsolveRecipeStockOptions,\r\n ): Observable<EsolveRecipeStockItem<T>[]> {\r\n let params = new HttpParams().set('code', code);\r\n\r\n if (options) {\r\n if (options.page) {\r\n params = params.set('page', options.page);\r\n }\r\n\r\n if (options.rows) {\r\n params = params.set('rows', options.rows);\r\n }\r\n\r\n if (options.sort) {\r\n const sort = options.sort;\r\n\r\n if (sort.field) {\r\n params = params.set('sort', sort.field);\r\n }\r\n\r\n if (sort.order) {\r\n params = params.set('order', sort.order);\r\n }\r\n }\r\n }\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveRecipeItemRecord<T>[]>>(\r\n `${this.config.api_url}/get-recipe-items.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n return this.processRecipeItems(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve list of stock items linked to a stock item from the eSolve API\r\n *\r\n * @param options Filter options\r\n */\r\n public getMediaLinkedItems(\r\n options: EsolveMediaStockItemOptions,\r\n ): Observable<EsolveMediaStockItemList<T>> {\r\n let params = new HttpParams({\r\n fromObject: {\r\n rows: options.rows ?? 0,\r\n page: options.page ?? 0,\r\n ranges_id: options.ranges_id ?? 0,\r\n manufacturers_id: options.manufacturers_id ?? 0,\r\n display_only: options.display_only ?? false,\r\n is_active: options.is_active ?? true,\r\n },\r\n });\r\n\r\n if (options.sort) {\r\n const sort = options.sort;\r\n\r\n if (sort.field) {\r\n params = params.set('sort', sort.field);\r\n }\r\n\r\n if (sort.order) {\r\n params = params.set('order', sort.order);\r\n }\r\n }\r\n\r\n if (options.media_identifier) {\r\n params = params.append('media_identifier', options.media_identifier);\r\n }\r\n\r\n if (options.media_id) {\r\n params = params.append('media_id', options.media_id);\r\n }\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveMediaStockItemRecord<T>[]>>(\r\n `${this.config.api_url}/get-media-linked-items.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const items = this.processMediaStockItems(response.records);\r\n\r\n return new EsolveList(\r\n items,\r\n options.page,\r\n options.rows,\r\n +response.additional_data.total_records,\r\n );\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves the full image collection of a stock item\r\n *\r\n * @param code Stock item code\r\n */\r\n public getStockImageCollection(code: string): Observable<EsolveStockImageCollection> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveStockImageCollectionRecord>>(\r\n `${this.config.api_url}/get-item-image-collection.php`,\r\n { params: { code } },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const collection = new EsolveStockImageCollection(\r\n response.records,\r\n );\r\n\r\n return collection;\r\n }),\r\n );\r\n }\r\n\r\n public getStockFilters(options: EsolveStockFilterOptions): Observable<EsolveFilterList> {\r\n let params = new HttpParams({\r\n fromObject: {\r\n category_id: options.category_id ?? '',\r\n subcategory_id: options.subcategory_id ?? 0,\r\n ranges_id: options.ranges_id ?? 0,\r\n manufacturers_id: options.manufacturers_id ?? 0,\r\n fields: options.fields.join(','),\r\n },\r\n });\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveFilterRecordList>>(\r\n `${this.config.api_url}/get-item-filters.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const filters = [];\r\n\r\n for (const record of response.records) {\r\n let filter = null;\r\n\r\n if (record.type === 'range') {\r\n filter = new EsolveRangeFilter(record.field, +record.min, +record.max);\r\n } else if (record.type === 'single') {\r\n filter = new EsolveSingleSelectFilter(record.field, record.values);\r\n } else if (record.type === 'multiple') {\r\n filter = new EsolveMultipleSelectFilter(record.field, record.values);\r\n }\r\n\r\n if (filter) {\r\n filters.push(filter);\r\n }\r\n }\r\n\r\n return filters;\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Processes the eSolve stock item record and converts it to an object.\r\n *\r\n * @param record eSolve stock item record\r\n */\r\n private processStockItem(record: EsolveStockRecord<T>): EsolveStockItem<T> {\r\n return new EsolveStockItem<T>(record);\r\n }\r\n\r\n /**\r\n * Processes the linked eSolve stock item records and converts them to objects.\r\n *\r\n * @param records Linked eSolve stock item records\r\n */\r\n private processLinkedItems(\r\n records: EsolveLinkedStockRecord<T>[],\r\n ): EsolveLinkedStockItem<T>[] {\r\n const items: EsolveLinkedStockItem<T>[] = [];\r\n\r\n if (records.length > 0) {\r\n for (const record of records) {\r\n items.push(new EsolveLinkedStockItem<T>(record));\r\n }\r\n }\r\n\r\n return items;\r\n }\r\n\r\n /**\r\n * Processes the recipe eSolve stock item records and converts them to objects.\r\n *\r\n * @param records Recipe eSolve stock item records\r\n */\r\n private processRecipeItems(\r\n records: EsolveRecipeItemRecord<T>[],\r\n ): EsolveRecipeStockItem<T>[] {\r\n const items: EsolveRecipeStockItem<T>[] = [];\r\n\r\n if (records.length > 0) {\r\n for (const record of records) {\r\n items.push(new EsolveRecipeStockItem<T>(record));\r\n }\r\n }\r\n\r\n return items;\r\n }\r\n\r\n /**\r\n * Processes the linked eSolve stock item records and converts them to objects.\r\n *\r\n * @param records Linked eSolve stock item records\r\n */\r\n private processMediaStockItems(\r\n records: EsolveMediaStockItemRecord<T>[],\r\n ): EsolveMediaStockItem<T>[] {\r\n const items: EsolveMediaStockItem<T>[] = [];\r\n\r\n if (records.length > 0) {\r\n for (const record of records) {\r\n items.push(new EsolveMediaStockItem<T>(record));\r\n }\r\n }\r\n\r\n return items;\r\n }\r\n\r\n /**\r\n * Retrieves stock records from HTTP params.\r\n * @param params HTTP client parameters\r\n */\r\n private getStockRecords(\r\n params: HttpParams,\r\n ): Observable<EsolveGetResponse<EsolveStockRecord<T>[]>> {\r\n return this.http.get<EsolveGetResponse<EsolveStockRecord<T>[]>>(\r\n `${this.config.api_url}/get-items.php`,\r\n { params },\r\n );\r\n }\r\n}\r\n","import { EsolveSpecialImageRecord } from './esolve-special-image-record.interface';\r\n\r\nexport class EsolveSpecialImage {\r\n public id: number;\r\n public width: number;\r\n public height: number;\r\n public src: string;\r\n\r\n constructor(record: EsolveSpecialImageRecord) {\r\n this.id = +record.id;\r\n this.width = +record.width;\r\n this.height = +record.height;\r\n this.src = record.src;\r\n }\r\n}\r\n","import { EsolveSpecialImage } from './esolve-special-image.model';\r\nimport { EsolveSpecialImageCollectionRecord } from './esolve-special-image-collection-record.interface';\r\n\r\nexport class EsolveSpecialImageCollection {\r\n public thumb?: EsolveSpecialImage[];\r\n public banner?: EsolveSpecialImage[];\r\n public banner_mobile?: EsolveSpecialImage[];\r\n\r\n constructor(\r\n public image_container: string,\r\n images: EsolveSpecialImageCollectionRecord,\r\n ) {\r\n if (images.thumb && images.thumb.length > 0) {\r\n this.thumb = [];\r\n\r\n for (const image_record of images.thumb) {\r\n this.thumb.push(new EsolveSpecialImage(image_record));\r\n }\r\n }\r\n\r\n if (images.banner && images.banner.length > 0) {\r\n this.banner = [];\r\n\r\n for (const image_record of images.banner) {\r\n this.banner.push(new EsolveSpecialImage(image_record));\r\n }\r\n }\r\n\r\n if (images.banner_mobile && images.banner_mobile.length > 0) {\r\n this.banner_mobile = [];\r\n\r\n for (const image_record of images.banner_mobile) {\r\n this.banner_mobile.push(new EsolveSpecialImage(image_record));\r\n }\r\n }\r\n }\r\n}\r\n","export class EsolveSpecialDates {\r\n constructor(\r\n public start: Date,\r\n public end: Date,\r\n ) { }\r\n}\r\n","import { EsolveLinkedAsset } from '../shared/assets';\r\nimport { EsolveSeoInfo } from '../shared/seo/esolve-seo-info.model';\r\nimport { EsolveSeoDetails } from '../shared/seo/esolve-seo-details.interface';\r\nimport { EsolveSpecialImageCollection } from './esolve-special-image-collection.model';\r\nimport { EsolveSpecialRecord } from './esolve-special-record.interface';\r\nimport { EsolveSpecialDates } from './esolve-special-dates.model';\r\n\r\nexport class EsolveSpecial implements EsolveSeoDetails {\r\n public id: number;\r\n public identifier: string;\r\n public sort_priority: number;\r\n public name: string;\r\n public description: string;\r\n public discount_type: number;\r\n public special_type: string;\r\n public location_id: number;\r\n public active: boolean;\r\n public featured: boolean;\r\n public assets: EsolveLinkedAsset[];\r\n public seo_details: EsolveSeoInfo;\r\n public images?: EsolveSpecialImageCollection;\r\n public dates?: EsolveSpecialDates;\r\n\r\n constructor(record: EsolveSpecialRecord) {\r\n this.id = +record.id;\r\n this.identifier = record.identifier;\r\n this.sort_priority = +record.sort_priority;\r\n this.name = record.name;\r\n this.description = record.description;\r\n this.discount_type = +record.discount_type;\r\n this.special_type = record.special_type;\r\n this.location_id = +record.location_id;\r\n this.active = !!+record.active;\r\n this.featured = !!+record.featured;\r\n this.assets = [];\r\n\r\n if (record.assets.length > 0) {\r\n for (const asset_record of record.assets) {\r\n this.assets.push(new EsolveLinkedAsset(asset_record));\r\n }\r\n }\r\n\r\n if (\r\n record.images &&\r\n (\r\n (\r\n record.images.thumb &&\r\n record.images.thumb.length > 0\r\n ) ||\r\n (\r\n record.images.banner &&\r\n record.images.banner.length > 0\r\n ) ||\r\n (\r\n record.images.banner_mobile &&\r\n record.images.banner_mobile.length > 0\r\n )\r\n ) &&\r\n record.image_container.trim() !== ''\r\n ) {\r\n this.images = new EsolveSpecialImageCollection(\r\n record.image_container,\r\n record.images,\r\n );\r\n }\r\n\r\n const start_date = new Date(+record.from_date_timestamp * 1000);\r\n const end_date = new Date(+record.to_date_timestamp * 1000);\r\n\r\n this.dates = new EsolveSpecialDates(start_date, end_date);\r\n\r\n if (record.seo_page_title.trim() === '') {\r\n record.seo_page_title = this.name;\r\n }\r\n\r\n this.seo_details = new EsolveSeoInfo(\r\n record.seo_page_title,\r\n record.seo_description,\r\n record.seo_keywords,\r\n );\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\nimport { Observable, of } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveSpecial } from './esolve-special.model';\r\nimport { EsolveSpecialOptions } from './esolve-special-options.interface';\r\nimport { EsolveSpecialRecord } from './esolve-special-record.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveSpecialsService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n public getSpecial(specials_id: number): Observable<EsolveSpecial> {\r\n const params = new HttpParams({\r\n fromObject: { specials_id },\r\n });\r\n\r\n return this.getSpecialSingle(params);\r\n }\r\n\r\n public getSpecialFromIdentifier(identifier: string): Observable<EsolveSpecial> {\r\n const params = new HttpParams({\r\n fromObject: { identifier },\r\n });\r\n\r\n return this.getSpecialSingle(params);\r\n }\r\n\r\n public getSpecials(options?: EsolveSpecialOptions): Observable<EsolveSpecial[]> {\r\n let params = new HttpParams();\r\n\r\n if (options?.featured_only) {\r\n params = params.set('featured_only', options.featured_only);\r\n }\r\n\r\n if (options?.image_container) {\r\n params = params.set('image_container', options.image_container);\r\n }\r\n\r\n if (options?.location_id) {\r\n params = params.set('location_id', options.location_id);\r\n }\r\n\r\n if (options?.special_type) {\r\n params = params.set('special_type', options.special_type);\r\n }\r\n\r\n return this.getSpecialRecords(params).pipe(\r\n map((records) => {\r\n const specials: EsolveSpecial[] = [];\r\n\r\n for (const record of records) {\r\n specials.push(this.processSpecial(record));\r\n }\r\n\r\n return specials;\r\n }),\r\n catchError(() => {\r\n return of<EsolveSpecial[]>([]);\r\n }),\r\n );\r\n }\r\n\r\n private getSpecialSingle(params: HttpParams): Observable<EsolveSpecial> {\r\n return this.getSpecialRecords(params).pipe(\r\n map((records) => {\r\n const record = records[0];\r\n\r\n return this.processSpecial(record);\r\n }),\r\n );\r\n }\r\n\r\n private getSpecialRecords(params?: HttpParams): Observable<EsolveSpecialRecord[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveSpecialRecord[]>>(\r\n `${this.config.api_url}/get-specials.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n return response.records;\r\n }),\r\n );\r\n }\r\n\r\n private processSpecial(record: EsolveSpecialRecord): EsolveSpecial {\r\n return new EsolveSpecial(record);\r\n }\r\n}\r\n","// Only export the types that are accessible to the public API\r\nexport * from './esolve-card-data.interface';\r\nexport * from './esolve-payment-form-input.interface';\r\nexport * from './esolve-vault-response.interface';\r\nexport * from './esolve-vault-record.interface';\r\nexport * from './esolve-payment-response.interface';\r\nexport * from './esolve-payment-method-options.interface';\r\nexport * from './esolve-payment-method-record.interface';\r\nexport * from './esolve-payment-redirect-links.interface';\r\n","export class EsolveBankingDetails {\r\n constructor(\r\n public bank_name: string,\r\n public account_holder: string,\r\n public account: string,\r\n public account_type: string,\r\n public swift_number: string,\r\n public branch_code: string,\r\n ) { }\r\n}\r\n","import { EsolveIntegrationType } from '../types';\r\nimport { EsolvePaymentMethodRecord } from '../interfaces';\r\nimport { EsolveBankingDetails } from './esolve-banking-details.model';\r\n\r\nexport class EsolvePaymentMethod {\r\n public id: number;\r\n public location_id: number;\r\n public paymethod_name: string;\r\n public description: string;\r\n public display_banking_details: boolean;\r\n public currency_code: string;\r\n public merchant_id: string;\r\n public application_id: string;\r\n public api_signature: string;\r\n public is_gateway: boolean;\r\n public must_store_card_details: boolean;\r\n public allow_budget: boolean;\r\n public integration_type: EsolveIntegrationType;\r\n public bank_gateway_id: string;\r\n public accepted_card_types: string[];\r\n public post_transactions_to_gateway: boolean;\r\n public three_d_secure_url: string;\r\n public gateway_url: string;\r\n public generate_token_url: string;\r\n public widget_url: string;\r\n public successful_url: string;\r\n public failed_url: string;\r\n public enable_callback: boolean;\r\n public live: boolean;\r\n public default_module_id: number;\r\n public service_provider: string;\r\n public on_account: boolean;\r\n public sort_priority: number;\r\n public image_url: string;\r\n\r\n public banking_details: EsolveBankingDetails;\r\n\r\n constructor(record: EsolvePaymentMethodRecord) {\r\n this.id = +record.id;\r\n this.location_id = +record.location_id;\r\n this.paymethod_name = record.paymethod_name;\r\n this.description = record.description;\r\n this.display_banking_details = !!+record.display_banking_details;\r\n this.currency_code = record.currency_code;\r\n this.merchant_id = record.merchant_id;\r\n this.application_id = record.application_id;\r\n this.api_signature = record.api_signature;\r\n this.is_gateway = !!+record.is_gateway;\r\n this.must_store_card_details = !!+record.must_store_card_details;\r\n this.allow_budget = !!+record.allow_budget;\r\n this.integration_type = record.integration_type;\r\n this.bank_gateway_id = record.bank_gateway_id;\r\n this.accepted_card_types = record.accepted_card_types;\r\n this.post_transactions_to_gateway = !!+record.post_transactions_to_gateway;\r\n this.three_d_secure_url = record.three_d_secure_url;\r\n this.gateway_url = record.gateway_url;\r\n this.generate_token_url = record.generate_token_url;\r\n this.widget_url = record.widget_url;\r\n this.successful_url = record.successful_url;\r\n this.failed_url = record.failed_url;\r\n this.enable_callback = !!+record.enable_callback;\r\n this.live = !!+record.live;\r\n this.default_module_id = +record.default_module_id;\r\n this.service_provider = record.service_provider;\r\n this.on_account = !!+record.on_account;\r\n this.sort_priority = +record.sort_priority;\r\n this.image_url = record.image_url;\r\n\r\n this.banking_details = new EsolveBankingDetails(\r\n record.bank_name,\r\n record.account_holder,\r\n record.account,\r\n record.account_type,\r\n record.swift_number,\r\n record.branch_code,\r\n );\r\n }\r\n}\r\n","import { EsolveResponseResult } from '../../shared/response';\r\n\r\nimport { EsolveServiceProvider } from '../types';\r\nimport { EsolvePaymentResponse, EsolvePaymentFormInput } from '../interfaces';\r\n\r\nexport class EsolvePaymentResult extends EsolveResponseResult {\r\n public gateway_error_message: string;\r\n public redirect_required: boolean = false;\r\n public service_provider?: EsolveServiceProvider;\r\n public redirect_url?: string;\r\n /**\r\n * Form post variables\r\n *\r\n * Not available to SnapScan\r\n */\r\n public form_inputs?: EsolvePaymentFormInput[];\r\n /**\r\n * Form post content type\r\n *\r\n * Not available to SnapScan\r\n */\r\n public form_enctype?: string;\r\n /**\r\n * QR code image url\r\n *\r\n * Only available to SnapScan integrations\r\n */\r\n public qr_code_url?: string;\r\n\r\n constructor(response: EsolvePaymentResponse) {\r\n super(response);\r\n\r\n if (typeof response.service_provider !== 'undefined') {\r\n this.service_provider = response.service_provider;\r\n }\r\n\r\n if (typeof response.redirect_required !== 'undefined') {\r\n this.redirect_required = response.redirect_required;\r\n }\r\n\r\n this.gateway_error_message = response.gateway_error_message ?? '';\r\n\r\n // Check if redirect settings need to be set\r\n if (this.redirect_required && this.service_provider) {\r\n if (typeof response.redirect_url !== 'undefined') {\r\n this.redirect_url = response.redirect_url;\r\n }\r\n\r\n // Check integration specific settings\r\n if (this.service_provider === 'snapscan') {\r\n // QR code scan is required\r\n if (typeof response.qr_code_url !== 'undefined') {\r\n this.qr_code_url = response.qr_code_url;\r\n }\r\n } else {\r\n // Normal form posting redirect\r\n if (typeof response.form_inputs !== 'undefined') {\r\n this.form_inputs = response.form_inputs;\r\n }\r\n\r\n if (typeof response.form_enctype !== 'undefined') {\r\n this.form_enctype = response.form_enctype;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { EsolveResponseResult } from '../../shared/response';\r\n\r\nimport { EsolveVaultResponse } from '../interfaces';\r\n\r\nexport class EsolveVaultItemResult extends EsolveResponseResult {\r\n public id: number;\r\n public token?: string;\r\n public card_valid?: boolean;\r\n public card_details_validated?: boolean;\r\n public gateway_error_message?: string;\r\n\r\n constructor(response: EsolveVaultResponse) {\r\n super(response);\r\n\r\n this.id = +response.esolve_id;\r\n\r\n if (typeof response.token !== 'undefined') {\r\n this.token = response.token;\r\n }\r\n\r\n if (typeof response.card_valid !== 'undefined') {\r\n this.card_valid = response.card_valid;\r\n }\r\n\r\n if (typeof response.card_details_validated !== 'undefined') {\r\n this.card_details_validated = response.card_details_validated;\r\n }\r\n\r\n if (typeof response.gateway_error_message !== 'undefined') {\r\n this.gateway_error_message = response.gateway_error_message;\r\n }\r\n }\r\n}\r\n","export class EsolveVaultItem {\r\n private expiry: Date;\r\n\r\n public get expiry_month(): string {\r\n const month = this.expiry.getMonth() + 1;\r\n\r\n return month.toString().padStart(2, '0');\r\n }\r\n\r\n public get expiry_year(): number {\r\n return this.expiry.getFullYear();\r\n }\r\n\r\n public get masked_number(): string {\r\n return this.last4.padStart(19, '**** ');\r\n }\r\n\r\n constructor(\r\n public id: number,\r\n public payment_methods_id: number,\r\n public last4: string,\r\n public brand: string,\r\n expiry_timestamp: number,\r\n ) {\r\n this.expiry = new Date(expiry_timestamp * 1000);\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { EsolveErrorHandlerService } from '../shared/errors/esolve-error-handler.service';\r\nimport { EsolveResult } from '../shared/esolve-result.model';\r\nimport {\r\n EsolveDeleteResponse,\r\n EsolveGetResponse,\r\n EsolveResponseHandlerService,\r\n EsolveSetResponse,\r\n} from '../shared/response';\r\n\r\nimport {\r\n EsolvePaymentMethod,\r\n EsolvePaymentResult,\r\n EsolveVaultItem,\r\n EsolveVaultItemResult,\r\n} from './classes';\r\nimport {\r\n EsolveCardData,\r\n EsolvePaymentMethodOptions,\r\n EsolvePaymentMethodRecord,\r\n EsolvePaymentRedirectLinks,\r\n EsolvePaymentResponse,\r\n EsolveVaultRecord,\r\n EsolveVaultResponse,\r\n} from './interfaces';\r\nimport { EsolvePaymentSetBody } from './interfaces/esolve-payment-set-body.interface';\r\nimport { EsolvePaymentStatus } from './interfaces/esolve-payment-status.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolvePaymentService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n private errorHandler: EsolveErrorHandlerService,\r\n private responseHandler: EsolveResponseHandlerService,\r\n ) { }\r\n\r\n /**\r\n * Retrieves a list of payment methods.\r\n *\r\n * @param options Filter options\r\n *\r\n * @returns An `Observable` with an array of payment methods\r\n */\r\n public getPaymentMethods(options?: EsolvePaymentMethodOptions): Observable<EsolvePaymentMethod[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolvePaymentMethodRecord[]>>(\r\n `${this.config.api_url}/get-payment-methods.php`,\r\n { params: { ...options } },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processPaymentMethods(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve the payment status of the specified transaction\r\n *\r\n * @param transaction_id ID of the transaction\r\n *\r\n * @returns An `Observable` with the success status of the payment\r\n */\r\n public getPaymentStatus(transaction_id: number): Observable<boolean> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolvePaymentStatus>>(\r\n `${this.config.api_url}/get-payment-status.php`,\r\n { params: { cart_id: transaction_id } },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return response.records.success;\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves a list of saved cards from the vault.\r\n *\r\n * @param payment_methods_id eSolve ID of a payment method\r\n *\r\n * @returns An `Observable` with an array of saved bank cards\r\n */\r\n public getVault(payment_methods_id?: number): Observable<EsolveVaultItem[]> {\r\n let params = new HttpParams();\r\n\r\n if (typeof payment_methods_id !== 'undefined') {\r\n params = params.set('payment_methods_id', payment_methods_id);\r\n }\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveVaultRecord[]>>(\r\n `${this.config.api_url}/get-vault.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processVaultItems(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Sets a new card in the vault OR updates an existing one.\r\n *\r\n * @param payment_methods_id Selected payment method\r\n * @param card_data Information of bank card\r\n *\r\n * @returns An `Observable` with the result of the vault set.\r\n */\r\n public setVaultItem(\r\n payment_methods_id: number,\r\n card_data: EsolveCardData,\r\n ): Observable<EsolveVaultItemResult> {\r\n const body = {\r\n vault: {\r\n payment_methods_id,\r\n card_number: card_data.card_number,\r\n card_name: card_data.name,\r\n card_cvv: card_data.cvv,\r\n card_expiry: this.generateExpiry(card_data),\r\n },\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveVaultResponse>>(\r\n `${this.config.api_url}/set-vault.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => new EsolveVaultItemResult(response),\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-vault', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Delete a card in the vault\r\n *\r\n * @param id ID of the vault item\r\n *\r\n * @returns An `Observable` with the result of the vault delete.\r\n */\r\n public deleteVaultItem(id: number): Observable<EsolveResult> {\r\n return this.http\r\n .delete<EsolveDeleteResponse>(\r\n `${this.config.api_url}/delete-vault.php`,\r\n {\r\n params: { id },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => {\r\n if (\r\n (http_response.result === undefined) ||\r\n (http_response.result === null) ||\r\n (http_response.result.status !== 'success')\r\n ) {\r\n throw http_response;\r\n }\r\n\r\n return new EsolveResult(\r\n http_response.result.status,\r\n http_response.result.code,\r\n http_response.result.message,\r\n );\r\n }),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpDeleteError(\r\n 'delete-vault',\r\n errorRes,\r\n );\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Sets the payment for the specified transaction using selected payment\r\n * method.\r\n *\r\n * @param transaction_id eSolve ID to the transaction\r\n * @param payment_methods_id eSolve ID to the selected payment method\r\n * @param card ID of selected card from the vault or information to a brand new card\r\n *\r\n * @returns An `Observable` with the result of the payment\r\n */\r\n public setPayment(\r\n transaction_id: number,\r\n payment_methods_id: number,\r\n card?: EsolveCardData | number,\r\n links?: EsolvePaymentRedirectLinks,\r\n ): Observable<EsolvePaymentResult> {\r\n const body: EsolvePaymentSetBody = {\r\n payment: {\r\n cart_id: transaction_id,\r\n payment_methods_id,\r\n },\r\n };\r\n\r\n if (card) {\r\n if (typeof card === 'number') {\r\n body.payment.user_vault_id = card;\r\n } else {\r\n body.card = {\r\n card_number: card.card_number,\r\n card_name: card.name,\r\n card_cvv: card.cvv,\r\n card_expiry: this.generateExpiry(card),\r\n };\r\n }\r\n }\r\n\r\n if (links) {\r\n body.links = links;\r\n }\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolvePaymentResponse>>(\r\n `${this.config.api_url}/set-payment.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => new EsolvePaymentResult(response),\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-payment', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Processes the eSolve payment method records.\r\n *\r\n * @param records Records to process\r\n *\r\n * @returns An array of processed payment methods.\r\n */\r\n private processPaymentMethods(records: EsolvePaymentMethodRecord[]): EsolvePaymentMethod[] {\r\n const payment_methods: EsolvePaymentMethod[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n const payment_method = new EsolvePaymentMethod(record);\r\n\r\n payment_methods.push(payment_method);\r\n }\r\n }\r\n\r\n return payment_methods;\r\n }\r\n\r\n /**\r\n * Processes the eSolve vault records.\r\n *\r\n * @param records Records to process\r\n *\r\n * @returns An array of processed vault items (a.k.a. cards)\r\n */\r\n private processVaultItems(records: EsolveVaultRecord[]): EsolveVaultItem[] {\r\n const vault: EsolveVaultItem[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n const vault_item = new EsolveVaultItem(\r\n +record.id,\r\n +record.payment_methods_id,\r\n record.last4,\r\n record.brand,\r\n record.expiry_timestamp,\r\n );\r\n\r\n vault.push(vault_item);\r\n }\r\n }\r\n\r\n return vault;\r\n }\r\n\r\n /**\r\n * Generate a concatenated string with the expiry month and year\r\n *\r\n * @param card_data Credit card data\r\n *\r\n * @returns Expiry string\r\n */\r\n private generateExpiry(card_data: EsolveCardData): string {\r\n const month_string = card_data.expiry_month.padStart(2, '0');\r\n const year_string = card_data.expiry_year.padStart(4, '0');\r\n\r\n return `${month_string}${year_string}`;\r\n }\r\n}\r\n","import { EsolveShippingLocation } from './esolve-shipping-location.type';\r\nimport { EsolveShippingCalculationMethod } from './esolve-shipping-calculation-method.type';\r\nimport { EsolveInsuranceCalculationMethod } from './esolve-insurance-calculation-method.type';\r\n\r\nexport class EsolveShippingMethod {\r\n constructor(\r\n public id: number,\r\n public carrier_name: string,\r\n public delivery_category: string,\r\n public description: string,\r\n public location: EsolveShippingLocation,\r\n public pricing: string,\r\n public link_to_carrier_website: string,\r\n public days_to_deliver: number,\r\n public shipping_cost_calculation_method: EsolveShippingCalculationMethod,\r\n public insurance_cost_calculation_method: EsolveInsuranceCalculationMethod,\r\n public insurance_cost_percentage: number,\r\n public metric_factor: number,\r\n public allow_immediate_payment_processing: boolean,\r\n public allow_postal_address: boolean,\r\n public allow_physical_address: boolean,\r\n public client_to_collect: boolean,\r\n public is_default: boolean,\r\n public location_id: number,\r\n public use_zones: boolean,\r\n public min_distance: number,\r\n public max_distance: number,\r\n public shipping_surge_condition: number,\r\n public shipping_surge_percentage: number,\r\n public sort_priority: number,\r\n public shipping_group: string,\r\n public shipping_slot_identifier: string,\r\n public shipping_slot_delay_hours: number,\r\n public image_url: string,\r\n ) { }\r\n}\r\n","export class EsolveShippingTotals {\r\n constructor(\r\n public total: number,\r\n public vat: number,\r\n public savings: number,\r\n ) { }\r\n}\r\n","import { EsolveShippingTotals } from './esolve-shipping-totals.model';\r\n\r\nexport class EsolveShippingCost {\r\n public shipping: EsolveShippingTotals;\r\n public insurance: EsolveShippingTotals;\r\n\r\n constructor(\r\n // Shipping\r\n shipping_total: number = 0,\r\n shipping_vat: number = 0,\r\n shipping_total_savings: number = 0,\r\n // Insurance\r\n insurance_total: number = 0,\r\n insurance_vat: number = 0,\r\n insurance_total_savings: number = 0,\r\n ) {\r\n this.shipping = new EsolveShippingTotals(\r\n shipping_total,\r\n shipping_vat,\r\n shipping_total_savings,\r\n );\r\n\r\n this.insurance = new EsolveShippingTotals(\r\n insurance_total,\r\n insurance_vat,\r\n insurance_total_savings,\r\n );\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveShippingCost } from './esolve-shipping-cost.model';\r\nimport { EsolveShippingCostRecord } from './esolve-shipping-cost-record.interface';\r\nimport { EsolveShippingMethod } from './esolve-shipping-method.model';\r\nimport { EsolveShippingMethodRecord } from './esolve-shipping-method-record.interface';\r\nimport { EsolveShippingMethodOptions } from './esolve-shipping-method-options.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveShippingService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n /**\r\n * Retrieves a list of shipping methods\r\n *\r\n * @param options Filter options\r\n *\r\n * @returns An `Observable` with an array of shipping methods\r\n */\r\n public getShippingMethods(options?: EsolveShippingMethodOptions): Observable<EsolveShippingMethod[]> {\r\n let params = new HttpParams();\r\n\r\n if (options) {\r\n if (typeof options.addresses_id !== 'undefined') {\r\n params = params.set('addresses_id', options.addresses_id);\r\n }\r\n\r\n if (typeof options.location_id !== 'undefined') {\r\n params = params.set('location_id', options.location_id);\r\n }\r\n }\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveShippingMethodRecord[]>>(\r\n `${this.config.api_url}/get-shipping-methods.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processShippingMethods(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves the shipping costs\r\n *\r\n * @param shipping_id\r\n * @param addresses_id\r\n * @param location_id\r\n *\r\n * @returns An `Observable` with the shipping costs\r\n */\r\n public getShippingCost(\r\n shipping_id: number,\r\n addresses_id: number,\r\n location_id?: number,\r\n ): Observable<EsolveShippingCost> {\r\n try {\r\n let params = new HttpParams();\r\n\r\n if (typeof shipping_id === 'undefined') {\r\n throw new Error('Shipping ID is required');\r\n } else {\r\n params = params.set('shipping_id', shipping_id);\r\n }\r\n\r\n if (typeof addresses_id === 'undefined') {\r\n throw new Error('Address ID is required');\r\n } else {\r\n params = params.set('addresses_id', addresses_id);\r\n }\r\n\r\n if (typeof location_id !== 'undefined') {\r\n params = params.set('location_id', location_id);\r\n }\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveShippingCostRecord[]>>(\r\n `${this.config.api_url}/get-shipping-cost.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processShippingCost(response.records[0]);\r\n }),\r\n );\r\n } catch (err) {\r\n return throwError(() => err);\r\n }\r\n }\r\n\r\n /**\r\n * Processes the eSolve shipping method records.\r\n *\r\n * @param records Records to process\r\n *\r\n * @returns An array of processed shipping methods\r\n */\r\n private processShippingMethods(records: EsolveShippingMethodRecord[]): EsolveShippingMethod[] {\r\n const shipping_methods: EsolveShippingMethod[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n const shipping_method = new EsolveShippingMethod(\r\n +record.id,\r\n record.carrier_name,\r\n record.delivery_category,\r\n record.description,\r\n record.location,\r\n record.pricing,\r\n record.link_to_carrier_website,\r\n +record.days_to_deliver,\r\n record.shipping_cost_calculation_method,\r\n record.insurance_cost_calculation_method,\r\n +record.insurance_cost_percentage,\r\n +record.metric_factor,\r\n record.allow_immediate_payment_processing,\r\n record.allow_postal_address,\r\n record.allow_physical_address,\r\n record.client_to_collect,\r\n record.is_default_shipping_method,\r\n +record.location_id,\r\n record.use_zones,\r\n +record.min_distance,\r\n +record.max_distance,\r\n +record.shipping_surge_condition,\r\n +record.shipping_surge_percentage,\r\n +record.sort_priority,\r\n record.shipping_group,\r\n record.shipping_slot_identifier,\r\n +record.shipping_slot_delay_hours,\r\n record.image_url,\r\n );\r\n\r\n shipping_methods.push(shipping_method);\r\n }\r\n }\r\n\r\n return shipping_methods;\r\n }\r\n\r\n /**\r\n * Processes the eSolve shipping costs record.+\r\n *\r\n * @param record Data to process\r\n *\r\n * @returns Processed shipping costs\r\n */\r\n private processShippingCost(record: EsolveShippingCostRecord): EsolveShippingCost {\r\n const shipping_cost = new EsolveShippingCost(\r\n +record.shipping_total,\r\n +record.vat_on_shipping,\r\n +record.total_saving_on_shipping,\r\n +record.insurance_total,\r\n +record.vat_on_insurance,\r\n +record.total_saving_on_insurance,\r\n );\r\n\r\n return shipping_cost;\r\n }\r\n}\r\n","import { EsolveResponseResult } from '../shared/response';\r\n\r\nimport { EsolveEnquiryResponse } from './esolve-enquiry-response.interface';\r\n\r\nexport class EsolveEnquiryResult extends EsolveResponseResult {\r\n public id = 0;\r\n\r\n constructor(response: EsolveEnquiryResponse) {\r\n super(response);\r\n\r\n this.id = +response.esolve_id;\r\n }\r\n}\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { EsolveErrorHandlerService } from '../shared/errors';\r\nimport { EsolveResponseHandlerService, EsolveSetResponse } from '../shared/response';\r\n\r\nimport { EsolveEnquiryResult } from './esolve-enquiry-result.model';\r\nimport { EsolveEnquiryResponse } from './esolve-enquiry-response.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveEnquiryService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n private errorHandler: EsolveErrorHandlerService,\r\n private responseHandler: EsolveResponseHandlerService,\r\n ) { }\r\n\r\n public send(form_data: FormData): Observable<EsolveEnquiryResult> {\r\n if (!form_data.has('email')) {\r\n return this.errorHandler.emitError('email_required', 'Email is required');\r\n }\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveEnquiryResponse>>(\r\n `${this.config.api_url}/set-enquiry.php`,\r\n form_data,\r\n {\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => new EsolveEnquiryResult(response),\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-enquiry', errorRes);\r\n }),\r\n );\r\n }\r\n}\r\n","import { EsolveStockItem } from '../../stock';\r\n\r\nexport class EsolveWishlistItem {\r\n constructor(\r\n public id: number,\r\n public qty: number,\r\n public vat_rate: number,\r\n public price: number,\r\n public price_incl: number,\r\n public vat_total: number,\r\n public total: number,\r\n public total_incl: number,\r\n public stock_item?: EsolveStockItem,\r\n ) { }\r\n}\r\n","import { EsolveResponseResult } from '../../shared/response';\r\n\r\nexport class EsolveEmptyWishlistResult extends EsolveResponseResult { }\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport {\r\n EsolveSetResponse,\r\n EsolveGetResponse,\r\n EsolveResponseHandlerService,\r\n} from '../shared/response';\r\nimport { EsolveErrorHandlerService } from '../shared/errors';\r\nimport { EsolveStockItem } from '../stock';\r\n\r\nimport { EsolveWishlistSetItem } from './interfaces';\r\nimport { EsolveWishlist, EsolveWishlistSetAction } from './types';\r\nimport { EsolveWishlistItem, EsolveEmptyWishlistResult } from './classes';\r\nimport { EsolveWishlistItemRecord, EsolveWishlistItemResponse } from './interfaces';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveWishlistService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n private errorHandler: EsolveErrorHandlerService,\r\n private responseHandler: EsolveResponseHandlerService,\r\n ) { }\r\n\r\n /**\r\n * Retrieves the current wishlist\r\n *\r\n * @returns An `Observable` with an array of cart items\r\n */\r\n public getWishlist(): Observable<EsolveWishlist> {\r\n return this.getWishlistRecords().pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processWishlist(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Updates the wishlist by preforming various actions, such as adding, editing or removing items from the list.\r\n *\r\n * @param items An array of options to update the wishlist\r\n * @param default_action The default action to preform\r\n *\r\n * @returns An `Observable` with an array of responses that gives feedback on the requested changes\r\n */\r\n public setWishlist(\r\n items: EsolveWishlistSetItem[],\r\n default_action: EsolveWishlistSetAction = 'add',\r\n ): Observable<EsolveWishlistItemResponse[]> {\r\n const body = {\r\n items,\r\n default_action,\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveWishlistItemResponse>>(\r\n `${this.config.api_url}/set-wishlist-item.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.responses === undefined) {\r\n throw response;\r\n }\r\n\r\n return response.responses;\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Empties the wishlist for the logged in user.\r\n *\r\n * @returns Observable of type EsolveEmptyWishlistResult\r\n */\r\n public setWishlistEmpty(): Observable<EsolveEmptyWishlistResult> {\r\n return this.http\r\n .post<EsolveSetResponse<EsolveWishlistItemResponse>>(\r\n `${this.config.api_url}/set-wishlist-empty.php`,\r\n { empty: true },\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => {\r\n return new EsolveEmptyWishlistResult(response);\r\n },\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-wishlist-empty', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Processes the eSolve wishlist records\r\n *\r\n * @param wishlist_item_records Records to process\r\n *\r\n * @returns An array of processed cart items\r\n */\r\n private processWishlist(wishlist_item_records: EsolveWishlistItemRecord[]): EsolveWishlist {\r\n const wishlist_items: EsolveWishlist = [];\r\n\r\n if (wishlist_item_records) {\r\n for (const item of wishlist_item_records) {\r\n\r\n const stock_item = new EsolveStockItem(item.stock_item);\r\n\r\n const wishlist_item = new EsolveWishlistItem(\r\n +item.id,\r\n +item.qty,\r\n +item.vat_rate,\r\n +item.price,\r\n +item.price_incl,\r\n +item.vat_total,\r\n +item.line_total,\r\n +item.line_total_incl,\r\n stock_item,\r\n );\r\n\r\n wishlist_items.push(wishlist_item);\r\n }\r\n }\r\n\r\n return wishlist_items;\r\n }\r\n\r\n /**\r\n * Retrieves stock records from HTTP params.\r\n *\r\n * @param params HTTP client parameters\r\n */\r\n private getWishlistRecords(\r\n params?: HttpParams,\r\n ): Observable<EsolveGetResponse<EsolveWishlistItemRecord[]>> {\r\n return this.http.get<EsolveGetResponse<EsolveWishlistItemRecord[]>>(\r\n `${this.config.api_url}/get-wishlist.php`,\r\n { params },\r\n );\r\n }\r\n}\r\n","import { EsolveSupplierRecord } from '../interfaces';\r\n\r\nexport class EsolveSupplier {\r\n public id?: number;\r\n public internal_account?: string;\r\n public external_account?: string;\r\n public company_name: string;\r\n public owner_firstname: string;\r\n public owner_surname: string;\r\n public owner_email: string;\r\n public owner_contact_number: string;\r\n public rep_firstname: string;\r\n public rep_surname: string;\r\n public rep_email: string;\r\n public rep_contact_number: string;\r\n public street: string;\r\n public suburb: string;\r\n public city: string;\r\n public province: string;\r\n public country: string;\r\n public postal_code: string;\r\n public catalogue_ref_1: string;\r\n public catalogue_ref_2: string;\r\n public is_active?: boolean;\r\n public industry_type: string;\r\n\r\n constructor(record?: Partial<EsolveSupplierRecord>) {\r\n this.id = record?.id;\r\n this.internal_account = record?.internal_account;\r\n this.external_account = record?.external_account;\r\n this.company_name = record?.company_name ?? '';\r\n this.owner_firstname = record?.owner_firstname ?? '';\r\n this.owner_surname = record?.owner_surname ?? '';\r\n this.owner_email = record?.owner_email ?? '';\r\n this.owner_contact_number = record?.owner_contact_number ?? '';\r\n this.rep_firstname = record?.rep_firstname ?? '';\r\n this.rep_surname = record?.rep_surname ?? '';\r\n this.rep_email = record?.rep_email ?? '';\r\n this.rep_contact_number = record?.rep_contact_number ?? '';\r\n this.street = record?.street ?? '';\r\n this.suburb = record?.suburb ?? '';\r\n this.city = record?.city ?? '';\r\n this.province = record?.province ?? '';\r\n this.country = record?.country ?? '';\r\n this.postal_code = record?.postal_code ?? '';\r\n this.catalogue_ref_1 = record?.catalogue_ref_1 ?? '';\r\n this.catalogue_ref_2 = record?.catalogue_ref_2 ?? '';\r\n this.is_active = record?.is_active;\r\n this.industry_type = record?.industry_type ?? '';\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable, of } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveSupplier } from './classes';\r\nimport { EsolveSupplierRecord, EsolveSupplierOptions } from './interfaces';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveSuppliersService {\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n public getSuppliers(options?: EsolveSupplierOptions): Observable<EsolveSupplier[]> {\r\n let params = new HttpParams();\r\n\r\n if (options?.industry_type) {\r\n params = params.set('industry_type', options.industry_type);\r\n }\r\n if (options?.internal_account) {\r\n params = params.set('internal_account', options.internal_account);\r\n }\r\n\r\n return this.getSupplierRecords(params).pipe(\r\n map((records) => {\r\n const suppliers: EsolveSupplier[] = [];\r\n\r\n for (const record of records) {\r\n suppliers.push(this.processSuppliers(record));\r\n }\r\n\r\n return suppliers;\r\n }),\r\n catchError(() => {\r\n return of<EsolveSupplier[]>([]);\r\n }),\r\n );\r\n }\r\n\r\n private getSupplierRecords(params: HttpParams): Observable<EsolveSupplierRecord[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveSupplierRecord[]>>(\r\n `${this.config.api_url}/get-suppliers.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length === 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n return response.records;;\r\n }),\r\n );\r\n }\r\n\r\n private processSuppliers(record: EsolveSupplierRecord): EsolveSupplier {\r\n return new EsolveSupplier(record);\r\n }\r\n\r\n}\r\n","/*\r\n * Public API Surface of ng-esolve-connect\r\n */\r\n\r\nexport * from './lib/ng-esolve-connect.module';\r\nexport * from './lib/esolve-connect.config';\r\nexport * from './lib/esolve-connect-config.constant';\r\n\r\nexport * from './lib/shared/esolve-list.model';\r\nexport * from './lib/shared/esolve-result.model';\r\nexport * from './lib/shared/esolve-url-target.type';\r\nexport * from './lib/shared/custom-fields';\r\nexport * from './lib/shared/filters';\r\nexport * from './lib/shared/response';\r\nexport * from './lib/shared/errors';\r\nexport * from './lib/shared/cookie/esolve-cookie.service';\r\nexport * from './lib/shared/sort';\r\n\r\n// SEO\r\nexport * from './lib/shared/seo';\r\n\r\n// Geocoder\r\nexport * from './lib/shared/geocoder';\r\n\r\n// Assets\r\nexport * from './lib/shared/assets';\r\n\r\n// Session\r\nexport * from './lib/session';\r\n\r\n// Auth\r\nexport * from './lib/auth';\r\n\r\n// Account\r\nexport * from './lib/account';\r\n\r\n// Banners\r\nexport * from './lib/banners';\r\n\r\n// Menu\r\nexport * from './lib/menu';\r\n\r\n// News\r\nexport * from './lib/news';\r\n\r\n// Topics\r\nexport * from './lib/topics';\r\n\r\n// Tags\r\nexport * from './lib/tags';\r\n\r\n// Stock\r\nexport * from './lib/stock';\r\n\r\n// Category Tree\r\nexport * from './lib/category-tree';\r\n\r\n// Manufacturers\r\nexport * from './lib/manufacturers';\r\n\r\n// Ranges\r\nexport * from './lib/ranges';\r\n\r\n// Specials\r\nexport * from './lib/specials';\r\n\r\n// Cart\r\nexport * from './lib/cart';\r\n\r\n// Payment\r\nexport * from './lib/payment';\r\n\r\n// Shipping\r\nexport * from './lib/shipping';\r\n\r\n// Locations\r\nexport * from './lib/locations';\r\n\r\n// Enquiry\r\nexport * from './lib/enquiry';\r\n\r\n// Wishlist\r\nexport * from './lib/wishlist';\r\n\r\n// Suppliers\r\nexport * from './lib/suppliers';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.EsolveCookieService","i1.EsolveSessionService","i1","i2.EsolveSessionService","i3.EsolveErrorHandlerService","i4.EsolveCookieService","i2.EsolveErrorHandlerService","i3.EsolveResponseHandlerService","i4.EsolveResponseHandlerService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"esolve-ng-esolve-connect.mjs","sources":["../../../projects/ng-esolve-connect/src/lib/esolve-connect-config.constant.ts","../../../projects/ng-esolve-connect/src/lib/session/esolve-session.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/cookie/esolve-cookie.service.ts","../../../projects/ng-esolve-connect/src/lib/session/esolve-session.service.ts","../../../projects/ng-esolve-connect/src/lib/auth/esolve-auth-interceptor.service.ts","../../../projects/ng-esolve-connect/src/lib/ng-esolve-connect.module.ts","../../../projects/ng-esolve-connect/src/lib/shared/esolve-list.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/esolve-result.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/filters/classes/esolve-multiple-select-filter.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/filters/classes/esolve-range-filter.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/filters/classes/esolve-single-select-filter.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/filters/classes/index.ts","../../../projects/ng-esolve-connect/src/lib/shared/filters/interfaces/index.ts","../../../projects/ng-esolve-connect/src/lib/shared/filters/types/index.ts","../../../projects/ng-esolve-connect/src/lib/shared/filters/esolve-filter-factory.ts","../../../projects/ng-esolve-connect/src/lib/shared/response/esolve-response-result.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/response/esolve-response-handler.service.ts","../../../projects/ng-esolve-connect/src/lib/shared/errors/esolve-http-error.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/errors/esolve-error-handler.service.ts","../../../projects/ng-esolve-connect/src/lib/shared/sort/index.ts","../../../projects/ng-esolve-connect/src/lib/shared/seo/esolve-seo-info.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/seo/esolve-seo.service.ts","../../../projects/ng-esolve-connect/src/lib/shared/geocoder/esolve-geocode-address-result.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/geocoder/esolve-geocode-coords-result.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/geocoder/esolve-geocode-result.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/geocoder/esolve-geocoder.service.ts","../../../projects/ng-esolve-connect/src/lib/shared/assets/esolve-linked-asset.model.ts","../../../projects/ng-esolve-connect/src/lib/category-tree/esolve-category-tree-item.model.ts","../../../projects/ng-esolve-connect/src/lib/category-tree/esolve-category-tree.service.ts","../../../projects/ng-esolve-connect/src/lib/manufacturers/esolve-manufacturer.model.ts","../../../projects/ng-esolve-connect/src/lib/manufacturers/esolve-manufacturers.service.ts","../../../projects/ng-esolve-connect/src/lib/manufacturers/index.ts","../../../projects/ng-esolve-connect/src/lib/ranges/esolve-range.model.ts","../../../projects/ng-esolve-connect/src/lib/ranges/esolve-ranges.service.ts","../../../projects/ng-esolve-connect/src/lib/tags/esolve-tag.model.ts","../../../projects/ng-esolve-connect/src/lib/tags/esolve-tags.service.ts","../../../projects/ng-esolve-connect/src/lib/tags/index.ts","../../../projects/ng-esolve-connect/src/lib/topics/esolve-topic.model.ts","../../../projects/ng-esolve-connect/src/lib/topics/esolve-topic.service.ts","../../../projects/ng-esolve-connect/src/lib/shared/assets/esolve-asset.model.ts","../../../projects/ng-esolve-connect/src/lib/shared/assets/esolve-assets.service.ts","../../../projects/ng-esolve-connect/src/lib/shared/assets/index.ts","../../../projects/ng-esolve-connect/src/lib/auth/esolve-auth.service.ts","../../../projects/ng-esolve-connect/src/lib/account/address/esolve-address.model.ts","../../../projects/ng-esolve-connect/src/lib/account/address/esolve-address-result.model.ts","../../../projects/ng-esolve-connect/src/lib/account/user-account/esolve-user-account.model.ts","../../../projects/ng-esolve-connect/src/lib/account/user-account/esolve-user-account-result.model.ts","../../../projects/ng-esolve-connect/src/lib/account/user-account/esolve-user-account-business.model.ts","../../../projects/ng-esolve-connect/src/lib/account/user-account/esolve-user-account-contact.model.ts","../../../projects/ng-esolve-connect/src/lib/account/user-account/esolve-user-client-account.model.ts","../../../projects/ng-esolve-connect/src/lib/account/user-account/esolve-user-client-account-balances.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-address.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-client.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-item.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-item-price.model.ts","../../../projects/ng-esolve-connect/src/lib/locations/classes/esolve-location-address.model.ts","../../../projects/ng-esolve-connect/src/lib/locations/classes/esolve-location-contact-info.model.ts","../../../projects/ng-esolve-connect/src/lib/locations/classes/esolve-location-geo.model.ts","../../../projects/ng-esolve-connect/src/lib/locations/classes/esolve-location-pobox-address.model.ts","../../../projects/ng-esolve-connect/src/lib/locations/classes/esolve-location-trading-day.model.ts","../../../projects/ng-esolve-connect/src/lib/locations/classes/esolve-location-trading-times.model.ts","../../../projects/ng-esolve-connect/src/lib/locations/classes/esolve-location.model.ts","../../../projects/ng-esolve-connect/src/lib/locations/classes/index.ts","../../../projects/ng-esolve-connect/src/lib/locations/esolve-locations.service.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-location.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-payment-method.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-shipping-method.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-user.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/esolve-transaction-list.model.ts","../../../projects/ng-esolve-connect/src/lib/account/transaction/index.ts","../../../projects/ng-esolve-connect/src/lib/account/password/esolve-change-password-result.model.ts","../../../projects/ng-esolve-connect/src/lib/account/password/esolve-reset-password-result.model.ts","../../../projects/ng-esolve-connect/src/lib/account/registration/esolve-registration-result.model.ts","../../../projects/ng-esolve-connect/src/lib/account/confirmation/esolve-account-confirmation-result.model.ts","../../../projects/ng-esolve-connect/src/lib/account/esolve-location-update-result.model.ts","../../../projects/ng-esolve-connect/src/lib/cart/classes/esolve-empty-cart-result.model.ts","../../../projects/ng-esolve-connect/src/lib/cart/classes/esolve-checkout-result.model.ts","../../../projects/ng-esolve-connect/src/lib/cart/classes/esolve-cart-item.model.ts","../../../projects/ng-esolve-connect/src/lib/cart/classes/esolve-cart-stock-item.model.ts","../../../projects/ng-esolve-connect/src/lib/cart/classes/esolve-cart-totals.model.ts","../../../projects/ng-esolve-connect/src/lib/cart/classes/esolve-transaction-analytics-data.model.ts","../../../projects/ng-esolve-connect/src/lib/cart/esolve-cart.service.ts","../../../projects/ng-esolve-connect/src/lib/account/esolve-account.service.ts","../../../projects/ng-esolve-connect/src/lib/banners/esolve-banner.model.ts","../../../projects/ng-esolve-connect/src/lib/banners/esolve-banner-image.model.ts","../../../projects/ng-esolve-connect/src/lib/banners/esolve-banner-image-hotspot.model.ts","../../../projects/ng-esolve-connect/src/lib/banners/esolve-banner.service.ts","../../../projects/ng-esolve-connect/src/lib/banners/index.ts","../../../projects/ng-esolve-connect/src/lib/menu/esolve-menu-item.model.ts","../../../projects/ng-esolve-connect/src/lib/menu/esolve-menu.service.ts","../../../projects/ng-esolve-connect/src/lib/news/esolve-news-group.model.ts","../../../projects/ng-esolve-connect/src/lib/news/esolve-news-article-author.model.ts","../../../projects/ng-esolve-connect/src/lib/news/esolve-news-article.model.ts","../../../projects/ng-esolve-connect/src/lib/news/esolve-news-article-list.model.ts","../../../projects/ng-esolve-connect/src/lib/news/esolve-news.service.ts","../../../projects/ng-esolve-connect/src/lib/stock/types/index.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-colour.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-badge.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-price.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-lead-times.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-item-base.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-dependant-item.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-group-item.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-group.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-item.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-item-list.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-recipe-stock-item.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-linked-stock-item.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-media-stock-item.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-image.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-additional-stock-image.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/esolve-stock-image-collection.model.ts","../../../projects/ng-esolve-connect/src/lib/stock/classes/index.ts","../../../projects/ng-esolve-connect/src/lib/stock/interfaces/esolve-stock-image-collection-record.interface.ts","../../../projects/ng-esolve-connect/src/lib/stock/interfaces/index.ts","../../../projects/ng-esolve-connect/src/lib/stock/esolve-stock.service.ts","../../../projects/ng-esolve-connect/src/lib/specials/esolve-special-image.model.ts","../../../projects/ng-esolve-connect/src/lib/specials/esolve-special-image-collection.model.ts","../../../projects/ng-esolve-connect/src/lib/specials/esolve-special-dates.model.ts","../../../projects/ng-esolve-connect/src/lib/specials/esolve-special.model.ts","../../../projects/ng-esolve-connect/src/lib/specials/esolve-specials.service.ts","../../../projects/ng-esolve-connect/src/lib/payment/interfaces/index.ts","../../../projects/ng-esolve-connect/src/lib/payment/classes/esolve-banking-details.model.ts","../../../projects/ng-esolve-connect/src/lib/payment/classes/esolve-payment-method.model.ts","../../../projects/ng-esolve-connect/src/lib/payment/classes/esolve-payment-result.model.ts","../../../projects/ng-esolve-connect/src/lib/payment/classes/esolve-vault-item-result.model.ts","../../../projects/ng-esolve-connect/src/lib/payment/classes/esolve-vault-item.model.ts","../../../projects/ng-esolve-connect/src/lib/payment/esolve-payment.service.ts","../../../projects/ng-esolve-connect/src/lib/shipping/esolve-shipping-method.model.ts","../../../projects/ng-esolve-connect/src/lib/shipping/esolve-shipping-totals.model.ts","../../../projects/ng-esolve-connect/src/lib/shipping/esolve-shipping-cost.model.ts","../../../projects/ng-esolve-connect/src/lib/shipping/esolve-shipping.service.ts","../../../projects/ng-esolve-connect/src/lib/enquiry/esolve-enquiry-result.model.ts","../../../projects/ng-esolve-connect/src/lib/enquiry/esolve-enquiry.service.ts","../../../projects/ng-esolve-connect/src/lib/wishlist/classes/esolve-wishlist-item.model.ts","../../../projects/ng-esolve-connect/src/lib/wishlist/classes/esolve-empty-wishlist-result.model.ts","../../../projects/ng-esolve-connect/src/lib/wishlist/esolve-wishlist.service.ts","../../../projects/ng-esolve-connect/src/lib/suppliers/classes/esolve-supplier.model.ts","../../../projects/ng-esolve-connect/src/lib/suppliers/esolve-suppliers.service.ts","../../../projects/ng-esolve-connect/src/public-api.ts","../../../projects/ng-esolve-connect/src/esolve-ng-esolve-connect.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nimport { EsolveConnectConfig } from './esolve-connect.config';\r\n\r\nexport const ESOLVE_CONNECT_CONFIG = new InjectionToken<EsolveConnectConfig>('esolve.connect.config');\r\n","import { EsolveSessionData } from './esolve-session-data.interface';\r\n\r\nexport class EsolveSession implements EsolveSessionData {\r\n constructor(\r\n public id: number = -1,\r\n public location_id: number = 0,\r\n public readonly key: string = '',\r\n public readonly expiration_date?: Date,\r\n ) { }\r\n\r\n public get expired(): boolean {\r\n const current_date = new Date();\r\n\r\n return (\r\n (this.expiration_date === undefined) ||\r\n (current_date >= this.expiration_date)\r\n );\r\n }\r\n\r\n public get authenticated(): boolean {\r\n return (this.id > 0);\r\n }\r\n\r\n public get valid(): boolean {\r\n return (\r\n (this.key !== '') &&\r\n (this.expiration_date !== undefined) &&\r\n (this.id >= 0)\r\n );\r\n }\r\n\r\n public updateUser(user_id: number): void {\r\n this.id = user_id;\r\n }\r\n\r\n public updateLocation(location_id: number): void {\r\n this.location_id = location_id;\r\n }\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Inject, Injectable, Optional, PLATFORM_ID } from '@angular/core';\r\n\r\nimport { Request, Response } from 'express';\r\n\r\nimport { CookieService } from 'ngx-cookie-service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveCookieService {\r\n private is_browser: boolean = isPlatformBrowser(this.platformId);\r\n\r\n constructor(\r\n private ngxCookies: CookieService,\r\n @Inject(PLATFORM_ID) private platformId: Object,\r\n @Optional() @Inject('REQUEST') private request: Request,\r\n @Optional() @Inject('RESPONSE') private response: Response,\r\n ) { }\r\n\r\n public check(name: string): boolean {\r\n if (this.is_browser) {\r\n return this.ngxCookies.check(name);\r\n }\r\n\r\n const server_cookies = this.request.headers.cookie;\r\n\r\n if (!server_cookies) {\r\n return false;\r\n }\r\n\r\n name = encodeURIComponent(name);\r\n const regExp = this.getCookieRegExp(name);\r\n return regExp.test(server_cookies);\r\n }\r\n\r\n public get(name: string): string {\r\n if (this.is_browser) {\r\n return this.ngxCookies.get(name);\r\n }\r\n\r\n if (!this.check(name)) {\r\n return '';\r\n }\r\n\r\n const server_cookies = this.request.headers.cookie ?? '';\r\n\r\n const regExp = this.getCookieRegExp(name);\r\n const result = regExp.exec(server_cookies);\r\n\r\n return result && result[1] ? this.safeDecodeURIComponent(result[1]) : '';\r\n }\r\n\r\n public set(\r\n name: string,\r\n value: string,\r\n expires?: Date,\r\n path?: string,\r\n domain?: string,\r\n secure?: boolean,\r\n ): void {\r\n if (this.is_browser) {\r\n this.ngxCookies.set(name, value, expires, path, domain, secure);\r\n\r\n return;\r\n }\r\n\r\n this.response.cookie(name, value, { domain, path, expires, secure });\r\n }\r\n\r\n public delete(\r\n name: string,\r\n path?: string,\r\n domain?: string,\r\n secure?: boolean,\r\n ): void {\r\n if (this.is_browser) {\r\n this.ngxCookies.delete(name, path, domain, secure);\r\n\r\n return;\r\n }\r\n\r\n this.response.clearCookie(name, { path, domain, secure });\r\n }\r\n\r\n /*\r\n * Following functions come from ngx-cookie-service project since they are primarily the same\r\n */\r\n\r\n /**\r\n * Get cookie Regular Expression\r\n *\r\n * @param name Cookie name\r\n * @returns property RegExp\r\n *\r\n * @link https://github.com/stevermeister/ngx-cookie-service/blob/bcb6ac203487c487fcd126896bffaa14981c709c/projects/ngx-cookie-service/src/lib/cookie.service.ts#L31\r\n */\r\n private getCookieRegExp(name: string): RegExp {\r\n const escapedName: string = name.replace(/([\\[\\]\\{\\}\\(\\)\\|\\=\\;\\+\\?\\,\\.\\*\\^\\$])/gi, '\\\\$1');\r\n\r\n return new RegExp('(?:^' + escapedName + '|;\\\\s*' + escapedName + ')=(.*?)(?:;|$)', 'g');\r\n }\r\n\r\n /**\r\n * Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).\r\n *\r\n * @param encodedURIComponent A value representing an encoded URI component.\r\n *\r\n * @returns The unencoded version of an encoded component of a Uniform Resource Identifier (URI).\r\n *\r\n * @link https://github.com/stevermeister/ngx-cookie-service/blob/bcb6ac203487c487fcd126896bffaa14981c709c/projects/ngx-cookie-service/src/lib/cookie.service.ts#L47\r\n */\r\n private safeDecodeURIComponent(encodedURIComponent: string): string {\r\n try {\r\n return decodeURIComponent(encodedURIComponent);\r\n } catch {\r\n // probably it is not uri encoded. return as is\r\n return encodedURIComponent;\r\n }\r\n }\r\n}\r\n","import { Inject, Injectable, PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\nimport { EsolveCookieService } from '../shared/cookie/esolve-cookie.service';\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveStoredSession } from './esolve-stored-session.interface';\r\nimport { EsolveSession } from './esolve-session.model';\r\n\r\n// TODO: Rewrite session manager to use a pure rxjs solution.\r\n\r\ninterface SessionUpdateOptions {\r\n user_id?: number;\r\n location_id?: number;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveSessionService {\r\n public session: Observable<EsolveSession>;\r\n\r\n private _session: BehaviorSubject<EsolveSession>;\r\n private key_expiration_timer: any;\r\n private storage_key = 'ngEslvUserSession';\r\n private is_browser: boolean;\r\n\r\n public get currentSession(): EsolveSession {\r\n return this._session.value;\r\n }\r\n\r\n constructor(\r\n @Inject(PLATFORM_ID) private platformId: Object,\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private cookieService: EsolveCookieService,\r\n ) {\r\n this.setStorageKey();\r\n this._session = new BehaviorSubject<EsolveSession>(new EsolveSession());\r\n this.session = this._session.asObservable();\r\n this.is_browser = isPlatformBrowser(this.platformId);\r\n }\r\n\r\n public clearTimer(): void {\r\n if (this.key_expiration_timer) {\r\n clearTimeout(this.key_expiration_timer);\r\n }\r\n }\r\n\r\n public restore(\r\n expirationCallback: (session?: EsolveSession) => void,\r\n invalidSessionCallback: () => void,\r\n ): void {\r\n if (this.currentSession.valid) {\r\n return;\r\n }\r\n\r\n const stored_session_json = this.cookieService.get(this.storage_key);\r\n const stored_session: EsolveStoredSession = (stored_session_json ? JSON.parse(stored_session_json) : null);\r\n\r\n if (!stored_session) {\r\n invalidSessionCallback();\r\n\r\n return;\r\n }\r\n\r\n const expiration_date = new Date(stored_session.expiration_date);\r\n\r\n const loaded_session = new EsolveSession(\r\n stored_session.id,\r\n stored_session.location_id,\r\n stored_session.key,\r\n expiration_date,\r\n );\r\n\r\n if (!loaded_session.expired) {\r\n this._session.next(loaded_session);\r\n const expiration_duration = expiration_date.getTime() - new Date().getTime();\r\n this.startTimer(expirationCallback, expiration_duration);\r\n } else {\r\n expirationCallback(loaded_session);\r\n }\r\n }\r\n\r\n public handleSession(\r\n user_id: number,\r\n location_id: number,\r\n key: string,\r\n expiry_time: number,\r\n expires: number,\r\n expirationCallback: () => void,\r\n ): void {\r\n const expiration_date = new Date(expiry_time * 1000);\r\n const session = new EsolveSession(\r\n user_id,\r\n location_id,\r\n key,\r\n expiration_date,\r\n );\r\n\r\n this.cookieService.set(\r\n this.storage_key,\r\n JSON.stringify(session),\r\n expiration_date,\r\n '/',\r\n );\r\n this._session.next(session);\r\n this.startTimer(expirationCallback, expires * 1000);\r\n }\r\n\r\n public handleUpdateSession(\r\n {\r\n user_id,\r\n location_id,\r\n }: SessionUpdateOptions,\r\n callback?: () => void,\r\n ): void {\r\n const current_session = this.currentSession;\r\n\r\n if (typeof user_id !== 'undefined') {\r\n current_session.updateUser(user_id);\r\n }\r\n\r\n if (typeof location_id !== 'undefined') {\r\n current_session.updateLocation(location_id);\r\n }\r\n\r\n this.cookieService.set(\r\n this.storage_key,\r\n JSON.stringify(current_session),\r\n current_session.expiration_date,\r\n '/',\r\n );\r\n\r\n this._session.next(current_session);\r\n\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }\r\n\r\n private setStorageKey(): void {\r\n if (\r\n (typeof this.config.user_session_storage_key === 'string') &&\r\n (this.config.user_session_storage_key !== '')\r\n ) {\r\n this.storage_key = this.config.user_session_storage_key;\r\n }\r\n }\r\n\r\n private startTimer(callback: () => void, duration: number): void {\r\n if (this.is_browser) {\r\n this.key_expiration_timer = setTimeout(callback, duration);\r\n }\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport {\r\n HttpInterceptor,\r\n HttpRequest,\r\n HttpHandler,\r\n HttpEvent,\r\n} from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveSessionService } from '../session/esolve-session.service';\r\n\r\n@Injectable()\r\nexport class EsolveAuthInterceptorService implements HttpInterceptor {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private session: EsolveSessionService,\r\n ) { }\r\n\r\n public intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (req.url.startsWith(`${this.config.api_url}/`)) {\r\n const service_identifier = req.url.replace(`${this.config.api_url}/`, '');\r\n\r\n const modified_url = req.url;\r\n let params = req.params;\r\n\r\n const session = this.session.currentSession;\r\n\r\n if (session.valid) {\r\n if (service_identifier !== 'get-access-token.php') {\r\n params = params.set('key', session.key);\r\n }\r\n }\r\n\r\n params = params.set('ws_id', this.config.wsid);\r\n\r\n const modified_req = req.clone({\r\n url: modified_url,\r\n params,\r\n });\r\n\r\n return next.handle(modified_req);\r\n }\r\n\r\n return next.handle(req);\r\n }\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\n\r\nimport { CookieService } from 'ngx-cookie-service';\r\n\r\nimport { EsolveConnectConfig } from './esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from './esolve-connect-config.constant';\r\n\r\nimport { EsolveAuthInterceptorService } from './auth/esolve-auth-interceptor.service';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n ],\r\n providers: [CookieService],\r\n exports: [],\r\n})\r\nexport class NgEsolveConnectModule {\r\n public static forRoot(config: EsolveConnectConfig): ModuleWithProviders<NgEsolveConnectModule> {\r\n return {\r\n ngModule: NgEsolveConnectModule,\r\n providers: [\r\n {\r\n provide: ESOLVE_CONNECT_CONFIG,\r\n useValue: config,\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: EsolveAuthInterceptorService,\r\n multi: true,\r\n },\r\n ],\r\n };\r\n }\r\n}\r\n","export class EsolveList<T> {\r\n constructor(\r\n public items: T[] = [],\r\n public page: number = 0,\r\n public rows: number = 0,\r\n public total: number = 0,\r\n ) { }\r\n}\r\n","export class EsolveResult {\r\n constructor(\r\n public status: string,\r\n public code: string,\r\n public message: string,\r\n ) { }\r\n}\r\n","import { HttpParams } from '@angular/common/http';\r\n\r\nimport { EsolveSelectFilter } from '../interfaces';\r\n\r\nexport class EsolveMultipleSelectFilter implements EsolveSelectFilter {\r\n public readonly type = 'multiple';\r\n public options: (string | number)[] = [];\r\n\r\n private values?: (string | number)[];\r\n\r\n constructor(\r\n public field: string,\r\n options?: (string | number)[],\r\n ) {\r\n if (options) {\r\n this.options = options;\r\n }\r\n }\r\n\r\n public setValue(values: (string | number)[]) {\r\n this.values = values;\r\n }\r\n\r\n public toHttpParams(): { [x: string]: string | (string | number)[]; };\r\n public toHttpParams(http_params: HttpParams): HttpParams;\r\n public toHttpParams(\r\n http_params?: HttpParams,\r\n ): HttpParams | { [x: string]: string | (string | number)[]; } {\r\n if (!this.values) {\r\n throw new Error('No values set');\r\n }\r\n\r\n const base_property = `filter[${this.field}]`;\r\n const type_property = base_property + '[type]';\r\n const values_property = base_property + '[values][]';\r\n\r\n const params = {\r\n [type_property]: this.type,\r\n [values_property]: this.values,\r\n };\r\n\r\n if (http_params) {\r\n return http_params.appendAll(params);\r\n }\r\n\r\n return params;\r\n }\r\n}\r\n","import { HttpParams } from '@angular/common/http';\r\nimport { EsolveFilter } from '../interfaces';\r\n\r\nexport class EsolveRangeFilter implements EsolveFilter {\r\n public readonly type = 'range';\r\n public min: number = 0;\r\n public max: number = 0;\r\n public options = {\r\n min: 0,\r\n max: 0,\r\n };\r\n\r\n constructor(\r\n public field: string,\r\n min: number = 0,\r\n max: number = 0,\r\n ) {\r\n this.options.min = min;\r\n this.options.max = max;\r\n\r\n if ((max > 0) && (min > max)) {\r\n this.options.min = max;\r\n this.options.max = min;\r\n }\r\n }\r\n\r\n public setValue(min: number, max: number): void {\r\n this.min = min;\r\n this.max = max;\r\n\r\n if ((max > 0) && (min > max)) {\r\n this.min = max;\r\n this.max = min;\r\n }\r\n }\r\n\r\n public toHttpParams(): { [x: string]: string | number; };\r\n public toHttpParams(http_params: HttpParams): HttpParams;\r\n public toHttpParams(\r\n http_params?: HttpParams,\r\n ): HttpParams | { [x: string]: string | number; } {\r\n if (this.min <= 0 && this.max <= 0) {\r\n throw new Error('No values set');\r\n }\r\n\r\n const base_property = `filter[${this.field}]`;\r\n const type_property = base_property + '[type]';\r\n const min_property = base_property + '[min]';\r\n const max_property = base_property + '[max]';\r\n\r\n const params = {\r\n [type_property]: this.type,\r\n [min_property]: this.min,\r\n [max_property]: this.max,\r\n };\r\n\r\n if (http_params) {\r\n return http_params.appendAll(params);\r\n }\r\n\r\n return params;\r\n }\r\n}\r\n","import { HttpParams } from '@angular/common/http';\r\n\r\nimport { EsolveSelectFilter } from '../interfaces';\r\n\r\nexport class EsolveSingleSelectFilter implements EsolveSelectFilter {\r\n public readonly type = 'single';\r\n public options: (string | number)[] = [];\r\n\r\n private value?: string | number;\r\n\r\n constructor(field: string, options: (string | number)[]);\r\n constructor(field: string, value: string | number);\r\n constructor(\r\n public field: string,\r\n options_or_value: string | number | (string | number)[],\r\n ) {\r\n if (Array.isArray(options_or_value)) {\r\n this.options = options_or_value;\r\n } else {\r\n this.setValue(options_or_value);\r\n }\r\n }\r\n\r\n public setValue(value: string | number) {\r\n this.value = value;\r\n }\r\n\r\n public toHttpParams(): { [x: string]: string | number; };\r\n public toHttpParams(http_params: HttpParams): HttpParams;\r\n public toHttpParams(\r\n http_params?: HttpParams,\r\n ): HttpParams | { [x: string]: string | number; } {\r\n if (!this.value) {\r\n throw new Error('No values set');\r\n }\r\n\r\n const base_property = `filter[${this.field}]`;\r\n const type_property = base_property + '[type]';\r\n const values_property = base_property + '[value]';\r\n\r\n const params = {\r\n [type_property]: this.type,\r\n [values_property]: this.value,\r\n };\r\n\r\n if (http_params) {\r\n return http_params.appendAll(params);\r\n }\r\n\r\n return params;\r\n }\r\n}\r\n","// Classes\r\nexport * from './esolve-multiple-select-filter.model';\r\nexport * from './esolve-range-filter.model';\r\nexport * from './esolve-single-select-filter.model';\r\n","// Interfaces\r\nexport * from './esolve-filter-definitions.interface';\r\nexport * from './esolve-filter-record.interface';\r\nexport * from './esolve-filter.interface';\r\nexport * from './esolve-range-filter-record.interface';\r\nexport * from './esolve-select-filter-record.interface';\r\nexport * from './esolve-select-filter.interface';\r\n","// Types\r\nexport * from './esolve-filter-list.type';\r\nexport * from './esolve-filter-record-list.type';\r\nexport * from './esolve-filter-type.type';\r\nexport * from './esolve-range-filter-type.type';\r\nexport * from './esolve-select-filter-type.type';\r\n","import { HttpParams } from '@angular/common/http';\r\n\r\nimport {\r\n EsolveMultipleSelectFilter,\r\n EsolveRangeFilter,\r\n EsolveSingleSelectFilter,\r\n} from './classes';\r\nimport { EsolveFilter, EsolveFilterDefinitions } from './interfaces';\r\n\r\nexport namespace EsolveFilterFactory {\r\n export function createRangeWithValue(\r\n field: string,\r\n min: number = 0,\r\n max: number = 0,\r\n ): EsolveRangeFilter {\r\n const filter = new EsolveRangeFilter(field);\r\n filter.setValue(min, max);\r\n\r\n return filter;\r\n }\r\n\r\n export function createSingleSelectWithValue(\r\n field: string,\r\n value: string | number,\r\n ): EsolveSingleSelectFilter {\r\n const filter = new EsolveSingleSelectFilter(field, value);\r\n\r\n return filter;\r\n }\r\n\r\n export function createMultipleSelectWithValue(\r\n field: string,\r\n value: (string | number)[],\r\n ): EsolveMultipleSelectFilter {\r\n const filter = new EsolveMultipleSelectFilter(field);\r\n filter.setValue(value);\r\n\r\n return filter;\r\n }\r\n\r\n export function covertFromObj(obj: EsolveFilterDefinitions): EsolveFilter[] {\r\n const filters: EsolveFilter[] = [];\r\n\r\n for (const field in obj) {\r\n const value = obj[field];\r\n let filter = null;\r\n\r\n if (Array.isArray(value)) {\r\n filter = createMultipleSelectWithValue(field, value);\r\n } else if (typeof value === 'object') {\r\n filter = createRangeWithValue(field, value.min, value.max);\r\n } else {\r\n filter = createSingleSelectWithValue(field, value);\r\n }\r\n\r\n if (filter) {\r\n filters.push(filter);\r\n }\r\n }\r\n\r\n return filters;\r\n }\r\n\r\n export function convertToHttpParams(\r\n filters: EsolveFilter[],\r\n ): { [x: string]: string | number | (string | number)[]; };\r\n\r\n export function convertToHttpParams(\r\n filters: EsolveFilter[],\r\n http_params: HttpParams,\r\n ): HttpParams;\r\n\r\n export function convertToHttpParams(\r\n filters: EsolveFilter[],\r\n http_params?: HttpParams,\r\n ): HttpParams | { [x: string]: string | number | (string | number)[]; } {\r\n if (http_params) {\r\n for (const filter of filters) {\r\n http_params = filter.toHttpParams(http_params);\r\n }\r\n\r\n return http_params;\r\n }\r\n\r\n let params = {};\r\n\r\n for (const filter of filters) {\r\n params = {\r\n ...params,\r\n ...filter.toHttpParams(),\r\n };\r\n }\r\n\r\n return params;\r\n }\r\n}\r\n","import { EsolveResponseLogItem } from './esolve-response-log-item.interface';\r\nimport { EsolvePostResponseItem } from './esolve-post-response-item.interface';\r\n\r\nexport class EsolveResponseResult {\r\n public success_log: EsolveResponseLogItem[] = [];\r\n public error_log: EsolveResponseLogItem[] = [];\r\n\r\n constructor(response: EsolvePostResponseItem) {\r\n this.error_log.push(...response.log.filter((log_item) => log_item.type === 'error'));\r\n this.success_log.push(...response.log.filter((log_item) => log_item.type === 'success'));\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { EsolvePostResponseItem } from './esolve-post-response-item.interface';\r\nimport { EsolveSetResponse } from './esolve-set-response.interface';\r\nimport { EsolveResponseResult } from './esolve-response-result.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveResponseHandlerService {\r\n constructor() { }\r\n\r\n /**\r\n * Parse single HTTP response\r\n *\r\n * @param http_response HTTP Response to eSolve service\r\n * @param resultHandler Function to parse response to a result\r\n *\r\n * @returns Parsed result of response\r\n */\r\n public validateSingleHttpResponse<R extends EsolveResponseResult, T extends EsolvePostResponseItem>(\r\n http_response: EsolveSetResponse<T>,\r\n resultHandler: (response: T) => R,\r\n ): R {\r\n if (\r\n (http_response.responses === undefined) ||\r\n (http_response.responses.length <= 0)\r\n ) {\r\n throw http_response;\r\n }\r\n\r\n const response = http_response.responses[0];\r\n\r\n if (\r\n (response.status.state === 'error') ||\r\n (response.status.state === 'none')\r\n ) {\r\n throw response;\r\n }\r\n\r\n return resultHandler(response);\r\n }\r\n}\r\n","export class EsolveHttpError extends Error {\r\n public readonly http_error = true;\r\n public type: 'error' | 'exception';\r\n public error_code: string;\r\n\r\n constructor(type: 'error' | 'exception', code: string, message: string, ...params: any[]) {\r\n // Pass remaining arguments (including vendor specific ones) to parent constructor\r\n super(...[message, ...params]);\r\n\r\n // Maintains proper stack trace for where our error was thrown (only available on V8)\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, EsolveHttpError);\r\n }\r\n\r\n this.name = 'EsolveHttpError';\r\n this.type = type;\r\n this.error_code = code;\r\n }\r\n}\r\n","import { HttpErrorResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\nimport { Observable, throwError } from 'rxjs';\r\n\r\nimport {\r\n EsolveResponse,\r\n EsolveDeleteResult,\r\n EsolvePostResponseItem,\r\n EsolveDeleteResponse,\r\n EsolveSetResponse,\r\n} from '../response';\r\nimport { EsolveHttpError } from './esolve-http-error.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveErrorHandlerService {\r\n constructor() { }\r\n\r\n public throwError(code: string, message: string): void {\r\n throw new EsolveHttpError('error', message, code);\r\n }\r\n\r\n public emitError(code: string, message: string): Observable<never> {\r\n return throwError(() => new EsolveHttpError('error', message, code));\r\n }\r\n\r\n public handleHttpPostError(\r\n service_type: string,\r\n errorRes: HttpErrorResponse | EsolveSetResponse | EsolvePostResponseItem,\r\n ): Observable<never> {\r\n if (\r\n !(errorRes instanceof HttpErrorResponse) &&\r\n !('service_type' in errorRes) &&\r\n (\r\n ('id' in errorRes) &&\r\n ('esolve_id' in errorRes) &&\r\n ('transaction_type' in errorRes) &&\r\n ('status' in errorRes) &&\r\n ('log' in errorRes)\r\n )\r\n ) {\r\n return throwError(() => this.parsePostErrors(errorRes));\r\n }\r\n\r\n return this.handleHttpError(service_type, errorRes);\r\n }\r\n\r\n public handleHttpDeleteError(\r\n service_type: string,\r\n errorRes: HttpErrorResponse | EsolveDeleteResponse | EsolveDeleteResult,\r\n ): Observable<never> {\r\n const is_not_base = (\r\n !(errorRes instanceof HttpErrorResponse) &&\r\n !('service_type' in errorRes) &&\r\n (\r\n ('id' in errorRes) &&\r\n ('status' in errorRes) &&\r\n ('message' in errorRes) &&\r\n ('code' in errorRes)\r\n )\r\n );\r\n\r\n if (is_not_base) {\r\n return throwError(() => this.parseDeleteError(errorRes));\r\n }\r\n\r\n return this.handleHttpError(service_type, errorRes);\r\n }\r\n\r\n private handleHttpError(\r\n service_type: string,\r\n error_response: HttpErrorResponse | EsolveResponse,\r\n ): Observable<never> {\r\n if (error_response instanceof HttpErrorResponse) {\r\n if (error_response.status === 500) {\r\n const server_error = error_response.error;\r\n\r\n if (\r\n ('service_type' in server_error) &&\r\n (server_error.service_type === service_type)\r\n ) {\r\n return throwError(() => this.parseException(server_error as EsolveResponse));\r\n }\r\n }\r\n } else {\r\n if (\r\n ('service_type' in error_response) &&\r\n (error_response.service_type === service_type)\r\n ) {\r\n if (error_response.type === 'exception') {\r\n return throwError(() => this.parseException(error_response));\r\n } else if (error_response.type === 'error') {\r\n return throwError(() => this.parseResponseError(error_response));\r\n }\r\n }\r\n }\r\n\r\n return throwError(() => error_response);\r\n }\r\n\r\n private parseException(exception: EsolveResponse): EsolveHttpError {\r\n const error = new EsolveHttpError(\r\n 'exception',\r\n exception.message || 'Unknown exception has occurred',\r\n exception.additional_data.exception_type || 'unknown',\r\n );\r\n\r\n return error;\r\n }\r\n\r\n private parseResponseError(exception: EsolveResponse): EsolveHttpError {\r\n const error = new EsolveHttpError(\r\n 'error',\r\n exception.message || 'Unknown error has occurred',\r\n exception.code || 'unknown',\r\n );\r\n\r\n return error;\r\n }\r\n\r\n private parsePostErrors(response: EsolvePostResponseItem): EsolveHttpError {\r\n let error_code = 'unknown';\r\n let message = 'Unknown error has occurred';\r\n\r\n\r\n if ((response.status.state === 'none') && (response.log.length > 0)) {\r\n error_code = 'no_response';\r\n message = 'Response was provided';\r\n } else if (response.status.state === 'error') {\r\n const login_error_log = response.log[0];\r\n\r\n error_code = login_error_log.message_code;\r\n message = login_error_log.message;\r\n }\r\n\r\n return new EsolveHttpError('error', error_code, message);\r\n }\r\n\r\n private parseDeleteError(result: EsolveDeleteResult): EsolveHttpError {\r\n return new EsolveHttpError('error', result.message, result.code);\r\n }\r\n}\r\n","// Types\r\nexport * from './esolve-sort-order.type';\r\n// Interfaces\r\nexport * from './esolve-sort.interface';\r\n","/**\r\n * Search Engine Optimization information.\r\n */\r\nexport class EsolveSeoInfo {\r\n constructor(\r\n public title: string = '',\r\n public description: string = '',\r\n public keywords: string = '',\r\n ) { }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { Meta, Title } from '@angular/platform-browser';\r\n\r\nimport { EsolveConnectConfig } from '../../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../../esolve-connect-config.constant';\r\n\r\nimport { EsolveSeoInfo } from './esolve-seo-info.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveSeoService {\r\n private title_prefix = '';\r\n private title_suffix = '';\r\n private title_separator = '|';\r\n\r\n private default_seo_title = '';\r\n private default_seo_description = '';\r\n private default_seo_keywords = '';\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private title: Title,\r\n private meta: Meta,\r\n ) {\r\n this.init();\r\n }\r\n\r\n /**\r\n * Sets SEO tags for page\r\n * @param seoInfo SEO object\r\n */\r\n public setTags(seoInfo: EsolveSeoInfo): void {\r\n seoInfo = this.validateAndSanitizeSeoInfo(seoInfo);\r\n\r\n this.setPageTitleTags(seoInfo.title);\r\n this.setPageDescriptionTags(seoInfo.description);\r\n this.setPageKeywordsTags(seoInfo.keywords);\r\n }\r\n\r\n private init(): void {\r\n if (typeof this.config.title_prefix !== 'undefined') {\r\n this.title_prefix = this.config.title_prefix;\r\n }\r\n\r\n if (typeof this.config.title_suffix !== 'undefined') {\r\n this.title_suffix = this.config.title_suffix;\r\n }\r\n\r\n if (typeof this.config.title_separator !== 'undefined') {\r\n this.title_separator = this.config.title_separator;\r\n }\r\n\r\n if (typeof this.config.default_seo_title !== 'undefined') {\r\n this.default_seo_title = this.config.default_seo_title;\r\n }\r\n\r\n if (typeof this.config.default_seo_description !== 'undefined') {\r\n this.default_seo_description = this.config.default_seo_description;\r\n }\r\n\r\n if (typeof this.config.default_seo_keywords !== 'undefined') {\r\n this.default_seo_keywords = this.config.default_seo_keywords;\r\n }\r\n }\r\n\r\n private setPageTitleTags(title: string): void {\r\n this.title.setTitle(title);\r\n this.meta.updateTag({ property: 'og:title', content: title });\r\n }\r\n\r\n private setPageDescriptionTags(description: string): void {\r\n this.meta.updateTag({ name: 'description', content: description });\r\n this.meta.updateTag({ property: 'og:description', content: description });\r\n }\r\n\r\n private setPageKeywordsTags(keywords: string): void {\r\n this.meta.updateTag({ name: 'keywords', content: keywords });\r\n }\r\n\r\n private validateAndSanitizeSeoInfo(seoInfo: EsolveSeoInfo): EsolveSeoInfo {\r\n const pageSeo = new EsolveSeoInfo(\r\n this.default_seo_title,\r\n this.default_seo_description,\r\n this.default_seo_keywords,\r\n );\r\n\r\n if (seoInfo.description.trim() !== '') {\r\n pageSeo.description = seoInfo.description;\r\n }\r\n\r\n if (seoInfo.title.trim() !== '') {\r\n const titlePartsArray = [];\r\n\r\n if (this.title_prefix !== '') {\r\n titlePartsArray.push(this.title_prefix);\r\n\r\n if (this.title_separator !== '') {\r\n titlePartsArray.push(this.title_separator);\r\n }\r\n }\r\n\r\n titlePartsArray.push(seoInfo.title);\r\n\r\n if (this.title_suffix !== '') {\r\n if (this.title_separator !== '') {\r\n titlePartsArray.push(this.title_separator);\r\n }\r\n\r\n titlePartsArray.push(this.title_suffix);\r\n }\r\n\r\n pageSeo.title = titlePartsArray.join(' ');\r\n\r\n if (seoInfo.keywords.trim() === '') {\r\n const clean_title = seoInfo.title.replace(/[^a-zA-Z0-9\\. ]+/gi, '').trim();\r\n const keywords = clean_title.split(' ');\r\n const clean_keywords: string[] = [];\r\n\r\n for (let keyword of keywords) {\r\n keyword = keyword.trim();\r\n if (keyword.length > 2) {\r\n keyword = keyword.toLocaleLowerCase();\r\n if (!clean_keywords.includes(keyword)) {\r\n clean_keywords.push(keyword);\r\n }\r\n }\r\n }\r\n\r\n seoInfo.keywords = clean_keywords.join(',');\r\n }\r\n }\r\n\r\n if (seoInfo.keywords.trim() !== '') {\r\n pageSeo.keywords = seoInfo.keywords;\r\n }\r\n\r\n return pageSeo;\r\n }\r\n}\r\n","export class EsolveGeocodeAddressResult {\r\n constructor(\r\n public street_number: string,\r\n public street: string,\r\n public suburb: string,\r\n public city: string,\r\n public province: string,\r\n public country: string,\r\n public postal_code: string,\r\n ) { }\r\n}\r\n","export class EsolveGeocodeCoordsResult {\r\n constructor(\r\n public latitude: number,\r\n public longitude: number,\r\n ) { }\r\n}\r\n","import { EsolveGeocodeAddressResult } from './esolve-geocode-address-result.model';\r\nimport { EsolveGeocodeCoordsResult } from './esolve-geocode-coords-result.model';\r\n\r\nexport class EsolveGeocodeResult {\r\n constructor(\r\n public formatted_address: string,\r\n public address: EsolveGeocodeAddressResult,\r\n public coords: EsolveGeocodeCoordsResult,\r\n public status: string,\r\n public checksum: string,\r\n public cached: boolean,\r\n ) { }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../response';\r\n\r\nimport { EsolveGeocodeResultRecord } from './esolve-geocode-result-record.interface';\r\nimport { EsolveGeocodeResult } from './esolve-geocode-result.model';\r\nimport { EsolveGeocodeAddressResult } from './esolve-geocode-address-result.model';\r\nimport { EsolveGeocodeCoordsResult } from './esolve-geocode-coords-result.model';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveGeocoderService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n public geocode(\r\n street_number: string,\r\n street: string,\r\n suburb: string,\r\n city: string,\r\n province: string,\r\n country: string,\r\n postal_code: string,\r\n ): Observable<EsolveGeocodeResult> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveGeocodeResultRecord>>(\r\n `${this.config.api_url}/get-geocode.php`,\r\n {\r\n params: {\r\n street_number,\r\n street,\r\n suburb,\r\n city,\r\n province,\r\n country,\r\n postal_code,\r\n },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const record = response.records;\r\n\r\n return this.processGeocodeResult(record);\r\n }),\r\n );\r\n }\r\n\r\n public reverseGeocode(latitude: number, longitude: number): Observable<EsolveGeocodeResult> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveGeocodeResultRecord>>(\r\n `${this.config.api_url}/get-geocode.php`,\r\n {\r\n params: {\r\n latitude: latitude,\r\n longitude: longitude,\r\n },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const record = response.records;\r\n\r\n return this.processGeocodeResult(record);\r\n }),\r\n );\r\n }\r\n\r\n private processGeocodeResult(record: EsolveGeocodeResultRecord): EsolveGeocodeResult {\r\n const geocode_address = new EsolveGeocodeAddressResult(\r\n record.address.street_number,\r\n record.address.street,\r\n record.address.suburb,\r\n record.address.city,\r\n record.address.province,\r\n record.address.country,\r\n record.address.postal_code,\r\n );\r\n\r\n const geocode_coords = new EsolveGeocodeCoordsResult(\r\n record.latitude,\r\n record.longitude,\r\n );\r\n\r\n const geocode_result = new EsolveGeocodeResult(\r\n record.formatted_address,\r\n geocode_address,\r\n geocode_coords,\r\n record.status,\r\n record.checksum,\r\n record.cached,\r\n );\r\n\r\n return geocode_result;\r\n }\r\n}\r\n","import { EsolveAssetType } from './esolve-asset-type.type';\r\nimport { EsolveLinkedAssetRecord } from './esolve-linked-asset-record.interface';\r\n\r\nexport class EsolveLinkedAsset {\r\n public id: number;\r\n public name: string;\r\n public type: EsolveAssetType;\r\n public description: string;\r\n public src: string;\r\n\r\n constructor(record: EsolveLinkedAssetRecord) {\r\n this.id = +record.id;\r\n this.name = record.name;\r\n this.type = record.type;\r\n this.description = record.description;\r\n this.src = record.src;\r\n }\r\n}\r\n","import { EsolveSeoInfo } from '../shared/seo/esolve-seo-info.model';\r\nimport { EsolveSeoDetails } from '../shared/seo/esolve-seo-details.interface';\r\n\r\nexport class EsolveCategoryTreeItem implements EsolveSeoDetails {\r\n public id = '';\r\n public seo_details: EsolveSeoInfo;\r\n public total_stock?: number;\r\n public children?: EsolveCategoryTreeItem[];\r\n\r\n private image_path = '';\r\n\r\n public get small_image_src(): string {\r\n return this.getImagePath('small');\r\n }\r\n\r\n public get thumbnail_image_src(): string {\r\n return this.getImagePath('thumb');\r\n }\r\n\r\n public get tiny_image_src(): string {\r\n return this.getImagePath('tiny');\r\n }\r\n\r\n constructor(\r\n public type: 'category' | 'subcategory',\r\n public esolve_id: string | number,\r\n public parent_id: string,\r\n public description: string,\r\n public sef_description: string,\r\n public short_description: string,\r\n public sort_priority: number,\r\n public active: boolean,\r\n public display_only: boolean,\r\n private image_name: string,\r\n seo_title: string,\r\n seo_keywords: string,\r\n seo_description: string,\r\n children?: EsolveCategoryTreeItem[],\r\n ) {\r\n if (this.type === 'category') {\r\n this.id = `<<CAT>>${this.esolve_id}`;\r\n\r\n if (children != null) {\r\n this.children = children;\r\n }\r\n\r\n this.image_path = '/images/categories/';\r\n } else {\r\n this.id = `<<SUB>>${this.esolve_id}`;\r\n this.image_path = '/images/subcategories/';\r\n }\r\n\r\n if (seo_title.trim() === '') {\r\n seo_title = this.description;\r\n }\r\n\r\n this.seo_details = new EsolveSeoInfo(seo_title, seo_description, seo_keywords);\r\n }\r\n\r\n public getImagePath(image_size: 'small' | 'thumb' | 'tiny'): string {\r\n if (this.image_name !== '') {\r\n return `${this.image_path}${image_size}/${this.image_name}`;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveCategoryRecord } from './esolve-category-record.interface';\r\nimport { EsolveSubcategoryRecord } from './esolve-subcategory-record.interface';\r\nimport { EsolveCategoryTreeItem } from './esolve-category-tree-item.model';\r\nimport { EsolveCategoryTreeItemRecord } from './esolve-category-tree-item-record.interface';\r\nimport { EsolveCategoryTreeItemOptions } from './esolve-category-tree-item-options.interface';\r\nimport { EsolveCategoryIdentifier } from './esolve-category-identifier.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveCategoryTreeService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n /**\r\n * Retrieves the category tree from eSolve instance and coverts it to the correct format.\r\n */\r\n public getCategoryTree(): Observable<EsolveCategoryTreeItem[]> {\r\n return this.http\r\n .get<EsolveGetResponse<(EsolveCategoryRecord | EsolveSubcategoryRecord)[]>>(\r\n `${this.config.api_url}/get-tree.php`,\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processTree(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve the special tree structure for a specific special from the eSolve\r\n * instance and converts it into the correct format\r\n *\r\n * @param special_id Id of to special to get tree for\r\n *\r\n * @returns Observable containing special tree data\r\n */\r\n public getSpecialTree(\r\n special_id: number,\r\n ): Observable<EsolveCategoryTreeItem[]>{\r\n let params = new HttpParams();\r\n\r\n params = params.set('special_id', special_id);\r\n\r\n return this.http\r\n .get<EsolveGetResponse<(EsolveCategoryRecord | EsolveSubcategoryRecord)[]>>(\r\n `${this.config.api_url}/get-special-tree.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processTree(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve the details of a category tree item from the eSolve instance and\r\n * converts it to the correct format.\r\n *\r\n * @param options Filter options\r\n */\r\n public getCategoryTreeItem(\r\n options: EsolveCategoryTreeItemOptions,\r\n ): Observable<EsolveCategoryTreeItem> {\r\n let type!: 'category' | 'subcategory';\r\n let esolve_id!: number | string;\r\n let sef_description;\r\n\r\n if (options.id) {\r\n const categoryIdentifier = this.processID(options.id);\r\n\r\n if (categoryIdentifier) {\r\n type = categoryIdentifier.type;\r\n esolve_id = categoryIdentifier.esolve_id;\r\n }\r\n } else if (options.type) {\r\n type = options.type;\r\n\r\n if (options.esolve_id) {\r\n esolve_id = options.esolve_id;\r\n } else if (options.sef_description) {\r\n sef_description = options.sef_description;\r\n }\r\n }\r\n\r\n if (type && (esolve_id || sef_description)) {\r\n let params = new HttpParams();\r\n\r\n params = params.set('type', type);\r\n\r\n if (esolve_id) {\r\n params = params.set('id', esolve_id);\r\n }\r\n\r\n if (sef_description) {\r\n params = params.set('sef_description', sef_description);\r\n }\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveCategoryTreeItemRecord[]>>(\r\n `${this.config.api_url}/get-tree-item.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n return this.processTreeItem(response.records[0]);\r\n }),\r\n );\r\n }\r\n\r\n return throwError(() => 'Invalid options');\r\n }\r\n\r\n /**\r\n * Processes the eSolve tree records and converts them into the correct format.\r\n *\r\n * @param tree_records Records to process\r\n */\r\n private processTree(\r\n tree_records: (EsolveCategoryRecord | EsolveSubcategoryRecord)[],\r\n ): EsolveCategoryTreeItem[] {\r\n const tree_items: EsolveCategoryTreeItem[] = [];\r\n\r\n if (tree_records) {\r\n for (const tree_record of tree_records) {\r\n let esolve_id: string | number = '';\r\n let parent_id = '';\r\n let children: EsolveCategoryTreeItem[] = [];\r\n\r\n if (tree_record.type === 'category') {\r\n children = this.processTree(tree_record.children);\r\n esolve_id = tree_record.menu_id;\r\n parent_id = tree_record.owner_menu_id;\r\n } else {\r\n esolve_id = tree_record.id;\r\n parent_id = tree_record.menu_id;\r\n }\r\n\r\n tree_items.push(new EsolveCategoryTreeItem(\r\n tree_record.type,\r\n esolve_id,\r\n parent_id,\r\n tree_record.description,\r\n tree_record.sef_description,\r\n tree_record.seo_description,\r\n tree_record.sort_priority,\r\n tree_record.active,\r\n tree_record.display_only,\r\n tree_record.image,\r\n tree_record.seo_page_title,\r\n tree_record.seo_keywords,\r\n tree_record.short_description,\r\n children,\r\n ));\r\n }\r\n }\r\n\r\n return tree_items;\r\n }\r\n\r\n private processTreeItem(record: EsolveCategoryTreeItemRecord): EsolveCategoryTreeItem {\r\n return new EsolveCategoryTreeItem(\r\n record.type,\r\n record.id,\r\n record.parent_id,\r\n record.description,\r\n record.sef_description,\r\n record.short_description,\r\n record.sort_priority,\r\n record.active,\r\n record.display_only,\r\n record.image,\r\n record.seo_page_title,\r\n record.seo_keywords,\r\n record.seo_description,\r\n );\r\n }\r\n\r\n private processID(id: string): EsolveCategoryIdentifier | null {\r\n let type: 'category' | 'subcategory';\r\n let esolve_id: number | string;\r\n\r\n const type_code_regex = /^\\<\\<(CAT|SUB)\\>\\>/g;\r\n const match_results = id.match(type_code_regex);\r\n\r\n if (match_results) {\r\n const type_code = match_results[0];\r\n\r\n type = (type_code === '<<CAT>>' ? 'category' : 'subcategory');\r\n esolve_id = id.replace(type_code_regex, '');\r\n\r\n return {\r\n type,\r\n esolve_id,\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import { EsolveSeoInfo } from '../shared/seo/esolve-seo-info.model';\r\nimport { EsolveSeoDetails } from '../shared/seo/esolve-seo-details.interface';\r\n\r\nimport { EsolveManufacturerRecord } from './esolve-manufacturer-record.interface';\r\nimport { EsolveManufacturerImageSize } from './esolve-manufacturer-image-size.type';\r\n\r\nexport class EsolveManufacturer implements EsolveSeoDetails {\r\n public id: number = 0;\r\n public manufacturer: string = '';\r\n public sef_manufacturer: string = '';\r\n public title: string = '';\r\n public article: string = '';\r\n public sort_priority: number = 0;\r\n public is_active: boolean = false;\r\n public featured: boolean = false;\r\n public image_name: string = '';\r\n public seo_details: EsolveSeoInfo;\r\n\r\n public get original_image_src(): string {\r\n return this.getImagePath('original');\r\n }\r\n\r\n public get small_image_src(): string {\r\n return this.getImagePath('small');\r\n }\r\n\r\n public get thumbnail_image_src(): string {\r\n return this.getImagePath('thumb');\r\n }\r\n\r\n public get tiny_image_src(): string {\r\n return this.getImagePath('tiny');\r\n }\r\n\r\n constructor(record?: Partial<EsolveManufacturerRecord>) {\r\n let seo_title: string = '';\r\n let seo_keywords: string = '';\r\n let seo_description: string = '';\r\n\r\n if (record) {\r\n this.id = +(record.id ?? 0);\r\n this.manufacturer = record.manufacturer ?? '';\r\n this.sef_manufacturer = record.sef_manufacturer ?? '';\r\n this.title = record.title ?? '';\r\n this.article = record.article ?? '';\r\n this.sort_priority = +(record.sort_priority ?? 0);\r\n this.image_name = record.image_name ?? '';\r\n\r\n seo_title = record.seo_page_title ?? '';\r\n seo_keywords = record.seo_keywords ?? '';\r\n seo_description = record.seo_description ?? '';\r\n\r\n if (record.is_active) {\r\n this.is_active = !!+record.is_active;\r\n }\r\n\r\n if (record.featured) {\r\n this.featured = !!+record.featured;\r\n }\r\n }\r\n\r\n if (this.title.trim() === '') {\r\n this.title = this.manufacturer;\r\n }\r\n\r\n if (seo_title.trim() === '') {\r\n seo_title = this.title;\r\n }\r\n\r\n this.seo_details = new EsolveSeoInfo(\r\n seo_title,\r\n seo_description,\r\n seo_keywords,\r\n );\r\n }\r\n\r\n public getImagePath(image_size: EsolveManufacturerImageSize): string {\r\n if (this.image_name !== '') {\r\n return `/images/manufacturers/${image_size}/${this.image_name}`;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\nimport { Observable, of } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveManufacturer } from './esolve-manufacturer.model';\r\nimport { EsolveManufacturerOptions } from './esolve-manufacturer-options.interface';\r\nimport { EsolveManufacturerRecord } from './esolve-manufacturer-record.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveManufacturersService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n public getManufacturer(id: number): Observable<EsolveManufacturer> {\r\n const params = new HttpParams({\r\n fromObject: { manufacturers_id: id },\r\n });\r\n\r\n return this.getManufacturerSingle(params);\r\n }\r\n\r\n public getManufacturerFromSEF(sef_manufacturer: string): Observable<EsolveManufacturer> {\r\n const params = new HttpParams({\r\n fromObject: { sef_manufacturer },\r\n });\r\n\r\n return this.getManufacturerSingle(params);\r\n }\r\n\r\n public getManufacturers(options?: EsolveManufacturerOptions): Observable<EsolveManufacturer[]> {\r\n let params = new HttpParams();\r\n\r\n if (options?.featured_only) {\r\n params = params.set('featured_only', options.featured_only);\r\n }\r\n\r\n return this.getManufacturerRecords(params).pipe(\r\n map((records) => {\r\n const manufacturers: EsolveManufacturer[] = [];\r\n\r\n for (const record of records) {\r\n manufacturers.push(this.processManufacturer(record));\r\n }\r\n\r\n return manufacturers;\r\n }),\r\n catchError(() => {\r\n return of<EsolveManufacturer[]>([]);\r\n }),\r\n );\r\n }\r\n\r\n private getManufacturerSingle(params: HttpParams): Observable<EsolveManufacturer> {\r\n return this.getManufacturerRecords(params).pipe(\r\n map((records) => {\r\n const record = records[0];\r\n\r\n return this.processManufacturer(record);\r\n }),\r\n );\r\n }\r\n\r\n private getManufacturerRecords(\r\n params?: HttpParams,\r\n ): Observable<EsolveManufacturerRecord[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveManufacturerRecord[]>>(\r\n `${this.config.api_url}/get-manufacturers.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n return response.records;\r\n }),\r\n );\r\n }\r\n\r\n private processManufacturer(record: EsolveManufacturerRecord): EsolveManufacturer {\r\n return new EsolveManufacturer(record);\r\n }\r\n}\r\n","// Types\r\nexport * from './esolve-manufacturer-image-size.type';\r\n// Interfaces\r\nexport * from './esolve-manufacturer-record.interface';\r\nexport * from './esolve-manufacturer-options.interface';\r\n// Classes\r\nexport * from './esolve-manufacturer.model';\r\n// Service\r\nexport * from './esolve-manufacturers.service';\r\n","import { EsolveSeoInfo } from '../shared/seo/esolve-seo-info.model';\r\nimport { EsolveSeoDetails } from '../shared/seo/esolve-seo-details.interface';\r\n\r\nimport { EsolveRangeRecord } from './esolve-range-record.interface';\r\n\r\nexport class EsolveRange implements EsolveSeoDetails {\r\n public id: number = 0;\r\n public range: string = '';\r\n public sef_range: string = '';\r\n public manufacturers_id: number = 0;\r\n public title: string = '';\r\n public article: string = '';\r\n public is_active: boolean = false;\r\n public featured: boolean = false;\r\n public sort_priority: number = 0;\r\n public image_name: string = '';\r\n public seo_details: EsolveSeoInfo;\r\n\r\n public get image_src(): string {\r\n return this.getImagePath();\r\n }\r\n\r\n constructor(record?: Partial<EsolveRangeRecord>) {\r\n let seo_title: string = '';\r\n let seo_keywords: string = '';\r\n let seo_description: string = '';\r\n\r\n if (record) {\r\n this.id = +(record.id ?? 0);\r\n this.range = record.range ?? '';\r\n this.sef_range = record.sef_range ?? '';\r\n this.manufacturers_id = +(record.manufacturers_id ?? 0);\r\n this.title = record.title ?? '';\r\n this.article = record.article ?? '';\r\n this.sort_priority = +(record.sort_priority ?? 0);\r\n this.image_name = record.image_name ?? '';\r\n\r\n if (record.is_active) {\r\n this.is_active = !!+record.is_active;\r\n }\r\n\r\n if (record.featured) {\r\n this.featured = !!+record.featured;\r\n }\r\n\r\n seo_title = record.seo_page_title ?? '';\r\n seo_keywords = record.seo_keywords ?? '';\r\n seo_description = record.seo_description ?? '';\r\n }\r\n\r\n if (this.title.trim() === '') {\r\n this.title = this.range;\r\n }\r\n\r\n if (seo_title.trim() === '') {\r\n seo_title = this.title;\r\n }\r\n\r\n this.seo_details = new EsolveSeoInfo(\r\n seo_title,\r\n seo_description,\r\n seo_keywords,\r\n );\r\n }\r\n\r\n public getImagePath(): string {\r\n if (this.image_name !== '') {\r\n return `/images/ranges/${this.image_name}`;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\nimport { Observable, of } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveRange } from './esolve-range.model';\r\nimport { EsolveRangeOptions } from './esolve-range-options.interface';\r\nimport { EsolveRangeRecord } from './esolve-range-record.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveRangesService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n public getRange(id: number): Observable<EsolveRange> {\r\n const params = new HttpParams({\r\n fromObject: { ranges_id: id },\r\n });\r\n\r\n return this.getRangeSingle(params);\r\n }\r\n\r\n public getRangeFromSEF(sef_range: string): Observable<EsolveRange> {\r\n const params = new HttpParams({\r\n fromObject: { sef_range },\r\n });\r\n\r\n return this.getRangeSingle(params);\r\n }\r\n\r\n public getRanges(options?: EsolveRangeOptions): Observable<EsolveRange[]> {\r\n let params = new HttpParams();\r\n\r\n if (options?.featured_only) {\r\n params = params.set('featured_only', options.featured_only);\r\n }\r\n\r\n if (options?.manufacturers_id) {\r\n params = params.set('manufacturers_id', options.manufacturers_id);\r\n }\r\n\r\n return this.getRangeRecords(params).pipe(\r\n map((records) => {\r\n const ranges: EsolveRange[] = [];\r\n\r\n for (const record of records) {\r\n ranges.push(this.processRange(record));\r\n }\r\n\r\n return ranges;\r\n }),\r\n catchError(() => {\r\n return of<EsolveRange[]>([]);\r\n }),\r\n );\r\n }\r\n\r\n private getRangeSingle(params: HttpParams): Observable<EsolveRange> {\r\n return this.getRangeRecords(params).pipe(\r\n map((records) => {\r\n const record = records[0];\r\n\r\n return this.processRange(record);\r\n }),\r\n );\r\n }\r\n\r\n private getRangeRecords(\r\n params?: HttpParams,\r\n ): Observable<EsolveRangeRecord[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveRangeRecord[]>>(\r\n `${this.config.api_url}/get-ranges.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n return response.records;\r\n }),\r\n );\r\n }\r\n\r\n private processRange(record: EsolveRangeRecord): EsolveRange {\r\n return new EsolveRange(record);\r\n }\r\n}\r\n","import { EsolveTagRecord } from './esolve-tag-record.interface';\r\n\r\nexport class EsolveTag {\r\n public id: number = 0;\r\n public phrase: string = '';\r\n public weight: number = 0;\r\n public description: string = '';\r\n public image_name: string = '';\r\n\r\n /**\r\n * @deprecated To be removed in the future. Use `EsolveTag.phrase` instead\r\n */\r\n public get tag_phrase(): string {\r\n return this.phrase;\r\n }\r\n\r\n /**\r\n * @deprecated To be removed in the future. Use `EsolveTag.weight` instead\r\n */\r\n public get tag_weight(): number {\r\n return this.weight;\r\n }\r\n\r\n constructor(record?: Partial<EsolveTagRecord>) {\r\n if (record) {\r\n this.id = +(record.id ?? 0);\r\n this.phrase = record.tag_phrase ?? '';\r\n this.weight = +(record.tag_weight ?? 0);\r\n this.description = record.description ?? '';\r\n this.image_name = record.image_name ?? '';\r\n }\r\n }\r\n\r\n public getImagePath(): string {\r\n if (this.image_name !== '') {\r\n return `/images/tags/${this.image_name}`;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveTag } from './esolve-tag.model';\r\nimport { EsolveTagRecord } from './esolve-tag-record.interface';\r\nimport { EsolveTagOptions } from './esolve-tag-options.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveTagsService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n /**\r\n * Retrieves active topics from the list of topic ID's. Note that inactive or expired\r\n * topics will not be retrieved.\r\n *\r\n * @param options Tag filters\r\n */\r\n public getTags(options?: EsolveTagOptions): Observable<EsolveTag[]> {\r\n const params = this.parseOptions(options);\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveTagRecord[]>>(\r\n `${this.config.api_url}/get-tags.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processTags(response.records);\r\n }),\r\n );\r\n }\r\n\r\n private parseOptions(options?: EsolveTagOptions) {\r\n let params = new HttpParams();\r\n\r\n if (options) {\r\n if (options.tags_id) {\r\n if (Array.isArray(options.tags_id)) {\r\n const tag_list = options.tags_id;\r\n\r\n if (tag_list.length > 0) {\r\n params = params.append('tags_id', tag_list.join(','));\r\n }\r\n } else {\r\n params = params.append('tags_id', options.tags_id);\r\n }\r\n } else {\r\n if (options.phrase && options.phrase !== '') {\r\n params = params.append('phrase', options.phrase);\r\n\r\n const phrase_match_mode = options.phrase_match_mode;\r\n\r\n if (phrase_match_mode) {\r\n params = params.append('phrase_match_mode', phrase_match_mode);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return params;\r\n }\r\n\r\n private processTags(records: EsolveTagRecord[]): EsolveTag[] {\r\n const tags: EsolveTag[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n const tag = new EsolveTag(record);\r\n\r\n tags.push(tag);\r\n }\r\n }\r\n\r\n return tags;\r\n }\r\n}\r\n","// Types\r\nexport * from './esolve-tag-phrase-match-mode.type';\r\n// Interfaces\r\nexport * from './esolve-tag-record.interface';\r\nexport * from './esolve-tag-options.interface';\r\n// Classes\r\nexport * from './esolve-tag.model';\r\n// Service\r\nexport * from './esolve-tags.service';\r\n","export class EsolveTopic {\r\n public id: number = 0;\r\n public name: string = '';\r\n public short_description: string = '';\r\n public sort_priority: number = 0;\r\n\r\n constructor(record?: Partial<EsolveTopic>) {\r\n if (record) {\r\n this.id = +(record.id ?? 0);\r\n this.name = record.name ?? '';\r\n this.short_description = record.short_description ?? '';\r\n this.sort_priority = +(record.sort_priority ?? 0);\r\n }\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\nimport { EsolveTopic } from './esolve-topic.model';\r\nimport { EsolveTopicRecord } from './esolve-topic-record.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveTopicService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n /**\r\n * Retrieves active topics from the list of topic ID's. Note that inactive or expired\r\n * topics will not be retrieved.\r\n *\r\n * @param topic_id_list List of topic ID's that need to be retrieved\r\n */\r\n public getTopics(topic_id_list: readonly number[] = []): Observable<EsolveTopic[]> {\r\n let params = new HttpParams();\r\n\r\n if (topic_id_list.length > 0) {\r\n params = params.append('topic_id', topic_id_list.join(','));\r\n }\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveTopicRecord[]>>(\r\n `${this.config.api_url}/get-topics.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processTopics(response.records);\r\n }),\r\n );\r\n }\r\n\r\n private processTopics(records: EsolveTopicRecord[]): EsolveTopic[] {\r\n const topics: EsolveTopic[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n const topic = new EsolveTopic(record);\r\n\r\n topics.push(topic);\r\n }\r\n }\r\n\r\n return topics;\r\n }\r\n}\r\n","import { EsolveCategoryTreeItem } from '../../category-tree';\r\nimport { EsolveManufacturer } from '../../manufacturers';\r\nimport { EsolveRange } from '../../ranges';\r\nimport { EsolveTag } from '../../tags';\r\nimport { EsolveTopic } from '../../topics';\r\n\r\nimport { EsolveAssetType } from './esolve-asset-type.type';\r\nimport { EsolveAssetRecord } from './esolve-asset-record.interface';\r\n\r\nexport class EsolveAsset {\r\n public id: number = 0;\r\n public src: string = '';\r\n public name: string = '';\r\n public type?: EsolveAssetType;\r\n public description: string = '';\r\n public document_number: string = '';\r\n public document_type: string = '';\r\n public area_of_application: string = '';\r\n public asset_category: string = '';\r\n public asset_sub_category: string = '';\r\n public sort_priority: number = 0;\r\n public created?: string;\r\n public category?: EsolveCategoryTreeItem;\r\n public subcategory?: EsolveCategoryTreeItem;\r\n public manufacturer?: EsolveManufacturer;\r\n public range?: EsolveRange;\r\n public topics: EsolveTopic[] = [];\r\n public tags: EsolveTag[] = [];\r\n\r\n private image_name: string = '';\r\n\r\n /**\r\n * Shortcut to `getImagePath()`\r\n */\r\n public get image_src(): string {\r\n return this.getImagePath();\r\n }\r\n\r\n constructor(record: EsolveAssetRecord) {\r\n this.id = +record.id;\r\n this.src = record.src;\r\n this.name = record.name;\r\n this.type = record.type;\r\n this.description = record.description;\r\n\r\n this.document_number = record.document_number ?? '';\r\n this.document_type = record.document_type ?? '';\r\n this.area_of_application = record.area_of_application ?? '';\r\n this.asset_category = record.asset_category ?? '';\r\n this.asset_sub_category = record.asset_sub_category ?? '';\r\n this.sort_priority = +(record.sort_priority ?? '');\r\n this.image_name = record.image_name ?? '';\r\n\r\n if (record.created) {\r\n this.created = record.created;\r\n }\r\n\r\n if (record.category) {\r\n this.category = new EsolveCategoryTreeItem(\r\n record.category.type,\r\n record.category.id,\r\n record.category.parent_id,\r\n record.category.description,\r\n record.category.sef_description,\r\n record.category.short_description,\r\n record.category.sort_priority,\r\n record.category.active,\r\n record.category.display_only,\r\n record.category.image,\r\n record.category.seo_page_title,\r\n record.category.seo_keywords,\r\n record.category.seo_description,\r\n );\r\n }\r\n\r\n if (record.subcategory) {\r\n this.subcategory = new EsolveCategoryTreeItem(\r\n record.subcategory.type,\r\n record.subcategory.id,\r\n record.subcategory.parent_id,\r\n record.subcategory.description,\r\n record.subcategory.sef_description,\r\n record.subcategory.short_description,\r\n record.subcategory.sort_priority,\r\n record.subcategory.active,\r\n record.subcategory.display_only,\r\n record.subcategory.image,\r\n record.subcategory.seo_page_title,\r\n record.subcategory.seo_keywords,\r\n record.subcategory.seo_description,\r\n );\r\n }\r\n\r\n\r\n if (record.manufacturer) {\r\n this.manufacturer = new EsolveManufacturer(record.manufacturer);\r\n }\r\n\r\n if (record.range) {\r\n this.range = new EsolveRange(record.range);\r\n }\r\n\r\n if (record.topics && record.topics.length > 0) {\r\n for (const topic of record.topics) {\r\n this.topics.push(new EsolveTopic(topic));\r\n }\r\n }\r\n\r\n if (record.tags && record.tags.length > 0) {\r\n for (const tag of record.tags) {\r\n this.tags.push(new EsolveTag(tag));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Retrieve image path\r\n *\r\n * @returns Image path on CDN, else empty string if no image exists\r\n */\r\n public getImagePath(): string {\r\n if (this.image_name !== '') {\r\n return `/images/documents/${this.image_name}`;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { ESOLVE_CONNECT_CONFIG } from '../../esolve-connect-config.constant';\r\nimport { EsolveConnectConfig } from '../../esolve-connect.config';\r\nimport { EsolveGetResponse } from '../response';\r\nimport { EsolveList } from '../esolve-list.model';\r\n\r\nimport { EsolveAssetOptions } from './esolve-asset-options.interface';\r\nimport { EsolveAssetRecord } from './esolve-asset-record.interface';\r\nimport { EsolveAsset } from './esolve-asset.model';\r\nimport { EsolveAssetList } from './esolve-asset-list.type';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveAssetsService {\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n public getAsset(id: number): Observable<EsolveAsset> {\r\n const params = new HttpParams({ fromObject: { assets_id: id }});\r\n\r\n return this.getAssetRecords(params).pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const record = response.records[0];\r\n\r\n return this.processAsset(record);\r\n }),\r\n );\r\n }\r\n\r\n public getAssets(\r\n options?: EsolveAssetOptions,\r\n ): Observable<EsolveAssetList> {\r\n const params = this.parseOptions(options);\r\n\r\n return this.getAssetRecords(params).pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const assets: EsolveAsset[] = [];\r\n\r\n for (const record of response.records) {\r\n assets.push(this.processAsset(record));\r\n }\r\n\r\n const page = options?.page ?? 0;\r\n const rows = options?.rows ?? 0;\r\n const total = +response.additional_data.total_records;\r\n\r\n return new EsolveList(assets, page, rows, total);\r\n }),\r\n );\r\n }\r\n\r\n private processAsset(record: EsolveAssetRecord): EsolveAsset {\r\n return new EsolveAsset(record);\r\n }\r\n\r\n private getAssetRecords(\r\n params: HttpParams,\r\n ): Observable<EsolveGetResponse<EsolveAssetRecord[]>> {\r\n return this.http.get<EsolveGetResponse<EsolveAssetRecord[]>>(\r\n `${this.config.api_url}/get-assets.php`,\r\n { params },\r\n );\r\n }\r\n\r\n private parseOptions(options?: EsolveAssetOptions): HttpParams {\r\n let params = new HttpParams();\r\n\r\n if (!options) {\r\n return params;\r\n }\r\n\r\n if (options.page) {\r\n params = params.set('page', options.page);\r\n }\r\n\r\n if (options.rows) {\r\n params = params.set('rows', options.rows);\r\n }\r\n\r\n if (options.asset_type) {\r\n params = params.set('asset_type', options.asset_type);\r\n }\r\n\r\n if (options.category_id) {\r\n params = params.set('category_id', options.category_id);\r\n }\r\n\r\n if (options.subcategory_id) {\r\n params = params.set('subcategory_id', options.subcategory_id);\r\n }\r\n\r\n if (options.manufacturers_id) {\r\n params = params.set('manufacturers_id', options.manufacturers_id);\r\n }\r\n\r\n if (options.ranges_id) {\r\n params = params.set('ranges_id', options.ranges_id);\r\n }\r\n\r\n if (options.asset_category) {\r\n params = params.set('asset_category', options.asset_category);\r\n }\r\n\r\n if (options.asset_sub_category) {\r\n params = params.set('asset_sub_category', options.asset_sub_category);\r\n }\r\n\r\n if (options.document_number) {\r\n params = params.set('document_number', options.document_number);\r\n }\r\n\r\n if (options.document_type) {\r\n params = params.set('document_type', options.document_type);\r\n }\r\n\r\n if (options.area_of_application) {\r\n params = params.set('area_of_application', options.area_of_application);\r\n }\r\n\r\n return params;\r\n }\r\n}\r\n","// Types\r\nexport * from './esolve-asset-list.type';\r\nexport * from './esolve-asset-type.type';\r\n// Interfaces\r\nexport * from './esolve-linked-asset-record.interface';\r\nexport * from './esolve-asset-options.interface';\r\nexport * from './esolve-asset-record.interface';\r\n// Classes\r\nexport * from './esolve-linked-asset.model';\r\nexport * from './esolve-asset.model';\r\n// Service\r\nexport * from './esolve-assets.service';\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport {\r\n HttpClient,\r\n HttpParams,\r\n HttpErrorResponse,\r\n HttpHeaders,\r\n} from '@angular/common/http';\r\n\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { tap, catchError, map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveCookieService } from '../shared/cookie/esolve-cookie.service';\r\nimport { EsolveErrorHandlerService } from '../shared/errors/esolve-error-handler.service';\r\nimport { EsolveSetResponse } from '../shared/response';\r\n\r\nimport { EsolveSession } from '../session/esolve-session.model';\r\nimport { EsolveSessionService } from '../session/esolve-session.service';\r\n\r\nimport { EsolveLoginPostResponseItem } from './esolve-login-post-response-item.interface';\r\nimport { EsolveAuthGetResponse } from './esolve-auth-get-response.interface';\r\nimport { EsolveAuthCheckResponse } from './esolve-auth-check-response.interface';\r\nimport { EsolveAuthResult } from './esolve-auth-result.type';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveAuthService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n private session: EsolveSessionService,\r\n private errorHandler: EsolveErrorHandlerService,\r\n private cookieService: EsolveCookieService,\r\n ) { }\r\n\r\n public getAccessToken(\r\n email: string,\r\n password: string,\r\n anonymous: boolean = false,\r\n ): Observable<EsolveAuthGetResponse> {\r\n let params = new HttpParams();\r\n\r\n if (anonymous) {\r\n params = params.set('anonymous', true);\r\n }\r\n\r\n if (email !== '') {\r\n params = params.set('email', email);\r\n }\r\n\r\n if (password !== '') {\r\n params = params.set('password', password);\r\n }\r\n\r\n return this.http\r\n .get<EsolveAuthGetResponse>(\r\n `${this.config.api_url}/get-access-token.php`,\r\n {\r\n params,\r\n headers: new HttpHeaders({\r\n 'Accept-Language': '*',\r\n }),\r\n },\r\n )\r\n .pipe(\r\n tap((responseData) => {\r\n if (\r\n (responseData.type === 'error') ||\r\n (responseData.type === 'exception')\r\n ) {\r\n throw responseData;\r\n }\r\n }),\r\n catchError(this.handleError),\r\n tap((responseData) => {\r\n this.handleAuthentication(responseData.additional_data);\r\n }),\r\n );\r\n }\r\n\r\n public autoLogin(): void {\r\n this.session.restore(\r\n this.handleExpiration(),\r\n () => {\r\n this.getAccessToken('', '', true).toPromise().then(\r\n () => { },\r\n (error) => {\r\n console.error(error);\r\n },\r\n );\r\n },\r\n );\r\n }\r\n\r\n public login(email: string, password: string): Observable<number> {\r\n const body = {\r\n login: {\r\n email,\r\n password,\r\n },\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveLoginPostResponseItem>>(\r\n `${this.config.api_url}/set-login.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.responses === undefined) ||\r\n (response.responses.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const login_response = response.responses[0];\r\n\r\n if (\r\n (login_response.status.state !== 'success') &&\r\n (login_response.status.state !== 'warning')\r\n ) {\r\n throw login_response;\r\n }\r\n\r\n for (const response_log of login_response.log) {\r\n if (\r\n (response_log.type === 'success') &&\r\n (response_log.message_code === 'login_success')\r\n ) {\r\n const session_data = login_response.session_data;\r\n const user_id = +login_response.esolve_id;\r\n const location_id = +session_data.location_id;\r\n\r\n this.session.handleUpdateSession({\r\n user_id: user_id,\r\n location_id: location_id,\r\n });\r\n\r\n return user_id;\r\n }\r\n }\r\n\r\n throw login_response;\r\n }),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-login', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n public async logout(): Promise<EsolveAuthGetResponse> {\r\n this.session.clearTimer();\r\n this.cookieService.delete('_ws_id');\r\n\r\n const response = await this.getAccessToken('', '', true).toPromise();\r\n\r\n if (response) {\r\n return response;\r\n }\r\n\r\n throw new Error('Invalid response');\r\n }\r\n\r\n private checkAccessToken(session?: EsolveSession): Observable<EsolveAuthResult> {\r\n session = session || this.session.currentSession;\r\n\r\n const token = session?.key ?? '';\r\n\r\n return this.http\r\n .get<EsolveAuthCheckResponse>(\r\n `${this.config.api_url}/get-access-token.php`,\r\n {\r\n params: { key: token },\r\n headers: new HttpHeaders({\r\n 'Accept-Language': '*',\r\n }),\r\n },\r\n )\r\n .pipe(\r\n map((responseData) => {\r\n if (\r\n (responseData.type === 'error') ||\r\n (responseData.type === 'exception') ||\r\n (!responseData.additional_data.key_okay)\r\n ) {\r\n throw responseData;\r\n }\r\n\r\n const additional_data = responseData.additional_data;\r\n\r\n const result: EsolveAuthResult = {\r\n key: token,\r\n expires: additional_data.expires,\r\n expiry_time: additional_data.expiry_time,\r\n location_id: additional_data.location_id,\r\n user_id: additional_data.user_id,\r\n };\r\n\r\n return result;\r\n }),\r\n );\r\n }\r\n\r\n // Handlers\r\n private handleExpiration(): (session?: EsolveSession) => void {\r\n return (session?: EsolveSession) => {\r\n this.checkAccessToken(session).toPromise().then(\r\n (response) => {\r\n if (response) {\r\n this.handleAuthentication(response);\r\n }\r\n },\r\n () => {\r\n this.logout();\r\n },\r\n );\r\n };\r\n }\r\n\r\n private handleAuthentication(result: EsolveAuthResult): void {\r\n if (!result.key) {\r\n return;\r\n }\r\n\r\n this.session.handleSession(\r\n +result.user_id,\r\n +result.location_id,\r\n result.key,\r\n +result.expiry_time,\r\n +result.expires,\r\n this.handleExpiration(),\r\n );\r\n }\r\n\r\n private handleError(\r\n errorRes: EsolveAuthGetResponse | EsolveAuthCheckResponse,\r\n ): Observable<never> {\r\n const error = {\r\n message: 'An unknown error occurred',\r\n data: {},\r\n };\r\n\r\n if (\r\n (!errorRes.type) ||\r\n (!errorRes.service_type) ||\r\n (!errorRes.message)\r\n ) {\r\n return throwError(() => error);\r\n }\r\n\r\n if (errorRes.message.trim() !== '') {\r\n error.message = errorRes.message;\r\n }\r\n\r\n if (errorRes.additional_data) {\r\n error.data = errorRes.additional_data;\r\n }\r\n\r\n return throwError(() => error);\r\n }\r\n}\r\n","import { EsolveAddressType } from './esolve-address-type.type';\r\n\r\nexport class EsolveAddress {\r\n constructor(\r\n public id: number,\r\n public recipient: string,\r\n public address_type: EsolveAddressType,\r\n public pobox: string,\r\n public place_name: string,\r\n public street_number: string,\r\n public street: string,\r\n public suburb: string,\r\n public city: string,\r\n public province: string,\r\n public country: string,\r\n public postal_code: string,\r\n public latitude: number,\r\n public longitude: number,\r\n ) { }\r\n}\r\n","import { EsolveAddressResponse } from './esolve-address-response.interface';\r\nimport { EsolveGeocodeResult } from '../esolve-geocode-result.interface';\r\nimport { EsolveResponseResult } from '../../shared/response';\r\n\r\nexport class EsolveAddressResult extends EsolveResponseResult {\r\n public id: number;\r\n public address_validated: boolean;\r\n public geocode_status: string;\r\n public geocode_result: EsolveGeocodeResult | null;\r\n\r\n constructor(\r\n response: EsolveAddressResponse,\r\n ) {\r\n super(response);\r\n\r\n this.id = response.esolve_id;\r\n this.address_validated = response.address_validated;\r\n this.geocode_status = response.geocode_status;\r\n this.geocode_result = response.geocode_result;\r\n }\r\n}\r\n","import { EsolveUserAccountBusiness } from './esolve-user-account-business.model';\r\nimport { EsolveUserAccountContact } from './esolve-user-account-contact.model';\r\nimport { EsolveUserClientAccount } from './esolve-user-client-account.model';\r\n\r\nexport class EsolveUserAccount {\r\n public account_number?: string;\r\n public loyalty_number?: string;\r\n public business_details?: EsolveUserAccountBusiness;\r\n public contact_details?: EsolveUserAccountContact;\r\n public client_details?: EsolveUserClientAccount;\r\n\r\n constructor(\r\n public esolve_id: number,\r\n public email: string,\r\n public registration_type: string,\r\n public title: string,\r\n public first_name: string,\r\n public last_name: string,\r\n public initials: string,\r\n public gender: string,\r\n public identification_number: string,\r\n ) { }\r\n}\r\n","import {\r\n EsolvePostResponseItem,\r\n EsolveResponseResult,\r\n} from '../../shared/response';\r\n\r\nexport class EsolveUserAccountResult extends EsolveResponseResult {\r\n public id = 0;\r\n\r\n constructor(\r\n response: EsolvePostResponseItem,\r\n ) {\r\n super(response);\r\n\r\n this.id = +response.esolve_id;\r\n }\r\n}\r\n","export class EsolveUserAccountBusiness {\r\n constructor(\r\n public name: string,\r\n public vat_number: string,\r\n public description: string,\r\n public type: string,\r\n ) { }\r\n}\r\n","export class EsolveUserAccountContact {\r\n constructor(\r\n public tel_number?: string,\r\n public cell_number?: string,\r\n public fax_number?: string,\r\n ) { }\r\n}\r\n","export class EsolveUserClientAccount {\r\n constructor(\r\n public account?: string,\r\n public branch_code?: string,\r\n public account_group?: string,\r\n public pricing_group?: string,\r\n public price_list?: number,\r\n public loyalty_classification_id?: number,\r\n public company_name?: string,\r\n public client_contact_person?: string,\r\n public client_firstname?: string,\r\n public client_surname?: string,\r\n public client_email?: string,\r\n public client_contact_number?: string,\r\n public client_fax_number?: string,\r\n public client_cellphone_number?: string,\r\n public client_id_number?: string,\r\n public address_description?: string,\r\n public street?: string,\r\n public suburb?: string,\r\n public city?: string,\r\n public province?: string,\r\n public country?: string,\r\n public postal_code?: string,\r\n public postal_address?: string,\r\n public delivery_address?: string,\r\n public latitude?: number,\r\n public longitude?: number,\r\n public vat_number?: string,\r\n public credit_limit?: number,\r\n public pending_invoice_balance?: number,\r\n public external_account_balance?: number,\r\n public ageing?: string,\r\n public balance_last_updated?: string,\r\n public default_sellprice?: number,\r\n public client_classification?: string,\r\n public override_stock_listing_identifiers?: string,\r\n public requires_transaction_approval?: string,\r\n public is_active?: boolean,\r\n ) { }\r\n}\r\n","import { EsolveCartTotals } from '../../cart';\r\n\r\nexport class EsolveUserClientAccountBalances {\r\n constructor (\r\n public clients_id?: number,\r\n public account?: string,\r\n public cart_totals?: EsolveCartTotals,\r\n public credit_limit?: number,\r\n public external_account_balance?: number,\r\n public external_available_balance?: number,\r\n public new_external_available_balance?: number,\r\n public credit_limit_okay?: boolean,\r\n ) {}\r\n}\r\n","import { EsolveAddressType } from '../address';\r\n\r\nexport class EsolveTransactionAddress {\r\n constructor(\r\n public recipient: string,\r\n public address_type: EsolveAddressType,\r\n public address_description: string,\r\n public street_number: string,\r\n public street: string,\r\n public suburb: string,\r\n public city: string,\r\n public province: string,\r\n public country: string,\r\n public postal_code: string,\r\n public pobox: string,\r\n ) { }\r\n}\r\n","export class EsolveTransactionClient {\r\n constructor(\r\n public id: number,\r\n public account: string,\r\n public company_name: string,\r\n public branch_code: string,\r\n public email: string,\r\n public first_name: string,\r\n public last_name: string,\r\n public contact_number: string,\r\n ) { }\r\n}\r\n","import { EsolveTransactionItemPrice } from './esolve-transaction-item-price.model';\r\n\r\nexport class EsolveTransactionItem {\r\n constructor(\r\n public code: string,\r\n public name: string,\r\n public qty: number,\r\n public discount: number,\r\n public vat_rate: number,\r\n public price: EsolveTransactionItemPrice,\r\n public line_total: EsolveTransactionItemPrice,\r\n ) { }\r\n}\r\n","export class EsolveTransactionItemPrice {\r\n constructor(\r\n /**\r\n * Price without tax\r\n */\r\n public price: number,\r\n /**\r\n * Price with tax\r\n */\r\n public price_with_tax: number,\r\n /**\r\n * Price without tax and with discounts applied if applicable\r\n */\r\n public price_discounted: number,\r\n /**\r\n * Price with tax and with discounts applied if applicable\r\n */\r\n public price_with_tax_discounted: number,\r\n ) { }\r\n}\r\n","export class EsolveLocationAddress {\r\n constructor(\r\n public street: string,\r\n public suburb: string,\r\n public city: string,\r\n public province: string,\r\n public country: string,\r\n public postal_code: string,\r\n public latitude: number,\r\n public longitude: number,\r\n ) { }\r\n}\r\n","export class EsolveLocationContactInfo {\r\n constructor(\r\n public telnumber: string[],\r\n public cellnumber: string,\r\n public email: string,\r\n public fax: string,\r\n ) { }\r\n}\r\n","export class EsolveLocationGEO {\r\n constructor(\r\n public distance: number,\r\n public range: number,\r\n public target_description: string,\r\n ) { }\r\n}\r\n","export class EsolveLocationPOBoxAddress {\r\n constructor(\r\n public pobox: string,\r\n public city: string,\r\n public postal_code: string,\r\n ) { }\r\n}\r\n","export class EsolveLocationTradingDay {\r\n constructor(\r\n public open: string,\r\n public close: string,\r\n ) { }\r\n}\r\n","import { EsolveLocationTradingDay } from './esolve-location-trading-day.model';\r\n\r\nexport class EsolveLocationTradingTimes {\r\n constructor(\r\n public monday: EsolveLocationTradingDay,\r\n public tuesday: EsolveLocationTradingDay,\r\n public wednesday: EsolveLocationTradingDay,\r\n public thursday: EsolveLocationTradingDay,\r\n public friday: EsolveLocationTradingDay,\r\n public saturday: EsolveLocationTradingDay,\r\n public sunday: EsolveLocationTradingDay,\r\n public public_holiday: EsolveLocationTradingDay,\r\n public trading_hours_additional_info: string = '',\r\n ) { }\r\n}\r\n","import { EsolveLocationRecord } from '../interfaces/esolve-location-record.interface';\r\nimport { EsolveLocationAddress } from './esolve-location-address.model';\r\nimport { EsolveLocationContactInfo } from './esolve-location-contact-info.model';\r\nimport { EsolveLocationPOBoxAddress } from './esolve-location-pobox-address.model';\r\nimport { EsolveLocationTradingTimes } from './esolve-location-trading-times.model';\r\nimport { EsolveLocationTradingDay } from './esolve-location-trading-day.model';\r\nimport { EsolveLocationGEO } from './esolve-location-geo.model';\r\n\r\nexport class EsolveLocation {\r\n public id: number;\r\n public identifier: string;\r\n public description: string;\r\n public head_office: boolean;\r\n public default_location_for_payment_methods: boolean;\r\n public external_system_code: string;\r\n public erp_identifier: string;\r\n public userid: number;\r\n public importance: number;\r\n public active: boolean;\r\n public dispatches_stock: boolean;\r\n public include_on_enquiries: boolean;\r\n public include_on_store_locator: boolean;\r\n public website_url: string;\r\n\r\n public address: EsolveLocationAddress;\r\n public pobox_address: EsolveLocationPOBoxAddress;\r\n public contact_info: EsolveLocationContactInfo;\r\n public trading_times: EsolveLocationTradingTimes;\r\n public geo?: EsolveLocationGEO;\r\n\r\n constructor(record: EsolveLocationRecord) {\r\n this.id = +record.id;\r\n this.identifier = record.identifier;\r\n this.description = record.description;\r\n this.head_office = !!+record.head_office;\r\n this.erp_identifier = record.erp_identifier;\r\n this.external_system_code = record.external_system_code;\r\n this.default_location_for_payment_methods = !!+record.default_location_for_payment_methods;\r\n this.userid = +record.userid;\r\n this.importance = +record.importance;\r\n this.active = !!+record.is_active;\r\n this.dispatches_stock = !!+record.dispatches_stock;\r\n this.include_on_enquiries = !!+record.include_on_enquiries;\r\n this.include_on_store_locator = !!+record.include_on_store_locator;\r\n this.website_url = record.website_url;\r\n\r\n this.address = new EsolveLocationAddress(\r\n record.street,\r\n record.suburb,\r\n record.city,\r\n record.province,\r\n record.country,\r\n record.postal_code,\r\n +record.latitude,\r\n +record.longitude,\r\n );\r\n\r\n this.pobox_address = new EsolveLocationPOBoxAddress(\r\n record.pobox,\r\n record.pobox_city,\r\n record.pobox_postal_code,\r\n );\r\n\r\n const telnumbers = [];\r\n\r\n if (record.branch_telnumber.length > 0) {\r\n telnumbers.push(record.branch_telnumber);\r\n }\r\n\r\n if (record.branch_telnumber_2.length > 0) {\r\n telnumbers.push(record.branch_telnumber_2);\r\n }\r\n\r\n if (record.branch_telnumber_3.length > 0) {\r\n telnumbers.push(record.branch_telnumber_3);\r\n }\r\n\r\n this.contact_info = new EsolveLocationContactInfo(\r\n telnumbers,\r\n record.branch_cellnumber,\r\n record.branch_email,\r\n record.branch_fax,\r\n );\r\n\r\n const monday = new EsolveLocationTradingDay(\r\n record.monday_open_time,\r\n record.monday_close_time,\r\n );\r\n\r\n const tuesday = new EsolveLocationTradingDay(\r\n record.tuesday_open_time,\r\n record.tuesday_close_time,\r\n );\r\n\r\n const wednesday = new EsolveLocationTradingDay(\r\n record.wednesday_open_time,\r\n record.wednesday_close_time,\r\n );\r\n\r\n const thursday = new EsolveLocationTradingDay(\r\n record.thursday_open_time,\r\n record.thursday_close_time,\r\n );\r\n\r\n const friday = new EsolveLocationTradingDay(\r\n record.friday_open_time,\r\n record.friday_close_time,\r\n );\r\n\r\n const saturday = new EsolveLocationTradingDay(\r\n record.saturday_open_time,\r\n record.saturday_close_time,\r\n );\r\n\r\n const sunday = new EsolveLocationTradingDay(\r\n record.sunday_open_time,\r\n record.sunday_close_time,\r\n );\r\n\r\n const public_holiday = new EsolveLocationTradingDay(\r\n record.public_holiday_open_time,\r\n record.public_holiday_close_time,\r\n );\r\n\r\n this.trading_times = new EsolveLocationTradingTimes(\r\n monday,\r\n tuesday,\r\n wednesday,\r\n thursday,\r\n friday,\r\n saturday,\r\n sunday,\r\n public_holiday,\r\n record.trading_hours_additional_info,\r\n );\r\n\r\n this.geo = new EsolveLocationGEO(\r\n record.distance,\r\n record.range,\r\n record.target_description,\r\n );\r\n }\r\n}\r\n\r\n\r\n","// Classes\r\nexport * from './esolve-location-address.model';\r\nexport * from './esolve-location-contact-info.model';\r\nexport * from './esolve-location-geo.model';\r\nexport * from './esolve-location-pobox-address.model';\r\nexport * from './esolve-location-trading-day.model';\r\nexport * from './esolve-location-trading-times.model';\r\nexport * from './esolve-location.model';\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveLocation } from './classes/esolve-location.model';\r\nimport { EsolveLocationRecord } from './interfaces/esolve-location-record.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveLocationsService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n /**\r\n * Retrieves a list of stock locations\r\n *\r\n * @returns An `Observable` with an array of stock locations\r\n */\r\n public getStockLocations(): Observable<EsolveLocation[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveLocationRecord[]>>(\r\n `${this.config.api_url}/get-locations.php`,\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processStockLocations(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves a list of stock locations using the address_id as parameter or the latitude and longitude.\r\n * Set the addresses_id to 0 and the gps coordinates in order to retrieve the locations list when the address isn't\r\n * yet saved.\r\n *\r\n * @param addresses_id if supplied, the latitude and longitude on the address will be used.\r\n * @param latitude if supplied and address_id > 0, the value is ignored.\r\n * @param longitude if supplied and address_id > 0, the value is ignored.\r\n *\r\n * @returns An `Observable` with an array of stock locations\r\n */\r\n public getStockLocationsGeo(\r\n addresses_id: number = 0,\r\n latitude: number = 0,\r\n longitude: number = 0,\r\n ): Observable<EsolveLocation[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveLocationRecord[]>>(\r\n `${this.config.api_url}/get-locations-geo.php`,\r\n {\r\n params: {\r\n addresses_id,\r\n latitude,\r\n longitude,\r\n },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processStockLocations(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Processes the eSolve stock location records.\r\n *\r\n * @param records Records to process\r\n * @returns An array of processed stock location records\r\n */\r\n private processStockLocations(records: EsolveLocationRecord[]): EsolveLocation[] {\r\n const stock_locations: EsolveLocation[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n stock_locations.push(new EsolveLocation(record));\r\n }\r\n }\r\n\r\n return stock_locations;\r\n }\r\n}\r\n","import { EsolveLocation } from '../../locations';\r\n\r\nexport class EsolveTransactionLocation extends EsolveLocation { }\r\n","export class EsolveTransactionPaymentMethod {\r\n constructor(\r\n public id: number,\r\n public name: string,\r\n public description: string,\r\n public integration_type: string,\r\n public service_provider: string,\r\n ) { }\r\n}\r\n","export class EsolveTransactionShippingMethod {\r\n constructor(\r\n public id: number,\r\n public name: string,\r\n public delivery_category: string,\r\n public location: string,\r\n public description: string,\r\n public pricing: string,\r\n public client_to_collect: boolean,\r\n ) { }\r\n}\r\n","export class EsolveTransactionUser {\r\n constructor(\r\n public id: number,\r\n public email: string,\r\n public first_name: string,\r\n public last_name: string,\r\n public tel_number: string,\r\n public cell_number: string,\r\n ) { }\r\n}\r\n","import { EsolveTransactionAddress } from './esolve-transaction-address.model';\r\nimport { EsolveTransactionClient } from './esolve-transaction-client.model';\r\nimport { EsolveTransactionItem } from './esolve-transaction-item.model';\r\nimport { EsolveTransactionItemPrice } from './esolve-transaction-item-price.model';\r\nimport { EsolveTransactionItemRecord } from './esolve-transaction-item-record.interface';\r\nimport { EsolveTransactionLocation } from './esolve-transaction-location.model';\r\nimport { EsolveTransactionPaymentMethod } from './esolve-transaction-payment-method.model';\r\nimport { EsolveTransactionRecord } from './esolve-transaction-record.interface';\r\nimport { EsolveTransactionShippingMethod } from './esolve-transaction-shipping-method.model';\r\nimport { EsolveTransactionType } from './esolve-transaction-type.type';\r\nimport { EsolveTransactionUser } from './esolve-transaction-user.model';\r\n\r\nexport class EsolveTransaction {\r\n public id: number;\r\n public type: EsolveTransactionType;\r\n public status: string;\r\n public loyalty_number: string;\r\n public external_order_number: string;\r\n public external_invoice_number: string;\r\n\r\n // Dates\r\n public date: Date;\r\n public expected_date: Date;\r\n\r\n public client?: EsolveTransactionClient;\r\n public user?: EsolveTransactionUser;\r\n\r\n // Location\r\n public location?: EsolveTransactionLocation;\r\n\r\n // Totals\r\n public invoice_amount: number;\r\n public vat: number;\r\n public discount: number;\r\n public total: number;\r\n public shipping_total: number;\r\n public insurance_total: number;\r\n\r\n // Payment\r\n public payment_method?: EsolveTransactionPaymentMethod;\r\n public payment: number;\r\n public gateway_transaction_id: string;\r\n public payment_reference: string;\r\n public payment_description: string;\r\n\r\n // Shipping\r\n public shipping_method?: EsolveTransactionShippingMethod;\r\n\r\n // Address Details\r\n public address: EsolveTransactionAddress;\r\n\r\n // Transaction Items\r\n public items: EsolveTransactionItem[] = [];\r\n\r\n constructor(record: EsolveTransactionRecord) {\r\n this.id = +record.id;\r\n this.type = record.transaction_type;\r\n this.status = record.status;\r\n this.loyalty_number = record.loyaltynumber;\r\n this.external_order_number = record.external_order_number;\r\n this.external_invoice_number = record.external_invoice_number;\r\n\r\n this.date = new Date(+record.txdate_timestamp * 1000);\r\n this.expected_date = new Date(+record.expected_date_timestamp * 1000);\r\n\r\n this.invoice_amount = +record.invoice_amount;\r\n this.vat = +record.vat;\r\n this.discount = +record.discount;\r\n this.total = +record.total;\r\n this.shipping_total = +record.shipping_total;\r\n this.insurance_total = +record.insurance_total;\r\n\r\n this.payment = +record.payment;\r\n this.payment_reference = record.payment_reference;\r\n this.payment_description = record.payment_description;\r\n this.gateway_transaction_id = record.gateway_transaction_id;\r\n\r\n this.address = new EsolveTransactionAddress(\r\n record.recipient,\r\n record.address_type,\r\n record.address_description,\r\n record.street_number,\r\n record.street,\r\n record.suburb,\r\n record.city,\r\n record.province,\r\n record.country,\r\n record.postal_code,\r\n record.pobox,\r\n );\r\n\r\n if (record.user) {\r\n this.user = new EsolveTransactionUser(\r\n +record.user.id,\r\n record.user.email,\r\n record.user.firstname,\r\n record.user.surname,\r\n record.user.telnumber,\r\n record.user.cellnumber,\r\n );\r\n }\r\n\r\n if (record.client) {\r\n this.client = new EsolveTransactionClient(\r\n +record.client.id,\r\n record.client.account,\r\n record.client.company_name,\r\n record.client.branch_code,\r\n record.client.email,\r\n record.client.firstname,\r\n record.client.surname,\r\n record.client.contact_number,\r\n );\r\n }\r\n\r\n if (record.location_details) {\r\n this.location = new EsolveTransactionLocation(record.location_details);\r\n }\r\n\r\n if (record.payment_method_details) {\r\n this.payment_method = new EsolveTransactionPaymentMethod(\r\n record.payment_method_details.id,\r\n record.payment_method_details.paymethod_name,\r\n record.payment_method_details.description,\r\n record.payment_method_details.integration_type,\r\n record.payment_method_details.service_provider,\r\n );\r\n }\r\n\r\n if (record.shipping_method_details) {\r\n this.shipping_method = new EsolveTransactionShippingMethod(\r\n +record.shipping_method_details.id,\r\n record.shipping_method_details.carrier_name,\r\n record.shipping_method_details.delivery_category,\r\n record.shipping_method_details.location,\r\n record.shipping_method_details.description,\r\n record.shipping_method_details.pricing,\r\n !!record.shipping_method_details.client_to_collect,\r\n );\r\n }\r\n\r\n this.parseTransactionItems(record.transaction_items);\r\n }\r\n\r\n private parseTransactionItems(record_items: EsolveTransactionItemRecord[]): void {\r\n for (const record_item of record_items) {\r\n const price = new EsolveTransactionItemPrice(\r\n +record_item.price_exclusive,\r\n +record_item.price_inclusive,\r\n +record_item.price_exclusive_after_discount,\r\n +record_item.price_inclusive_after_discount,\r\n );\r\n\r\n const line_total = new EsolveTransactionItemPrice(\r\n +record_item.line_total_exclusive,\r\n +record_item.line_total_inclusive,\r\n +record_item.line_total_exclusive_after_discount,\r\n +record_item.line_total_inclusive_after_discount,\r\n );\r\n\r\n const item = new EsolveTransactionItem(\r\n record_item.code,\r\n record_item.name,\r\n +record_item.qty,\r\n +record_item.discount,\r\n +record_item.vat_rate,\r\n price,\r\n line_total,\r\n );\r\n\r\n this.items.push(item);\r\n }\r\n }\r\n}\r\n","import { EsolveList } from '../../shared/esolve-list.model';\r\nimport { EsolveTransaction } from './esolve-transaction.model';\r\n\r\nexport class EsolveTransactionList extends EsolveList<EsolveTransaction> { }\r\n","// Classes\r\nexport * from './esolve-transaction.model';\r\nexport * from './esolve-transaction-address.model';\r\nexport * from './esolve-transaction-client.model';\r\nexport * from './esolve-transaction-item.model';\r\nexport * from './esolve-transaction-list.model';\r\nexport * from './esolve-transaction-item-price.model';\r\nexport * from './esolve-transaction-location.model';\r\nexport * from './esolve-transaction-options.interface';\r\nexport * from './esolve-transaction-payment-method.model';\r\nexport * from './esolve-transaction-shipping-method.model';\r\nexport * from './esolve-transaction-user.model';\r\n// Interfaces\r\nexport * from './esolve-transaction-record.interface';\r\nexport * from './esolve-transaction-client-record.interface';\r\nexport * from './esolve-transaction-item-record.interface';\r\nexport * from './esolve-transaction-location-record.interface';\r\nexport * from './esolve-transaction-payment-method-record.interface';\r\nexport * from './esolve-transaction-shipping-method-record.interface';\r\nexport * from './esolve-transaction-user-record.interface';\r\n// Types\r\nexport * from './esolve-transaction-type.type';\r\n","import {\r\n EsolvePostResponseItem,\r\n EsolveResponseResult,\r\n} from '../../shared/response';\r\n\r\nexport class EsolveChangePasswordResult extends EsolveResponseResult {\r\n public password_updated: boolean;\r\n\r\n constructor(\r\n response: EsolvePostResponseItem,\r\n ) {\r\n super(response);\r\n\r\n this.password_updated = (response.status.state === 'success');\r\n }\r\n}\r\n","import { EsolveResponseResult } from '../../shared/response';\r\nimport { EsolveForgotPasswordResponse } from './esolve-forgot-password-response.interface';\r\n\r\nexport class EsolveResetPasswordResult extends EsolveResponseResult {\r\n public id: number;\r\n public reset_success: boolean;\r\n public password_matches_old: boolean;\r\n public login_required: boolean;\r\n\r\n constructor(\r\n response: EsolveForgotPasswordResponse,\r\n ) {\r\n super(response);\r\n\r\n this.id = response.esolve_id;\r\n this.reset_success = response.reset_success;\r\n this.password_matches_old = response.password_matches_old;\r\n this.login_required = response.login_required;\r\n }\r\n}\r\n","import { EsolveResponseResult } from '../../shared/response';\r\nimport { EsolveRegistrationPostResponseItem } from './esolve-registration-post-response-item.interface';\r\n\r\nexport class EsolveRegistrationResult extends EsolveResponseResult {\r\n public user_id: number;\r\n public guest: boolean;\r\n public authentication_required: boolean;\r\n public auto_login: boolean;\r\n public location_id: number;\r\n\r\n constructor(\r\n response: EsolveRegistrationPostResponseItem,\r\n ) {\r\n super(response);\r\n\r\n this.user_id = response.esolve_id;\r\n this.guest = response.guest;\r\n this.auto_login = response.auto_login;\r\n this.authentication_required = response.authentication_required;\r\n this.location_id = response.session_data.location_id;\r\n }\r\n}\r\n","import { EsolveResponseResult } from '../../shared/response';\r\nimport { EsolveAccountConfirmationPostResponseItem } from './esolve-account-confirmation-post-response-item.interface';\r\n\r\nexport class EsolveAccountConfirmationResult extends EsolveResponseResult {\r\n public user_id: number;\r\n public location_id: number;\r\n public recalculated_cart: boolean;\r\n\r\n constructor(\r\n response: EsolveAccountConfirmationPostResponseItem,\r\n ) {\r\n super(response);\r\n\r\n this.user_id = +response.esolve_id;\r\n this.location_id = +response.location_id;\r\n this.recalculated_cart = !!+response.recalculated_cart;\r\n }\r\n}\r\n","import {\r\n EsolvePostResponseItem,\r\n EsolveResponseResult,\r\n} from '../shared/response';\r\n\r\nexport class EsolveLocationUpdateResult extends EsolveResponseResult {\r\n public location_updated: boolean;\r\n\r\n constructor(\r\n response: EsolvePostResponseItem,\r\n ) {\r\n super(response);\r\n\r\n this.location_updated = (response.esolve_id > 0);\r\n }\r\n}\r\n","import { EsolveResponseResult } from '../../shared/response';\r\n\r\nexport class EsolveEmptyCartResult extends EsolveResponseResult { }\r\n","import { EsolveResponseResult } from '../../shared/response';\r\n\r\nimport { EsolveCheckoutResponse } from '../interfaces';\r\n\r\nexport class EsolveCheckoutResult extends EsolveResponseResult {\r\n public id = 0;\r\n public process_payment: boolean;\r\n\r\n constructor(response: EsolveCheckoutResponse) {\r\n super(response);\r\n\r\n this.id = +response.esolve_id;\r\n this.process_payment = response.process_payment ?? false;\r\n }\r\n}\r\n","import { EsolveCartStockItem } from './esolve-cart-stock-item.model';\r\n\r\nexport class EsolveCartItem {\r\n constructor(\r\n public id: number,\r\n public stock_item: EsolveCartStockItem,\r\n public qty: number,\r\n public delivery_category: string,\r\n public type: string,\r\n\r\n public price: number,\r\n public discount: number,\r\n public discount_interval: number,\r\n public vat_rate: number,\r\n\r\n public allow_quotes: boolean,\r\n public allow_orders: boolean,\r\n public must_collect: boolean,\r\n public requested_assembly: boolean,\r\n\r\n public price_incl: number,\r\n public discount_price: number,\r\n public discount_price_incl: number,\r\n public discount_total: number,\r\n public vat_total: number,\r\n public total: number,\r\n public total_incl: number,\r\n ) { }\r\n}\r\n","export class EsolveCartStockItem {\r\n /**\r\n * Path to tiny stock image\r\n */\r\n public get tiny_image_src(): string {\r\n return this.getImagePath('tiny');\r\n }\r\n\r\n /**\r\n * Path to thumbnail stock image\r\n */\r\n public get thumbnail_image_src(): string {\r\n return this.getImagePath('thumb');\r\n }\r\n\r\n /**\r\n * Path to small stock image\r\n */\r\n public get small_image_src(): string {\r\n return this.getImagePath('small');\r\n }\r\n\r\n /**\r\n * Path to big stock image\r\n */\r\n public get big_image_src(): string {\r\n return this.getImagePath('big');\r\n }\r\n\r\n /**\r\n * Path to original stock image\r\n */\r\n public get original_image_src(): string {\r\n return this.getImagePath('original');\r\n }\r\n\r\n constructor(\r\n public code: string,\r\n public name: string,\r\n public sef_name: string,\r\n public description: string,\r\n public active: boolean,\r\n public items_in_pack: number,\r\n public delivery_category: string,\r\n public onhand: number,\r\n private image_name: string,\r\n ) { }\r\n\r\n public getImagePath(\r\n image_size: 'tiny' | 'thumb' | 'small' | 'big' | 'original',\r\n ): string {\r\n if (this.image_name !== '') {\r\n return `/images/stock/${image_size}/${this.image_name}`;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","/**\r\n * Totals in cart\r\n */\r\nexport class EsolveCartTotals {\r\n /**\r\n * Grand total of cart which includes discount and VAT (NOTE: shipping and insurance is not included)\r\n */\r\n public get total(): number {\r\n return this.sub_total + this.vat_total - this.discount_total;\r\n }\r\n\r\n constructor(\r\n /**\r\n * Number of unique records in cart\r\n */\r\n public records: number = 0,\r\n /**\r\n * Total quantity of all items in a cart\r\n */\r\n public items: number = 0,\r\n /**\r\n * Total in cart before discount and VAT is added\r\n */\r\n public sub_total: number = 0,\r\n /**\r\n * Total VAT of all the items in the cart\r\n */\r\n public vat_total: number = 0,\r\n /**\r\n * Total discount of all the item in the cart\r\n */\r\n public discount_total: number = 0,\r\n ) { }\r\n}\r\n","import { EsolveTransactionType } from '../../account';\r\n\r\nimport { EsolveTransactionAnalyticsDataRecord } from '../interfaces';\r\n\r\nexport class EsolveTransactionAnalyticsData<T = any> {\r\n public transaction_id: number = 0;\r\n public transaction_type: EsolveTransactionType = 'order';\r\n /**\r\n * Data generated for analytics\r\n */\r\n public analytics_data?: T;\r\n\r\n constructor(record?: Partial<EsolveTransactionAnalyticsDataRecord<T>>) {\r\n if (record) {\r\n this.transaction_id = +(record.transaction_id ?? 0);\r\n this.transaction_type = record.transaction_type ?? 'order';\r\n\r\n if (record.analytics_data) {\r\n this.analytics_data = record.analytics_data;\r\n }\r\n }\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\n\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\n\r\nimport { iif, Observable, of } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveErrorHandlerService } from '../shared/errors/esolve-error-handler.service';\r\nimport {\r\n EsolveGetResponse,\r\n EsolveResponseHandlerService,\r\n EsolveSetResponse,\r\n} from '../shared/response';\r\n\r\nimport { EsolveTransactionType } from '../account';\r\n\r\nimport {\r\n EsolveCartItem,\r\n EsolveCartStockItem,\r\n EsolveCartTotals,\r\n EsolveCheckoutResult,\r\n EsolveEmptyCartResult,\r\n EsolveTransactionAnalyticsData,\r\n} from './classes';\r\nimport {\r\n EsolveAdditionalWhere,\r\n EsolveCartEmptyResponse,\r\n EsolveCartItemRecord,\r\n EsolveCartItemResponse,\r\n EsolveCartSetItem,\r\n EsolveCartTotalsRecord,\r\n EsolveCheckoutResponse,\r\n EsolveTrackingCode,\r\n EsolveTransactionAnalyticsDataRecord,\r\n} from './interfaces';\r\nimport { EsolveCart, EsolveCartSetAction } from './types';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveCartService {\r\n private _cached_tracking = 0;\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n private errorHandler: EsolveErrorHandlerService,\r\n private responseHandler: EsolveResponseHandlerService,\r\n ) { }\r\n\r\n /**\r\n * Retrieves the current cart\r\n *\r\n * @returns An `Observable` with an array of cart items\r\n */\r\n public getCart(): Observable<EsolveCart> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveCartItemRecord[]>>(\r\n `${this.config.api_url}/get-cart.php`,\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processCart(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Updates the cart by preforming various actions, such as adding, editing or removing items from the cart.\r\n *\r\n * @param items An array of options to update the cart\r\n * @param action The default action to preform\r\n * @returns An `Observable` with an array of responses that gives feedback on the requested changes\r\n */\r\n public setCart(\r\n items: EsolveCartSetItem[],\r\n action: EsolveCartSetAction = 'add',\r\n ): Observable<EsolveCartItemResponse[]> {\r\n const body = {\r\n items,\r\n action,\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveCartItemResponse>>(\r\n `${this.config.api_url}/set-cart-item.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.responses === undefined) {\r\n throw response;\r\n }\r\n\r\n return response.responses;\r\n }),\r\n );\r\n }\r\n\r\n public setCartEmpty(\r\n type: EsolveTransactionType,\r\n additional_where: EsolveAdditionalWhere[],\r\n ): Observable<EsolveEmptyCartResult> {\r\n const body = {\r\n type,\r\n additional_where,\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveCartEmptyResponse>>(\r\n `${this.config.api_url}/set-cart-empty.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => {\r\n this._cached_tracking = 0;\r\n\r\n return new EsolveEmptyCartResult(response);\r\n },\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-cart-empty', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves the totals of the cart with all the totals calculated\r\n *\r\n * @returns An `Observable` with an object containing cart totals\r\n */\r\n public getTotals(type?: EsolveTransactionType): Observable<EsolveCartTotals> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveCartTotalsRecord>>(\r\n `${this.config.api_url}/get-cart-totals.php`,\r\n {\r\n params: {\r\n type: type ?? '',\r\n },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processCartTotals(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves a tracking code for the cart\r\n *\r\n * @returns An `Observable` with the cart tracking code\r\n */\r\n public getTrackingCode(): Observable<number> {\r\n return iif(\r\n () => this._cached_tracking > 0,\r\n of(this._cached_tracking),\r\n this.http\r\n .get<EsolveGetResponse<EsolveTrackingCode>>(\r\n `${this.config.api_url}/get-checkout-tracking.php`,\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n this._cached_tracking = response.records.tracking;\r\n\r\n return response.records.tracking;\r\n }),\r\n ),\r\n );\r\n }\r\n\r\n /**\r\n * Get the data of the transaction for the analytics\r\n *\r\n * @param transaction_id ID of the transaction used in eSolve\r\n *\r\n * @returns An `Observable` with the analytics data\r\n */\r\n public getTransactionAnalyticsData<T = any>(\r\n transaction_id: number,\r\n ): Observable<EsolveTransactionAnalyticsData<T>> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveTransactionAnalyticsDataRecord<T>>>(\r\n `${this.config.api_url}/get-transaction-analytics-data.php`,\r\n {\r\n params: {\r\n transaction_id,\r\n },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return new EsolveTransactionAnalyticsData<T>(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Initiates checkout of the cart items\r\n *\r\n * @param type The cart type that needs to be checked out\r\n * @param addresses_id The ID of the delivery address\r\n * @param shipping_id The ID of the shipping method\r\n * @param payment_method_id The ID of the selected payment method\r\n * @param location_id The ID of the selected branch from with shipping needs to be calculated\r\n * @param comments Additional comments on the cart\r\n * @returns An `Observable` with the transaction ID\r\n */\r\n public checkout(\r\n type: EsolveTransactionType,\r\n addresses_id: number,\r\n shipping_id: number,\r\n payment_method_id = 0,\r\n location_id = 0,\r\n comments = '',\r\n ): Observable<EsolveCheckoutResult> {\r\n const body = {\r\n type,\r\n addresses_id,\r\n shipping_id,\r\n payment_method_id,\r\n location_id,\r\n comments,\r\n tracking: 0,\r\n };\r\n\r\n return this.getTrackingCode().pipe(\r\n switchMap((tracking) => {\r\n if (tracking <= 0) {\r\n throw tracking;\r\n }\r\n\r\n body.tracking = tracking;\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveCheckoutResponse>>(\r\n `${this.config.api_url}/set-checkout.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => {\r\n this._cached_tracking = 0;\r\n\r\n return new EsolveCheckoutResult(response);\r\n },\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-checkout', errorRes);\r\n }),\r\n );\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Processes the eSolve tree records\r\n *\r\n * @param cart_item_records Records to process\r\n * @returns An array of processed cart items\r\n */\r\n private processCart(cart_item_records: EsolveCartItemRecord[]): EsolveCart {\r\n const cart_items: EsolveCartItem[] = [];\r\n\r\n if (cart_item_records) {\r\n for (const cart_item_record of cart_item_records) {\r\n const cart_stock_item = new EsolveCartStockItem(\r\n cart_item_record.code,\r\n cart_item_record.name,\r\n cart_item_record.sef_name,\r\n cart_item_record.description,\r\n cart_item_record.is_active,\r\n +cart_item_record.items_in_pack,\r\n cart_item_record.delivery_category,\r\n +cart_item_record.onhand,\r\n cart_item_record.image_name,\r\n );\r\n\r\n cart_items.push(new EsolveCartItem(\r\n +cart_item_record.id,\r\n cart_stock_item,\r\n +cart_item_record.qty,\r\n cart_item_record.delivery_category,\r\n cart_item_record.type,\r\n +cart_item_record.price,\r\n +cart_item_record.discount,\r\n +cart_item_record.discount_interval,\r\n cart_item_record.vat_rate,\r\n cart_item_record.allow_quotes,\r\n cart_item_record.allow_orders,\r\n cart_item_record.must_collect,\r\n cart_item_record.requested_assembly,\r\n +cart_item_record.price_incl,\r\n +cart_item_record.discount_price,\r\n +cart_item_record.discount_price_incl,\r\n +cart_item_record.discount_total,\r\n +cart_item_record.vat_total,\r\n +cart_item_record.line_total,\r\n +cart_item_record.line_total_incl,\r\n ));\r\n }\r\n }\r\n\r\n return cart_items;\r\n }\r\n\r\n /**\r\n * Processes the eSolve cart totals\r\n *\r\n * @param record Data to process\r\n * @returns Processed cart totals\r\n */\r\n private processCartTotals(record: EsolveCartTotalsRecord): EsolveCartTotals {\r\n const cart_totals = new EsolveCartTotals(\r\n +record.records,\r\n +record.items,\r\n +record.total,\r\n +record.vat,\r\n +record.discount,\r\n );\r\n\r\n return cart_totals;\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\n\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\n\r\nimport { EsolveResult } from '../shared/esolve-result.model';\r\nimport { EsolveErrorHandlerService } from '../shared/errors';\r\nimport {\r\n EsolveDeleteResponse,\r\n EsolveSetResponse,\r\n EsolveGetResponse,\r\n EsolveResponseHandlerService,\r\n} from '../shared/response';\r\n\r\nimport { EsolveSessionService } from '../session/esolve-session.service';\r\n\r\nimport { EsolveLocationUpdateResult } from './esolve-location-update-result.model';\r\nimport {\r\n EsolveRegistrationPostResponseItem,\r\n EsolveRegistrationData,\r\n EsolveRegistrationResult,\r\n} from './registration';\r\nimport {\r\n EsolveAddress,\r\n EsolveAddressRecord,\r\n EsolveAddressResult,\r\n EsolveAddressPostData,\r\n EsolveAddressResponse,\r\n} from './address';\r\nimport {\r\n EsolveChangePasswordResult,\r\n EsolveResetPasswordResult,\r\n EsolveForgotPasswordResponse,\r\n EsolveForgotPasswordGetResult,\r\n} from './password';\r\nimport {\r\n EsolveTransactionRecord,\r\n EsolveTransaction,\r\n EsolveTransactionOptions,\r\n EsolveTransactionList,\r\n} from './transaction';\r\nimport {\r\n EsolveUserAccount,\r\n EsolveUserAccountData,\r\n EsolveUserAccountRecord,\r\n EsolveUserAccountResult,\r\n EsolveUserAccountContact,\r\n EsolveUserAccountBusiness,\r\n EsolveUserClientAccount,\r\n} from './user-account';\r\nimport { EsolveAccountConfirmationPostResponseItem, EsolveAccountConfirmationResult } from './confirmation';\r\nimport { EsolveUserClientAccountBalancesRecord } from './user-account/esolve-user-client-account-balances-record.interface';\r\nimport { EsolveUserClientAccountBalances } from './user-account/esolve-user-client-account-balances.model';\r\nimport { EsolveCartTotals } from '../cart';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveAccountService {\r\n private _user_id = 0;\r\n\r\n public get user_id(): number {\r\n return this._user_id;\r\n }\r\n\r\n public set user_id(value: number) {\r\n value = ((value > 0) ? value : 0);\r\n\r\n if (this._user_id !== value) {\r\n this._user_id = value;\r\n }\r\n }\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n private sessionService: EsolveSessionService,\r\n private errorHandler: EsolveErrorHandlerService,\r\n private responseHandler: EsolveResponseHandlerService,\r\n ) {\r\n this.sessionService.session.subscribe((session) => {\r\n if (session.key !== '') {\r\n this.user_id = session.id;\r\n }\r\n });\r\n }\r\n\r\n public updateUserAccount(user_account_data: EsolveUserAccountData): Observable<EsolveUserAccountResult> {\r\n const body = {\r\n account: user_account_data,\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse>(\r\n `${this.config.api_url}/set-user-account.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => new EsolveUserAccountResult(response),\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-user-account', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n public getUserAccount(): Observable<EsolveUserAccount> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveUserAccountRecord[]>>(\r\n `${this.config.api_url}/get-account.php`,\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length === 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const record = response.records[0];\r\n\r\n return this.processUserAccount(record);\r\n }),\r\n );\r\n }\r\n\r\n public setAddress(address_post_data: EsolveAddressPostData): Observable<EsolveAddressResult> {\r\n const body = {\r\n address: address_post_data,\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveAddressResponse>>(\r\n `${this.config.api_url}/set-address.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) =>\r\n this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => new EsolveAddressResult(response),\r\n ),\r\n ),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-registration', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n public getAddresses(): Observable<EsolveAddress[]> {\r\n try {\r\n this.loginGuard();\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveAddressRecord[]>>(\r\n `${this.config.api_url}/get-addresses.php`,\r\n {\r\n params: { user_id: this.user_id },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processUserAddress(response.records);\r\n }),\r\n );\r\n } catch (error) {\r\n return throwError(() => error);\r\n }\r\n }\r\n\r\n public deleteAddress(id: number): Observable<EsolveResult> {\r\n return this.http\r\n .delete<EsolveDeleteResponse>(\r\n `${this.config.api_url}/delete-address.php`,\r\n {\r\n params: { id },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => {\r\n if (\r\n (http_response.result === undefined) ||\r\n (http_response.result === null) ||\r\n (http_response.result.status !== 'success')\r\n ) {\r\n throw http_response;\r\n }\r\n\r\n return new EsolveResult(\r\n http_response.result.status,\r\n http_response.result.code,\r\n http_response.result.message,\r\n );\r\n }),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpDeleteError('delete-address', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n public register(user_registration: EsolveRegistrationData): Observable<EsolveRegistrationResult> {\r\n const body = {\r\n user: user_registration,\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveRegistrationPostResponseItem>>(\r\n `${this.config.api_url}/set-registration.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => {\r\n if (response.auto_login) {\r\n this.sessionService.handleUpdateSession({\r\n user_id: +response.esolve_id,\r\n location_id: +response.session_data.location_id,\r\n });\r\n }\r\n\r\n return new EsolveRegistrationResult(response);\r\n },\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-registration', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n public changePassword(password: string, confirm_password: string): Observable<EsolveChangePasswordResult> {\r\n const body = {\r\n password,\r\n confirm_password,\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse>(\r\n `${this.config.api_url}/set-change-password.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => {\r\n return new EsolveChangePasswordResult(response);\r\n },\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-change-password', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Submits the users confirmation key to the relevant backend server in order to\r\n * confirm the accounts validity. The key was emailed to the user hence if he received\r\n * it and enters the value, the email account can be seen as valid.\r\n *\r\n * @param key The key that was emailed to the registered user's email account.\r\n * @returns An `Observable` that contains the result of the account confirmation request.\r\n */\r\n public accountConfirmationRequest(key: string): Observable<EsolveAccountConfirmationResult> {\r\n const body = {\r\n key,\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveAccountConfirmationPostResponseItem>>(\r\n `${this.config.api_url}/set-account-confirmation.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => {\r\n if (response.auto_login) {\r\n this.sessionService.handleUpdateSession({\r\n user_id: +response.esolve_id,\r\n location_id: +response.location_id,\r\n });\r\n }\r\n\r\n return new EsolveAccountConfirmationResult(response);\r\n },\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-account-confirmation', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n public sendForgotPasswordRequest(email: string): Observable<boolean> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveForgotPasswordGetResult>>(\r\n `${this.config.api_url}/get-forgot-password.php`,\r\n { params: { email } },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n !('reset_link_sent' in response.records)\r\n ) {\r\n throw response;\r\n }\r\n\r\n return response.records.reset_link_sent;\r\n }),\r\n );\r\n }\r\n\r\n public resetPassword(\r\n reset_key: string,\r\n password: string,\r\n confirm_password: string,\r\n auto_login = true,\r\n ): Observable<EsolveResetPasswordResult> {\r\n return this.http\r\n .post<EsolveSetResponse<EsolveForgotPasswordResponse>>(\r\n `${this.config.api_url}/set-forgot-password.php`,\r\n {\r\n reset_key,\r\n password,\r\n confirm_password,\r\n auto_login,\r\n },\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => {\r\n if (!response.login_required) {\r\n this.sessionService.handleUpdateSession({\r\n user_id: +response.esolve_id,\r\n location_id: +response.session_data.location_id,\r\n });\r\n }\r\n\r\n return new EsolveResetPasswordResult(response);\r\n },\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-forgot-password', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n public updateLocation(location_id: number): Observable<EsolveLocationUpdateResult> {\r\n const body = { location_id };\r\n\r\n return this.http\r\n .post<EsolveSetResponse>(\r\n `${this.config.api_url}/set-session-location.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => {\r\n this.sessionService.handleUpdateSession({ location_id });\r\n\r\n return new EsolveLocationUpdateResult(response);\r\n },\r\n )),\r\n );\r\n }\r\n\r\n public getTransactions(options: EsolveTransactionOptions = {}): Observable<EsolveTransactionList> {\r\n try {\r\n this.loginGuard();\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveTransactionRecord[]>>(\r\n `${this.config.api_url}/get-transactions.php`,\r\n {\r\n params: {\r\n user_id: this.user_id,\r\n ...options,\r\n },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const items = this.processTransactions(response.records);\r\n const total = +response.additional_data.total_records ?? 0;\r\n const rows = options.rows ?? total;\r\n const page = options.page || 1;\r\n\r\n return new EsolveTransactionList(items, page, rows, total);\r\n }),\r\n );\r\n } catch (error) {\r\n return throwError(() => error);\r\n }\r\n }\r\n\r\n public getTransaction(id: number): Observable<EsolveTransaction> {\r\n try {\r\n this.loginGuard();\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveTransactionRecord[]>>(\r\n `${this.config.api_url}/get-transactions.php`,\r\n {\r\n params: {\r\n user_id: this.user_id,\r\n transaction_id: id,\r\n },\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const items = this.processTransactions(response.records);\r\n\r\n return items[0];\r\n }),\r\n );\r\n } catch (error) {\r\n return throwError(() => error);\r\n }\r\n }\r\n\r\n public getClientAccountBalances(): Observable<EsolveUserClientAccountBalances | undefined> {\r\n try {\r\n this.loginGuard();\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveUserClientAccountBalancesRecord[]>>(\r\n `${this.config.api_url}/get-client-account-balances.php`,\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processClientBalances(response.records);\r\n }),\r\n );\r\n } catch (error) {\r\n return throwError(() => error);\r\n }\r\n }\r\n\r\n private processUserAccount(record: EsolveUserAccountRecord): EsolveUserAccount {\r\n if (!record) {\r\n throw new Error('Invalid record');\r\n }\r\n\r\n if (+record.userid !== this._user_id) {\r\n throw new Error('Invalid user account retrieved');\r\n }\r\n\r\n const user_account = new EsolveUserAccount(\r\n +record.userid,\r\n record.email,\r\n record.registration_type,\r\n record.title,\r\n record.firstname,\r\n record.surname,\r\n record.initials,\r\n record.gender,\r\n record.idnumber,\r\n );\r\n\r\n user_account.contact_details = new EsolveUserAccountContact(\r\n record.telnumber,\r\n record.cellnumber,\r\n record.fax,\r\n );\r\n\r\n user_account.business_details = new EsolveUserAccountBusiness(\r\n record.busname,\r\n record.vatnum,\r\n record.busdescript,\r\n record.business_type,\r\n );\r\n\r\n if (record.client_details != undefined) {\r\n if (record.client_details?.account !== '') {\r\n user_account.client_details = new EsolveUserClientAccount(\r\n record.client_details.account,\r\n record.client_details.branch_code,\r\n record.client_details.account_group,\r\n record.client_details.pricing_group,\r\n +record.client_details.price_list,\r\n +record.client_details.loyalty_classification_id,\r\n record.client_details.company_name,\r\n record.client_details.client_contact_person,\r\n record.client_details.client_firstname,\r\n record.client_details.client_surname,\r\n record.client_details.client_email,\r\n record.client_details.client_contact_number,\r\n record.client_details.client_fax_number,\r\n record.client_details.client_cellphone_number,\r\n record.client_details.client_id_number,\r\n record.client_details.address_description,\r\n record.client_details.street,\r\n record.client_details.suburb,\r\n record.client_details.city,\r\n record.client_details.province,\r\n record.client_details.country,\r\n record.client_details.postal_code,\r\n record.client_details.postal_address,\r\n record.client_details.delivery_address,\r\n +record.client_details.latitude,\r\n +record.client_details.longitude,\r\n record.client_details.vat_number,\r\n +record.client_details.credit_limit,\r\n +record.client_details.pending_invoice_balance,\r\n +record.client_details.external_account_balance,\r\n record.client_details.ageing,\r\n record.client_details.balance_last_updated,\r\n +record.client_details.default_sellprice,\r\n record.client_details.client_classification,\r\n record.client_details.override_stock_listing_identifiers,\r\n record.client_details.requires_transaction_approval,\r\n record.client_details.is_active as boolean,\r\n );\r\n }\r\n }\r\n\r\n return user_account;\r\n }\r\n\r\n private processUserAddress(records: EsolveAddressRecord[]): EsolveAddress[] {\r\n const user_addresses: EsolveAddress[] = [];\r\n\r\n if (!records || (this._user_id === 0)) {\r\n return user_addresses;\r\n }\r\n\r\n for (const record of records) {\r\n if (+record.userid !== this._user_id) {\r\n continue;\r\n }\r\n\r\n user_addresses.push(new EsolveAddress(\r\n +record.id,\r\n record.recipient,\r\n record.address_type,\r\n record.pobox,\r\n record.place_name,\r\n record.street_number,\r\n record.street,\r\n record.suburb,\r\n record.city,\r\n record.province,\r\n record.country,\r\n record.postal_code,\r\n +record.latitude,\r\n +record.longitude,\r\n ));\r\n }\r\n\r\n return user_addresses;\r\n }\r\n\r\n private processTransactions(records: EsolveTransactionRecord[]): EsolveTransaction[] {\r\n const transactions: EsolveTransaction[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n const transaction = new EsolveTransaction(record);\r\n\r\n transactions.push(transaction);\r\n }\r\n }\r\n\r\n return transactions;\r\n }\r\n\r\n private processClientBalances(\r\n records: EsolveUserClientAccountBalancesRecord[],\r\n ): EsolveUserClientAccountBalances | undefined {\r\n\r\n for (const record of records) {\r\n if (!(+record.clients_id > 0)) {\r\n return undefined;\r\n }\r\n\r\n const cart_totals = new EsolveCartTotals(\r\n record.cart_totals.records,\r\n +record.cart_totals.items,\r\n +record.cart_totals.total,\r\n +record.cart_totals.vat,\r\n +record.cart_totals.discount,\r\n );\r\n\r\n return new EsolveUserClientAccountBalances (\r\n +record.clients_id,\r\n record.account,\r\n cart_totals,\r\n +record.credit_limit,\r\n +record.external_account_balance,\r\n +record.external_available_balance,\r\n +record.new_external_available_balance,\r\n !!+record.credit_limit_okay,\r\n );\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private loginGuard(): void {\r\n if (this.user_id <= 0) {\r\n this.errorHandler.throwError('login_required', 'Login is required');\r\n }\r\n }\r\n}\r\n","import { EsolveBannerType } from './esolve-banner-type.type';\r\nimport { EsolveBannerLink } from './esolve-banner-link.interface';\r\nimport { EsolveBannerImage } from './esolve-banner-image.model';\r\nimport { EsolveBannerImageSet } from './esolve-banner-image-set.interface';\r\n\r\nexport class EsolveBanner {\r\n public desktop_images: EsolveBannerImage[] = [];\r\n public mobile_images: EsolveBannerImage[] = [];\r\n public sub_images: EsolveBannerImage[] = [];\r\n\r\n constructor(\r\n public id: number,\r\n public banner_display_container: string,\r\n public identifier: string,\r\n public type: EsolveBannerType,\r\n public title: string,\r\n public article: string,\r\n public sort_priority: number,\r\n public link: EsolveBannerLink,\r\n images: EsolveBannerImageSet,\r\n ) {\r\n if (images.desktop) {\r\n this.desktop_images = images.desktop;\r\n }\r\n\r\n if (images.mobile) {\r\n this.mobile_images = images.mobile;\r\n }\r\n\r\n if (images.sub) {\r\n this.sub_images = images.sub;\r\n }\r\n }\r\n}\r\n","import { EsolveBannerImageType } from './esolve-banner-image-type.type';\r\nimport { EsolveBannerImageHotspot } from './esolve-banner-image-hotspot.model';\r\n\r\nexport class EsolveBannerImage {\r\n constructor(\r\n public id: number,\r\n public image_type: EsolveBannerImageType,\r\n public width: number,\r\n public height: number,\r\n public filename: string,\r\n public hotspots?: EsolveBannerImageHotspot[],\r\n ) { }\r\n\r\n public get src(): string {\r\n return '/images/banners/' + this.filename;\r\n }\r\n}\r\n","import { EsolveUrlTarget } from '../shared/esolve-url-target.type';\r\nimport { EsolveBannerImageHotspotCoords } from './esolve-banner-image-hotspot-coords.interface';\r\n\r\nexport class EsolveBannerImageHotspot {\r\n constructor(\r\n public url: string,\r\n public target: EsolveUrlTarget,\r\n public coords: EsolveBannerImageHotspotCoords[],\r\n public coords_string: string,\r\n ) { }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveBannerType } from './esolve-banner-type.type';\r\nimport { EsolveBanner } from './esolve-banner.model';\r\nimport { EsolveBannerImageSet } from './esolve-banner-image-set.interface';\r\nimport { EsolveBannerImage } from './esolve-banner-image.model';\r\nimport { EsolveBannerImageHotspot } from './esolve-banner-image-hotspot.model';\r\nimport { EsolveBannerRecord } from './esolve-banner-record.interface';\r\nimport { EsolveBannerImageHotspotRecord } from './esolve-banner-image-hotspot-record.interface';\r\nimport { EsolveBannerImageRecord } from './esolve-banner-image-record.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveBannerService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n /**\r\n * Retrieves banners records from eSolve instance\r\n *\r\n * @returns An observable of eSolve banners.\r\n */\r\n public getBanners(\r\n identifier?: string,\r\n banner_display_container?: string,\r\n enable_date_filter: boolean = false,\r\n ): Observable<EsolveBanner[]> {\r\n let params = new HttpParams({\r\n fromObject: { enable_date_filter },\r\n });\r\n\r\n if (identifier) {\r\n params = params.set('identifier', identifier);\r\n }\r\n\r\n if (banner_display_container) {\r\n params = params.set('banner_display_container', banner_display_container);\r\n }\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveBannerRecord[]>>(\r\n `${this.config.api_url}/get-banners.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processBanners(response.records);\r\n }),\r\n );\r\n }\r\n\r\n private processBannerImageHotspots(\r\n hotspot_records: EsolveBannerImageHotspotRecord[],\r\n ): EsolveBannerImageHotspot[] {\r\n const hotspots: EsolveBannerImageHotspot[] = [];\r\n\r\n if (hotspot_records.length > 0) {\r\n for (const hotspot_record of hotspot_records) {\r\n const hotspot = new EsolveBannerImageHotspot(\r\n hotspot_record.url,\r\n hotspot_record.target,\r\n hotspot_record.coords,\r\n hotspot_record.coords_string,\r\n );\r\n\r\n hotspots.push(hotspot);\r\n }\r\n }\r\n\r\n return hotspots;\r\n }\r\n\r\n private processBannerImages(\r\n image_records: EsolveBannerImageRecord[],\r\n banner_type: EsolveBannerType,\r\n ): EsolveBannerImage[] {\r\n const images: EsolveBannerImage[] = [];\r\n\r\n if (image_records.length > 0) {\r\n for (const image_record of image_records) {\r\n const image = new EsolveBannerImage(\r\n +image_record.id,\r\n image_record.image_type,\r\n +image_record.width,\r\n +image_record.height,\r\n image_record.filename,\r\n );\r\n\r\n if ((banner_type === 'hotspot') && (image_record.hotspots)) {\r\n const hotspots = this.processBannerImageHotspots(image_record.hotspots);\r\n image.hotspots = hotspots;\r\n }\r\n\r\n images.push(image);\r\n }\r\n }\r\n\r\n return images;\r\n }\r\n\r\n /**\r\n * Process banner records into banner objects\r\n * @param records Array of records\r\n * @returns List of banners\r\n */\r\n private processBanners(records: EsolveBannerRecord[]): EsolveBanner[] {\r\n const banners: EsolveBanner[] = [];\r\n\r\n if ((records) && (records.length > 0)) {\r\n for (const record of records) {\r\n const image_sets: EsolveBannerImageSet = {};\r\n\r\n if (record.images.desktop) {\r\n image_sets.desktop = this.processBannerImages(\r\n record.images.desktop,\r\n record.type,\r\n );\r\n }\r\n\r\n if (record.images.mobile) {\r\n image_sets.mobile = this.processBannerImages(\r\n record.images.mobile,\r\n record.type,\r\n );\r\n }\r\n\r\n if (record.images.sub) {\r\n image_sets.sub = this.processBannerImages(\r\n record.images.sub,\r\n record.type,\r\n );\r\n }\r\n\r\n const banner = new EsolveBanner(\r\n +record.id,\r\n record.banner_display_container,\r\n record.identifier,\r\n record.type,\r\n record.title,\r\n record.article,\r\n +record.sort_priority,\r\n {\r\n url: record.link.url,\r\n target: record.link.target,\r\n },\r\n image_sets,\r\n );\r\n\r\n banners.push(banner);\r\n }\r\n }\r\n\r\n return banners;\r\n }\r\n}\r\n","// Types\r\nexport * from './esolve-banner-image-type.type';\r\n\r\n// Classes\r\nexport * from './esolve-banner.model';\r\nexport * from './esolve-banner-image.model';\r\nexport * from './esolve-banner-image-hotspot.model';\r\n\r\n// Interfaces\r\nexport * from './esolve-banner-image-set.interface';\r\nexport * from './esolve-banner-image-record.interface';\r\nexport * from './esolve-banner-image-hotspot-coords.interface';\r\nexport * from './esolve-banner-image-hotspot-record.interface';\r\n\r\n// Service\r\nexport * from './esolve-banner.service';\r\n","export class EsolveMenuItem {\r\n constructor(\r\n public url: string,\r\n public name: string,\r\n public target: string,\r\n public children: EsolveMenuItem[] = [],\r\n ) { }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveMenuTreeRecord } from './esolve-menu-tree-record.interface';\r\nimport { EsolveMenuItem } from './esolve-menu-item.model';\r\nimport { EsolveMenu } from './esolve-menu.type';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveMenuService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n public getMenuTree(identifier: string): Observable<EsolveMenu> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveMenuTreeRecord[]>>(\r\n `${this.config.api_url}/get-menu-tree.php`,\r\n { params: { identifier } },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if ((!response) || (response.records === undefined)) {\r\n throw response;\r\n } else if (response.records.length === 0) {\r\n return [];\r\n }\r\n\r\n return this.handleMenu(response.records);\r\n }),\r\n );\r\n }\r\n\r\n private handleMenu(records?: EsolveMenuTreeRecord[]): EsolveMenu {\r\n const menu: EsolveMenu = [];\r\n\r\n if (typeof records !== 'undefined') {\r\n for (const menuTreeRecord of records) {\r\n menu.push(new EsolveMenuItem(\r\n menuTreeRecord.sef_url,\r\n menuTreeRecord.name,\r\n menuTreeRecord.target,\r\n this.handleMenu(menuTreeRecord.children),\r\n ));\r\n }\r\n }\r\n\r\n return menu;\r\n }\r\n}\r\n","export class EsolveNewsGroup {\r\n constructor(\r\n public id: number,\r\n public name: string,\r\n public description: string,\r\n public sef_name: string,\r\n ) { }\r\n}\r\n","export class EsolveNewsArticleAuthor {\r\n constructor(\r\n public userid: number,\r\n public email: string,\r\n public firstname: string,\r\n public surname: string,\r\n ) { }\r\n}\r\n","import { EsolveSeoInfo } from '../shared/seo/esolve-seo-info.model';\r\nimport { EsolveSeoDetails } from '../shared/seo/esolve-seo-details.interface';\r\n\r\nimport { EsolveTag } from '../tags';\r\nimport { EsolveTopic } from '../topics';\r\nimport { EsolveManufacturer } from '../manufacturers';\r\nimport { EsolveRange } from '../ranges';\r\n\r\nimport { EsolveNewsGroup } from './esolve-news-group.model';\r\nimport { EsolveNewsArticleAuthor } from './esolve-news-article-author.model';\r\nimport { EsolveNewsArticleRecord } from './esolve-news-article-record.interface';\r\n\r\nexport class EsolveNewsArticle implements EsolveSeoDetails {\r\n public id: number = 0;\r\n public title: string = '';\r\n public sef_title: string = '';\r\n public article: string = '';\r\n public short_description: string = '';\r\n public txdate: string = '';\r\n public active: boolean = false;\r\n public image: string = '';\r\n public featured: boolean = false;\r\n public topics: EsolveTopic[] = [];\r\n public tags: EsolveTag[] = [];\r\n public author?: EsolveNewsArticleAuthor;\r\n public group?: EsolveNewsGroup;\r\n public manufacturer?: EsolveManufacturer;\r\n public range?: EsolveRange;\r\n public seo_details: EsolveSeoInfo;\r\n\r\n constructor(record?: Partial<EsolveNewsArticleRecord>) {\r\n let seo_title = '';\r\n let seo_description = '';\r\n let seo_keywords = '';\r\n\r\n if (record) {\r\n this.id = +(record.id ?? 0);\r\n this.title = record.title ?? '';\r\n this.sef_title = record.sef_title ?? '';\r\n this.article = record.article ?? '';\r\n this.txdate = record.txdate ?? '';\r\n this.image = record.image ?? '';\r\n this.short_description = record.short_description ?? '';\r\n\r\n if (record.active) {\r\n this.active = !!+record.active;\r\n }\r\n\r\n if (record.featured) {\r\n this.featured = !!+record.featured;\r\n }\r\n\r\n seo_title = record.seo_page_title ?? '';\r\n seo_description = record.short_description ?? '';\r\n seo_keywords = record.seo_keywords ?? '';\r\n\r\n if (record.news_group) {\r\n const group_record = record.news_group;\r\n\r\n this.group = new EsolveNewsGroup(\r\n +group_record.id,\r\n group_record.name,\r\n group_record.description,\r\n group_record.sef_name,\r\n );\r\n }\r\n\r\n if (record.user) {\r\n this.author = new EsolveNewsArticleAuthor(\r\n record.user.userid,\r\n record.user.email,\r\n record.user.firstname,\r\n record.user.surname,\r\n );\r\n }\r\n\r\n if (record.manufacturer) {\r\n this.manufacturer = new EsolveManufacturer(record.manufacturer);\r\n }\r\n\r\n if (record.range) {\r\n this.range = new EsolveRange(record.range);\r\n }\r\n\r\n if (record.topics && record.topics.length > 0) {\r\n const topics = record.topics;\r\n\r\n for (const topic of topics) {\r\n this.topics.push(new EsolveTopic(topic));\r\n }\r\n }\r\n\r\n if (record.tags && record.tags.length > 0) {\r\n const tags = record.tags;\r\n\r\n for (const tag of tags) {\r\n this.tags.push(new EsolveTag(tag));\r\n }\r\n }\r\n }\r\n\r\n if (seo_title.trim() === '') {\r\n seo_title = this.title;\r\n }\r\n\r\n this.seo_details = new EsolveSeoInfo(\r\n seo_title,\r\n seo_description,\r\n seo_keywords,\r\n );\r\n }\r\n}\r\n","import { EsolveNewsArticle } from './esolve-news-article.model';\r\n\r\nexport class EsolveNewsArticleList {\r\n constructor(\r\n public newsArticles: EsolveNewsArticle[],\r\n public total: number,\r\n public page: number,\r\n ) { }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveNewsArticle } from './esolve-news-article.model';\r\nimport { EsolveNewsGroup } from './esolve-news-group.model';\r\nimport { EsolveNewsArticleRecord } from './esolve-news-article-record.interface';\r\nimport { EsolveNewsGroupRecord } from './esolve-news-group-record.interface';\r\nimport { EsolveNewsArticleList } from './esolve-news-article-list.model';\r\nimport { EsolveNewsArticleOptions } from './esolve-news-article-options.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveNewsService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n public getNewsArticle(identifier: string): Observable<EsolveNewsArticle> {\r\n const params = new HttpParams({ fromObject: { sef_title: identifier }});\r\n\r\n return this.getNewsRecords(params).pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const record = response.records[0];\r\n\r\n if (!record.active) {\r\n throw response;\r\n }\r\n\r\n return this.processNewsArticle(record);\r\n }),\r\n );\r\n }\r\n\r\n public getNewsArticles(\r\n options?: EsolveNewsArticleOptions,\r\n ): Observable<EsolveNewsArticleList> {\r\n const params = this.parseOptions(options);\r\n\r\n return this.getNewsRecords(params).pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const news_articles: EsolveNewsArticle[] = [];\r\n\r\n for (const record of response.records) {\r\n news_articles.push(this.processNewsArticle(record));\r\n }\r\n\r\n const page = options?.page ?? 0;\r\n const total_records = +response.additional_data.total_records;\r\n\r\n return new EsolveNewsArticleList(\r\n news_articles,\r\n total_records,\r\n page,\r\n );\r\n }),\r\n );\r\n }\r\n\r\n public getNewsGroups(): Observable<EsolveNewsGroup[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveNewsGroupRecord[]>>(\r\n `${this.config.api_url}/get-news-groups.php`,\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const news_groups: EsolveNewsGroup[] = [];\r\n\r\n for (const record of response.records) {\r\n news_groups.push(new EsolveNewsGroup(\r\n record.id,\r\n record.name,\r\n record.description,\r\n record.sef_name,\r\n ));\r\n }\r\n\r\n return news_groups;\r\n }),\r\n );\r\n }\r\n\r\n private processNewsArticle(record: EsolveNewsArticleRecord): EsolveNewsArticle {\r\n return new EsolveNewsArticle(record);\r\n }\r\n\r\n private getNewsRecords(\r\n params: HttpParams,\r\n ): Observable<EsolveGetResponse<EsolveNewsArticleRecord[]>> {\r\n return this.http.get<EsolveGetResponse<EsolveNewsArticleRecord[]>>(\r\n `${this.config.api_url}/get-news.php`,\r\n { params },\r\n );\r\n }\r\n\r\n private parseOptions(options?: EsolveNewsArticleOptions): HttpParams {\r\n let params = new HttpParams();\r\n\r\n if (!options) {\r\n return params;\r\n }\r\n\r\n if (options.news_group_id) {\r\n params = params.set('news_group_id', options.news_group_id);\r\n } else if (options.news_group_sef) {\r\n params = params.set('news_group_sef', options.news_group_sef);\r\n }\r\n\r\n if (options.page) {\r\n params = params.set('page', options.page);\r\n }\r\n\r\n if (options.rows) {\r\n params = params.set('rows', options.rows);\r\n }\r\n\r\n if (options.feature_only) {\r\n params = params.set('feature_only', options.feature_only);\r\n }\r\n\r\n if (options.manufacturers_id) {\r\n params = params.set('manufacturers_id', options.manufacturers_id);\r\n }\r\n\r\n if (options.ranges_id) {\r\n params = params.set('ranges_id', options.ranges_id);\r\n }\r\n\r\n if (options.from_date) {\r\n params = params.set('from_date', options.from_date);\r\n }\r\n\r\n if (options.to_date) {\r\n params = params.set('to_date', options.to_date);\r\n }\r\n\r\n if (options.search_phrase) {\r\n params = params.set('search_phrase', options.search_phrase);\r\n }\r\n\r\n return params;\r\n }\r\n}\r\n","// Types\r\nexport * from './esolve-stock-image-size.type';\r\nexport * from './esolve-media-stock-item-list.type';\r\nexport * from './esolve-stock-unit-of-measure.type';\r\nexport * from './esolve-stock-sort-field.type';\r\nexport * from './esolve-media-stock-sort-field.type';\r\n","import { EsolveColourRecord } from '../interfaces';\r\n\r\nexport class EsolveColour {\r\n public id: number;\r\n public colour: string;\r\n public description: string;\r\n\r\n constructor(record: Partial<EsolveColourRecord>) {\r\n this.id = record.id ?? 0;\r\n this.colour = record.colour ?? '';\r\n this.description = record.description ?? '';\r\n }\r\n}\r\n","export class EsolveStockBadge {\r\n constructor(\r\n public id: number,\r\n public text: string,\r\n public identifier: string,\r\n public font_colour: string,\r\n public badge_colour: string,\r\n public sort_priority: number,\r\n ) { }\r\n}\r\n","/**\r\n * Price of eSolve stock item\r\n */\r\nexport class EsolveStockPrice {\r\n public taxed: boolean;\r\n\r\n /**\r\n * Create stock price instance\r\n *\r\n * @param base_price Price without tax\r\n * @param base_price_with_tax Price with tax\r\n * @param sell_price Price without tax and with discounts applied if applicable\r\n * @param sell_price_with_tax Price with tax and with discounts applied if applicable\r\n * @param tax_rate Tax rate of the item\r\n * @param taxed Whether tax has been applied\r\n */\r\n constructor(\r\n /**\r\n * Price without tax\r\n */\r\n public base_price: number = 0,\r\n\r\n /**\r\n * Price with tax\r\n */\r\n public base_price_with_tax: number = 0,\r\n\r\n /**\r\n * Price without tax and with discounts applied if applicable\r\n */\r\n public sell_price: number = 0,\r\n\r\n /**\r\n * Price with tax and with discounts applied if applicable\r\n */\r\n public sell_price_with_tax: number = 0,\r\n\r\n /**\r\n * Vat Rate for the item\r\n */\r\n public tax_rate: number = 0,\r\n\r\n taxed?: boolean,\r\n ) {\r\n if ((this.base_price === 0) && (this.sell_price > 0)) {\r\n this.base_price = this.sell_price;\r\n this.base_price_with_tax = this.sell_price_with_tax;\r\n } else if ((this.base_price > 0) && (this.sell_price === 0)) {\r\n this.sell_price = this.base_price;\r\n this.sell_price_with_tax = this.base_price_with_tax;\r\n }\r\n\r\n this.taxed = taxed ?? this.base_price !== this.base_price_with_tax;\r\n }\r\n}\r\n","import { EsolveStockLeadTimesRecord } from '../interfaces';\r\n\r\nexport class EsolveStockLeadTimes {\r\n public min: number = 0;\r\n public max: number = 0;\r\n\r\n constructor(lead_times: EsolveStockLeadTimesRecord) {\r\n this.min = lead_times.min;\r\n this.max = lead_times.max;\r\n }\r\n}\r\n","import { EsolveCustomFields } from '../../shared/custom-fields';\r\nimport { EsolveSeoDetails, EsolveSeoInfo } from '../../shared/seo';\r\n\r\nimport { EsolveCategoryTreeItem } from '../../category-tree';\r\nimport { EsolveManufacturer } from '../../manufacturers';\r\nimport { EsolveRange } from '../../ranges';\r\nimport { EsolveTag } from '../../tags';\r\nimport { EsolveTopic } from '../../topics';\r\n\r\nimport { EsolveStockImageSize, EsolveStockUnitOfMeasure } from '../types';\r\nimport { EsolveStockBaseRecord } from '../interfaces';\r\nimport { EsolveStockBadge } from './esolve-stock-badge.model';\r\nimport { EsolveStockPrice } from './esolve-stock-price.model';\r\nimport { EsolveColour } from './esolve-colour.model';\r\nimport { EsolveStockLeadTimes } from './esolve-stock-lead-times.model';\r\n\r\nexport class EsolveStockItemBase<T extends EsolveCustomFields = EsolveCustomFields> implements EsolveSeoDetails {\r\n /**\r\n * eSolve Generated ID\r\n */\r\n public id: number = 0;\r\n /**\r\n * Code identifying the stock item\r\n */\r\n public code: string = '';\r\n /**\r\n * Name of the stock item\r\n */\r\n public name: string = '';\r\n /**\r\n * Search engine friendly name\r\n */\r\n public sef_name: string = '';\r\n /**\r\n * Short description of stock item\r\n */\r\n public description: string = '';\r\n /**\r\n * Full description of stock item\r\n */\r\n public extended_description: string = '';\r\n /**\r\n * Active state\r\n */\r\n public active: boolean = false;\r\n /**\r\n * Featured state\r\n */\r\n public featured: boolean = false;\r\n /**\r\n * Quotable state\r\n */\r\n public allow_quotes: boolean = true;\r\n /**\r\n * Orderable state\r\n */\r\n public allow_orders: boolean = true;\r\n /**\r\n * Item must be collected, not delivery possible\r\n */\r\n public must_collect: boolean = false;\r\n /**\r\n * Item needs to be assembled after purchase\r\n */\r\n public requires_assembly: boolean = false;\r\n /**\r\n * The type of delivery category associated with the item\r\n */\r\n public delivery_category: string = 'regular_item';\r\n /**\r\n * Number of stock available\r\n */\r\n public amount_in_stock: number = 0;\r\n /**\r\n * Total items linked to the item as a recipe\r\n */\r\n public total_recipe_items: number = 0;\r\n /**\r\n * Height measured in meters (m)\r\n */\r\n public height: number = 0;\r\n /**\r\n * Width measured in meters (m)\r\n */\r\n public width: number = 0;\r\n /**\r\n * Length / depth measured in meters (m)\r\n */\r\n public length: number = 0;\r\n /**\r\n * Weight measured in kilograms (kg)\r\n */\r\n public weight: number = 0;\r\n /**\r\n * Units used to measure the quantity\r\n */\r\n public unit_of_measure: EsolveStockUnitOfMeasure = 'unit';\r\n /**\r\n * ID of default category linked to the stock item\r\n *\r\n * @deprecated Use `category.esolve_id` field instead\r\n */\r\n public category_id: string = '';\r\n /**\r\n * Default linked category\r\n */\r\n public category?: EsolveCategoryTreeItem;\r\n /**\r\n * ID of default subcategory linked to the stock item\r\n *\r\n * @deprecated Use `subcategory.esolve_id` field instead\r\n */\r\n public subcategory_id: number = 0;\r\n /**\r\n * Default linked subcategory\r\n */\r\n public subcategory?: EsolveCategoryTreeItem;\r\n /**\r\n * ID of linked manufacturer\r\n *\r\n * @deprecated Use `manufacturer.id` field instead\r\n */\r\n public manufacturers_id: number = 0;\r\n /**\r\n * Linked manufacturer\r\n */\r\n public manufacturer?: EsolveManufacturer;\r\n /**\r\n * ID of linked range\r\n *\r\n * @deprecated Use `range.id` field instead\r\n */\r\n public ranges_id: number = 0;\r\n /**\r\n * Linked range\r\n */\r\n public range?: EsolveRange;\r\n /**\r\n * Default price\r\n */\r\n public price: EsolveStockPrice;\r\n /**\r\n * SEO page details\r\n */\r\n public seo_details: EsolveSeoInfo;\r\n /**\r\n * Linked tags\r\n */\r\n public tags: EsolveTag[] = [];\r\n /**\r\n * Linked topics\r\n */\r\n public topics: EsolveTopic[] = [];\r\n /**\r\n * Stock badges\r\n */\r\n public badges: EsolveStockBadge[] = [];\r\n /**\r\n * Stock item custom fields.\r\n */\r\n public custom_fields?: T;\r\n /**\r\n * Colours\r\n */\r\n public colours: EsolveColour[] = [];\r\n /**\r\n * Stock Item Lead Times for supply\r\n */\r\n public lead_times?: EsolveStockLeadTimes;\r\n\r\n /**\r\n * Image filename\r\n */\r\n private image_name: string = '';\r\n\r\n /**\r\n * Path to tiny stock image\r\n */\r\n public get tiny_image_src(): string {\r\n return this.getImagePath('tiny');\r\n }\r\n\r\n /**\r\n * Path to thumbnail stock image\r\n */\r\n public get thumbnail_image_src(): string {\r\n return this.getImagePath('thumb');\r\n }\r\n\r\n /**\r\n * Path to small stock image\r\n */\r\n public get small_image_src(): string {\r\n return this.getImagePath('small');\r\n }\r\n\r\n /**\r\n * Path to big stock image\r\n */\r\n public get big_image_src(): string {\r\n return this.getImagePath('big');\r\n }\r\n\r\n /**\r\n * Path to original stock image\r\n */\r\n public get original_image_src(): string {\r\n return this.getImagePath('original');\r\n }\r\n\r\n public get available(): boolean {\r\n return (this.amount_in_stock > 0);\r\n }\r\n\r\n constructor(record: Partial<EsolveStockBaseRecord<T>> = {}) {\r\n let seo_title = '';\r\n let seo_keywords = '';\r\n let base_price = 0;\r\n let base_price_with_tax = 0;\r\n let sell_price = 0;\r\n let sell_price_with_tax = 0;\r\n\r\n if (record) {\r\n this.id = +(record.id ?? 0);\r\n this.code = record.code ?? '';\r\n this.name = record.name ?? '';\r\n this.sef_name = record.sef_name ?? '';\r\n this.description = record.description ?? '';\r\n this.extended_description = record.extended_description ?? '';\r\n this.image_name = record.image_name ?? '';\r\n this.category_id = record.category_id ?? '';\r\n this.subcategory_id = +(record.subcategory_id ?? 0);\r\n this.manufacturers_id = +(record.manufacturers_id ?? 0);\r\n this.ranges_id = +(record.ranges_id ?? 0);\r\n this.delivery_category = record.delivery_category ?? 'regular_item';\r\n\r\n this.must_collect = !!+(record.must_collect ?? false);\r\n this.requires_assembly = !!+(record.requires_assembly ?? false);\r\n this.active = !!+(record.is_active ?? false);\r\n this.featured = !!+(record.is_featured ?? false);\r\n this.allow_quotes = (record.allow_quotes ?? true);\r\n this.allow_orders = (record.allow_orders ?? true);\r\n\r\n this.amount_in_stock = +(record.onhand ?? 0);\r\n this.total_recipe_items = +(record.total_recipe_items ?? 0);\r\n\r\n this.height = +(record.height ?? 0);\r\n this.width = +(record.width ?? 0);\r\n this.length = +(record.length ?? 0);\r\n this.weight = +(record.weight ?? 0);\r\n\r\n if (record.unit_of_measure) {\r\n this.unit_of_measure = record.unit_of_measure;\r\n }\r\n\r\n base_price = +(record.regular_sellprice ?? 0);\r\n base_price_with_tax = +(record.regular_sellprice_inclusive ?? 0);\r\n sell_price = +(record.sellprice ?? 0);\r\n sell_price_with_tax = +(record.sellprice_inclusive ?? 0);\r\n\r\n if ((record.tags) && (record.tags.length > 0)) {\r\n for (const tag of record.tags) {\r\n this.tags.push(new EsolveTag(tag));\r\n }\r\n }\r\n\r\n if ((record.topics) && (record.topics.length > 0)) {\r\n for (const topic of record.topics) {\r\n this.topics.push(new EsolveTopic(topic));\r\n }\r\n }\r\n\r\n if ((record.badges) && (record.badges.length > 0)) {\r\n for (const badge of record.badges) {\r\n this.badges.push(new EsolveStockBadge(\r\n +badge.id,\r\n badge.text,\r\n badge.identifier,\r\n badge.font_colour,\r\n badge.badge_colour,\r\n +badge.sort_priority,\r\n ));\r\n }\r\n }\r\n\r\n if (record.category) {\r\n this.category = new EsolveCategoryTreeItem(\r\n record.category.type,\r\n record.category.id,\r\n record.category.parent_id,\r\n record.category.description,\r\n record.category.sef_description,\r\n record.category.short_description,\r\n record.category.sort_priority,\r\n record.category.active,\r\n record.category.display_only,\r\n record.category.image,\r\n record.category.seo_page_title,\r\n record.category.seo_keywords,\r\n record.category.seo_description,\r\n );\r\n }\r\n\r\n if (record.subcategory) {\r\n this.subcategory = new EsolveCategoryTreeItem(\r\n record.subcategory.type,\r\n record.subcategory.id,\r\n record.subcategory.parent_id,\r\n record.subcategory.description,\r\n record.subcategory.sef_description,\r\n record.subcategory.short_description,\r\n record.subcategory.sort_priority,\r\n record.subcategory.active,\r\n record.subcategory.display_only,\r\n record.subcategory.image,\r\n record.subcategory.seo_page_title,\r\n record.subcategory.seo_keywords,\r\n record.subcategory.seo_description,\r\n );\r\n }\r\n\r\n if (record.manufacturer) {\r\n this.manufacturer = new EsolveManufacturer(record.manufacturer);\r\n }\r\n\r\n if (record.range) {\r\n this.range = new EsolveRange(record.range);\r\n }\r\n\r\n if (record.colours && record.colours.length > 0) {\r\n for (const colour of record.colours) {\r\n this.colours.push(new EsolveColour(colour));\r\n }\r\n }\r\n\r\n if (record.lead_times) {\r\n this.lead_times = new EsolveStockLeadTimes(record.lead_times);\r\n }\r\n\r\n if (record.custom_fields) {\r\n this.custom_fields = record.custom_fields;\r\n }\r\n\r\n seo_title = record.seo_page_title ?? '';\r\n seo_keywords = record.seo_keywords ?? '';\r\n }\r\n\r\n this.price = new EsolveStockPrice(\r\n base_price,\r\n base_price_with_tax,\r\n sell_price,\r\n sell_price_with_tax,\r\n record.vat_rate,\r\n record.vat_item,\r\n );\r\n\r\n if (seo_title.trim() === '') {\r\n seo_title = this.name;\r\n }\r\n\r\n this.seo_details = new EsolveSeoInfo(\r\n seo_title,\r\n this.description,\r\n seo_keywords,\r\n );\r\n }\r\n\r\n public getImagePath(image_size: EsolveStockImageSize): string {\r\n if (this.image_name !== '') {\r\n return `/images/stock/${image_size}/${this.image_name}`;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","\r\nimport { EsolveCustomFields } from '../../shared/custom-fields';\r\n\r\nimport { EsolveDependantItemRecord } from '../interfaces';\r\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\r\n\r\nexport class EsolveDependantItem<T extends EsolveCustomFields = EsolveCustomFields> extends EsolveStockItemBase<T> {\r\n public qty: number = 0;\r\n public dependency_description: string = '';\r\n\r\n constructor(record?: Partial<EsolveDependantItemRecord<T>>) {\r\n super(record);\r\n\r\n this.qty = +(record?.qty ?? 0);\r\n this.dependency_description = record?.dependency_description ?? '';\r\n }\r\n}\r\n","import { EsolveCustomFields } from '../../shared/custom-fields';\r\n\r\nimport { EsolveStockGroupItemRecord } from '../interfaces';\r\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\r\n\r\nexport class EsolveStockGroupItem<T extends EsolveCustomFields = EsolveCustomFields> extends EsolveStockItemBase<T> {\r\n constructor(record?: Partial<EsolveStockGroupItemRecord<T>>) {\r\n super(record);\r\n }\r\n}\r\n","import { EsolveCustomFields } from '../../shared/custom-fields';\r\n\r\nimport { EsolveStockGroupItemRecord } from '../interfaces';\r\nimport { EsolveStockGroupItem } from './esolve-stock-group-item.model';\r\n\r\nexport class EsolveStockGroup<T extends EsolveCustomFields = EsolveCustomFields> {\r\n public items: EsolveStockGroupItem<T>[] = [];\r\n\r\n constructor(\r\n public group: string,\r\n records: EsolveStockGroupItemRecord<T>[] = [],\r\n ) {\r\n if (records.length > 0) {\r\n for (const record of records) {\r\n this.items.push(new EsolveStockGroupItem(record));\r\n }\r\n }\r\n }\r\n}\r\n","import { EsolveCustomFields } from '../../shared/custom-fields';\r\n\r\nimport { EsolveStockRecord } from '../interfaces';\r\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\r\nimport { EsolveDependantItem } from './esolve-dependant-item.model';\r\nimport { EsolveStockGroup } from './esolve-stock-group.model';\r\n\r\n/**\r\n * Stock Item object. It can be a service or a product (physical and/or digital).\r\n */\r\nexport class EsolveStockItem<T extends EsolveCustomFields = EsolveCustomFields> extends EsolveStockItemBase<T> {\r\n public group?: EsolveStockGroup<T>;\r\n public dependencies?: EsolveDependantItem<T>[];\r\n\r\n /**\r\n * Constructs an instance of EsolveStockItem\r\n */\r\n constructor(record?: Partial<EsolveStockRecord<T>>) {\r\n super(record);\r\n\r\n if (record?.group && record.grouped_items) {\r\n this.group = new EsolveStockGroup(\r\n record.group,\r\n record.grouped_items,\r\n );\r\n }\r\n\r\n if (record?.dependencies) {\r\n this.dependencies = [];\r\n\r\n for (const dependant of record.dependencies) {\r\n this.dependencies.push(new EsolveDependantItem(dependant));\r\n }\r\n }\r\n }\r\n}\r\n","import { EsolveCustomFields } from '../../shared/custom-fields';\r\n\r\nimport { EsolveStockItem } from './esolve-stock-item.model';\r\n\r\n/**\r\n * Stock item object list\r\n */\r\nexport class EsolveStockItemList<T extends EsolveCustomFields = EsolveCustomFields> {\r\n constructor(\r\n public stock_items: EsolveStockItem<T>[],\r\n public total: number,\r\n public page: number,\r\n ) { }\r\n}\r\n","import { EsolveCustomFields } from '../../shared/custom-fields';\r\n\r\nimport { EsolveRecipeItemRecord } from '../interfaces';\r\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\r\n\r\nexport class EsolveRecipeStockItem<T extends EsolveCustomFields = EsolveCustomFields> extends EsolveStockItemBase<T> {\r\n public qty: number = 0;\r\n\r\n constructor(record?: Partial<EsolveRecipeItemRecord<T>>) {\r\n super(record);\r\n\r\n this.qty = +(record?.qty ?? 0);\r\n }\r\n}\r\n","import { EsolveCustomFields } from '../../shared/custom-fields';\r\n\r\nimport { EsolveLinkedStockRecord } from '../interfaces';\r\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\r\n\r\nexport class EsolveLinkedStockItem<T extends EsolveCustomFields = EsolveCustomFields> extends EsolveStockItemBase<T> {\r\n public qty: number = 0;\r\n\r\n constructor(record?: Partial<EsolveLinkedStockRecord<T>>) {\r\n super(record);\r\n\r\n this.qty = +(record?.qty ?? 0);\r\n }\r\n}\r\n","import { EsolveCustomFields } from '../../shared/custom-fields';\r\n\r\nimport { EsolveMediaStockItemRecord } from '../interfaces';\r\nimport { EsolveStockItemBase } from './esolve-stock-item-base.model';\r\n\r\nexport class EsolveMediaStockItem<\r\n T extends EsolveCustomFields = EsolveCustomFields,\r\n> extends EsolveStockItemBase<T> {\r\n constructor(record?: Partial<EsolveMediaStockItemRecord<T>>) {\r\n super(record);\r\n }\r\n}\r\n","import { EsolveStockImageSize } from '../types';\r\n\r\nexport class EsolveStockImage {\r\n /**\r\n * Path to tiny stock image\r\n */\r\n public get tiny_src(): string {\r\n return this.getImagePath('tiny');\r\n }\r\n\r\n /**\r\n * Path to thumbnail stock image\r\n */\r\n public get thumbnail_src(): string {\r\n return this.getImagePath('thumb');\r\n }\r\n\r\n /**\r\n * Path to small stock image\r\n */\r\n public get small_src(): string {\r\n return this.getImagePath('small');\r\n }\r\n\r\n /**\r\n * Path to big stock image\r\n */\r\n public get big_src(): string {\r\n return this.getImagePath('big');\r\n }\r\n\r\n /**\r\n * Path to original stock image\r\n */\r\n public get original_src(): string {\r\n return this.getImagePath('original');\r\n }\r\n\r\n constructor(\r\n private image_name: string,\r\n ) {\r\n if (this.image_name === 'no_image.jpg') {\r\n this.image_name = '';\r\n }\r\n }\r\n\r\n public getImagePath(image_size: EsolveStockImageSize): string {\r\n if (this.image_name !== '') {\r\n return `/images/stock/${image_size}/${this.image_name}`;\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n","import { EsolveAdditionalStockImageRecord } from '../interfaces';\r\n\r\nexport class EsolveAdditionalStockImage {\r\n public id: number = 0;\r\n public type: string = '';\r\n public url: string = '';\r\n public name: string = '';\r\n public etag?: string;\r\n public key?: string;\r\n\r\n constructor(record?: Partial<EsolveAdditionalStockImageRecord>) {\r\n if (record) {\r\n this.id = record.id ?? 0;\r\n this.type = record.type ?? '';\r\n this.url = record.url ?? '';\r\n this.name = record.name ?? '';\r\n\r\n if (record.etag) {\r\n this.etag = record.etag;\r\n }\r\n\r\n if (record.key) {\r\n this.key = record.key;\r\n }\r\n }\r\n }\r\n}\r\n","import { EsolveStockImageCollectionRecord } from '../interfaces';\r\nimport { EsolveAdditionalStockImage } from './esolve-additional-stock-image.model';\r\nimport { EsolveStockImage } from './esolve-stock-image.model';\r\n\r\nexport class EsolveStockImageCollection {\r\n public default_image: EsolveStockImage;\r\n public alt_images: EsolveStockImage[] = [];\r\n public additional_images: EsolveAdditionalStockImage[] = [];\r\n\r\n constructor(record?: Partial<EsolveStockImageCollectionRecord>) {\r\n this.default_image = new EsolveStockImage(\r\n record?.default_image ?? '',\r\n );\r\n\r\n if (!record) {\r\n return;\r\n }\r\n\r\n if (record.alt_images && record.alt_images.length > 0) {\r\n for (const alt_image_name of record.alt_images) {\r\n const alt_image = new EsolveStockImage(alt_image_name);\r\n\r\n this.alt_images.push(alt_image);\r\n }\r\n }\r\n\r\n if (record.additional_images && record.additional_images.length > 0) {\r\n for (const additional_image_record of record.additional_images) {\r\n const additional_image = new EsolveAdditionalStockImage(\r\n additional_image_record,\r\n );\r\n\r\n this.additional_images.push(additional_image);\r\n }\r\n }\r\n }\r\n};\r\n","// Classes\r\nexport * from './esolve-colour.model';\r\nexport * from './esolve-stock-item.model';\r\nexport * from './esolve-stock-price.model';\r\nexport * from './esolve-stock-badge.model';\r\nexport * from './esolve-stock-group.model';\r\nexport * from './esolve-stock-item-base.model';\r\nexport * from './esolve-stock-item-list.model';\r\nexport * from './esolve-stock-group-item.model';\r\nexport * from './esolve-recipe-stock-item.model';\r\nexport * from './esolve-linked-stock-item.model';\r\nexport * from './esolve-dependant-item.model';\r\nexport * from './esolve-stock-lead-times.model';\r\nexport * from './esolve-media-stock-item.model';\r\nexport * from './esolve-stock-image.model';\r\nexport * from './esolve-stock-image-collection.model';\r\nexport * from './esolve-additional-stock-image.model';\r\n","import { EsolveAdditionalStockImageRecord } from './esolve-additional-stock-image-record.interface';\r\n\r\nexport interface EsolveStockImageCollectionRecord {\r\n default_image: string;\r\n alt_images: string[];\r\n additional_images: EsolveAdditionalStockImageRecord[];\r\n};\r\n","// Interfaces\r\nexport * from './esolve-stock-record.interface';\r\nexport * from './esolve-colour-record.interface';\r\nexport * from './esolve-stock-base-record.interface';\r\nexport * from './esolve-stock-item-options.interface';\r\nexport * from './esolve-stock-badge-record.interface';\r\nexport * from './esolve-recipe-item-record.interface';\r\nexport * from './esolve-stock-filter-options.interface';\r\nexport * from './esolve-recipe-stock-options.interface';\r\nexport * from './esolve-linked-stock-record.interface';\r\nexport * from './esolve-stock-group-item-record.interface';\r\nexport * from './esolve-stock-linked-category-record.interface';\r\nexport * from './esolve-stock-lead-times-record.interface';\r\nexport * from './esolve-stock-image-collection-record.interface';\r\nexport * from './esolve-additional-stock-image-record.interface';\r\nexport * from './esolve-media-stock-item-record.interface';\r\nexport * from './esolve-media-stock-item-options.interface';\r\nexport * from './esolve-dependant-item-record.interface';\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\n\r\nimport { EsolveList } from '../shared/esolve-list.model';\r\nimport { EsolveGetResponse } from '../shared/response';\r\nimport { EsolveCustomFields } from '../shared/custom-fields';\r\nimport {\r\n EsolveFilterFactory,\r\n EsolveFilterList,\r\n EsolveFilterRecordList,\r\n EsolveMultipleSelectFilter,\r\n EsolveRangeFilter,\r\n EsolveSingleSelectFilter,\r\n} from '../shared/filters';\r\n\r\nimport { EsolveMediaStockItemList } from './types';\r\nimport {\r\n EsolveStockRecord,\r\n EsolveStockItemOptions,\r\n EsolveRecipeItemRecord,\r\n EsolveLinkedStockRecord,\r\n EsolveRecipeStockOptions,\r\n EsolveMediaStockItemRecord,\r\n EsolveMediaStockItemOptions,\r\n EsolveStockImageCollectionRecord,\r\n EsolveStockFilterOptions,\r\n} from './interfaces';\r\nimport {\r\n EsolveStockItem,\r\n EsolveStockItemList,\r\n EsolveMediaStockItem,\r\n EsolveRecipeStockItem,\r\n EsolveLinkedStockItem,\r\n EsolveStockImageCollection,\r\n} from './classes';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveStockService<T extends EsolveCustomFields = EsolveCustomFields> {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n /**\r\n * Retrieves the stock record from the eSolve instance using the code.\r\n *\r\n * @param code eSolve stock code\r\n */\r\n public getStockItem(code: string): Observable<EsolveStockItem<T>> {\r\n const params = new HttpParams({\r\n fromObject: {\r\n code,\r\n },\r\n });\r\n\r\n return this.getStockRecords(params).pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const stockRecord = response.records[0];\r\n\r\n return this.processStockItem(stockRecord);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves the stock record from the eSolve instance using the SEF name.\r\n *\r\n * @param sef_name SEF name of the stock item\r\n */\r\n public getStockItemFromSEF(sef_name: string): Observable<EsolveStockItem<T>> {\r\n const params = new HttpParams({\r\n fromObject: {\r\n sef_name,\r\n },\r\n });\r\n\r\n return this.getStockRecords(params).pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const stockRecord = response.records[0];\r\n\r\n return this.processStockItem(stockRecord);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves list of stock from the eSolve instance using info provided\r\n *\r\n * @param options Stock filter options\r\n */\r\n public getStockItems(\r\n options: EsolveStockItemOptions,\r\n ): Observable<EsolveStockItemList<T>> {\r\n let params = new HttpParams();\r\n\r\n if (options.page) {\r\n params = params.set('page', options.page);\r\n }\r\n\r\n if (options.rows) {\r\n params = params.set('rows', options.rows);\r\n }\r\n\r\n if (options.sort) {\r\n const sort = options.sort;\r\n\r\n if (sort.field) {\r\n params = params.set('sort', sort.field);\r\n }\r\n\r\n if (sort.order) {\r\n params = params.set('order', sort.order);\r\n }\r\n }\r\n\r\n if (options.search_phrase) {\r\n params = params.set('search_phrase', options.search_phrase);\r\n }\r\n\r\n if (options.display_only) {\r\n params = params.set('display_only', options.display_only);\r\n }\r\n\r\n if (options.is_active) {\r\n params = params.set('is_active', options.is_active);\r\n }\r\n\r\n if (options.category_id) {\r\n params = params.set('category_id', options.category_id);\r\n }\r\n\r\n if (options.subcategory_id) {\r\n params = params.set('subcategory_id', options.subcategory_id);\r\n }\r\n\r\n if (options.manufacturers_id) {\r\n params = params.set('manufacturers_id', options.manufacturers_id);\r\n }\r\n\r\n if (options.ranges_id) {\r\n params = params.set('ranges_id', options.ranges_id);\r\n }\r\n\r\n if (options.specials_id) {\r\n params = params.set('specials_id', options.specials_id);\r\n }\r\n\r\n if (options.tag_id_list && options.tag_id_list.length > 0) {\r\n params = params.set('tag_id', options.tag_id_list.join(','));\r\n }\r\n\r\n if (options.topic_id_list && options.topic_id_list.length > 0) {\r\n params = params.set('topic_id', options.topic_id_list.join(','));\r\n }\r\n\r\n if (options.filters) {\r\n let filters = options.filters;\r\n\r\n if (!Array.isArray(filters)) {\r\n filters = EsolveFilterFactory.covertFromObj(filters);\r\n }\r\n\r\n params = EsolveFilterFactory.convertToHttpParams(filters, params);\r\n }\r\n\r\n return this.getStockRecords(params).pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const stockItems: EsolveStockItem<T>[] = [];\r\n\r\n response.records.forEach((stockRecord) => {\r\n stockItems.push(this.processStockItem(stockRecord));\r\n });\r\n\r\n return new EsolveStockItemList(\r\n stockItems,\r\n +response.additional_data.total_records,\r\n options.page ?? 0,\r\n );\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve list of stock items linked to a stock item from the eSolve API\r\n *\r\n * @param code Stock item code\r\n */\r\n public getLinkedItems(\r\n code: string,\r\n ): Observable<EsolveLinkedStockItem<T>[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveLinkedStockRecord<T>[]>>(\r\n `${this.config.api_url}/get-linked-items.php`,\r\n { params: { code } },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n return this.processLinkedItems(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve list of stock items on a recipe from the eSolve API\r\n *\r\n * @param code Stock item code\r\n */\r\n public getRecipeItems(\r\n code: string,\r\n options?: EsolveRecipeStockOptions,\r\n ): Observable<EsolveRecipeStockItem<T>[]> {\r\n let params = new HttpParams().set('code', code);\r\n\r\n if (options) {\r\n if (options.page) {\r\n params = params.set('page', options.page);\r\n }\r\n\r\n if (options.rows) {\r\n params = params.set('rows', options.rows);\r\n }\r\n\r\n if (options.sort) {\r\n const sort = options.sort;\r\n\r\n if (sort.field) {\r\n params = params.set('sort', sort.field);\r\n }\r\n\r\n if (sort.order) {\r\n params = params.set('order', sort.order);\r\n }\r\n }\r\n }\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveRecipeItemRecord<T>[]>>(\r\n `${this.config.api_url}/get-recipe-items.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n return this.processRecipeItems(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve list of stock items linked to a stock item from the eSolve API\r\n *\r\n * @param options Filter options\r\n */\r\n public getMediaLinkedItems(\r\n options: EsolveMediaStockItemOptions,\r\n ): Observable<EsolveMediaStockItemList<T>> {\r\n let params = new HttpParams({\r\n fromObject: {\r\n rows: options.rows ?? 0,\r\n page: options.page ?? 0,\r\n ranges_id: options.ranges_id ?? 0,\r\n manufacturers_id: options.manufacturers_id ?? 0,\r\n display_only: options.display_only ?? false,\r\n is_active: options.is_active ?? true,\r\n },\r\n });\r\n\r\n if (options.sort) {\r\n const sort = options.sort;\r\n\r\n if (sort.field) {\r\n params = params.set('sort', sort.field);\r\n }\r\n\r\n if (sort.order) {\r\n params = params.set('order', sort.order);\r\n }\r\n }\r\n\r\n if (options.media_identifier) {\r\n params = params.append('media_identifier', options.media_identifier);\r\n }\r\n\r\n if (options.media_id) {\r\n params = params.append('media_id', options.media_id);\r\n }\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveMediaStockItemRecord<T>[]>>(\r\n `${this.config.api_url}/get-media-linked-items.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n const items = this.processMediaStockItems(response.records);\r\n\r\n return new EsolveList(\r\n items,\r\n options.page,\r\n options.rows,\r\n +response.additional_data.total_records,\r\n );\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves the full image collection of a stock item\r\n *\r\n * @param code Stock item code\r\n */\r\n public getStockImageCollection(code: string): Observable<EsolveStockImageCollection> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveStockImageCollectionRecord>>(\r\n `${this.config.api_url}/get-item-image-collection.php`,\r\n { params: { code } },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const collection = new EsolveStockImageCollection(\r\n response.records,\r\n );\r\n\r\n return collection;\r\n }),\r\n );\r\n }\r\n\r\n public getStockFilters(options: EsolveStockFilterOptions): Observable<EsolveFilterList> {\r\n let params = new HttpParams({\r\n fromObject: {\r\n category_id: options.category_id ?? '',\r\n subcategory_id: options.subcategory_id ?? 0,\r\n ranges_id: options.ranges_id ?? 0,\r\n manufacturers_id: options.manufacturers_id ?? 0,\r\n fields: options.fields.join(','),\r\n },\r\n });\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveFilterRecordList>>(\r\n `${this.config.api_url}/get-item-filters.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const filters = [];\r\n\r\n for (const record of response.records) {\r\n let filter = null;\r\n\r\n if (record.type === 'range') {\r\n filter = new EsolveRangeFilter(record.field, +record.min, +record.max);\r\n } else if (record.type === 'single') {\r\n filter = new EsolveSingleSelectFilter(record.field, record.values);\r\n } else if (record.type === 'multiple') {\r\n filter = new EsolveMultipleSelectFilter(record.field, record.values);\r\n }\r\n\r\n if (filter) {\r\n filters.push(filter);\r\n }\r\n }\r\n\r\n return filters;\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Processes the eSolve stock item record and converts it to an object.\r\n *\r\n * @param record eSolve stock item record\r\n */\r\n private processStockItem(record: EsolveStockRecord<T>): EsolveStockItem<T> {\r\n return new EsolveStockItem<T>(record);\r\n }\r\n\r\n /**\r\n * Processes the linked eSolve stock item records and converts them to objects.\r\n *\r\n * @param records Linked eSolve stock item records\r\n */\r\n private processLinkedItems(\r\n records: EsolveLinkedStockRecord<T>[],\r\n ): EsolveLinkedStockItem<T>[] {\r\n const items: EsolveLinkedStockItem<T>[] = [];\r\n\r\n if (records.length > 0) {\r\n for (const record of records) {\r\n items.push(new EsolveLinkedStockItem<T>(record));\r\n }\r\n }\r\n\r\n return items;\r\n }\r\n\r\n /**\r\n * Processes the recipe eSolve stock item records and converts them to objects.\r\n *\r\n * @param records Recipe eSolve stock item records\r\n */\r\n private processRecipeItems(\r\n records: EsolveRecipeItemRecord<T>[],\r\n ): EsolveRecipeStockItem<T>[] {\r\n const items: EsolveRecipeStockItem<T>[] = [];\r\n\r\n if (records.length > 0) {\r\n for (const record of records) {\r\n items.push(new EsolveRecipeStockItem<T>(record));\r\n }\r\n }\r\n\r\n return items;\r\n }\r\n\r\n /**\r\n * Processes the linked eSolve stock item records and converts them to objects.\r\n *\r\n * @param records Linked eSolve stock item records\r\n */\r\n private processMediaStockItems(\r\n records: EsolveMediaStockItemRecord<T>[],\r\n ): EsolveMediaStockItem<T>[] {\r\n const items: EsolveMediaStockItem<T>[] = [];\r\n\r\n if (records.length > 0) {\r\n for (const record of records) {\r\n items.push(new EsolveMediaStockItem<T>(record));\r\n }\r\n }\r\n\r\n return items;\r\n }\r\n\r\n /**\r\n * Retrieves stock records from HTTP params.\r\n * @param params HTTP client parameters\r\n */\r\n private getStockRecords(\r\n params: HttpParams,\r\n ): Observable<EsolveGetResponse<EsolveStockRecord<T>[]>> {\r\n return this.http.get<EsolveGetResponse<EsolveStockRecord<T>[]>>(\r\n `${this.config.api_url}/get-items.php`,\r\n { params },\r\n );\r\n }\r\n}\r\n","import { EsolveSpecialImageRecord } from './esolve-special-image-record.interface';\r\n\r\nexport class EsolveSpecialImage {\r\n public id: number;\r\n public width: number;\r\n public height: number;\r\n public src: string;\r\n\r\n constructor(record: EsolveSpecialImageRecord) {\r\n this.id = +record.id;\r\n this.width = +record.width;\r\n this.height = +record.height;\r\n this.src = record.src;\r\n }\r\n}\r\n","import { EsolveSpecialImage } from './esolve-special-image.model';\r\nimport { EsolveSpecialImageCollectionRecord } from './esolve-special-image-collection-record.interface';\r\n\r\nexport class EsolveSpecialImageCollection {\r\n public thumb?: EsolveSpecialImage[];\r\n public banner?: EsolveSpecialImage[];\r\n public banner_mobile?: EsolveSpecialImage[];\r\n\r\n constructor(\r\n public image_container: string,\r\n images: EsolveSpecialImageCollectionRecord,\r\n ) {\r\n if (images.thumb && images.thumb.length > 0) {\r\n this.thumb = [];\r\n\r\n for (const image_record of images.thumb) {\r\n this.thumb.push(new EsolveSpecialImage(image_record));\r\n }\r\n }\r\n\r\n if (images.banner && images.banner.length > 0) {\r\n this.banner = [];\r\n\r\n for (const image_record of images.banner) {\r\n this.banner.push(new EsolveSpecialImage(image_record));\r\n }\r\n }\r\n\r\n if (images.banner_mobile && images.banner_mobile.length > 0) {\r\n this.banner_mobile = [];\r\n\r\n for (const image_record of images.banner_mobile) {\r\n this.banner_mobile.push(new EsolveSpecialImage(image_record));\r\n }\r\n }\r\n }\r\n}\r\n","export class EsolveSpecialDates {\r\n constructor(\r\n public start: Date,\r\n public end: Date,\r\n ) { }\r\n}\r\n","import { EsolveLinkedAsset } from '../shared/assets';\r\nimport { EsolveSeoInfo } from '../shared/seo/esolve-seo-info.model';\r\nimport { EsolveSeoDetails } from '../shared/seo/esolve-seo-details.interface';\r\nimport { EsolveSpecialImageCollection } from './esolve-special-image-collection.model';\r\nimport { EsolveSpecialRecord } from './esolve-special-record.interface';\r\nimport { EsolveSpecialDates } from './esolve-special-dates.model';\r\n\r\nexport class EsolveSpecial implements EsolveSeoDetails {\r\n public id: number;\r\n public identifier: string;\r\n public sort_priority: number;\r\n public name: string;\r\n public description: string;\r\n public discount_type: number;\r\n public special_type: string;\r\n public location_id: number;\r\n public active: boolean;\r\n public featured: boolean;\r\n public assets: EsolveLinkedAsset[];\r\n public seo_details: EsolveSeoInfo;\r\n public images?: EsolveSpecialImageCollection;\r\n public dates?: EsolveSpecialDates;\r\n\r\n constructor(record: EsolveSpecialRecord) {\r\n this.id = +record.id;\r\n this.identifier = record.identifier;\r\n this.sort_priority = +record.sort_priority;\r\n this.name = record.name;\r\n this.description = record.description;\r\n this.discount_type = +record.discount_type;\r\n this.special_type = record.special_type;\r\n this.location_id = +record.location_id;\r\n this.active = !!+record.active;\r\n this.featured = !!+record.featured;\r\n this.assets = [];\r\n\r\n if (record.assets.length > 0) {\r\n for (const asset_record of record.assets) {\r\n this.assets.push(new EsolveLinkedAsset(asset_record));\r\n }\r\n }\r\n\r\n if (\r\n record.images &&\r\n (\r\n (\r\n record.images.thumb &&\r\n record.images.thumb.length > 0\r\n ) ||\r\n (\r\n record.images.banner &&\r\n record.images.banner.length > 0\r\n ) ||\r\n (\r\n record.images.banner_mobile &&\r\n record.images.banner_mobile.length > 0\r\n )\r\n ) &&\r\n record.image_container.trim() !== ''\r\n ) {\r\n this.images = new EsolveSpecialImageCollection(\r\n record.image_container,\r\n record.images,\r\n );\r\n }\r\n\r\n const start_date = new Date(+record.from_date_timestamp * 1000);\r\n const end_date = new Date(+record.to_date_timestamp * 1000);\r\n\r\n this.dates = new EsolveSpecialDates(start_date, end_date);\r\n\r\n if (record.seo_page_title.trim() === '') {\r\n record.seo_page_title = this.name;\r\n }\r\n\r\n this.seo_details = new EsolveSeoInfo(\r\n record.seo_page_title,\r\n record.seo_description,\r\n record.seo_keywords,\r\n );\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\nimport { Observable, of } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveSpecial } from './esolve-special.model';\r\nimport { EsolveSpecialOptions } from './esolve-special-options.interface';\r\nimport { EsolveSpecialRecord } from './esolve-special-record.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveSpecialsService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n public getSpecial(specials_id: number): Observable<EsolveSpecial> {\r\n const params = new HttpParams({\r\n fromObject: { specials_id },\r\n });\r\n\r\n return this.getSpecialSingle(params);\r\n }\r\n\r\n public getSpecialFromIdentifier(identifier: string): Observable<EsolveSpecial> {\r\n const params = new HttpParams({\r\n fromObject: { identifier },\r\n });\r\n\r\n return this.getSpecialSingle(params);\r\n }\r\n\r\n public getSpecials(options?: EsolveSpecialOptions): Observable<EsolveSpecial[]> {\r\n let params = new HttpParams();\r\n\r\n if (options?.featured_only) {\r\n params = params.set('featured_only', options.featured_only);\r\n }\r\n\r\n if (options?.image_container) {\r\n params = params.set('image_container', options.image_container);\r\n }\r\n\r\n if (options?.location_id) {\r\n params = params.set('location_id', options.location_id);\r\n }\r\n\r\n if (options?.special_type) {\r\n params = params.set('special_type', options.special_type);\r\n }\r\n\r\n return this.getSpecialRecords(params).pipe(\r\n map((records) => {\r\n const specials: EsolveSpecial[] = [];\r\n\r\n for (const record of records) {\r\n specials.push(this.processSpecial(record));\r\n }\r\n\r\n return specials;\r\n }),\r\n catchError(() => {\r\n return of<EsolveSpecial[]>([]);\r\n }),\r\n );\r\n }\r\n\r\n private getSpecialSingle(params: HttpParams): Observable<EsolveSpecial> {\r\n return this.getSpecialRecords(params).pipe(\r\n map((records) => {\r\n const record = records[0];\r\n\r\n return this.processSpecial(record);\r\n }),\r\n );\r\n }\r\n\r\n private getSpecialRecords(params?: HttpParams): Observable<EsolveSpecialRecord[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveSpecialRecord[]>>(\r\n `${this.config.api_url}/get-specials.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length <= 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n return response.records;\r\n }),\r\n );\r\n }\r\n\r\n private processSpecial(record: EsolveSpecialRecord): EsolveSpecial {\r\n return new EsolveSpecial(record);\r\n }\r\n}\r\n","// Only export the types that are accessible to the public API\r\nexport * from './esolve-card-data.interface';\r\nexport * from './esolve-payment-form-input.interface';\r\nexport * from './esolve-vault-response.interface';\r\nexport * from './esolve-vault-record.interface';\r\nexport * from './esolve-payment-response.interface';\r\nexport * from './esolve-payment-method-options.interface';\r\nexport * from './esolve-payment-method-record.interface';\r\nexport * from './esolve-payment-redirect-links.interface';\r\n","export class EsolveBankingDetails {\r\n constructor(\r\n public bank_name: string,\r\n public account_holder: string,\r\n public account: string,\r\n public account_type: string,\r\n public swift_number: string,\r\n public branch_code: string,\r\n ) { }\r\n}\r\n","import { EsolveIntegrationType } from '../types';\r\nimport { EsolvePaymentMethodRecord } from '../interfaces';\r\nimport { EsolveBankingDetails } from './esolve-banking-details.model';\r\n\r\nexport class EsolvePaymentMethod {\r\n public id: number;\r\n public location_id: number;\r\n public paymethod_name: string;\r\n public description: string;\r\n public display_banking_details: boolean;\r\n public currency_code: string;\r\n public merchant_id: string;\r\n public application_id: string;\r\n public api_signature: string;\r\n public is_gateway: boolean;\r\n public must_store_card_details: boolean;\r\n public allow_budget: boolean;\r\n public integration_type: EsolveIntegrationType;\r\n public bank_gateway_id: string;\r\n public accepted_card_types: string[];\r\n public post_transactions_to_gateway: boolean;\r\n public three_d_secure_url: string;\r\n public gateway_url: string;\r\n public generate_token_url: string;\r\n public widget_url: string;\r\n public successful_url: string;\r\n public failed_url: string;\r\n public enable_callback: boolean;\r\n public live: boolean;\r\n public default_module_id: number;\r\n public service_provider: string;\r\n public on_account: boolean;\r\n public sort_priority: number;\r\n public image_url: string;\r\n\r\n public banking_details: EsolveBankingDetails;\r\n\r\n constructor(record: EsolvePaymentMethodRecord) {\r\n this.id = +record.id;\r\n this.location_id = +record.location_id;\r\n this.paymethod_name = record.paymethod_name;\r\n this.description = record.description;\r\n this.display_banking_details = !!+record.display_banking_details;\r\n this.currency_code = record.currency_code;\r\n this.merchant_id = record.merchant_id;\r\n this.application_id = record.application_id;\r\n this.api_signature = record.api_signature;\r\n this.is_gateway = !!+record.is_gateway;\r\n this.must_store_card_details = !!+record.must_store_card_details;\r\n this.allow_budget = !!+record.allow_budget;\r\n this.integration_type = record.integration_type;\r\n this.bank_gateway_id = record.bank_gateway_id;\r\n this.accepted_card_types = record.accepted_card_types;\r\n this.post_transactions_to_gateway = !!+record.post_transactions_to_gateway;\r\n this.three_d_secure_url = record.three_d_secure_url;\r\n this.gateway_url = record.gateway_url;\r\n this.generate_token_url = record.generate_token_url;\r\n this.widget_url = record.widget_url;\r\n this.successful_url = record.successful_url;\r\n this.failed_url = record.failed_url;\r\n this.enable_callback = !!+record.enable_callback;\r\n this.live = !!+record.live;\r\n this.default_module_id = +record.default_module_id;\r\n this.service_provider = record.service_provider;\r\n this.on_account = !!+record.on_account;\r\n this.sort_priority = +record.sort_priority;\r\n this.image_url = record.image_url;\r\n\r\n this.banking_details = new EsolveBankingDetails(\r\n record.bank_name,\r\n record.account_holder,\r\n record.account,\r\n record.account_type,\r\n record.swift_number,\r\n record.branch_code,\r\n );\r\n }\r\n}\r\n","import { EsolveResponseResult } from '../../shared/response';\r\n\r\nimport { EsolveServiceProvider } from '../types';\r\nimport { EsolvePaymentResponse, EsolvePaymentFormInput } from '../interfaces';\r\n\r\nexport class EsolvePaymentResult extends EsolveResponseResult {\r\n public gateway_error_message: string;\r\n public redirect_required: boolean = false;\r\n public service_provider?: EsolveServiceProvider;\r\n public redirect_url?: string;\r\n /**\r\n * Form post variables\r\n *\r\n * Not available to SnapScan\r\n */\r\n public form_inputs?: EsolvePaymentFormInput[];\r\n /**\r\n * Form post content type\r\n *\r\n * Not available to SnapScan\r\n */\r\n public form_enctype?: string;\r\n /**\r\n * QR code image url\r\n *\r\n * Only available to SnapScan integrations\r\n */\r\n public qr_code_url?: string;\r\n\r\n constructor(response: EsolvePaymentResponse) {\r\n super(response);\r\n\r\n if (typeof response.service_provider !== 'undefined') {\r\n this.service_provider = response.service_provider;\r\n }\r\n\r\n if (typeof response.redirect_required !== 'undefined') {\r\n this.redirect_required = response.redirect_required;\r\n }\r\n\r\n this.gateway_error_message = response.gateway_error_message ?? '';\r\n\r\n // Check if redirect settings need to be set\r\n if (this.redirect_required && this.service_provider) {\r\n if (typeof response.redirect_url !== 'undefined') {\r\n this.redirect_url = response.redirect_url;\r\n }\r\n\r\n // Check integration specific settings\r\n if (this.service_provider === 'snapscan') {\r\n // QR code scan is required\r\n if (typeof response.qr_code_url !== 'undefined') {\r\n this.qr_code_url = response.qr_code_url;\r\n }\r\n } else {\r\n // Normal form posting redirect\r\n if (typeof response.form_inputs !== 'undefined') {\r\n this.form_inputs = response.form_inputs;\r\n }\r\n\r\n if (typeof response.form_enctype !== 'undefined') {\r\n this.form_enctype = response.form_enctype;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { EsolveResponseResult } from '../../shared/response';\r\n\r\nimport { EsolveVaultResponse } from '../interfaces';\r\n\r\nexport class EsolveVaultItemResult extends EsolveResponseResult {\r\n public id: number;\r\n public token?: string;\r\n public card_valid?: boolean;\r\n public card_details_validated?: boolean;\r\n public gateway_error_message?: string;\r\n\r\n constructor(response: EsolveVaultResponse) {\r\n super(response);\r\n\r\n this.id = +response.esolve_id;\r\n\r\n if (typeof response.token !== 'undefined') {\r\n this.token = response.token;\r\n }\r\n\r\n if (typeof response.card_valid !== 'undefined') {\r\n this.card_valid = response.card_valid;\r\n }\r\n\r\n if (typeof response.card_details_validated !== 'undefined') {\r\n this.card_details_validated = response.card_details_validated;\r\n }\r\n\r\n if (typeof response.gateway_error_message !== 'undefined') {\r\n this.gateway_error_message = response.gateway_error_message;\r\n }\r\n }\r\n}\r\n","export class EsolveVaultItem {\r\n private expiry: Date;\r\n\r\n public get expiry_month(): string {\r\n const month = this.expiry.getMonth() + 1;\r\n\r\n return month.toString().padStart(2, '0');\r\n }\r\n\r\n public get expiry_year(): number {\r\n return this.expiry.getFullYear();\r\n }\r\n\r\n public get masked_number(): string {\r\n return this.last4.padStart(19, '**** ');\r\n }\r\n\r\n constructor(\r\n public id: number,\r\n public payment_methods_id: number,\r\n public last4: string,\r\n public brand: string,\r\n expiry_timestamp: number,\r\n ) {\r\n this.expiry = new Date(expiry_timestamp * 1000);\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { EsolveErrorHandlerService } from '../shared/errors/esolve-error-handler.service';\r\nimport { EsolveResult } from '../shared/esolve-result.model';\r\nimport {\r\n EsolveDeleteResponse,\r\n EsolveGetResponse,\r\n EsolveResponseHandlerService,\r\n EsolveSetResponse,\r\n} from '../shared/response';\r\n\r\nimport {\r\n EsolvePaymentMethod,\r\n EsolvePaymentResult,\r\n EsolveVaultItem,\r\n EsolveVaultItemResult,\r\n} from './classes';\r\nimport {\r\n EsolveCardData,\r\n EsolvePaymentMethodOptions,\r\n EsolvePaymentMethodRecord,\r\n EsolvePaymentRedirectLinks,\r\n EsolvePaymentResponse,\r\n EsolveVaultRecord,\r\n EsolveVaultResponse,\r\n} from './interfaces';\r\nimport { EsolvePaymentSetBody } from './interfaces/esolve-payment-set-body.interface';\r\nimport { EsolvePaymentStatus } from './interfaces/esolve-payment-status.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolvePaymentService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n private errorHandler: EsolveErrorHandlerService,\r\n private responseHandler: EsolveResponseHandlerService,\r\n ) { }\r\n\r\n /**\r\n * Retrieves a list of payment methods.\r\n *\r\n * @param options Filter options\r\n *\r\n * @returns An `Observable` with an array of payment methods\r\n */\r\n public getPaymentMethods(options?: EsolvePaymentMethodOptions): Observable<EsolvePaymentMethod[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolvePaymentMethodRecord[]>>(\r\n `${this.config.api_url}/get-payment-methods.php`,\r\n { params: { ...options } },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processPaymentMethods(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve the payment status of the specified transaction\r\n *\r\n * @param transaction_id ID of the transaction\r\n *\r\n * @returns An `Observable` with the success status of the payment\r\n */\r\n public getPaymentStatus(transaction_id: number): Observable<boolean> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolvePaymentStatus>>(\r\n `${this.config.api_url}/get-payment-status.php`,\r\n { params: { cart_id: transaction_id } },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return response.records.success;\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves a list of saved cards from the vault.\r\n *\r\n * @param payment_methods_id eSolve ID of a payment method\r\n *\r\n * @returns An `Observable` with an array of saved bank cards\r\n */\r\n public getVault(payment_methods_id?: number): Observable<EsolveVaultItem[]> {\r\n let params = new HttpParams();\r\n\r\n if (typeof payment_methods_id !== 'undefined') {\r\n params = params.set('payment_methods_id', payment_methods_id);\r\n }\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveVaultRecord[]>>(\r\n `${this.config.api_url}/get-vault.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processVaultItems(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Sets a new card in the vault OR updates an existing one.\r\n *\r\n * @param payment_methods_id Selected payment method\r\n * @param card_data Information of bank card\r\n *\r\n * @returns An `Observable` with the result of the vault set.\r\n */\r\n public setVaultItem(\r\n payment_methods_id: number,\r\n card_data: EsolveCardData,\r\n ): Observable<EsolveVaultItemResult> {\r\n const body = {\r\n vault: {\r\n payment_methods_id,\r\n card_number: card_data.card_number,\r\n card_name: card_data.name,\r\n card_cvv: card_data.cvv,\r\n card_expiry: this.generateExpiry(card_data),\r\n },\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveVaultResponse>>(\r\n `${this.config.api_url}/set-vault.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => new EsolveVaultItemResult(response),\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-vault', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Delete a card in the vault\r\n *\r\n * @param id ID of the vault item\r\n *\r\n * @returns An `Observable` with the result of the vault delete.\r\n */\r\n public deleteVaultItem(id: number): Observable<EsolveResult> {\r\n return this.http\r\n .delete<EsolveDeleteResponse>(\r\n `${this.config.api_url}/delete-vault.php`,\r\n {\r\n params: { id },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => {\r\n if (\r\n (http_response.result === undefined) ||\r\n (http_response.result === null) ||\r\n (http_response.result.status !== 'success')\r\n ) {\r\n throw http_response;\r\n }\r\n\r\n return new EsolveResult(\r\n http_response.result.status,\r\n http_response.result.code,\r\n http_response.result.message,\r\n );\r\n }),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpDeleteError(\r\n 'delete-vault',\r\n errorRes,\r\n );\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Sets the payment for the specified transaction using selected payment\r\n * method.\r\n *\r\n * @param transaction_id eSolve ID to the transaction\r\n * @param payment_methods_id eSolve ID to the selected payment method\r\n * @param card ID of selected card from the vault or information to a brand new card\r\n *\r\n * @returns An `Observable` with the result of the payment\r\n */\r\n public setPayment(\r\n transaction_id: number,\r\n payment_methods_id: number,\r\n card?: EsolveCardData | number,\r\n links?: EsolvePaymentRedirectLinks,\r\n ): Observable<EsolvePaymentResult> {\r\n const body: EsolvePaymentSetBody = {\r\n payment: {\r\n cart_id: transaction_id,\r\n payment_methods_id,\r\n },\r\n };\r\n\r\n if (card) {\r\n if (typeof card === 'number') {\r\n body.payment.user_vault_id = card;\r\n } else {\r\n body.card = {\r\n card_number: card.card_number,\r\n card_name: card.name,\r\n card_cvv: card.cvv,\r\n card_expiry: this.generateExpiry(card),\r\n };\r\n }\r\n }\r\n\r\n if (links) {\r\n body.links = links;\r\n }\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolvePaymentResponse>>(\r\n `${this.config.api_url}/set-payment.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => new EsolvePaymentResult(response),\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-payment', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Processes the eSolve payment method records.\r\n *\r\n * @param records Records to process\r\n *\r\n * @returns An array of processed payment methods.\r\n */\r\n private processPaymentMethods(records: EsolvePaymentMethodRecord[]): EsolvePaymentMethod[] {\r\n const payment_methods: EsolvePaymentMethod[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n const payment_method = new EsolvePaymentMethod(record);\r\n\r\n payment_methods.push(payment_method);\r\n }\r\n }\r\n\r\n return payment_methods;\r\n }\r\n\r\n /**\r\n * Processes the eSolve vault records.\r\n *\r\n * @param records Records to process\r\n *\r\n * @returns An array of processed vault items (a.k.a. cards)\r\n */\r\n private processVaultItems(records: EsolveVaultRecord[]): EsolveVaultItem[] {\r\n const vault: EsolveVaultItem[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n const vault_item = new EsolveVaultItem(\r\n +record.id,\r\n +record.payment_methods_id,\r\n record.last4,\r\n record.brand,\r\n record.expiry_timestamp,\r\n );\r\n\r\n vault.push(vault_item);\r\n }\r\n }\r\n\r\n return vault;\r\n }\r\n\r\n /**\r\n * Generate a concatenated string with the expiry month and year\r\n *\r\n * @param card_data Credit card data\r\n *\r\n * @returns Expiry string\r\n */\r\n private generateExpiry(card_data: EsolveCardData): string {\r\n const month_string = card_data.expiry_month.padStart(2, '0');\r\n const year_string = card_data.expiry_year.padStart(4, '0');\r\n\r\n return `${month_string}${year_string}`;\r\n }\r\n}\r\n","import { EsolveShippingLocation } from './esolve-shipping-location.type';\r\nimport { EsolveShippingCalculationMethod } from './esolve-shipping-calculation-method.type';\r\nimport { EsolveInsuranceCalculationMethod } from './esolve-insurance-calculation-method.type';\r\n\r\nexport class EsolveShippingMethod {\r\n constructor(\r\n public id: number,\r\n public carrier_name: string,\r\n public delivery_category: string,\r\n public description: string,\r\n public location: EsolveShippingLocation,\r\n public pricing: string,\r\n public link_to_carrier_website: string,\r\n public days_to_deliver: number,\r\n public shipping_cost_calculation_method: EsolveShippingCalculationMethod,\r\n public insurance_cost_calculation_method: EsolveInsuranceCalculationMethod,\r\n public insurance_cost_percentage: number,\r\n public metric_factor: number,\r\n public allow_immediate_payment_processing: boolean,\r\n public allow_postal_address: boolean,\r\n public allow_physical_address: boolean,\r\n public client_to_collect: boolean,\r\n public is_default: boolean,\r\n public location_id: number,\r\n public use_zones: boolean,\r\n public min_distance: number,\r\n public max_distance: number,\r\n public shipping_surge_condition: number,\r\n public shipping_surge_percentage: number,\r\n public sort_priority: number,\r\n public shipping_group: string,\r\n public shipping_slot_identifier: string,\r\n public shipping_slot_delay_hours: number,\r\n public image_url: string,\r\n ) { }\r\n}\r\n","export class EsolveShippingTotals {\r\n constructor(\r\n public total: number,\r\n public vat: number,\r\n public savings: number,\r\n ) { }\r\n}\r\n","import { EsolveShippingTotals } from './esolve-shipping-totals.model';\r\n\r\nexport class EsolveShippingCost {\r\n public shipping: EsolveShippingTotals;\r\n public insurance: EsolveShippingTotals;\r\n\r\n constructor(\r\n // Shipping\r\n shipping_total: number = 0,\r\n shipping_vat: number = 0,\r\n shipping_total_savings: number = 0,\r\n // Insurance\r\n insurance_total: number = 0,\r\n insurance_vat: number = 0,\r\n insurance_total_savings: number = 0,\r\n ) {\r\n this.shipping = new EsolveShippingTotals(\r\n shipping_total,\r\n shipping_vat,\r\n shipping_total_savings,\r\n );\r\n\r\n this.insurance = new EsolveShippingTotals(\r\n insurance_total,\r\n insurance_vat,\r\n insurance_total_savings,\r\n );\r\n }\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveShippingCost } from './esolve-shipping-cost.model';\r\nimport { EsolveShippingCostRecord } from './esolve-shipping-cost-record.interface';\r\nimport { EsolveShippingMethod } from './esolve-shipping-method.model';\r\nimport { EsolveShippingMethodRecord } from './esolve-shipping-method-record.interface';\r\nimport { EsolveShippingMethodOptions } from './esolve-shipping-method-options.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveShippingService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n /**\r\n * Retrieves a list of shipping methods\r\n *\r\n * @param options Filter options\r\n *\r\n * @returns An `Observable` with an array of shipping methods\r\n */\r\n public getShippingMethods(options?: EsolveShippingMethodOptions): Observable<EsolveShippingMethod[]> {\r\n let params = new HttpParams();\r\n\r\n if (options) {\r\n if (typeof options.addresses_id !== 'undefined') {\r\n params = params.set('addresses_id', options.addresses_id);\r\n }\r\n\r\n if (typeof options.location_id !== 'undefined') {\r\n params = params.set('location_id', options.location_id);\r\n }\r\n }\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveShippingMethodRecord[]>>(\r\n `${this.config.api_url}/get-shipping-methods.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processShippingMethods(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves the shipping costs\r\n *\r\n * @param shipping_id\r\n * @param addresses_id\r\n * @param location_id\r\n *\r\n * @returns An `Observable` with the shipping costs\r\n */\r\n public getShippingCost(\r\n shipping_id: number,\r\n addresses_id: number,\r\n location_id?: number,\r\n ): Observable<EsolveShippingCost> {\r\n try {\r\n let params = new HttpParams();\r\n\r\n if (typeof shipping_id === 'undefined') {\r\n throw new Error('Shipping ID is required');\r\n } else {\r\n params = params.set('shipping_id', shipping_id);\r\n }\r\n\r\n if (typeof addresses_id === 'undefined') {\r\n throw new Error('Address ID is required');\r\n } else {\r\n params = params.set('addresses_id', addresses_id);\r\n }\r\n\r\n if (typeof location_id !== 'undefined') {\r\n params = params.set('location_id', location_id);\r\n }\r\n\r\n return this.http\r\n .get<EsolveGetResponse<EsolveShippingCostRecord[]>>(\r\n `${this.config.api_url}/get-shipping-cost.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processShippingCost(response.records[0]);\r\n }),\r\n );\r\n } catch (err) {\r\n return throwError(() => err);\r\n }\r\n }\r\n\r\n /**\r\n * Processes the eSolve shipping method records.\r\n *\r\n * @param records Records to process\r\n *\r\n * @returns An array of processed shipping methods\r\n */\r\n private processShippingMethods(records: EsolveShippingMethodRecord[]): EsolveShippingMethod[] {\r\n const shipping_methods: EsolveShippingMethod[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n const shipping_method = new EsolveShippingMethod(\r\n +record.id,\r\n record.carrier_name,\r\n record.delivery_category,\r\n record.description,\r\n record.location,\r\n record.pricing,\r\n record.link_to_carrier_website,\r\n +record.days_to_deliver,\r\n record.shipping_cost_calculation_method,\r\n record.insurance_cost_calculation_method,\r\n +record.insurance_cost_percentage,\r\n +record.metric_factor,\r\n record.allow_immediate_payment_processing,\r\n record.allow_postal_address,\r\n record.allow_physical_address,\r\n record.client_to_collect,\r\n record.is_default_shipping_method,\r\n +record.location_id,\r\n record.use_zones,\r\n +record.min_distance,\r\n +record.max_distance,\r\n +record.shipping_surge_condition,\r\n +record.shipping_surge_percentage,\r\n +record.sort_priority,\r\n record.shipping_group,\r\n record.shipping_slot_identifier,\r\n +record.shipping_slot_delay_hours,\r\n record.image_url,\r\n );\r\n\r\n shipping_methods.push(shipping_method);\r\n }\r\n }\r\n\r\n return shipping_methods;\r\n }\r\n\r\n /**\r\n * Processes the eSolve shipping costs record.+\r\n *\r\n * @param record Data to process\r\n *\r\n * @returns Processed shipping costs\r\n */\r\n private processShippingCost(record: EsolveShippingCostRecord): EsolveShippingCost {\r\n const shipping_cost = new EsolveShippingCost(\r\n +record.shipping_total,\r\n +record.vat_on_shipping,\r\n +record.total_saving_on_shipping,\r\n +record.insurance_total,\r\n +record.vat_on_insurance,\r\n +record.total_saving_on_insurance,\r\n );\r\n\r\n return shipping_cost;\r\n }\r\n}\r\n","import { EsolveResponseResult } from '../shared/response';\r\n\r\nimport { EsolveEnquiryResponse } from './esolve-enquiry-response.interface';\r\n\r\nexport class EsolveEnquiryResult extends EsolveResponseResult {\r\n public id = 0;\r\n\r\n constructor(response: EsolveEnquiryResponse) {\r\n super(response);\r\n\r\n this.id = +response.esolve_id;\r\n }\r\n}\r\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { EsolveErrorHandlerService } from '../shared/errors';\r\nimport { EsolveResponseHandlerService, EsolveSetResponse } from '../shared/response';\r\n\r\nimport { EsolveEnquiryResult } from './esolve-enquiry-result.model';\r\nimport { EsolveEnquiryResponse } from './esolve-enquiry-response.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveEnquiryService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n private errorHandler: EsolveErrorHandlerService,\r\n private responseHandler: EsolveResponseHandlerService,\r\n ) { }\r\n\r\n public send(form_data: FormData): Observable<EsolveEnquiryResult> {\r\n if (!form_data.has('email')) {\r\n return this.errorHandler.emitError('email_required', 'Email is required');\r\n }\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveEnquiryResponse>>(\r\n `${this.config.api_url}/set-enquiry.php`,\r\n form_data,\r\n {\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => new EsolveEnquiryResult(response),\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-enquiry', errorRes);\r\n }),\r\n );\r\n }\r\n}\r\n","import { EsolveStockItem } from '../../stock';\r\n\r\nexport class EsolveWishlistItem {\r\n constructor(\r\n public id: number,\r\n public qty: number,\r\n public vat_rate: number,\r\n public price: number,\r\n public price_incl: number,\r\n public vat_total: number,\r\n public total: number,\r\n public total_incl: number,\r\n public stock_item?: EsolveStockItem,\r\n ) { }\r\n}\r\n","import { EsolveResponseResult } from '../../shared/response';\r\n\r\nexport class EsolveEmptyWishlistResult extends EsolveResponseResult { }\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport {\r\n EsolveSetResponse,\r\n EsolveGetResponse,\r\n EsolveResponseHandlerService,\r\n} from '../shared/response';\r\nimport { EsolveErrorHandlerService } from '../shared/errors';\r\nimport { EsolveStockItem } from '../stock';\r\n\r\nimport { EsolveWishlistSetItem } from './interfaces';\r\nimport { EsolveWishlist, EsolveWishlistSetAction } from './types';\r\nimport { EsolveWishlistItem, EsolveEmptyWishlistResult } from './classes';\r\nimport { EsolveWishlistItemRecord, EsolveWishlistItemResponse } from './interfaces';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveWishlistService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n private errorHandler: EsolveErrorHandlerService,\r\n private responseHandler: EsolveResponseHandlerService,\r\n ) { }\r\n\r\n /**\r\n * Retrieves the current wishlist\r\n *\r\n * @returns An `Observable` with an array of cart items\r\n */\r\n public getWishlist(): Observable<EsolveWishlist> {\r\n return this.getWishlistRecords().pipe(\r\n map((response) => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processWishlist(response.records);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Updates the wishlist by preforming various actions, such as adding, editing or removing items from the list.\r\n *\r\n * @param items An array of options to update the wishlist\r\n * @param default_action The default action to preform\r\n *\r\n * @returns An `Observable` with an array of responses that gives feedback on the requested changes\r\n */\r\n public setWishlist(\r\n items: EsolveWishlistSetItem[],\r\n default_action: EsolveWishlistSetAction = 'add',\r\n ): Observable<EsolveWishlistItemResponse[]> {\r\n const body = {\r\n items,\r\n default_action,\r\n };\r\n\r\n return this.http\r\n .post<EsolveSetResponse<EsolveWishlistItemResponse>>(\r\n `${this.config.api_url}/set-wishlist-item.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (response.responses === undefined) {\r\n throw response;\r\n }\r\n\r\n return response.responses;\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Empties the wishlist for the logged in user.\r\n *\r\n * @returns Observable of type EsolveEmptyWishlistResult\r\n */\r\n public setWishlistEmpty(): Observable<EsolveEmptyWishlistResult> {\r\n return this.http\r\n .post<EsolveSetResponse<EsolveWishlistItemResponse>>(\r\n `${this.config.api_url}/set-wishlist-empty.php`,\r\n { empty: true },\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',\r\n },\r\n responseType: 'json',\r\n observe: 'body',\r\n },\r\n )\r\n .pipe(\r\n map((http_response) => this.responseHandler.validateSingleHttpResponse(\r\n http_response,\r\n (response) => {\r\n return new EsolveEmptyWishlistResult(response);\r\n },\r\n )),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n return this.errorHandler.handleHttpPostError('set-wishlist-empty', errorRes);\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * Processes the eSolve wishlist records\r\n *\r\n * @param wishlist_item_records Records to process\r\n *\r\n * @returns An array of processed cart items\r\n */\r\n private processWishlist(wishlist_item_records: EsolveWishlistItemRecord[]): EsolveWishlist {\r\n const wishlist_items: EsolveWishlist = [];\r\n\r\n if (wishlist_item_records) {\r\n for (const item of wishlist_item_records) {\r\n\r\n const stock_item = new EsolveStockItem(item.stock_item);\r\n\r\n const wishlist_item = new EsolveWishlistItem(\r\n +item.id,\r\n +item.qty,\r\n +item.vat_rate,\r\n +item.price,\r\n +item.price_incl,\r\n +item.vat_total,\r\n +item.line_total,\r\n +item.line_total_incl,\r\n stock_item,\r\n );\r\n\r\n wishlist_items.push(wishlist_item);\r\n }\r\n }\r\n\r\n return wishlist_items;\r\n }\r\n\r\n /**\r\n * Retrieves stock records from HTTP params.\r\n *\r\n * @param params HTTP client parameters\r\n */\r\n private getWishlistRecords(\r\n params?: HttpParams,\r\n ): Observable<EsolveGetResponse<EsolveWishlistItemRecord[]>> {\r\n return this.http.get<EsolveGetResponse<EsolveWishlistItemRecord[]>>(\r\n `${this.config.api_url}/get-wishlist.php`,\r\n { params },\r\n );\r\n }\r\n}\r\n","import { EsolveSupplierRecord } from '../interfaces';\r\n\r\nexport class EsolveSupplier {\r\n public id?: number;\r\n public internal_account?: string;\r\n public external_account?: string;\r\n public company_name: string;\r\n public owner_firstname: string;\r\n public owner_surname: string;\r\n public owner_email: string;\r\n public owner_contact_number: string;\r\n public rep_firstname: string;\r\n public rep_surname: string;\r\n public rep_email: string;\r\n public rep_contact_number: string;\r\n public street: string;\r\n public suburb: string;\r\n public city: string;\r\n public province: string;\r\n public country: string;\r\n public postal_code: string;\r\n public catalogue_ref_1: string;\r\n public catalogue_ref_2: string;\r\n public is_active?: boolean;\r\n public industry_type: string;\r\n\r\n constructor(record?: Partial<EsolveSupplierRecord>) {\r\n this.id = record?.id;\r\n this.internal_account = record?.internal_account;\r\n this.external_account = record?.external_account;\r\n this.company_name = record?.company_name ?? '';\r\n this.owner_firstname = record?.owner_firstname ?? '';\r\n this.owner_surname = record?.owner_surname ?? '';\r\n this.owner_email = record?.owner_email ?? '';\r\n this.owner_contact_number = record?.owner_contact_number ?? '';\r\n this.rep_firstname = record?.rep_firstname ?? '';\r\n this.rep_surname = record?.rep_surname ?? '';\r\n this.rep_email = record?.rep_email ?? '';\r\n this.rep_contact_number = record?.rep_contact_number ?? '';\r\n this.street = record?.street ?? '';\r\n this.suburb = record?.suburb ?? '';\r\n this.city = record?.city ?? '';\r\n this.province = record?.province ?? '';\r\n this.country = record?.country ?? '';\r\n this.postal_code = record?.postal_code ?? '';\r\n this.catalogue_ref_1 = record?.catalogue_ref_1 ?? '';\r\n this.catalogue_ref_2 = record?.catalogue_ref_2 ?? '';\r\n this.is_active = record?.is_active;\r\n this.industry_type = record?.industry_type ?? '';\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable, of } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig } from '../esolve-connect.config';\r\nimport { ESOLVE_CONNECT_CONFIG } from '../esolve-connect-config.constant';\r\nimport { EsolveGetResponse } from '../shared/response';\r\n\r\nimport { EsolveSupplier } from './classes';\r\nimport { EsolveSupplierRecord, EsolveSupplierOptions } from './interfaces';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class EsolveSuppliersService {\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n ) { }\r\n\r\n public getSuppliers(options?: EsolveSupplierOptions): Observable<EsolveSupplier[]> {\r\n let params = new HttpParams();\r\n\r\n if (options?.industry_type) {\r\n params = params.set('industry_type', options.industry_type);\r\n }\r\n if (options?.internal_account) {\r\n params = params.set('internal_account', options.internal_account);\r\n }\r\n\r\n return this.getSupplierRecords(params).pipe(\r\n map((records) => {\r\n const suppliers: EsolveSupplier[] = [];\r\n\r\n for (const record of records) {\r\n suppliers.push(this.processSuppliers(record));\r\n }\r\n\r\n return suppliers;\r\n }),\r\n catchError(() => {\r\n return of<EsolveSupplier[]>([]);\r\n }),\r\n );\r\n }\r\n\r\n private getSupplierRecords(params: HttpParams): Observable<EsolveSupplierRecord[]> {\r\n return this.http\r\n .get<EsolveGetResponse<EsolveSupplierRecord[]>>(\r\n `${this.config.api_url}/get-suppliers.php`,\r\n { params },\r\n )\r\n .pipe(\r\n map((response) => {\r\n if (\r\n (response.records === undefined) ||\r\n (response.records.length === 0)\r\n ) {\r\n throw response;\r\n }\r\n\r\n return response.records;;\r\n }),\r\n );\r\n }\r\n\r\n private processSuppliers(record: EsolveSupplierRecord): EsolveSupplier {\r\n return new EsolveSupplier(record);\r\n }\r\n\r\n}\r\n","/*\r\n * Public API Surface of ng-esolve-connect\r\n */\r\n\r\nexport * from './lib/ng-esolve-connect.module';\r\nexport * from './lib/esolve-connect.config';\r\nexport * from './lib/esolve-connect-config.constant';\r\n\r\nexport * from './lib/shared/esolve-list.model';\r\nexport * from './lib/shared/esolve-result.model';\r\nexport * from './lib/shared/esolve-url-target.type';\r\nexport * from './lib/shared/custom-fields';\r\nexport * from './lib/shared/filters';\r\nexport * from './lib/shared/response';\r\nexport * from './lib/shared/errors';\r\nexport * from './lib/shared/cookie/esolve-cookie.service';\r\nexport * from './lib/shared/sort';\r\n\r\n// SEO\r\nexport * from './lib/shared/seo';\r\n\r\n// Geocoder\r\nexport * from './lib/shared/geocoder';\r\n\r\n// Assets\r\nexport * from './lib/shared/assets';\r\n\r\n// Session\r\nexport * from './lib/session';\r\n\r\n// Auth\r\nexport * from './lib/auth';\r\n\r\n// Account\r\nexport * from './lib/account';\r\n\r\n// Banners\r\nexport * from './lib/banners';\r\n\r\n// Menu\r\nexport * from './lib/menu';\r\n\r\n// News\r\nexport * from './lib/news';\r\n\r\n// Topics\r\nexport * from './lib/topics';\r\n\r\n// Tags\r\nexport * from './lib/tags';\r\n\r\n// Stock\r\nexport * from './lib/stock';\r\n\r\n// Category Tree\r\nexport * from './lib/category-tree';\r\n\r\n// Manufacturers\r\nexport * from './lib/manufacturers';\r\n\r\n// Ranges\r\nexport * from './lib/ranges';\r\n\r\n// Specials\r\nexport * from './lib/specials';\r\n\r\n// Cart\r\nexport * from './lib/cart';\r\n\r\n// Payment\r\nexport * from './lib/payment';\r\n\r\n// Shipping\r\nexport * from './lib/shipping';\r\n\r\n// Locations\r\nexport * from './lib/locations';\r\n\r\n// Enquiry\r\nexport * from './lib/enquiry';\r\n\r\n// Wishlist\r\nexport * from './lib/wishlist';\r\n\r\n// Suppliers\r\nexport * from './lib/suppliers';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.EsolveCookieService","i1.EsolveSessionService","i1","i2.EsolveSessionService","i3.EsolveErrorHandlerService","i4.EsolveCookieService","i2.EsolveErrorHandlerService","i3.EsolveResponseHandlerService","i4.EsolveResponseHandlerService"],"mappings":"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"}
|