public ReceiptWares AddWaresBarCode(IdReceipt pReceipt, string pBarCode, decimal pQuantity = 0) { if (pBarCode == null) { return(null); } IEnumerable <ReceiptWares> w = null; pBarCode = pBarCode.Trim(); if (pBarCode.Length >= 8) { w = db.FindWares(pBarCode);//Пошук по штрихкоду } else// Можливо артикул товару { int Article; if (int.TryParse(pBarCode, out Article)) { w = db.FindWares(null, null, 0, 0, 0, Article); } else { return(null); } } //ReceiptWares W = null; if (w == null || w.Count() == 0) // Якщо не знайшли спробуем по ваговим і штучним штрихкодам. { foreach (var el in Global.CustomerBarCode.Where(el => el.KindBarCode == eKindBarCode.EAN13 /*&& (el.TypeBarCode == eTypeBarCode.WaresWeight || el.TypeBarCode == eTypeBarCode.WaresUnit )*/)) { w = null; if (el.Prefix.Equals(pBarCode.Substring(0, el.Prefix.Length))) { if (el.KindBarCode == eKindBarCode.EAN13 && pBarCode.Length != 13) { break; } int varCode = Convert.ToInt32(pBarCode.Substring(el.Prefix.Length, el.LenghtCode)); int varValue = Convert.ToInt32(pBarCode.Substring(el.Prefix.Length + el.LenghtCode, el.LenghtQuantity)); switch (el.TypeCode) { case eTypeCode.Article: w = db.FindWares(null, null, 0, 0, 0, varCode); break; case eTypeCode.Code: w = db.FindWares(null, null, varCode); break; case eTypeCode.PercentDiscount: _ = ds.CheckDiscountBarCodeAsync(pReceipt, pBarCode, varCode); return(new ReceiptWares(pReceipt)); default: break; } if (w != null && w.Count() == 1) //Знайшли що треба { //parQuantity = (w.First().CodeUnit == Global.WeightCodeUnit ? varValue / 1000m : varValue); if (pQuantity > 0) { pQuantity = varValue; } break; } } } } if (w == null || w.Count() != 1) { return(null); } var W = w.First(); W.RecalcTobacco(); if (pBarCode.Length >= 8) { W.BarCode = pBarCode; } if (pQuantity == 0 || W.IsMultiplePrices) //Якщо сигарети не добававляємо товар. { return(W); } if (W.Price == 0)//Якщо немає ціни на товар !!!!TMP Краще обробляти на GUI буде пізніше { return(W); } W.SetIdReceipt(pReceipt); W.Quantity = (W.CodeUnit == Global.WeightCodeUnit ? pQuantity / 1000m : pQuantity);// Вага приходить в грамах return(AddReceiptWares(W)); }