{"version":3,"file":"app.js","mappings":"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","sources":["webpack://VirtoCommerce.CustomerReviews/./Scripts/module.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/catalog-entry-list.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/catalog-items-select.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/fee-dynamic-details.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/fee-dynamic-list.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/fee-static-details.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/fee-static-list.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/fees.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/master-catalog.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/offer-details.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/offer-list.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/order-fee-list.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/seller-add.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/seller-category-list.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/seller-details.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/seller-import-history-details.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/seller-import-history-list.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/seller-import-profile-details.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/seller-import-profile-list.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/seller-list.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/seller-publication-request-filter.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/seller-publication-request-list.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/seller-user-details.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/seller-user-list.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/state-machine-detail.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/state-machine-list.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/state-machine-order-detail.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/synchronization-details.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/blades/synchronization-list.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/resources/catalog-api.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/resources/marketplace-api.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/services/approvalPolicyTranslation.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/widgets/item-offers-widget.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/widgets/offer-item-properties-widget.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/widgets/order-fee-widget.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/widgets/order-seller-orders-widget.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/widgets/seller-addresses-widget.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/widgets/seller-categories-widget.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/widgets/seller-fulfillment-widget.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/widgets/seller-import-history-widget.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/widgets/seller-import-profiles-widget.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/widgets/seller-orders-widget.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/widgets/seller-publication-requests-widget.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/widgets/seller-rating-widget.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/widgets/seller-users-widget.js","webpack://VirtoCommerce.CustomerReviews/./Scripts/widgets/state-machine-order-widget.js"],"sourcesContent":["// Call this to register your module to main application\nvar moduleName = 'virtoCommerce.marketplaceModule';\n\nif (AppDependencies !== undefined) {\n AppDependencies.push(moduleName);\n}\n\nangular.module(moduleName, ['virtoCommerce.catalogModule', 'virtoCommerce.customerModule'])\n .constant('virtoCommerce.marketplaceModule.sellerPublicationRequestStatuses', [\n 'Published',\n 'HasStagedChanges',\n 'WaitForApproval',\n 'RequiresChanges',\n 'Rejected',\n 'Approved'\n ])\n .config(['$stateProvider', \n function ($stateProvider) {\n $stateProvider.state('workspace.operatoritems',\n {\n url: '/operator-items',\n templateUrl: '$(Platform)/Scripts/common/templates/home.tpl.html',\n controller: ['platformWebApp.bladeNavigationService',\n function(bladeNavigationService) {\n var blade = {\n id: 'operatorItemsList',\n title: 'marketplace.blades.seller-publication-request-list.title',\n subtitle: 'marketplace.blades.seller-publication-request-list.subtitle',\n breadcrumbs: [],\n controller: 'virtoCommerce.marketplaceModule.sellerPublicationRequestListController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/seller-publication-request-list.tpl.html',\n isClosingDisabled: true\n };\n bladeNavigationService.showBlade(blade);\n }\n ]\n });\n $stateProvider.state('workspace.mastercatalog',\n {\n url: '/master-catalog',\n templateUrl: '$(Platform)/Scripts/common/templates/home.tpl.html',\n controller: ['$scope', 'platformWebApp.bladeNavigationService',\n function ($scope, bladeNavigationService) {\n var blade = {\n id: 'masterCatalog',\n title: 'marketplace.blades.master-catalog.title',\n subtitle: 'marketplace.blades.master-catalog.subtitle',\n breadcrumbs: [],\n controller: 'virtoCommerce.marketplaceModule.masterCatalogController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/master-catalog.tpl.html',\n isClosingDisabled: true\n };\n bladeNavigationService.showBlade(blade);\n // Workaround for module css isolation: everything inside this menu item will be treated as part of catalog module\n $scope.moduleName = 'vc-catalog';\n }\n ]\n });\n $stateProvider.state('workspace.operatororders',\n {\n url: '/operator-orders',\n templateUrl: '$(Platform)/Scripts/common/templates/home.tpl.html',\n controller: ['$scope', 'platformWebApp.bladeNavigationService',\n function ($scope, bladeNavigationService) {\n var blade = {\n id: 'operatorOrders',\n title: 'orders.blades.customerOrder-list.title',\n controller: 'virtoCommerce.orderModule.customerOrderListController',\n template: 'Modules/$(VirtoCommerce.Orders)/Scripts/blades/customerOrder-list.tpl.html',\n searchCriteria: { hasParentOperation: false },\n isExpandable: true,\n isClosingDisabled: true\n };\n bladeNavigationService.showBlade(blade);\n // Workaround for module css isolation: everything inside this menu item will be treated as part of order module\n $scope.moduleName = \"vc-order\";\n }\n ]\n });\n $stateProvider.state('workspace.sellers',\n {\n url: '/sellers',\n templateUrl: '$(Platform)/Scripts/common/templates/home.tpl.html',\n controller: ['platformWebApp.bladeNavigationService',\n function (bladeNavigationService) {\n var blade = {\n id: 'sellers',\n title: 'marketplace.blades.seller-list.title',\n subtitle: 'marketplace.blades.seller-list.subtitle',\n controller: 'virtoCommerce.marketplaceModule.sellerListController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/seller-list.tpl.html',\n isClosingDisabled: true,\n customizeToolbar: false\n };\n bladeNavigationService.showBlade(blade);\n }\n ]\n });\n $stateProvider.state('workspace.fees',\n {\n url: '/fees',\n templateUrl: '$(Platform)/Scripts/common/templates/home.tpl.html',\n controller: ['platformWebApp.bladeNavigationService',\n function (bladeNavigationService) {\n var blade = {\n id: 'fees',\n title: 'marketplace.blades.fees.title',\n subtitle: 'marketplace.blades.fees.subtitle',\n controller: 'virtoCommerce.marketplaceModule.feesController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/fees.tpl.html',\n isClosingDisabled: true\n };\n bladeNavigationService.showBlade(blade);\n }\n ]\n });\n\n $stateProvider.state('workspace.offers',\n {\n url: '/offers',\n templateUrl: '$(Platform)/Scripts/common/templates/home.tpl.html',\n controller: ['platformWebApp.bladeNavigationService',\n function (bladeNavigationService) {\n var blade = {\n id: 'offers',\n title: 'marketplace.blades.offer-list.title',\n subtitle: 'marketplace.blades.offer-list.subtitle-all-vendors',\n controller: 'virtoCommerce.marketplaceModule.offerListController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/offer-list.tpl.html',\n isClosingDisabled: true\n };\n bladeNavigationService.showBlade(blade);\n }\n ]\n });\n\n $stateProvider.state('workspace.synchronization',\n {\n url: '/synchronization',\n templateUrl: '$(Platform)/Scripts/common/templates/home.tpl.html',\n controller: ['platformWebApp.bladeNavigationService',\n function (bladeNavigationService) {\n var blade = {\n id: 'synchronization',\n title: 'marketplace.blades.synchronization-list.title',\n subtitle: 'marketplace.blades.synchronization-list.subtitle',\n controller: 'virtoCommerce.marketplaceModule.synchronizationListController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/synchronization-list.tpl.html',\n isClosingDisabled: true\n };\n bladeNavigationService.showBlade(blade);\n }\n ]\n });\n\n $stateProvider.state('workspace.statemachine',\n {\n url: '/state-machine',\n templateUrl: '$(Platform)/Scripts/common/templates/home.tpl.html',\n controller: ['platformWebApp.bladeNavigationService',\n function (bladeNavigationService) {\n var blade = {\n id: 'state-machine-list',\n controller: 'virtoCommerce.marketplaceModule.stateMachineListController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/state-machine-list.tpl.html',\n isClosingDisabled: true\n };\n bladeNavigationService.showBlade(blade);\n }\n ]\n });\n }\n ])\n .run(['$http', '$compile', 'platformWebApp.mainMenuService', 'platformWebApp.widgetService', '$state', 'platformWebApp.toolbarService', 'virtoCommerce.marketplaceModule.webApi', 'platformWebApp.dialogService', 'platformWebApp.authService', 'virtoCommerce.coreModule.common.dynamicExpressionService', 'platformWebApp.bladeNavigationService', 'platformWebApp.pushNotificationTemplateResolver', 'VirtoCommerce.CustomerReviews.entityTypesResolverService', 'platformWebApp.metaFormsService',\n function ($http, $compile, mainMenuService, widgetService, $state, toolbarService, webApi, dialogService, authService, dynamicExpressionService, bladeNavigationService, pushNotificationTemplateResolver, entityTypesResolverService, metaFormsService) {\n\n // Register Vendors' products in main menu\n var sellersProductsMainMenuItem = {\n path: 'browse/operator-items',\n icon: 'fa fa-cloud-upload',\n title: 'marketplace.main-menu.sellers-products',\n priority: 15,\n action: function () { $state.go('workspace.operatoritems'); },\n permission: 'operator:resources'\n };\n mainMenuService.addMenuItem(sellersProductsMainMenuItem);\n\n // Register Master catalog in main menu\n var masterCatalogMainMenuItem = {\n path: 'browse/master-catalog',\n icon: 'fa fa-folder',\n title: 'marketplace.main-menu.master-catalog',\n priority: 17.5,\n action: function () { $state.go('workspace.mastercatalog'); },\n permission: 'operator:resources'\n };\n mainMenuService.addMenuItem(masterCatalogMainMenuItem);\n\n // Register Operator Orders in main menu\n var menuItem = {\n path: 'browse/operator-orders',\n icon: 'fa fa-file-text',\n title: 'marketplace.main-menu.operator-orders',\n priority: 95,\n action: function () { $state.go('workspace.operatororders'); },\n permission: 'operator:resources'\n };\n mainMenuService.addMenuItem(menuItem);\n\n // Register Vendors in main menu\n var menuItem = {\n path: 'browse/sellers',\n icon: 'fas fa-store',\n title: 'marketplace.main-menu.sellers',\n priority: 185,\n action: function () { $state.go('workspace.sellers'); },\n permission: 'operator:resources'\n };\n mainMenuService.addMenuItem(menuItem);\n\n // Register fees in main menu\n var menuItem = {\n path: 'browse/fees',\n icon: 'fa fa-usd',\n title: 'marketplace.main-menu.fees',\n priority: 35,\n action: function () { $state.go('workspace.fees'); },\n permission: 'operator:resources'\n };\n mainMenuService.addMenuItem(menuItem);\n\n // Register offers in main menu\n var offerMenuItem = {\n path: 'browse/offers',\n icon: 'fa fa-usd',\n title: 'marketplace.main-menu.offers',\n priority: 36,\n action: function () { $state.go('workspace.offers'); },\n permission: 'operator:resources'\n };\n mainMenuService.addMenuItem(offerMenuItem);\n\n // Register synchronization in main menu\n var synchronizationMenuItem = {\n path: 'browse/synchronization',\n icon: 'fa fa-repeat',\n title: 'marketplace.main-menu.synchronization',\n priority: 37,\n action: function () { $state.go('workspace.synchronization'); },\n permission: 'operator:resources'\n };\n mainMenuService.addMenuItem(synchronizationMenuItem);\n\n var stateMachineMenuItem = {\n path: 'configuration/state-machine',\n icon: 'fa fa-pencil-square-o',\n title: 'marketplace.main-menu.state-machines',\n priority: 2,\n action: function () { $state.go('workspace.statemachine'); },\n permission: 'operator:statemachines'\n };\n mainMenuService.addMenuItem(stateMachineMenuItem);\n\n // Add toolbar buttons to product\n toolbarService.register({\n name: \"marketplace.blades.seller-publication-request-list.menu.approve\",\n icon: 'fa fa-cloud-upload',\n executeMethod: function (blade) {\n blade.isLoading = true;\n blade.approvalRequestSent = true;\n webApi.changeStatus({ operatorId: authService.userLogin, operatorName: authService.userLogin, sellerProductId: blade.sellerProduct.id, newStatus: 'Approved' }, () =>\n\n webApi.getSellerProduct({ productId: blade.sellerProduct.id }, (data) => {\n blade.sellerProduct = data;\n blade.isLoading = false;\n blade.approvalRequestSent = false;\n if (blade.parentBlade && blade.parentBlade.refresh) {\n blade.parentBlade.refresh();\n }\n })\n );\n\n },\n canExecuteMethod: (blade) => blade.sellerProduct && blade.sellerProduct.status.includes('WaitForApproval') && !blade.approvalRequestSent,\n index: 3\n }, 'virtoCommerce.catalogModule.itemDetailController');\n\n toolbarService.register({\n name: \"marketplace.blades.seller-publication-request-list.menu.decline\",\n icon: 'fa fa-unlink',\n executeMethod: function (blade) {\n var dialog = {\n comment: { text: '' },\n callback: function (decline) {\n if (decline) {\n blade.isLoading = true;\n blade.approvalRequestSent = true;\n webApi.changeStatus({ operatorId: authService.userLogin, operatorName: authService.userLogin, sellerProductId: blade.sellerProduct.id, newStatus: 'Rejected', comment: dialog.comment.text }, () =>\n webApi.getSellerProduct({ productId: blade.sellerProduct.id }, (data) => {\n blade.sellerProduct = data;\n blade.isLoading = false;\n blade.approvalRequestSent = false;\n if (blade.parentBlade && blade.parentBlade.refresh) {\n blade.parentBlade.refresh();\n }\n }));\n }\n }\n }\n dialogService.showDialog(dialog, 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/dialogs/declinePublishing-dialog.tpl.html', 'platformWebApp.confirmDialogController');\n },\n canExecuteMethod: (blade) => blade.sellerProduct && blade.sellerProduct.status.includes('WaitForApproval') && !blade.approvalRequestSent,\n index: 4\n }, 'virtoCommerce.catalogModule.itemDetailController');\n\n // Vendor details: Addresses widget\n var sellerAddressesWidget = {\n controller: 'virtoCommerce.marketplaceModule.sellerAddressesWidgetController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/widgets/seller-addresses-widget.tpl.html'\n };\n widgetService.registerWidget(sellerAddressesWidget, 'sellerDetails');\n\n\n // Seller Product total delete\n toolbarService.register({\n name: \"marketplace.blades.seller-publication-request-list.menu.total-delete\",\n icon: 'fas fa-trash-alt',\n executeMethod: function (blade) {\n var dialog = {\n callback: function (remove) {\n if (remove) {\n blade.isLoading = true;\n webApi.deleteSellerProducts({ ids: blade.sellerProduct.id }, () => {\n blade.isLoading = false;\n blade.parentBlade.refresh();\n bladeNavigationService.closeBlade(blade);\n });\n }\n }\n }\n dialogService.showDialog(dialog, 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/dialogs/deleteProduct-dialog.tpl.html', 'platformWebApp.confirmDialogController');\n },\n canExecuteMethod: (blade) => blade.sellerProduct,\n index: 5\n }, 'virtoCommerce.catalogModule.itemDetailController');\n\n // Vendor details: Addresses widget\n var sellerAddressesWidget = {\n controller: 'virtoCommerce.marketplaceModule.sellerAddressesWidgetController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/widgets/seller-addresses-widget.tpl.html'\n };\n widgetService.registerWidget(sellerAddressesWidget, 'sellerDetails');\n\n\n // Vendor details: Users widget\n var sellerUsersWidget = {\n controller: 'virtoCommerce.marketplaceModule.sellerUsersWidgetController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/widgets/seller-users-widget.tpl.html'\n };\n widgetService.registerWidget(sellerUsersWidget, 'sellerDetails');\n\n // Vendor details: Orders widget\n var sellerOrdersWidget = {\n controller: 'virtoCommerce.marketplaceModule.sellerOrdersWidgetController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/widgets/seller-orders-widget.tpl.html'\n };\n widgetService.registerWidget(sellerOrdersWidget, 'sellerDetails');\n\n // Vendor details: Categories widget\n var sellerCategoriesWidget = {\n controller: 'virtoCommerce.marketplaceModule.sellerCategoriesWidgetController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/widgets/seller-categories-widget.tpl.html'\n };\n widgetService.registerWidget(sellerCategoriesWidget, 'sellerDetails');\n\n // Vendor details: Publication requests widget\n var sellerApprovalRequestsWidget = {\n controller: 'virtoCommerce.marketplaceModule.sellerPublicationRequestsWidgetController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/widgets/seller-publication-requests-widget.tpl.html'\n };\n widgetService.registerWidget(sellerApprovalRequestsWidget, 'sellerDetails');\n\n // Order details: Seller orders widget\n widgetService.registerWidget({\n controller: 'virtoCommerce.marketplaceModule.orderSellerOrdersOrdersWidgetController',\n isVisible: function (blade) {\n return blade.id === \"orderDetail\";\n },\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/widgets/order-seller-orders-widget.tpl.html'\n }, 'customerOrderDetailWidgets');\n\n // Product details: Product offers widget\n var itemOffersWidget = {\n controller: 'virtoCommerce.marketplaceModule.itemOffersWidgetController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/widgets/item-offers-widget.tpl.html'\n };\n widgetService.registerWidget(itemOffersWidget, 'itemDetail');\n\n // Offer details: offer product properties widget\n var offerItemPropertiesWidget = {\n controller: 'virtoCommerce.marketplaceModule.offerItemPropertiesWidgetController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/widgets/offer-item-properties-widget.tpl.html'\n };\n widgetService.registerWidget(offerItemPropertiesWidget, 'offerDetailsWidgetContainer');\n\n // Order details: order commission widget\n var orderFeeWidget = {\n controller: 'virtoCommerce.marketplaceModule.orderFeeWidgetController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/widgets/order-fee-widget.tpl.html'\n };\n widgetService.registerWidget(orderFeeWidget, 'customerOrderDetailWidgets');\n\n // Seller details: seller rating widget\n var sellerRatingWidget = {\n controller: 'virtoCommerce.marketplaceModule.sellerRatingWidgetController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/widgets/seller-rating-widget.tpl.html'\n };\n widgetService.registerWidget(sellerRatingWidget, 'sellerDetails');\n\n // Seller details: seller fulfillments widget\n var sellerFulfillmentWidget = {\n controller: 'virtoCommerce.marketplaceModule.sellerFulfillmentWidgetController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/widgets/seller-fulfillment-widget.tpl.html'\n };\n widgetService.registerWidget(sellerFulfillmentWidget, 'sellerDetails');\n\n // Seller details: seller import history widget\n var sellerImportHistoryWidget = {\n isVisible: function () { return true; },\n controller: 'virtoCommerce.marketplaceModule.sellerImportHistoryWidgetController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/widgets/seller-import-history-widget.tpl.html'\n };\n widgetService.registerWidget(sellerImportHistoryWidget, 'sellerDetails');\n\n // Seller details: seller import profiles widget\n var sellerImportProfilesWidget = {\n controller: 'virtoCommerce.marketplaceModule.sellerImportProfilesWidgetController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/widgets/seller-import-profiles-widget.tpl.html'\n };\n widgetService.registerWidget(sellerImportProfilesWidget, 'sellerDetails');\n\n var sellerImportProfileSettingsWidget = {\n controller: 'platformWebApp.entitySettingsWidgetController',\n template: '$(Platform)/Scripts/app/settings/widgets/entitySettingsWidget.tpl.html'\n };\n widgetService.registerWidget(sellerImportProfileSettingsWidget, 'sellerImportProfileDetails');\n\n var stateMachineOrderWidget = {\n controller: 'virtoCommerce.marketplaceModule.stateMachineOrderWidgetController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/widgets/state-machine-order-widget.tpl.html'\n };\n widgetService.registerWidget(stateMachineOrderWidget, 'customerOrderDetailWidgets');\n\n var availableExcludings = [\n {\n id: 'ConditionCategoryIsNot'\n },\n {\n id: 'ConditionProductIsNot'\n }\n ];\n\n dynamicExpressionService.registerExpression({\n id: 'VendorCommissionCondition',\n displayName: 'Vendor ...',\n templateURL: 'VendorCommissionCondition.html',\n newChildLabel: 'Add condition'\n });\n\n dynamicExpressionService.registerExpression({\n id: 'BlockCommissionCondition',\n displayName: 'Commission ...',\n templateURL: 'BlockCommissionCondition.html',\n newChildLabel: 'Add condition'\n });\n\n dynamicExpressionService.registerExpression({\n id: 'VcmpConditionCategoryIs',\n displayName: 'Category is ...',\n templateURL: 'ConditionCategoryIs.html',\n availableChildren: availableExcludings,\n newChildLabel: 'Excluding'\n });\n\n dynamicExpressionService.registerExpression({\n id: 'ConditionCategoryIsNot',\n displayName: 'Excluding category ...',\n templateURL: 'ConditionCategoryIsNot.html'\n });\n\n dynamicExpressionService.registerExpression({\n id: 'VcmpConditionProductIs',\n displayName: 'Product is ...',\n templateURL: 'ConditionProductIs.html'\n });\n\n dynamicExpressionService.registerExpression({\n id: 'ConditionProductIsNot',\n displayName: 'Excuding product ...',\n templateURL: 'ConditionProductIsNot.html'\n });\n\n dynamicExpressionService.registerExpression({\n id: 'VcmpConditionVendorIs',\n displayName: 'Vendor is ...',\n templateURL: 'ConditionVendorIs.html'\n });\n\n $http.get('Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/dynamicConditions/templates.html').then(function (response) {\n $compile(response.data);\n });\n\n // register notification template\n pushNotificationTemplateResolver.register({\n priority: 900,\n satisfy: function (notify, place) { return place === 'history' && notify.notifyType === 'SyncPushNotification'; },\n template: 'Modules/$(VirtoCommerce.Search)/Scripts/notifications/historyIndex.tpl.html',\n action: function (notify) {\n var blade = {\n id: 'syncProgress',\n notification: notify,\n controller: 'virtoCommerce.marketplaceModule.synchronizationDetailsController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/synchronization-details.tpl.html'\n };\n bladeNavigationService.showBlade(blade);\n }\n });\n\n pushNotificationTemplateResolver.register({\n priority: 900,\n satisfy: function (notify, place) { return place === 'header-notification' && notify.notifyType === 'SyncPushNotification'; },\n template: 'Modules/$(VirtoCommerce.Search)/Scripts/notifications/headerNotification.tpl.html',\n action: function (notify) { $state.go('workspace.pushNotificationsHistory', notify) }\n });\n\n //Seller entityType resolver\n entityTypesResolverService.registerType({\n entityType: 'Seller',\n icon: 'fas fa-store',\n entityIdFieldName: 'sellerId',\n detailBlade: {\n id: 'sellerDetails',\n title: 'marketplace.blades.seller-details.title',\n subtitle: 'marketplace.blades.seller-details.subtitle',\n controller: 'virtoCommerce.marketplaceModule.sellerDetailsController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/seller-details.tpl.html'\n },\n getEntity: function (entityId, setEntityCallback) {\n webApi.getSellerById({ id: entityId }, (data) => {\n setEntityCallback(data.name, data.logo);\n });\n },\n knownChildrenTypes: []\n });\n\n metaFormsService.registerMetaFields('Seller',\n [\n {\n name: 'name',\n title: 'marketplace.blades.seller-details.labels.name',\n valueType: 'ShortText'\n },\n {\n name: 'isActive',\n title: 'marketplace.blades.seller-details.labels.is-active',\n valueType: 'Boolean'\n },\n {\n name: 'commissionFee',\n templateUrl: 'sellerDetails-feeSelector.html'\n },\n {\n name: 'groups',\n title: 'marketplace.blades.seller-details.labels.groups',\n templateUrl: 'sellerDetails-groupsSelector.html'\n },\n {\n name: 'registrationId',\n title: 'marketplace.blades.seller-details.labels.registration-id',\n valueType: 'ShortText'\n },\n {\n name: 'outerId',\n title: 'marketplace.blades.seller-details.labels.outer-id',\n valueType: 'ShortText'\n },\n {\n name: 'logo',\n title: 'marketplace.blades.seller-details.labels.logo',\n templateUrl: 'sellerDetails-logoImage.html'\n },\n {\n name: 'approvalPolicy',\n title: 'marketplace.blades.seller-details.labels.approval-policy',\n templateUrl: 'sellerDetails-approvalSelector.html'\n },\n {\n name: 'description',\n title: 'marketplace.blades.seller-details.labels.description',\n valueType: 'LongText'\n },\n {\n name: 'deliveryTime',\n title: 'marketplace.blades.seller-details.labels.delivery-time',\n valueType: 'LongText'\n },\n ]\n );\n }\n ]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.catalogEntriesController', ['$scope', 'virtoCommerce.catalogModule.items', 'platformWebApp.ui-grid.extension', 'platformWebApp.bladeUtils', 'platformWebApp.uiGridHelper', 'platformWebApp.bladeNavigationService', 'virtoCommerce.marketplaceModule.webApi',\n function ($scope, items, gridOptionExtension, bladeUtils, uiGridHelper, bladeNavigationService, marketplaceApi) {\n var blade = $scope.blade;\n\n $scope.isValid = function () {\n return !angular.equals(this.blade.productIds, this.blade.promotion.productIds);\n };\n\n $scope.saveChanges = function () {\n this.blade.promotion.productIds = this.blade.productIds;\n this.blade.promotion.productNames = _.pluck(selectedListEntries, 'name');\n this.blade.promotion.productCodes = _.pluck(selectedListEntries, 'code');\n $scope.bladeClose();\n };\n\n $scope.setGridOptions = function (gridId, gridOptions) {\n gridOptionExtension.tryExtendGridOptions(gridId, gridOptions);\n initialize();\n uiGridHelper.initialize($scope, gridOptions, externalRegisterApiCallback);\n bladeUtils.initializePagination($scope);\n };\n\n blade.refresh = function () {\n initialize();\n };\n\n $scope.cancelChanges = function () {\n $scope.bladeClose();\n };\n\n var isFirstRun = true;\n var selectedListEntries = [];\n\n function initialize() {\n blade.isLoading = true;\n if (!blade.promotion.productIds) {\n blade.promotion.productIds = [];\n }\n\n if (isFirstRun) {\n isFirstRun = false;\n blade.productIds = angular.copy(blade.promotion.productIds);\n\n if (!(blade.promotion.productIds && blade.promotion.productIds.length)) {\n openCatalogBlade();\n return;\n }\n }\n\n items.query({ ids: blade.productIds, respGroup: 'ItemInfo' }, function (data) {\n blade.$scope.gridApi.grid.options.data = data;\n selectedListEntries = angular.copy(data);\n blade.isLoading = false;\n });\n }\n\n function externalRegisterApiCallback(gridApi) {\n $scope.gridApi = gridApi;\n $scope.$parent.blade.refresh();\n uiGridHelper.bindRefreshOnSortChanged($scope);\n }\n\n function openCatalogBlade() {\n var catalogBlade = {\n id: \"CatalogEntrySelect\",\n title: \"marketing.blades.catalog-items-select.title-product\",\n controller: 'virtoCommerce.marketplaceModule.catalogItemSelectController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/catalog-items-select.tpl.html',\n breadcrumbs: [],\n toolbarCommands: [\n {\n name: \"platform.commands.pick-selected\", icon: 'fas fa-plus',\n executeMethod: function () {\n blade.$scope.gridApi.grid.options.data = _.map(selectedListEntries, function (entry) {\n if (entry.imageUrl) {\n entry.imgSrc = entry.imageUrl;\n }\n return entry;\n });\n var selectedIds = _.pluck(selectedListEntries, 'id');\n blade.productIds = _.uniq(_.union(selectedIds, blade.productIds), false);\n bladeNavigationService.closeBlade(catalogBlade);\n },\n canExecuteMethod: function () {\n return selectedListEntries.length > 0;\n }\n }]\n };\n\n catalogBlade.options = {\n selectedItemIds: [],\n showCheckingMultiple: false,\n withProducts: true,\n checkItemFn: function (listItem, isSelected) {\n if (listItem.type == 'category') {\n blade.error = 'Must select Product';\n listItem.selected = undefined;\n } else {\n if (isSelected) {\n if (_.all(selectedListEntries, function (x) { return x.id != listItem.id; })) {\n selectedListEntries.push(listItem);\n }\n }\n else {\n selectedListEntries = _.reject(selectedListEntries, function (x) { return x.id == listItem.id; });\n }\n blade.error = undefined;\n }\n }\n };\n\n marketplaceApi.getSettings((settings) => {\n catalogBlade.catalogId = settings.masterCatalogId;\n bladeNavigationService.showBlade(catalogBlade, blade);\n });\n }\n\n $scope.blade.toolbarCommands = [\n {\n name: \"platform.commands.refresh\", icon: 'fa fa-refresh',\n executeMethod: function (blade) {\n blade.refresh();\n },\n canExecuteMethod: function () { return true; }\n },\n {\n name: \"platform.commands.add\", icon: 'fas fa-plus',\n executeMethod: function () {\n openCatalogBlade();\n },\n canExecuteMethod: function () {\n return true;\n }\n },\n {\n name: \"platform.commands.delete\", icon: 'fas fa-trash-alt',\n executeMethod: function () {\n var selectedRows = $scope.gridApi.selection.getSelectedRows();\n var toRemoveArray = _.pluck(selectedRows, 'id');\n\n blade.productIds = _.difference(blade.productIds, toRemoveArray);\n blade.refresh();\n },\n canExecuteMethod: function () {\n if (blade.childrenBlades.length > 0) {\n return false;\n }\n if (blade.$scope.gridApi) {\n return blade.$scope.gridApi.grid.api.selection.getSelectedRows().length > 0;\n }\n return false;\n }\n }\n ];\n }]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.catalogItemSelectController', ['$scope', 'virtoCommerce.catalogModule.catalogs', 'virtoCommerce.catalogModule.listEntries', 'platformWebApp.bladeUtils', 'uiGridConstants', 'platformWebApp.uiGridHelper', 'platformWebApp.ui-grid.extension', '$timeout',\n function ($scope, catalogs, listEntries, bladeUtils, uiGridConstants, uiGridHelper, gridOptionExtension, $timeout) {\n var blade = $scope.blade;\n var bladeNavigationService = bladeUtils.bladeNavigationService;\n\n if (!blade.title) {\n blade.title = \"Select Catalog items...\";\n }\n\n $scope.options = angular.extend({\n showCheckingMultiple: true,\n allowCheckingItem: true,\n allowCheckingCategory: false,\n selectedItemIds: [],\n gridColumns: []\n }, blade.options);\n\n blade.refresh = function () {\n blade.isLoading = true;\n filter.searchedKeyword = filter.keyword;\n\n if (!$scope.isCatalogSelectMode()) {\n listEntries.listitemssearch(\n angular.extend({\n catalogId: blade.catalogId,\n categoryId: blade.categoryId,\n keyword: filter.keyword,\n searchInVariations : filter.searchInVariations ? filter.searchInVariations : false,\n responseGroup: $scope.options.withProducts ? 'withCategories, withProducts' : 'withCategories',\n objectTypes: $scope.options.withProducts ? undefined : ['Category'],\n excludeProductType: $scope.options.excludeProductType,\n sort: uiGridHelper.getSortExpression($scope),\n skip: ($scope.pageSettings.currentPage - 1) * $scope.pageSettings.itemsPerPageCount,\n take: $scope.pageSettings.itemsPerPageCount\n }, blade.searchCriteria),\n function (data, headers) {\n blade.isLoading = false;\n $scope.pageSettings.totalItems = data.totalCount;\n $scope.items = data.listEntries;\n if ($scope.options.onItemsLoaded) {\n $scope.options.onItemsLoaded(data.listEntries);\n }\n\n //Set navigation breadcrumbs\n setBreadcrumbs();\n\n });\n }\n else {\n //ToDo: Apply Infinite scrolling\n catalogs.search({take: 1000}, function (data) {\n blade.isLoading = false;\n\n if ($scope.options.isVirtual === undefined) {\n $scope.items = data.results;\n } else {\n $scope.items = _.where(data.results, { isVirtual: $scope.options.isVirtual });\n }\n\n $scope.pageSettings.totalItems = $scope.items.length;\n\n if ($scope.options.onCatalogsLoaded) {\n $scope.options.onCatalogsLoaded($scope.items);\n }\n\n //Set navigation breadcrumbs\n setBreadcrumbs();\n });\n }\n };\n\n //Breadcrumbs\n function setBreadcrumbs() {\n //Clone array (angular.copy leave a same reference)\n blade.breadcrumbs = blade.breadcrumbs.slice(0);\n\n //catalog breadcrumb by default\n var breadCrumb = {\n id: blade.catalogId ? blade.catalogId : \"All\",\n name: blade.catalog ? blade.catalog.name : \"catalog.blades.catalog-items-select.bread-crumb-top\",\n blade: $scope.blade\n };\n\n //if category need change to category breadcrumb\n if (blade.category) {\n\n breadCrumb.id = blade.categoryId;\n breadCrumb.name = blade.category.name;\n }\n\n //prevent duplicate items\n if (!_.some(blade.breadcrumbs, function (x) { return x.id === breadCrumb.id })) {\n blade.breadcrumbs.push(breadCrumb);\n }\n\n breadCrumb.navigate = function (breadcrumb) {\n bladeNavigationService.closeBlade($scope.blade,\n function () {\n if (breadcrumb.id === \"All\") {\n blade.catalogId = null;\n blade.filter.keyword = null;\n }\n bladeNavigationService.showBlade($scope.blade, blade.parentBlade);\n });\n };\n }\n\n $scope.isCatalogSelectMode = function () {\n return !blade.catalogId && !filter.searchedKeyword;\n };\n\n $scope.selectItem = function (e, listItem) {\n //if ($scope.selectedNodeId == listItem.id)\n // return;\n\n $scope.selectedNodeId = listItem.id;\n //call callback function\n if ($scope.options.selectItemFn) {\n $scope.options.selectItemFn(listItem);\n }\n \n var newBlade = {\n id: blade.id,\n breadcrumbs: blade.breadcrumbs,\n catalogId: blade.catalogId,\n catalog: blade.catalog,\n controller: blade.controller,\n template: blade.template,\n options: $scope.options,\n searchCriteria: blade.searchCriteria,\n toolbarCommands: blade.toolbarCommands\n };\n\n if ($scope.isCatalogSelectMode()) {\n newBlade.catalogId = listItem.id;\n newBlade.catalog = listItem;\n\n // switch template option\n if ($scope.options.getBladeForCategories) {\n var customCategoriesBlade = $scope.options.getBladeForCategories(listItem, newBlade);\n if (customCategoriesBlade) {\n newBlade = customCategoriesBlade;\n }\n }\n\n bladeNavigationService.closeBlade(blade, function () {\n bladeNavigationService.showBlade(newBlade, blade.parentBlade);\n });\n\n // setting current catalog to be globally available \n bladeNavigationService.catalogsSelectedCatalog = listItem;\n bladeNavigationService.catalogsSelectedCategoryId = undefined;\n }\n else if (listItem.type === 'category') {\n newBlade.categoryId = listItem.id;\n newBlade.category = listItem;\n\n bladeNavigationService.closeBlade(blade, function () {\n bladeNavigationService.showBlade(newBlade, blade.parentBlade);\n });\n }\n else {\n //default blade for product details\n newBlade = {\n id: \"listItemDetail\",\n itemId: listItem.id,\n productType: listItem.productType,\n title: listItem.name,\n catalog: blade.catalog,\n variationsToolbarCommandsAndEvents: { toolbarCommands: blade.toolbarCommands, externalRegisterApiCallback: externalRegisterApiCallback },\n controller: 'virtoCommerce.catalogModule.itemDetailController',\n template: 'Modules/$(VirtoCommerce.Catalog)/Scripts/blades/item-detail.tpl.html'\n };\n\n //extension point allows to use custom views for product details\n if ($scope.options.fnGetBladeForItem) {\n var customBlade = $scope.options.fnGetBladeForItem(listItem);\n if (customBlade) {\n newBlade = customBlade;\n }\n }\n \n bladeNavigationService.showBlade(newBlade, blade);\n\n // setting current categoryId to be globally available\n bladeNavigationService.catalogsSelectedCategoryId = blade.categoryId;\n }\n };\n\n // simple and advanced filtering\n\n var filter = blade.filter = blade.filter || { keyword: '' };\n\n filter.criteriaChanged = function () {\n if ($scope.pageSettings.currentPage > 1) {\n $scope.pageSettings.currentPage = 1;\n } else {\n blade.refresh();\n }\n };\n\n $scope.setGridOptions = function (gridId, gridOptions) {\n gridOptions.isRowSelectable = angular.isFunction($scope.options.isItemSelectable)\n ? function(row) {\n return $scope.options.isItemSelectable(row.entity);\n }\n : function(row) {\n return $scope.options.allowCheckingItem && row.entity.type !== 'category' ||\n $scope.options.allowCheckingCategory && row.entity.type === 'category';\n };\n\n gridOptions.columnDefs = gridOptions.columnDefs.concat($scope.options.gridColumns);\n gridOptionExtension.tryExtendGridOptions(gridId, gridOptions);\n uiGridHelper.initialize($scope, gridOptions, externalRegisterApiCallback);\n bladeUtils.initializePagination($scope);\n };\n\n function externalRegisterApiCallback(gridApi) {\n //update gridApi for current grid\n $scope.gridApi = gridApi;\n\n gridApi.grid.registerDataChangeCallback(function (grid) {\n //check already selected rows\n $timeout(function () {\n _.each($scope.items, function (x) {\n if (_.some($scope.options.selectedItemIds, function (y) { return y === x.id; })) {\n gridApi.selection.selectRow(x);\n }\n });\n });\n }, [uiGridConstants.dataChange.ROW]);\n\n gridApi.selection.on.rowSelectionChanged($scope, function (row) {\n if ($scope.options.checkItemFn) {\n $scope.options.checkItemFn(row.entity, row.isSelected);\n }\n if (row.isSelected) {\n if (!_.contains($scope.options.selectedItemIds, row.entity.id)) {\n $scope.options.selectedItemIds.push(row.entity.id);\n }\n }\n else {\n $scope.options.selectedItemIds = _.without($scope.options.selectedItemIds, row.entity.id);\n }\n });\n\n uiGridHelper.bindRefreshOnSortChanged($scope);\n }\n}]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.feeDynamicDetailsController', ['$q', '$scope', 'platformWebApp.bladeNavigationService', 'platformWebApp.dialogService', 'virtoCommerce.marketplaceModule.webApi', 'virtoCommerce.coreModule.common.dynamicExpressionService', 'virtoCommerce.marketplaceModule.catalogProducts', 'virtoCommerce.marketplaceModule.catalogCategories',\n function ($q, $scope, bladeNavigationService, dialogService, marketplaceApi, dynamicExpressionService, catalogProducts, catalogCategories) {\n var blade = $scope.blade;\n blade.isLoading = false;\n\n function initializeBlade(data) {\n if (data.expressionTree && data.expressionTree.children) {\n data.expressionTree.children.forEach(x => extendElementBlock(x));\n }\n\n blade.currentEntity = angular.copy(data);\n blade.originalEntity = data;\n blade.command = {\n feeDetails: blade.currentEntity\n };\n blade.isLoading = false;\n }\n\n blade.refresh = function (parentRefresh) {\n if (blade.isNew) {\n marketplaceApi.getNewFee(function (data) {\n initializeBlade(data);\n });\n }\n else {\n marketplaceApi.getFeeById({ id: blade.currentEntity.id }, function (data) {\n initializeBlade(data);\n });\n }\n\n if (parentRefresh) {\n blade.parentBlade.refresh(true);\n }\n };\n\n $scope.setForm = function (form) { $scope.formScope = form; };\n\n if (!blade.isNew) {\n blade.toolbarCommands = [\n {\n name: \"platform.commands.save\", icon: 'fas fa-save',\n executeMethod: function () {\n $scope.saveChanges();\n },\n canExecuteMethod: canSave\n },\n {\n name: \"platform.commands.reset\", icon: 'fa fa-undo',\n executeMethod: function () {\n angular.copy(blade.originalEntity, blade.currentEntity);\n },\n canExecuteMethod: isDirty\n },\n {\n name: \"platform.commands.delete\", icon: 'fas fa-trash-alt',\n executeMethod: function () {\n $scope.delete();\n },\n canExecuteMethod: function () {\n return !blade.isNew;\n }\n }\n ];\n\n blade.onClose = function (closeCallback) {\n bladeNavigationService.showConfirmationIfNeeded(isDirty(), canSave(), blade, $scope.saveChanges, closeCallback, \"marketplace.dialogs.fee-dynamic-save.title\", \"marketplace.dialogs.fee-dynamic-save.message\");\n };\n\n function isDirty() {\n return !angular.equals(blade.currentEntity, blade.originalEntity);\n }\n\n function canSave() {\n return isDirty() && $scope.formScope && $scope.formScope.$valid;\n }\n }\n\n $scope.saveChanges = function () {\n blade.isLoading = true;\n\n if (blade.currentEntity.expressionTree) {\n blade.currentEntity.expressionTree.availableChildren = undefined;\n if (blade.currentEntity.expressionTree.children) {\n blade.currentEntity.expressionTree.children.forEach(x => stripOffUiInformation(x));\n }\n }\n\n if (blade.isNew) {\n marketplaceApi.createFee(blade.command, function () {\n $scope.bladeClose();\n blade.refresh(true);\n });\n } else {\n marketplaceApi.updateFee(blade.command, function () {\n blade.refresh(true);\n });\n }\n }\n\n $scope.delete = function () {\n var dialog = {\n id: \"confirmDeleteDynamicFee\",\n title: \"marketplace.dialogs.fee-dynamic-delete.title\",\n message: \"marketplace.dialogs.fee-dynamic-delete.message\",\n callback: function (remove) {\n if (remove) {\n blade.isLoading = true;\n marketplaceApi.deleteFee({ ids: [blade.currentEntity.id] }, function () {\n $scope.bladeClose();\n blade.parentBlade.refresh();\n });\n }\n }\n };\n dialogService.showConfirmationDialog(dialog);\n };\n\n $scope.validatePriorityAsync = function (value) {\n if (value > 0) {\n if (Number.isInteger(value)) {\n $scope.errorData = null;\n return $q.resolve();\n }\n else {\n $scope.errorData = 'PriorityNotInteger';\n return $q.reject();\n }\n } else {\n $scope.errorData = 'PriorityNotPositive';\n return $q.reject();\n }\n };\n\n blade.calculationTypes = [\n \"percent\",\n \"fixed\"\n ];\n\n // dynamic conditions\n function extendElementBlock(expressionBlock) {\n var retVal = dynamicExpressionService.expressions[expressionBlock.id];\n if (!retVal) {\n retVal = { displayName: 'unknown element: ' + expressionBlock.id };\n }\n\n angular.extend(expressionBlock, retVal);\n\n if (expressionBlock.availableChildren) {\n expressionBlock.availableChildren.forEach(x => extendElementBlock(x));\n }\n\n if (!expressionBlock.children) {\n expressionBlock.children = [];\n }\n expressionBlock.children.forEach(x => fillChildrenBlock(x));\n\n return expressionBlock;\n };\n\n function fillChildrenBlock(expressionBlock) {\n var retVal = dynamicExpressionService.expressions[expressionBlock.id];\n if (!retVal) {\n retVal = { displayName: 'unknown element: ' + expressionBlock.id };\n }\n\n angular.extend(expressionBlock, retVal);\n\n if (expressionBlock.id === 'VcmpConditionCategoryIs') {\n if (expressionBlock.includingCategories.length > 0) {\n catalogCategories.search({ withHidden: true, objectIds: expressionBlock.includingCategories }, function (data) {\n fillIncludingCategoriesBlock(data.items);\n blade.originalEntity = angular.copy(blade.currentEntity);\n });\n }\n\n if (expressionBlock.excludingCategories.length > 0) {\n catalogCategories.search({ withHidden: true, objectIds: expressionBlock.excludingCategories }, function (data) {\n fillExcludingCategoriesBlock(data.items);\n blade.originalEntity = angular.copy(blade.currentEntity);\n });\n }\n\n if (expressionBlock.excludingProducts.length > 0) {\n catalogProducts.search({ withHidden: true, objectIds: expressionBlock.excludingProducts }, function (data) {\n fillExcludingProductsBlock(data.items);\n blade.originalEntity = angular.copy(blade.currentEntity);\n });\n }\n }\n\n if (expressionBlock.id === 'VcmpConditionProductIs' && expressionBlock.includingProducts.length > 0) {\n expressionBlock.productIds = expressionBlock.includingProducts;\n catalogProducts.search({ withHidden: true, objectIds: expressionBlock.productIds }, function (data) {\n fillProductsBlock(data.items);\n blade.originalEntity = angular.copy(blade.currentEntity);\n });\n }\n\n if (expressionBlock.id === 'VcmpConditionVendorIs' && expressionBlock.vendorIds.length > 0) {\n marketplaceApi.searchSellers({ withHidden: true, objectIds: expressionBlock.vendorIds }, function (data) {\n fillVendorsBlock(data.results);\n blade.originalEntity = angular.copy(blade.currentEntity);\n });\n }\n\n return expressionBlock;\n };\n\n function fillIncludingCategoriesBlock(filteredCategories) {\n if (filteredCategories) {\n let commonConditionBlock = blade.currentEntity.expressionTree.children.filter(x => x.id === 'BlockCommissionCondition').find(o => true);\n let categoryIsConditionBlock = commonConditionBlock && commonConditionBlock.children\n ? commonConditionBlock.children.filter(x => x.id === 'VcmpConditionCategoryIs').find(o => true)\n : undefined;\n if (categoryIsConditionBlock && filteredCategories.length > 0) {\n categoryIsConditionBlock.categoryId = filteredCategories[0].id;\n categoryIsConditionBlock.categoryName = filteredCategories[0].name;\n }\n }\n };\n\n function fillExcludingCategoriesBlock(filteredCategories) {\n if (filteredCategories) {\n let commonConditionBlock = blade.currentEntity.expressionTree.children.filter(x => x.id === 'BlockCommissionCondition').find(o => true);\n let categoryIsConditionBlock = commonConditionBlock && commonConditionBlock.children\n ? commonConditionBlock.children.filter(x => x.id === 'VcmpConditionCategoryIs').find(o => true)\n : undefined;\n if (categoryIsConditionBlock) {\n filteredCategories.forEach(x => {\n categoryIsConditionBlock.children.push({\n id: 'ConditionCategoryIsNot',\n categoryId: x.id,\n categoryName: x.name,\n templateURL: 'ConditionCategoryIsNot.html'\n })\n });\n }\n }\n };\n\n function fillExcludingProductsBlock(filteredProducts) {\n if (filteredProducts) {\n let commonConditionBlock = blade.currentEntity.expressionTree.children.filter(x => x.id === 'BlockCommissionCondition').find(o => true);\n let categoryIsConditionBlock = commonConditionBlock && commonConditionBlock.children\n ? commonConditionBlock.children.filter(x => x.id === 'VcmpConditionCategoryIs').find(o => true)\n : undefined;\n if (categoryIsConditionBlock) {\n categoryIsConditionBlock.children.push({\n id: 'ConditionProductIsNot',\n productIds: filteredProducts.map(x => x.id),\n productNames: filteredProducts.map(x => x.name),\n productCodes: filteredProducts.map(x => x.code),\n templateURL: 'ConditionProductIsNot.html'\n });\n }\n }\n };\n\n function fillProductsBlock(filteredProducts) {\n if (filteredProducts) {\n let commonConditionBlock = blade.currentEntity.expressionTree.children.filter(x => x.id === 'BlockCommissionCondition').find(o => true);\n let productIsConditionBlock = commonConditionBlock && commonConditionBlock.children\n ? commonConditionBlock.children.filter(x => x.id === 'VcmpConditionProductIs').find(o => true)\n : undefined;\n if (productIsConditionBlock) {\n productIsConditionBlock.productNames = filteredProducts.map(x => x.name);\n productIsConditionBlock.productCodes = filteredProducts.map(x => x.code);\n }\n }\n };\n\n function fillVendorsBlock(filteredVendors) {\n if (filteredVendors) {\n let vendorsCommonConditionBlock = blade.currentEntity.expressionTree.children.filter(x => x.id === 'VendorCommissionCondition').find(o => true);\n let vendorsIsConditionBlock = vendorsCommonConditionBlock && vendorsCommonConditionBlock.children\n ? vendorsCommonConditionBlock.children.filter(x => x.id === 'VcmpConditionVendorIs').find(o => true)\n : undefined;\n if (vendorsIsConditionBlock) {\n vendorsIsConditionBlock.vendorNames = filteredVendors.map(x => x.name);\n }\n }\n };\n\n function stripOffUiInformation(expressionElement) {\n expressionElement.availableChildren = undefined;\n expressionElement.displayName = undefined;\n expressionElement.getValidationError = undefined;\n expressionElement.groupName = undefined;\n expressionElement.newChildLabel = undefined;\n expressionElement.templateURL = undefined;\n\n let conditionCategoryElements = expressionElement.children.filter(x => x.id === 'VcmpConditionCategoryIs');\n conditionCategoryElements.forEach(x => {\n x.includingCategories = [];\n x.includingCategories.push(x.categoryId);\n let excludingCategories = x.children.filter(y => y.id === 'ConditionCategoryIsNot' && y.categoryId);\n x.excludingCategories = excludingCategories.map(c => c.categoryId);\n let excludingProducts = x.children.filter(y => y.id === 'ConditionProductIsNot' && y.productIds);\n let productIdsArr = excludingProducts.map(p => p.productIds);\n x.excludingProducts = [].concat(...productIdsArr);\n x.children = undefined;\n x.availableChildren = undefined;\n x.categoryId = undefined;\n x.categoryName = undefined;\n });\n\n var conditionProductsElements = expressionElement.children.filter(x => x.id === 'VcmpConditionProductIs');\n conditionProductsElements.forEach(x => {\n if (x.productIds) {\n x.includingProducts = x.productIds;\n }\n if (x.productId) {\n x.includingProducts.push(x.productId);\n }\n x.children = undefined;\n x.availableChildren = undefined;\n });\n };\n\n blade.refresh();\n\n // condition wizards\n $scope.openProductSelectWizard = function (parentElement) {\n var productsBlade = {\n id: \"CatalogEntries\",\n title: \"marketplace.blades.catalog-entries.title-product\",\n controller: 'virtoCommerce.marketplaceModule.catalogEntriesController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/catalog-entry-list.tpl.html',\n breadcrumbs: [],\n promotion: parentElement\n };\n\n bladeNavigationService.showBlade(productsBlade, $scope.blade);\n };\n\n $scope.openCategorySelectWizard = function (parentElement) {\n var selectedListEntries = [];\n var categoryBlade = {\n id: \"CatalogCategorySelect\",\n title: \"marketplace.blades.catalog-items-select.title-category\",\n controller: 'virtoCommerce.marketplaceModule.catalogItemSelectController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/catalog-items-select.tpl.html',\n breadcrumbs: [],\n toolbarCommands: [\n {\n name: \"platform.commands.pick-selected\", icon: 'fas fa-plus',\n executeMethod: function (blade) {\n parentElement.categoryId = selectedListEntries[0].id;\n parentElement.categoryName = selectedListEntries[0].name;\n bladeNavigationService.closeBlade(blade);\n },\n canExecuteMethod: function () {\n return selectedListEntries.length == 1;\n }\n }]\n };\n\n categoryBlade.options = {\n showCheckingMultiple: false,\n allowCheckingItem: false,\n allowCheckingCategory: true,\n withProducts: false,\n checkItemFn: function (listItem, isSelected) {\n if (listItem.type != 'category') {\n categoryBlade.error = 'Must select Category';\n listItem.selected = undefined;\n } else {\n if (isSelected) {\n if (_.all(selectedListEntries, function (x) { return x.id != listItem.id; })) {\n selectedListEntries.push(listItem);\n }\n }\n else {\n selectedListEntries = _.reject(selectedListEntries, function (x) { return x.id == listItem.id; });\n }\n categoryBlade.error = undefined;\n }\n }\n };\n\n marketplaceApi.getSettings((settings) => {\n categoryBlade.catalogId = settings.masterCatalogId;\n bladeNavigationService.showBlade(categoryBlade, $scope.blade);\n });\n };\n\n $scope.openVendorSelectWizard = function (parentElement) {\n var vendorsBlade = {\n id: \"VendorsSelect\",\n title: \"marketplace.blades.seller-list.title\",\n controller: 'virtoCommerce.marketplaceModule.sellerListController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/seller-list.tpl.html',\n breadcrumbs: [],\n customizeToolbar: true,\n selectedVendorIds: parentElement.vendorIds,\n toolbarCommands: [\n {\n name: \"platform.commands.pick-selected\", icon: 'fas fa-plus',\n executeMethod: function (blade) {\n parentElement.vendorIds = blade.selectedVendors.map(x => x.id);\n parentElement.vendorNames = blade.selectedVendors.map(x => x.name);\n bladeNavigationService.closeBlade(blade);\n },\n canExecuteMethod: function (blade) {\n return blade.selectedVendors && blade.selectedVendors.length > 0;\n }\n }]\n };\n\n bladeNavigationService.showBlade(vendorsBlade, $scope.blade);\n };\n }\n ]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.feeDynamicListController', ['$scope', 'platformWebApp.bladeUtils', 'platformWebApp.bladeNavigationService', 'platformWebApp.dialogService', 'virtoCommerce.marketplaceModule.webApi', 'platformWebApp.uiGridHelper', 'platformWebApp.ui-grid.extension',\n function ($scope, bladeUtils, bladeNavigationService, dialogService, marketplaceApi, uiGridHelper, gridOptionExtension) {\n $scope.uiGridConstants = uiGridHelper.uiGridConstants;\n\n var blade = $scope.blade;\n blade.headIcon = 'fas fa-usd';\n\n blade.refresh = function () {\n blade.isLoading = true;\n\n var searchCriteria = getSearchCriteria();\n\n if (blade.searchCriteria) {\n angular.extend(searchCriteria, blade.searchCriteria);\n }\n\n marketplaceApi.searchFees(searchCriteria, function (data) {\n blade.isLoading = false;\n\n $scope.pageSettings.totalItems = data.totalCount;\n\n $scope.listEntries = data.results ? data.results : [];\n });\n };\n\n blade.toolbarCommands = [\n {\n name: \"platform.commands.refresh\", icon: 'fa fa-refresh',\n executeMethod: blade.refresh,\n canExecuteMethod: function () {\n return true;\n }\n },\n {\n name: \"platform.commands.add\", icon: 'fas fa-plus',\n executeMethod: function () {\n $scope.showDetails(undefined, true);\n },\n canExecuteMethod: function () {\n return true;\n }\n },\n {\n name: \"platform.commands.delete\",\n icon: 'fa fa-trash-o',\n executeMethod: function () { deleteList($scope.gridApi.selection.getSelectedRows()); },\n canExecuteMethod: function () {\n return $scope.listEntries && $scope.listEntries.length > 0 && $scope.gridApi && $scope.gridApi.selection.getSelectedRows().some(o => true);\n }\n }\n ];\n\n var setSelectedNode = function (listItem) {\n $scope.selectedNodeId = listItem.id;\n };\n\n $scope.selectNode = function (listItem) {\n setSelectedNode(listItem);\n\n $scope.showDetails(listItem);\n }\n\n $scope.showDetails = function (listItem, isNew) {\n var newBlade = {\n id: isNew ? 'feeDynamicAdd' : 'feeDynamicDetails',\n isNew: isNew,\n currentEntity: listItem,\n title: isNew ? 'marketplace.blades.fee-dynamic-add.title' : listItem.name,\n subtitle: isNew ? 'marketplace.blades.fee-dynamic-add.subtitle' : 'marketplace.blades.fee-dynamic-details.subtitle',\n controller: 'virtoCommerce.marketplaceModule.feeDynamicDetailsController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/fee-dynamic-details.tpl.html'\n };\n bladeNavigationService.showBlade(newBlade, blade);\n }\n\n $scope.edit = function (item) {\n $scope.showDetails(item, false);\n };\n\n $scope.delete = function (item) {\n deleteList([item], true);\n };\n\n function deleteList(selection, single) {\n var dialog = {\n id: \"confirmDeleteDynamicFee\",\n title: single ? \"marketplace.dialogs.fee-dynamic-delete.title\" : \"marketplace.dialogs.fee-dynamic-list-delete.title\",\n message: single ? \"marketplace.dialogs.fee-dynamic-delete.message\" : \"marketplace.dialogs.fee-dynamic-list-delete.message\",\n callback: function (remove) {\n if (remove) {\n marketplaceApi.deleteFee({ ids: selection.map(item => item.id) }, function () {\n blade.refresh();\n });\n }\n }\n };\n dialogService.showConfirmationDialog(dialog);\n }\n\n $scope.setGridOptions = function (gridId, gridOptions) {\n $scope.gridOptions = gridOptions;\n gridOptionExtension.tryExtendGridOptions(gridId, gridOptions);\n\n gridOptions.onRegisterApi = function (gridApi) {\n $scope.gridApi = gridApi;\n gridApi.core.on.sortChanged($scope, function () {\n if (!blade.isLoading) {\n if (blade.sortDefault) {\n blade.sortDefault = false;\n }\n blade.refresh();\n }\n });\n };\n\n bladeUtils.initializePagination($scope);\n };\n\n function getSearchCriteria() {\n var searchCriteria = {\n type: 'dynamic',\n sort: blade.sortDefault || uiGridHelper.getSortExpression($scope) === '' ? 'priority:asc' : uiGridHelper.getSortExpression($scope),\n skip: ($scope.pageSettings.currentPage - 1) * $scope.pageSettings.itemsPerPageCount,\n take: $scope.pageSettings.itemsPerPageCount\n };\n return searchCriteria;\n }\n }\n ]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.feeStaticDetailsController', ['$q', '$scope', 'platformWebApp.bladeNavigationService', 'platformWebApp.dialogService', 'virtoCommerce.marketplaceModule.webApi',\n function ($q, $scope, bladeNavigationService, dialogService, marketplaceApi) {\n var blade = $scope.blade;\n blade.isLoading = false;\n\n function initializeBlade(data) {\n blade.currentEntity = !blade.isNew ? angular.copy(data) : { type: 'static', calculationType: 'percent' };\n blade.originalEntity = data;\n blade.command = {\n feeDetails: blade.currentEntity\n };\n blade.title = blade.currentEntity.name;\n blade.isLoading = false;\n }\n\n blade.refresh = function (parentRefresh) {\n if (parentRefresh) {\n blade.parentBlade.refresh(true);\n }\n\n initializeBlade(blade.currentEntity);\n };\n\n $scope.setForm = function (form) { $scope.formScope = form; };\n\n if (!blade.isNew) {\n blade.toolbarCommands = [\n {\n name: \"platform.commands.save\", icon: 'fas fa-save',\n executeMethod: function () {\n $scope.saveChanges();\n },\n canExecuteMethod: canSave\n },\n {\n name: \"platform.commands.reset\", icon: 'fa fa-undo',\n executeMethod: function () {\n angular.copy(blade.originalEntity, blade.currentEntity);\n },\n canExecuteMethod: isDirty\n },\n {\n name: \"platform.commands.delete\", icon: 'fas fa-trash-alt',\n executeMethod: function () {\n $scope.delete();\n },\n canExecuteMethod: function() {\n return !blade.originalEntity.isDefault;\n }\n }\n ];\n\n blade.onClose = function (closeCallback) {\n bladeNavigationService.showConfirmationIfNeeded(isDirty(), canSave(), blade, $scope.saveChanges, closeCallback, \"marketplace.dialogs.fee-static-save.title\", \"marketplace.dialogs.fee-static-save.message\");\n };\n\n function isDirty() {\n return !angular.equals(blade.currentEntity, blade.originalEntity);\n }\n\n function canSave() {\n return isDirty() && $scope.formScope && $scope.formScope.$valid;\n }\n }\n\n $scope.saveChanges = function () {\n blade.isLoading = true;\n\n if (blade.isNew) {\n marketplaceApi.createFee(blade.command, function () {\n $scope.bladeClose();\n blade.refresh(true);\n });\n } else {\n marketplaceApi.updateFee(blade.command, function () {\n blade.refresh(true);\n });\n }\n }\n\n $scope.delete = function () {\n var dialog = {\n id: \"confirmDeleteStaticFee\",\n title: \"marketplace.dialogs.fee-static-delete.title\",\n message: \"marketplace.dialogs.fee-static-delete.message\",\n callback: function (remove) {\n if (remove) {\n blade.isLoading = true;\n marketplaceApi.deleteFee({ ids: [blade.currentEntity.id] }, function () {\n $scope.bladeClose();\n blade.parentBlade.refresh();\n });\n }\n }\n };\n dialogService.showConfirmationDialog(dialog);\n };\n\n blade.calculationTypes = [\n \"Percent\",\n \"Fixed\"\n ];\n\n blade.refresh();\n }\n ]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.feeStaticListController', ['$scope', 'platformWebApp.bladeUtils', 'platformWebApp.bladeNavigationService', 'virtoCommerce.marketplaceModule.webApi', 'platformWebApp.uiGridHelper', 'platformWebApp.ui-grid.extension',\n function ($scope, bladeUtils, bladeNavigationService, marketplaceApi, uiGridHelper, gridOptionExtension) {\n $scope.uiGridConstants = uiGridHelper.uiGridConstants;\n\n var blade = $scope.blade;\n blade.headIcon = 'fas fa-usd';\n\n blade.refresh = function () {\n blade.isLoading = true;\n\n var searchCriteria = getSearchCriteria();\n\n if (blade.searchCriteria) {\n angular.extend(searchCriteria, blade.searchCriteria);\n }\n\n marketplaceApi.searchFees(searchCriteria, function (data) {\n blade.isLoading = false;\n\n $scope.listEntries = [];\n blade.selectedItem = undefined;\n\n if (data.results) {\n $scope.listEntries = data.results;\n if ($scope.selectedNodeId) {\n blade.selectedItem = $scope.listEntries.filter(x => x.id === $scope.selectedNodeId).find(o => true);\n }\n }\n\n if (blade.childBlade && blade.selectedItem) {\n blade.childBlade.currentEntity = blade.selectedItem;\n blade.childBlade.refresh();\n }\n });\n };\n\n blade.toolbarCommands = [\n {\n name: \"platform.commands.refresh\", icon: 'fa fa-refresh',\n executeMethod: blade.refresh,\n canExecuteMethod: function () {\n return true;\n }\n },\n {\n name: \"platform.commands.add\", icon: 'fas fa-plus',\n executeMethod: function () {\n $scope.showDetails(undefined, true);\n },\n canExecuteMethod: function () {\n return true;\n }\n }\n ];\n\n var setSelectedNode = function (listItem) {\n $scope.selectedNodeId = listItem.id;\n blade.selectedItem = listItem;\n };\n\n $scope.selectNode = function (listItem) {\n setSelectedNode(listItem);\n\n $scope.showDetails(listItem);\n }\n\n $scope.showDetails = function (listItem, isNew) {\n var newBlade = {\n id: isNew ? 'feeStaticAdd' : 'feeStaticDetails',\n isNew: isNew,\n currentEntity: listItem,\n title: isNew ? 'marketplace.blades.fee-static-add.title' : listItem.name,\n subtitle: isNew ? 'marketplace.blades.fee-static-add.subtitle' : 'marketplace.blades.fee-static-details.subtitle',\n controller: 'virtoCommerce.marketplaceModule.feeStaticDetailsController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/fee-static-details.tpl.html'\n };\n blade.childBlade = newBlade;\n bladeNavigationService.showBlade(newBlade, blade);\n }\n\n function getSearchCriteria() {\n var searchCriteria = {\n type: 'static',\n sort: 'isDefault:desc'\n };\n return searchCriteria;\n }\n\n blade.refresh();\n }\n ]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.feesController', ['$scope', 'platformWebApp.bladeNavigationService', function ($scope, bladeNavigationService) {\n $scope.selectedNodeId = null;\n\n function initializeBlade() {\n var entities = [\n { name: 'marketplace.blades.fees.menu.static.title', entityName: 'static', icon: 'fa fa-usd' },\n { name: 'marketplace.blades.fees.menu.dynamic.title', entityName: 'dynamic', icon: 'fa fa-usd' }\n ];\n $scope.blade.currentEntities = entities;\n $scope.blade.isLoading = false;\n\n $scope.blade.openBlade(entities[0]);\n };\n\n $scope.blade.openBlade = function (data) {\n $scope.selectedNodeId = data.entityName;\n\n var newBlade = {\n id: 'fees-' + data.entityName,\n title: 'marketplace.blades.fee-' + data.entityName + '-list.title',\n controller: 'virtoCommerce.marketplaceModule.fee' + data.entityName.charAt(0).toUpperCase() + data.entityName.slice(1) + 'ListController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/fee-' + data.entityName + '-list.tpl.html',\n sortDefault: true\n };\n bladeNavigationService.showBlade(newBlade, $scope.blade);\n }\n\n $scope.blade.headIcon = 'fa fa-usd';\n\n initializeBlade();\n }]);\n","angular.module('virtoCommerce.marketplaceModule').controller(\n 'virtoCommerce.marketplaceModule.masterCatalogController',\n [\n '$scope', 'virtoCommerce.catalogModule.catalogs', 'virtoCommerce.marketplaceModule.webApi',\n 'platformWebApp.bladeNavigationService', 'platformWebApp.uiGridHelper', 'platformWebApp.bladeUtils', '$timeout',\n function ($scope, catalogs, marketplaceWebApi, bladeNavigationService, uiGridHelper, bladeUtils, $timeout) {\n\n $scope.uiGridConstants = uiGridHelper.uiGridConstants;\n var blade = $scope.blade;\n blade.currentEntities = [];\n var selectedNode = null;\n\n blade.refresh = function () {\n blade.isLoading = true;\n\n if ($scope.pageSettings.currentPage !== 1)\n $scope.pageSettings.currentPage = 1;\n\n marketplaceWebApi.getSettings((settings) => {\n catalogs.search(getSearchCriteria([settings.masterCatalogId]), function (data) {\n blade.isLoading = false;\n $scope.pageSettings.totalItems = data.totalCount;\n blade.currentEntities = data.results;\n\n if (selectedNode) {\n //select the node in the new list\n selectedNode = _.findWhere(data.results, { id: selectedNode.id });\n }\n });\n });\n if ($scope.gridApi) {\n blade.currentEntities = [];\n }\n };\n\n function getSearchCriteria(ids) {\n return {\n catalogIds: ids,\n sort: uiGridHelper.getSortExpression($scope),\n skip: ($scope.pageSettings.currentPage - 1) * $scope.pageSettings.itemsPerPageCount,\n take: $scope.pageSettings.itemsPerPageCount\n };\n }\n\n $scope.selectNode = function (node) {\n selectedNode = node;\n $scope.selectedNodeId = selectedNode.id;\n\n openItemsBlade(node);\n\n // setting current catalog to be globally available \n bladeNavigationService.catalogsSelectedCatalog = selectedNode;\n bladeNavigationService.catalogsSelectedCategoryId = undefined;\n };\n\n function openItemsBlade(node) {\n var newBlade = {\n id: 'itemsList1',\n level: 1,\n breadcrumbs: blade.breadcrumbs,\n title: 'catalog.blades.categories-items-list.title',\n controller: 'virtoCommerce.catalogModule.categoriesItemsListController',\n template: 'Modules/$(VirtoCommerce.Catalog)/Scripts/blades/categories-items-list.tpl.html'\n };\n\n if (node.id)\n angular.extend(newBlade,\n {\n subtitle: 'catalog.blades.categories-items-list.subtitle',\n subtitleValues: { name: node.name },\n catalogId: node.id,\n catalog: node,\n securityScopes: node.securityScopes\n });\n else\n angular.extend(newBlade,\n {\n filterKeyword: filter.keyword,\n subtitle: 'catalog.blades.categories-items-list.subtitle-search',\n subtitleValues: { keyword: filter.keyword }\n });\n\n bladeNavigationService.showBlade(newBlade, blade);\n }\n\n $scope.editCatalog = function (catalog) {\n showCatalogBlade(catalog.id, null, catalog.name);\n };\n\n function showCatalogBlade(id, data, title) {\n var newBlade = {\n currentEntityId: id,\n currentEntity: data,\n title: title,\n id: 'catalogEdit',\n subtitle: 'catalog.blades.catalog-detail.subtitle',\n controller: 'virtoCommerce.catalogModule.catalogDetailController',\n template: 'Modules/$(VirtoCommerce.Catalog)/Scripts/blades/catalog-detail.tpl.html',\n };\n\n bladeNavigationService.showBlade(newBlade, blade);\n }\n\n blade.toolbarCommands = [\n {\n name: \"platform.commands.refresh\",\n icon: 'fa fa-refresh',\n executeMethod: blade.refresh,\n canExecuteMethod: function () {\n return true;\n }\n }\n ];\n\n // simple and advanced filtering\n var filter = blade.filter = { keyword: null };\n\n filter.criteriaChanged = function () {\n if (filter.keyword) {\n openItemsBlade({});\n } else\n bladeNavigationService.closeChildrenBlades(blade);\n\n selectedNode = null;\n $scope.selectedNodeId = null;\n bladeNavigationService.catalogsSelectedCatalog = undefined;\n bladeNavigationService.catalogsSelectedCategoryId = undefined;\n };\n\n $scope.setGridOptions = function (gridOptions) {\n bladeUtils.initializePagination($scope, true);\n $scope.pageSettings.itemsPerPageCount = 20;\n\n uiGridHelper.initialize($scope, gridOptions, function (gridApi) {\n //update gridApi for current grid\n $scope.gridApi = gridApi;\n\n uiGridHelper.bindRefreshOnSortChanged($scope);\n\n });\n\n // need to call refresh after digest cycle as we do not \"$watch\" for $scope.pageSettings.currentPage\n $timeout(function () {\n blade.refresh();\n });\n };\n }\n ]\n);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.offerDetailsController', ['$scope', 'platformWebApp.bladeNavigationService', 'virtoCommerce.marketplaceModule.webApi', 'virtoCommerce.catalogModule.items', 'platformWebApp.uiGridHelper', 'platformWebApp.ui-grid.extension', 'platformWebApp.dialogService', \n function ($scope, bladeNavigationService, marketplaceApi, catalogProducts, uiGridHelper, gridOptionExtension, dialogService) {\n $scope.uiGridConstants = uiGridHelper.uiGridConstants;\n var blade = $scope.blade;\n $scope.gridOptions = [];\n\n function initializeBlade(data) {\n blade.currentEntity = angular.copy(data);\n blade.originalEntity = data;\n\n if (!blade.sellerProduct) {\n catalogProducts.getByIds({ ids: blade.currentEntity.productId }, (data) => {\n if (data && data.length > 0) {\n blade.product = data[0];\n }\n });\n }\n\n blade.isLoading = false;\n }\n\n blade.refresh = function (parentRefresh) {\n blade.isLoading = true;\n marketplaceApi.getOfferById({ offerId: blade.currentEntity.id }, function (data) {\n initializeBlade(data);\n });\n\n if (parentRefresh) {\n blade.parentBlade.offersRefresh();\n }\n };\n\n blade.toolbarCommands = [\n {\n name: \"platform.commands.save\", icon: 'fas fa-save',\n executeMethod: saveChanges,\n canExecuteMethod: canSave\n },\n {\n name: \"platform.commands.reset\", icon: 'fa fa-undo',\n executeMethod: function () {\n angular.copy(blade.originalEntity, blade.currentEntity);\n },\n canExecuteMethod: isDirty\n },\n {\n name: \"platform.commands.delete\", icon: 'fas fa-trash-alt',\n executeMethod: deleteOffer,\n canExecuteMethod: function () {\n return true;\n }\n }\n ];\n\n blade.onClose = function (closeCallback) {\n bladeNavigationService.showConfirmationIfNeeded(isDirty(), canSave(), blade, saveChanges, closeCallback, \"marketplace.dialogs.offer-save.title\", \"marketplace.dialogs.offer-save.message\");\n };\n\n $scope.setForm = function (form) { $scope.formScope = form; };\n\n function isDirty() {\n return !angular.equals(blade.currentEntity, blade.originalEntity);\n }\n\n function canSave() {\n return isDirty() && $scope.formScope && $scope.formScope.$valid;\n }\n\n function saveChanges() {\n\n marketplaceApi.changeState({\n offerId: blade.currentEntity.id,\n isActive: blade.currentEntity.isActive,\n }, function () {\n blade.refresh(true);\n });\n }\n\n function deleteOffer() {\n var dialog = {\n id: \"confirmDeleteItem\",\n itemCount: 1,\n callback: function (remove) {\n if (remove) {\n bladeNavigationService.closeChildrenBlades(blade);\n blade.isLoading = true;\n\n marketplaceApi.deleteOffers({ ids: blade.currentEntity.id }, () => {\n blade.isLoading = false;\n blade.parentBlade.offersRefresh();\n $scope.bladeClose();\n });\n\n\n }\n }\n }\n dialogService.showDialog(dialog, 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/dialogs/deleteOffer-dialog.tpl.html', 'platformWebApp.confirmDialogController');\n }\n\n $scope.setGridOptions = function (gridId, gridOptions) {\n $scope.gridOptions[gridId] = gridOptions;\n gridOptionExtension.tryExtendGridOptions(gridId, gridOptions);\n\n gridOptions.onRegisterApi = function (gridApi) {\n $scope.gridApi = gridApi;\n $scope.gridApi.grid.gridHeight = 120;\n };\n };\n\n blade.refresh();\n }\n ]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.offerListController', ['$scope', 'virtoCommerce.marketplaceModule.webApi', 'platformWebApp.dialogService', 'platformWebApp.bladeUtils', 'platformWebApp.uiGridHelper', 'platformWebApp.ui-grid.extension',\n function ($scope, marketplaceApi, dialogService, bladeUtils, uiGridHelper, gridOptionExtension) {\n $scope.uiGridConstants = uiGridHelper.uiGridConstants;\n $scope.hasMore = true;\n $scope.listEntries = [];\n\n var blade = $scope.blade;\n blade.headIcon = 'fas fa-store';\n blade.showProductName = !blade.productId;\n blade.showOfferStock = !blade.showProductName;\n\n var bladeNavigationService = bladeUtils.bladeNavigationService;\n\n blade.refresh = function (needInfinite) {\n blade.isLoading = true;\n\n var searchCriteria = getSearchCriteria();\n\n if (blade.searchCriteria) {\n angular.extend(searchCriteria, blade.searchCriteria);\n }\n\n marketplaceApi.searchOffers(searchCriteria, function (data) {\n\n $scope.pageSettings.totalItems = data.totalCount;\n\n $scope.listEntries = $scope.listEntries.concat(data.results);\n $scope.hasMore = data.results.length === $scope.pageSettings.itemsPerPageCount;\n if (needInfinite) {\n $scope.gridApi.infiniteScroll.resetScroll(true, true);\n $scope.gridApi.infiniteScroll.dataLoaded();\n }\n blade.isLoading = false;\n });\n };\n\n blade.toolbarCommands = [\n {\n name: \"platform.commands.refresh\", icon: 'fa fa-refresh',\n executeMethod: function () {\n blade.offersRefresh(true);\n },\n canExecuteMethod: function () {\n return true;\n }\n }\n ];\n\n blade.offersRefresh = function () {\n $scope.listEntries = [];\n if ($scope.pageSettings.currentPage > 1) {\n $scope.pageSettings.currentPage = 1;\n } else {\n blade.refresh(true);\n }\n }\n\n var setSelectedNode = function (listItem) {\n $scope.selectedNodeId = listItem.id;\n };\n\n $scope.selectNode = function (listItem) {\n setSelectedNode(listItem);\n\n $scope.showDetails(listItem);\n }\n\n $scope.showDetails = function (listItem) {\n var newBlade = {\n id: 'offerDetails',\n title: listItem.name,\n subtitle: 'marketplace.blades.offer-details.subtitle',\n currentEntity: listItem,\n controller: 'virtoCommerce.marketplaceModule.offerDetailsController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/offer-details.tpl.html'\n };\n bladeNavigationService.showBlade(newBlade, blade);\n };\n\n $scope.delete = function (data) {\n deleteList([data]);\n };\n\n var filter = $scope.filter = { keyword: null };\n\n filter.criteriaChanged = function () {\n blade.offersRefresh();\n };\n\n $scope.setGridOptions = function (gridId, gridOptions) {\n $scope.gridOptions = gridOptions;\n gridOptionExtension.tryExtendGridOptions(gridId, gridOptions);\n\n gridOptions.onRegisterApi = function (gridApi) {\n $scope.gridApi = gridApi;\n gridApi.core.on.sortChanged($scope, function () {\n if (!blade.isLoading) {\n blade.offersRefresh();\n }\n });\n gridApi.infiniteScroll.on.needLoadMoreData($scope, showMore);\n };\n\n bladeUtils.initializePagination($scope);\n };\n\n function getSearchCriteria() {\n var searchCriteria = {\n keyword: filter.keyword ? filter.keyword : undefined,\n sort: uiGridHelper.getSortExpression($scope),\n skip: ($scope.pageSettings.currentPage - 1) * $scope.pageSettings.itemsPerPageCount,\n take: $scope.pageSettings.itemsPerPageCount\n };\n if (blade.productId) {\n searchCriteria.productId = blade.productId;\n }\n if (blade.sellerProductId) {\n searchCriteria.sellerProductId = blade.sellerProductId;\n }\n return searchCriteria;\n };\n\n function showMore() {\n if ($scope.hasMore) {\n\n ++$scope.pageSettings.currentPage;\n $scope.gridApi.infiniteScroll.saveScrollPercentage();\n $scope.gridApi.infiniteScroll.dataLoaded();\n }\n };\n }\n]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.orderFeeListController', ['$scope', 'platformWebApp.bladeUtils', 'platformWebApp.uiGridHelper', 'platformWebApp.ui-grid.extension',\n function ($scope, bladeUtils, uiGridHelper, gridOptionExtension) {\n $scope.uiGridConstants = uiGridHelper.uiGridConstants;\n var blade = $scope.blade;\n\n blade.refresh = function () {\n if (blade.lineItems) {\n blade.lineItems.forEach(x => angular.extend(x, { commissionName: x.feeDetails.find(o => true) ? x.feeDetails.find(o => true).description : undefined }));\n }\n\n blade.isLoading = false;\n };\n\n $scope.setGridOptions = function (gridId, gridOptions) {\n $scope.gridOptions = gridOptions;\n gridOptionExtension.tryExtendGridOptions(gridId, gridOptions);\n\n gridOptions.onRegisterApi = function (gridApi) {\n $scope.gridApi = gridApi;\n };\n };\n\n blade.refresh();\n\n }\n]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerAddController', ['$q', '$scope', 'virtoCommerce.catalogModule.listEntries', 'virtoCommerce.marketplaceModule.webApi', 'platformWebApp.bladeNavigationService', 'platformWebApp.settings',\n function ($q, $scope, listEntries, marketplaceApi, bladeNavigationService, settings) {\n var blade = $scope.blade;\n blade.isLoading = true;\n blade.command = {\n ownerDetails: { }\n };\n\n blade.refresh = function () {\n marketplaceApi.getSettings((settings) => {\n listEntries.listitemssearch(\n {\n catalogId: settings.masterCatalogId,\n objectTypes: ['Category'],\n searchInChildren: true,\n sort: 'path:desc',\n skip: 0,\n take: 1000\n },\n function (data) {\n blade.categories = data.listEntries;\n blade.categories.forEach(category => category.path = category.path.join(' / '));\n\n marketplaceApi.searchFees({ type: 'static', skip: 0, take: 1000 }, function (data) {\n blade.staticFees = data.results ? data.results : [];\n\n var commissionFee = blade.staticFees.find(staticFee => staticFee.isDefault);\n if (commissionFee) {\n blade.command.commissionFeeId = commissionFee.id;\n }\n\n blade.isLoading = false;\n });\n });\n });\n };\n\n blade.openStaticCommissions = function () {\n var newBlade = {\n id: 'fees-static',\n title: 'marketplace.blades.fee-static-list.title',\n controller: 'virtoCommerce.marketplaceModule.feeStaticListController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/fee-static-list.tpl.html',\n sortDefault: true,\n onClose: function (closeCallback) {\n marketplaceApi.searchFees({ type: 'static', skip: 0, take: 1000 }, function (data) {\n blade.staticFees = data.results ? data.results : [];\n });\n closeCallback();\n }\n };\n bladeNavigationService.showBlade(newBlade, $scope.blade);\n };\n\n blade.groups = settings.getValues({ id: 'Customer.MemberGroups' });\n\n $scope.saveChanges = function () {\n blade.isLoading = true;\n marketplaceApi.createSeller(blade.command, function () {\n $scope.bladeClose();\n blade.parentBlade.refresh();\n });\n }\n\n $scope.validateEmailAsync = function(value) {\n return marketplaceApi.validateSellerUser({\n sellerUser: { email: value }\n }).$promise.then(result => {\n if (!_.any(result, error => error.propertyName === 'Email')) {\n $scope.errorData = null;\n return $q.resolve();\n } else {\n $scope.errorData = _.filter(result, error => error.propertyName === 'Email')[0];\n return $q.reject();\n }\n });\n };\n\n $scope.setForm = function (form) { $scope.formScope = form; };\n\n blade.refresh();\n }\n]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerCategoryListController', [\n '$sessionStorage', '$localStorage', '$timeout', '$scope', 'virtoCommerce.marketplaceModule.webApi', 'virtoCommerce.catalogModule.items', 'virtoCommerce.catalogModule.listEntries', 'platformWebApp.bladeUtils', 'platformWebApp.dialogService', 'platformWebApp.authService', 'platformWebApp.uiGridHelper', 'virtoCommerce.catalogModule.catalogs', 'virtoCommerce.marketplaceModule.webApi',\n function ($sessionStorage, $localStorage, $timeout, $scope, api, items, listEntries, bladeUtils, dialogService, authService, uiGridHelper, catalogs, marketplaceWebApi) {\n $scope.uiGridConstants = uiGridHelper.uiGridConstants;\n $scope.hasMore = true;\n $scope.items = [];\n\n var blade = $scope.blade;\n var bladeNavigationService = bladeUtils.bladeNavigationService;\n if (blade.catalogId)\n blade.catalog = catalogs.get({ id: blade.catalogId });\n\n blade.refresh = function () {\n\n blade.isLoading = true;\n\n if ($scope.pageSettings.currentPage !== 1)\n $scope.pageSettings.currentPage = 1;\n\n var searchCriteria = getSearchCriteria();\n\n listEntries.listitemssearch(searchCriteria, function (data) {\n transformByFilters(data.listEntries);\n blade.isLoading = false;\n $scope.pageSettings.totalItems = data.totalCount;\n $scope.items = data.listEntries;\n $scope.hasMore = data.listEntries.length === $scope.pageSettings.itemsPerPageCount;\n\n //Set navigation breadcrumbs\n setBreadcrumbs();\n });\n\n if (blade.parentWidgetRefresh) {\n blade.parentWidgetRefresh();\n }\n\n //reset state grid\n resetStateGrid();\n }\n\n\n function showMore() {\n if ($scope.hasMore) {\n\n ++$scope.pageSettings.currentPage;\n $scope.gridApi.infiniteScroll.saveScrollPercentage();\n blade.isLoading = true;\n\n var searchCriteria = getSearchCriteria();\n\n listEntries.listitemssearch(\n searchCriteria,\n function (data) {\n transformByFilters(data.listEntries);\n blade.isLoading = false;\n $scope.pageSettings.totalItems = data.totalCount;\n $scope.items = $scope.items.concat(data.listEntries);\n $scope.hasMore = data.listEntries.length === $scope.pageSettings.itemsPerPageCount;\n $scope.gridApi.infiniteScroll.dataLoaded();\n\n $timeout(function () {\n // wait for grid to ingest data changes\n if ($scope.gridApi.selection.getSelectAllState()) {\n $scope.gridApi.selection.selectAllRows();\n }\n });\n\n });\n }\n }\n\n // Search Criteria\n function getSearchCriteria() {\n var searchCriteria = {\n catalogId: blade.catalogId,\n categoryId: blade.categoryId,\n keyword: filter.keyword ? filter.keyword : undefined,\n searchInVariations: filter.searchInVariations ? filter.searchInVariations : false,\n objectTypes: ['Category'],\n sort: uiGridHelper.getSortExpression($scope),\n skip: ($scope.pageSettings.currentPage - 1) * $scope.pageSettings.itemsPerPageCount,\n take: $scope.pageSettings.itemsPerPageCount\n };\n return searchCriteria;\n }\n\n //Breadcrumbs\n function setBreadcrumbs() {\n //Clone array (angular.copy leave a same reference)\n blade.breadcrumbs = blade.breadcrumbs.slice(0);\n\n if (!blade.catalogId) return;\n\n //catalog breadcrumb by default\n var breadCrumb = {\n id: blade.catalogId,\n name: blade.catalog.name,\n blade: blade\n };\n\n //if category need change to category breadcrumb\n if (angular.isDefined(blade.category)) {\n\n breadCrumb.id = blade.categoryId;\n breadCrumb.name = blade.category.name;\n }\n\n //prevent duplicate items\n if (!_.some(blade.breadcrumbs, function (x) { return x.id == breadCrumb.id })) {\n blade.breadcrumbs.push(breadCrumb);\n }\n\n breadCrumb.navigate = function (breadcrumb) {\n bladeNavigationService.closeBlade(blade,\n function () {\n blade.disableOpenAnimation = true;\n bladeNavigationService.showBlade(blade, blade.parentBlade);\n // blade.refresh();\n });\n };\n }\n\n //reset state grid (header checkbox, scroll)\n function resetStateGrid() {\n if ($scope.gridApi) {\n $scope.items = [];\n $scope.gridApi.selection.clearSelectedRows();\n $scope.gridApi.infiniteScroll.resetScroll(true, true);\n $scope.gridApi.infiniteScroll.dataLoaded();\n }\n }\n\n $scope.edit = function (listItem) {\n if (listItem.type === 'category') {\n blade.setSelectedItem(listItem);\n blade.showCategoryBlade(listItem);\n } else\n $scope.selectItem(null, listItem);\n };\n\n blade.showCategoryBlade = function (listItem) {\n var newBlade = {\n id: \"listCategoryDetail\",\n currentEntityId: listItem.id,\n catalog: blade.catalog,\n title: listItem.name,\n subtitle: 'catalog.blades.category-detail.subtitle',\n controller: 'virtoCommerce.catalogModule.categoryDetailController',\n template: 'Modules/$(VirtoCommerce.Catalog)/Scripts/blades/category-detail.tpl.html',\n };\n bladeNavigationService.showBlade(newBlade, blade);\n };\n\n $scope.cut = function (data) {\n cutList([data]);\n }\n\n function cutList(selection) {\n $sessionStorage.catalogClipboardContent = selection;\n }\n\n $scope.delete = function (data) {\n deleteList([data]);\n };\n\n function isItemsChecked() {\n return $scope.gridApi && $scope.gridApi.selection.getSelectedRows().filter(x=> x.type == 'category').length;\n }\n\n function deleteList(selection) {\n var categoryIds = selection.filter(x=> x.type == 'category').map(x=> x.id);\n \n var dialog = {\n id: \"confirmDeleteItem\",\n categoryCount: categoryIds.length,\n itemCount: 0,\n listCategoryLinkCount: 0,\n listItemLinkCount: 0,\n callback: function (remove) {\n if (remove) {\n bladeNavigationService.closeChildrenBlades(blade);\n blade.isLoading = true;\n\n if (categoryIds.length > 0) {\n marketplaceWebApi.deleteSellerCategories({ sellerId: blade.sellerId, categoryIds }, () => {\n blade.refresh();\n });\n }\n\n }\n }\n }\n dialogService.showDialog(dialog, 'Modules/$(VirtoCommerce.Catalog)/Scripts/dialogs/deleteCategoryItem-dialog.tpl.html', 'platformWebApp.confirmDialogController');\n }\n\n function mapChecked() {\n bladeNavigationService.closeChildrenBlades(blade);\n\n blade.isLoading = true;\n\n if ($scope.gridApi && $scope.gridApi.selection.getSelectAllState()) {\n marketplaceWebApi.createSellerCategories(\n {\n SearchCriteria: getSearchCriteria(),\n SellerId: blade.sellerId\n },\n function () {\n blade.refresh();\n blade.parentBlade.refresh();\n },\n function (error) {\n bladeNavigationService.setError('Error ' + error.status, blade);\n }\n );\n } else {\n var selection = $scope.gridApi.selection.getSelectedRows();\n var categoryIds = selection.filter(x => x.type == 'category').map(x => x.id);\n\n marketplaceWebApi.createSellerCategories({\n SellerId: blade.sellerId,\n CategoryIds: categoryIds\n }, function () {\n blade.refresh();\n blade.parentBlade.refresh();\n },\n function (error) { bladeNavigationService.setError('Error ' + error.status, blade); });\n }\n }\n\n blade.setSelectedItem = function (listItem) {\n $scope.selectedNodeId = listItem.id;\n };\n\n $scope.selectItem = function (e, listItem) {\n blade.setSelectedItem(listItem);\n var newBlade;\n if (listItem.type === 'category') {\n var openNewBlade = e.ctrlKey || filter.keyword;\n newBlade = {\n id: 'itemsList' + (blade.level + (openNewBlade ? 1 : 0)),\n level: blade.level + (openNewBlade ? 1 : 0),\n mode: blade.mode,\n isBrowsingLinkedCategory: blade.isBrowsingLinkedCategory || $scope.hasLinks(listItem),\n breadcrumbs: blade.breadcrumbs,\n title: 'catalog.blades.categories-items-list.title',\n subtitle: 'catalog.blades.categories-items-list.subtitle',\n subtitleValues: listItem.name !== null ? { name: listItem.name } : '',\n catalogId: blade.catalogId || listItem.catalogId,\n categoryId: listItem.id,\n category: listItem,\n catalog: blade.catalog,\n disableOpenAnimation: true,\n sellerId: blade.sellerId,\n masterCatalogId: blade.masterCatalogId,\n controller: 'virtoCommerce.marketplaceModule.sellerCategoryListController',\n template: 'Modules/$(VirtoCommerce.Catalog)/Scripts/blades/categories-items-list.tpl.html'\n };\n\n if (openNewBlade) {\n bladeNavigationService.showBlade(newBlade, blade);\n } else {\n bladeNavigationService.closeBlade(blade, function () {\n bladeNavigationService.showBlade(newBlade, blade.parentBlade);\n });\n }\n } else {\n newBlade = {\n id: \"listItemDetail\" + blade.mode,\n itemId: listItem.id,\n productType: listItem.productType,\n title: listItem.name,\n catalog: blade.catalog,\n controller: 'virtoCommerce.catalogModule.itemDetailController',\n template: 'Modules/$(VirtoCommerce.Catalog)/Scripts/blades/item-detail.tpl.html'\n };\n bladeNavigationService.showBlade(newBlade, blade);\n\n // setting current categoryId to be globally available\n bladeNavigationService.catalogsSelectedCategoryId = blade.categoryId;\n }\n };\n\n function generateBreadcrumbs(newBlade, listEntry, count) {\n var newBreadcrumbs = [];\n if (blade.catalog)\n newBreadcrumbs.push({\n id: blade.catalogId,\n name: blade.catalog.name,\n navigate: function (breadcrumb) {\n bladeNavigationService.closeBlade(newBlade,\n function () {\n newBlade.disableOpenAnimation = true;\n newBlade.categoryId = undefined;\n newBlade.category = undefined;\n newBlade.breadcrumbs = [];\n bladeNavigationService.showBlade(newBlade, blade);\n newBlade.refresh();\n });\n }\n });\n\n for (var i = 0; i < count; i++) {\n newBreadcrumbs.push({\n id: listEntry.outline[i],\n name: listEntry.path[i],\n navigate: function (breadcrumb) {\n bladeNavigationService.closeBlade(newBlade,\n function () {\n newBlade.disableOpenAnimation = true;\n newBlade.categoryId = breadcrumb.id;\n newBlade.category = breadcrumb;\n newBlade.breadcrumbs = generateBreadcrumbs(newBlade, listEntry, i - 1);\n bladeNavigationService.showBlade(newBlade, blade);\n newBlade.refresh();\n });\n }\n })\n }\n return newBreadcrumbs;\n }\n\n $scope.hasLinks = function (listEntry) {\n return blade.catalog && blade.catalog.isVirtual &&\n _.any(listEntry.links, function (l) {\n return l.catalogId === blade.catalogId && (!blade.categoryId || l.categoryId === blade.categoryId);\n });\n }\n\n if (angular.isDefined(blade.mode) && blade.mode === 'mappingSource') {\n\n blade.toolbarCommands = [\n {\n name: \"catalog.commands.map\",\n icon: 'fas fa-link',\n executeMethod: function () {\n mapChecked();\n },\n canExecuteMethod: isItemsChecked\n } \n ];\n }\n else {\n blade.toolbarCommands = [\n {\n name: \"platform.commands.refresh\",\n icon: 'fa fa-refresh',\n executeMethod: blade.refresh,\n canExecuteMethod: function () {\n return true;\n }\n },\n {\n name: \"platform.commands.add\",\n icon: 'fas fa-plus',\n executeMethod: function () {\n\n var newBlade = {\n id: 'itemsList' + (blade.level + 1),\n level: blade.level + 1,\n mode: 'mappingSource',\n breadcrumbs: [],\n title: 'marketplace.blades.seller-category-list.title-mapping',\n subtitle: 'marketplace.blades.seller-category-list.subtitle-mapping',\n catalogId: blade.masterCatalogId,\n sellerId: blade.sellerId,\n disableOpenAnimation: true,\n controller: 'virtoCommerce.marketplaceModule.sellerCategoryListController',\n template: 'Modules/$(VirtoCommerce.Catalog)/Scripts/blades/categories-items-list.tpl.html'\n };\n bladeNavigationService.showBlade(newBlade, blade);\n\n },\n canExecuteMethod: function () {\n return !blade.categoryId;\n }\n },\n {\n name: \"platform.commands.delete\",\n icon: 'fa fa-trash-o',\n executeMethod: function () { deleteList($scope.gridApi.selection.getSelectedRows()); },\n canExecuteMethod: isItemsChecked,\n permission: 'catalog:delete'\n }\n ];\n }\n \n\n // simple and advanced filtering\n var filter = blade.filter = { keyword: blade.filterKeyword };\n\n filter.criteriaChanged = function () {\n if (!blade.catalogId && !filter.keyword) {\n $scope.bladeClose();\n } else if ($scope.pageSettings.currentPage > 1) {\n $scope.pageSettings.currentPage = 1;\n } else {\n blade.refresh();\n }\n };\n\n function transformByFilters(data) {\n _.each(data, function (x) {\n x.$path = _.any(x.path) ? x.path.join(\" \\\\ \") : '\\\\';\n });\n }\n\n // ui-grid\n $scope.setGridOptions = function (gridOptions) {\n\n //disable watched\n bladeUtils.initializePagination($scope, true);\n //сhoose the optimal amount that ensures the appearance of the scroll\n $scope.pageSettings.itemsPerPageCount = 50;\n\n uiGridHelper.initialize($scope, gridOptions, function (gridApi) {\n //update gridApi for current grid\n $scope.gridApi = gridApi;\n\n uiGridHelper.bindRefreshOnSortChanged($scope);\n $scope.gridApi.infiniteScroll.on.needLoadMoreData($scope, showMore);\n });\n };\n\n\n //No need to call this because page 'pageSettings.currentPage' is watched!!! It would trigger subsequent duplicated req...\n //blade.refresh();\n }]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerDetailsController', ['$scope', 'platformWebApp.bladeNavigationService', 'virtoCommerce.marketplaceModule.webApi', 'platformWebApp.settings', 'virtoCommerce.marketplaceModule.approvalPolicyTranslationService',\n function ($scope, bladeNavigationService, marketplaceApi, settings, approvalPolicyTranslationService) {\n var blade = $scope.blade;\n blade.headIcon = 'fas fa-store';\n blade.isLoading = true;\n\n function initializeBlade(data) {\n blade.currentEntity = angular.copy(data);\n blade.originalEntity = data;\n blade.title = blade.currentEntity.name;\n\n marketplaceApi.searchFees({ type: 'static', skip: 0, take: 1000 }, function (data) {\n blade.staticFees = data.results ? data.results : [];\n\n blade.isLoading = false;\n });\n }\n\n blade.refresh = function (parentRefresh) {\n if (parentRefresh) {\n blade.parentBlade.refresh(true);\n }\n\n if (!blade.currentEntity && blade.sellerId) {\n marketplaceApi.getSellerById({ id: blade.sellerId }, (data) => {\n initializeBlade(data);\n });\n }\n else {\n blade.sellerId = blade.currentEntity.id;\n initializeBlade(blade.currentEntity);\n }\n };\n\n settings.getValues({ id: 'Marketplace.SellerApprovalPolicy' }, translateBladeApprovalPolicies);\n blade.openApprovalPolicySettingManagement = function () {\n var newBlade = {\n id: 'settingDetailChild',\n isApiSave: true,\n currentEntityId: 'Marketplace.SellerApprovalPolicy',\n parentRefresh: translateBladeApprovalPolicies,\n controller: 'platformWebApp.settingDictionaryController',\n template: '$(Platform)/Scripts/app/settings/blades/setting-dictionary.tpl.html'\n };\n bladeNavigationService.showBlade(newBlade, blade);\n };\n\n function translateBladeApprovalPolicies(data) {\n blade.approvalPolicies = approvalPolicyTranslationService.translateApprovalPolicies(data);\n }\n\n blade.toolbarCommands = [\n {\n name: \"platform.commands.save\", icon: 'fas fa-save',\n executeMethod: saveChanges,\n canExecuteMethod: function () {\n return blade.canSave();\n }\n },\n {\n name: \"platform.commands.reset\", icon: 'fa fa-undo',\n executeMethod: function () {\n angular.copy(blade.originalEntity, blade.currentEntity);\n },\n canExecuteMethod: isDirty\n }\n ];\n\n blade.onClose = function (closeCallback) {\n bladeNavigationService.showConfirmationIfNeeded(isDirty(), blade.canSave(), blade, saveChanges, closeCallback, \"marketplace.dialogs.seller-save.title\", \"marketplace.dialogs.seller-save.message\");\n };\n\n blade.openStaticCommissions = function () {\n var newBlade = {\n id: 'fees-static',\n title: 'marketplace.blades.fee-static-list.title',\n controller: 'virtoCommerce.marketplaceModule.feeStaticListController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/fee-static-list.tpl.html',\n sortDefault: true,\n onClose: function (closeCallback) {\n marketplaceApi.searchFees({ type: 'static', skip: 0, take: 1000 }, function (data) {\n blade.staticFees = data.results ? data.results : [];\n });\n closeCallback();\n }\n };\n bladeNavigationService.showBlade(newBlade, $scope.blade);\n };\n\n blade.groups = settings.getValues({ id: 'Customer.MemberGroups' });\n\n var originalBlade;\n blade.uploadLogo = function () {\n var newBlade = {\n id: \"logoUpload\",\n currentEntityId: 'seller_logos',\n title: 'platform.blades.asset-upload.title',\n subtitle: blade.currentEntity.name,\n controller: 'virtoCommerce.assetsModule.assetUploadController',\n template: 'Modules/$(VirtoCommerce.Assets)/Scripts/blades/asset-upload.tpl.html',\n fileUploadOptions: {\n singleFileMode: true,\n accept: \"image/*\",\n suppressParentRefresh: true\n }\n };\n newBlade.onUploadComplete = function (data) {\n if (data && data.length) {\n blade.currentEntity.logo = data[0].url;\n bladeNavigationService.closeBlade(newBlade);\n }\n }\n\n //saving orig blade reference (that is not imageUpload blade) for subsequent showBlade calls\n if (!originalBlade) {\n originalBlade = bladeNavigationService.currentBlade.id !== \"logoUpload\" ? bladeNavigationService.currentBlade : bladeNavigationService.currentBlade.parentBlade;\n }\n bladeNavigationService.showBlade(newBlade, originalBlade);\n }\n\n blade.clearLogo = function () {\n blade.currentEntity.logo = undefined;\n }\n\n blade.openUrl = function (url) {\n window.open(url, '_blank');\n }\n\n $scope.setForm = function (form) {\n $scope.formScope = form;\n };\n\n $scope.$on(\"new-notification-event\", function (event, notification) {\n if (notification.notifyType === \"SellerCommissionUpdatedDomainEvent\"\n && blade.currentEntity.id === notification.sellerId) {\n marketplaceApi.getFeeById({ id: notification.commissionFeeId }, function (data) {\n blade.currentEntity.commissionFee = data;\n blade.refresh(true);\n });\n }\n });\n\n function isDirty() {\n return !angular.equals(blade.currentEntity, blade.originalEntity);\n }\n\n blade.canSave = function () {\n return isDirty() && $scope.formScope && $scope.formScope.$valid;\n }\n\n function saveChanges() {\n blade.isLoading = true;\n\n marketplaceApi.updateSeller({\n sellerId: blade.currentEntity.id,\n sellerName: blade.currentEntity.name,\n commissionFeeId: blade.currentEntity.commissionFee.id,\n groups: blade.currentEntity.groups,\n sellerDetails: {\n name: blade.currentEntity.name,\n isActive: blade.currentEntity.isActive,\n logo: blade.currentEntity.logo,\n registrationId: blade.currentEntity.registrationId,\n outerId: blade.currentEntity.outerId,\n description: blade.currentEntity.description,\n approvalPolicy: blade.currentEntity.approvalPolicy,\n deliveryTime: blade.currentEntity.deliveryTime,\n addresses: blade.currentEntity.addresses,\n }\n }, function () {\n blade.refresh(true);\n });\n }\n\n blade.refresh();\n }\n ]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerImportHistoryDetailsController', ['$scope', \n function ($scope) {\n var blade = $scope.blade;\n blade.headIcon = 'fas fa-file-import';\n blade.isLoading = false;\n }\n ]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerImportHistoryListController', ['$scope', 'virtoCommerce.marketplaceModule.webApi', 'platformWebApp.bladeUtils', 'platformWebApp.uiGridHelper', 'platformWebApp.ui-grid.extension',\n function ($scope, marketplaceApi, bladeUtils, uiGridHelper, gridOptionExtension) {\n $scope.uiGridConstants = uiGridHelper.uiGridConstants;\n\n var blade = $scope.blade;\n blade.headIcon = 'fas fa-file-import';\n blade.title = 'marketplace.blades.import-history-list.title';\n\n var bladeNavigationService = bladeUtils.bladeNavigationService;\n\n blade.refresh = function () {\n blade.isLoading = true;\n\n var searchCriteria = getSearchCriteria();\n\n if (blade.searchCriteria) {\n angular.extend(searchCriteria, blade.searchCriteria);\n }\n\n marketplaceApi.searchImportHistory(searchCriteria, function (data) {\n\n $scope.pageSettings.totalItems = data.totalCount;\n var dataResults = data.results;\n dataResults.forEach(result => {\n let status = \"Completed\";\n if (!result.finished) {\n status = \"InProgress\";\n } else {\n if (result.processedCount == 0) {\n status = \"Failed\";\n }\n else {\n if (result.errorsCount > 0) {\n status = \"CompletedWithErrors\";\n }\n }\n }\n result.status = status;\n });\n $scope.listEntries = dataResults;\n\n blade.isLoading = false;\n });\n };\n\n blade.toolbarCommands = [\n {\n name: \"platform.commands.refresh\", icon: 'fa fa-refresh',\n executeMethod: function () {\n blade.refreshImportHistory();\n },\n canExecuteMethod: function () {\n return true;\n }\n }\n ];\n\n blade.refreshImportHistory = function () {\n if ($scope.pageSettings.currentPage > 1) {\n $scope.pageSettings.currentPage = 1;\n } else {\n blade.refresh();\n }\n }\n\n var setSelectedNode = function (listItem) {\n $scope.selectedNodeId = listItem.id;\n };\n\n $scope.selectNode = function (listItem) {\n setSelectedNode(listItem);\n\n $scope.showDetails(listItem);\n }\n\n $scope.showDetails = function (listItem) {\n var newBlade = {\n id: 'sellerImportHistoryDetails',\n title: listItem.profileName,\n currentEntity: listItem,\n controller: 'virtoCommerce.marketplaceModule.sellerImportHistoryDetailsController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/seller-import-history-details.tpl.html'\n };\n bladeNavigationService.showBlade(newBlade, blade);\n };\n\n $scope.delete = function (data) {\n deleteList([data]);\n };\n\n var filter = $scope.filter = { keyword: null };\n\n filter.criteriaChanged = function () {\n blade.refreshImportHistory();\n };\n\n $scope.setGridOptions = function (gridId, gridOptions) {\n $scope.gridOptions = gridOptions;\n gridOptionExtension.tryExtendGridOptions(gridId, gridOptions);\n\n gridOptions.onRegisterApi = function (gridApi) {\n $scope.gridApi = gridApi;\n gridApi.core.on.sortChanged($scope, function () {\n if (!blade.isLoading) {\n blade.refreshImportHistory();\n }\n });\n };\n\n bladeUtils.initializePagination($scope);\n };\n\n function getSearchCriteria() {\n var searchCriteria = {\n keyword: filter.keyword ? filter.keyword : undefined,\n sort: uiGridHelper.getSortExpression($scope),\n skip: ($scope.pageSettings.currentPage - 1) * $scope.pageSettings.itemsPerPageCount,\n take: $scope.pageSettings.itemsPerPageCount\n };\n\n if (blade.sellerId) {\n searchCriteria.sellerId = blade.sellerId;\n }\n return searchCriteria;\n };\n }\n]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerImportProfileDetailsController', ['$scope', 'platformWebApp.bladeNavigationService', 'platformWebApp.settings.helper', 'virtoCommerce.marketplaceModule.webApi',\n function ($scope, bladeNavigationService, settingsHelper, marketplaceApi) {\n var blade = $scope.blade;\n blade.isLoading = true;\n\n function initializeBlade(data) {\n if (!blade.isNew) {\n settingsHelper.fixValues(data.settings);\n }\n\n blade.currentEntity = !blade.isNew ? angular.copy(data) : { };\n blade.originalEntity = data;\n \n blade.command = {\n sellerId: blade.sellerId,\n sellerName: blade.sellerName,\n importProfileId: blade.currentEntity.id,\n importProfile: blade.currentEntity,\n };\n \n marketplaceApi.getImporters(function (data) {\n blade.isLoading = false;\n blade.importers = data.map(importer => {\n settingsHelper.fixValues(importer.availSettings)\n return importer;\n });\n if (!blade.isNew) {\n $scope.selectImporter(data.find(isCurrentImporter));\n }\n });\n }\n\n blade.refresh = function (parentRefresh) {\n initializeBlade(blade.currentEntity);\n\n if (parentRefresh) {\n blade.parentBlade.refresh(true);\n }\n };\n\n $scope.setForm = function (form) { $scope.formScope = form; };\n\n if (!blade.isNew) {\n blade.toolbarCommands = [\n {\n name: \"platform.commands.save\", icon: 'fas fa-save',\n executeMethod: function () {\n $scope.saveChanges();\n },\n canExecuteMethod: canSave\n },\n {\n name: \"platform.commands.reset\", icon: 'fa fa-undo',\n executeMethod: function () {\n angular.copy(blade.originalEntity, blade.currentEntity);\n },\n canExecuteMethod: isDirty\n },\n {\n name: \"platform.commands.delete\", icon: 'fas fa-trash-alt',\n executeMethod: function () {\n $scope.bladeClose();\n blade.parentBlade.delete(blade.originalEntity);\n },\n canExecuteMethod: function () { return true; }\n }\n ];\n\n blade.onClose = function (closeCallback) {\n bladeNavigationService.showConfirmationIfNeeded(isDirty(), canSave(), blade, $scope.saveChanges, closeCallback, \"marketplace.dialogs.seller-import-profile-save.title\", \"marketplace.dialogs.seller-import-profile-save.message\");\n };\n\n function isDirty() {\n return !angular.equals(blade.currentEntity, blade.originalEntity);\n }\n\n function canSave() {\n return isDirty() && $scope.formScope && $scope.formScope.$valid;\n }\n }\n\n $scope.saveChanges = function () {\n blade.isLoading = true;\n \n settingsHelper.toApiFormat(blade.currentEntity.settings);\n\n if (blade.isNew) {\n marketplaceApi.createSellerImportProfile(blade.command, function () {\n $scope.bladeClose();\n blade.refresh(true);\n });\n } else {\n marketplaceApi.updateSellerImportProfile(blade.command, function () {\n blade.refresh(true);\n });\n }\n }\n\n $scope.selectImporter = function (importer) {\n blade.importer = importer;\n if (blade.isNew) {\n blade.currentEntity.settings = !blade.isNew && isCurrentImporter(importer) ? blade.originalEntity.settings : importer.availSettings;\n }\n }\n\n function isCurrentImporter(importer) {\n return importer.typeName === blade.currentEntity.dataImporterType;\n }\n\n blade.refresh();\n }\n ]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerImportProfileListController',['$scope', 'platformWebApp.bladeUtils', 'platformWebApp.bladeNavigationService', 'platformWebApp.dialogService', 'virtoCommerce.marketplaceModule.webApi', 'platformWebApp.uiGridHelper', 'platformWebApp.ui-grid.extension',\n function ($scope, bladeUtils, bladeNavigationService, dialogService, marketplaceApi, uiGridHelper, gridOptionExtension) {\n $scope.uiGridConstants = uiGridHelper.uiGridConstants;\n\n var blade = $scope.blade;\n blade.headIcon = 'fas fa-file-import';\n\n blade.refresh = function () {\n blade.isLoading = true;\n\n var searchCriteria = getSearchCriteria();\n\n if (blade.searchCriteria) {\n angular.extend(searchCriteria, blade.searchCriteria);\n }\n\n marketplaceApi.searchSellerImportProfiles(searchCriteria, function (data) {\n blade.isLoading = false;\n\n $scope.pageSettings.totalItems = data.totalCount;\n\n $scope.listEntries = data.results ? data.results : [];\n });\n\n if (blade.parentWidgetRefresh) {\n blade.parentWidgetRefresh();\n }\n };\n\n blade.toolbarCommands = [\n {\n name: \"platform.commands.refresh\", icon: 'fa fa-refresh',\n executeMethod: blade.refresh,\n canExecuteMethod: function () {\n return true;\n }\n },\n {\n name: \"platform.commands.add\", icon: 'fas fa-plus',\n executeMethod: function () {\n $scope.showDetails(undefined, true);\n },\n canExecuteMethod: function () {\n return true;\n }\n },\n {\n name: \"platform.commands.delete\", icon: 'fas fa-trash-alt',\n executeMethod: function () { deleteList($scope.gridApi.selection.getSelectedRows()); },\n canExecuteMethod: function () {\n var selectedRows = $scope.gridApi && $scope.gridApi.selection.getSelectedRows();\n return selectedRows && _.any(selectedRows);\n }\n }\n ];\n\n var setSelectedNode = function (listItem) {\n $scope.selectedNodeId = listItem.id;\n };\n\n $scope.selectNode = function (listItem) {\n setSelectedNode(listItem);\n\n $scope.showDetails(listItem);\n }\n\n $scope.showDetails = function (listItem, isNew) {\n var newBlade = {\n id: isNew ? 'sellerImportProfileAdd' : 'sellerImportProfileDetails',\n isNew: isNew,\n currentEntity: listItem,\n sellerId: blade.sellerId,\n sellerName: blade.sellerName,\n title: isNew ? 'marketplace.blades.seller-import-profile-add.title' : listItem.name,\n subtitle: isNew ? 'marketplace.blades.seller-import-profile-add.subtitle' : 'marketplace.blades.seller-import-profile-details.subtitle',\n controller: 'virtoCommerce.marketplaceModule.sellerImportProfileDetailsController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/seller-import-profile-details.tpl.html'\n };\n bladeNavigationService.showBlade(newBlade, blade);\n }\n\n blade.delete = $scope.delete = function (data) {\n deleteList([data]);\n };\n\n function deleteList(selection) {\n var dialog = {\n id: \"confirmDeleteSellerImportProfile\",\n title: \"marketplace.dialogs.seller-import-profiles-delete.title\",\n message: \"marketplace.dialogs.seller-import-profiles-delete.message\",\n callback: function (remove) {\n if (remove) {\n blade.isLoading = true;\n var sellerImportProfileIds = _.pluck(selection, 'id');\n\n if (_.any(sellerImportProfileIds)) {\n marketplaceApi.deleteSellerImportProfiles({ ids: sellerImportProfileIds }, function () {\n $scope.gridApi.selection.clearSelectedRows();\n blade.refresh(true);\n });\n }\n }\n }\n };\n dialogService.showConfirmationDialog(dialog);\n }\n\n $scope.setGridOptions = function (gridId, gridOptions) {\n $scope.gridOptions = gridOptions;\n gridOptionExtension.tryExtendGridOptions(gridId, gridOptions);\n\n gridOptions.onRegisterApi = function (gridApi) {\n $scope.gridApi = gridApi;\n gridApi.core.on.sortChanged($scope, function () {\n if (!blade.isLoading) blade.refresh();\n });\n };\n\n bladeUtils.initializePagination($scope);\n };\n\n function getSearchCriteria() {\n var searchCriteria = {\n sellerId: blade.sellerId,\n sellerName: blade.sellerName,\n sort: uiGridHelper.getSortExpression($scope),\n skip: ($scope.pageSettings.currentPage - 1) * $scope.pageSettings.itemsPerPageCount,\n take: $scope.pageSettings.itemsPerPageCount\n };\n return searchCriteria;\n }\n }\n ]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerListController', ['$scope', 'virtoCommerce.marketplaceModule.webApi', 'platformWebApp.dialogService', 'platformWebApp.bladeUtils', 'platformWebApp.uiGridHelper', 'platformWebApp.ui-grid.extension', 'platformWebApp.metaFormsService',\n function ($scope, marketplaceApi, dialogService, bladeUtils, uiGridHelper, gridOptionExtension, metaFormsService) {\n $scope.uiGridConstants = uiGridHelper.uiGridConstants;\n\n var blade = $scope.blade;\n blade.headIcon = 'fas fa-store';\n\n var bladeNavigationService = bladeUtils.bladeNavigationService;\n\n blade.refresh = function (parentRefresh) {\n blade.isLoading = true;\n\n var searchCriteria = getSearchCriteria();\n\n if (blade.searchCriteria) {\n angular.extend(searchCriteria, blade.searchCriteria);\n }\n\n marketplaceApi.searchSellers(searchCriteria, function (data) {\n blade.isLoading = false;\n\n $scope.pageSettings.totalItems = data.totalCount;\n\n $scope.listEntries = data.results ? data.results : [];\n });\n\n if (parentRefresh && blade.parentRefresh) {\n blade.parentRefresh();\n }\n };\n\n if (!blade.customizeToolbar) {\n blade.toolbarCommands = [\n {\n name: \"platform.commands.refresh\", icon: 'fa fa-refresh',\n executeMethod: blade.refresh,\n canExecuteMethod: function () {\n return true;\n }\n },\n {\n name: \"platform.commands.add\", icon: 'fas fa-plus',\n executeMethod: function () {\n var newBlade = {\n id: 'sellerAdd',\n title: 'marketplace.blades.seller-add.title',\n subtitle: 'marketplace.blades.seller-add.subtitle',\n controller: 'virtoCommerce.marketplaceModule.sellerAddController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/seller-add.tpl.html'\n };\n bladeNavigationService.showBlade(newBlade, blade);\n },\n canExecuteMethod: function () {\n return true;\n }\n },\n {\n name: \"platform.commands.delete\", icon: 'fas fa-trash-alt',\n executeMethod: function () { deleteList($scope.gridApi.selection.getSelectedRows()); },\n canExecuteMethod: function () {\n return $scope.gridApi && _.any($scope.gridApi.selection.getSelectedRows());\n }\n }\n ];\n }\n\n var setSelectedNode = function (listItem) {\n $scope.selectedNodeId = listItem.id;\n };\n\n $scope.selectNode = function (listItem) {\n setSelectedNode(listItem);\n\n $scope.showDetails(listItem);\n }\n\n $scope.showDetails = function (listItem) {\n var foundMetaFields = metaFormsService.getMetaFields('Seller');\n var newBlade = {\n id: 'sellerDetails',\n title: listItem.name,\n subtitle: 'marketplace.blades.seller-details.subtitle',\n currentEntity: listItem,\n controller: 'virtoCommerce.marketplaceModule.sellerDetailsController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/seller-details.tpl.html',\n metaFields: foundMetaFields\n };\n bladeNavigationService.showBlade(newBlade, blade);\n };\n\n $scope.delete = function (data) {\n deleteList([data]);\n };\n\n function deleteList(selection) {\n var dialog = {\n id: \"confirmDeleteVendor\",\n title: \"marketplace.dialogs.sellers-delete.title\",\n message: \"marketplace.dialogs.sellers-delete.message\",\n callback: function (remove) {\n if (remove) {\n bladeNavigationService.closeChildrenBlades(blade, function () {\n blade.isLoading = true;\n\n var memberIds = _.pluck(selection, 'id');\n if (_.any(memberIds)) {\n marketplaceApi.deleteSellers({ ids: memberIds }, function() {\n $scope.gridApi.selection.clearSelectedRows();\n blade.refresh(true);\n });\n }\n });\n }\n }\n };\n dialogService.showConfirmationDialog(dialog);\n }\n\n var filter = $scope.filter = { keyword: null };\n\n filter.criteriaChanged = function () {\n if ($scope.pageSettings.currentPage > 1) {\n $scope.pageSettings.currentPage = 1;\n } else {\n blade.refresh();\n }\n };\n\n $scope.setGridOptions = function (gridId, gridOptions) {\n $scope.gridOptions = gridOptions;\n gridOptionExtension.tryExtendGridOptions(gridId, gridOptions);\n\n gridOptions.onRegisterApi = function (gridApi) {\n $scope.gridApi = gridApi;\n gridApi.core.on.sortChanged($scope, function () {\n if (!blade.isLoading) blade.refresh();\n });\n gridApi.selection.on.rowSelectionChanged($scope, function () {\n blade.selectedVendors = $scope.gridApi.selection.getSelectedRows();\n });\n gridApi.core.on.rowsRendered($scope, function () {\n $scope.updateSelections();\n })\n };\n\n bladeUtils.initializePagination($scope);\n };\n\n $scope.updateSelections = function () {\n if ($scope.gridApi && blade.selectedVendorIds) {\n _.each(blade.selectedVendorIds, x => {\n _.each($scope.gridApi.grid.rows, y => {\n if (y.entity.id === x) {\n y.isSelected = true;\n }\n })\n });\n }\n };\n\n function getSearchCriteria() {\n var searchCriteria = {\n keyword: filter.keyword ? filter.keyword : undefined,\n sort: uiGridHelper.getSortExpression($scope),\n skip: ($scope.pageSettings.currentPage - 1) * $scope.pageSettings.itemsPerPageCount,\n take: $scope.pageSettings.itemsPerPageCount\n };\n return searchCriteria;\n }\n }\n]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerPublicationRequestFilterController', ['$scope', '$localStorage', 'virtoCommerce.marketplaceModule.sellerPublicationRequestStatuses',\n function ($scope, $localStorage, statuses) {\n var blade = $scope.blade;\n\n blade.statuses = statuses;\n\n $scope.applyCriteria = function () {\n angular.copy(blade.currentEntity, blade.origEntity);\n if (blade.isNew) {\n $localStorage.sellerProductsFilters.push(blade.origEntity);\n $localStorage.sellerProductsFilterId = blade.origEntity.id;\n blade.parentBlade.filter.current = blade.origEntity;\n blade.isNew = false;\n }\n\n initializeBlade(blade.origEntity);\n blade.parentBlade.filter.criteriaChanged();\n // $scope.bladeClose();\n };\n \n $scope.saveChanges = function () {\n $scope.applyCriteria();\n };\n\n function initializeBlade(data) {\n blade.currentEntity = angular.copy(data);\n blade.origEntity = data;\n blade.isLoading = false;\n\n blade.title = blade.isNew ? 'marketplace.blades.seller-publication-request-filter.title-new' : data.name;\n blade.subtitle = blade.isNew ? 'marketplace.blades.seller-publication-request-filter.subtitle-new' : 'marketplace.blades.seller-publication-request-filter.subtitle';\n };\n\n var formScope;\n $scope.setForm = function (form) { formScope = form; }\n\n function isDirty() {\n return !angular.equals(blade.currentEntity, blade.origEntity);\n };\n\n blade.headIcon = 'fa fa-filter';\n\n blade.toolbarCommands = [\n {\n name: \"core.commands.apply-filter\", icon: 'fa fa-filter',\n executeMethod: function () {\n $scope.saveChanges();\n },\n canExecuteMethod: function () {\n return formScope && formScope.$valid;\n }\n },\n {\n name: \"platform.commands.reset\", icon: 'fa fa-undo',\n executeMethod: function () {\n angular.copy(blade.origEntity, blade.currentEntity);\n },\n canExecuteMethod: isDirty\n },\n {\n name: \"platform.commands.delete\", icon: 'fas fa-trash-alt',\n executeMethod: deleteEntry,\n canExecuteMethod: function () {\n return !blade.isNew;\n }\n }];\n\n\n function deleteEntry() {\n blade.parentBlade.filter.current = null;\n $localStorage.sellerProductsFilters.splice($localStorage.sellerProductsFilters.indexOf(blade.origEntity), 1);\n delete $localStorage.sellerProductsFilterId;\n blade.parentBlade.refresh();\n $scope.bladeClose();\n }\n\n // actions on load\n if (blade.isNew) { \n initializeBlade({ id: new Date().getTime() });\n \n } else {\n initializeBlade(blade.data);\n }\n }]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerPublicationRequestListController', [\n '$localStorage', '$timeout', '$scope', 'virtoCommerce.marketplaceModule.webApi', 'platformWebApp.bladeUtils', 'platformWebApp.dialogService', 'platformWebApp.uiGridHelper', 'virtoCommerce.marketplaceModule.sellerPublicationRequestStatuses',\n function ($localStorage, $timeout, $scope, api, bladeUtils, dialogService, uiGridHelper, statuses) {\n $scope.uiGridConstants = uiGridHelper.uiGridConstants;\n $scope.hasMore = true;\n $scope.items = [];\n\n var blade = $scope.blade;\n var bladeNavigationService = bladeUtils.bladeNavigationService;\n\n blade.refresh = function () {\n blade.isLoading = true;\n\n if ($scope.pageSettings.currentPage !== 1)\n $scope.pageSettings.currentPage = 1;\n\n var searchCriteria = getSearchCriteria();\n\n api.listitemssearch(searchCriteria, function (data) {\n transformByFilters(data.results);\n blade.isLoading = false;\n blade.approvalRequestSent = false;\n $scope.pageSettings.totalItems = data.totalCount;\n $scope.items = data.results;\n $scope.hasMore = data.results.length === $scope.pageSettings.itemsPerPageCount;\n });\n\n if (blade.parentWidgetRefresh) {\n blade.parentWidgetRefresh();\n }\n\n //reset state grid\n resetStateGrid();\n }\n\n\n function showMore() {\n if ($scope.hasMore) {\n\n ++$scope.pageSettings.currentPage;\n $scope.gridApi.infiniteScroll.saveScrollPercentage();\n blade.isLoading = true;\n\n var searchCriteria = getSearchCriteria();\n\n api.listitemssearch(\n searchCriteria,\n function (data) {\n transformByFilters(data.results);\n blade.isLoading = false;\n $scope.pageSettings.totalItems = data.totalCount;\n $scope.items = $scope.items.concat(data.results);\n $scope.hasMore = data.results.length === $scope.pageSettings.itemsPerPageCount;\n $scope.gridApi.infiniteScroll.dataLoaded();\n\n $timeout(function () {\n // wait for grid to ingest data changes\n if ($scope.gridApi.selection.getSelectAllState()) {\n $scope.gridApi.selection.selectAllRows();\n }\n });\n\n });\n }\n }\n\n // Search Criteria\n function getSearchCriteria() {\n var searchCriteria = {\n searchFromAllSellers: true,\n sort: uiGridHelper.getSortExpression($scope),\n keyword: filter.keyword,\n skip: ($scope.pageSettings.currentPage - 1) * $scope.pageSettings.itemsPerPageCount,\n take: $scope.pageSettings.itemsPerPageCount\n };\n\n if (filter.current) {\n angular.extend(searchCriteria, filter.current);\n }\n\n if (blade.searchCriteria) {\n angular.extend(searchCriteria, blade.searchCriteria);\n }\n\n return searchCriteria;\n }\n\n //reset state grid (header checkbox, scroll)\n function resetStateGrid() {\n if ($scope.gridApi) {\n $scope.items = [];\n $scope.gridApi.selection.clearSelectedRows();\n $scope.gridApi.infiniteScroll.resetScroll(true, true);\n $scope.gridApi.infiniteScroll.dataLoaded();\n }\n }\n\n $scope.edit = function (listItem) {\n $scope.selectItem(null, listItem);\n };\n\n blade.showCategoryBlade = function (listItem) {\n var newBlade = {\n id: \"listCategoryDetail\",\n currentEntityId: listItem.id,\n catalog: blade.catalog,\n title: listItem.name,\n subtitle: 'catalog.blades.category-detail.subtitle',\n controller: 'virtoCommerce.catalogModule.categoryDetailController',\n template: 'Modules/$(VirtoCommerce.Catalog)/Scripts/blades/category-detail.tpl.html',\n };\n bladeNavigationService.showBlade(newBlade, blade);\n };\n\n function isItemsChecked() {\n if ($scope.gridApi && $scope.gridApi.selection){\n var selectedRows = $scope.gridApi.selection.getSelectedRows();\n if (selectedRows.length > 0 && selectedRows.length === selectedRows.filter(x => x.status.includes('WaitForApproval')).length) {\n return true;\n }\n }\n return false;\n }\n\n $scope.canChangeStatus = function (data) {\n return data && data.status.includes('WaitForApproval') && !blade.approvalRequestSent;\n };\n\n $scope.approve = function (data) {\n massChangeStatus([data], 'Approved');\n };\n\n $scope.decline = function (data) {\n massChangeStatus([data], 'Rejected');\n };\n\n function massChangeStatus(selection, status) {\n var list = _.where(selection, { canBeModified: false });\n blade.approvalRequestSent = true;\n\n var operationName = status === 'Approved' ? 'Approve' : 'Decline';\n\n if (_.any(list)) {\n var dialog = {\n id: \"massChangeStatus\",\n title: \"Mass operation\",\n message: `${operationName} ${list.length} selected products?`,\n callback: function (remove) {\n if (remove) {\n blade.isLoading = true;\n api.massChangeStatus({ status }, { objectIds: _.pluck(list, 'id') }, blade.refresh);\n }\n }\n }\n dialogService.showConfirmationDialog(dialog);\n }\n } \n\n blade.setSelectedItem = function (listItem) {\n $scope.selectedNodeId = listItem.id;\n };\n\n $scope.selectItem = function (e, listItem) {\n blade.setSelectedItem(listItem);\n\n var newBlade = {\n id: \"listItemDetail\" + blade.mode,\n itemId: listItem.productData.id,\n sellerProduct: listItem,\n productType: listItem.productData.productType,\n title: listItem.name,\n catalog: blade.catalog,\n controller: 'virtoCommerce.catalogModule.itemDetailController',\n template: 'Modules/$(VirtoCommerce.Catalog)/Scripts/blades/item-detail.tpl.html'\n };\n bladeNavigationService.showBlade(newBlade, blade);\n };\n\n $scope.canBeModified = (product) => {\n return !product.canBeModified;\n }\n\n blade.toolbarCommands = [\n {\n name: \"platform.commands.refresh\",\n icon: 'fa fa-refresh',\n executeMethod: blade.refresh,\n canExecuteMethod: function () { return true; }\n },\n {\n name: \"marketplace.blades.seller-publication-request-list.menu.approve\",\n icon: 'fa fa-cloud-upload',\n executeMethod: function () { massChangeStatus($scope.gridApi.selection.getSelectedRows(), \"Approved\"); },\n canExecuteMethod: isItemsChecked,\n },\n {\n name: \"marketplace.blades.seller-publication-request-list.menu.decline\",\n icon: 'fa fa-unlink',\n executeMethod: function () { massChangeStatus($scope.gridApi.selection.getSelectedRows(), \"Rejected\"); },\n canExecuteMethod: isItemsChecked,\n }\n ];\n\n function transformByFilters(data) {\n _.each(data, function (x) {\n \n });\n }\n\n\n // simple and advanced filtering\n var filter = blade.filter = $scope.filter = {};\n $scope.$localStorage = $localStorage;\n if (!$localStorage.sellerProductsFilters) {\n $localStorage.sellerProductsFilters = [{ name: 'marketplace.blades.seller-publication-request-list.filters.add-new' }];\n }\n var stagedOrPublishedFilter = _.findWhere($localStorage.sellerProductsFilters, { id: 'staged-or-published' });\n if (!stagedOrPublishedFilter) {\n $localStorage.sellerProductsFilters.unshift({\n id: 'staged-or-published',\n name: 'marketplace.blades.seller-publication-request-list.filters.staged-or-published',\n status: statuses\n });\n }\n var draftProductsFilter = _.findWhere($localStorage.sellerProductsFilters, { id: 'draft-products' });\n if (!draftProductsFilter) {\n $localStorage.sellerProductsFilters.unshift({\n id: 'draft-products',\n name: 'marketplace.blades.seller-publication-request-list.filters.draft-products',\n status: ['None']\n });\n }\n if ($localStorage.sellerProductsFilterId) {\n filter.current = _.findWhere($localStorage.sellerProductsFilters, { id: $localStorage.sellerProductsFilterId });\n }\n\n filter.change = function () {\n $localStorage.sellerProductsFilterId = filter.current ? filter.current.id : null;\n if (filter.current && !filter.current.id) {\n filter.current = null;\n showFilterDetailBlade({ isNew: true });\n } else {\n bladeNavigationService.closeBlade({ id: 'filterDetail' });\n filter.criteriaChanged();\n }\n };\n\n filter.edit = function () {\n if (filter.current) {\n showFilterDetailBlade({ data: filter.current });\n }\n };\n\n function showFilterDetailBlade(bladeData) {\n var newBlade = {\n id: 'filterDetail',\n controller: 'virtoCommerce.marketplaceModule.sellerPublicationRequestFilterController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/seller-publication-request-filter.tpl.html'\n };\n angular.extend(newBlade, bladeData);\n bladeNavigationService.showBlade(newBlade, blade);\n }\n\n filter.criteriaChanged = function () {\n if ($scope.pageSettings.currentPage > 1) {\n $scope.pageSettings.currentPage = 1;\n } else {\n blade.refresh();\n }\n };\n\n\n // ui-grid\n $scope.setGridOptions = function (gridOptions) {\n\n //disable watched\n bladeUtils.initializePagination($scope, true);\n //сhoose the optimal amount that ensures the appearance of the scroll\n $scope.pageSettings.itemsPerPageCount = 50;\n\n uiGridHelper.initialize($scope, gridOptions, function (gridApi) {\n //update gridApi for current grid\n $scope.gridApi = gridApi;\n\n uiGridHelper.bindRefreshOnSortChanged($scope);\n $scope.gridApi.infiniteScroll.on.needLoadMoreData($scope, showMore);\n });\n\n $scope.$watch('blade.filter.showPublished', blade.refresh);\n };\n\n //No need to call this because page 'pageSettings.currentPage' is watched!!! It would trigger subsequent duplicated req...\n }]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerUserDetailsController', ['$q', '$scope', 'platformWebApp.bladeNavigationService', 'virtoCommerce.marketplaceModule.webApi',\n function ($q, $scope, bladeNavigationService, marketplaceApi) {\n var blade = $scope.blade;\n blade.isLoading = false;\n\n function initializeBlade(data) {\n blade.currentEntity = !blade.isNew ? angular.copy(data) : { role: 'vcmp-agent-role' };\n blade.originalEntity = data;\n blade.command = {\n sellerId: blade.sellerId,\n sellerUserId: blade.currentEntity.id,\n userDetails: blade.currentEntity\n };\n blade.isReadonly = blade.currentEntity.role === 'vcmp-owner-role';\n blade.isLoading = false;\n }\n\n blade.refresh = function (parentRefresh) {\n initializeBlade(blade.currentEntity);\n\n if (parentRefresh) {\n blade.parentBlade.refresh(true);\n }\n };\n\n $scope.setForm = function (form) { $scope.formScope = form; };\n\n $scope.validateEmailAsync = function (value) {\n if (!blade.isNew) {\n return $q.resolve();\n }\n\n return marketplaceApi.validateSellerUser({\n sellerUser: { email: value }\n }).$promise.then(result => {\n if (!_.any(result, error => error.propertyName === 'Email')) {\n $scope.errorData = null;\n return $q.resolve();\n } else {\n $scope.errorData = _.filter(result, error => error.propertyName === 'Email')[0];\n return $q.reject();\n }\n });\n };\n\n if (!blade.isNew) {\n blade.toolbarCommands = [\n {\n name: \"platform.commands.save\", icon: 'fas fa-save',\n executeMethod: function() {\n $scope.saveChanges();\n },\n canExecuteMethod: canSave\n },\n {\n name: \"platform.commands.reset\", icon: 'fa fa-undo',\n executeMethod: function () {\n angular.copy(blade.originalEntity, blade.currentEntity);\n },\n canExecuteMethod: isDirty\n },\n {\n name: \"marketplace.commands.resend-invite\", icon: 'fa fa-paper-plane',\n executeMethod: function () {\n $scope.sendInvite();\n },\n canExecuteMethod: function() { return true; }\n }\n ];\n\n blade.onClose = function (closeCallback) {\n bladeNavigationService.showConfirmationIfNeeded(isDirty(), canSave(), blade, $scope.saveChanges, closeCallback, \"marketplace.dialogs.seller-user-save.title\", \"marketplace.dialogs.seller-user-save.message\");\n };\n\n function isDirty() {\n return !angular.equals(blade.currentEntity, blade.originalEntity);\n }\n\n function canSave() {\n return isDirty() && $scope.formScope && $scope.formScope.$valid;\n }\n }\n\n $scope.saveChanges = function() {\n blade.isLoading = true;\n\n if (blade.isNew) {\n blade.command.sendInvitation = true;\n marketplaceApi.createSellerUser(blade.command, function () {\n $scope.bladeClose();\n blade.refresh(true);\n });\n } else {\n marketplaceApi.updateSellerUser(blade.command, function() {\n blade.refresh(true);\n });\n }\n }\n\n $scope.sendInvite = function () {\n blade.isLoading = true;\n marketplaceApi.sendSellerUserInvitation({\n sellerId: blade.sellerId,\n sellerUserId: blade.currentEntity.id\n }, function () {\n blade.isLoading = false;\n });\n }\n\n blade.roles = [\n \"vcmp-admin-role\",\n \"vcmp-agent-role\"\n ];\n\n blade.refresh();\n }\n ]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerUserListController', ['$scope', 'platformWebApp.bladeUtils', 'platformWebApp.bladeNavigationService', 'platformWebApp.dialogService', 'virtoCommerce.marketplaceModule.webApi', 'platformWebApp.uiGridHelper', 'platformWebApp.ui-grid.extension',\n function ($scope, bladeUtils, bladeNavigationService, dialogService, marketplaceApi, uiGridHelper, gridOptionExtension) {\n $scope.uiGridConstants = uiGridHelper.uiGridConstants;\n\n var blade = $scope.blade;\n blade.headIcon = 'fas fa-users';\n\n blade.refresh = function () {\n blade.isLoading = true;\n\n var searchCriteria = getSearchCriteria();\n\n if (blade.searchCriteria) {\n angular.extend(searchCriteria, blade.searchCriteria);\n }\n\n marketplaceApi.searchSellerUsers(searchCriteria, function (data) {\n blade.isLoading = false;\n\n $scope.pageSettings.totalItems = data.totalCount;\n\n $scope.listEntries = data.results ? data.results : [];\n });\n\n if (blade.parentWidgetRefresh) {\n blade.parentWidgetRefresh();\n }\n };\n\n blade.toolbarCommands = [\n {\n name: \"platform.commands.refresh\", icon: 'fa fa-refresh',\n executeMethod: blade.refresh,\n canExecuteMethod: function () {\n return true;\n }\n },\n {\n name: \"platform.commands.add\", icon: 'fas fa-plus',\n executeMethod: function () {\n $scope.showDetails(undefined, true);\n },\n canExecuteMethod: function () {\n return true;\n }\n },\n {\n name: \"platform.commands.delete\", icon: 'fas fa-trash-alt',\n executeMethod: function () { deleteList($scope.gridApi.selection.getSelectedRows()); },\n canExecuteMethod: function () {\n var selectedRows = $scope.gridApi && $scope.gridApi.selection.getSelectedRows();\n return selectedRows && _.any(selectedRows) && !_.any(selectedRows, $scope.isOwner);\n }\n }\n ];\n\n $scope.isOwner = function (listItem) {\n return listItem && listItem.role === 'vcmp-owner-role';\n }\n\n var setSelectedNode = function (listItem) {\n $scope.selectedNodeId = listItem.id;\n };\n\n $scope.selectNode = function (listItem) {\n setSelectedNode(listItem);\n\n $scope.showDetails(listItem);\n }\n\n $scope.showDetails = function (listItem, isNew) {\n var newBlade = {\n id: isNew ? 'sellerUserAdd' : 'sellerUserDetails',\n isNew: isNew,\n currentEntity: listItem,\n sellerId: blade.sellerId,\n title: isNew ? 'marketplace.blades.seller-user-add.title' : listItem.fullName,\n subtitle: isNew ? 'marketplace.blades.seller-user-add.subtitle' : 'marketplace.blades.seller-user-details.subtitle',\n controller: 'virtoCommerce.marketplaceModule.sellerUserDetailsController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/seller-user-details.tpl.html'\n };\n bladeNavigationService.showBlade(newBlade, blade);\n }\n\n $scope.delete = function (data) {\n deleteList([data]);\n };\n\n function deleteList(selection) {\n var dialog = {\n id: \"confirmDeleteSellerUser\",\n title: \"marketplace.dialogs.seller-users-delete.title\",\n message: \"marketplace.dialogs.seller-users-delete.message\",\n callback: function (remove) {\n if (remove) {\n blade.isLoading = true;\n var sellerUserIds = _.pluck(selection, 'id');\n\n if (_.any(sellerUserIds)) {\n marketplaceApi.deleteSellerUsers({ ids: sellerUserIds }, function () {\n $scope.gridApi.selection.clearSelectedRows();\n blade.refresh(true);\n });\n }\n }\n }\n };\n dialogService.showConfirmationDialog(dialog);\n }\n\n $scope.setGridOptions = function (gridId, gridOptions) {\n $scope.gridOptions = gridOptions;\n gridOptionExtension.tryExtendGridOptions(gridId, gridOptions);\n\n gridOptions.onRegisterApi = function (gridApi) {\n $scope.gridApi = gridApi;\n gridApi.core.on.sortChanged($scope, function () {\n if (!blade.isLoading) blade.refresh();\n });\n };\n\n bladeUtils.initializePagination($scope);\n };\n\n function getSearchCriteria() {\n var searchCriteria = {\n sellerId: blade.sellerId,\n sort: uiGridHelper.getSortExpression($scope),\n skip: ($scope.pageSettings.currentPage - 1) * $scope.pageSettings.itemsPerPageCount,\n take: $scope.pageSettings.itemsPerPageCount\n };\n return searchCriteria;\n }\n }\n]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.stateMachineDetailController', ['$scope', 'platformWebApp.bladeNavigationService', 'platformWebApp.dialogService', 'virtoCommerce.marketplaceModule.webApi',\n function ($scope, bladeNavigationService, dialogService, smApi) {\n var blade = $scope.blade;\n blade.headIcon = 'far fa-plus-square';\n blade.title = '';\n\n blade.refresh = function () {\n if (!blade.isNew) {\n blade.currentEntity.statesSerialized = JSON.stringify(blade.currentEntity.states, null, 2);\n }\n blade.origEntity = angular.copy(blade.currentEntity);\n blade.isLoading = false;\n };\n \n $scope.setForm = function (form) { $scope.formScope = form; }\n\n function isDirty() {\n return !angular.equals(blade.currentEntity, blade.origEntity);\n }\n\n $scope.saveChanges = function () {\n blade.currentEntity.states = JSON.parse(blade.currentEntity.statesSerialized);\n if (!blade.currentEntity.version) {\n blade.currentEntity.version = '0';\n }\n smApi.updateStateMachineDefinition({ definition: blade.currentEntity },\n function (data) {\n $scope.bladeClose();\n blade.parentBlade.refresh(true);\n },\n function (error) { bladeNavigationService.setError('Error ' + error.status, blade); });\n };\n\n blade.toolbarCommands = [\n {\n name: \"platform.commands.save\", icon: 'fas fa-save',\n executeMethod: function () {\n $scope.saveChanges();\n },\n canExecuteMethod: function () {\n return isDirty() && $scope.formScope && $scope.formScope.$valid;\n }\n },\n {\n name: \"platform.commands.reset\", icon: 'fa fa-undo',\n executeMethod: function () {\n angular.copy(blade.origEntity, blade.currentEntity);\n },\n canExecuteMethod: isDirty\n }\n ];\n\n blade.refresh();\n }]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.stateMachineListController', ['$timeout', '$scope', 'platformWebApp.bladeUtils', 'virtoCommerce.marketplaceModule.webApi', 'platformWebApp.uiGridHelper',\n function ($timeout, $scope, bladeUtils, api, uiGridHelper) {\n var blade = $scope.blade;\n blade.headIcon = 'far fa-plus-square';\n blade.title = 'marketplace.blades.state-machine-list.title';\n blade.subtitle = '';\n $scope.uiGridConstants = uiGridHelper.uiGridConstants;\n $scope.hasMore = true;\n $scope.items = [];\n\n var bladeNavigationService = bladeUtils.bladeNavigationService;\n blade.isLoading = true;\n\n blade.refresh = function (parentRefresh) {\n $scope.items = [];\n\n if ($scope.pageSettings.currentPage !== 1) {\n $scope.pageSettings.currentPage = 1;\n }\n\n loadData(function () {\n if (parentRefresh && blade.parentRefresh) {\n blade.parentRefresh();\n }\n });\n\n resetStateGrid();\n };\n\n function loadData(callback) {\n blade.isLoading = true;\n\n var pagedDataQuery = {\n objectType: blade.objectType,\n skip: ($scope.pageSettings.currentPage - 1) * $scope.pageSettings.itemsPerPageCount,\n take: $scope.pageSettings.itemsPerPageCount\n }\n api.searchStateMachineDefinition(\n pagedDataQuery,\n function (data) {\n blade.isLoading = false;\n $scope.pageSettings.totalItems = data.totalCount;\n $scope.items = $scope.items.concat(data.results);\n $scope.hasMore = data.results.length === $scope.pageSettings.itemsPerPageCount;\n\n if (callback) {\n callback();\n }\n });\n }\n\n function resetStateGrid() {\n if ($scope.gridApi) {\n $scope.items = [];\n $scope.gridApi.infiniteScroll.resetScroll(true, true);\n $scope.gridApi.infiniteScroll.dataLoaded();\n }\n }\n\n blade.setSelectedItem = function (listItem) {\n $scope.selectedNodeId = listItem.id;\n };\n\n $scope.selectItem = function (e, listItem) {\n blade.setSelectedItem(listItem);\n\n var newBlade = {\n subtitle: '',\n currentEntity: listItem\n };\n openDetailsBlade(newBlade);\n };\n\n function openDetailsBlade(node) {\n\n var newBlade = {\n id: \"stateMachineDetail\",\n objectType: blade.objectType,\n controller: 'virtoCommerce.marketplaceModule.stateMachineDetailController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/state-machine-detail.tpl.html'\n };\n angular.extend(newBlade, node);\n\n bladeNavigationService.showBlade(newBlade, blade);\n }\n\n function showMore() {\n if ($scope.hasMore) {\n ++$scope.pageSettings.currentPage;\n $scope.gridApi.infiniteScroll.saveScrollPercentage();\n loadData(function () {\n $scope.gridApi.infiniteScroll.dataLoaded();\n });\n }\n }\n\n blade.toolbarCommands = [\n {\n name: \"Refresh\", icon: 'fa fa-refresh',\n executeMethod: blade.refresh,\n canExecuteMethod: function () {\n return true;\n }\n },\n {\n name: \"New\", icon: 'fas fa-plus',\n executeMethod: function () {\n $scope.selectedNodeId = undefined;\n var newBlade = {\n subtitle: '',\n isNew: true,\n onChangesConfirmedFn: function (entry) {\n $scope.selectedNodeId = entry.id;\n }\n };\n openDetailsBlade(newBlade);\n },\n canExecuteMethod: function () {\n return true;\n }\n }\n ];\n\n $scope.setGridOptions = function (gridOptions) {\n bladeUtils.initializePagination($scope, true);\n $scope.pageSettings.itemsPerPageCount = 20;\n uiGridHelper.initialize($scope, gridOptions, function (gridApi) {\n $scope.gridApi = gridApi;\n $scope.gridApi.infiniteScroll.on.needLoadMoreData($scope, showMore);\n });\n\n $timeout(function () {\n blade.refresh();\n });\n };\n\n }]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.stateMachineOrderDetailController', ['$scope', 'virtoCommerce.marketplaceModule.webApi',\n function ($scope, smApi) {\n var blade = $scope.blade;\n blade.headIcon = 'far fa-plus-square';\n blade.title = '';\n\n function initializeBlade(data) {\n blade.currentEntity = data;\n blade.originalEntity = data;\n blade.isLoading = false;\n }\n\n $scope.setForm = function (form) { blade.formScope = form; }\n\n $scope.doAction = function (trigger) {\n blade.isLoading = true;\n smApi.fireStateMachineInstanceTrigger({ instanceId: blade.currentEntity.id, trigger: trigger, entityId: blade.parentBlade.currentEntity.id }, {}, function (data) {\n blade.refresh(true);\n });\n blade.isLoading = false;\n }\n\n blade.refresh = function (parentRefresh) {\n blade.isLoading = true;\n smApi.getStateMachineInstanceById({ instanceId: blade.currentEntity.id }, function (data) {\n initializeBlade(data);\n\n });\n\n if (parentRefresh) {\n blade.parentBlade.refresh(parentRefresh);\n }\n\n };\n\n blade.refresh();\n }]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.synchronizationDetailsController', ['$scope', 'platformWebApp.bladeNavigationService', 'virtoCommerce.marketplaceModule.webApi', 'platformWebApp.settings',\n function ($scope, bladeNavigationService, marketplaceApi, settings) {\n var blade = $scope.blade;\n blade.headIcon = 'fas fa-repeat';\n blade.isLoading = false;\n\n $scope.$on(\"new-notification-event\", function (event, notification) {\n if (blade.notification && notification.id == blade.notification.id) {\n let jobId = blade.notification.jobId;\n blade.errorsCount = notification.errors.length;\n blade.progressPercentage = notification.processedCount / notification.totalCount * 100;\n angular.copy(notification, blade.notification);\n if (jobId) {\n blade.notification.jobId = jobId;\n }\n if (notification.finished) {\n processSyncStats();\n if (blade.parentRefresh) {\n blade.parentRefresh();\n }\n }\n }\n });\n\n blade.cancelSync = function () {\n marketplaceApi.syncCancel({ jobId: blade.notification.jobId });\n };\n\n blade.toolbarCommands = [{\n name: \"marketplace.commands.cancel\",\n icon: 'fa fa-close',\n executeMethod: blade.cancelSync,\n canExecuteMethod: isSyncRun\n }];\n\n function isSyncRun() {\n return blade.notification && !blade.notification.finished;\n }\n\n function processSyncStats() {\n let importStats = [];\n if (blade.notification.importStats && blade.notification.importStats.length > 0) {\n importStats = groupBy(blade.notification.importStats, 'syncClientName');\n }\n \n let exportStats = [];\n if (blade.notification.exportStats && blade.notification.exportStats.length > 0) {\n exportStats = groupBy(blade.notification.exportStats, 'syncClientName');\n }\n\n blade.importStats = importStats;\n blade.exportStats = exportStats;\n }\n\n function groupBy(arr, prop) {\n let result = [];\n if (arr) {\n let keys = arr.map(x => x[prop]).filter((value, index, self) => self.indexOf(value) === index);\n keys.forEach(x => result.push({\n key: x,\n value: arr.filter(y => y[prop] === x).map(y => {\n let statText = y.syncItemName + \": \" + y.processedCount + \" of \" + y.totalCount + \" processed\";\n if (y.errorsCount > 0) {\n statText = statText + \" with \" + y.errorsCount + \" errors\";\n }\n return statText;\n })\n }));\n }\n return result;\n }\n\n $scope.setForm = function (form) { $scope.formScope = form; };\n\n }\n ]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.synchronizationListController', ['$scope', 'platformWebApp.bladeUtils', 'platformWebApp.bladeNavigationService', 'platformWebApp.dialogService', 'virtoCommerce.marketplaceModule.webApi', 'platformWebApp.uiGridHelper', 'platformWebApp.ui-grid.extension',\n function ($scope, bladeUtils, bladeNavigationService, dialogService, marketplaceApi, uiGridHelper, gridOptionExtension) {\n $scope.uiGridConstants = uiGridHelper.uiGridConstants;\n var blade = $scope.blade;\n blade.headIcon = 'fas fa-repeat';\n\n blade.refresh = function () {\n blade.isLoading = true;\n\n marketplaceApi.getSyncClients(function (data) {\n $scope.listEntries = data;\n });\n\n blade.isLoading = false;\n };\n\n blade.runSyncFromGrid = function () {\n let selectedRows = $scope.gridApi.selection.getSelectedRows();\n let activeSyncTypes = selectedRows.filter(x => x.isActive).map(x => x.typeName);\n\n runSync(activeSyncTypes);\n };\n\n blade.toolbarCommands = [\n {\n name: \"platform.commands.refresh\",\n icon: 'fa fa-refresh',\n executeMethod: blade.refresh,\n canExecuteMethod: function () {\n return true;\n }\n },\n {\n name: \"marketplace.commands.synchronization\",\n icon: 'fa fa-repeat',\n executeMethod: blade.runSyncFromGrid,\n canExecuteMethod: isAnyItemsChecked\n }\n ];\n\n function isAnyItemsChecked() {\n if ($scope.gridApi && $scope.gridApi.selection) {\n let selectedRows = $scope.gridApi.selection.getSelectedRows();\n if (selectedRows.length > 0) {\n return true;\n }\n }\n return false;\n }\n\n function runSync(items) {\n marketplaceApi.syncRun({ clientTypes: items }, function (data) {\n var newBlade = {\n title: 'marketplace.blades.synchronization-details.title',\n icon: 'fa fa-repeat',\n notification: data,\n controller: 'virtoCommerce.marketplaceModule.synchronizationDetailsController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/synchronization-details.tpl.html'\n };\n bladeNavigationService.showBlade(newBlade, blade);\n });\n }\n\n $scope.selectNode = function (listItem) {\n // $scope.selectedNodeTypeName = listItem.typeName;\n // $scope.showDetails(listItem);\n }\n\n $scope.canRunSyncForItem = function (listItem) {\n if (listItem && listItem.isActive) {\n return true;\n }\n return false;\n };\n\n $scope.syncRunFromMenu = function (listItem) {\n if (listItem.isActive) {\n runSync([listItem.typeName]);\n }\n }\n\n $scope.setGridOptions = function (gridId, gridOptions) {\n $scope.gridOptions = gridOptions;\n gridOptionExtension.tryExtendGridOptions(gridId, gridOptions);\n\n gridOptions.onRegisterApi = function (gridApi) {\n $scope.gridApi = gridApi;\n gridApi.core.on.sortChanged($scope, function () {\n if (!blade.isLoading) blade.refresh();\n });\n };\n\n bladeUtils.initializePagination($scope);\n };\n\n }\n ]);\n","angular.module('virtoCommerce.marketplaceModule')\n .factory('virtoCommerce.marketplaceModule.catalogProducts', ['$resource', function ($resource) {\n return $resource('api/catalog/search/products', null, {\n search: { method: 'POST' },\n });\n }])\n .factory('virtoCommerce.marketplaceModule.catalogCategories', ['$resource', function ($resource) {\n return $resource('api/catalog/search/categories', null, {\n search: { method: 'POST' },\n });\n }]);\n","angular.module('virtoCommerce.marketplaceModule')\n .factory('virtoCommerce.marketplaceModule.webApi', ['$resource', function ($resource) {\n return $resource('api/vcmp', null, {\n // settings\n getSettings: { method: 'GET', url: 'api/vcmp/settings' },\n // seller\n sendInvitation: { method: 'POST', url: 'api/vcmp/security/seller/send/invitation' },\n createSeller: { method: 'POST', url: 'api/vcmp/security/seller/create' },\n updateSeller: { method: 'POST', url: 'api/vcmp/security/seller/update' },\n searchSellers: { method: 'POST', url: 'api/vcmp/security/seller/search' },\n deleteSellers: { method: 'DELETE', url: 'api/vcmp/security/seller' },\n getSellerById: { method: 'GET', url: 'api/vcmp/security/seller/:id' },\n // seller users\n sendSellerUserInvitation: { method: 'POST', url: 'api/vcmp/security/seller/users/invitation/send' },\n validateSellerUser: { method: 'POST', url: 'api/vcmp/security/seller/users/validate', isArray: true },\n createSellerUser: { method: 'POST', url: 'api/vcmp/security/seller/users/create' },\n updateSellerUser: { method: 'POST', url: 'api/vcmp/security/seller/users/update' },\n searchSellerUsers: { method: 'POST', url: 'api/vcmp/security/seller/users/search' },\n deleteSellerUsers: { method: 'DELETE', url: 'api/vcmp/security/seller/users' },\n // seller categories\n createSellerCategories: { method: 'POST', url: 'api/vcmp/seller/categories/create' },\n deleteSellerCategories: { method: 'POST', url: 'api/vcmp/seller/categories/delete' },\n // seller products\n getSellerProduct: { method: 'GET', url: 'api/vcmp/seller/products/:productId' },\n listitemssearch: { method: 'POST', url: 'api/vcmp/seller/products/search' },\n changeStatus: { method: 'POST', url: 'api/vcmp/seller/product/status/change' },\n massChangeStatus: { method: 'POST', url: 'api/vcmp/seller/products/status/:status' },\n deleteSellerProducts: { method: 'DELETE', url: 'api/vcmp/seller/products' },\n // seller import profiles\n getImporters: { method: 'GET', url: 'api/vcmp/import/importers', isArray: true },\n searchSellerImportProfiles: { method: 'POST', url: 'api/vcmp/import/profiles/search' },\n createSellerImportProfile: { method: 'POST', url: 'api/vcmp/import/profiles' },\n updateSellerImportProfile: { method: 'PUT', url: 'api/vcmp/import/profiles' },\n deleteSellerImportProfiles: { method: 'DELETE', url: 'api/vcmp/import/profiles' },\n // fees\n createFee: { method: 'POST', url: 'api/vcmp/fees' },\n updateFee: { method: 'PUT', url: 'api/vcmp/fees' },\n searchFees: { method: 'POST', url: 'api/vcmp/fees/search' },\n deleteFee: { method: 'DELETE', url: 'api/vcmp/fees' },\n getFeeById: { method: 'GET', url: 'api/vcmp/fees/:id' },\n getNewFee: { method: 'GET', url: 'api/vcmp/fees/new' },\n // offers\n searchOffers: { method: 'POST', url: 'api/vcmp/seller/offers/search' },\n getOfferById: { method: 'GET', url: 'api/vcmp/seller/offers/:offerId' },\n deleteOffers: { method: 'DELETE', url: 'api/vcmp/seller/offers' },\n changeState: { method: 'POST', url: 'api/vcmp/seller/offers/state' },\n // sync\n getSyncClients: { method: 'GET', url: 'api/vcmp/sync/clients', isArray: true },\n syncRun: { method: 'POST', url: 'api/vcmp/sync/run' },\n syncCancel: { method: 'POST', url: 'api/vcmp/sync/cancel' },\n // import history\n searchImportHistory: { method: 'POST', url: 'api/vcmp/import/profiles/execution/history/search' },\n // state machine\n searchStateMachineDefinition: { method: 'POST', url: 'api/vcmp/statemachine/definitions/search' },\n updateStateMachineDefinition: { method: 'POST', url: 'api/vcmp/statemachine/definitions/new' },\n searchStateMachineInstance: { method: 'POST', url: 'api/vcmp/statemachine/instances/search' },\n getStateMachineInstanceById: { method: 'GET', url: 'api/vcmp/statemachine/instances/:instanceId' },\n createStateMachineInstance: { method: 'POST', url: 'api/vcmp/statemachine/instances/:definitionId/new' },\n fireStateMachineInstanceTrigger: { method: 'POST', url: 'api/vcmp/statemachine/instances/:instanceId/fire/:trigger/:entityId' },\n });\n }]);\n","angular.module('virtoCommerce.marketplaceModule')\n .factory('virtoCommerce.marketplaceModule.approvalPolicyTranslationService', ['$translate', function ($translate) {\n return {\n translateApprovalPolicies: function (rawStatuses) {\n return _.map(rawStatuses, function (x) {\n return {\n key: x,\n value: translateApprovalPolicy(x, $translate)\n };\n });\n }\n };\n }])\n // operation statuses localization filter\n //.filter('statusTranslate', ['$translate', function ($translate) {\n // return function (statusOrOperation, operation) {\n // operation = operation || statusOrOperation;\n // return operation.status ? translateOrderStatus(operation.status, $translate) : '';\n // };\n //}])\n ;\n\nfunction translateApprovalPolicy(rawPolicy, $translate) {\n var translateKey = 'marketplace.settings.approval-policy.' + rawPolicy.toLowerCase();\n var result = $translate.instant(translateKey);\n return result === translateKey ? rawPolicy : result;\n}\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.itemOffersWidgetController', ['$scope', 'platformWebApp.bladeNavigationService', 'virtoCommerce.marketplaceModule.webApi',\n function ($scope, bladeNavigationService, marketplaceApi) {\n var blade = $scope.widget.blade;\n\n $scope.widget.refresh = function () {\n blade.loading = true;\n $scope.itemOffersCount = '...';\n var criteria = {\n take: 0\n };\n if (blade.sellerProduct) {\n criteria.sellerProductId = blade.sellerProduct.id;\n } else if (blade.currentEntityId) {\n criteria.productId = blade.currentEntityId;\n }\n\n\n marketplaceApi.searchOffers(criteria, function (data) {\n blade.loading = false;\n if (data) {\n $scope.itemOffersCount = data.totalCount;\n }\n });\n }\n\n $scope.openBlade = function () {\n if (!blade.isLoading) {\n var offersBlade = {\n id: 'itemOffers',\n title: 'marketplace.blades.offer-list.title',\n controller: 'virtoCommerce.marketplaceModule.offerListController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/offer-list.tpl.html'\n };\n\n if (blade.sellerProduct) {\n offersBlade.sellerProductId = blade.sellerProduct.id;\n } else if (blade.currentEntityId) {\n offersBlade.productId = blade.currentEntityId;\n }\n\n bladeNavigationService.showBlade(offersBlade, blade);\n }\n };\n\n $scope.widget.refresh();\n\n }]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.offerItemPropertiesWidgetController', ['$scope', 'platformWebApp.bladeNavigationService', function ($scope, bladeNavigationService) {\n var blade = $scope.blade;\n $scope.propertiesCount = '...';\n\n $scope.$watch('blade.product', function (product) {\n if (blade.product) {\n $scope.propertiesCount = blade.product.properties.filter(x => x.type == 'Variation').length;\n }\n });\n\n $scope.openItemPropertyBlade = function () {\n var itemPropertyBlade = {\n id: \"itemProperty\" + blade.product.id,\n productId: blade.product.id,\n entityType: \"product\",\n currentEntity: blade.product.variations.filter(x => x.id === blade.currentEntity.id).find(o => true),\n propGroups: [{ title: 'catalog.properties.variation', type: 'Variation' }],\n controller: 'virtoCommerce.catalogModule.propertyListController',\n template: 'Modules/$(VirtoCommerce.Catalog)/Scripts/blades/property-list.tpl.html'\n };\n bladeNavigationService.showBlade(itemPropertyBlade, blade);\n };\n }]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.orderFeeWidgetController', ['$scope', 'platformWebApp.bladeNavigationService', 'virtoCommerce.marketplaceModule.webApi',\n function ($scope, bladeNavigationService, marketplaceApi) {\n var blade = $scope.widget.blade;\n\n $scope.openBlade = function () {\n var orderFeesBlade = {\n id: 'orderFees',\n title: 'marketplace.blades.order-fee-list.title',\n controller: 'virtoCommerce.marketplaceModule.orderFeeListController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/order-fee-list.tpl.html'\n };\n\n if (blade.customerOrder.items) {\n orderFeesBlade.lineItems = angular.copy(blade.customerOrder.items);\n }\n\n bladeNavigationService.showBlade(orderFeesBlade, blade);\n };\n\n }]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.orderSellerOrdersOrdersWidgetController', ['$scope', 'platformWebApp.bladeNavigationService', 'virtoCommerce.orderModule.order_res_customerOrders',\n function ($scope, bladeNavigationService, orders) {\n var blade = $scope.blade;\n\n function refresh() {\n blade.loading = true;\n var criteria = {\n parentOperationId: blade.currentEntity.id,\n take: 0\n };\n\n return orders.search(criteria, function (data) {\n blade.loading = false;\n if (data) {\n blade.totalCount = data.totalCount;\n }\n });\n }\n\n $scope.$watch(\"widget.blade.customerOrder\", function (order) {\n if (order) refresh();\n });\n\n $scope.openBlade = function () {\n if (!blade.isLoading) {\n var newBlade = {\n id: 'sellerOrders',\n title: 'Sellers orders',\n controller: 'virtoCommerce.orderModule.customerOrderListController',\n template: 'Modules/$(VirtoCommerce.Orders)/Scripts/blades/customerOrder-list.tpl.html',\n hideDelete: true\n };\n\n if (blade.currentEntity.id) {\n newBlade.refreshCallback = function () {\n var criteria = {\n parentOperationId: blade.currentEntity.id\n };\n\n return orders.search(criteria);\n }\n }\n\n bladeNavigationService.showBlade(newBlade, blade);\n }\n };\n\n }]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerAddressesWidgetController', ['$scope', 'platformWebApp.bladeNavigationService', function ($scope, bladeNavigationService) {\n var blade = $scope.widget.blade;\n\n $scope.openBlade = function () {\n var newBlade = {\n id: \"sellerAddresses\",\n currentEntities: blade.currentEntity.addresses,\n title: blade.title,\n subtitle: 'marketplace.widgets.seller-addresses.seller-addresses',\n controller: 'virtoCommerce.customerModule.common.coreAddressListController',\n template: 'Modules/$(VirtoCommerce.Customer)/Scripts/common/blades/address-list.tpl.html'\n };\n bladeNavigationService.showBlade(newBlade, blade);\n };\n }]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerCategoriesWidgetController', ['$scope', 'platformWebApp.bladeNavigationService', 'virtoCommerce.marketplaceModule.webApi', 'virtoCommerce.catalogModule.listEntries',\n function ($scope, bladeNavigationService, marketplaceApi, listEntriesApi) {\n var sellerId = $scope.widget.blade.currentEntity.id;\n\n function refresh() {\n var searchCriteria = {\n catalogId: sellerId,\n objectTypes: ['Category'],\n skip: 0,\n take: 0\n };\n\n listEntriesApi.listitemssearch(searchCriteria, function(data) {\n $scope.categoriesCount = data.totalCount;\n });\n }\n\n $scope.openBlade = function () {\n marketplaceApi.getSettings((data) => {\n var newBlade = {\n id: 'seller-category-list',\n level: 0,\n sellerId: sellerId,\n masterCatalogId: data.masterCatalogId,\n catalogId: sellerId,\n breadcrumbs: [],\n parentWidgetRefresh: refresh,\n title: \"marketplace.widgets.seller-categories.seller-catalog\",\n controller: 'virtoCommerce.marketplaceModule.sellerCategoryListController',\n template: 'Modules/$(VirtoCommerce.Catalog)/Scripts/blades/categories-items-list.tpl.html'\n };\n\n bladeNavigationService.showBlade(newBlade, $scope.widget.blade);\n });\n };\n\n refresh();\n }\n]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerFulfillmentWidgetController', ['$scope', 'platformWebApp.bladeNavigationService', 'virtoCommerce.inventoryModule.fulfillments', function ($scope, bladeNavigationService, fulfillments) {\n var blade = $scope.widget.blade;\n\n $scope.widget.refresh = function () {\n }\n\n $scope.openBlade = function () {\n var newBlade = {\n id: 'fulfillmentCenterList',\n organizationId: blade.sellerId,\n controller: 'virtoCommerce.inventoryModule.fulfillmentListController',\n template: 'Modules/$(VirtoCommerce.Inventory)/Scripts/blades/fulfillment-center-list.tpl.html'\n };\n bladeNavigationService.showBlade(newBlade, blade);\n };\n\n $scope.widget.refresh();\n}]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerImportHistoryWidgetController', ['$scope', 'platformWebApp.bladeNavigationService', 'virtoCommerce.inventoryModule.fulfillments', function ($scope, bladeNavigationService, fulfillments) {\n var blade = $scope.widget.blade;\n\n $scope.widget.refresh = function () {\n }\n\n $scope.openBlade = function () {\n var newBlade = {\n id: 'sellerImportHistoryList',\n sellerId: blade.sellerId,\n controller: 'virtoCommerce.marketplaceModule.sellerImportHistoryListController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/seller-import-history-list.tpl.html'\n };\n bladeNavigationService.showBlade(newBlade, blade);\n };\n\n $scope.widget.refresh();\n}]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerImportProfilesWidgetController', ['$scope', 'platformWebApp.bladeNavigationService', 'virtoCommerce.marketplaceModule.webApi',\n function ($scope, bladeNavigationService, marketplaceApi) {\n var sellerId = $scope.widget.blade.currentEntity.id;\n var sellerName = $scope.widget.blade.currentEntity.name;\n\n function refresh() {\n var searchCriteria = {\n sellerId: sellerId,\n skip: 0,\n take: 0\n };\n marketplaceApi.searchSellerImportProfiles(searchCriteria, function (data) {\n $scope.importProfilesCount = data.totalCount;\n });\n }\n\n $scope.openBlade = function () {\n var newBlade = {\n id: 'seller-import-profile-list',\n sellerId: sellerId,\n sellerName: sellerName,\n parentWidgetRefresh: refresh,\n title: 'marketplace.blades.seller-import-profile-list.title',\n subtitle: 'marketplace.blades.seller-import-profile-list.subtitle',\n controller: 'virtoCommerce.marketplaceModule.sellerImportProfileListController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/seller-import-profile-list.tpl.html'\n };\n bladeNavigationService.showBlade(newBlade, $scope.widget.blade);\n };\n\n refresh();\n }\n ]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerOrdersWidgetController', ['$scope', 'platformWebApp.bladeNavigationService', 'virtoCommerce.orderModule.order_res_customerOrders',\n function ($scope, bladeNavigationService, ordersApi) {\n var sellerId = $scope.widget.blade.currentEntity.id;\n \n var searchCriteria = {\n responseGroup: \"None\",\n employeeId: sellerId,\n skip: 0,\n take: 0\n };\n ordersApi.search(searchCriteria, function (data) {\n $scope.ordersCount = data.totalCount;\n });\n\n $scope.openBlade = function () {\n var newBlade = {\n id: 'seller-order-list',\n title: 'marketplace.blades.seller-order-list.title',\n searchCriteria: { employeeId: sellerId },\n controller: 'virtoCommerce.orderModule.customerOrderListController',\n template: 'Modules/$(VirtoCommerce.Orders)/Scripts/blades/customerOrder-list.tpl.html',\n isExpanded: true\n };\n\n bladeNavigationService.showBlade(newBlade, $scope.widget.blade);\n };\n }\n ]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerPublicationRequestsWidgetController', ['$scope', 'platformWebApp.bladeNavigationService', 'virtoCommerce.marketplaceModule.webApi',\n function ($scope, bladeNavigationService, marketplaceApi) {\n var sellerId = $scope.widget.blade.currentEntity.id;\n\n function refresh() {\n var searchCriteria = {\n searchFromAllSellers: false,\n sellerId: sellerId,\n skip: 0,\n take: 0\n };\n\n marketplaceApi.listitemssearch(searchCriteria, function(data) {\n $scope.publicationRequestsCount = data.totalCount;\n });\n }\n\n $scope.openBlade = function () {\n var blade = {\n id: 'seller-publication-requests-list',\n title: 'marketplace.blades.seller-publication-request-list.title',\n subtitle: 'marketplace.blades.seller-publication-request-list.subtitle',\n breadcrumbs: [],\n searchCriteria: { searchFromAllSellers: false, sellerId: sellerId },\n parentWidgetRefresh: refresh,\n controller: 'virtoCommerce.marketplaceModule.sellerPublicationRequestListController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/seller-publication-request-list.tpl.html'\n };\n bladeNavigationService.showBlade(blade, $scope.widget.blade);\n };\n\n refresh();\n }\n]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerRatingWidgetController',\n ['$scope', 'VirtoCommerce.RatingApi', 'platformWebApp.bladeNavigationService',\n function ($scope, ratingApi, bladeNavigationService) {\n var blade = $scope.blade;\n var entityIds = [$scope.widget.blade.currentEntity.id];\n var entityType = 'Organization';\n\n function init() {\n $scope.loading = false;\n $scope.ratingRange = '0';\n $scope.ratings = null;\n $scope.reviewsCount = 0;\n }\n\n function refresh() {\n $scope.loading = true;\n\n var params = {\n entityIds,\n entityType\n };\n\n ratingApi.get(params, function (data) {\n $scope.ratings = data;\n $scope.ratingRange = getRating(data);\n $scope.reviewsCount = getReviewsCount(data);\n $scope.loading = false;\n });\n }\n\n function getRating(ratings) {\n let ratingValues = ratings.map(x => x.value);\n if (ratingValues && ratingValues.length > 0) {\n return ratingValues[0].toFixed(1);\n }\n return 0;\n }\n\n function getReviewsCount(ratings) {\n let reviewsCounts = ratings.map(x => x.reviewCount);\n if (reviewsCounts && reviewsCounts.length > 0) {\n return reviewsCounts[0];\n }\n return 0;\n }\n\n $scope.openBlade = function () {\n if ($scope.loading) return;\n\n var newBlade = {\n id: 'sellerReviewsList',\n title: 'Customer review',\n controller: 'VirtoCommerce.CustomerReviews.reviewsListController',\n template: 'Modules/$(VirtoCommerce.CustomerReviews)/Scripts/blades/reviews-list.tpl.html',\n filter: { entityIds, entityType }\n };\n\n bladeNavigationService.showBlade(newBlade, blade);\n\n };\n\n $scope.$watch(\"blade.currentEntity.id\", function (id) {\n if (id) refresh();\n });\n\n init();\n\n }\n ]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.sellerUsersWidgetController', ['$scope', 'platformWebApp.bladeNavigationService', 'virtoCommerce.marketplaceModule.webApi',\n function ($scope, bladeNavigationService, marketplaceApi) {\n var sellerId = $scope.widget.blade.currentEntity.id;\n\n function refresh() {\n var searchCriteria = {\n sellerId: sellerId,\n skip: 0,\n take: 0\n };\n marketplaceApi.searchSellerUsers(searchCriteria, function(data) {\n $scope.usersCount = data.totalCount;\n });\n }\n\n $scope.openBlade = function () {\n var newBlade = {\n id: 'seller-user-list',\n sellerId: sellerId,\n parentWidgetRefresh: refresh,\n title: 'marketplace.blades.seller-user-list.title',\n subtitle: 'marketplace.blades.seller-user-list.subtitle',\n controller: 'virtoCommerce.marketplaceModule.sellerUserListController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/seller-user-list.tpl.html'\n };\n bladeNavigationService.showBlade(newBlade, $scope.widget.blade);\n };\n\n refresh();\n }\n ]);\n","angular.module('virtoCommerce.marketplaceModule')\n .controller('virtoCommerce.marketplaceModule.stateMachineOrderWidgetController', ['$scope', 'platformWebApp.bladeNavigationService', 'virtoCommerce.marketplaceModule.webApi',\n function ($scope, bladeNavigationService, smApi) {\n $scope.blade = $scope.widget.blade;\n\n $scope.refreshWidgetData = function (entityId) {\n smApi.searchStateMachineInstance({ objectTypes: ['VirtoCommerce.OrdersModule.Core.Model.CustomerOrder', 'VirtoCommerce.MarketplaceVendorModule.Core.Domains.SellerOrder'], objectIds: [entityId], take: 1 }, function (response) {\n if (response.totalCount > 0) {\n $scope.smName = response.results[0].stateMachineName;\n $scope.smState = response.results[0].currentStateName;\n $scope.smInstance = response.results[0];\n }\n })\n };\n\n $scope.openBlade = function () {\n var blade = {\n id: \"stateMachineOrderDetail\",\n isNew: false,\n controller: 'virtoCommerce.marketplaceModule.stateMachineOrderDetailController',\n template: 'Modules/$(VirtoCommerce.MarketplaceVendor)/Scripts/blades/state-machine-order-detail.tpl.html',\n subtitle: '',\n currentEntity: $scope.smInstance\n };\n bladeNavigationService.showBlade(blade, $scope.blade);\n };\n\n $scope.refreshWidgetData($scope.blade.currentEntityId);\n\n }]);\n"],"names":["moduleName","undefined","AppDependencies","push","angular","module","constant","config","$stateProvider","state","url","templateUrl","controller","bladeNavigationService","showBlade","id","title","subtitle","breadcrumbs","template","isClosingDisabled","$scope","searchCriteria","hasParentOperation","isExpandable","customizeToolbar","run","$http","$compile","mainMenuService","widgetService","$state","toolbarService","webApi","dialogService","authService","dynamicExpressionService","pushNotificationTemplateResolver","entityTypesResolverService","metaFormsService","sellersProductsMainMenuItem","path","icon","priority","action","go","permission","addMenuItem","masterCatalogMainMenuItem","menuItem","offerMenuItem","synchronizationMenuItem","stateMachineMenuItem","register","name","executeMethod","blade","isLoading","approvalRequestSent","changeStatus","operatorId","userLogin","operatorName","sellerProductId","sellerProduct","newStatus","getSellerProduct","productId","data","parentBlade","refresh","canExecuteMethod","status","includes","index","dialog","comment","text","callback","decline","showDialog","sellerAddressesWidget","registerWidget","remove","deleteSellerProducts","ids","closeBlade","isVisible","registerExpression","displayName","templateURL","newChildLabel","availableChildren","get","then","response","satisfy","notify","place","notifyType","notification","registerType","entityType","entityIdFieldName","detailBlade","getEntity","entityId","setEntityCallback","getSellerById","logo","knownChildrenTypes","registerMetaFields","valueType","items","gridOptionExtension","bladeUtils","uiGridHelper","marketplaceApi","isValid","equals","this","productIds","promotion","saveChanges","productNames","_","pluck","selectedListEntries","productCodes","bladeClose","setGridOptions","gridId","gridOptions","tryExtendGridOptions","initialize","externalRegisterApiCallback","initializePagination","cancelChanges","isFirstRun","copy","length","query","respGroup","gridApi","grid","options","openCatalogBlade","$parent","bindRefreshOnSortChanged","catalogBlade","toolbarCommands","map","entry","imageUrl","imgSrc","selectedIds","uniq","union","selectedItemIds","showCheckingMultiple","withProducts","checkItemFn","listItem","isSelected","type","error","selected","all","x","reject","getSettings","settings","catalogId","masterCatalogId","selectedRows","selection","getSelectedRows","toRemoveArray","difference","childrenBlades","api","catalogs","listEntries","uiGridConstants","$timeout","setBreadcrumbs","slice","breadCrumb","catalog","category","categoryId","some","navigate","breadcrumb","filter","keyword","extend","allowCheckingItem","allowCheckingCategory","gridColumns","searchedKeyword","isCatalogSelectMode","search","take","isVirtual","results","where","pageSettings","totalItems","onCatalogsLoaded","listitemssearch","searchInVariations","responseGroup","objectTypes","excludeProductType","sort","getSortExpression","skip","currentPage","itemsPerPageCount","headers","totalCount","onItemsLoaded","selectItem","e","selectedNodeId","selectItemFn","newBlade","getBladeForCategories","customCategoriesBlade","catalogsSelectedCatalog","catalogsSelectedCategoryId","itemId","productType","variationsToolbarCommandsAndEvents","fnGetBladeForItem","customBlade","registerDataChangeCallback","each","y","selectRow","dataChange","ROW","on","rowSelectionChanged","row","entity","contains","without","criteriaChanged","isRowSelectable","isFunction","isItemSelectable","columnDefs","concat","$q","catalogProducts","catalogCategories","initializeBlade","expressionTree","children","forEach","extendElementBlock","currentEntity","originalEntity","command","feeDetails","parentRefresh","isNew","getNewFee","getFeeById","setForm","form","formScope","isDirty","canSave","$valid","delete","onClose","closeCallback","showConfirmationIfNeeded","expressionBlock","retVal","expressions","includingCategories","withHidden","objectIds","filteredCategories","commonConditionBlock","find","o","categoryIsConditionBlock","categoryName","fillIncludingCategoriesBlock","excludingCategories","fillExcludingCategoriesBlock","excludingProducts","filteredProducts","code","fillExcludingProductsBlock","includingProducts","productIsConditionBlock","fillProductsBlock","vendorIds","searchSellers","filteredVendors","vendorsCommonConditionBlock","vendorsIsConditionBlock","vendorNames","fillVendorsBlock","fillChildrenBlock","expressionElement","getValidationError","groupName","conditionCategoryElements","c","productIdsArr","p","conditionProductsElements","stripOffUiInformation","createFee","updateFee","message","deleteFee","showConfirmationDialog","validatePriorityAsync","value","Number","isInteger","errorData","resolve","calculationTypes","openProductSelectWizard","parentElement","productsBlade","openCategorySelectWizard","categoryBlade","openVendorSelectWizard","vendorsBlade","selectedVendorIds","selectedVendors","deleteList","single","item","headIcon","sortDefault","searchFees","showDetails","selectNode","setSelectedNode","edit","onRegisterApi","core","sortChanged","calculationType","isDefault","selectedItem","childBlade","entities","openBlade","entityName","charAt","toUpperCase","currentEntities","marketplaceWebApi","selectedNode","openItemsBlade","node","level","subtitleValues","securityScopes","filterKeyword","catalogIds","findWhere","editCatalog","currentEntityId","closeChildrenBlades","changeState","offerId","isActive","getOfferById","getByIds","product","offersRefresh","itemCount","deleteOffers","gridHeight","hasMore","showProductName","showOfferStock","needInfinite","getSearchCriteria","searchOffers","infiniteScroll","resetScroll","dataLoaded","showMore","saveScrollPercentage","needLoadMoreData","lineItems","commissionName","description","ownerDetails","searchInChildren","categories","join","staticFees","commissionFee","staticFee","commissionFeeId","openStaticCommissions","groups","getValues","createSeller","validateEmailAsync","validateSellerUser","sellerUser","email","$promise","result","any","propertyName","$sessionStorage","$localStorage","transformByFilters","getSelectAllState","selectAllRows","isItemsChecked","categoryIds","categoryCount","listCategoryLinkCount","listItemLinkCount","deleteSellerCategories","sellerId","isDefined","disableOpenAnimation","parentWidgetRefresh","clearSelectedRows","setSelectedItem","showCategoryBlade","cut","catalogClipboardContent","openNewBlade","ctrlKey","mode","isBrowsingLinkedCategory","hasLinks","listEntry","links","l","createSellerCategories","SearchCriteria","SellerId","setError","CategoryIds","mapChecked","$path","approvalPolicyTranslationService","originalBlade","translateBladeApprovalPolicies","approvalPolicies","translateApprovalPolicies","updateSeller","sellerName","sellerDetails","registrationId","outerId","approvalPolicy","deliveryTime","addresses","openApprovalPolicySettingManagement","isApiSave","uploadLogo","fileUploadOptions","singleFileMode","accept","suppressParentRefresh","currentBlade","clearLogo","openUrl","window","open","$on","event","searchImportHistory","dataResults","finished","processedCount","errorsCount","refreshImportHistory","profileName","settingsHelper","fixValues","importProfileId","importProfile","getImporters","importers","importer","availSettings","selectImporter","isCurrentImporter","typeName","dataImporterType","toApiFormat","createSellerImportProfile","updateSellerImportProfile","sellerImportProfileIds","deleteSellerImportProfiles","searchSellerImportProfiles","memberIds","deleteSellers","foundMetaFields","getMetaFields","metaFields","rowsRendered","updateSelections","rows","statuses","origEntity","applyCriteria","sellerProductsFilters","sellerProductsFilterId","current","splice","indexOf","Date","getTime","searchFromAllSellers","massChangeStatus","list","canBeModified","operationName","canChangeStatus","approve","productData","showFilterDetailBlade","bladeData","unshift","change","$watch","role","sellerUserId","userDetails","isReadonly","sendInvite","sendInvitation","createSellerUser","updateSellerUser","sendSellerUserInvitation","roles","sellerUserIds","deleteSellerUsers","searchSellerUsers","isOwner","fullName","smApi","statesSerialized","JSON","stringify","states","parse","version","updateStateMachineDefinition","definition","loadData","pagedDataQuery","objectType","searchStateMachineDefinition","openDetailsBlade","onChangesConfirmedFn","doAction","trigger","fireStateMachineInstanceTrigger","instanceId","getStateMachineInstanceById","groupBy","arr","prop","self","key","statText","syncItemName","jobId","errors","progressPercentage","importStats","exportStats","processSyncStats","cancelSync","syncCancel","runSync","syncRun","clientTypes","getSyncClients","runSyncFromGrid","canRunSyncForItem","syncRunFromMenu","factory","$resource","method","isArray","searchStateMachineInstance","createStateMachineInstance","translateApprovalPolicy","rawPolicy","$translate","translateKey","toLowerCase","instant","rawStatuses","widget","loading","itemOffersCount","criteria","offersBlade","propertiesCount","properties","openItemPropertyBlade","itemPropertyBlade","variations","propGroups","orderFeesBlade","customerOrder","orders","order","parentOperationId","hideDelete","refreshCallback","listEntriesApi","categoriesCount","fulfillments","organizationId","importProfilesCount","ordersApi","employeeId","ordersCount","isExpanded","publicationRequestsCount","ratingApi","entityIds","params","ratings","ratingRange","ratingValues","toFixed","getRating","reviewsCount","reviewsCounts","reviewCount","getReviewsCount","usersCount","refreshWidgetData","smName","stateMachineName","smState","currentStateName","smInstance"],"sourceRoot":""}