marketplacepos 2.2.9 → 2.3.0
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/126.cdcda87dcc3da677.js +1 -0
- package/Marketplace/170.f2067bfd5ecb2a86.js +1 -0
- package/Marketplace/22.738096d8317ec65b.js +1 -0
- package/Marketplace/231.adb8d56e26375a9c.js +1 -0
- package/Marketplace/285.17f6cbef78acd327.js +1 -0
- package/Marketplace/3rdpartylicenses.txt +490 -0
- package/Marketplace/46.8652d978a45ce5ab.js +1 -0
- package/Marketplace/472.519965afdb7a160d.js +1 -0
- package/Marketplace/512.eddb4675a9016de6.js +1 -0
- package/Marketplace/518.aff0cf9876e146d2.js +1 -0
- package/Marketplace/585.c93552ac67f4550c.js +1 -0
- package/Marketplace/6.fc79ecc0c0a33462.js +1 -0
- package/Marketplace/616.507588c0a5d7b9e1.js +1 -0
- package/Marketplace/717.62ca448a74adc1c2.js +1 -0
- package/Marketplace/739.82b92600f9519019.js +1 -0
- package/Marketplace/763.42fa4c0d665819d3.js +1 -0
- package/Marketplace/767.0ce42314dea8dfea.js +1 -0
- package/Marketplace/796.3be8ad424aad7864.js +1 -0
- package/Marketplace/common.34d3e7dcd2b85c7a.js +1 -0
- package/Marketplace/index.html +22 -23
- package/Marketplace/main.6481a1f35d927562.js +1 -0
- package/Marketplace/polyfills.8d85b0533e3f867a.js +1 -0
- package/Marketplace/runtime.ba5c4b46d4312c5e.js +1 -0
- package/Marketplace/scripts.512baec01df5d79f.js +1 -0
- package/Marketplace/styles.d8aa52b2e9cd02ae.css +39 -0
- package/package.json +1 -1
- package/Marketplace/common.js +0 -46
- 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_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 -6836
- 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-node_modules_angular_material_fesm2020_slid-566c11.js +0 -722
- package/Marketplace/default-src_app_menu_nav-tab_nav-tab_component_ts-node_modules_angular_material_fesm2020_slid-566c11.js.map +0 -1
- package/Marketplace/default-src_app_sharing-module_datepicker_datepicker_component_ts.js +0 -19951
- package/Marketplace/default-src_app_sharing-module_datepicker_datepicker_component_ts.js.map +0 -1
- package/Marketplace/main.js +0 -617
- 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 -2634
- package/Marketplace/scripts.js.map +0 -1
- package/Marketplace/src_app_login_login_module_ts.js +0 -538
- package/Marketplace/src_app_login_login_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_ReportOrder_report_module_ts.js +0 -1060
- package/Marketplace/src_app_menu_ReportOrder_report_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_channels_channels_module_ts.js +0 -9710
- package/Marketplace/src_app_menu_channels_channels_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_inventory_inventory_module_ts.js +0 -1069
- package/Marketplace/src_app_menu_inventory_inventory_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_logistic_logistic_module_ts.js +0 -232
- package/Marketplace/src_app_menu_logistic_logistic_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_menu_module_ts.js +0 -38973
- package/Marketplace/src_app_menu_menu_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_notification_notification_module_ts.js +0 -192
- 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 -1997
- 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 -2449
- package/Marketplace/src_app_menu_orders_orders_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_price_price_module_ts.js +0 -1713
- package/Marketplace/src_app_menu_price_price_module_ts.js.map +0 -1
- package/Marketplace/src_app_menu_products_product_module_ts.js +0 -2196
- package/Marketplace/src_app_menu_products_product_module_ts.js.map +0 -1
- package/Marketplace/styles.css +0 -30612
- package/Marketplace/styles.css.map +0 -1
- package/Marketplace/vendor.js +0 -71753
- 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/nav-tab/nav-tab.component.ts","./src/app/menu/nav-tab/nav-tab.component.html","./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/model/ProductFilter.ts","./src/app/model/enums/ChannelLogo.enum.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { Component, Input, NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'nav-tab',\r\n templateUrl: './nav-tab.component.html',\r\n styleUrls: ['./nav-tab.component.scss']\r\n})\r\nexport class NavTabComponent {\r\n @Input() Tabs :any[];\r\n \r\n}\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n RouterModule\r\n ],\r\n declarations: [\r\n NavTabComponent\r\n ],\r\n exports: [\r\n NavTabComponent\r\n ]\r\n})\r\nexport class NavTabModule { }\r\n","<ul class=\"nav navbar-nav navbar-left nav-tab-arrow\">\r\n <li routerLinkActive=\"active\" class=\"nav-item me-6\" *ngFor=\"let tabMenu of Tabs\">\r\n <a class=\"nav-link nav-link-arrow mb-0\" routerLink=\"{{tabMenu.Url}}\">\r\n {{tabMenu.Title}}\r\n </a>\r\n </li>\r\n</ul>","import { Component, OnInit } from '@angular/core';\r\nimport { HttpService } from '../../../services/http.service';\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 implements OnInit {\r\n Channel : any;\r\n filter = {\r\n ChannelID : ''\r\n }\r\n data:any;\r\n constructor(private http: HttpService) { \r\n this.Load();\r\n }\r\n\r\n ngOnInit(): void {\r\n \r\n }\r\n\r\n Load() : void{\r\n this.http.post<any>('/api/product/Load',{}).subscribe(result=>{\r\n this.filter.ChannelID = null;\r\n this.Channel = result.Options.Channel;\r\n this.Get();\r\n })\r\n }\r\n\r\n SearchProduct(event:any){\r\n\r\n }\r\n\r\n Get() : any{\r\n this.http.post<any>('/api/product/GetDuplicateSkuInChannel',this.filter).subscribe(result=>{\r\n this.data = result.Data;\r\n \r\n })\r\n }\r\n}\r\n","<mainpanel [Title]=\"'Duplicate Sku' + ' ('+ (this.data ? this.data.length : '0') + ')'\" (onSubmit)=\"Get();\" textButton=\" Search\">\r\n <actions>\r\n </actions>\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]=\"Channel\" bindLabel=\"Name\" name=\"channelid\" bindValue=\"ID\" placeholder=\"Select Channel\"\r\n [(ngModel)]=\"filter.ChannelID\">\r\n </ng-select>\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\">\r\n <div class=\"col-md-4\" *ngFor=\"let m of data\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-bottom\">\r\n <div class=\"row\">\r\n <div class=\"col-md-1 pb-2\">\r\n <img *ngIf=\"m.TypeID == 1\" src=\"https://res.cloudinary.com/pos/image/upload/v1598262221/icons/marketplace_icons/tokopedia.png\" />\r\n <img *ngIf=\"m.TypeID == 0\" src=\"https://res.cloudinary.com/pos/image/upload/v1598262220/icons/marketplace_icons/shopee.png\" />\r\n </div>\r\n\r\n <div class=\"col-10 text-center\">\r\n <h4>{{m?.SKU}} ({{m?.Child?.length}} Alies)</h4>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"row g-0 p-5\">\r\n <div class=\"col-md-12\" *ngFor=\"let i of m.Child\">\r\n <table class=\"table\">\r\n <tr>\r\n <td style=\"width:100px\">\r\n <img class=\"img-thumbnail\" src=\"{{i.ImageURL}}\"/> \r\n </td>\r\n <td class=\"text-start\">\r\n <a href=\"{{i.URL}}\" target=\"_blank\">{{i.Name}}</a>\r\n <div>Rp. {{i.Price | number}}</div>\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </content>\r\n</mainpanel>\r\n","import { Component, OnInit } from \"@angular/core\";\r\nimport { HttpService } from \"../../../services/http.service\";\r\nimport { Data } from \"../../../model/Data\";\r\nimport { ToastrService } from \"ngx-toastr\";\r\nimport { ProductFilter } from \"src/app/model/ProductFilter\";\r\nimport { ScanDialogComponent } from \"../scan-dialog/scan-dialog.component\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { UploadProductDialogComponent } from \"../dialog/uploadProductDialog/uploadProductDialog.component\";\r\nimport { ModalVariantComponent } from \"./modal-variant/modal-variant.component\";\r\nimport { ChannelLogo } from \"src/app/model/enums/ChannelLogo.enum\";\r\nimport { Channel } from \"src/app/model/Channel\";\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 implements OnInit {\r\n Channel: any;\r\n filter = new ProductFilter();\r\n data: Data[];\r\n total: number = 0;\r\n loading: boolean = false;\r\n pageData: any;\r\n variant: any;\r\n dialogName: string;\r\n syncupdatefull: boolean = false;\r\n paginationTotal: number;\r\n paginationPageSize: number;\r\n selectedItem: any; //item selected to be uploaded\r\n TokopediaCategory: [];\r\n ShopeeCategory: [];\r\n options: [];\r\n OptionVisible = false;\r\n channelLogo = ChannelLogo;\r\n\r\n constructor(\r\n private http: HttpService,\r\n private toastr: ToastrService,\r\n public dialog: MatDialog\r\n ) {\r\n this.Load();\r\n }\r\n\r\n ngOnInit(): void {}\r\n\r\n /**\r\n * Get the channel list, filter options and calls GetProducts()\r\n */\r\n Load(): void {\r\n this.http.post<any>(\"/api/product/Load\", {}).subscribe((result) => {\r\n this.Channel = result.Options.Channel;\r\n this.filter.PageNumber = result.Filter.PageNumber;\r\n this.filter.RowCount = result.Filter.RowCount;\r\n this.filter.ChannelID = null;\r\n this.filter.sync = true;\r\n this.TokopediaCategory = result.Options.Tokopedia;\r\n this.ShopeeCategory = result.Options.Shopee;\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 GetProducts(): void {\r\n var params = {\r\n PageNumber: this.filter.PageNumber,\r\n RowCount: this.filter.RowCount,\r\n };\r\n this.http.post<any>(\"/api/product/GetInPOS\", params).subscribe((result) => {\r\n this.data = result.Data;\r\n this.total = result.Total;\r\n this.paginationTotal =\r\n result.Total == null ? this.filter.RowCount : result.Total.toString();\r\n this.paginationPageSize =\r\n this.filter.RowCount > this.paginationTotal\r\n ? this.paginationTotal\r\n : this.filter.RowCount;\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 SyncFast(): void {\r\n if (this.filter.ChannelID == null) {\r\n this.toastr.error(\"Please Select Channel\", \"Error\");\r\n return;\r\n }\r\n\r\n let params = {\r\n ID: this.filter.ChannelID,\r\n ScanFull: this.filter.ScanFull,\r\n };\r\n\r\n this.http\r\n .post<any>(\"/api/product/ScanOptimized\", params)\r\n .subscribe((res) => {\r\n this.GetProducts();\r\n let productNotInPOS = res.NotInPOS ? res.NotInPOS.Product : 0;\r\n let productInChannel = res.InChannel ? res.InChannel.Product : 0;\r\n this.toastr.success(\r\n productNotInPOS +\r\n productInChannel +\r\n \" found in \" +\r\n this.getChannelName(this.filter.ChannelID) +\r\n \"</br> ( \" +\r\n productInChannel +\r\n \" In POS + \" +\r\n productNotInPOS +\r\n \" Not In POS )\",\r\n \"Scan Complete!\",\r\n {\r\n timeOut: 5000,\r\n enableHtml: true,\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Will call SyncUpdateMap\r\n * @deprecated Not used anymore\r\n */\r\n SyncProductMap(): void {\r\n if (this.filter.ChannelID == null) {\r\n this.toastr.error(\"Please Select Channel\", \"Error\");\r\n return;\r\n }\r\n\r\n let params = {\r\n ID: this.filter.ChannelID,\r\n };\r\n\r\n this.http\r\n .post<any>(\"/api/product/SyncUpdateMap\", params)\r\n .subscribe((result) => {\r\n this.data = result.Data;\r\n })\r\n .add(() => {\r\n // always gets called\r\n this.GetProducts();\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 DialogVariant(index: number): void {\r\n this.dialogName = this.data[index].Name;\r\n this.variant = this.data[index].Variants;\r\n this.dialog.open(ModalVariantComponent, {\r\n data: {\r\n title: this.data[index].Name,\r\n variants: this.data[index].Variants,\r\n },\r\n width: \"40%\",\r\n });\r\n }\r\n\r\n /**\r\n * Change to next page\r\n * @param pageEvent The event from paginator\r\n */\r\n changePage(pageEvent): void {\r\n this.filter.PageNumber = pageEvent.pageIndex + 1;\r\n this.GetProducts();\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 SearchProduct(event): void {\r\n let params = {\r\n Text: event,\r\n };\r\n this.http.post<any>(\"/api/product/GetInPOS\", params).subscribe((result) => {\r\n this.data = result.Data;\r\n });\r\n }\r\n\r\n /**\r\n * Sets the selectedItem and open the upload modal\r\n * Will filter the Channel so it only shows the Channel the product isn't sold on\r\n * @param item The selected item\r\n */\r\n openUploadModal(item) {\r\n let selectedItemMissingChannel;\r\n this.selectedItem = item;\r\n if (item.Channel.length == 0) {\r\n selectedItemMissingChannel = this.Channel;\r\n } else {\r\n //source: https://stackoverflow.com/questions/49814733/getting-difference-between-2-arrays-of-objects-in-javascript\r\n selectedItemMissingChannel = this.Channel.filter(\r\n (x) => !item.Channel.some((y) => x.ID == y.ChannelID)\r\n );\r\n }\r\n this.dialog\r\n .open(UploadProductDialogComponent, {\r\n width: \"600px\",\r\n data: {\r\n item: item,\r\n selectedItemMissingChannel: selectedItemMissingChannel,\r\n },\r\n })\r\n .afterClosed()\r\n .subscribe((result: { channelID: string; categoryID: string }) => {\r\n if (result) {\r\n let channelID = result.channelID;\r\n let categoryID = result.categoryID;\r\n let itemID: any = [];\r\n itemID.push(this.selectedItem.ID);\r\n this.uploadProduct(channelID, itemID, categoryID);\r\n }\r\n });\r\n }\r\n\r\n openUploadBulkModal() {\r\n this.dialog\r\n .open(UploadProductDialogComponent, {\r\n width: \"350px\",\r\n data: {\r\n item: null,\r\n selectedItemMissingChannel: this.Channel,\r\n },\r\n })\r\n .afterClosed()\r\n .subscribe((result: { channelID: string; categoryID: string }) => {\r\n if (result) {\r\n let channelID = result.channelID;\r\n let categoryID = result.categoryID;\r\n\r\n var listSelected = this.getSelected();\r\n if (listSelected.length > 0) {\r\n var listIds: any = [];\r\n listSelected.forEach((m) => listIds.push(m.ID));\r\n\r\n this.uploadProduct(channelID, listIds, categoryID);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Uploads the product to marketplace\r\n * After calling the API, it will refresh the products list\r\n * @param channelID Selected channel ID\r\n * @param itemID The selected item's ID\r\n */\r\n uploadProduct(channelID: any, itemID: [], CategoryID: any) {\r\n let params = {\r\n ChannelID: channelID,\r\n Products: itemID,\r\n CategoryID: CategoryID ? CategoryID : 0,\r\n };\r\n this.http\r\n .post(\"/api/product/UploadToMarketplace\", params)\r\n .subscribe((result) => {\r\n this.GetProducts();\r\n let selectedItem = this.Channel.find((x) => x.ID == channelID);\r\n\r\n if (itemID.length > 1) {\r\n this.toastr.success(\r\n \"Successfully uploaded \" +\r\n itemID.length +\r\n \" Product to channel \" +\r\n selectedItem.Name,\r\n \"Success\"\r\n );\r\n } else {\r\n this.toastr.success(\r\n this.selectedItem.Name + \" Successfully Created\",\r\n \"Success\"\r\n );\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Looks through all variants and make a list of all the unique channels\r\n * Then it will return a sorted channel list\r\n * @param variants The list of Variants\r\n * @returns A list of variants\r\n */\r\n sortVariant(variants) {\r\n var list = [];\r\n\r\n for (let x of variants) {\r\n if (x.Channel == null) {\r\n continue;\r\n } else {\r\n for (let ch of x.Channel) {\r\n if (list.filter((y) => y.ChannelID == ch.ChannelID).length == 0) {\r\n list.push(ch);\r\n }\r\n }\r\n }\r\n }\r\n return this.sortChannel(list);\r\n }\r\n\r\n /**\r\n * Sorts the list in decending order based on its TypeID\r\n * It is used so that tokopedia link will be printed first\r\n * Source : https://stackoverflow.com/questions/48403154/orderby-with-ngfor-array\r\n * @param list The list that is going to be sorted\r\n * @returns The sorted list\r\n */\r\n sortChannel(list) {\r\n return list.sort((a, b) =>\r\n a[\"TypeID\"] < b[\"TypeID\"] ? 1 : a[\"TypeID\"] === b[\"TypeID\"] ? 0 : -1\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 openScanDialog() {\r\n const dialogRef = this.dialog.open(ScanDialogComponent, {\r\n data: {\r\n filter: this.filter,\r\n Channel: this.Channel,\r\n },\r\n width: \"30%\",\r\n });\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (result != null) {\r\n this.filter = result.filter;\r\n\r\n if (this.filter.sync) {\r\n this.SyncFast();\r\n } else if (!this.filter.sync) {\r\n this.SyncFast();\r\n }\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 openScanSingleDialog() {\r\n const dialogRef = this.dialog.open(ScanDialogComponent, {\r\n data: {\r\n filter: this.filter,\r\n Channel: this.Channel.filter((m) => m.TypeID == 1),\r\n },\r\n width: \"30%\",\r\n });\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (result != null) {\r\n this.ScanSingle();\r\n }\r\n });\r\n }\r\n\r\n ScanSingle(): void {\r\n if (this.filter.ChannelID == null) {\r\n this.toastr.error(\"Please Select Channel\", \"Error\");\r\n return;\r\n }\r\n var listIds: any = [];\r\n var listSelected = this.getSelected();\r\n if (listSelected.length > 0) {\r\n for (const p of listSelected) {\r\n for (let v of p.Variants) {\r\n listIds.push(v.Code);\r\n }\r\n }\r\n }\r\n\r\n let params = {\r\n ID: this.filter.ChannelID,\r\n SKU: listIds,\r\n };\r\n\r\n this.http.post<any>(\"/api/product/ScanSingle\", params).subscribe((res) => {\r\n this.GetProducts();\r\n if (res) {\r\n this.toastr.success(\"Successfully Scan \", \"Success\");\r\n } else {\r\n this.toastr.error(\"This product is not existed in Tokopedia \", \"Error\");\r\n }\r\n });\r\n }\r\n\r\n getSelected(): any[] {\r\n if (this.data) {\r\n return this.data.filter((m) => m.selected);\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n hasSelection(): boolean {\r\n if (this.data) {\r\n return this.getSelected().length > 0;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the Channel's name based on the ID given as input\r\n * @param ID The Channel's ID\r\n * @returns The channel's name\r\n */\r\n getChannelName(ID: string) {\r\n let channel = this.Channel.find((x) => x.ID == ID);\r\n return channel.Name;\r\n }\r\n\r\n public getChannelLogo(channel: Channel): string {\r\n let logo;\r\n switch (channel.TypeID) {\r\n case 0:\r\n logo = ChannelLogo.SHOOPE;\r\n break;\r\n case 1:\r\n logo = ChannelLogo.TOKOPEDIA;\r\n break;\r\n case 2:\r\n logo = ChannelLogo.WOOCOMMERCE;\r\n break;\r\n case 5:\r\n logo = ChannelLogo.SHOOPE;\r\n break;\r\n case 6:\r\n logo = ChannelLogo.TIKTOK;\r\n break;\r\n }\r\n return logo;\r\n }\r\n}\r\n","<mainpanel [Title]=\"'In POS' + ' ('+ (this.total) + ')'\" hideSearchDropdown=\"true\" (onSubmit)=\"SearchProduct($event)\"\r\n hideSearchDropdown=\"false\">\r\n <actions>\r\n\r\n <button type=\"button\" data-cy=\"scanInPos\" class=\"btn btn-outline-secondary shadow rounded me-2\"\r\n (click)=\"openScanDialog()\"><i class=\"fas fa-lg fa-crosshairs\"></i>\r\n Scan Channel\r\n </button>\r\n\r\n <button type=\"button\" data-cy=\"scanInPos\" [hidden]=\"!hasSelection()\"\r\n class=\"btn btn-outline-secondary shadow rounded me-2\" (click)=\"openScanSingleDialog()\"><i\r\n class=\"fas fa-lg fa-crosshairs\"></i>\r\n Scan Single Channel\r\n </button>\r\n\r\n\r\n <button class=\"btn btn-light shadow rounded ms-2\" [hidden]=\"!hasSelection()\" (click)=openUploadBulkModal()>\r\n <i class=\"fa fa-upload\" aria-hidden=\"true\"></i> Upload Bulk</button>\r\n\r\n </actions>\r\n\r\n <content>\r\n <div class=\"container-fluid\">\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 item of data; let i = index\">\r\n <div class=\"card product\">\r\n <div class=\"row h-100 g-0 px-6\">\r\n <div class=\"col-auto pe-xl-0\">\r\n <img *ngIf=\"item?.ImageUrl\" class=\"border rounded-lg mx-auto text-center mt-5\"\r\n style=\"width: 82px;; \" src=\"{{item?.ThumbnailUrl}}\" />\r\n <img *ngIf=\"!item?.ImageUrl\" class=\" text-center border rounded-lg mx-auto mt-5\"\r\n style=\"width: 82px;;\"\r\n src=\"//res.cloudinary.com/pos/image/upload/w_80/POS/Images/Icon/products_thumb.png\" />\r\n </div>\r\n <div class=\"col mt-5 px-xl-0 px-0\">\r\n <div class=\"row align-items-center justify-content-start\">\r\n <div class=\"col-auto pt-0 pe-4 max-w-xl\">\r\n <h4 class=\"text-start itemTitle pointer\" (click)=\"DialogVariant(i)\"\r\n [ngClass]=\"{'no-title': 'item?.Variants.length <= 1'}\">{{item?.Name}}\r\n </h4>\r\n </div>\r\n <div class=\"col text-end gx-0\" *ngIf=\"item?.Channel.length < this.Channel.length\">\r\n <input type=\"checkbox\" [(ngModel)]=\"item.selected\" />\r\n </div>\r\n <ng-container *ngIf=\"item?.Variants.length > 1\">\r\n <div class=\"col-auto gx-0\">\r\n <h4><span class=\"badge rounded-pill bg-warning m-2 text-dark\">\r\n {{item?.Variants.length}}</span></h4>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div *ngIf=\"item?.Variants.length > 1\">\r\n <span class=\"d-block default\">{{item?.Variants[0].Model}}</span>\r\n <span class=\"d-block default\">{{item?.Variants[0].Code}}</span>\r\n </div>\r\n\r\n <div *ngIf=\"item?.Variants.length == 1\">\r\n <span class=\"d-none default\">{{item?.Variants[0].Model}}</span>\r\n <span class=\"d-block default\">{{item?.Variants[0].Code}}</span>\r\n <br>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row mt-5 bottom-buttons\" [ngClass]=\"{'justify-content-between': (item?.Channel.length < this.Channel.length), \r\n 'justify-content-end' : (item?.Channel.length == this.Channel.length) }\">\r\n\r\n <ng-container *ngIf=\"item?.Channel.length < this.Channel.length\">\r\n <div class=\"col-auto mb-upload\">\r\n <button class=\"btn btn-light btn-sm\" (click)=openUploadModal(item)><i\r\n class=\"fa fa-upload\" aria-hidden=\"true\"></i> Upload</button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item?.Channel.length > 0\">\r\n <div class=\"row me-0 me-md-5 justify-content-end align-items-center gx-0 w-auto\">\r\n <ng-container *ngFor=\"let c of sortVariant(item?.Variants); let i = index\">\r\n <div class=\"col-auto px-1 px-md-3 mb-1 pb-3\" *ngIf=\"i < 4\">\r\n <a href=\"{{c.Url}}\" target=\"_blank\"\r\n data-placement=\"top\" matTooltip=\"{{c.Title}}\">\r\n <img [src]=\"getChannelLogo(c)\" />\r\n </a>\r\n </div>\r\n </ng-container>\r\n <div class=\"col-auto px-1 px-md-3 mb-1 pb-3\" *ngIf=\"sortVariant(item?.Variants).length > 3\">\r\n <div class=\"btn-group\">\r\n <i class=\"fas fa-ellipsis-h fs-4 cursor-pointer\" id=\"moreMenu\" data-bs-toggle=\"dropdown\"></i>\r\n <ul class=\"dropdown-menu\" aria-labelledby=\"moreMenu\">\r\n <li *ngFor=\"let moreChannel of sortVariant(item?.Variants); let i = index\">\r\n <div class=\"dropdown-item py-2\" style=\"cursor: pointer\">\r\n <div [ngClass]=\"{'border-bottom pb-2': i != (sortVariant(item?.Variants).length - 1)}\">\r\n <a href=\"{{moreChannel.Url}}\" target=\"_blank\">\r\n <img class=\"img-logo\" [src]=\"getChannelLogo(moreChannel)\" />\r\n <span class=\"ms-4\">{{moreChannel.Title}}</span>\r\n </a>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\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 class=\"row mt-2 justify-content-end\">\r\n <div class=\"col-md-12 \">\r\n <mat-paginator [length]=\"paginationTotal\" [pageSize]=\"paginationPageSize\"\r\n [pageIndex]=\"filter?.PageNumber == 0 ? 0 : filter?.PageNumber - 1\" (page)=\"changePage($event)\">\r\n </mat-paginator>\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 { Data } from '../../../model/Data';\r\nimport { ProductFilter } from 'src/app/model/ProductFilter';\r\nimport { ScanDialogComponent } from '../scan-dialog/scan-dialog.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { UploadProductDialogComponent } from '../dialog/uploadProductDialog/uploadProductDialog.component';\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 {\r\n\r\n Channel: any;\r\n filter = new ProductFilter;\r\n data: Data[];\r\n temp: Data[];\r\n loading: boolean = false;\r\n pageData: any;\r\n\r\n selectedItem: any;\r\n\r\n constructor(private http: HttpService, public dialog: MatDialog, private toastr: ToastrService) {\r\n\r\n this.Load();\r\n this.GetProducts();\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n /**\r\n * /**\r\n * Get the channel list, filter options and calls GetProducts()\r\n */\r\n Load(): void {\r\n this.http.post<any>('/api/product/Load', {}).subscribe(result => {\r\n this.Channel = result.Options.Channel;\r\n this.filter = result.Filter;\r\n this.filter.ChannelID = null;\r\n this.filter.sync = true;\r\n })\r\n }\r\n\r\n /**\r\n * Get products from the server\r\n */\r\n GetProducts(): void {\r\n this.http.post<any>('/api/product/GetNotInChannel', { sync: false }).subscribe(result => {\r\n this.data = result.Data;\r\n this.temp = result.Data;\r\n })\r\n }\r\n\r\n /**\r\n * Search box functionality\r\n * @param event Event from search bar\r\n */\r\n SearchProduct(event): void {\r\n if (event != \"\") {\r\n this.data = this.temp.filter(ex => ex.Name.toLowerCase().indexOf(event.toLowerCase()) !== -1);\r\n } else {\r\n this.data = this.temp;\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Scans the products from marketplace\r\n */\r\n SyncProduct(): void {\r\n let params = {\r\n ID: this.filter.ChannelID\r\n }\r\n this.http.post<any>('/api/product/ScanNotinChannel', params).subscribe(res => {\r\n let NotInChannel = res.NotInChannel ? res.NotInChannel.Product : 0;\r\n let productInChannel = res.InChannel ? res.InChannel.Product : 0;\r\n this.toastr.success((NotInChannel + productInChannel) + \" found in \" + this.getChannelName(this.filter.ChannelID) + \"</br> ( \" + productInChannel + \" In POS + \" + NotInChannel + \" Not In Channel )\", \"Scan Complete!\",\r\n {\r\n timeOut: 5000,\r\n enableHtml: true,\r\n });\r\n\r\n }).add(() => {\r\n // always gets called\r\n this.GetProducts();\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 openScanDialog() {\r\n const dialogRef = this.dialog.open(ScanDialogComponent, {\r\n data: {\r\n filter: this.filter,\r\n Channel: this.Channel,\r\n hiddenRadioButton: true\r\n },\r\n width: '30%'\r\n });\r\n dialogRef.afterClosed().subscribe(result => {\r\n if (result != null) {\r\n this.filter = result.filter;\r\n\r\n this.SyncProduct();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Not used\r\n * @param item \r\n */\r\n filterChannel(item) {\r\n let channelItem = item.Channel ? item.Channel : [];\r\n let index: number;\r\n let channels = this.Channel.filter(val => {\r\n index = channelItem.findIndex(x => x.ChannelID === val.ID);\r\n return index !== -1;\r\n });\r\n return channels;\r\n }\r\n\r\n /**\r\n * Opens the upload modal and sets the selected item\r\n * @param item The selected item\r\n */\r\n openUploadModal(item) {\r\n this.selectedItem = item;\r\n let channels = this.filterChannel(item)\r\n this.dialog.open(UploadProductDialogComponent, {\r\n width: '350px',\r\n data:{\r\n item: item,\r\n selectedItemMissingChannel: channels,\r\n }\r\n })\r\n .afterClosed()\r\n .subscribe((result: {channelID: string}) => {\r\n if (result) {\r\n let channelID = result.channelID;\r\n let itemID = this.selectedItem.ID;\r\n this.uploadProduct(channelID, itemID);\r\n }\r\n })\r\n }\r\n\r\n /**\r\n * Uploads the selected products\r\n * @param channelID The channel's ID\r\n * @param itemID The item's ID\r\n */\r\n uploadProduct(channelID, itemID) {\r\n let params = {\r\n ChannelID: channelID,\r\n Products: [itemID]\r\n }\r\n this.http.post<any>('/api/product/UploadToMarketplace', params).subscribe(result => {\r\n this.GetProducts();\r\n this.toastr.success(\"Successfully uploaded \" + this.selectedItem.Name + \" to \" + this.getChannelName(channelID), \"Success\");\r\n })\r\n }\r\n\r\n /**\r\n * Returns the Channel's name based on the ID given as input\r\n * @param ID The Channel's ID\r\n * @returns The channel's name\r\n */\r\n getChannelName(ID: string) {\r\n let channel = this.Channel.find(x => x.ID == ID);\r\n return channel.Name;\r\n }\r\n\r\n}\r\n","<mainpanel [Title]=\"'Not in Channel' + ' ('+ (this.data ? this.data.length : '0') + ')'\"\r\n (onSubmit)=\"SearchProduct($event)\" hideSearchDropdown=\"false\">\r\n <actions>\r\n <button data-cy=\"scanNotinChannel\" type=\"button\" class=\"btn btn-outline-secondary shadow rounded\"\r\n (click)=\"openScanDialog()\"><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\r\n <table class=\"table border-bottom\">\r\n <thead class=\"thead-light sticky-top-thead\">\r\n <tr>\r\n <th class=\"ms-5\">Product</th>\r\n <th>Category</th>\r\n <th>SKU</th>\r\n <th>Variant</th>\r\n <th>Missing Channel</th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody *ngFor=\"let item of data\">\r\n\r\n <tr>\r\n <td class=\"text-start\">\r\n <img *ngIf=\"item?.ImageUrl; else elsePic\" class=\"border rounded\"\r\n style=\"width: 40px;\" src=\"{{item?.ImageUrl}}\" />\r\n <ng-template #elsePic><img class=\"border rounded w-img\"\r\n src=\"//res.cloudinary.com/pos/image/upload/w_40/POS/Images/Icon/products_thumb.png\" />\r\n </ng-template>\r\n <h4 class=\"ms-5 d-inline fw-normal\">{{item?.Name}}</h4>\r\n </td>\r\n <td>{{item?.Category}}</td>\r\n <td>{{item?.Code}}</td>\r\n <td>\r\n <ul>\r\n <li *ngFor=\"let v of item.Variants;\">{{v?.Model}}</li>\r\n </ul>\r\n </td>\r\n\r\n <td>\r\n <ul>\r\n <li *ngFor=\"let ch of item.Channel\">{{ch?.Title}}</li>\r\n </ul>\r\n </td>\r\n\r\n <td>\r\n <button class=\"btn btn-link btn-sm\" (click)='openUploadModal(item)'><i\r\n class=\"fa fa-upload\" aria-hidden=\"true\"></i> Upload</button>\r\n\r\n <!-- <ul class=\"list-unstyled text-center\">\r\n <li *ngFor=\"let c of this.Channel\" class=\"my-5\">\r\n <button class=\"btn btn-success btn-sm\" (click)=\"uploadProduct(c.ID,item.ID)\">Upload Product to {{c.Name}}</button>\r\n </li>\r\n </ul> -->\r\n <!-- <a (click) = \"uploadProduct(c.ChannelID,item.ID)\" title=\"{{c.Title}}\" target=\"_blank\" *ngIf=\"c.TypeID == 1\">\r\n <img style=\"width: 30px;margin-right: 5px;\" src=\"https://res.cloudinary.com/pos/image/upload/v1592384747/icons/Marketplace%20logo/tokopedia-logo-5340B636F6-seeklogo.com.png\"/>\r\n </a>\r\n <a (click) = \"uploadProduct(c.ChannelID,item.ID)\" title=\"{{c.Title}}\" target=\"_blank\" *ngIf=\"c.TypeID == 0\" >\r\n <img style=\"width: 30px;margin-left: 5px;\" src=\"https://res.cloudinary.com/pos/image/upload/v1592384747/icons/Marketplace%20logo/shopee-logo-DD5CAE562A-seeklogo.com.png\"/>\r\n </a> -->\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Upload Modal -->\r\n <!-- <div class=\"modal fade\" id=\"uploadModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"uploadModalLabel\"\r\n aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Upload Product to Marketplace</h5>\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Product Name : {{this.selectedItem?.Name}}</p>\r\n <label for=\"selectChannel\">Upload to :</label>\r\n <ng-select [clearable]=\"false\" [items]=\"selectedItemChannel\" bindLabel=\"Title\"\r\n name=\"uploadChannel\" bindValue=\"ChannelID\" placeholder=\"Channel\"\r\n [(ngModel)]=\"this.selectedItemChannel\"></ng-select>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">Close</button>\r\n <button class=\"btn btn-success\"\r\n (click)=\"uploadSelectedProduct();closeUploadModal()\">Upload</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Modal -->\r\n <!-- <div class=\"modal fade\" id=\"exampleModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"exampleModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\">Scan Marketplace</h5>\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div>\r\n <ng-select [clearable]=\"false\" [items]=\"Channel\" bindLabel=\"Name\" name=\"channelid\" bindValue=\"ID\" placeholder=\"Channel\"\r\n [(ngModel)]=\"filter.ChannelID\">\r\n </ng-select>\r\n </div>\r\n <div class=\"d-flex mt-3\">\r\n <div class=\"rad-btn\" \r\n data-toggle=\"tooltip\"\r\n title=\"Scan product include inventory and price detail\">\r\n <input type=\"radio\" id=\"full\" [(ngModel)]=\"filter.sync\" class=\"btn btn-primary\" [value]=\"true\"/>\r\n <label for=\"full\">Full</label>\r\n </div>\r\n \r\n <div class=\"rad-btn\" data-toggle=\"tooltip\"\r\n title=\"Scan product without inventory and price detail\">\r\n <input type=\"radio\" id=\"notfull\" [(ngModel)]=\"filter.sync\" class=\"btn btn-primary\" [value]=\"false\"/>\r\n <label for=\"notfull\">Quick</label> \r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"SyncProduct()\">Scan</button>\r\n </div>\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 { ToastrService } from \"ngx-toastr\";\r\nimport { ScanDialogComponent } from \"../scan-dialog/scan-dialog.component\";\r\nimport { ProductFilter } from \"../../../model/ProductFilter\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { ModalDownloadComponent } from \"./modal-download/modal-download.component\";\r\nimport { ModalInstructionComponent } from \"./modal-instruction/modal-instruction.component\";\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 Channel: any;\r\n filter = new ProductFilter();\r\n data: any[];\r\n originalData: any[];\r\n loading: boolean = false;\r\n pageData: any;\r\n\r\n ch: any;\r\n x: any;\r\n\r\n syncupdatefull: boolean = false;\r\n\r\n dialogName: any;\r\n dialogType: any;\r\n channelName: any;\r\n variant: any;\r\n \r\n constructor(\r\n private http: HttpService,\r\n private toastr: ToastrService,\r\n public dialog: MatDialog\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.Load();\r\n }\r\n\r\n /**\r\n * Calls the Load API\r\n * Used for initialization\r\n */\r\n Load(): void {\r\n this.http.post<any>(\"/api/product/Load\", {}).subscribe((result) => {\r\n this.Channel = result.Options.Channel;\r\n this.filter = result.Filter;\r\n this.filter.ChannelID = null;\r\n this.filter.sync = true;\r\n this.GetProducts();\r\n });\r\n }\r\n\r\n /**\r\n * Get products not in POS\r\n */\r\n GetProducts(): void {\r\n let params = {\r\n ID: this.filter.ChannelID,\r\n };\r\n this.http\r\n .post<any>(\"/api/product/GetProductChannelNotPOS\", params)\r\n .subscribe((result) => {\r\n this.data = result.Data;\r\n for (let p of this.data) {\r\n p.fullTitle = false;\r\n if (p.Variant.length > 0) {\r\n let filter = p.Variant.find((x) => x.ChannelVariationSKU == null);\r\n if (filter == undefined) {\r\n p.upload = true;\r\n } else {\r\n p.upload = false;\r\n }\r\n } else {\r\n if (p.ChannelItemSKU != null) {\r\n p.upload = true;\r\n } else {\r\n p.upload = false;\r\n }\r\n }\r\n }\r\n this.originalData = result.Data;\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 SearchProduct(event): void {\r\n var filteredData = this.originalData;\r\n\r\n if (this.filter.ChannelID != null) {\r\n filteredData = filteredData.filter(\r\n (item) => item.ChannelID == this.filter.ChannelID\r\n );\r\n }\r\n\r\n if (event != null && event != \"\") {\r\n filteredData = filteredData.filter(\r\n (item) =>\r\n item.Name !== null &&\r\n item.Name.toLowerCase().includes(event.toLowerCase())\r\n );\r\n if (filteredData.length < 1) {\r\n filteredData = this.originalData.filter(\r\n (item) =>\r\n item.ChannelItemSKU !== null && item.ChannelItemSKU.includes(event)\r\n );\r\n }\r\n }\r\n this.data = filteredData;\r\n }\r\n\r\n /**\r\n * Get the Channel of an item\r\n * @param item Selected Item\r\n */\r\n GetProductChannel(item) {\r\n this.ch = this.Channel.find((name) => name.Name == item.Channel);\r\n if (!this.ch) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n /**\r\n * Calls ScanOptimized to scan channel\r\n */\r\n Refresh() {\r\n if (this.filter.ChannelID === null || this.filter.mode == null) {\r\n alert(\"Please select channel\");\r\n return;\r\n }\r\n let params = {\r\n ID: this.filter.ChannelID,\r\n mode: this.filter.mode,\r\n ScanFull : this.filter.ScanFull\r\n };\r\n this.http.post<any>(\"/api/product/ScanOptimized\", params).subscribe((res) => {\r\n this.GetProducts();\r\n let productNotInPOS = res.NotInPOS ? res.NotInPOS.Product : 0;\r\n this.toastr.success(\r\n productNotInPOS +\r\n \" found in \" +\r\n this.getChannelName(this.filter.ChannelID) +\r\n \"</br> ( \" +\r\n productNotInPOS +\r\n \" Not In POS )\",\r\n \"Scan Complete!\",\r\n {\r\n timeOut: 5000,\r\n enableHtml: true,\r\n }\r\n );\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 openScanDialog() {\r\n const dialogRef = this.dialog.open(ScanDialogComponent, {\r\n data: {\r\n filter: this.filter,\r\n Channel: this.Channel,\r\n notInPOS: true,\r\n },\r\n width: \"30%\",\r\n });\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (result != null) {\r\n this.filter = result.filter;\r\n\r\n this.Refresh();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Get all selected products\r\n */\r\n getSelected(): any[] {\r\n if (this.data) {\r\n return this.data.filter((m) => m.selected);\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Checks if product is selected or not\r\n */\r\n hasSelection(): boolean {\r\n if (this.data) {\r\n return this.getSelected().length > 0;\r\n } else {\r\n return false;\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 RetrieveAllData(downloadType = 0): void {\r\n let listSelected: any[];\r\n\r\n if (downloadType == 0) {\r\n listSelected = this.data;\r\n } else if (downloadType == 1) {\r\n listSelected = this.getSelected();\r\n }\r\n\r\n if (listSelected.length > 0) {\r\n let listIds: any[] = [];\r\n listSelected.forEach((m) => listIds.push(m));\r\n this.http\r\n .post(\"/api/product/DownloadMultipleProductFromChannel\", listIds)\r\n .subscribe((result) => {\r\n this.GetProducts();\r\n this.toastr.success(\"Retrieved Product successfully!\", \"Success\");\r\n });\r\n }\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 RetrieveData(info: any): void {\r\n if (\r\n !confirm(\r\n \"Are you sure you want to Retrieve product '\" +\r\n info.Name +\r\n \"' from '\" +\r\n info.Channel +\r\n \"' to POS?\"\r\n )\r\n )\r\n return;\r\n\r\n let param = {\r\n ChannelItemID: info.ChannelItemID,\r\n ChannelID: info.ChannelID,\r\n };\r\n\r\n this.http\r\n .post(\"/api/product/DownloadProductFromChannel\", param)\r\n .subscribe((result) => {\r\n this.GetProducts();\r\n this.toastr.success(\"Retrieved Product successfully!\", \"Success\");\r\n });\r\n }\r\n\r\n /**\r\n * Return the Channel's name based on the ID given as input\r\n * @param ID Channel ID\r\n */\r\n getChannelName(ID: string) {\r\n let channel = this.Channel.find((x) => x.ID == ID);\r\n return channel.Name;\r\n }\r\n\r\n /**\r\n * Opens the instruction Modal\r\n * @param item Selected item\r\n */\r\n openInstruction(item): void {\r\n this.dialogName = item.Name;\r\n this.GetProductChannel(item);\r\n this.dialogType = this.ch.TypeID;\r\n\r\n this.dialog.open(ModalInstructionComponent, {\r\n data: {\r\n type: this.dialogType,\r\n name: this.dialogName\r\n },\r\n width: \"30%\"\r\n });\r\n }\r\n\r\n /**\r\n * Opens the download Modal\r\n */\r\n openDownloadModal(): void {\r\n const dialogRef = this.dialog.open(ModalDownloadComponent, {\r\n data: {\r\n hasSelection: this.hasSelection(),\r\n },\r\n width: \"30%\",\r\n });\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (result != null) {\r\n this.RetrieveAllData(result);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Toggles showing the item's full name in the UI\r\n * @param item The selected Item\r\n */\r\n showFullTitle(item) {\r\n item.fullTitle = !item.fullTitle;\r\n }\r\n}\r\n","<mainpanel [Title]=\"\r\n 'Not in POS' +\r\n ' (' +\r\n (this.originalData ? this.originalData.length : '0') +\r\n ')'\r\n \" (onSubmit)=\"SearchProduct($event)\" textButton=\" Search\">\r\n <actions>\r\n <button type=\"button\" data-cy=\"scanNotInPos\" class=\"btn btn-outline-secondary shadow rounded\"\r\n (click)=\"openScanDialog()\">\r\n <i class=\"fas fa-lg fa-crosshairs\"></i> Scan Channel\r\n </button>\r\n\r\n <button type=\"button\" class=\"btn btn-success shadow-sm rounded ms-3\" (click)=\"openDownloadModal()\">\r\n <i class=\"fa fa-download\"></i>\r\n Download\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 class=\"center-text\" [clearable]=\"true\" [items]=\"Channel\" bindLabel=\"Name\" name=\"channelid\"\r\n bindValue=\"ID\" placeholder=\"Select Channel\" [(ngModel)]=\"filter.ChannelID\">\r\n </ng-select>\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 item of data; let i = index\">\r\n <div class=\"card product\">\r\n <div class=\"row h-100 g-0 px-6\">\r\n <div class=\"col-auto pe-xl-0\">\r\n <img *ngIf=\"item?.Image\" class=\"border rounded-lg mx-auto text-center mt-5\"\r\n style=\"width: 80px; max-height: 80px\" src=\"{{ item?.Image }}\" />\r\n <img *ngIf=\"!item?.Image\" class=\"text-center border rounded-lg mx-auto mt-5\"\r\n style=\"width: 80px; max-height: 80px\"\r\n src=\"//res.cloudinary.com/pos/image/upload/w_80/POS/Images/Icon/products_thumb.png\" />\r\n </div>\r\n <div class=\"col mt-5 px-xl-0\">\r\n <div class=\"row align-items-center justify-content-start\">\r\n <div class=\"col-auto pt-0 pe-4 max-w-xl ms-3\">\r\n <h4 class=\"text-start\" (click)=\"showFullTitle(item)\" [ngClass]=\"{ itemTitle: !item.fullTitle }\"\r\n [innerHTML]=\"item?.Name\"></h4>\r\n </div>\r\n\r\n <div class=\"col text-end gx-0\" *ngIf=\"item.upload\">\r\n <input type=\"checkbox\" [(ngModel)]=\"item.selected\" />\r\n </div>\r\n </div>\r\n <div class=\"row mb-auto\">\r\n <div class=\"col-12 mt-5\">\r\n <ng-container *ngIf=\"item.Variant.length < 1\">\r\n <div class=\"ps-3 my-3 table-responsive\">\r\n <table class=\"table table-bordered\">\r\n <tbody>\r\n <tr>\r\n <td class=\"text-larger\" [ngClass]=\"{\r\n 'border-0': item.ChannelItemSKU == null\r\n }\">\r\n <ng-container *ngIf=\"item.ChannelItemSKU != null\">\r\n {{ item.ChannelItemSKU }}\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"item.Variant != null\">\r\n <div class=\"ps-3 my-3 table-responsive\">\r\n <table class=\"table table-bordered\">\r\n <tbody>\r\n <tr *ngFor=\"let v of item.Variant\">\r\n <td [ngClass]=\"{ 'border-0': v.Name == null }\">\r\n <ng-container *ngIf=\"\r\n v.Name != null && item.Variant.length > 1\r\n \">\r\n {{ v.Name }}\r\n </ng-container>\r\n </td>\r\n <td class=\"text-larger mx-auto\" [ngClass]=\"{\r\n 'border-0': v.ChannelVariationSKU == null\r\n }\">\r\n <ng-container *ngIf=\"v.ChannelVariationSKU != null\">\r\n {{ v.ChannelVariationSKU }}\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row mt-5 justify-content-between bottom-buttons\">\r\n <div class=\"col-auto mb-upload\">\r\n <button class=\"btn btn-light btn-sm\" *ngIf=\"item.upload\" (click)=\"RetrieveData(item)\">\r\n <i class=\"fa fa-download\" aria-hidden=\"true\"></i> Download\r\n </button>\r\n\r\n <ng-template #cantUpload>\r\n <button class=\"btn text-danger bg-lightpink btn-sm\" (click)=\"openInstruction(item)\">\r\n <i class=\"fas fa-barcode\" aria-hidden=\"true\"></i> No SKU\r\n </button>\r\n </ng-template>\r\n </div>\r\n\r\n <div class=\"row me-0 me-md-5 justify-content-end w-auto gx-0\">\r\n <ng-container *ngIf=\"GetProductChannel(item)\">\r\n <div class=\"col-auto px-1 px-md-3 mb-1 pb-3\">\r\n <a *ngIf=\"this.ch.TypeID == 0\"\r\n href=\"{{ item?.Variant.length > 0 ? item?.Variant[0]?.URL : item.Url }}\" target=\"_blank\">\r\n <img\r\n src=\"https://res.cloudinary.com/pos/image/upload/v1598262220/icons/marketplace_icons/shopee.png\" />\r\n </a>\r\n\r\n <a *ngIf=\"this.ch.TypeID == 1\"\r\n href=\"{{ item?.Variant.length > 0 ? item?.Variant[0]?.URL : item.Url }}\" target=\"_blank\">\r\n <img\r\n src=\"https://res.cloudinary.com/pos/image/upload/v1598262221/icons/marketplace_icons/tokopedia.png\" />\r\n </a>\r\n <a *ngIf=\"this.ch.TypeID == 2\"\r\n href=\"{{ item?.Variant.length > 0 ? item?.Variant[0]?.URL : item.Url }}\" target=\"_blank\">\r\n <img\r\n src=\"https://res.cloudinary.com/pos/image/upload/w_50/v1632447439/icons/WooCommerce/woocommerce-icon.webp\" />\r\n </a>\r\n\r\n <a *ngIf=\"this.ch.TypeID == 6\"\r\n href=\"{{ item?.Variant.length > 0 ? item?.Variant[0]?.URL : item.Url }}\" target=\"_blank\">\r\n <img\r\n src=\"https://res.cloudinary.com/pos/image/upload/w_30/v1645761611/icons/Marketplace%20logo/tiktok.png\" />\r\n </a>\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>\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: \"in-pos\",\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\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 ],\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, OnInit } from '@angular/core';\r\n\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 implements OnInit {\r\n productTabs : any = [\r\n { Title : 'In POS' , Url : '/menu/products/in-pos' },\r\n { Title : 'Not in POS' , Url : '/menu/products/not-in-pos'},\r\n { Title : 'Sold in Channel' , Url : '/menu/products/sold-in-channel'},\r\n { Title : 'Not in Channel' , Url : '/menu/products/not-in-channel'},\r\n { Title : 'Duplicate SKU' , Url : '/menu/products/duplicate-sku'}\r\n ];\r\n constructor() { \r\n \r\n }\r\n ngOnInit(): void {\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 { Router } from \"@angular/router\";\r\nimport { Data } from \"../../../model/Data\";\r\nimport { ScanDialogComponent } from \"../scan-dialog/scan-dialog.component\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { ProductFilter } from \"src/app/model/ProductFilter\";\r\nimport { ToastrService } from \"ngx-toastr\";\r\nimport { ModalVariantListComponent } from \"./modal-variant-list/modal-variant-list.component\";\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 Channel: any;\r\n filter = new ProductFilter();\r\n data: Data[];\r\n temp: Data[];\r\n loading: boolean = false;\r\n pageData: any;\r\n\r\n variant: any;\r\n syncupdatefull: boolean = false;\r\n dialogName: string;\r\n\r\n constructor(\r\n private http: HttpService,\r\n public dialog: MatDialog,\r\n private toastr: ToastrService\r\n ) {\r\n this.Load();\r\n this.GetProducts();\r\n }\r\n\r\n ngOnInit(): void {}\r\n\r\n Load(): void {\r\n this.http.post<any>(\"/api/product/Load\", {}).subscribe((result) => {\r\n this.Channel = result.Options.Channel;\r\n this.filter = result.Filter;\r\n this.filter.ChannelID = null;\r\n this.filter.sync = false;\r\n this.filter.mode = 1;\r\n });\r\n }\r\n\r\n GetProducts(): void {\r\n this.http\r\n .post<any>(\"/api/product/GetSoldInChannel\", {})\r\n .subscribe((result) => {\r\n this.data = result.Data;\r\n this.temp = result.Data;\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 SearchProduct(event): void {\r\n if (event != \"\") {\r\n let result = this.temp.filter(\r\n (ex) => ex.Name.toLowerCase().indexOf(event.toLowerCase()) !== -1\r\n );\r\n if (result.length == 0) {\r\n for (let item of this.temp) {\r\n var u = item.Variants.filter(\r\n (v) => v.Code.toLowerCase().indexOf(event.toLowerCase()) !== -1\r\n );\r\n if (u.length > 0) {\r\n result.push(item);\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n this.data = result;\r\n } else {\r\n this.data = this.temp;\r\n }\r\n }\r\n\r\n SyncProduct(): void {\r\n if (this.filter.ChannelID === null || this.filter.mode == null) {\r\n alert(\"Please select channel\");\r\n return;\r\n }\r\n let params = {\r\n ID: this.filter.ChannelID,\r\n ScanFull: this.filter.ScanFull,\r\n };\r\n\r\n this.http\r\n .post<any>(\"/api/product/ScanOptimized\", params)\r\n .subscribe((res) => {\r\n let productNotInPOS = res.NotInPOS ? res.NotInPOS.Product : 0;\r\n let productInChannel = res.InChannel ? res.InChannel.Product : 0;\r\n this.toastr.success(\r\n productNotInPOS +\r\n productInChannel +\r\n \" found in \" +\r\n this.getChannelName(this.filter.ChannelID) +\r\n \"</br> ( \" +\r\n productInChannel +\r\n \" In POS + \" +\r\n productNotInPOS +\r\n \" Not In POS )\",\r\n \"Scan Complete!\",\r\n {\r\n timeOut: 5000,\r\n enableHtml: true,\r\n }\r\n );\r\n })\r\n .add(() => {\r\n // always gets called\r\n this.GetProducts();\r\n });\r\n }\r\n\r\n SyncProductMap(): void {\r\n let params = {\r\n ID: this.filter.ChannelID,\r\n };\r\n this.http\r\n .post<any>(\"/api/product/SyncUpdateMap\", params)\r\n .subscribe((result) => {\r\n this.data = result.Data;\r\n })\r\n .add(() => {\r\n // always gets called\r\n this.GetProducts();\r\n });\r\n }\r\n\r\n DialogVariant(index: number): void {\r\n this.variant = this.data[index].Variants;\r\n this.dialogName = this.data[index].Name;\r\n this.dialog.open(ModalVariantListComponent, {\r\n data: { variants: this.variant, title: this.data[index].Name },\r\n width: \"40%\"\r\n });\r\n }\r\n\r\n //Function: sortVariant() will look through all variants and make a list of all the unique channels\r\n //Then it will return a sorted channel list\r\n sortVariant(variants) {\r\n var list = [];\r\n\r\n for (let x of variants) {\r\n if (x.Channel == null) {\r\n continue;\r\n } else {\r\n for (let ch of x.Channel) {\r\n if (list.filter((y) => y.ChannelID == ch.ChannelID).length == 0) {\r\n list.push(ch);\r\n }\r\n }\r\n }\r\n }\r\n return this.sortChannel(list);\r\n }\r\n\r\n //Function: sortChannel(list) will sort the list in decending order based on its TypeID\r\n //It is used so that tokopedia link will be printed first\r\n //Source : https://stackoverflow.com/questions/48403154/orderby-with-ngfor-array\r\n sortChannel(list) {\r\n return list.sort((a, b) =>\r\n a[\"TypeID\"] < b[\"TypeID\"] ? 1 : a[\"TypeID\"] === b[\"TypeID\"] ? 0 : -1\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 openScanDialog() {\r\n const dialogRef = this.dialog.open(ScanDialogComponent, {\r\n data: {\r\n filter: this.filter,\r\n Channel: this.Channel,\r\n },\r\n width: \"40%\",\r\n });\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (result != null) {\r\n this.filter = result.filter;\r\n this.SyncProduct();\r\n }\r\n });\r\n }\r\n\r\n //Function: getChannelName() will return the Channel's name based on the ID given as input\r\n getChannelName(ID: string) {\r\n let channel = this.Channel.find((x) => x.ID == ID);\r\n return channel.Name;\r\n }\r\n}\r\n","<mainpanel [Title]=\"'Sold in Channel' + ' ('+ (this.data ? this.data.length : '0') + ')'\"\r\n (onSubmit)=\"SearchProduct($event)\" hideSearchDropdown=\"false\">\r\n <actions>\r\n <button type=\"button\" data-cy=\"scanSoldinChannel\" class=\"btn btn-outline-secondary shadow rounded\"\r\n (click)=\"openScanDialog()\">\r\n <i class=\"fas fa-lg fa-crosshairs\"></i> Scan Channel\r\n </button>\r\n </actions>\r\n <content>\r\n <div class=\"container-fluid\">\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 item of data; let i = index\">\r\n <div class=\"card product\">\r\n <div class=\"row h-100 gx-0 px-6\">\r\n <div class=\"col-auto pe-xl-0\">\r\n <img *ngIf=\"item?.ImageUrl\" class=\"border rounded-lg mx-auto text-center mt-5\"\r\n style=\"width: 80px;max-height:80px; \" src=\"{{item?.ImageUrl}}\" />\r\n <img *ngIf=\"!item?.ImageUrl\" class=\" text-center border rounded-lg mx-auto mt-5\"\r\n style=\"width: 80px;max-height:80px;\"\r\n src=\"//res.cloudinary.com/pos/image/upload/w_80/POS/Images/Icon/products_thumb.png\" />\r\n </div>\r\n <div class=\"col mt-5 px-xl-0\">\r\n <div class=\"row align-items-center justify-content-start\">\r\n <div class=\"col-auto pt-0 pe-4 max-w-xl\">\r\n <a class=\"text-start\" role=\"button\" (click)=\"DialogVariant(i)\">\r\n <h4 class=\"itemTitle\"\r\n [ngClass]=\"{'no-title': 'item?.Variants.length <= 1'}\">{{item?.Name}}\r\n </h4>\r\n </a>\r\n </div>\r\n <div class=\"col-auto px-0\">\r\n <h4><span *ngIf=\"item?.Variants.length > 1\"\r\n class=\"badge badge-pill bg-warning m-2\">\r\n {{item?.Variants.length}}</span></h4>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div *ngIf=\"item?.Variants.length > 1\">\r\n <span class=\"d-block default\">{{item?.Variants[0].Model}}</span>\r\n <span class=\"d-block default\">{{item?.Variants[0].Code}}</span>\r\n </div>\r\n <div *ngIf=\"item?.Variants.length == 1\">\r\n <span class=\"d-none default\">{{item?.Variants[0].Model}}</span>\r\n <span class=\"d-block default\">{{item?.Variants[0].Code}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"row bottom-buttons me-0 me-md-5 justify-content-end\">\r\n <ng-container *ngFor=\"let c of sortVariant(item?.Variants); let i = index\">\r\n\r\n <div class=\"col-auto px-1 px-md-3 mt-5 mb-1 pb-3\">\r\n <a *ngIf=\"c.TypeID == 0 || c.TypeID == 5\" href=\"{{c.Url}}\" target=\"_blank\">\r\n <img\r\n src=\"https://res.cloudinary.com/pos/image/upload/v1598262220/icons/marketplace_icons/shopee.png\" />\r\n </a>\r\n\r\n <a *ngIf=\"c.TypeID == 1\" href=\"{{c.Url}}\" target=\"_blank\">\r\n <img\r\n src=\"https://res.cloudinary.com/pos/image/upload/v1598262221/icons/marketplace_icons/tokopedia.png\" />\r\n </a>\r\n <a *ngIf=\"c.TypeID == 2\" href=\"{{c.Url}}\" target=\"_blank\">\r\n <img\r\n src=\"https://res.cloudinary.com/pos/image/upload/w_50/v1632447439/icons/WooCommerce/woocommerce-icon.webp\" />\r\n </a>\r\n <a *ngIf=\"c.TypeID == 6\" href=\"{{c.Url}}\" target=\"_blank\" data-placement=\"top\"\r\n matTooltip=\"{{c.Title}}\">\r\n <img\r\n src=\"https://res.cloudinary.com/pos/image/upload/w_30/v1645761611/icons/Marketplace%20logo/tiktok.png\" />\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </content>\r\n</mainpanel>","export class ProductFilter {\r\n ChannelID : string;\r\n PageNumber : number;\r\n RowCount : number;\r\n sync : boolean;\r\n mode : number;\r\n ScanFull :boolean;\r\n}","export enum ChannelLogo {\r\n SHOOPE = '//res.cloudinary.com/pos/image/upload/v1598262220/icons/marketplace_icons/shopee.png',\r\n WOOCOMMERCE = '//res.cloudinary.com/pos/image/upload/w_50/v1632447439/icons/WooCommerce/woocommerce-icon.webp',\r\n TOKOPEDIA = '//res.cloudinary.com/pos/image/upload/v1598262221/icons/marketplace_icons/tokopedia.png',\r\n TIKTOK = '//res.cloudinary.com/pos/image/upload/w_30/v1645761611/icons/Marketplace%20logo/tiktok.png'\r\n}"],"names":[],"sourceRoot":"webpack:///"}
|