private int RunStockItemImport(AcumaticaStockItemImportContext context, ShopifyVariant variant) { var matchingShopifySkus = _syncRepository.RetrieveNonMissingVariants(variant.StandardizedSku()); if (matchingShopifySkus.Count > 1) { _logService.Log($"Stock Item Import: {variant.LogDescriptor()} has duplicates in Shopify - aborting"); return(StockItemPutResult.NoAction); } // Attempt to Auto-match // if (variant.IsMatched()) { _logService.Log($"Stock Item Import: {variant.LogDescriptor()} already matched - aborting"); return(StockItemPutResult.NoAction); } var stockItem = _syncRepository.RetrieveStockItem(variant.StandardizedSku()); if (stockItem != null) { if (stockItem.IsMatched()) { var msg = $"Stock Item Import: {variant.LogDescriptor()} SKU already synchronized"; _logService.Log(msg); return(StockItemPutResult.NoAction); } else { var msg = $"Stock Item Import: auto-matched {stockItem.LogDescriptor()} to {variant.LogDescriptor()}"; _logService.Log(msg); _syncRepository.InsertItemSync(variant, stockItem, context.IsSyncEnabled); return(StockItemPutResult.Synchronized); } } // Abort any further processing if (context.SynchronizeOnly == true) { return(StockItemPutResult.NoAction); } // With neither duplicates or Auto-matching having succeeded, // ... we'll create a new Stock Item in Acumatica // StockItemPush(context, variant); context.VariantsForNextInventoryReceipt.Add(variant); return(StockItemPutResult.CreatedStockItem); }
public ShopifyVariantModel MakeVariantModel(ShopifyVariant input) { var output = new ShopifyVariantModel(); output.ShopifyVariantId = input.ShopifyVariantId; output.Sku = input.ShopifySku; output.VariantTitle = input.ShopifyTitle; output.Price = (decimal)input.ShopifyPrice; output.AvailableQuantity = input.ShopifyInventoryLevels.Sum(x => x.ShopifyAvailableQuantity); output.IsMissing = input.IsMissing; output.IsLoadedInAcumatica = input.IsMatched(); return(output); }
MakeProductStockItemResults(ShopifyVariant variant, MonsterSetting settings) { var output = new ProductStockItemResultsRow(); output.ShopifyProductId = variant.ShopifyProduct.ShopifyProductId; output.ShopifyProductTitle = variant.ShopifyProduct.ShopifyTitle; output.ShopifyProductUrl = _shopifyUrlService.ShopifyProductUrl(variant.ShopifyProduct.ShopifyProductId); output.ShopifyVariantId = variant.ShopifyVariantId; output.ShopifyVariantTitle = variant.ShopifyTitle; output.ShopifyVariantSku = variant.ShopifySku; output.ShopifyVariantUrl = _shopifyUrlService.ShopifyVariantUrl( variant.ShopifyProduct.ShopifyProductId, variant.ShopifyVariantId); output.ShopifyVariantTax = variant.ShopifyIsTaxable ? "YES" : "NO"; output.ShopifyVariantPrice = variant.ShopifyPrice; output.ShopifyVariantAvailQty = variant.ShopifyInventoryLevels.Sum(x => x.ShopifyAvailableQuantity); output.IsShopifyProductDeleted = variant.ShopifyProduct.IsDeleted; output.IsShopifyVariantMissing = variant.IsMissing; output.HasDuplicateSkus = HasDuplicateSkus(variant.ShopifySku); if (variant.IsMatched()) { var stockItemRecord = variant.MatchedStockItem(); var stockItem = _acumaticaJsonService.RetrieveStockItem(stockItemRecord.ItemId); output.AcumaticaItemId = stockItemRecord.ItemId; output.AcumaticaItemDesc = stockItemRecord.AcumaticaDescription; output.AcumaticaItemUrl = _acumaticaUrlService.AcumaticaStockItemUrl(stockItemRecord.ItemId); output.AcumaticaItemTax = stockItemRecord.IsTaxable(settings).YesNoNaPlainEnglish(); output.AcumaticaItemPrice = (decimal)stockItem.DefaultPrice.value; output.AcumaticaItemAvailQty = stockItemRecord.AcumaticaInventories.Sum(x => (int)x.AcumaticaAvailQty); output.HasMismatchedSku = variant.AreSkuAndItemIdMismatched(); output.HasMismatchedTaxes = variant.AreTaxesMismatched(settings); } return(output); }
public static bool IsNotMatched(this ShopifyVariant variant) { return(!variant.IsMatched()); }