Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @using System
- @using System.Collections.Generic
- @using System.Linq
- @using Resto.Front.PrintTemplates.Reports
- @using Resto.Front.PrintTemplates.Reports.OlapReports
- @using Resto.Front.PrintTemplates.Reports.TemplateModels
- @using Resto.Front.PrintTemplates.RmsEntityWrappers
- @inherits TemplateBase
- @{
- settings = Model.ReportSettings;
- FillData();
- }
- @if (!Model.IsOnlyBodyMarkupRequired)
- {
- <doc formatter="split">
- @Header()
- @Body()
- @Footer()
- </doc>
- }
- else
- {
- <doc formatter="split">
- @Body()
- </doc>
- }
- @helper Header()
- {
- var terminalName = Model.CashRegister != null
- ? string.Format(Resources.TerminalNumberNamePattern, Model.CashRegister.Number, Model.Group.Name)
- : string.Format(Resources.TerminalNamePattern, Model.CurrentTerminal, Model.Group.Name);
- foreach (var headerLine in Model.CafeSetup.ReportHeader.Split(Environment.NewLine.ToCharArray()))
- {
- <left>
- <whitespace-preserve>@headerLine</whitespace-preserve>
- </left>
- }
- <np />
- <center>@Model.Name</center>
- <np />
- <pair left="@Resources.HeadTerminal" right="@terminalName" fit="left" />
- <pair left="@Resources.From" right="@FormatDate(settings.GetPeriodBegin())" fit="right" />
- <pair left="@Resources.To" right="@FormatDate(settings.GetPeriodEnd())" fit="right" />
- <pair left="@Resources.HeadCurrentTime" right="@FormatLongDateTime(Model.CurrentTime)" fit="right" />
- <table>
- <columns>
- <column autowidth=""/>
- <column align="right"/>
- </columns>
- <cells>
- <ct>@Resources.HeadCurrentUser</ct>
- <ct>@(Model.CurrentUser == null ? string.Empty : Model.CurrentUser.Name)</ct>
- </cells>
- </table>
- }
- @helper Body()
- {
- <line symbols="-" />
- <pair left="@Resources.EmployeeTitle" right="@Resources.Sum" fit="right" />
- <line symbols="-" />
- var index = 0;
- foreach (var waiter in waitersData)
- {
- if (index++ > 0)
- {
- <np />
- }
- <left>@waiter.Name</left>
- <np />
- <table>
- <columns>
- <column formatter="split" />
- <column align="right" autowidth="" />
- </columns>
- <cells>
- <ct>@Resources.Cash</ct>
- <ct>@FormatPrice(waiter.SumCash)</ct>
- <ct>@Resources.Card</ct>
- <ct>@FormatPrice(waiter.SumCard)</ct>
- <ct>@Resources.NonCash</ct>
- <ct>@FormatPrice(waiter.SumNonCash)</ct>
- <ct>@Resources.Sum</ct>
- <ct>@FormatPrice(waiter.TotalSum)</ct>
- <ct>@Resources.Cheques</ct>
- <ct>@FormatAmount(waiter.ChequesNum)</ct>
- <ct>@Resources.Clients</ct>
- <ct>@FormatAmount(waiter.GuestsNum)</ct>
- </cells>
- </table>
- }
- <line symbols="-" />
- <table>
- <columns>
- <column formatter="split" />
- <column align="right" autowidth="" />
- </columns>
- <cells>
- <ct>@Resources.Sum</ct>
- <ct>@FormatPrice(summaryInfo.Sum)</ct>
- <ct>@Resources.Cheques</ct>
- <ct>@FormatAmount(summaryInfo.ChequesCount)</ct>
- <ct>@Resources.Clients</ct>
- <ct>@FormatAmount(summaryInfo.GuestsCount)</ct>
- </cells>
- </table>
- <line symbols="-" />
- }
- @helper Footer()
- {
- <np />
- <center>
- @string.Format(Resources.AllSumsInFormat, Model.CafeSetup.CurrencyName)
- </center>
- <np />
- }
- @functions
- {
- private ISettings settings;
- private ICollection<WaiterInfo> waitersData;
- private SummaryInfo summaryInfo;
- private void FillData()
- {
- var waiterNameField = Model.CafeSetup.DisplayWaiterRevenueByDishes ? OlapField.ItemWaiterName : OlapField.OrderWaiterName;
- var reportPayGroups = Model.OlapReports.BuildReport(new OlapReportSettings(OlapReportType.Sales,
- new List<string> { waiterNameField, OlapField.PayTypesGroupCode },
- new List<string>(),
- new List<string> { OlapField.DishDiscountSum, OlapField.UniqOrderId, OlapField.GuestNum },
- new Dictionary<string, OlapReportFilterCriteria> { { OlapField.SessionIdOperDay, new OlapReportFilterRangeCriteria(settings.GetPeriodBegin(), true, settings.GetPeriodEnd(), true) } }));
- var reportPayCombo = Model.OlapReports.BuildReport(new OlapReportSettings(OlapReportType.Sales,
- new List<string> { waiterNameField, OlapField.IsStorned },
- new List<string>(),
- new List<string> { OlapField.UniqOrderId, OlapField.GuestNum },
- new Dictionary<string, OlapReportFilterCriteria> { { OlapField.SessionIdOperDay, new OlapReportFilterRangeCriteria(settings.GetPeriodBegin(), true, settings.GetPeriodEnd(), true) } }));
- waitersData = reportPayGroups.Data
- .Select(data => new
- {
- Name = data.GetValue<string>(waiterNameField),
- PaymentGroup = data.GetValue<PaymentGroup?>(OlapField.PayTypesGroupCode) ?? PaymentGroup.Writeoff,
- Sum = data.GetValue<decimal>(OlapField.DishDiscountSum)
- })
- .GroupBy(data => data.Name)
- .Join(reportPayCombo.Data
- .Select(data => new
- {
- Name = data.GetValue<string>(waiterNameField),
- ChequesNum = data.GetValue<int>(OlapField.UniqOrderId),
- GuestsNum = data.GetValue<bool>(OlapField.IsStorned) ? 0 : data.GetValue<int>(OlapField.GuestNum)
- })
- .GroupBy(data => data.Name),
- reportGroups => reportGroups.First().Name,
- reportCombo => reportCombo.First().Name,
- (reportGroups, reportCombo) => new WaiterInfo
- {
- Name = reportGroups.First().Name,
- ChequesNum = reportCombo.Sum(data => data.ChequesNum),
- GuestsNum = reportCombo.Sum(data => data.GuestsNum),
- SumCash = reportGroups.Where(data => data.PaymentGroup == PaymentGroup.Cash).Select(data => data.Sum).DefaultIfEmpty().First(),
- SumCard = reportGroups.Where(data => data.PaymentGroup == PaymentGroup.Card).Select(data => data.Sum).DefaultIfEmpty().First(),
- SumNonCash = reportGroups.Where(data => data.PaymentGroup == PaymentGroup.NonCash).Select(data => data.Sum).DefaultIfEmpty().First()
- })
- .ToList()
- .AsReadOnly();
- summaryInfo = new SummaryInfo(waitersData.Sum(w => w.GuestsNum), waitersData.Sum(w => w.ChequesNum), waitersData.Sum(w => w.TotalSum));
- }
- private sealed class WaiterInfo
- {
- public string Name { get; set; }
- public decimal SumCash { get; set; }
- public decimal SumCard { get; set; }
- public decimal SumNonCash { get; set; }
- public decimal TotalSum { get { return SumCash + SumCard + SumNonCash; } }
- public int ChequesNum { get; set; }
- public int GuestsNum { get; set; }
- }
- private struct SummaryInfo
- {
- public readonly int GuestsCount;
- public readonly int ChequesCount;
- public readonly decimal Sum;
- public SummaryInfo(int guestsCount, int chequesCount, decimal sum)
- {
- GuestsCount = guestsCount;
- ChequesCount = chequesCount;
- Sum = sum;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement