Advertisement
Guest User

Untitled

a guest
May 14th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.60 KB | None | 0 0
  1. @using System
  2. @using System.Collections.Generic
  3. @using System.Linq
  4. @using Resto.Front.PrintTemplates.Reports
  5. @using Resto.Front.PrintTemplates.Reports.OlapReports
  6. @using Resto.Front.PrintTemplates.Reports.TemplateModels
  7. @using Resto.Front.PrintTemplates.RmsEntityWrappers
  8.  
  9. @inherits TemplateBase
  10. @{
  11. settings = Model.ReportSettings;
  12.  
  13. FillData();
  14. }
  15.  
  16. @if (!Model.IsOnlyBodyMarkupRequired)
  17. {
  18. <doc formatter="split">
  19. @Header()
  20. @Body()
  21. @Footer()
  22. </doc>
  23. }
  24. else
  25. {
  26. <doc formatter="split">
  27. @Body()
  28. </doc>
  29. }
  30.  
  31. @helper Header()
  32. {
  33. var terminalName = Model.CashRegister != null
  34. ? string.Format(Resources.TerminalNumberNamePattern, Model.CashRegister.Number, Model.Group.Name)
  35. : string.Format(Resources.TerminalNamePattern, Model.CurrentTerminal, Model.Group.Name);
  36.  
  37. foreach (var headerLine in Model.CafeSetup.ReportHeader.Split(Environment.NewLine.ToCharArray()))
  38. {
  39. <left>
  40. <whitespace-preserve>@headerLine</whitespace-preserve>
  41. </left>
  42. }
  43.  
  44. <np />
  45. <center>@Model.Name</center>
  46. <np />
  47. <pair left="@Resources.HeadTerminal" right="@terminalName" fit="left" />
  48.  
  49. <pair left="@Resources.From" right="@FormatDate(settings.GetPeriodBegin())" fit="right" />
  50. <pair left="@Resources.To" right="@FormatDate(settings.GetPeriodEnd())" fit="right" />
  51.  
  52. <pair left="@Resources.HeadCurrentTime" right="@FormatLongDateTime(Model.CurrentTime)" fit="right" />
  53. <table>
  54. <columns>
  55. <column autowidth=""/>
  56. <column align="right"/>
  57. </columns>
  58. <cells>
  59. <ct>@Resources.HeadCurrentUser</ct>
  60. <ct>@(Model.CurrentUser == null ? string.Empty : Model.CurrentUser.Name)</ct>
  61. </cells>
  62. </table>
  63. }
  64.  
  65. @helper Body()
  66. {
  67. <line symbols="-" />
  68. <pair left="@Resources.EmployeeTitle" right="@Resources.Sum" fit="right" />
  69. <line symbols="-" />
  70. var index = 0;
  71. foreach (var waiter in waitersData)
  72. {
  73. if (index++ > 0)
  74. {
  75. <np />
  76. }
  77. <left>@waiter.Name</left>
  78. <np />
  79. <table>
  80. <columns>
  81. <column formatter="split" />
  82. <column align="right" autowidth="" />
  83. </columns>
  84. <cells>
  85. <ct>@Resources.Cash</ct>
  86. <ct>@FormatPrice(waiter.SumCash)</ct>
  87. <ct>@Resources.Card</ct>
  88. <ct>@FormatPrice(waiter.SumCard)</ct>
  89. <ct>@Resources.NonCash</ct>
  90. <ct>@FormatPrice(waiter.SumNonCash)</ct>
  91. <ct>@Resources.Sum</ct>
  92. <ct>@FormatPrice(waiter.TotalSum)</ct>
  93. <ct>@Resources.Cheques</ct>
  94. <ct>@FormatAmount(waiter.ChequesNum)</ct>
  95. <ct>@Resources.Clients</ct>
  96. <ct>@FormatAmount(waiter.GuestsNum)</ct>
  97. </cells>
  98. </table>
  99. }
  100. <line symbols="-" />
  101. <table>
  102. <columns>
  103. <column formatter="split" />
  104. <column align="right" autowidth="" />
  105. </columns>
  106. <cells>
  107. <ct>@Resources.Sum</ct>
  108. <ct>@FormatPrice(summaryInfo.Sum)</ct>
  109. <ct>@Resources.Cheques</ct>
  110. <ct>@FormatAmount(summaryInfo.ChequesCount)</ct>
  111. <ct>@Resources.Clients</ct>
  112. <ct>@FormatAmount(summaryInfo.GuestsCount)</ct>
  113. </cells>
  114. </table>
  115. <line symbols="-" />
  116. }
  117.  
  118. @helper Footer()
  119. {
  120. <np />
  121. <center>
  122. @string.Format(Resources.AllSumsInFormat, Model.CafeSetup.CurrencyName)
  123. </center>
  124. <np />
  125. }
  126.  
  127. @functions
  128. {
  129. private ISettings settings;
  130.  
  131. private ICollection<WaiterInfo> waitersData;
  132. private SummaryInfo summaryInfo;
  133.  
  134. private void FillData()
  135. {
  136. var waiterNameField = Model.CafeSetup.DisplayWaiterRevenueByDishes ? OlapField.ItemWaiterName : OlapField.OrderWaiterName;
  137.  
  138. var reportPayGroups = Model.OlapReports.BuildReport(new OlapReportSettings(OlapReportType.Sales,
  139. new List<string> { waiterNameField, OlapField.PayTypesGroupCode },
  140. new List<string>(),
  141. new List<string> { OlapField.DishDiscountSum, OlapField.UniqOrderId, OlapField.GuestNum },
  142. new Dictionary<string, OlapReportFilterCriteria> { { OlapField.SessionIdOperDay, new OlapReportFilterRangeCriteria(settings.GetPeriodBegin(), true, settings.GetPeriodEnd(), true) } }));
  143.  
  144. var reportPayCombo = Model.OlapReports.BuildReport(new OlapReportSettings(OlapReportType.Sales,
  145. new List<string> { waiterNameField, OlapField.IsStorned },
  146. new List<string>(),
  147. new List<string> { OlapField.UniqOrderId, OlapField.GuestNum },
  148. new Dictionary<string, OlapReportFilterCriteria> { { OlapField.SessionIdOperDay, new OlapReportFilterRangeCriteria(settings.GetPeriodBegin(), true, settings.GetPeriodEnd(), true) } }));
  149.  
  150. waitersData = reportPayGroups.Data
  151. .Select(data => new
  152. {
  153. Name = data.GetValue<string>(waiterNameField),
  154. PaymentGroup = data.GetValue<PaymentGroup?>(OlapField.PayTypesGroupCode) ?? PaymentGroup.Writeoff,
  155. Sum = data.GetValue<decimal>(OlapField.DishDiscountSum)
  156. })
  157. .GroupBy(data => data.Name)
  158. .Join(reportPayCombo.Data
  159. .Select(data => new
  160. {
  161. Name = data.GetValue<string>(waiterNameField),
  162. ChequesNum = data.GetValue<int>(OlapField.UniqOrderId),
  163. GuestsNum = data.GetValue<bool>(OlapField.IsStorned) ? 0 : data.GetValue<int>(OlapField.GuestNum)
  164. })
  165. .GroupBy(data => data.Name),
  166. reportGroups => reportGroups.First().Name,
  167. reportCombo => reportCombo.First().Name,
  168. (reportGroups, reportCombo) => new WaiterInfo
  169. {
  170. Name = reportGroups.First().Name,
  171. ChequesNum = reportCombo.Sum(data => data.ChequesNum),
  172. GuestsNum = reportCombo.Sum(data => data.GuestsNum),
  173. SumCash = reportGroups.Where(data => data.PaymentGroup == PaymentGroup.Cash).Select(data => data.Sum).DefaultIfEmpty().First(),
  174. SumCard = reportGroups.Where(data => data.PaymentGroup == PaymentGroup.Card).Select(data => data.Sum).DefaultIfEmpty().First(),
  175. SumNonCash = reportGroups.Where(data => data.PaymentGroup == PaymentGroup.NonCash).Select(data => data.Sum).DefaultIfEmpty().First()
  176. })
  177. .ToList()
  178. .AsReadOnly();
  179.  
  180. summaryInfo = new SummaryInfo(waitersData.Sum(w => w.GuestsNum), waitersData.Sum(w => w.ChequesNum), waitersData.Sum(w => w.TotalSum));
  181. }
  182.  
  183. private sealed class WaiterInfo
  184. {
  185. public string Name { get; set; }
  186. public decimal SumCash { get; set; }
  187. public decimal SumCard { get; set; }
  188. public decimal SumNonCash { get; set; }
  189. public decimal TotalSum { get { return SumCash + SumCard + SumNonCash; } }
  190. public int ChequesNum { get; set; }
  191. public int GuestsNum { get; set; }
  192. }
  193.  
  194. private struct SummaryInfo
  195. {
  196. public readonly int GuestsCount;
  197. public readonly int ChequesCount;
  198. public readonly decimal Sum;
  199.  
  200. public SummaryInfo(int guestsCount, int chequesCount, decimal sum)
  201. {
  202. GuestsCount = guestsCount;
  203. ChequesCount = chequesCount;
  204. Sum = sum;
  205. }
  206. }
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement