Exemple #1
0
        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));
        }