private ValidationResult ReadyToCreateOrder(long shopifyOrderId)
        {
            var output      = new CreateOrderValidation();
            var orderRecord = _syncOrderRepository.RetrieveShopifyOrderWithNoTracking(shopifyOrderId);
            var order       = _shopifyJsonService.RetrieveOrder(shopifyOrderId);

            var settings = _settingsRepository.RetrieveSettings();

            // If the Starting Shopify Order weren't populated, we would not be here i.e.
            // ... the Shopify Order would not have been pulled from API
            //
            output.SettingsStartingOrderId = settings.ShopifyOrderId.Value;
            output.ShopifyOrderRecord      = orderRecord;
            output.ShopifyOrder            = order;

            BuildLineItemValidations(output, settings);

            output.ShopifyShippingRateName = order.MaybeShippingRateTitle;
            output.HasValidShippingRate    = _settingsRepository.RateMappingExists(order.MaybeShippingRateTitle);

            if (orderRecord.HasPayment())
            {
                output.ShopifyPaymentGatewayId = orderRecord.PaymentTransaction().ShopifyGateway;
                output.HasValidGateway
                    = _settingsRepository.GatewayExistsInConfig(output.ShopifyPaymentGatewayId);
            }

            return(output.Result());
        }
        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);
                }
            }
        }