marketplacepos 2.4.8 → 2.4.9
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/Marketplace/162.380fb02c77fa6ec0.js +1 -0
- package/Marketplace/174.d9e54ac6a8d68fed.js +1 -0
- package/Marketplace/180.bfed0f08b5cdbbde.js +1 -0
- package/Marketplace/25.5e00713dbd080b64.js +1 -0
- package/Marketplace/32.9c83cc1dfc19e37d.js +1 -0
- package/Marketplace/360.4fa1f449dc516500.js +1 -0
- package/Marketplace/369.16ffb7833f5f392e.js +1 -0
- package/Marketplace/397.5bc29c874039d3c8.js +1 -0
- package/Marketplace/3rdpartylicenses.txt +568 -0
- package/Marketplace/455.fc7663306b753727.js +1 -0
- package/Marketplace/463.7140b32660c473a4.js +1 -0
- package/Marketplace/512.96a1a3c8c51a8727.js +1 -0
- package/Marketplace/516.f335756d88de781a.js +1 -0
- package/Marketplace/585.9e916b668a91cc94.js +1 -0
- package/Marketplace/6.fc79ecc0c0a33462.js +1 -0
- package/Marketplace/616.fb179a9605c3e98c.js +1 -0
- package/Marketplace/716.65e3e9a36c3e8be6.js +1 -0
- package/Marketplace/717.c3d108362a36e597.js +1 -0
- package/Marketplace/739.82b92600f9519019.js +1 -0
- package/Marketplace/785.e0040d021febffb1.js +1 -0
- package/Marketplace/796.d34bd45b5a924fca.js +1 -0
- package/Marketplace/832.6082371d3ebb95a0.js +1 -0
- package/Marketplace/874.472e0cd7c75127ca.js +1 -0
- package/Marketplace/common.3f5874655db24424.js +1 -0
- package/Marketplace/index.html +22 -23
- package/Marketplace/main.195197d9958646d1.js +1 -0
- package/Marketplace/polyfills.8d85b0533e3f867a.js +1 -0
- package/Marketplace/runtime.a82898ac8aec5312.js +1 -0
- package/Marketplace/scripts.09af772bfa77d50d.js +1 -0
- package/Marketplace/styles.dff58ae3c0783953.css +20 -0
- package/package.json +1 -1
- package/Marketplace/common.js +0 -238
- package/Marketplace/common.js.map +0 -1
- package/Marketplace/default-node_modules_angular_forms_fesm2020_forms_mjs.js +0 -9551
- package/Marketplace/default-node_modules_angular_forms_fesm2020_forms_mjs.js.map +0 -1
- package/Marketplace/default-node_modules_angular_material_fesm2020_paginator_mjs.js +0 -797
- package/Marketplace/default-node_modules_angular_material_fesm2020_paginator_mjs.js.map +0 -1
- package/Marketplace/default-node_modules_angular_material_fesm2020_slide-toggle_mjs.js +0 -669
- package/Marketplace/default-node_modules_angular_material_fesm2020_slide-toggle_mjs.js.map +0 -1
- package/Marketplace/default-node_modules_ng-select_ng-select_fesm2020_ng-select-ng-select_mjs.js +0 -4632
- package/Marketplace/default-node_modules_ng-select_ng-select_fesm2020_ng-select-ng-select_mjs.js.map +0 -1
- package/Marketplace/default-src_app_menu_nav-tab_nav-tab_component_ts-node_modules_angular_material_fesm2020_date-e7a231.js +0 -6841
- package/Marketplace/default-src_app_menu_nav-tab_nav-tab_component_ts-node_modules_angular_material_fesm2020_date-e7a231.js.map +0 -1
- package/Marketplace/default-src_app_menu_nav-tab_nav-tab_component_ts-src_app_services_biggerPicture_service_ts-s-b16afe.js +0 -3316
- package/Marketplace/default-src_app_menu_nav-tab_nav-tab_component_ts-src_app_services_biggerPicture_service_ts-s-b16afe.js.map +0 -1
- package/Marketplace/default-src_app_model_enums_FilterType_enum_ts-src_app_sharing-module_table_table_component_ts.js +0 -6219
- package/Marketplace/default-src_app_model_enums_FilterType_enum_ts-src_app_sharing-module_table_table_component_ts.js.map +0 -1
- package/Marketplace/default-src_app_sharing-module_datepicker_datepicker_component_ts.js +0 -19965
- package/Marketplace/default-src_app_sharing-module_datepicker_datepicker_component_ts.js.map +0 -1
- package/Marketplace/main.js +0 -622
- package/Marketplace/main.js.map +0 -1
- package/Marketplace/polyfills.js +0 -3398
- package/Marketplace/polyfills.js.map +0 -1
- package/Marketplace/runtime.js +0 -346
- package/Marketplace/runtime.js.map +0 -1
- package/Marketplace/scripts.js +0 -9
- package/Marketplace/scripts.js.map +0 -1
- package/Marketplace/src_app_login_login_module_ts.js +0 -651
- package/Marketplace/src_app_login_login_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_ReportOrder_order_order_module_ts.js +0 -872
- package/Marketplace/src_app_menu_ReportOrder_order_order_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_ReportOrder_product-statistic_product-statistic_module_ts.js +0 -422
- package/Marketplace/src_app_menu_ReportOrder_product-statistic_product-statistic_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_ReportOrder_report_module_ts.js +0 -283
- package/Marketplace/src_app_menu_ReportOrder_report_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_channels_channels_module_ts.js +0 -9605
- package/Marketplace/src_app_menu_channels_channels_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_inventory_inventory_module_ts.js +0 -1547
- package/Marketplace/src_app_menu_inventory_inventory_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_logistic_logistic_module_ts.js +0 -245
- package/Marketplace/src_app_menu_logistic_logistic_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_menu_module_ts.js +0 -40326
- package/Marketplace/src_app_menu_menu_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_notification_notification_module_ts.js +0 -285
- package/Marketplace/src_app_menu_notification_notification_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_object-log_logs_module_ts.js +0 -1817
- package/Marketplace/src_app_menu_object-log_logs_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_orders_orders_module_ts.js +0 -4867
- package/Marketplace/src_app_menu_orders_orders_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_price_price_module_ts.js +0 -1885
- package/Marketplace/src_app_menu_price_price_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_products_product_module_ts.js +0 -2692
- package/Marketplace/src_app_menu_products_product_module_ts.js.map +0 -1
- package/Marketplace/styles.css +0 -16565
- package/Marketplace/styles.css.map +0 -1
- package/Marketplace/vendor.js +0 -71624
- package/Marketplace/vendor.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"src_app_menu_products_product_module_ts.js","mappings":"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","sources":["./src/app/menu/products/duplicate-sku/duplicate-sku.component.ts","./src/app/menu/products/duplicate-sku/duplicate-sku.component.html","./src/app/menu/products/in-pos/in-pos.component.ts","./src/app/menu/products/in-pos/in-pos.component.html","./src/app/menu/products/not-in-channel/not-in-channel.component.ts","./src/app/menu/products/not-in-channel/not-in-channel.component.html","./src/app/menu/products/not-in-pos/not-in-pos.component.ts","./src/app/menu/products/not-in-pos/not-in-pos.component.html","./src/app/menu/products/product-routing.module.ts","./src/app/menu/products/product.module.ts","./src/app/menu/products/products.component.ts","./src/app/menu/products/products.component.html","./src/app/menu/products/sold-in-channel/sold-in-channel.component.ts","./src/app/menu/products/sold-in-channel/sold-in-channel.component.html","./src/app/sharing-module/duplicate-product-card/duplicate-product-card.component.ts","./src/app/sharing-module/duplicate-product-card/duplicate-product-card.component.html","./src/app/sharing-module/duplicate-product-card/duplicate-product-card.module.ts","./src/app/sharing-module/product-card/product-card.component.ts","./src/app/sharing-module/product-card/product-card.component.html","./src/app/sharing-module/product-card/product-card.module.ts"],"sourcesContent":["import { Component } from \"@angular/core\";\r\nimport { Constants } from \"src/app/model/Constants\";\r\nimport { Product } from \"src/app/model/core/Product\";\r\nimport { ChannelType } from \"src/app/model/enums/ChannelType.enum\";\r\nimport { ProductFilter } from \"src/app/model/ProductFilter\";\r\nimport { ProductService } from \"src/app/services/product.service\";\r\nimport { HttpService } from \"../../../services/http.service\";\r\n\r\n@Component({\r\n selector: \"app-duplicate-sku\",\r\n templateUrl: \"./duplicate-sku.component.html\",\r\n styleUrls: [\"./duplicate-sku.component.scss\"],\r\n})\r\nexport class DuplicateSkuComponent {\r\n public channelOptions: any;\r\n public searchFilter = new ProductFilter();\r\n public products: Product[] = [];\r\n public rowCount: number;\r\n public hasClickedRowCount = false;\r\n\r\n constructor(private httpService: HttpService, private productService: ProductService) {\r\n this.getPageLoader();\r\n }\r\n\r\n private getPageLoader(): void {\r\n this.productService.loader()\r\n .subscribe((result: {Filter: {ChannelID: string, PageNumber: number, RowCount: number}, Options: {Channel: []}}) => {\r\n this.searchFilter = result.Filter;\r\n this.searchFilter.PageSize = result.Filter.RowCount;\r\n this.channelOptions = result.Options.Channel;\r\n this.getProducts();\r\n });\r\n }\r\n\r\n public getProducts(): any {\r\n const payload = {\r\n ChannelID: this.searchFilter.ChannelID,\r\n RowCount: this.searchFilter.RowCount,\r\n PageNumber: this.searchFilter.PageNumber,\r\n text: this.searchFilter.text\r\n }\r\n this.httpService\r\n .post<any>(\"/api/product/GetDuplicateInChannel\", payload)\r\n .subscribe((result) => {\r\n this.products = result.Data;\r\n });\r\n }\r\n\r\n public onSearch(text: string) {\r\n this.searchFilter.text = text;\r\n this.hasClickedRowCount = false;\r\n this.getProducts();\r\n }\r\n\r\n public onClearFilter() {\r\n this.searchFilter.ChannelID = Constants.GuidEMpty;\r\n }\r\n\r\n public getChannelLogo(channelType: ChannelType) {\r\n return Constants.getChannelLogoByTypeId(channelType);\r\n }\r\n\r\n /**\r\n * Change to next page\r\n * @param pageEvent The event from paginator\r\n */\r\n public onNextPage(): void {\r\n this.searchFilter.PageNumber = this.searchFilter.PageNumber + 1;\r\n this.getProducts();\r\n }\r\n\r\n /**\r\n * Change to next page\r\n * @param pageEvent The event from paginator\r\n */\r\n public onPrevPage(): void {\r\n this.searchFilter.PageNumber = this.searchFilter.PageNumber - 1;\r\n this.getProducts();\r\n }\r\n\r\n public getRowCount() {\r\n let payload = {\r\n text: this.searchFilter.text,\r\n ChannelID: this.searchFilter.ChannelID,\r\n }\r\n this.httpService.post('/api/product/GetDuplicateInChannelRowCount', payload)\r\n .subscribe((result: {Total: number}) => {\r\n this.hasClickedRowCount = true;\r\n this.rowCount = result.Total;\r\n });\r\n }\r\n}\r\n","<mainpanel headerTitle=\"Multiple Listed SKU\" (onSubmit)=\"onSearch($event)\" textButton=\" Search\" \r\ndescription=\"SKU(s) which is listed more than one time (one to many)\">\r\n <filters>\r\n <div container>\r\n <div>\r\n <h6>Channel</h6>\r\n <ng-select class=\"center-text\" [clearable]=\"true\" [items]=\"channelOptions\" bindLabel=\"Name\" name=\"channelid\"\r\n bindValue=\"ID\" placeholder=\"Select Channel\" [(ngModel)]=\"searchFilter.ChannelID\" (clear)=\"onClearFilter()\">\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n <span class=\"me-2\">\r\n <img style=\"width: 18px;\" [src]=\"getChannelLogo(item.TypeID)\" alt=\"\">\r\n </span>\r\n {{item.Name}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </filters>\r\n <content>\r\n <div class=\"container-fluid\">\r\n <div class=\"row mt-8 mx-1\">\r\n <ng-container *ngIf=\"(products?.length > 0) else EMPTY\">\r\n <div *ngFor=\"let product of products\" class=\"col-12 col-md-6 col-xl-4 px-3 my-3\">\r\n <app-duplicate-product-card [imageForZoom]=\"product.ImageUrl\" [title]=\"product.Name\" [code]=\"product.Code\" [image]=\"product.ThumbnailURL\"\r\n [channels]=\"product.Channel\">\r\n </app-duplicate-product-card>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #EMPTY>\r\n <div class=\"d-flex flex-column justify-content-center align-items-center\" style=\"margin-top: 26vh;\">\r\n <div>\r\n <i style=\"font-size: 95px\" class=\"far fa-file text-secondary\"></i>\r\n </div>\r\n <h4 class=\"text-secondary mt-6\">No product found</h4>\r\n <h6 class=\"text-secondary fw-normal m-2\">Once you have a duplicate product</h6>\r\n <h6 class=\"text-secondary fw-normal\">you`ll see them here</h6>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <ng-container *ngIf=\"products?.length > 0\">\r\n <div class=\"row mt-2 justify-content-end\">\r\n <div class=\"col-md-12\">\r\n <app-custom-paginator [filter]=\"searchFilter\" [totaldata]=\"products?.length\" [paginationTotal]=\"rowCount\"\r\n [hasClicked]=\"hasClickedRowCount\" (next)=\"onNextPage()\" (previous)=\"onPrevPage()\" (total)=\"getRowCount()\"></app-custom-paginator>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </content>\r\n</mainpanel>","import { Component } from \"@angular/core\";\r\nimport { HttpService } from \"../../../services/http.service\";\r\nimport { Product } from \"../../../model/core/Product\";\r\nimport { ToastrService } from \"ngx-toastr\";\r\nimport { ProductFilter } from \"src/app/model/ProductFilter\";\r\nimport { ScanDialogComponent } from \"../../modals/scan-dialog/scan-dialog.component\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { UploadProductDialogComponent } from \"../../modals/uploadProductDialog/uploadProductDialog.component\";\r\nimport { ModalVariantComponent } from \"../../modals/modal-variant/modal-variant.component\";\r\nimport { filter } from \"rxjs\";\r\nimport { ProductService } from \"src/app/services/product.service\";\r\nimport { Channel } from \"src/app/model/core/Channel\";\r\nimport { Constants } from \"src/app/model/Constants\";\r\nimport { ModalUploadMultipleProductComponent } from \"../../modals/modal-uploadMultiple-product/modal-uploadMultiple-product.component\";\r\nimport { ChannelType } from \"src/app/model/enums/ChannelType.enum\";\r\n\r\n@Component({\r\n selector: \"app-in-pos\",\r\n templateUrl: \"./in-pos.component.html\",\r\n styleUrls: [\"./in-pos.component.scss\"],\r\n})\r\nexport class InPosComponent {\r\n public channelOptions: Channel[];\r\n public searchFilter = new ProductFilter();\r\n public products: Product[];\r\n public rowCount: number = 0;\r\n\r\n constructor(\r\n private http: HttpService,\r\n private toastr: ToastrService,\r\n public dialog: MatDialog,\r\n public productService: ProductService\r\n ) {\r\n this.getLoaderPage();\r\n }\r\n\r\n /**\r\n * Get the channel list, filter options and calls GetProducts()\r\n */\r\n private getLoaderPage(): void {\r\n this.productService.loader().subscribe((result) => {\r\n this.channelOptions = result.Options.Channel;\r\n this.searchFilter.PageNumber = result.Filter.PageNumber;\r\n this.searchFilter.RowCount = result.Filter.RowCount;\r\n this.searchFilter.ChannelID = null;\r\n this.searchFilter.PageSize = 100;\r\n this.getProducts();\r\n });\r\n }\r\n\r\n /**\r\n * Calls GetInPOS to get the product list\r\n */\r\n private getProducts(): void {\r\n const payload = {\r\n PageNumber: this.searchFilter.PageNumber,\r\n RowCount: this.searchFilter.RowCount,\r\n text: this.searchFilter.text,\r\n };\r\n this.http\r\n .post<any>(\"/api/product/GetInPOS\", payload)\r\n .subscribe((result) => {\r\n this.products = result.Data;\r\n this.rowCount =\r\n result.Total == null\r\n ? this.searchFilter.RowCount\r\n : result.Total.toString();\r\n this.products = this.productService.checkProductHasUploadBtn(\r\n this.products,\r\n this.channelOptions\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Opens the scan dialog and pass the Channel list and the filter variable\r\n * It will return the modified filter and will run the scan function that the user has selected (full or quick)\r\n */\r\n public onOpenScanDialog() {\r\n let dialogFilter = JSON.parse(JSON.stringify(this.searchFilter));\r\n dialogFilter.ChannelID = Constants.GuidEMpty;\r\n const dialogRef = this.dialog.open(ScanDialogComponent, {\r\n data: {\r\n filter: dialogFilter,\r\n channelOptions: this.channelOptions,\r\n },\r\n width: \"40%\",\r\n });\r\n dialogRef\r\n .afterClosed()\r\n .pipe(filter((result) => Constants.IsNotEmpty(result)))\r\n .subscribe(\r\n (result: {\r\n ScanFull: boolean;\r\n UpdatedProduct: boolean;\r\n ChannelID: string;\r\n Async: boolean;\r\n }) => {\r\n this.searchFilter.ChannelID = result.ChannelID;\r\n this.searchFilter.ScanFull = result.ScanFull;\r\n this.searchFilter.UpdatedProduct = result.UpdatedProduct;\r\n this.searchFilter.Async = result.Async;\r\n this.scanAllProduct();\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Scan the products,then updates the product list and show the total result in a toastr\r\n */\r\n public scanAllProduct(): void {\r\n if (this.searchFilter.ChannelID == null) {\r\n this.toastr.error(\"Please Select Channel\", \"Error\");\r\n return;\r\n }\r\n this.productService\r\n .scanAll(\r\n this.searchFilter.ChannelID,\r\n this.searchFilter.ScanFull,\r\n this.searchFilter.UpdatedProduct,\r\n this.searchFilter.Async\r\n )\r\n .subscribe((result) => {\r\n if (this.searchFilter.Async) {\r\n this.toastr.warning(\"You will be notified when the scan is completed.\", \"Scan In Progress\", {toastClass: 'ngx-toastr toast-waiting'});\r\n } else {\r\n this.getLoaderPage();\r\n let channel = this.productService.findChannelById(\r\n this.searchFilter.ChannelID,\r\n this.channelOptions\r\n );\r\n this.productService.successToastrScanAllProduct(\r\n result,\r\n channel,\r\n !this.searchFilter.UpdatedProduct\r\n );\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Opens a dialog that shows the list of the product's variants\r\n * @param index The product's index\r\n */\r\n public onOpenDialogVariant(index: number): void {\r\n this.dialog.open(ModalVariantComponent, {\r\n data: {\r\n title: this.products[index].Name,\r\n variants: this.products[index].Variants,\r\n },\r\n width: \"50%\",\r\n });\r\n }\r\n /**\r\n * open upload product dialog for upload multiple product to single channel\r\n */\r\n public onUploadMultipleProductSingleChannel() {\r\n this.dialog\r\n .open(UploadProductDialogComponent, {\r\n width: \"350px\",\r\n data: {\r\n item: null,\r\n selectedItemMissingChannel: this.channelOptions,\r\n },\r\n })\r\n .afterClosed()\r\n .subscribe((result: { channelID: string; categoryID: number }) => {\r\n if (result) {\r\n let channelID = result.channelID;\r\n let categoryID = result.categoryID;\r\n this.uploadMultipleProduct(channelID, categoryID);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * call api upload multiple product to single channel\r\n * @param channelID\r\n * @param categoryID\r\n */\r\n private uploadMultipleProduct(channelID: string, categoryID: number) {\r\n const selectedProducts = this.productService.selectedProduct(this.products);\r\n this.productService\r\n .uploadMultipleProduct(selectedProducts, channelID, categoryID)\r\n .subscribe((result) => {\r\n this.getProducts();\r\n const selectedChannel = this.productService.findChannelById(\r\n channelID,\r\n this.channelOptions\r\n );\r\n if (selectedProducts.length > 1) {\r\n this.toastr.success(\r\n \"Successfully uploaded \" +\r\n selectedProducts.length +\r\n \" Product to channel \" +\r\n selectedChannel?.Name,\r\n \"Success\"\r\n );\r\n } else {\r\n this.toastr.success(\r\n selectedChannel?.Name + \" Successfully Created\",\r\n \"Success\"\r\n );\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * open modal upload single product to multiple channel\r\n * @param product\r\n */\r\n public onUploadToMultipleChannel(product: Product) {\r\n let productChannel = this.productService.getChannelProduct(product);\r\n product.Channel = productChannel;\r\n let unselectedChannel = this.productService.filterUnselectedChannel(\r\n product,\r\n this.channelOptions\r\n );\r\n this.dialog\r\n .open(ModalUploadMultipleProductComponent, {\r\n width: \"700px\",\r\n data: {\r\n title: `Upload - ${product.Name}`,\r\n channels: unselectedChannel,\r\n products: [product],\r\n },\r\n })\r\n .afterClosed()\r\n .pipe(filter(result => result !== \"CANCEL\"))\r\n .subscribe((result: any[]) => {\r\n this.getProducts();\r\n });\r\n }\r\n\r\n /**\r\n * Searches the product based on text in the search box\r\n * Will search the title, SKU, and variant names of the product\r\n * @param event The event from the search bar\r\n */\r\n public searchProduct(text: string): void {\r\n this.searchFilter.text = text;\r\n this.getProducts();\r\n }\r\n\r\n /**\r\n * Change to next page\r\n * @param pageEvent The event from paginator\r\n */\r\n public onNextPage(): void {\r\n this.searchFilter.PageNumber = this.searchFilter.PageNumber + 1;\r\n this.getProducts();\r\n }\r\n\r\n /**\r\n * Change to next page\r\n * @param pageEvent The event from paginator\r\n */\r\n public onPrevPage(): void {\r\n this.searchFilter.PageNumber = this.searchFilter.PageNumber - 1;\r\n this.getProducts();\r\n }\r\n\r\n /**\r\n * Opens the scan dialog and pass the Channel list and the filter variable\r\n * It will return the modified filter and will run the scan function that the user has selected (full or quick)\r\n */\r\n public onScanMultipleProduct() {\r\n let dialogFilter = JSON.parse(JSON.stringify(this.searchFilter));\r\n dialogFilter.ChannelID = Constants.GuidEMpty;\r\n let channels = this.productService.filterChannelByTypeId(\r\n this.channelOptions,\r\n [ChannelType.Tokopedia, ChannelType.Tiktok]\r\n );\r\n const dialogRef = this.dialog.open(ScanDialogComponent, {\r\n data: {\r\n filter: dialogFilter,\r\n channelOptions: channels,\r\n isSingleChannel: true,\r\n },\r\n width: \"40%\",\r\n });\r\n dialogRef\r\n .afterClosed()\r\n .pipe(filter((result) => Constants.IsNotEmpty(result)))\r\n .subscribe(\r\n (result: {\r\n ChannelID: string;\r\n ScanFull: boolean;\r\n UpdatedProduct: boolean;\r\n }) => {\r\n this.searchFilter.ChannelID = result.ChannelID;\r\n this.searchFilter.ScanFull = result.ScanFull;\r\n this.searchFilter.UpdatedProduct = result.UpdatedProduct;\r\n let products = this.productService.selectedProduct(this.products);\r\n let codes = this.productService.getVariantCodesProducts(products);\r\n this.scanSingleProduct(codes);\r\n }\r\n );\r\n }\r\n\r\n public onScanSingleProduct(product: Product) {\r\n let dialogFilter = JSON.parse(JSON.stringify(this.searchFilter));\r\n dialogFilter.ChannelID = Constants.GuidEMpty;\r\n this.dialog\r\n .open(ScanDialogComponent, {\r\n data: {\r\n filter: dialogFilter,\r\n channelOptions: this.channelOptions,\r\n isSingleChannel: true,\r\n },\r\n width: \"40%\",\r\n })\r\n .afterClosed()\r\n .pipe(filter((result) => Constants.IsNotEmpty(result)))\r\n .subscribe((result) => {\r\n this.searchFilter.ChannelID = result.ChannelID;\r\n const codes = this.productService.getVariantCodesProduct(product);\r\n this.scanSingleProduct(codes);\r\n });\r\n }\r\n\r\n /**\r\n * call api scan single product to single channel\r\n * @param ids\r\n */\r\n private scanSingleProduct(ids: string[]) {\r\n this.productService.scanSingle(this.searchFilter.ChannelID, ids).subscribe({\r\n next: (res) => {\r\n if (res) {\r\n this.toastr.success(\"Successfully Scan \", \"Success\");\r\n } else {\r\n let child = this.productService.findChannelById(\r\n this.searchFilter.ChannelID,\r\n this.channelOptions\r\n );\r\n this.toastr.error(\r\n `This product is not existed in ${child?.Name} `,\r\n `Error`\r\n );\r\n }\r\n this.searchFilter.ChannelID = Constants.GuidEMpty;\r\n if (res) {\r\n this.getProducts();\r\n }\r\n },\r\n error: (err) => {\r\n this.searchFilter.ChannelID = Constants.GuidEMpty;\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Get variant code product for CARD UI\r\n * @param variants\r\n * @returns\r\n */\r\n public getVariantCode(variants: any[]): string {\r\n let variantCode: string;\r\n if (variants.length > 1) {\r\n let model = variants[0].model ? variants[0].model : \"\";\r\n variantCode = model + variants[0].Code;\r\n }\r\n\r\n if (variants.length == 1) {\r\n variantCode = variants[0].Code;\r\n }\r\n return variantCode;\r\n }\r\n}\r\n","<mainpanel\r\n [headerTitle]=\"'In POS' + ' (' + this.rowCount + ')'\"\r\n hideSearchDropdown=\"true\"\r\n (onSubmit)=\"searchProduct($event)\"\r\n hideSearchDropdown=\"false\"\r\n description=\"All products which is already available in POS\"\r\n>\r\n <actions>\r\n <button\r\n type=\"button\"\r\n data-cy=\"scanSoldinChannel\"\r\n class=\"btn btn-outline-secondary shadow rounded\"\r\n *ngIf=\"!productService.hasSelection(products)\"\r\n (click)=\"onOpenScanDialog()\"\r\n ><i class=\"fas fa-lg fa-crosshairs\"></i> Scan Channel\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n data-cy=\"scanInPos\"\r\n *ngIf=\"productService.hasSelection(products)\"\r\n class=\"btn btn-outline-secondary shadow rounded me-2\"\r\n (click)=\"onScanMultipleProduct()\"\r\n >\r\n <i class=\"fas fa-lg fa-crosshairs\"></i> Scan Selected Product ({{\r\n productService.selectedProduct(products)?.length\r\n }})\r\n </button>\r\n\r\n <button\r\n class=\"btn btn-light shadow rounded ms-2\"\r\n *ngIf=\"productService.hasSelection(products)\"\r\n (click)=\"onUploadMultipleProductSingleChannel()\"\r\n >\r\n <i class=\"fa fa-upload\" aria-hidden=\"true\"></i> Upload Bulk\r\n </button>\r\n </actions>\r\n\r\n <content>\r\n <div class=\"container-fluid\">\r\n <div class=\"row mt-8\">\r\n <div\r\n class=\"col-12 col-md-6 col-xl-4 px-3 my-3\"\r\n *ngFor=\"let product of products; let i = index\">\r\n <app-product-card\r\n [productId]=\"product.ID\"\r\n [title]=\"product?.Name\"\r\n [image]=\"product?.ThumbnailUrl\"\r\n [description]=\"product?.Variants.length > 1 ? product?.Variants.length + ' Variants' : null\"\r\n [channels]=\"productService.getChannelProduct(product)\"\r\n [code]=\"getVariantCode(product?.Variants)\"\r\n [showCheckBox]=\"product?.Channel.length < this.channelOptions.length\"\r\n [scanButton]=\"true\"\r\n [uploadButton]=\"product?.hasUpload\"\r\n [imageForZoom]=\"product?.ImageUrl\"\r\n (onUpload)=\"onUploadToMultipleChannel(product)\"\r\n (onScan)=\"onScanSingleProduct(product)\"\r\n (onDescEvent)=\"onOpenDialogVariant(i)\"\r\n (onCheckBoxChange)=\"product['selected'] = $event\">\r\n </app-product-card>\r\n </div>\r\n </div>\r\n <div class=\"row mt-2 justify-content-end\">\r\n <div class=\"col-md-12\">\r\n <app-custom-paginator\r\n [filter]=\"searchFilter\"\r\n [totaldata]=\"products?.length\"\r\n [paginationTotal]=\"rowCount\"\r\n [hasClicked]=\"true\"\r\n (next)=\"onNextPage()\"\r\n (previous)=\"onPrevPage()\"\r\n ></app-custom-paginator>\r\n </div>\r\n </div>\r\n </div>\r\n </content>\r\n</mainpanel>\r\n","import { Component, OnDestroy, OnInit } from \"@angular/core\";\r\nimport { HttpService } from \"../../../services/http.service\";\r\nimport { Product } from \"../../../model/core/Product\";\r\nimport { ProductFilter } from \"src/app/model/ProductFilter\";\r\nimport { ScanDialogComponent } from \"../../modals/scan-dialog/scan-dialog.component\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { ToastrService } from \"ngx-toastr\";\r\nimport { ProductService } from \"src/app/services/product.service\";\r\nimport {\r\n InfinitePaginationService,\r\n Pagination,\r\n} from \"src/app/services/infinite-pagination/infinite-pagination.service\";\r\nimport { filter, map, Observable, tap } from \"rxjs\";\r\nimport { Constants } from \"src/app/model/Constants\";\r\nimport { ChannelType } from \"src/app/model/enums/ChannelType.enum\";\r\nimport { Channel } from \"src/app/model/core/Channel\";\r\nimport { BiggerPictureService } from \"src/app/services/biggerPicture.service\";\r\n\r\n@Component({\r\n selector: \"app-not-in-channel\",\r\n templateUrl: \"./not-in-channel.component.html\",\r\n styleUrls: [\"./not-in-channel.component.scss\"],\r\n})\r\nexport class NotInChannelComponent implements OnInit, OnDestroy {\r\n private loaderAPI = \"product/Load\";\r\n private rowCountAPI = \"product/GetNotInChannelRowCount\";\r\n private notChannelAPI = \"product/GetNotInChannelV2\";\r\n public loader$: Observable<ProductFilter>;\r\n public rowCount$: Observable<{Count:number}>;\r\n public data$: Observable<any>\r\n public filterSearch: Pagination;\r\n public hostName: string;\r\n\r\n constructor(\r\n private http: HttpService,\r\n public dialog: MatDialog,\r\n private toastr: ToastrService,\r\n private productService: ProductService,\r\n public paginationService: InfinitePaginationService<Product>,\r\n public biggerPictureService: BiggerPictureService\r\n ) {\r\n }\r\n \r\n ngOnInit(): void {\r\n this.initPageLoader();\r\n this.iniData();\r\n this.initHostName();\r\n }\r\n\r\n private initHostName() {\r\n const storageData = localStorage.getItem('Authorization');\r\n this.hostName = JSON.parse(storageData)?.Host;\r\n }\r\n\r\n private initPageLoader() {\r\n this.paginationService.fetchDataEndpoint = this.notChannelAPI;\r\n this.loader$ = this.http.post(`api/${this.loaderAPI}`, {}).pipe(\r\n tap((loader: any) => {\r\n this.filterSearch = loader.Filter;\r\n this.paginationService.resetToFirstPage(loader.Filter);\r\n })\r\n );\r\n }\r\n\r\n public iniData() {\r\n this.data$ = this.paginationService.data$\r\n .pipe(\r\n map((products: Product[]) => {\r\n products = products.map(product => {\r\n product.Variants = product.Variants.map(variant => {\r\n variant.Available = this.productService.sortChannel(variant.Available)\r\n variant.NotAvailable = this.productService.sortChannel(variant.NotAvailable);\r\n variant.Available = this.assignLogoChannel(variant.Available);\r\n variant.NotAvailable = this.assignLogoChannel(variant.NotAvailable);\r\n return variant;\r\n })\r\n return product;\r\n });\r\n return products;\r\n })\r\n );\r\n }\r\n\r\n private assignLogoChannel(channels: Channel[]) {\r\n channels = channels.map(channel => {\r\n channel.Img = Constants.getChannelLogoByTypeId(channel.TypeID);\r\n return channel;\r\n });\r\n return channels;\r\n }\r\n\r\n /**\r\n * Search box functionality\r\n * @param event Event from search bar\r\n */\r\n public searchProduct(text: string): void {\r\n this.filterSearch.text = text;\r\n this.paginationService.resetToFirstPage(this.filterSearch);\r\n }\r\n\r\n /**\r\n * call api ScanOptimize for scan all product to single channel\r\n */\r\n private scanAllProduct(loader): void {\r\n let channel = this.productService.findChannelById(\r\n this.filterSearch.ChannelID,\r\n loader.Options.Channel\r\n );\r\n this.productService\r\n .scanAll(this.filterSearch.ChannelID, this.filterSearch.ScanFull, this.filterSearch.UpdatedProduct, this.filterSearch.Async)\r\n .subscribe((res: any) => {\r\n if (this.filterSearch.Async) {\r\n this.toastr.success(\"You will be notified when the scan is completed.\", \"Scan Asynchronous\"); \r\n }\r\n else {\r\n this.productService.successToastrScanAllProduct(res, channel, !this.filterSearch.UpdatedProduct);\r\n this.initPageLoader();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Opens the scan dialog and pass the Channel list and the filter variable\r\n * It will return the modified filter and will run the scan function that the user has selected (full or quick)\r\n */\r\n public openScanDialog(loader) {\r\n let dialogFilter = JSON.parse(JSON.stringify(this.filterSearch));\r\n dialogFilter.ChannelID = Constants.GuidEMpty;\r\n const dialogRef = this.dialog.open(ScanDialogComponent, {\r\n data: {\r\n filter: dialogFilter,\r\n channelOptions: loader.Options.Channel,\r\n },\r\n width: \"40%\",\r\n });\r\n dialogRef\r\n .afterClosed()\r\n .pipe(filter((result) => Constants.IsNotEmpty(result)))\r\n .subscribe((result: {ChannelID: string, ScanFull: boolean, UpdatedProduct: boolean, Async: boolean}) => {\r\n this.filterSearch.ChannelID = result.ChannelID;\r\n this.filterSearch.ScanFull = result.ScanFull;\r\n this.filterSearch.UpdatedProduct = result.UpdatedProduct;\r\n this.filterSearch.Async = result.Async;\r\n this.scanAllProduct(loader);\r\n });\r\n }\r\n\r\n public getChannelLogoById(typeId: ChannelType) {\r\n let logo = Constants.getChannelLogoByTypeId(typeId);\r\n return logo;\r\n }\r\n\r\n /**\r\n * upload selected product to selected channel\r\n * @param channelID The channel's ID\r\n * @param itemID The item's ID\r\n */\r\n public uploadProductToSingleChannel(\r\n product: Product,\r\n channelId: string,\r\n categoryId: number,\r\n loader\r\n ) {\r\n let channel = this.productService.findChannelById(\r\n channelId,\r\n loader.Options.Channel\r\n );\r\n this.productService\r\n .uploadMultipleProduct([product], channelId, categoryId)\r\n .subscribe((result) => {\r\n this.paginationService.resetToFirstPage(loader.Filter);\r\n this.toastr.success(\r\n \"Successfully uploaded \" + product.Name + \" to \" + channel.Name,\r\n \"Success\"\r\n );\r\n });\r\n }\r\n\r\n public getRowCount() {\r\n this.paginationService.hideCount = false;\r\n this.rowCount$ = this.http\r\n .post<any>(`/api/${this.rowCountAPI}`,this.filterSearch);\r\n }\r\n\r\n public onNextPage() {\r\n this.paginationService.onNextPage(this.filterSearch);\r\n }\r\n\r\n public onLastPage() {\r\n this.http.post(`/api/${this.rowCountAPI}`, {}).subscribe({\r\n next: (response: {Count :number}) => {\r\n this.filterSearch.PageNumber = 1;\r\n this.paginationService.getAllData(this.filterSearch, response.Count);\r\n },\r\n });\r\n }\r\n\r\n public onZoomImage(ev: PointerEvent, imageUrl: string) {\r\n this.biggerPictureService.openBiggerPicture(ev, imageUrl);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.paginationService.destroy();\r\n }\r\n}\r\n","<mainpanel *ngIf=\"loader$ | async as loader\" headerTitle=\"Not in Channel\" [hideSearchDropdown]=\"true\"\r\n (onSubmit)=\"searchProduct($event)\" description=\"SKU has not been sold on one of channels\">\r\n <actions>\r\n <button data-cy=\"scanNotinChannel\" type=\"button\" class=\"btn btn-outline-secondary shadow rounded\"\r\n (click)=\"openScanDialog(loader)\">\r\n <i class=\"fas fa-lg fa-crosshairs\"></i>\r\n Scan Channel\r\n </button>\r\n </actions>\r\n <content>\r\n <div class=\"container-fluid mt-3\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <table class=\"table border-bottom\">\r\n <thead class=\"thead-light sticky-top-thead\">\r\n <tr>\r\n <th style=\"width: 450px\" class=\"ms-5 text-center\" colspan=\"2\">Product</th>\r\n <th style=\"width: 150px\">Variant</th>\r\n <th style=\"width: 150px\">SKU</th>\r\n <th style=\"width: 20%\">Available In</th>\r\n <th style=\"width: 16%\">Not Available In</th>\r\n </tr>\r\n </thead>\r\n <tbody *ngIf=\"data$ | async as products\">\r\n <ng-container *ngFor=\"let product of products\">\r\n <tr *ngFor=\"let variant of product.Variants; let i = index\">\r\n <ng-container *ngIf=\"i == 0\">\r\n <td [rowSpan]=\"product?.Variants.length\" class=\"text-center\">\r\n <div style=\"padding-right: 0px;\">\r\n <ng-container *ngIf=\"product?.ImageUrl; else elsePic\">\r\n <img class=\"border rounded cursor-pointer\" [src]=\"product?.ImageUrl\" style=\"max-width: 40px;\" \r\n (click)=\"onZoomImage($event, product?.ImageUrl)\"\r\n />\r\n </ng-container>\r\n <ng-template #elsePic><img class=\"border rounded\" style=\"max-width: 40px;\"\r\n src=\"//res.cloudinary.com/pos/image/upload/w_40/POS/Images/Icon/products_thumb.png\" />\r\n </ng-template>\r\n </div>\r\n </td>\r\n <td [rowSpan]=\"product?.Variants.length\" class=\"text-start\">\r\n <h4 class=\"ms-5 fw-normal text-ellipsis\" style=\"max-width: 26vw !important;\">\r\n <span [matTooltip]=\"product?.Name?.length > 50 ? product?.Name : ''\">\r\n {{ product?.Name }}\r\n </span>\r\n </h4>\r\n </td>\r\n </ng-container>\r\n <td>\r\n {{ variant.Name }}\r\n </td>\r\n <td>\r\n <span>\r\n {{ variant.Code }}\r\n </span>\r\n <span class=\"ms-1\">\r\n <a [href]=\"'https://'+hostName+'/menu/Products/Catalog/Variants/Info?ID='+variant?.ID\"\r\n target=\"_blank\"\r\n ><i class=\"fas fa-lg fa-external-link-alt external-link-custom\"></i></a>\r\n </span>\r\n </td>\r\n <td style=\"padding-left: 0px\">\r\n <div class=\"d-flex flex-wrap mb-1\">\r\n <div *ngFor=\"let channel of variant?.Available\">\r\n <a [href]=\"channel.URL\" target=\"_blank\">\r\n <img class=\"channel-logo cursor-pointer ms-4 mt-3\" [src]=\"channel.Img\" alt=\"\"\r\n [matTooltip]=\"channel.Name\" />\r\n </a>\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"padding-left: 0px\">\r\n <div class=\"d-flex flex-wrap mb-1\">\r\n <div *ngFor=\"let channel of variant?.NotAvailable\">\r\n <img class=\"channel-logo cursor-pointer ms-4 mt-3\" [src]=\"channel.Img\" alt=\"\"\r\n [matTooltip]=\"channel.Name\" />\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between mt-5\" *ngIf=\"data$ | async as products\">\r\n <div class=\"me-auto d-sm-block collapse mt-3\">\r\n <div class=\"font-weight-bold font-italic hidden-xxs\">\r\n Showing 1 -\r\n {{ products?.length | number }}\r\n of\r\n <span style=\"cursor: pointer\" *ngIf=\"paginationService.hideCount\" (click)=\"getRowCount()\"><i\r\n title=\"Retreive rows count\" class=\"border p-3\">?</i>\r\n </span>\r\n <span *ngIf=\"!paginationService.hideCount && (rowCount$ | async) as row\">{{ row?.Count | number }}</span>\r\n records ~ {{ paginationService.footerPageNumber }} Page\r\n </div>\r\n </div>\r\n <div class=\"btn-group\">\r\n <a role=\"button\" class=\"btn btn-outline-secondary btn-sm text-primary\" *ngIf=\"\r\n paginationService.disableNextButton &&\r\n !paginationService.goToLastPage\r\n \" (click)=\"onNextPage()\" title=\"Load more for 20 products\"><i class=\"fas fa-arrow-right\"></i> Next</a>\r\n <a role=\"button\" class=\"btn btn-outline-secondary btn-sm text-primary\" *ngIf=\"\r\n paginationService.disableNextButton &&\r\n !paginationService.goToLastPage\r\n \" (click)=\"onLastPage()\" title=\"Load all products\"><i class=\"fas fa-share\"></i> Last</a>\r\n </div>\r\n </div>\r\n </div>\r\n </content>\r\n</mainpanel>","import { Component, OnInit } from \"@angular/core\";\r\nimport { HttpService } from \"../../../services/http.service\";\r\nimport { ScanDialogComponent } from \"../../modals/scan-dialog/scan-dialog.component\";\r\nimport { ProductFilter } from \"../../../model/ProductFilter\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { Channel } from \"src/app/model/core/Channel\";\r\nimport { ModalVariantsComponent } from \"../../modals/modal-variants/modal-variants.component\";\r\nimport { ProductService } from \"src/app/services/product.service\";\r\nimport { Constants } from \"src/app/model/Constants\";\r\nimport { filter } from \"rxjs\";\r\nimport { Product } from \"src/app/model/core/Product\";\r\nimport { ChannelType } from \"src/app/model/enums/ChannelType.enum\";\r\nimport { ToastrService } from \"ngx-toastr\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\n\r\n@Component({\r\n selector: \"app-not-in-pos\",\r\n templateUrl: \"./not-in-pos.component.html\",\r\n styleUrls: [\"./not-in-pos.component.scss\"],\r\n})\r\nexport class NotInPosComponent implements OnInit {\r\n public channelOptions: Channel[];\r\n public searchFilter = new ProductFilter();\r\n public products: any[];\r\n public hasClickRowCount = false;\r\n public rowCount: number;\r\n\r\n constructor(\r\n private http: HttpService,\r\n public dialog: MatDialog,\r\n public productService: ProductService,\r\n private toastrService: ToastrService,\r\n private activateRouter: ActivatedRoute\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.activateRouter.queryParams\r\n .subscribe(val => {\r\n if (val.ID) {\r\n this.initPageLoader(val.ID);\r\n }\r\n else {\r\n this.initPageLoader(Constants.GuidEMpty);\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Calls the Load API\r\n * Used for initialization\r\n */\r\n private initPageLoader(channelID: string): void {\r\n this.productService.loader(channelID)\r\n .subscribe((result) => {\r\n this.channelOptions = result.Options.Channel;\r\n this.searchFilter = result.Filter;\r\n this.searchFilter.PageSize = result.Filter.RowCount;\r\n this.getProducts();\r\n });\r\n }\r\n\r\n /**\r\n * Get products not in POS\r\n */\r\n private getProducts(): void {\r\n const payload = {\r\n ChannelID: this.searchFilter.ChannelID,\r\n PageNumber: this.searchFilter.PageNumber,\r\n RowCount: this.searchFilter.RowCount,\r\n text: this.searchFilter.text,\r\n HaveSku: this.searchFilter.HaveSku\r\n }\r\n this.http\r\n .post<any>(\"/api/product/GetProductChannelNotPOS\", payload)\r\n .subscribe((result) => {\r\n this.products = result.Data;\r\n this.mapChannelToProduct();\r\n this.setSkuProduct();\r\n });\r\n }\r\n\r\n private mapChannelToProduct() {\r\n this.products = this.products.map((product) => {\r\n product.Channel = JSON.parse(JSON.stringify(\r\n this.channelOptions.find(\r\n (channel) => channel.ID == product.ChannelID\r\n )\r\n ));\r\n return product;\r\n })\r\n .map(product => {\r\n product.Channel.Url = product.Url;\r\n return product;\r\n });\r\n }\r\n\r\n /**\r\n * filter and set sku to product for showing in card UI\r\n */\r\n private setSkuProduct() {\r\n this.products = this.products.map(product => {\r\n if (product?.Variant?.length == 0) {\r\n if (Constants.IsNotEmpty(product?.ChannelItemSKU)) {\r\n product['SKU'] = product?.ChannelItemSKU;\r\n }\r\n else {\r\n product['SKU'] = 'SKU not assigned';\r\n }\r\n }\r\n else {\r\n product.SKU = product?.Variant[0]?.ChannelVariationSKU ? product?.Variant[0]?.ChannelVariationSKU : 'SKU not assigned';\r\n }\r\n return product;\r\n })\r\n }\r\n\r\n /**\r\n * Filters the product list. First based on channel, then by name\r\n * @param event\r\n */\r\n public onSearch(text: string): void {\r\n this.searchFilter.text = text;\r\n this.hasClickRowCount = false;\r\n this.getProducts();\r\n }\r\n\r\n public onClearChannelFilter() {\r\n this.searchFilter.ChannelID = Constants.GuidEMpty;\r\n }\r\n\r\n /**\r\n * Calls ScanOptimized to scan channel\r\n */\r\n public onScanAll() {\r\n let channel = this.productService.findChannelById(\r\n this.searchFilter.ChannelID,\r\n this.channelOptions\r\n );\r\n this.productService\r\n .scanAll(\r\n this.searchFilter.ChannelID, \r\n this.searchFilter.ScanFull, \r\n this.searchFilter.UpdatedProduct,\r\n this.searchFilter.Async,\r\n )\r\n .subscribe((result) => {\r\n if (this.searchFilter.Async) {\r\n this.toastrService.warning(\"You will be notified when the scan is completed.\", \"Scan In Progress\", {toastClass: 'ngx-toastr toast-waiting'}); \r\n }\r\n else {\r\n this.initPageLoader(Constants.GuidEMpty);\r\n this.productService.successToastrScanAllProduct(result, channel, !this.searchFilter.UpdatedProduct);\r\n }\r\n // reset selected filter channel\r\n this.searchFilter.ChannelID = Constants.GuidEMpty;\r\n });\r\n }\r\n\r\n /**\r\n * Open the scan dialog and pass the Channel list and the filter variable\r\n * Returns the modified filter, then run the scan function\r\n */\r\n public openScanDialog() {\r\n let dialogFilter = JSON.parse(JSON.stringify(this.searchFilter));\r\n dialogFilter.ChannelID = Constants.GuidEMpty;\r\n const dialogRef = this.dialog.open(ScanDialogComponent, {\r\n data: {\r\n filter: dialogFilter,\r\n channelOptions: this.channelOptions,\r\n },\r\n width: \"40%\",\r\n });\r\n dialogRef\r\n .afterClosed()\r\n .pipe(filter((result) => Constants.IsNotEmpty(result)))\r\n .subscribe((result: {ChannelID: string, ScanFull: boolean, UpdatedProduct: boolean, Async: boolean}) => {\r\n this.searchFilter.ChannelID = result.ChannelID;\r\n this.searchFilter.UpdatedProduct = result.UpdatedProduct;\r\n this.searchFilter.ScanFull = result.ScanFull;\r\n this.searchFilter.Async = result.Async;\r\n this.onScanAll();\r\n });\r\n }\r\n\r\n /**\r\n * Retrieves product data from channel\r\n * Based on downloadType, either get all products or only selected ones\r\n *\r\n * @input downloadType: number\r\n * 0 downloads all, 1 only selected products\r\n */\r\n onDownloadAllProduct(type: \"ALL\" | \"SELECTED\"): void {\r\n let listSelected: any[];\r\n if (type == \"ALL\") {\r\n listSelected = this.products;\r\n } else {\r\n listSelected = this.productService.selectedProduct(this.products);\r\n }\r\n\r\n if (listSelected.length > 0) {\r\n this.productService.downloadMultipleProduct(listSelected)\r\n .subscribe({\r\n next: () => {\r\n this.getProducts();\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param checked\r\n * @param index\r\n */\r\n public onSelectProduct(checked: boolean, index: number) {\r\n this.products[index].selected = checked;\r\n }\r\n\r\n /**\r\n * Retrieves a product's information\r\n * @param info Channel ID and Item ID\r\n */\r\n public onDownloadProduct(product: Product): void {\r\n if (\r\n !confirm(\r\n `Are you sure you want to Retrieve product ${product?.Name} from ${product?.Channel['Name']} to POS?`\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n this.productService.downloadProduct(product)\r\n .subscribe({\r\n next: () => {\r\n this.getProducts();\r\n }\r\n })\r\n }\r\n\r\n public onScanChannel(product: Product) {\r\n let payload = JSON.parse(JSON.stringify(product));\r\n delete payload.Channel;\r\n this.productService.scanCompareToPos([payload])\r\n .subscribe((result: {Status: boolean}) => {\r\n if (result.Status) {\r\n this.initPageLoader(Constants.GuidEMpty);\r\n this.toastrService.success(`product ${product.Name} have been successfully scanned and synchronized with POS`, \"Success\");\r\n }\r\n else {\r\n //product not found\r\n this.toastrService.error(`Product ${product.Name} is not existed in POS`, \"Error\");\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Opens a dialog that shows the list of the product's variants\r\n * @param index The product's index\r\n */\r\n public onShowVariantDetail(index: number): void {\r\n let variant = this.products[index].Variant;\r\n if (variant.length > 0) {\r\n this.dialog.open(ModalVariantsComponent, {\r\n data: {\r\n title: this.products[index].Name,\r\n variants: variant,\r\n },\r\n width: \"30%\",\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * get row count from api GetSoldInChannelRowCount\r\n */\r\n public getRowCount() {\r\n let payload = { \r\n ChannelID: this.searchFilter.ChannelID,\r\n text: this.searchFilter.text,\r\n HaveSku: parseInt(this.searchFilter.HaveSku as any)\r\n };\r\n this.http\r\n .post(\"/api/product/GetProductChannelNotPOSRowCount\", payload)\r\n .subscribe((result: { Count: number }) => {\r\n this.hasClickRowCount = true;\r\n this.rowCount = result.Count;\r\n });\r\n }\r\n \r\n /**\r\n * Pagination next page\r\n */\r\n public onNextPage() {\r\n this.searchFilter.PageNumber = this.searchFilter.PageNumber + 1;\r\n this.getProducts();\r\n }\r\n \r\n /**\r\n * Pagination previous page\r\n */\r\n public onPreviousPage() {\r\n this.searchFilter.PageNumber = this.searchFilter.PageNumber - 1;\r\n this.getProducts();\r\n }\r\n\r\n public getChannelLogo(channelType: ChannelType) {\r\n return Constants.getChannelLogoByTypeId(channelType);\r\n }\r\n}\r\n","<mainpanel headerTitle=\"Not in POS\" (onSubmit)=\"onSearch($event)\" textButton=\"Search\" description=\"SKU sold in Marketplace but not exist in DEALPOS\">\r\n <actions>\r\n <button *ngIf=\"!productService.hasSelection(products)\" type=\"button\" data-cy=\"scanNotInPos\"\r\n class=\"btn btn-outline-secondary shadow rounded\" (click)=\"openScanDialog()\">\r\n <i class=\"fas fa-lg fa-crosshairs\"></i> Scan Channel\r\n </button>\r\n\r\n <ng-container *ngIf=\"productService.hasSelection(products)\">\r\n <button type=\"button\" class=\"btn btn-success shadow-sm rounded ms-3\" (click)=\"onDownloadAllProduct('SELECTED')\">\r\n <i class=\"fa fa-download\"></i>\r\n Download Product ({{productService.selectedProduct(products)?.length}})\r\n </button>\r\n </ng-container>\r\n\r\n </actions>\r\n <filters>\r\n <div class=\"d-flex\">\r\n <div container>\r\n <div>\r\n <h6>Channel</h6>\r\n <ng-select class=\"center-text\" [clearable]=\"true\" [items]=\"channelOptions\" bindLabel=\"Name\" name=\"channelid\"\r\n bindValue=\"ID\" placeholder=\"Select Channel\" [(ngModel)]=\"searchFilter.ChannelID\"\r\n (clear)=\"onClearChannelFilter()\">\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n <span class=\"me-2\">\r\n <img style=\"width: 18px;\" [src]=\"getChannelLogo(item.TypeID)\" alt=\"\">\r\n </span>\r\n {{item.Name}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n <div>\r\n <h6>SKU Assigned</h6>\r\n <mat-radio-group [(ngModel)]=\"searchFilter.HaveSku\" name=\"haveSKU\"\r\n class=\"form-control h-100 pt-3 rounded\">\r\n <mat-radio-button [value]=\"0\" class=\"me-5\">\r\n All\r\n </mat-radio-button>\r\n <mat-radio-button [value]=\"1\" class=\"me-5\">\r\n Yes\r\n </mat-radio-button>\r\n <mat-radio-button [value]=\"2\" class=\"me-5\">\r\n No\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n </div>\r\n </div>\r\n </filters>\r\n <content>\r\n <div class=\"container-fluid mt-3\">\r\n <div class=\"row mt-8\">\r\n <div class=\"col-12 col-md-6 col-xl-4 px-3 my-3\" *ngFor=\"let product of products; let i = index\">\r\n <app-product-card \r\n [showRedirectIcon]=\"false\"\r\n [title]=\"product?.Name\" \r\n [image]=\"product?.Image\"\r\n [imageForZoom]=\"product?.Image\"\r\n [code]=\"product?.SKU\"\r\n [description]=\"product?.Variant?.length > 0 ? (product?.Variant?.length + ' Variants') : null\"\r\n [downloadButton]=\"true\" \r\n [channels]=\"product?.Channel ? [product?.Channel] : []\" \r\n [showCheckBox]=\"true\"\r\n [scanButton]=\"true\"\r\n (onCheckBoxChange)=\"onSelectProduct($event, i)\" \r\n (onDescEvent)=\"onShowVariantDetail(i)\"\r\n (onDownload)=\"onDownloadProduct(product)\" \r\n (onScan)=\"onScanChannel(product)\">\r\n </app-product-card>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\" *ngIf=\"products?.length > 0\">\r\n <div class=\"col-12\">\r\n <app-custom-paginator [filter]=\"searchFilter\" [totaldata]=\"products?.length\" [paginationTotal]=\"rowCount\"\r\n [hasClicked]=\"hasClickRowCount\" (total)=\"getRowCount()\" (next)=\"onNextPage()\" (previous)=\"onPreviousPage()\">\r\n </app-custom-paginator>\r\n </div>\r\n </div>\r\n </div>\r\n </content>\r\n</mainpanel>","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { RouterModule, Routes } from \"@angular/router\";\r\nimport { ProductsComponent } from \"./products.component\";\r\nimport { InPosComponent } from \"./in-pos/in-pos.component\";\r\nimport { SoldInChannelComponent } from \"./sold-in-channel/sold-in-channel.component\";\r\nimport { NotInChannelComponent } from \"./not-in-channel/not-in-channel.component\";\r\nimport { NotInPosComponent } from \"./not-in-pos/not-in-pos.component\";\r\nimport { DuplicateSkuComponent } from \"./duplicate-sku/duplicate-sku.component\";\r\nimport { AuthGuard } from \"src/app/services/auth.guard\";\r\n\r\nconst routes: Routes = [\r\n {\r\n path: \"\",\r\n component: ProductsComponent,\r\n children: [\r\n {\r\n path: \"\",\r\n redirectTo: \"sold-in-channel\",\r\n pathMatch: \"full\",\r\n },\r\n {\r\n path: \"in-pos\",\r\n component: InPosComponent,\r\n canActivate: [AuthGuard],\r\n data: { title: \"Products in POS\" },\r\n },\r\n {\r\n path: \"sold-in-channel\",\r\n component: SoldInChannelComponent,\r\n canActivate: [AuthGuard],\r\n data: { title: \"Products Sold in Channel\" },\r\n },\r\n {\r\n path: \"not-in-channel\",\r\n component: NotInChannelComponent,\r\n canActivate: [AuthGuard],\r\n data: { title: \"Products not in Channel\" },\r\n },\r\n {\r\n path: \"not-in-pos\",\r\n component: NotInPosComponent,\r\n canActivate: [AuthGuard],\r\n data: { title: \"Products not in POS\" },\r\n },\r\n {\r\n path: \"duplicate-sku\",\r\n component: DuplicateSkuComponent,\r\n canActivate: [AuthGuard],\r\n data: { title: \"Duplicate Sku in Channel\" },\r\n },\r\n ],\r\n },\r\n];\r\n\r\n@NgModule({\r\n imports: [CommonModule, RouterModule.forChild(routes)],\r\n})\r\nexport class ProductRoutingModule {}\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DuplicateSkuComponent } from './duplicate-sku/duplicate-sku.component';\r\nimport { InPosComponent } from './in-pos/in-pos.component';\r\nimport { NotInChannelComponent } from './not-in-channel/not-in-channel.component';\r\nimport { SoldInChannelComponent } from './sold-in-channel/sold-in-channel.component';\r\nimport { NotInPosComponent } from './not-in-pos/not-in-pos.component';\r\nimport { NavTabModule } from '../nav-tab/nav-tab.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\nimport { ProductRoutingModule } from './product-routing.module';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MainPanelModule } from '../main-panel/main-panel.component';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\nimport { ProductsComponent } from './products.component';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatPaginatorNoCountModule } from 'src/app/sharing-module/mat-paginator-no-count/mat-paginator-no-count.component';\r\nimport { ProductCardModule } from 'src/app/sharing-module/product-card/product-card.module';\r\nimport { CustomPaginatorModule } from 'src/app/sharing-module/custom-paginator/custom-paginator.module';\r\nimport { DuplicateProductCardModule } from 'src/app/sharing-module/duplicate-product-card/duplicate-product-card.module';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n NavTabModule,\r\n FormsModule,\r\n RouterModule,\r\n ProductRoutingModule,\r\n MatTooltipModule,\r\n MainPanelModule,\r\n NgSelectModule,\r\n MatPaginatorModule,\r\n MatPaginatorNoCountModule,\r\n ProductCardModule,\r\n CustomPaginatorModule,\r\n DuplicateProductCardModule,\r\n MatRadioModule\r\n ],\r\n declarations: [\r\n DuplicateSkuComponent,\r\n InPosComponent,\r\n NotInChannelComponent,\r\n SoldInChannelComponent,\r\n NotInPosComponent,\r\n ProductsComponent\r\n ],\r\n schemas: [NO_ERRORS_SCHEMA]\r\n})\r\nexport class ProductModule { }\r\n","import { Component } from '@angular/core';\r\nimport { NavTabMenu } from '../nav-tab/nav-tab.component';\r\n\r\n@Component({\r\n selector: 'app-products',\r\n templateUrl: './products.component.html',\r\n styleUrls: ['./products.component.scss']\r\n})\r\nexport class ProductsComponent {\r\n productTabs: NavTabMenu[] = [\r\n { Title : 'Sold in Channel' , Url : '/menu/products/sold-in-channel', Description: \"SKU has been mapped between dealpos and marketplace\"},\r\n { Title : 'Not in POS' , Url : '/menu/products/not-in-pos', Description: \"SKU sold in Marketplace but not exist in DEALPOS\"},\r\n { Title : 'Not in Channel' , Url : '/menu/products/not-in-channel', Description: \"SKU has not been sold on one of channels\"},\r\n { Title : 'In POS' , Url : '/menu/products/in-pos', Description: \"All products which is already available in POS\" },\r\n { Title : 'Multiple Listed SKU' , Url : '/menu/products/duplicate-sku', Description: \"SKU(s) which is listed more than one time (one to many)\"}\r\n ];\r\n}\r\n","<nav class=\"navbar page-nav navbar-default py-0 navbar-expand-lg\">\r\n <div class=\"container-fluid \">\r\n <div>\r\n <!-- add nav-tab here -->\r\n <nav-tab [Tabs]=\"productTabs\"></nav-tab>\r\n </div>\r\n </div>\r\n</nav>\r\n<router-outlet></router-outlet>","import { Component, OnInit } from \"@angular/core\";\r\nimport { HttpService } from \"../../../services/http.service\";\r\nimport { Product } from \"../../../model/core/Product\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { ProductFilter } from \"src/app/model/ProductFilter\";\r\nimport { ToastrService } from \"ngx-toastr\";\r\nimport { ModalVariantComponent } from \"../../modals/modal-variant/modal-variant.component\";\r\nimport { filter } from \"rxjs\";\r\nimport { ProductService } from \"src/app/services/product.service\";\r\nimport { ChannelType } from \"src/app/model/enums/ChannelType.enum\";\r\nimport { Channel } from \"src/app/model/core/Channel\";\r\nimport { Constants } from \"src/app/model/Constants\";\r\nimport { ModalUploadMultipleProductComponent } from \"../../modals/modal-uploadMultiple-product/modal-uploadMultiple-product.component\";\r\nimport { ScanDialogComponent } from \"../../modals/scan-dialog/scan-dialog.component\";\r\nimport { UploadProductDialogComponent } from \"../../modals/uploadProductDialog/uploadProductDialog.component\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\n\r\n@Component({\r\n selector: \"app-sold-in-channel\",\r\n templateUrl: \"./sold-in-channel.component.html\",\r\n styleUrls: [\"./sold-in-channel.component.scss\"],\r\n})\r\nexport class SoldInChannelComponent implements OnInit {\r\n channelOptions: Channel[];\r\n searchFilter = new ProductFilter();\r\n products: Product[];\r\n rowCount = 0;\r\n hasClickRowCount = false;\r\n guidEmpty = Constants.GuidEMpty;\r\n\r\n constructor(\r\n private http: HttpService,\r\n public dialog: MatDialog,\r\n private toastr: ToastrService,\r\n public productService: ProductService,\r\n private activateRouter: ActivatedRoute\r\n ) {\r\n }\r\n \r\n ngOnInit(): void {\r\n this.activateRouter.queryParams\r\n .subscribe(val => {\r\n if (val.ID) {\r\n this.initPageLoader(val.ID);\r\n }\r\n else {\r\n this.initPageLoader(Constants.GuidEMpty);\r\n }\r\n })\r\n }\r\n\r\n private initPageLoader(channelID: string): void {\r\n this.productService.loader(channelID)\r\n .subscribe((result) => {\r\n this.channelOptions = result.Options.Channel;\r\n this.searchFilter = result.Filter;\r\n if(result.Filter.ChannelID != Constants.GuidEMpty)\r\n {\r\n this.searchFilter.ListChannelID = [];\r\n this.searchFilter.ListChannelID.push(result.Filter.ChannelID);\r\n }\r\n \r\n this.searchFilter.PageSize = result.Filter.RowCount;\r\n this.searchFilter.Item_id = \"\";\r\n this.getProducts();\r\n });\r\n }\r\n\r\n private getProducts(): void {\r\n const payload = {\r\n ListChannelID: this.searchFilter.ListChannelID,\r\n PageNumber: this.searchFilter.PageNumber,\r\n RowCount: this.searchFilter.RowCount,\r\n text: this.searchFilter.text,\r\n Item_id: this.searchFilter.Item_id\r\n }\r\n this.productService\r\n .findAllSoldInChannel(payload)\r\n .subscribe((result) => {\r\n this.products = result.Data;\r\n this.products = this.productService.checkProductHasUploadBtn(this.products, this.channelOptions);\r\n this.products = this.productService.checkProductHasScanButton(this.products, this.channelOptions);\r\n });\r\n }\r\n\r\n //Function: SearchProduct() will search the product by name\r\n //If not found, it will search by variant code.\r\n //If still not found, it will show the whole product list\r\n public searchProduct(event: string): void {\r\n this.searchFilter.text = event;\r\n this.hasClickRowCount = false;\r\n this.getProducts();\r\n }\r\n\r\n /**\r\n * open modal detail Variant\r\n * @param index \r\n */\r\n public onOpenVariantDetail(index: number): void {\r\n const variant = this.products[index].Variants;\r\n this.dialog.open(ModalVariantComponent, {\r\n data: { variants: variant, title: this.products[index].Name },\r\n width: \"50%\",\r\n });\r\n }\r\n\r\n //Function: openScanDialog() will open the scan dialog and pass the Channel list and the filter variable\r\n //It will return the modified filter and will run the scan function that the user has selected (full or quick)\r\n public onOpenScanDialog() {\r\n let dialogFilter = JSON.parse(JSON.stringify(this.searchFilter));\r\n dialogFilter.ChannelID = Constants.GuidEMpty;\r\n const dialogRef = this.dialog.open(ScanDialogComponent, {\r\n data: {\r\n filter: dialogFilter,\r\n channelOptions: this.channelOptions,\r\n },\r\n width: \"40%\",\r\n });\r\n dialogRef.afterClosed()\r\n .pipe(filter(result => Constants.IsNotEmpty(result)))\r\n .subscribe((result: {ChannelID: string, ScanFull: boolean, UpdatedProduct: boolean, Async: boolean}) => {\r\n this.searchFilter.ChannelID = result.ChannelID;\r\n this.searchFilter.ScanFull = result.ScanFull;\r\n this.searchFilter.UpdatedProduct = result.UpdatedProduct;\r\n this.searchFilter.Async = result.Async;\r\n this.scanAllProduct();\r\n });\r\n }\r\n\r\n /**\r\n * scan all product in selected channel\r\n */\r\n private scanAllProduct() {\r\n let channel = this.productService.findChannelById(\r\n this.searchFilter.ChannelID,\r\n this.channelOptions\r\n );\r\n this.productService\r\n .scanAll(\r\n this.searchFilter.ChannelID,\r\n this.searchFilter.ScanFull,\r\n this.searchFilter.UpdatedProduct,\r\n this.searchFilter.Async\r\n )\r\n .pipe(filter((result: any) => result))\r\n .subscribe((result: any) => {\r\n if (this.searchFilter.Async) {\r\n this.toastr.warning(\"You will be notified when the scan is completed.\", \"Scan In Progress\", {toastClass: 'ngx-toastr toast-waiting'}); \r\n }\r\n else {\r\n this.productService.successToastrScanAllProduct(result, channel, !this.searchFilter.UpdatedProduct);\r\n this.initPageLoader(Constants.GuidEMpty);\r\n }\r\n });\r\n }\r\n\r\n public onScanSingleProduct(product: Product) {\r\n product.Channel = this.productService.getChannelProduct(product);\r\n let dialogFilter = JSON.parse(JSON.stringify(this.searchFilter));\r\n this.dialog\r\n .open(ScanDialogComponent, {\r\n data: {\r\n filter: dialogFilter,\r\n channelOptions: this.channelOptions,\r\n isSingleChannel: true,\r\n },\r\n width: \"40%\",\r\n })\r\n .afterClosed()\r\n .pipe(filter((result) => Constants.IsNotEmpty(result)))\r\n .subscribe((result: {ChannelID: string, ScanFull: boolean, UpdatedProduct: boolean}) => {\r\n this.searchFilter.ChannelID = result.ChannelID;\r\n const codes = this.productService.getVariantCodesProduct(product);\r\n this.scanSingleProduct(codes);\r\n });\r\n }\r\n\r\n /**\r\n * open modal upload single product to multiple channel\r\n * @param product \r\n */\r\n public onUploadToMultipleChannel(product: Product) {\r\n let productChannel = this.productService.getChannelProduct(product);\r\n product.Channel = productChannel;\r\n let unselectedChannel = this.productService.filterUnselectedChannel(\r\n product,\r\n this.channelOptions\r\n );\r\n this.dialog.open(ModalUploadMultipleProductComponent, {\r\n width: \"700px\",\r\n data: {\r\n title: `Upload - ${product.Name}`,\r\n channels: unselectedChannel,\r\n products: [product],\r\n },\r\n })\r\n .afterClosed()\r\n .pipe(filter(result => result !== \"CANCEL\"))\r\n .subscribe({\r\n next: (res) => {\r\n this.getProducts();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Opens the scan dialog and pass the Channel list and the filter variable\r\n * It will return the modified filter and will run the scan function that the user has selected (full or quick)\r\n */\r\n public onScanSelectedProduct() {\r\n let channels = this.productService.filterChannelByTypeId(this.channelOptions, [ChannelType.Tokopedia, ChannelType.Tiktok])\r\n this.searchFilter.ChannelID = Constants.GuidEMpty;\r\n let dialogFilter = JSON.parse(JSON.stringify(this.searchFilter));\r\n const dialogRef = this.dialog.open(ScanDialogComponent, {\r\n data: {\r\n filter: dialogFilter,\r\n channelOptions: channels,\r\n isSingleChannel: true,\r\n },\r\n width: \"40%\",\r\n });\r\n dialogRef\r\n .afterClosed()\r\n .pipe(filter((result) => Constants.IsNotEmpty(result)))\r\n .subscribe((result: {ChannelID: string, ScanFull: boolean, UpdatedProduct: boolean}) => {\r\n this.searchFilter.ChannelID = result.ChannelID;\r\n this.searchFilter.ScanFull = result.ScanFull;\r\n this.searchFilter.UpdatedProduct = result.UpdatedProduct;\r\n let products = this.productService.selectedProduct(this.products);\r\n let codes = this.productService.getVariantCodesProducts(products);\r\n this.scanSingleProduct(codes);\r\n });\r\n }\r\n\r\n /**\r\n * call api scan single product to single channel\r\n * @param ids\r\n */\r\n private scanSingleProduct(ids: string[]) {\r\n this.productService.scanSingle(this.searchFilter.ChannelID, ids).subscribe({\r\n next: (res) => {\r\n if (res) {\r\n this.toastr.success(\"Successfully Scan \", \"Success\");\r\n } else {\r\n let child = this.productService.findChannelById(\r\n this.searchFilter.ChannelID,\r\n this.channelOptions\r\n );\r\n this.toastr.error(\r\n `This product is not existed in ${child?.Name} `,\r\n `Error`\r\n );\r\n }\r\n this.searchFilter.ChannelID = Constants.GuidEMpty;\r\n if (res) {\r\n this.getProducts();\r\n }\r\n },\r\n error: (err) => {\r\n this.searchFilter.ChannelID = Constants.GuidEMpty;\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Get variant code product for CARD UI\r\n * @param variants\r\n * @returns\r\n */\r\n public getVariantCode(variants: any[]): string {\r\n let variantCode: string;\r\n if (variants.length > 1) {\r\n const model = variants[0].model ? variants[0].model : \"\";\r\n variantCode = model + variants[0].Code;\r\n }\r\n\r\n if (variants.length == 1) {\r\n variantCode = variants[0].Code;\r\n }\r\n return variantCode;\r\n }\r\n\r\n public onClearFilterChannel() {\r\n this.searchFilter.ChannelID = Constants.GuidEMpty;\r\n this.searchFilter.Item_id = \"\";\r\n }\r\n\r\n /**\r\n * open upload product dialog for upload multiple product to single channel\r\n */\r\n public onUploadMultipleProductSingleChannel() {\r\n this.dialog\r\n .open(UploadProductDialogComponent, {\r\n width: \"40%\",\r\n data: {\r\n item: null,\r\n selectedItemMissingChannel: this.channelOptions,\r\n },\r\n })\r\n .afterClosed()\r\n .subscribe((result: { channelID: string; categoryID: number }) => {\r\n if (result) {\r\n let channelID = result.channelID;\r\n let categoryID = result.categoryID;\r\n this.uploadMultipleProduct(channelID, categoryID);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * call api upload multiple product to single channel\r\n * @param channelID \r\n * @param categoryID \r\n */\r\n private uploadMultipleProduct(channelID: string, categoryID: number) {\r\n const selectedProducts = this.productService.selectedProduct(this.products);\r\n this.productService\r\n .uploadMultipleProduct(selectedProducts, channelID, categoryID)\r\n .subscribe((result) => {\r\n this.getProducts();\r\n const selectedChannel = this.productService.findChannelById(\r\n channelID,\r\n this.channelOptions\r\n );\r\n if (selectedProducts.length > 1) {\r\n this.toastr.success(\r\n \"Successfully uploaded \" +\r\n selectedProducts.length +\r\n \" Product to channel \" +\r\n selectedChannel?.Name,\r\n \"Success\"\r\n );\r\n } else {\r\n this.toastr.success(\r\n selectedChannel?.Name + \" Successfully Created\",\r\n \"Success\"\r\n );\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * get row count from api GetSoldInChannelRowCount\r\n */\r\n public getRowCount() {\r\n let payload = { \r\n ListChannelID: this.searchFilter.ListChannelID,\r\n text: this.searchFilter.text\r\n };\r\n this.http\r\n .post(\"/api/product/GetSoldInChannelRowCount\", payload)\r\n .subscribe((result: { Total: number }) => {\r\n this.hasClickRowCount = true;\r\n this.rowCount = result.Total;\r\n });\r\n }\r\n\r\n /**\r\n * Pagination next page\r\n */\r\n public onNextPage() {\r\n this.searchFilter.PageNumber = this.searchFilter.PageNumber + 1;\r\n this.getProducts();\r\n }\r\n\r\n /**\r\n * Pagination previous page\r\n */\r\n public onPreviousPage() {\r\n this.searchFilter.PageNumber = this.searchFilter.PageNumber - 1;\r\n this.getProducts();\r\n }\r\n\r\n public getChannelLogo(typeId: ChannelType) {\r\n return Constants.getChannelLogoByTypeId(typeId);\r\n }\r\n}\r\n","<mainpanel\r\n headerTitle=\"Sold in Channel\"\r\n (onSubmit)=\"searchProduct($event)\"\r\n description=\"SKU has been mapped between dealpos and marketplace\"\r\n>\r\n <actions>\r\n <button\r\n type=\"button\"\r\n data-cy=\"scanSoldinChannel\"\r\n class=\"btn btn-outline-secondary shadow rounded\"\r\n *ngIf=\"!productService.hasSelection(products)\"\r\n (click)=\"onOpenScanDialog()\"\r\n >\r\n <i class=\"fas fa-lg fa-crosshairs\"></i> Scan Channel\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n data-cy=\"scanInPos\"\r\n *ngIf=\"productService.hasSelection(products)\"\r\n class=\"btn btn-outline-secondary shadow rounded me-2\"\r\n (click)=\"onScanSelectedProduct()\"\r\n >\r\n <i class=\"fas fa-lg fa-crosshairs\"></i> Scan Selected Product ({{\r\n productService.selectedProduct(products).length\r\n }})\r\n </button>\r\n \r\n <button\r\n class=\"btn btn-light shadow rounded ms-2\"\r\n *ngIf=\"productService.hasSelection(products)\"\r\n (click)=\"onUploadMultipleProductSingleChannel()\" >\r\n <i class=\"fa fa-upload\" aria-hidden=\"true\"></i> Upload Bulk\r\n </button>\r\n </actions>\r\n <filters>\r\n <div class=\"d-flex\">\r\n <div container>\r\n <div>\r\n <h6>Channel</h6>\r\n <ng-select \r\n class=\"center-text\" \r\n [clearable]=\"true\" \r\n [multiple]=\"true\"\r\n [items]=\"channelOptions\" bindLabel=\"Name\" name=\"channelid\"\r\n bindValue=\"ID\" placeholder=\"Select Channel\"\r\n [ngModel]=\"searchFilter.ListChannelID\" \r\n (ngModelChange)=\"searchFilter.ListChannelID = $event\"\r\n (clear)=\"onClearFilterChannel()\">\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n <span class=\"me-2\">\r\n <img style=\"width: 18px;\" [src]=\"getChannelLogo(item.TypeID)\" alt=\"\">\r\n </span>\r\n {{item.Name}} \r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n <div *ngIf=\"searchFilter.ListChannelID != undefined\">\r\n <h6>Item ID</h6>\r\n <input type=\"text\" name=\"Item_id\" id=\"Item_id\" [(ngModel)]=\"searchFilter.Item_id\" class=\"form-control\">\r\n </div>\r\n </div>\r\n </div>\r\n </filters>\r\n <content>\r\n <div class=\"container-fluid\">\r\n <div class=\"row mt-8\">\r\n <div\r\n class=\"col-12 col-md-6 col-xl-4 px-3 my-3\"\r\n *ngFor=\"let product of products; let i = index\"\r\n >\r\n <app-product-card\r\n [productId]=\"product?.ID\"\r\n [title]=\"product?.Name\"\r\n [image]=\"product?.ThumbnailUrl\"\r\n [description]=\"product?.Variants?.length > 1 ? product?.Variants?.length + ' Variants' : null\"\r\n [channels]=\"productService.getChannelProduct(product)\"\r\n [code]=\"getVariantCode(product?.Variants)\"\r\n [showCheckBox]=\"product?.hasScan\"\r\n [scanButton]=\"true\"\r\n [uploadButton]=\"product?.hasUpload\"\r\n [imageForZoom]=\"product?.ImageUrl\"\r\n (onUpload)=\"onUploadToMultipleChannel(product)\"\r\n (onDescEvent)=\"onOpenVariantDetail(i)\"\r\n (onScan)=\"onScanSingleProduct(product)\"\r\n (onCheckBoxChange)=\"product['selected'] = $event\">\r\n </app-product-card>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"products?.length\">\r\n <div class=\"col-12\">\r\n <app-custom-paginator\r\n [filter]=\"searchFilter\"\r\n [totaldata]=\"products?.length\"\r\n [paginationTotal]=\"rowCount\"\r\n [hasClicked]=\"hasClickRowCount\"\r\n (total)=\"getRowCount()\"\r\n (next)=\"onNextPage()\"\r\n (previous)=\"onPreviousPage()\"\r\n ></app-custom-paginator>\r\n </div>\r\n </div>\r\n </div>\r\n </content>\r\n</mainpanel>\r\n","import { Component, Input } from '@angular/core';\r\nimport { Constants } from 'src/app/model/Constants';\r\nimport { ChannelType } from 'src/app/model/enums/ChannelType.enum';\r\nimport { BiggerPictureService } from 'src/app/services/biggerPicture.service';\r\n\r\nexport interface DuplicateSkuChannel {\r\n Map: {ChannelItemID: string, Name: string, URL: string}[],\r\n Name: string,\r\n TypeID: ChannelType\r\n}\r\n\r\n@Component({\r\n selector: 'app-duplicate-product-card',\r\n templateUrl: './duplicate-product-card.component.html',\r\n styleUrls: ['./duplicate-product-card.component.scss']\r\n})\r\nexport class DuplicateProductCardComponent {\r\n @Input() image: string;\r\n @Input() imageForZoom: string;\r\n @Input() title: string;\r\n @Input() code: string;\r\n @Input() channels: DuplicateSkuChannel[];\r\n\r\n constructor(\r\n private biggerPictureService: BiggerPictureService\r\n ) {\r\n }\r\n\r\n public getChannelLogo(typeId: ChannelType) {\r\n return Constants.getChannelLogoByTypeId(typeId);\r\n }\r\n\r\n public onZoomImage(ev: PointerEvent) {\r\n this.biggerPictureService.openBiggerPicture(ev, this.imageForZoom);\r\n }\r\n\r\n\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-body py-6\">\r\n <div class=\"row\">\r\n <div class=\"col-4\">\r\n <div class=\"productUpload_defaultSize me-2 image-upload\">\r\n <div class=\"imgContainer\">\r\n <ng-container *ngIf=\"image; else elsePic\">\r\n <img [src]=\"image\" class=\"rounded imgUpload float-left cursor-pointer\" (click)=\"onZoomImage($event)\"/>\r\n </ng-container>\r\n\r\n <ng-template #elsePic><img class=\"rounded float-left imgUpload\"\r\n src=\"//res.cloudinary.com/pos/image/upload/w_110/POS/Images/Icon/products_thumb.png\" />\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-8 d-inline-block justify-content-between gx-0\" style=\"padding-left: 0px\">\r\n <h4 class=\"itemTitle\">\r\n {{ title }}\r\n </h4>\r\n <div *ngIf=\"code\" class=\"description\">\r\n <i class=\"fa fa-barcode me-2\"></i> <span>{{ code }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-footer\" style=\"padding-left: 0px; padding-right: 0px;\">\r\n <div class=\"accordion accordion-flush\" id=\"accordionParent\">\r\n <div class=\"accordion-item border-start-0 border-end-0\" *ngFor=\"let channel of channels; let i = index\"\r\n [ngClass]=\"{'border-bottom-0': ((channels.length - 1) == i)}\">\r\n <h2 class=\"accordion-header\" [id]=\"'heading'+i+code\">\r\n <button style=\"height: 40px;\" class=\"accordion-button collapsed\" type=\"button\" data-bs-toggle=\"collapse\"\r\n [attr.data-bs-target]=\"'#collapse'+i+code\" aria-expanded=\"true\" [attr.aria-controls]=\"'#collapse'+i+code\">\r\n <div class=\"d-flex align-items-center justify-content-start w-100\">\r\n <img class=\"channel-logo\" [src]=\"getChannelLogo(channel.TypeID)\" alt=\"\">\r\n <span class=\"fs-4 ps-4 text-ellipsis\" style=\"max-width: 13vw;\"\r\n [matTooltip]=\"channel?.Name?.length > 30 ? channel.Name : ''\"\r\n >{{channel.Name}}</span>\r\n <span class=\"ps-2\">\r\n <h4>- {{channel.Map.length}} Listing</h4>\r\n </span>\r\n </div>\r\n </button>\r\n </h2>\r\n <div [id]=\"'collapse'+i+code\" class=\"accordion-collapse collapse\" [attr.aria-labelledby]=\"'heading'+i+code\"\r\n data-bs-parent=\"#accordionParent\">\r\n <div class=\"accordion-body\" style=\"padding-top: 0px; padding-bottom: 0px;\">\r\n <ng-container *ngFor=\"let productDuplicate of channel.Map; let i = index\">\r\n <div class=\"d-flex justify-content-between align-items-center py-4\"\r\n [ngClass]=\"{'border-bottom': i !== (channel?.Map.length - 1)}\">\r\n <div class=\"text-ellipsis\">\r\n {{productDuplicate.Name}}\r\n </div>\r\n <div>\r\n <a [href]=\"productDuplicate.URL\" target=\"_blank\" class=\"text-secondary\">\r\n <i class=\"fa fa-external-link-alt\"></i>\r\n </a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DuplicateProductCardComponent } from './duplicate-product-card.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MatTooltipModule\r\n ],\r\n declarations: [DuplicateProductCardComponent],\r\n exports: [\r\n DuplicateProductCardComponent\r\n ]\r\n})\r\nexport class DuplicateProductCardModule { }\r\n","import { AfterContentInit, Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport { Channel } from \"src/app/model/core/Channel\";\r\nimport { Constants } from \"src/app/model/Constants\";\r\nimport { BiggerPictureService } from \"src/app/services/biggerPicture.service\";\r\n\r\n@Component({\r\n selector: \"app-product-card\",\r\n templateUrl: \"./product-card.component.html\",\r\n styleUrls: [\"./product-card.component.scss\"],\r\n})\r\nexport class ProductCardComponent implements AfterContentInit {\r\n @Input() productId: string;\r\n\r\n @Input() uploadButton = false;\r\n @Input() scanButton = false;\r\n @Input() showCheckBox = false;\r\n @Input() downloadButton = false;\r\n\r\n @Input() image: string;\r\n @Input() title: string;\r\n @Input() code: string;\r\n @Input() description: string;\r\n @Input() channels: Channel[];\r\n @Input() check: boolean;\r\n @Input() imageForZoom: string;\r\n @Input() hasZoom = true;\r\n @Input() showRedirectIcon = true;\r\n\r\n @Output(\"onUpload\") onUploadEvent: EventEmitter<void>;\r\n @Output(\"onScan\") onScanEvent: EventEmitter<void>;\r\n @Output(\"onCheckBoxChange\") checkBoxChange: EventEmitter<boolean>;\r\n @Output(\"onDescEvent\") onDescEvent: EventEmitter<void>;\r\n @Output(\"onDownload\") onDownloadEvent: EventEmitter<void>;\r\n public redirectUrl: string;\r\n\r\n constructor(\r\n private biggerPictureService: BiggerPictureService\r\n ) {\r\n this.onUploadEvent = new EventEmitter();\r\n this.onScanEvent = new EventEmitter();\r\n this.checkBoxChange = new EventEmitter();\r\n this.onDescEvent = new EventEmitter();\r\n this.onDownloadEvent = new EventEmitter();\r\n }\r\n \r\n ngAfterContentInit(): void {\r\n this.initRedirectUrl();\r\n }\r\n\r\n private initRedirectUrl() {\r\n let storageData = localStorage.getItem('Authorization')\r\n let hostName = JSON.parse(storageData)?.Host;\r\n this.redirectUrl = `https://${hostName}/menu/Products/Catalog/Products/Info?ID=${this.productId}` \r\n }\r\n\r\n public onUpload() {\r\n this.onUploadEvent.emit();\r\n }\r\n\r\n public onScan() {\r\n this.onScanEvent.emit();\r\n }\r\n\r\n public onCheck(value: boolean) {\r\n this.checkBoxChange.emit(value);\r\n }\r\n\r\n public onEventDesc() {\r\n this.onDescEvent.emit();\r\n }\r\n\r\n public onDownload() {\r\n this.onDownloadEvent.emit();\r\n }\r\n\r\n public getChannelLogo(channel: Channel): string {\r\n return Constants.getChannelLogoByTypeId(channel.TypeID);\r\n }\r\n\r\n public openBiggerPicture(ev: PointerEvent) {\r\n this.biggerPictureService.openBiggerPicture(ev, this.imageForZoom);\r\n }\r\n \r\n}\r\n","<div class=\"card\" style=\"margin-bottom: 0px\">\r\n <div class=\"card-body py-6\">\r\n <div class=\"row\">\r\n <div class=\"col-4\">\r\n <div class=\"productUpload_defaultSize me-2 image-upload\">\r\n <div class=\"imgContainer\">\r\n <ng-container *ngIf=\"image; else elsePic\">\r\n <img class=\"rounded imgUpload float-left\" [src]=\"image\" alt=\"\" (click)=\"openBiggerPicture($event)\" />\r\n </ng-container>\r\n\r\n <ng-template #elsePic><img class=\"rounded float-left imgUpload\"\r\n src=\"//res.cloudinary.com/pos/image/upload/w_110/POS/Images/Icon/products_thumb.png\" />\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-7 d-inline-block justify-content-between gx-0\" style=\"padding-left: 0px\">\r\n <h4 (click)=\"onEventDesc()\" class=\"itemTitle cursor-pointer\">\r\n {{ title }}\r\n </h4>\r\n <div *ngIf=\"code\" class=\"description cursor-pointer\">\r\n <i class=\"fa fa-barcode me-2\"></i> <span>{{ code }}</span>\r\n <ng-container *ngIf=\"code !== 'SKU not assigned' && showRedirectIcon\">\r\n <span class=\"ms-2\">\r\n <a [href]=\"redirectUrl\" target=\"_blank\"\r\n style=\"color: #0976b4;\" ><i class=\"fas fa-external-link-alt\"></i></a>\r\n </span>\r\n </ng-container>\r\n </div>\r\n <div (click)=\"onEventDesc()\" *ngIf=\"description\" class=\"description cursor-pointer\">\r\n <i class=\"fa fa-tag me-2\"></i> <span>{{ description }}</span>\r\n </div>\r\n </div>\r\n <div class=\"col-1 gx-0 d-flex justify-content-center\">\r\n <div class=\"text-end\">\r\n <div *ngIf=\"showCheckBox\" class=\"text-end gx-0\">\r\n <input type=\"checkbox\" (change)=\"onCheck($event.target.checked)\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-footer d-flex justify-content-between py-5 bg-footer align-items-center\"\r\n style=\"border-top: 0.1px solid rgb(220 220 220)\">\r\n <div>\r\n <button *ngIf=\"downloadButton\" class=\"fs-6 btn btn-light btn-sm me-3\" (click)=\"onDownload()\">\r\n <i class=\"fa fa-download\" aria-hidden=\"true\"></i> Download\r\n </button>\r\n <button *ngIf=\"uploadButton\" class=\"fs-6 btn btn-light btn-sm me-3\" (click)=\"onUpload()\">\r\n <i class=\"fa fa-upload\" aria-hidden=\"true\"></i> Upload\r\n </button>\r\n <button *ngIf=\"scanButton\" class=\"fs-6 btn btn-light btn-sm\" (click)=\"onScan()\">\r\n <i class=\"fa fa-spinner\"></i> Scan\r\n </button>\r\n </div>\r\n <div>\r\n <ng-container *ngIf=\"channels.length < 4; else DROPDOWN\">\r\n <ng-container *ngFor=\"let channel of channels; let i = index\">\r\n <a href=\"{{ channel.Url }}\" target=\"_blank\">\r\n <img class=\"img-logo\" [ngClass]=\"{ 'me-3': i != channels.length - 1 }\" [src]=\"getChannelLogo(channel)\"\r\n alt=\"\" [matTooltip]=\"channel.Title ? channel.Title : channel.Name\" />\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #DROPDOWN>\r\n <div class=\"dropdown\">\r\n <button class=\"btn fs-6 btn-sm btn-light dropdown-toggle\" type=\"button\" id=\"dropdownMenuButton1\"\r\n data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\r\n {{ channels.length }} CHANNELS\r\n </button>\r\n <ul class=\"dropdown-menu\">\r\n <li *ngFor=\"let channel of channels; let i = index\">\r\n <div class=\"dropdown-item py-2\" style=\"cursor: pointer\">\r\n <div [ngClass]=\"{\r\n 'border-bottom pb-2': i != channels.length - 1\r\n }\">\r\n <a [href]=\"channel.Url\" target=\"_blank\">\r\n <img class=\"img-logo\" [src]=\"getChannelLogo(channel)\" />\r\n <span class=\"ms-4\">{{ channel.Title }}</span>\r\n </a>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ProductCardComponent } from './product-card.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n MatTooltipModule\r\n ],\r\n declarations: [ProductCardComponent],\r\n exports: [\r\n ProductCardComponent\r\n ]\r\n})\r\nexport class ProductCardModule { }\r\n"],"names":["ScanDialogComponent","filter","map","tap","Constants","i0","_r14","channel_r21","channel_r22","NotInChannelComponent","constructor","http","dialog","toastr","productService","paginationService","biggerPictureService","ngOnInit","initPageLoader","iniData","initHostName","storageData","localStorage","getItem","hostName","JSON","parse","Host","fetchDataEndpoint","notChannelAPI","loader$","post","loaderAPI","pipe","loader","filterSearch","Filter","resetToFirstPage","data$","products","product","Variants","variant","Available","sortChannel","NotAvailable","assignLogoChannel","channels","channel","Img","getChannelLogoByTypeId","TypeID","searchProduct","text","scanAllProduct","findChannelById","ChannelID","Options","Channel","scanAll","ScanFull","UpdatedProduct","Async","subscribe","res","success","successToastrScanAllProduct","openScanDialog","dialogFilter","stringify","GuidEMpty","dialogRef","open","data","channelOptions","width","afterClosed","result","IsNotEmpty","getChannelLogoById","typeId","logo","uploadProductToSingleChannel","channelId","categoryId","uploadMultipleProduct","Name","getRowCount","hideCount","rowCount$","rowCountAPI","onNextPage","onLastPage","next","response","PageNumber","getAllData","Count","onZoomImage","ev","imageUrl","openBiggerPicture","ngOnDestroy","destroy","selectors","decls","vars","consts","template"],"sourceRoot":"webpack:///"}
|