public BulkProductParseResult ParseExtraPricesBulk( int manufacturerId, int supplierId, DateTime date, AlloyType alloyType, RollType rollType, int priceExtraCategoryId, bool remove, string raw) { var products = new List <Product>(); var errors = new List <string>(); if (remove) { raw = "0"; } try { var lines = raw.Split(new [] { '\n' }, StringSplitOptions.RemoveEmptyEntries); var headers = lines[0].Split('\t'); using (var storage = new Storage()) { if (lines.Length == 1 && headers.Length == 1) { var price = Convert.ToDecimal(raw.Trim().FixDecimalSeparator()); return(new BulkProductParseResult { Errors = new string[0], Products = storage .Products .Where( p => p.ManufacturerId == manufacturerId && p.RawMaterial.ManufacturerId == supplierId && (alloyType == AlloyType.Undefined || p.RawMaterial.RawMaterialType.AlloyType == alloyType) && (rollType == RollType.Undefined || p.RawMaterial.RawMaterialType.RollType == rollType) ) .ToList() .Select( p => { p.PriceExtras = new[] { new PriceExtra { PriceExtraCategoryId = priceExtraCategoryId, PriceItems = new[] { new PriceItem { Date = date, OwnerId = manufacturerId, Price = price, } } } }; return p; }) .ToArray() }); } for (int lineId = 1; lineId < lines.Length; lineId++) { var prices = lines[lineId].Split('\t'); var productName = prices[0].Trim(); for (int colId = 1; colId < headers.Length; colId++) { var thickness = Convert.ToDecimal(headers[colId].FixDecimalSeparator()); var query = storage .RawMaterials .LoadWith(rm => rm.RawMaterialType) .Where( rm => rm.ManufacturerId == supplierId && rm.RawMaterialType.Thickness == thickness); if (alloyType != AlloyType.Undefined) { query = query.Where(rm => rm.RawMaterialType.AlloyType == alloyType); } if (rollType != RollType.Undefined) { query = query.Where(rm => rm.RawMaterialType.RollType == rollType); } var rawMaterials = query.ToList(); if (!rawMaterials.Any()) { errors.Add($"Выбранный поставщик не производит материала с такими параметрами и толщиной {thickness}"); continue; } foreach (var rawMaterial in rawMaterials) { var product = storage .Products .SingleOrDefault( p => p.ManufacturerId == manufacturerId && p.RawMaterialId == rawMaterial.RawMaterialId && p.Name == productName); if (null == product) { product = new Product { ManufacturerId = manufacturerId, RawMaterialId = rawMaterial.RawMaterialId, Thickness = rawMaterial.RawMaterialType.Thickness, Name = productName, }; } var priceExtra = new PriceExtra { PriceExtraCategoryId = priceExtraCategoryId, ProductId = product.ProductId, }; var price = string.IsNullOrEmpty(prices[colId]) ? null : (decimal?)Convert.ToDecimal(prices[colId].FixDecimalSeparator()); var priceItem = new PriceItem { OwnerId = manufacturerId, Date = date, Price = remove ? null : price, }; priceExtra.PriceItems = new[] { priceItem }; product.PriceExtras = new[] { priceExtra }; products.Add(product); if (!string.IsNullOrEmpty(prices[colId])) { } } } } } } catch (Exception ex) { _logger.Error(ex); errors.Add("Ошибка синтаксического разбора строки."); } return(new BulkProductParseResult { Errors = errors.ToArray(), Products = errors.Any() ? new Product[0] : products.ToArray() }); }
public BulkMaterialParseResult ParseMaterialPricesBulk( int manufacturerId, int supplierId, DateTime date, AlloyType alloyType, RollType rollType, bool remove, string raw) { var materials = new List <RawMaterial>(); var errors = new List <string>(); try { using (var storage = new Storage()) { if (remove) { var allThickness = storage.RawMaterials .Where( rm => rm.ManufacturerId == supplierId && (alloyType == AlloyType.Undefined || rm.RawMaterialType.AlloyType == alloyType) && (rollType == RollType.Undefined || rm.RawMaterialType.RollType == rollType) ) .Select(rm => rm.RawMaterialType.Thickness.ToString(CultureInfo.InvariantCulture)) .ToList(); raw = string.Join("\t", allThickness) + "\n" + string.Join("\t", allThickness.Select(p => "")); } var lines = raw.Split('\n'); var headers = lines[0].Split('\t'); var prices = lines[1].Split('\t'); for (int i = 0; i < headers.Length; i++) { var thickness = Convert.ToDecimal(headers[i].FixDecimalSeparator()); if (!string.IsNullOrEmpty(prices[i])) { var rawMaterial = storage .RawMaterials .Where( rm => rm.ManufacturerId == supplierId && rm.RawMaterialType.AlloyType == alloyType && rm.RawMaterialType.RollType == rollType && rm.RawMaterialType.Thickness == thickness) .ToList(); if (!rawMaterial.Any()) { errors.Add($"Выбранный поставщик не производит материала с такими параметрами и толщиной {thickness}"); continue; } if (rawMaterial.Count > 1) { errors.Add( $"Выбранный поставщик производит более 1 материала с такими параметрами и толщиной {thickness}, невозможно определить нужный."); continue; } var priceItem = new PriceItem { RawMaterialId = rawMaterial[0].RawMaterialId, OwnerId = manufacturerId, Date = date, Price = remove ? null : (decimal?)Convert.ToDecimal(prices[i].FixDecimalSeparator()) }; rawMaterial[0].PriceItems = new[] { priceItem }; materials.Add(rawMaterial[0]); } } } } catch (Exception ex) { _logger.Error(ex); errors.Add("Ошибка синтаксического разбора строки."); } return(new BulkMaterialParseResult { Errors = errors.ToArray(), Materials = errors.Any() ? new RawMaterial[0] : materials.ToArray() }); }
private IEnumerable<string> EnumerateProductNames(int plantCode, RollType rollType, AlloyType alloyType) { if (plantCode == 1) { if (rollType == RollType.Hot) { return new[] { "150х100х", "100х100х", "120х80х", "120х120х", "140х100х", "160х80х", "140х140х", "160х120х", "150х150х", "160х140х", "180х100х", "200х100х", "160х160х", "180х140х", "200х120х", "180х180х", "200х160х", "240х120х", "200х200х", "240х160х", "250х150х", "300х100х", "250х250х", "300х200х", "300х300х", "159х", "219х", "273х", "325 - 377х", "426х", }; } } if (plantCode == 2) { if (rollType == RollType.Hot) { return new[] { "г/к 15х15х", "г/к 20х10х", "г/к 20х20х", "г/к 25х25х", "г/к 30х20х", "г/к 30х30х", "г/к 40х20х", "г/к 40х25х", "г/к 40х40х", "г/к 50х25х", "г/к 50х30х", "г/к 50х50х", "г/к 60х30х", "г/к 60х40х", "г/к 60х60х", "г/к 80х40х", "г/к 16х", "г/к 20х", "г/к 25х", "г/к 28х", "г/к 30х", "г/к 32х", "г/к 38х", "г/к 40х", "г/к 42х", "г/к 48х", "г/к 51х", "г/к 57х", "г/к 60х", "г/к 76х", }; } if (rollType == RollType.Cold) { return new[] { "х/к 15х15х", "х/к 20х10х", "х/к 25х25х", "х/к 30х15х", "х/к 30х30х", "х/к 40х20х", "х/к 50х25х", "х/к 60х30х", "х/к 16х", "х/к 18х", "х/к 22х", "х/к 25х", "х/к 30х", "х/к 40х", "х/к 51х", "х/к 76х", }; } } return Enumerable.Empty<string>(); }
public BulkMaterialParseResult ParseMaterialPricesBulk( int manufacturerId, int supplierId, DateTime date, AlloyType alloyType, RollType rollType, bool remove, string raw) { var materials = new List<RawMaterial>(); var errors = new List<string>(); try { using (var storage = new Storage()) { if (remove) { var allThickness = storage.RawMaterials .Where( rm => rm.ManufacturerId == supplierId && (alloyType == AlloyType.Undefined || rm.RawMaterialType.AlloyType == alloyType) && (rollType == RollType.Undefined || rm.RawMaterialType.RollType == rollType) ) .Select(rm => rm.RawMaterialType.Thickness.ToString(CultureInfo.InvariantCulture)) .ToList(); raw = string.Join("\t", allThickness) + "\n" + string.Join("\t", allThickness.Select(p => "")); } var lines = raw.Split('\n'); var headers = lines[0].Split('\t'); var prices = lines[1].Split('\t'); for (int i = 0; i < headers.Length; i++) { var thickness = Convert.ToDecimal(headers[i].FixDecimalSeparator()); if (!string.IsNullOrEmpty(prices[i])) { var rawMaterial = storage .RawMaterials .Where( rm => rm.ManufacturerId == supplierId && rm.RawMaterialType.AlloyType == alloyType && rm.RawMaterialType.RollType == rollType && rm.RawMaterialType.Thickness == thickness) .ToList(); if (!rawMaterial.Any()) { errors.Add($"Выбранный поставщик не производит материала с такими параметрами и толщиной {thickness}"); continue; } if (rawMaterial.Count > 1) { errors.Add( $"Выбранный поставщик производит более 1 материала с такими параметрами и толщиной {thickness}, невозможно определить нужный."); continue; } var priceItem = new PriceItem { RawMaterialId = rawMaterial[0].RawMaterialId, OwnerId = manufacturerId, Date = date, Price = remove ? null : (decimal?)Convert.ToDecimal(prices[i].FixDecimalSeparator()) }; rawMaterial[0].PriceItems = new[] { priceItem }; materials.Add(rawMaterial[0]); } } } } catch (Exception ex) { _logger.Error(ex); errors.Add("Ошибка синтаксического разбора строки."); } return new BulkMaterialParseResult { Errors = errors.ToArray(), Materials = errors.Any() ? new RawMaterial[0] : materials.ToArray() }; }
public BulkProductParseResult ParseExtraPricesBulk( int manufacturerId, int supplierId, DateTime date, AlloyType alloyType, RollType rollType, int priceExtraCategoryId, bool remove, string raw) { var products = new List<Product>(); var errors = new List<string>(); if (remove) { raw = "0"; } try { var lines = raw.Split(new [] {'\n'}, StringSplitOptions.RemoveEmptyEntries); var headers = lines[0].Split('\t'); using (var storage = new Storage()) { if (lines.Length == 1 && headers.Length == 1) { var price = Convert.ToDecimal(raw.Trim().FixDecimalSeparator()); return new BulkProductParseResult { Errors = new string[0], Products = storage .Products .Where( p => p.ManufacturerId == manufacturerId && p.RawMaterial.ManufacturerId == supplierId && (alloyType == AlloyType.Undefined || p.RawMaterial.RawMaterialType.AlloyType == alloyType) && (rollType == RollType.Undefined || p.RawMaterial.RawMaterialType.RollType == rollType) ) .ToList() .Select( p => { p.PriceExtras = new[] { new PriceExtra { PriceExtraCategoryId = priceExtraCategoryId, PriceItems = new[] { new PriceItem { Date = date, OwnerId = manufacturerId, Price = price, } } } }; return p; }) .ToArray() }; } for (int lineId = 1; lineId < lines.Length; lineId++) { var prices = lines[lineId].Split('\t'); var productName = prices[0].Trim(); for (int colId = 1; colId < headers.Length; colId++) { var thickness = Convert.ToDecimal(headers[colId].FixDecimalSeparator()); var query = storage .RawMaterials .LoadWith(rm => rm.RawMaterialType) .Where( rm => rm.ManufacturerId == supplierId && rm.RawMaterialType.Thickness == thickness); if (alloyType != AlloyType.Undefined) { query = query.Where(rm => rm.RawMaterialType.AlloyType == alloyType); } if (rollType != RollType.Undefined) { query = query.Where(rm => rm.RawMaterialType.RollType == rollType); } var rawMaterials = query.ToList(); if (!rawMaterials.Any()) { errors.Add($"Выбранный поставщик не производит материала с такими параметрами и толщиной {thickness}"); continue; } foreach (var rawMaterial in rawMaterials) { var product = storage .Products .SingleOrDefault( p => p.ManufacturerId == manufacturerId && p.RawMaterialId == rawMaterial.RawMaterialId && p.Name == productName); if (null == product) { product = new Product { ManufacturerId = manufacturerId, RawMaterialId = rawMaterial.RawMaterialId, Thickness = rawMaterial.RawMaterialType.Thickness, Name = productName, }; } var priceExtra = new PriceExtra { PriceExtraCategoryId = priceExtraCategoryId, ProductId = product.ProductId, }; var price = string.IsNullOrEmpty(prices[colId]) ? null : (decimal?)Convert.ToDecimal(prices[colId].FixDecimalSeparator()); var priceItem = new PriceItem { OwnerId = manufacturerId, Date = date, Price = remove ? null : price, }; priceExtra.PriceItems = new[] { priceItem }; product.PriceExtras = new[] { priceExtra }; products.Add(product); if (!string.IsNullOrEmpty(prices[colId])) { } } } } } } catch (Exception ex) { _logger.Error(ex); errors.Add("Ошибка синтаксического разбора строки."); } return new BulkProductParseResult { Errors = errors.ToArray(), Products = errors.Any() ? new Product[0] : products.ToArray() }; }
private IEnumerable <string> EnumerateProductNames(int plantCode, RollType rollType, AlloyType alloyType) { if (plantCode == 1) { if (rollType == RollType.Hot) { return(new[] { "150х100х", "100х100х", "120х80х", "120х120х", "140х100х", "160х80х", "140х140х", "160х120х", "150х150х", "160х140х", "180х100х", "200х100х", "160х160х", "180х140х", "200х120х", "180х180х", "200х160х", "240х120х", "200х200х", "240х160х", "250х150х", "300х100х", "250х250х", "300х200х", "300х300х", "159х", "219х", "273х", "325 - 377х", "426х", }); } } if (plantCode == 2) { if (rollType == RollType.Hot) { return(new[] { "г/к 15х15х", "г/к 20х10х", "г/к 20х20х", "г/к 25х25х", "г/к 30х20х", "г/к 30х30х", "г/к 40х20х", "г/к 40х25х", "г/к 40х40х", "г/к 50х25х", "г/к 50х30х", "г/к 50х50х", "г/к 60х30х", "г/к 60х40х", "г/к 60х60х", "г/к 80х40х", "г/к 16х", "г/к 20х", "г/к 25х", "г/к 28х", "г/к 30х", "г/к 32х", "г/к 38х", "г/к 40х", "г/к 42х", "г/к 48х", "г/к 51х", "г/к 57х", "г/к 60х", "г/к 76х", }); } if (rollType == RollType.Cold) { return(new[] { "х/к 15х15х", "х/к 20х10х", "х/к 25х25х", "х/к 30х15х", "х/к 30х30х", "х/к 40х20х", "х/к 50х25х", "х/к 60х30х", "х/к 16х", "х/к 18х", "х/к 22х", "х/к 25х", "х/к 30х", "х/к 40х", "х/к 51х", "х/к 76х", }); } } return(Enumerable.Empty <string>()); }
public IEnumerable<ProductExt> FindProducts(int? manufacturerId, string name, decimal? thickness, AlloyType? alloyType, RollType? rollType) { using (var storage = new Storage()) { var query = storage .Products .LoadWith(p => p.Manufacturer) .LoadWith(p => p.RawMaterial.RawMaterialType) .Where(product => true); if (null != manufacturerId) { query = query.Where(product => product.ManufacturerId == manufacturerId.Value); } if (!string.IsNullOrEmpty(name)) { query = query.Where(product => product.Name == name); } if (null != thickness) { query = query.Where(product => product.Thickness == thickness.Value); } if (null != alloyType) { query = query.Where(product => product.RawMaterial.RawMaterialType.AlloyType == alloyType.Value); } if (null != rollType) { query = query.Where(product => product.RawMaterial.RawMaterialType.RollType == rollType.Value); } return query .ToList() .Select(p => new ProductExt { ProductId = p.ProductId, ManufacturerId = p.ManufacturerId, ManufacturerName = p.Manufacturer.Name, RawMaterialTypeId = p.RawMaterial.RawMaterialType.RawMaterialTypeId, RawMaterialTypeName = p.RawMaterial.RawMaterialType.Name, AlloyType = p.RawMaterial.RawMaterialType.AlloyType, RollType = p.RawMaterial.RawMaterialType.RollType, Thickness = p.Thickness, Name = p.Name, }); } }