示例#1
0
        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()
            });
        }
示例#2
0
        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()
            });
        }
示例#3
0
		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>();
		}
示例#4
0
		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()
			};
		}
示例#5
0
		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()
			};
		}
示例#6
0
        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>());
        }
示例#7
0
		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,
					});
			}
		}