示例#1
0
        public void ImportAddShopifyVariantsToProduct(ShopifyAddVariantImportContext context)
        {
            if (!TestIsShopifyPutEnabled())
            {
                return;
            }

            Action action = () =>
            {
                RefreshInventory();

                var state = _stateRepository.RetrieveSystemStateNoTracking();
                if (state.InventoryRefreshState != StateCode.Ok)
                {
                    _executionLogService.Log(
                        "Inventory Refresh is broken; aborting ImportAddShopifyVariantsToProduct");

                    return;
                }

                _syncManager.ImportAddShopifyVariantsToProduct(context);
            };

            Run(action);
        }
示例#2
0
        public void ImportAddShopifyVariantsToProduct(ShopifyAddVariantImportContext context)
        {
            var monitor = _monitoringService.ProvisionMonitor(BackgroundJobType.ImportAddShopifyVariantsToProduct);

            var hangfireJobId = BackgroundJob.Enqueue <JobRunner>(
                x => x.ImportAddShopifyVariantsToProduct(_tenantContext.InstanceId, context, monitor.Id));

            _monitoringService.AssignHangfireJob(monitor.Id, hangfireJobId);
        }
示例#3
0
        public ActionResult RunImportIntoExistingProduct(long shopifyProductId, List <string> acumaticaItemIds)
        {
            var context = new ShopifyAddVariantImportContext();

            context.ShopifyProductId = shopifyProductId;
            context.AcumaticaItemIds = acumaticaItemIds;
            _oneTimeJobService.ImportAddShopifyVariantsToProduct(context);

            return(JsonNetResult.Success());
        }
示例#4
0
        private void AutomatchExistingSkus(ShopifyAddVariantImportContext context)
        {
            foreach (var itemId in context.AcumaticaItemIds.ToList())
            {
                var existingVariant =
                    _syncInventoryRepository.RetrieveVariantForAutomatch(context.ShopifyProductId, itemId.StandardizedSku());

                if (existingVariant != null)
                {
                    _logService.Log($"Auto-matched {itemId.LogDescriptorItemId()} to {existingVariant.LogDescriptor()}");

                    CreateSyncRecord(itemId.StandardizedSku(), existingVariant);
                    //context.AcumaticaItemIds.Remove(itemId);
                }
            }
        }
示例#5
0
        public void RunAddToProduct(ShopifyAddVariantImportContext context)
        {
            if (MonsterConfig.Settings.DisableShopifyPut)
            {
                _logService.Log(LogBuilder.ShopifyPutDisabled());
                return;
            }

            // Attempt to auto-match Item Ids SKU's that exists
            //
            AutomatchExistingSkus(context);

            // Creates payload for Shopify API only including valid Variants not in Shopify
            //
            var createVariantList    = CleanAndBuildVariantPayload(context.AcumaticaItemIds);
            var shopifyProductRecord = _syncInventoryRepository.RetrieveProduct(context.ShopifyProductId);

            // Add Variants thru Shopify API
            //
            foreach (var createVariant in createVariantList)
            {
                _logService.Log(LogBuilder.CreatingShopifyVariant(createVariant));

                // Invoke Shopify API and create new Variant
                //
                var json = new { variant = createVariant }.SerializeToJson();
                var resultJson = _productApi.AddVariant(context.ShopifyProductId, json);
                var result     = resultJson.DeserializeFromJson <VariantParent>();

                // Create Variant Record and Sync
                //
                var variantRecord =
                    _shopifyInventoryGet.CreateNewVariantRecord(shopifyProductRecord.MonsterId, result.variant);
                CreateSyncRecord(createVariant.sku.StandardizedSku(), variantRecord);
            }

            // Need to refresh local cache of Product, so Inventory Levels records reflect current state
            //
            _shopifyInventoryGet.Run(context.ShopifyProductId);

            foreach (var stockItemId in context.AcumaticaItemIds)
            {
                // Update the Inventory data
                //
                RunInventoryUpdate(stockItemId);
            }
        }
示例#6
0
 public void ImportAddShopifyVariantsToProduct(
     Guid instanceId, ShopifyAddVariantImportContext context, long jobMonitorId)
 {
     ExecuteJob(instanceId, () => _processDirector.ImportAddShopifyVariantsToProduct(context), jobMonitorId);
 }
示例#7
0
 public void ImportAddShopifyVariantsToProduct(ShopifyAddVariantImportContext context)
 {
     _shopifyProductVariantPut.RunAddToProduct(context);
 }