public void ImportProducts(DataTable dt) { /*dt.Columns[0].ColumnName = "Num"; * dt.Columns[1].ColumnName = "VendorCode"; * dt.Columns[2].ColumnName = "ProductName"; * dt.Columns[3].ColumnName = "Count"; * dt.Columns[5].ColumnName = "Price";*/ try { Products.Clear(); List <ImportedProduct> products = new List <ImportedProduct>(); for (int i = 0; i < dt.Rows.Count; i++) { var pr = new ImportedProduct { Product = new Product { Name = dt.Rows[i]["ProductName"].ToString(), Price = Convert.ToDecimal(dt.Rows[i]["Price"].ToString().Replace(".", ",")), VendorCode = dt.Rows[i]["VendorCode"].ToString() }, Count = Convert.ToInt32(dt.Rows[i]["Count"].ToString()), Additional = Convert.ToDecimal(dt.Rows[i]["Additional"].ToString().Replace(".", ",")) }; using (UserContext db = new UserContext(Settings.constr)) { var code = db.ProductAttributes.FirstOrDefault(x => x.VendorCode == pr.Product.VendorCode.ToUpper()); if (code != null) { pr.TNVEDCode = code.TNVEDCode; pr.TNVEDValue = code.TNVEDValue; } else { FailedImportedProducts.Add(pr); } } products.Add(pr); } Products = products; } catch (Exception e) { MessageBox.Show("Ошибка при импорте!"); } }
private string ParseExpression(ImportedProduct product, CalculationItem item, List <CalculatedValue> caclulatedValues) { Dictionary <string, string> replace = new Dictionary <string, string>(); string itemPattern = @"item\[\d+\]"; foreach (Match match in Regex.Matches(item.Expression, itemPattern)) { string pattern = @"\d+"; var itemId = Convert.ToInt32(Regex.Match(match.Value, pattern).ToString()); var itemValue = caclulatedValues.FirstOrDefault(x => x.Item.ID == itemId); if (itemValue != null) { if (!replace.ContainsKey(match.Value)) { replace.Add(match.Value, itemValue.Value.ToString()); } } } string constantPattern = @"constant\[\d+\]"; foreach (Match match in Regex.Matches(item.Expression, constantPattern)) { string pattern = @"\d+"; var constantId = Convert.ToInt32(Regex.Match(match.Value, pattern).ToString()); var constantValue = _usedConstatns.FirstOrDefault(x => x.ID == constantId); if (constantValue != null) { if (!replace.ContainsKey(match.Value)) { replace.Add(match.Value, constantValue.Value.ToString()); } } } string sumPattern = @"sum\[\d+\]"; foreach (Match match in Regex.Matches(item.Expression, sumPattern)) { string pattern = @"\d+"; var itemId = Convert.ToInt32(Regex.Match(match.Value, pattern).ToString()); var sumValue = ItemSumList.FirstOrDefault(x => x.Item.ID == itemId); if (sumValue != null) { if (!replace.ContainsKey(match.Value)) { replace.Add(match.Value, sumValue.Value.ToString()); } } } string dynamicPattern = @"dynamic\[\d+\]"; foreach (Match match in Regex.Matches(item.Expression, dynamicPattern)) { string pattern = @"\d+"; var dynamicId = Convert.ToInt32(Regex.Match(match.Value, pattern).ToString()); var dynamicValue = CalculatedDynamics.FirstOrDefault(x => x.Dynamic.ID == dynamicId); if (dynamicValue != null) { if (!replace.ContainsKey(match.Value)) { replace.Add(match.Value, dynamicValue.Value.ToString()); } } } replace.Add("price", product.Product.Price.ToString()); replace.Add("count", product.Count.ToString()); replace.Add("TNVEDCode", product.TNVEDCode.ToString()); replace.Add("TNVEDValue", product.TNVEDValue.ToString()); replace.Add("Additional", product.Additional.ToString()); var ret = item.Expression; foreach (var i in replace) { ret = ret.Replace(i.Key, i.Value); } return(ret); }