@using System @using System.Globalization @using System.Linq @using Resto.Front.PrintTemplates.Cheques.Razor @using Resto.Front.PrintTemplates.Cheques.Razor.TemplateModels @using Newtonsoft.Json @using System.IO @inherits TemplateBase @{ var chequeTask = Model.ChequeTask; var order = Model.Order; var sum = chequeTask.Sales.Sum(sale => sale.GetCost() - sale.DiscountSum + sale.IncreaseSum).RoundMoney(); var countCheck = 1; paymentsTypesName = new List(); if (order.Delivery != null) { if(!order.Delivery.IsSelfService) { throw new OperationCanceledException("Stop printing - delivery order no."+@order.Number); } } /* try { string path = string.Format("{0}\\iiko\\CashServer\\Jsons\\",Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)); var chequeName = "order_"+order.Number; var jsonModel = JsonConvert.SerializeObject(Model.CommonInfo); string fullFileName = path + chequeName +"_"+DateTime.Now.ToString("dd-MM-yyyy_HH-mm-ss")+".json"; if (!System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(path); } File.WriteAllText(fullFileName , jsonModel); } catch (Exception) { }*/ try { if(Model.Extensions.BeforeCheque != null && Model.Extensions.BeforeCheque.Count() > 0) { var i = 0; foreach (var item in Model.Extensions.BeforeCheque) { if(item != null) { i++; } } } } catch (Exception) { } } @for (int i = 0; i < countCheck; i++) { if(i>0) { } if (!Model.ChequeInfo.IsForReport) {
Eleni's Pizza Works
6711 15th St E, Sarasota, FL 34243
} if (!Model.ChequeInfo.IsForReport) { } if(chequeTask.IsStorno) {
@(chequeTask.IsStorno ? Resources.StornoCheque : chequeTask.IsBuy ? Resources.OrderBuyReceipt : Resources.OrderPaymentReceipt)
}
Check #@order.Number
@Items(order) foreach (var discountItem in Model.Order.DiscountItems) { @discountItem.Type.Name $@FormatMoney(discountItem.DiscountSums.Sum(x => x.Value)*-1)
} var taxSum = 0m; foreach (var guest in Model.Order.Guests) { taxSum += guest.Items.Sum(item => item.IncludedVat); taxSum += guest.Items.Sum(item => item.ExcludedVat); } @Payments(chequeTask, order) if(paymentsTypesName.Count > 0) { @Raw(string.Join(Environment.NewLine, Model.Extensions.BeforeCheque)) } else { if (!Model.ChequeInfo.IsForReport) {
Order online www.elenispizzaworks.com
if(false) {
Scan QR with your
Mobile Phone
https://bit.ly/3Dhq2Wq
Review Us on Google!
} } @Raw(string.Join(Environment.NewLine, Model.Extensions.AfterCheque)) if (!chequeTask.IsStorno) {
@Resources.Signature
} } }
@helper Items(IOrder order) { if (order == null || order.Guests == null || order.Guests.Count() == 0 ) { @Resources.ZeroChequeBody } var guestsItems = order.Guests.Where(x => x.Items != null && x.Items.Count() > 0); if (guestsItems == null || guestsItems.Count() == 0 ) { @Resources.ZeroChequeBody } var orderItems = guestsItems.SelectMany(x => x.Items).Where( x => x.DeletionInfo == null).ToList(); if (orderItems == null || orderItems.Count() == 0) { @Resources.ZeroChequeBody } else if (Model.IsFullCheque) { @if (!Model.ChequeInfo.IsForReport) { Item @Resources.AmountShort @Resources.ProductSum } @GuestsItems(orderItems)
} } @helper GuestsItems(ICollection items) { foreach (var comboGroup in items.Where(item => item.DeletionInfo == null).GroupBy(i => i.Combo)) { var combo = comboGroup.Key; if (combo != null) { @combo.Name @(string.Format("{0} x", FormatAmount(combo.Amount))) $@FormatMoney(combo.Price * combo.Amount) } foreach (var orderItem in comboGroup.OrderBy(i => i.OrderRank)) { @OrderItem(orderItem, combo != null) } } } @helper OrderItem(IOrderItem item, bool isPartOfCombo) { var productItem = item as IProductItem; var additionalSpace = isPartOfCombo ? " " : string.Empty; if (productItem != null && productItem.CompoundsInfo != null && productItem.CompoundsInfo.IsPrimaryComponent) { @(additionalSpace + string.Format("{0} {1}", productItem.CompoundsInfo.ModifierSchemaName, productItem.ProductSize == null ? string.Empty : productItem.ProductSize.Name)) // у пиццы не может быть удаленных модификаторов, поэтому берем весь список foreach (var orderEntry in productItem.ModifierEntries.Where(orderEntry => ModifiersFilter(orderEntry, productItem, true))) { @(string.Format(" {0}",orderEntry.Product.Name)) if (orderEntry.Amount != 1m) { @FormatAmount(orderEntry.Amount) } else { } if (orderEntry.Cost != 0m) { $@FormatMoney(orderEntry.Cost) } else { } } } if (productItem != null && productItem.CompoundsInfo != null) { @("1/2 " + GetOrderEntryNameWithProductSize(productItem)) } else { @GetOrderEntryNameWithProductSize(item) } if (!isPartOfCombo) { if (productItem.Amount != 1m) { @FormatAmount(productItem.Amount) } else { } $@FormatMoney(productItem.Cost) } else { if (productItem.Amount != 1m) { @FormatAmount(productItem.Amount) } else { } } foreach (var orderEntry in item.GetNotDeletedChildren().Where(orderEntry => ModifiersFilter(orderEntry, item)) .Where(orderEntry => orderEntry.Cost > 0 || orderEntry.Product.PrechequePrintable).ToList()) { @(string.Format(" {0}",orderEntry.Product.Name)) if (orderEntry.Amount != 1m) { @FormatAmount(orderEntry.Amount) } else { } if (orderEntry.Cost != 0m) { $@FormatMoney(orderEntry.Cost) } else { } } } @helper DiscountIncrease(IChequeTaskDiscountItem discountItem) { @discountItem.Name @FormatPercent(discountItem.Percent) $@FormatMoney(discountItem.Sum)
} @helper VatsOld(IChequeTask chequeTask) { var vats = chequeTask.Sales .GroupBy(sale => sale.NdsPercent) .Where(group => group.Key > 0m) .Select(group => Tuple.Create(group.Key, group.Sum(sale => (sale.ResultSum - sale.ResultSum / (1m + @group.Key / 100m)).RoundMoneyFractional()))) .ToList(); var vatSum = vats.Sum(tuple => tuple.Item2); if (vatSum != 0) { foreach (var percentAndSum in vats) { } if (vats.Count > 1) { } } else { } } @helper Payments(IChequeTask chequeTask, IOrder order) { foreach (var prepayItem in chequeTask.Prepayments) { if (!string.IsNullOrWhiteSpace(prepayItem.CurrencyName)) { } else { } } if (!chequeTask.CashPayments.IsEmpty() || (chequeTask.CardPayments.IsEmpty() && chequeTask.AdditionalPayments.IsEmpty())) { if (chequeTask.CashPayments.Any(p => !string.IsNullOrWhiteSpace(p.CurrencyName)) && !chequeTask.IsStorno) { foreach (var cashPaymentItem in chequeTask.CashPayments) { if (!string.IsNullOrWhiteSpace(cashPaymentItem.CurrencyName)) { var currency = Model.Order.FixedCurrencyRates.Keys.SingleOrDefault(r => r.IsoName.Equals(cashPaymentItem.CurrencyName)); if (currency != null) { var rate = Model.Order.FixedCurrencyRates[currency]; @string.Format(Resources.CurrencyRateFormat, currency.IsoName, rate.ToString("f4", CultureInfo.CurrentCulture), Model.CommonInfo.CafeSetup.CurrencyIsoName) } } else { } } } else { @Payment(Resources.Cash, chequeTask.CashPayment) } } foreach (var cardPaymentItem in chequeTask.CardPayments) { paymentsTypesName.Add(cardPaymentItem.PaymentTypeName); @Payment(string.Format(Resources.CardPattern, cardPaymentItem.PaymentTypeName), cardPaymentItem.Sum, cardPaymentItem.Comment) } foreach (var additionalPaymentItem in chequeTask.AdditionalPayments) { @Payment(additionalPaymentItem.PaymentTypeName, additionalPaymentItem.Sum, additionalPaymentItem.Comment) } var orderPaymentsSumWithoutPrepay = chequeTask.CashPayment + chequeTask.CardPayments.Sum(p => p.Sum) + chequeTask.AdditionalPayments.Sum(p => p.Sum); var orderPaymentsSumWithPrepay = orderPaymentsSumWithoutPrepay + SetSign(chequeTask.Prepayments.Sum(p => p.Sum)); var changeSum = Math.Max(orderPaymentsSumWithPrepay - chequeTask.ResultSum, 0m); var hasMultiplePayments = ((chequeTask.CashPayment != 0m ? 1 : 0) + chequeTask.CardPayments.Count() + chequeTask.AdditionalPayments.Count() + chequeTask.Prepayments.Count()) > 1; if (hasMultiplePayments) { } if (changeSum > 0m) { } var paymentsSum = 0m; foreach (var prepay in order.PrePayments) { paymentsSum += prepay.Sum; } foreach (var payment in order.Payments) { paymentsSum += payment.Sum; } var tipsIncludedInExtensions = Model.Extensions.BeforeCheque != null && Model.Extensions.BeforeCheque.Any(x => x != null && x.ToString().ToLower().Contains("tips")) || Model.Extensions.AfterCheque != null && Model.Extensions.AfterCheque.Any(x => x != null && x.ToString().ToLower().Contains("tips")); if(!tipsIncludedInExtensions && Model.Order.Donations != null && Model.Order.Donations.Where(x => x.Status.ToString() == "Processed" || x.Status.ToString() == "Printed").Count() > 0) { var tipsSum = Model.Order.Donations.Where(x => x.Status.ToString() == "Processed" || x.Status.ToString() == "Printed").Sum(x=> x.Sum); } } @helper Payment(string name, decimal sum, string comment = null) { if (!string.IsNullOrWhiteSpace(comment)) { @comment } } @functions { public static List paymentsTypesName = new List(); private decimal SetSign(decimal sum) { return Model.ChequeTask.IsStorno ? -sum : sum; } private static bool CommonModifiersFilter(bool isCommonModifier, IProductItem parent, bool onlyCommonModifiers) { if (parent.CompoundsInfo != null && parent.CompoundsInfo.IsPrimaryComponent) { if (onlyCommonModifiers && !isCommonModifier) return false; if (!onlyCommonModifiers && isCommonModifier) return false; return true; } return true; } private static bool ModifiersFilter(IOrderEntry orderEntry, IOrderItem parent, bool onlyCommonModifiers = false) { var parentProductItem = parent as IProductItem; if (parentProductItem != null && !CommonModifiersFilter(((IModifierEntry)orderEntry).IsCommonModifier, parentProductItem, onlyCommonModifiers)) return false; if (orderEntry.Cost > 0m) return true; if (!orderEntry.Product.PrechequePrintable) return false; var modifierEntry = orderEntry as IModifierEntry; if (modifierEntry == null) return true; if (modifierEntry.ChildModifier == null) return true; if (!modifierEntry.ChildModifier.HideIfDefaultAmount) return true; var amountPerItem = modifierEntry.ChildModifier.AmountIndependentOfParentAmount ? modifierEntry.Amount : modifierEntry.Amount / GetParentAmount(parent, onlyCommonModifiers); return amountPerItem != modifierEntry.ChildModifier.DefaultAmount; } private static decimal GetParentAmount(IOrderItem parent, bool onlyCommonModifiers) { return onlyCommonModifiers ? parent.Amount * 2 : parent.Amount; } private static string GetOrderEntryNameWithProductSize(IOrderEntry orderEntry) { var productItem = orderEntry as IProductItem; return productItem == null || productItem.ProductSize == null || productItem.CompoundsInfo != null ? orderEntry.Product.Name : string.Format(Resources.ProductNameWithSizeFormat, productItem.Product.Name, productItem.ProductSize.Name); } }