예제 #1
0
        public MonsterSetting RetrieveSettings()
        {
            lock (SettingsLock)
            {
                if (!Entities.MonsterSettings.Any())
                {
                    var settings = new MonsterSetting();

                    settings.PullFromShopifyEnabled   = false;
                    settings.PullFromAcumaticaEnabled = false;

                    settings.SyncOrdersEnabled         = false;
                    settings.SyncAllCustomersEnabled   = false;
                    settings.SyncInventoryEnabled      = false;
                    settings.SyncRefundsEnabled        = false;
                    settings.SyncFulfillmentsEnabled   = false;
                    settings.MaxParallelAcumaticaSyncs = 1;
                    settings.MaxNumberOfOrders         = 5000;
                    settings.ReleasePaymentsOnSync     = false;

                    settings.ShopifyDelayMs            = ShopifyDelay.Default;
                    settings.InventorySyncWeight       = true;
                    settings.InventorySyncPrice        = true;
                    settings.InventorySyncAvailableQty = true;

                    settings.LastRecurringSchedule = RecurringSchedule.Default.Id;
                    Entities.MonsterSettings.Add(settings);
                    Entities.SaveChanges();
                    return(settings);
                }
            }

            return(Entities.MonsterSettings.First());
        }
        private void BuildLineItemValidations(CreateOrderValidation validation, MonsterSetting settings)
        {
            foreach (var lineItem in validation.ShopifyOrder.line_items)
            {
                if (lineItem.sku == null)
                {
                    validation.LineItemIdsWithUnrecognizedSku.Add(lineItem.id);
                }

                var variant = _syncInventoryRepository.RetrieveLiveVariant(lineItem.sku.StandardizedSku());

                if (variant == null)
                {
                    validation.SkusMissingFromShopify.Add(lineItem.sku);
                    continue;
                }

                if (!variant.IsSynced())
                {
                    validation.SkusNotSyncedInAcumatica.Add(lineItem.sku);
                    continue;
                }

                if (variant.AreSkuAndItemIdMismatched())
                {
                    validation.SkusWithMismatchedStockItemId.Add(lineItem.sku);
                }

                if (variant.AreTaxesMismatched(settings))
                {
                    validation.SkusWithMismatchedTaxes.Add(lineItem.sku);
                }
            }
        }
예제 #3
0
        public static bool?IsTaxable(this AcumaticaStockItem input, MonsterSetting settings)
        {
            if (input.AcumaticaTaxCategory == settings.AcumaticaTaxableCategory)
            {
                return(true);
            }

            if (input.AcumaticaTaxCategory == settings.AcumaticaTaxExemptCategory)
            {
                return(false);
            }

            return(null);
        }
예제 #4
0
    public void Awake()
    {
        Monster = GetComponent <MonsterSetting>();

        AI = BT.Root();

        AI.OpenBranch(
            BT.Selector().OpenBranch(

                BT.Sequence().OpenBranch(BT.Condition(Monster.CanAttack), BT.Call(Monster.Attack)),

                BT.Call(Monster.Idle))

            );
    }
예제 #5
0
        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);
        }
예제 #6
0
        public static bool AreTaxesMismatched(this ShopifyVariant input, MonsterSetting settings)
        {
            if (!input.IsSynced())
            {
                return(false);
            }

            if (input.ShopifyIsTaxable &&
                input.MatchedStockItem().AcumaticaTaxCategory == settings.AcumaticaTaxableCategory)
            {
                return(false);
            }

            if (!input.ShopifyIsTaxable &&
                input.MatchedStockItem().AcumaticaTaxCategory == settings.AcumaticaTaxExemptCategory)
            {
                return(false);
            }

            return(true);
        }
예제 #7
0
 public static bool IsValidTaxCategory(this AcumaticaStockItem input, MonsterSetting settings)
 {
     return(input.IsTaxable(settings).HasValue);
 }
예제 #8
0
 public static string TaxCategory(this bool isTaxable, MonsterSetting settings)
 {
     return(isTaxable ? settings.AcumaticaTaxableCategory : settings.AcumaticaTaxExemptCategory);
 }