public virtual PricePromotion GetPrice(ParameterPromotion parPromotion) { var PriceDealer = db.ExecuteScalar <ParameterPromotion, decimal>(SqlGetPriceDealer, parPromotion); var Res = new PricePromotion() { Price = PriceDealer }; foreach (var el in db.Execute <ParameterPromotion, PricePromotion>(SqlGetPrice, parPromotion)) { if ((el.CalcPrice(PriceDealer) < Res.Price && Res.Priority <= el.Priority) || Res.Priority < el.Priority) { var IsUsePrice = (Res.Priority == el.Priority); Res = el; Res.Price = el.CalcPrice(PriceDealer, IsUsePrice); } } return(Res); }
public override bool RecalcPrice(IdReceiptWares pIdReceiptWares) { var startTime = System.Diagnostics.Stopwatch.StartNew(); lock (GetObjectForLockByIdWorkplace(pIdReceiptWares.IdWorkplace)) { try { var RH = ViewReceipt(pIdReceiptWares); ParameterPromotion par; var InfoClient = GetInfoClientByReceipt(pIdReceiptWares); if (InfoClient.Count() == 1) { par = InfoClient.First(); } else { par = new ParameterPromotion(); } //par.BirthDay = DateTime.Now.Date; Test par.CodeWarehouse = Global.CodeWarehouse; par.Time = Convert.ToInt32(RH.DateReceipt.ToString("HHmm")); par.CodeDealer = Global.DefaultCodeDealer; var r = ViewReceiptWares(pIdReceiptWares); foreach (var RW in r) { var MPI = GetMinPriceIndicative((IdReceiptWares)RW); par.CodeWares = RW.CodeWares; var Res = GetPrice(par); if (Res != null && RW.ParPrice1 != 999999 && (Res.Priority > 0 || string.IsNullOrEmpty(RW.BarCode2Category)))//Не перераховуємо для Сигарет s для 2 категорії окрім пріоритет 1 { RW.Price = MPI.GetPrice(Res.Price, Res.IsIgnoreMinPrice == 0, Res.CodePs > 0); RW.TypePrice = MPI.typePrice; RW.ParPrice1 = Res.CodePs; RW.ParPrice2 = (int)Res.TypeDiscont; RW.ParPrice3 = Res.Data; RW.Priority = Res.Priority; } //Якщо друга категорія - перераховуємо на основі Роздрібної ціни. if (Res.Priority == 0 && !string.IsNullOrEmpty(RW.BarCode2Category) && RW.BarCode2Category.Length == 13) { RW.Price = RW.PriceDealer; } ReplaceWaresReceipt(RW); } GetPricePromotionKit(pIdReceiptWares, pIdReceiptWares.CodeWares); RecalcHeadReceipt(pIdReceiptWares); startTime.Stop(); Console.WriteLine($"RecalcPrice=>{startTime.Elapsed} {r?.Count()}"); /*foreach (var RW in r) * Console.WriteLine($"{RW.NameWares}");*/ return(true); } catch (Exception ex) { Global.OnSyncInfoCollected?.Invoke(new SyncInformation { TerminalId = Global.GetTerminalIdByIdWorkplace(pIdReceiptWares.IdWorkplace), Exception = ex, Status = eSyncStatus.Error, StatusDescription = "RecalcPrice=>" + ex.Message + '\n' + new System.Diagnostics.StackTrace().ToString() }); return(false); } } }