public static decimal CalculateOrderTotal(Ticket ticket, Order order) { var discount = ticket.GetPreTaxServicesTotal(); if (discount != 0) { var tsum = ticket.GetPlainSum(); var rate = tsum > 0 ? (discount * 100) / tsum : 100; var tiTotal = order.GetTotal(); var itemDiscount = (tiTotal * rate) / 100; return tiTotal + itemDiscount; } return order.GetTotal(); }
public void RecalculateTicket(Ticket ticket) { var total = ticket.TotalAmount; ticket.Calculations.Where(x => x.CalculationType == 5).ToList().ForEach( x => x.Amount = _expressionService.EvalCommand(FunctionNames.Calculation, "_" + x.Name, new { Ticket = ticket }, 0m)); ticket.Recalculate(); if (total != ticket.TotalAmount) { _applicationState.NotifyEvent(RuleEventNames.TicketTotalChanged, new { Ticket = ticket, PreviousTotal = total, TicketTotal = ticket.GetSum(), DiscountTotal = ticket.GetPreTaxServicesTotal(), PaymentTotal = ticket.GetPaymentAmount(), RemainingAmount = ticket.GetRemainingAmount() }); } }
public void RecalculateTicket(Ticket ticket) { var total = ticket.TotalAmount; ticket.Recalculate(); if (total != ticket.TotalAmount) { _automationService.NotifyEvent(RuleEventNames.TicketTotalChanged, new { Ticket = ticket, PreviousTotal = total, TicketTotal = ticket.GetSum(), DiscountTotal = ticket.GetPreTaxServicesTotal(), PaymentTotal = ticket.GetPaymentAmount(), RemainingAmount = ticket.GetRemainingAmount() }); } }
private IEnumerable<Order> GroupLinesByValue(Ticket ticket, Func<MenuItem, string> selector, string defaultValue, bool calcDiscounts = false) { var discounts = calcDiscounts ? ticket.GetPreTaxServicesTotal() : 0; var di = discounts > 0 ? discounts / ticket.GetPlainSum() : 0; var cache = new Dictionary<string, decimal>(); foreach (var order in ticket.Orders.OrderBy(x => x.Id).ToList()) { var item = order; var value = _cacheService.GetMenuItemData(item.MenuItemId, selector); if (string.IsNullOrEmpty(value)) value = defaultValue; if (!cache.ContainsKey(value)) cache.Add(value, 0); var total = (item.GetTotal()); cache[value] += Decimal.Round(total - (total * di), 2); } return cache.Select(x => new Order { MenuItemName = x.Key, Price = x.Value, Quantity = 1, PortionCount = 1 }); }
private static string ReplaceDocumentVars(string document, Ticket ticket, int orderNo, string userName) { string result = document; if (string.IsNullOrEmpty(document)) return ""; result = FormatData(result, TagNames.TicketDate, () => ticket.Date.ToShortDateString()); result = FormatData(result, TagNames.TicketTime, () => ticket.Date.ToShortTimeString()); result = FormatData(result, TagNames.Date, () => DateTime.Now.ToShortDateString()); result = FormatData(result, TagNames.Time, () => DateTime.Now.ToShortTimeString()); result = FormatData(result, TagNames.TicketId, () => ticket.Id.ToString()); result = FormatData(result, TagNames.TicketNo, () => ticket.TicketNumber); result = FormatData(result, TagNames.OrderNo, orderNo.ToString); result = FormatData(result, TagNames.TicketTag, ticket.GetTagData); result = FormatDataIf(true, result, TagNames.Department, () => GetDepartmentName(ticket.DepartmentId)); const string ticketTagPattern = TagNames.TicketTag2 + "[^}]+}"; while (Regex.IsMatch(result, ticketTagPattern)) { var value = Regex.Match(result, ticketTagPattern).Groups[0].Value; var tags = ""; try { var tag = value.Trim('{', '}').Split(':')[1]; tags = tag.Split(',').Aggregate(tags, (current, t) => current + (!string.IsNullOrEmpty(ticket.GetTagValue(t.Trim())) ? (t + ": " + ticket.GetTagValue(t.Trim()) + "\r") : "")); result = FormatData(result.Trim('\r'), value, () => tags); } catch (Exception) { result = FormatData(result, value, () => ""); } } const string ticketTag2Pattern = TagNames.TicketTag3 + "[^}]+}"; while (Regex.IsMatch(result, ticketTag2Pattern)) { var value = Regex.Match(result, ticketTag2Pattern).Groups[0].Value; var tag = value.Trim('{', '}').Split(':')[1]; var tagValue = ticket.GetTagValue(tag); try { result = FormatData(result, value, () => tagValue); } catch (Exception) { result = FormatData(result, value, () => ""); } } var title = userName; result = FormatData(result, TagNames.LocationUser, () => title); result = FormatData(result, TagNames.UserName, () => userName); result = FormatData(result, TagNames.Note, () => ticket.Note); result = FormatData(result, TagNames.AccName, () => ticket.AccountName); if (ticket.AccountId > 0 && (result.Contains(TagNames.AccAddress) || result.Contains(TagNames.AccPhone))) { var account = Dao.SingleWithCache<Resource>(x => x.Id == ticket.AccountId); result = FormatData(result, TagNames.AccPhone, () => account.SearchString); } result = RemoveTag(result, TagNames.AccAddress); result = RemoveTag(result, TagNames.AccPhone); var payment = ticket.GetPaymentAmount(); var remaining = ticket.GetRemainingAmount(); var plainTotal = ticket.GetPlainSum(); var preTaxServices = ticket.GetPreTaxServicesTotal(); var taxAmount = ticket.CalculateTax(plainTotal, preTaxServices); //GetTaxTotal(ticket.Orders, plainTotal, ticket.GetDiscountTotal()); var servicesTotal = ticket.GetPostTaxServicesTotal(); //ticket.CalculateTax(plainTotal, preTaxServices); result = FormatDataIf(taxAmount > 0 || preTaxServices > 0 || servicesTotal > 0, result, TagNames.PlainTotal, () => plainTotal.ToString("#,#0.00")); result = FormatDataIf(preTaxServices > 0, result, TagNames.DiscountTotal, () => preTaxServices.ToString("#,#0.00")); result = FormatDataIf(taxAmount > 0, result, TagNames.TaxTotal, () => taxAmount.ToString("#,#0.00")); result = FormatDataIf(taxAmount > 0, result, TagNames.TaxDetails, () => GetTaxDetails(ticket.Orders, plainTotal, preTaxServices)); result = FormatDataIf(servicesTotal > 0, result, TagNames.CalculationDetails, () => GetServiceDetails(ticket)); result = FormatDataIf(payment > 0, result, TagNames.IfPaid, () => string.Format(Resources.RemainingAmountIfPaidValue_f, payment.ToString("#,#0.00"), remaining.ToString("#,#0.00"))); result = FormatDataIf(preTaxServices > 0, result, TagNames.IfDiscount, () => string.Format(Resources.DiscountTotalAndTicketTotalValue_f, (plainTotal).ToString("#,#0.00"), preTaxServices.ToString("#,#0.00"))); result = FormatDataIf(preTaxServices < 0, result, TagNames.IfFlatten, () => string.Format(Resources.IfNegativeDiscountValue_f, preTaxServices.ToString("#,#0.00"))); result = FormatData(result, TagNames.TicketTotal, () => ticket.GetSum().ToString("#,#0.00")); result = FormatData(result, TagNames.PaymentTotal, () => ticket.GetPaymentAmount().ToString("#,#0.00")); result = FormatData(result, TagNames.Balance, () => ticket.GetRemainingAmount().ToString("#,#0.00")); result = FormatData(result, TagNames.TotalText, () => HumanFriendlyInteger.CurrencyToWritten(ticket.GetSum())); result = FormatData(result, TagNames.Totaltext, () => HumanFriendlyInteger.CurrencyToWritten(ticket.GetSum(), true)); result = _settingReplacer.ReplaceSettingValue("{SETTING:([^}]+)}", result); return result; }