report with orders - v.0.8.102-beta

This commit is contained in:
Frede Hundewadt 2022-07-02 19:24:57 +02:00
parent f7675bec06
commit dfcb9ddbb8
9 changed files with 207 additions and 75 deletions

View file

@ -0,0 +1,108 @@
@using Wonky.Entity.Views
<div class="report-page row d-print-block">
<div class="col">
<div class="alert bg-dark text-white">
<h2 class="text-center fw-bold">BESTILLING</h2>
</div>
<table class="table table-striped table-bordered d-print-table">
<tbody>
<tr>
<th scope="row">Dato</th>
<td>@ReportItem.OrderDate</td>
<th scope="row">Konto</th>
<td>@ReportItem.Company.Account</td>
</tr>
<tr>
<th scope="col">Telefon</th>
<td>@ReportItem.Company.Phone</td>
<th scope="col">Køber</th>
<td>@ReportItem.YourRef</td>
</tr>
<tr>
<th scope="col">CVR/VAT</th>
<td>@ReportItem.Company.VatNumber</td>
<th scope="col">Rekvisition</th>
<td>@ReportItem.ReferenceNumber</td>
</tr>
<tr>
<th scope="col">Navn</th>
<td>@ReportItem.Company.Name</td>
<th scope="col">Lev.Navn</th>
<td>@ReportItem.DlvName</td>
</tr>
<tr>
<th scope="col">Adresse</th>
<td>@ReportItem.Company.Address1</td>
<th scope="col">Lev.Adresse</th>
<td>@ReportItem.DlvAddress1</td>
</tr>
<tr>
<th scope="col">Adresse</th>
<td>@ReportItem.Company.Address2</td>
<th scope="col">Lev.Adresse</th>
<td>@ReportItem.DlvAddress2</td>
</tr>
<tr>
<th scope="col">Postnr By</th>
<td>@ReportItem.Company.ZipCode @ReportItem.Company.City</td>
<th scope="col">Lev.Postnr By</th>
<td>@ReportItem.DlvZipCity</td>
</tr>
</tbody>
</table>
</div>
<div class="row mb-2">
<div class="col">
<div class="alert alert-light">
<h3 class="text-center fw-bold">Ordre linjer</h3>
</div>
<table class="table table-striped table-bordered d-print-table">
<thead>
<tr>
<th scope="col">Antal</th>
<th scope="col">Varnr</th>
<th scope="col">Beskrivelse</th>
<th class="text-end" scope="col">Pris</th>
<th class="text-end" scope="col">R%</th>
<th class="text-end" scope="col">Beløb</th>
</tr>
</thead>
<tbody>
@foreach (var line in ReportItem.Lines)
{
<tr>
<td>@line.Quantity</td>
<td>@line.Sku</td>
<td>@line.Description</td>
<td class="text-end">@($"{line.Price:N2}")</td>
<td class="text-end">@($"{line.Discount:N2}")</td>
<td class="text-end">@($"{line.LineSum:N2}")</td>
</tr>
}
<tr>
<td colspan="4"></td>
<td>Ordresum</td>
<td class="text-end">@ReportItem.OrderAmount</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row">
<div class="col">
<div class="alert alert-dark">
<h4 class="text-center">
@ReportItem.OfficeNote
</h4>
</div>
</div>
</div>
</div>
@code{
[Parameter]
public ReportItemView ReportItem { get; set; } = new();
}

View file

@ -1,12 +0,0 @@
@using Wonky.Entity.Views
<div class="report-item">
</div>
@code{
[Parameter]
public ReportItemView ReportItem { get; set; } = new();
}

View file

@ -20,10 +20,9 @@
@page "/admin/users/advisers/{CountryCode}/{UserId}/reports/{ReportDate}"
@attribute [Authorize(Roles = "Admin")]
@if (SalesReport != null)
@if (Report != null)
{
<PageTitle>@SalesReport.ReportData.Name</PageTitle>
<PageTitle>@Report.ReportData.Name</PageTitle>
<div class="alert alert-dark">
<div class="row">
<div class="col-md-6 d-print-none align-content-center">
@ -39,31 +38,42 @@
<button class="btn btn-warning" type="button" onclick="window.print();">Print</button>
</div>
<div class="col d-none d-print-block text-end align-content-center">
<h2>@SalesReport.ReportData.Name</h2>
<h2>@Report.ReportData.Name</h2>
</div>
</div>
</div>
<div class="row">
<div class="w-75">
<ReportSummaryComponent ReportData="SalesReport.ReportData"></ReportSummaryComponent>
<ReportSummaryComponent ReportData="Report.ReportData"></ReportSummaryComponent>
</div>
<div class="w-25">
<ReportDistanceLedgerComponent ReportData="SalesReport.ReportData"></ReportDistanceLedgerComponent>
<ReportDistanceLedgerComponent ReportData="Report.ReportData"></ReportDistanceLedgerComponent>
</div>
</div>
<div class="row">
<div class="col">
<ActivityTableComponent Activities="SalesReport.ReportItems"></ActivityTableComponent>
<ActivityTableComponent Activities="Report.ReportItems"></ActivityTableComponent>
</div>
</div>
<div class="row">
<div class="col">
<ReportActivityLedgerComponent ReportData="SalesReport.ReportData"></ReportActivityLedgerComponent>
<ReportActivityLedgerComponent ReportData="Report.ReportData"></ReportActivityLedgerComponent>
</div>
</div>
<div class="page-break d-print-block"></div>
}
else
{
<AppSpinner/>
<AppSpinner></AppSpinner>
}
@if (_items.Any())
{
@foreach (var item in _items)
{
<div class="report-page d-print-block">
<ReportItemComponent ReportItem="@item"></ReportItemComponent>
</div>
}
}

View file

@ -35,7 +35,8 @@ public partial class AdminSalesReportView : IDisposable
/// <summary>
/// Report to render
/// </summary>
private ReportView SalesReport { get; set; }
private ReportView Report { get; set; }
private List<ReportItemView> _items { get; set; }
protected override async Task OnParametersSetAsync()
{
@ -53,8 +54,9 @@ public partial class AdminSalesReportView : IDisposable
{
if(workDate != ReportDate)
_navigator.NavigateTo($"/admin/users/advisers/{CountryCode}/{UserId}/reports/{workDate}");
SalesReport = new ReportView();
SalesReport = await GetUserReport(UserId, workDate);
Report = new ReportView();
Report = await GetUserReport(UserId, workDate);
_items = Report.ReportItems.Where(x => x.OrderAmount > 0).ToList();
}
/// <summary>
/// Get report for user with entity Id for work date
@ -64,7 +66,7 @@ public partial class AdminSalesReportView : IDisposable
/// <returns></returns>
private async Task<ReportView> GetUserReport(string userId, string workDate)
{
return SalesReport = await _reportRepo.GetReport(userId, workDate);
return Report = await _reportRepo.GetReport(userId, workDate);
}
public void Dispose()

View file

@ -20,43 +20,59 @@
@page "/sales-reports/view/{ReportDate}"
@attribute [Authorize(Roles = "Adviser,Admin,Supervisor")]
<PageTitle>@_report.ReportData.Name</PageTitle>
<div class="alert alert-dark">
@if (_report != null)
{
<PageTitle>@_report.ReportData.Name</PageTitle>
<div class="alert alert-dark">
<div class="row">
<div class="col-md-6 d-print-none align-content-center">
@if (!string.IsNullOrWhiteSpace(ReportDate))
{
<h2 class="workDate">@DateTime.Parse(ReportDate).ToLongDateString()</h2>
}
</div>
<div class="col col-md-4 d-print-none align-content-center">
<WorkDateComponent SelectedDate="@ReportDate" OnChanged="GetReport"></WorkDateComponent>
</div>
<div class="col col-md-1 d-print-none align-content-center">
<button class="btn btn-warning" type="button" onclick="window.print();">Print</button>
</div>
<div class="col d-none d-print-block text-end align-content-center">
<h2>@_report.ReportData.Name</h2>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6 d-print-none align-content-center">
@if (!string.IsNullOrWhiteSpace(ReportDate))
{
<h2 class="workDate">@DateTime.Parse(ReportDate).ToLongDateString()</h2>
}
<div class="w-75">
<ReportSummaryComponent ReportData="_report.ReportData"></ReportSummaryComponent>
</div>
<div class="col col-md-4 d-print-none align-content-center">
<WorkDateComponent SelectedDate="@ReportDate" OnChanged="GetReport"></WorkDateComponent>
</div>
<div class="col col-md-1 d-print-none align-content-center">
<button class="btn btn-warning" type="button" onclick="window.print();">Print</button>
</div>
<div class="col d-none d-print-block text-end align-content-center">
<h2>@_report.ReportData.Name</h2>
<div class="w-25">
<ReportDistanceLedgerComponent ReportData="_report.ReportData"></ReportDistanceLedgerComponent>
</div>
</div>
</div>
<div class="row">
<div class="w-75">
<ReportSummaryComponent ReportData="_report.ReportData"></ReportSummaryComponent>
<div class="row">
<div class="col">
<ActivityTableComponent Activities="_report.ReportItems"></ActivityTableComponent>
</div>
</div>
<div class="w-25">
<ReportDistanceLedgerComponent ReportData="_report.ReportData"></ReportDistanceLedgerComponent>
<div class="row">
<div class="col">
<ReportActivityLedgerComponent ReportData="_report.ReportData"></ReportActivityLedgerComponent>
</div>
</div>
</div>
<div class="row">
<div class="col">
<ActivityTableComponent Activities="_report.ReportItems"></ActivityTableComponent>
</div>
</div>
<div class="row">
<div class="col">
<ReportActivityLedgerComponent ReportData="_report.ReportData"></ReportActivityLedgerComponent>
</div>
</div>
<div class="page-break d-print-block"></div>
}
else
{
<AppSpinner></AppSpinner>
}
@if (_items.Any())
{
@foreach (var item in _items)
{
<div class="report-page d-print-block">
<ReportItemComponent ReportItem="@item"></ReportItemComponent>
</div>
}
}

View file

@ -11,6 +11,7 @@ public partial class SalesReportView
[Inject] private IReportHttpRepository _reportRepo { get; set; }
[Inject] private NavigationManager _navigator { get; set; }
private ReportView _report { get; set; } = new();
private List<ReportItemView> _items { get; set; } = new ();
protected override async Task OnInitializedAsync()
{
@ -25,5 +26,6 @@ public partial class SalesReportView
if(workDate != ReportDate)
_navigator.NavigateTo($"/sales-reports/view/{workDate}");
_report = await _reportRepo.GetReport(workDate);
_items = _report.ReportItems.Where(x => x.OrderAmount > 0).ToList();
}
}

View file

@ -1,7 +1,7 @@
{
"appInfo": {
"name": "Wonky Client",
"version": "0.8.101",
"version": "0.8.102",
"isBeta": true,
"image": "grumpy-coder.png"
},

View file

@ -14,19 +14,10 @@
.content {
padding: 0;
}
.page {
font-size: 10px;
border: initial;
border-radius: initial;
box-shadow: initial;
margin: 0;
min-height: initial;
page-break-after: always;
width: initial;
-webkit-print-color-adjust: exact;
color-adjust: exact;
.page-break {
page-break-before: always;
}
.report-item {
.report-page {
font-size: 10px;
border: initial;
border-radius: initial;

View file

@ -9,7 +9,7 @@ public class ReportItemView
/// <summary>
/// Lines
/// </summary>
public List<ReportItemView> Lines { get; set; } = new();
public List<ReportItemLine> Lines { get; set; } = new();
/// <summary>
/// Closed sale
/// </summary>
@ -58,5 +58,20 @@ public class ReportItemView
/// Status type enum as string
/// </summary>
public string StatusTypeEnum { get; set; } = "";
/// <summary>
/// Customer deliver name
/// </summary>
public string DlvName { get; set; } = "";
/// <summary>
/// Customer delivery address line 1
/// </summary>
public string DlvAddress1 { get; set; } = "";
/// <summary>
/// Customer delivery address line 2
/// </summary>
public string DlvAddress2 { get; set; } = "";
/// <summary>
/// Customer delivery post code and city name
/// </summary>
public string DlvZipCity { get; set; } = "";
}