//using Microsoft.EntityFrameworkCore; //using Newtonsoft.Json; //using PartSource.Automation.Models; //using PartSource.Data; //using PartSource.Data.Models; //using PartSource.Services; //using Ratermania.Shopify; //using Ratermania.Shopify.Exceptions; //using Ratermania.Shopify.Resources; //using System; //using System.Collections.Generic; //using System.Data; //using System.Linq; //using System.Text.RegularExpressions; //using System.Threading.Tasks; //namespace PartSource.Automation.Jobs //{ // public class UpdateFitment //: IAutomationJob // { // private readonly IServiceProvider _serviceProvider; // private readonly ShopifyClient _shopifyClient; // private readonly PartSourceContext _partSourceContext; // private readonly NexpartService _nexpartService; // private readonly VehicleService _vehicleService; // public UpdateFitment(IServiceProvider serviceProvider, PartSourceContext partSourceContext, ShopifyClient shopifyClient, NexpartService nexpartService, VehicleService vehicleService) // { // _partSourceContext = partSourceContext; // _shopifyClient = shopifyClient; // _vehicleService = vehicleService; // } // public async Task Run() // { // IEnumerable products = null; // try // { // products = await _shopifyClient.Products.Get(new Dictionary { { "limit", 250 } }); // } // catch (Exception ex) // { // // TODO: Logging // return new AutomationJobResult // { // Message = "Failed to get products from Shopify", // IsSuccess = false // }; // } // while (products != null && products.Any()) // { // foreach (Product product in products) // { // try // { // ImportData importData = await _partSourceContext.ImportData // .Where(i => i.ShopifyId == product.Id && i.UpdatedAt <= DateTime.Now.AddDays(-7)) // .FirstOrDefaultAsync(); // if (importData == null) // { // continue; // } // bool isFitment = false; // IList vehicles = _vehicleService.GetVehiclesForPart(importData.PartNumber, importData.LineCode, 255); // if (vehicles.Count > 250) // { // continue; // } // IList vehicleIdFitment = _vehicleService.GetVehicleIdFitment(vehicles); // if (vehicleIdFitment.Count > 0 && vehicleIdFitment.Count <= 250) // { // isFitment = true; // string json = JsonConvert.SerializeObject(vehicleIdFitment); // if (json.Length >= 100000) // { // continue; // } // Metafield vehicleMetafield = new Metafield // { // Namespace = "fitment", // Key = "ids", // Value = json, // ValueType = "json_string", // OwnerResource = "product", // OwnerId = product.Id // }; // await _shopifyClient.Metafields.Add(vehicleMetafield); // } // IList ymmFitment = _vehicleService.GetYmmFitment(vehicles); // if (ymmFitment.Count > 0) // { // isFitment = true; // string json = JsonConvert.SerializeObject(ymmFitment); // if (json.Length >= 100000) // { // continue; // } // Metafield ymmMetafield = new Metafield // { // Namespace = "fitment", // Key = "seo", // Value = json, // ValueType = "json_string", // OwnerResource = "product", // OwnerId = product.Id // }; // await _shopifyClient.Metafields.Add(ymmMetafield); // } // Metafield isFitmentMetafield = new Metafield // { // Namespace = "Flags", // Key = "IsFitment", // Value = isFitment.ToString(), // ValueType = "string", // OwnerResource = "product", // OwnerId = product.Id // }; // await _shopifyClient.Metafields.Add(isFitmentMetafield); // //Metafield noteTextMetafield = new Metafield // //{ // // Namespace = "Flags", // // Key = "IsFitment", // // Value = isFitment.ToString(), // // ValueType = "string", // // OwnerResource = "product", // // OwnerId = product.Id // //}; // //await _shopifyClient.Metafields.Add(noteTextMetafield); // List tags = new List // { // importData.LineCode, // importData.PartNumber // }; // for (int j = 0; j < vehicleIdFitment.Count; j += 25) // { // tags.Add(string.Join('-', vehicleIdFitment.Skip(j).Take(25).Select(j => $"v{j}"))); // } // tags.AddRange(ymmFitment); // if (tags.Count > 250) // { // tags = tags.Take(250).ToList(); // } // product.Tags = string.Join(',', tags); // await _shopifyClient.Products.Update(product); // importData.IsFitment = isFitment; // importData.UpdatedAt = DateTime.Now; // importData.UpdateType = "Fitment"; // } // catch (ShopifyClientException ex) // { // // TODO: Log // } // catch (Exception ex) // { // // TODO: Log // } // } // try // { // _partSourceContext.SaveChanges(); // products = await _shopifyClient.Products.GetNext(); // } // catch (Exception ex) // { // products = await _shopifyClient.Products.GetNext(); // } // } // return new AutomationJobResult // { // IsSuccess = true // }; // } // private async Task DeleteFitmentMetafields(long shopifyId) // { // IDictionary parameters = new Dictionary // { // { "metafield[owner_id]", shopifyId}, // { "metafield[owner_resource]", "product" }, // { "namespace", "fitment" }, // }; // IEnumerable metafields = await _shopifyClient.Metafields.Get(parameters); // foreach (Metafield metafield in metafields) // { // await _shopifyClient.Metafields.Delete(metafield); // } // } // public IList GetVehicles(string partNumber, string lineCode) // { // partNumber = Regex.Replace(partNumber, "[^a-zA-Z0-9]", string.Empty); // //string sql = $"select distinct BaseVehicleId, EngineConfigId from dbo.Fitment where ManufacturerCode in (select WhiCode from DcfMapping where PartSourceCode='{lineCode}') and (partNumber = '{partNumber}' or partNumber = '{partNumber.Replace("-", string.Empty)}')"; // string sql = $"with FitmentIds (BaseVehicleId, EngineConfigId) as (select distinct BaseVehicleId, EngineConfigId from dbo.Fitment where LineCode in (select WhiCode from DcfMapping where LineCode='{lineCode}') and PartNumber = '{partNumber}') select v.* from VehicleData v join FitmentIds f on v.BaseVehicleId = f.BaseVehicleId and v.EngineConfigId = f.EngineConfigId;"; //#pragma warning disable EF1000 // Possible SQL injection vulnerability. // IList vehicles = _partSourceContext.Vehicles.FromSql(sql).ToList(); //#pragma warning restore EF1000 // Possible SQL injection vulnerability. // return vehicles; // } // private void Update() // { // } // } //}