wip - admin print with orders
This commit is contained in:
parent
831959c258
commit
f7675bec06
48 changed files with 459 additions and 253 deletions
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
@if (Enabled == 1)
|
@if (Enabled == 1)
|
||||||
{
|
{
|
||||||
<a type="button" class="btn btn-@ButtonType" href="@ActionLink">@ButtonText</a>
|
<a class="btn btn-@ButtonType" href="@ActionLink">@ButtonText</a>
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,5 +5,5 @@ namespace Wonky.Client.Components;
|
||||||
|
|
||||||
public partial class ActivityTableComponent
|
public partial class ActivityTableComponent
|
||||||
{
|
{
|
||||||
[Parameter] public List<ActivityListItemView> Activities { get; set; }
|
[Parameter] public List<ReportItemView> Activities { get; set; }
|
||||||
}
|
}
|
|
@ -1,3 +1,5 @@
|
||||||
|
@using System.Globalization
|
||||||
|
|
||||||
@if (ReportList != null)
|
@if (ReportList != null)
|
||||||
{
|
{
|
||||||
<div class="list-group list-group-flush">
|
<div class="list-group list-group-flush">
|
||||||
|
@ -49,14 +51,14 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col text-center">
|
||||||
@(report.DayTypeEnum == "Sales" ? report.FromDateTime.Split(" ")[1] : report.FromDateTime.Split(" ")[0])
|
@(report.DayTypeEnum == "Sales" ? report.FromDateTime.Split(" ")[1] : report.FromDateTime.Split(" ")[0])
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col text-center">
|
||||||
@(report.DayTypeEnum == "Sales" ? report.ToDateTime.Split(" ")[1] : report.ToDateTime.Split(" ")[0])
|
@(report.DayTypeEnum == "Sales" ? report.ToDateTime.Split(" ")[1] : report.ToDateTime.Split(" ")[0])
|
||||||
</div>
|
</div>
|
||||||
<div class="col text-end">
|
<div class="col text-end">
|
||||||
@report.Turnover
|
@report.Turnover.ToString(CultureInfo.CurrentUICulture)
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -8,9 +8,4 @@ public partial class AdminReportTableComponent
|
||||||
[Parameter] public List<NgSalesReportListView> ReportList { get; set; }
|
[Parameter] public List<NgSalesReportListView> ReportList { get; set; }
|
||||||
[Parameter] public string UserId { get; set; } = "";
|
[Parameter] public string UserId { get; set; } = "";
|
||||||
[Parameter] public string CountryCode { get; set; } = "";
|
[Parameter] public string CountryCode { get; set; } = "";
|
||||||
|
|
||||||
protected override void OnParametersSet()
|
|
||||||
{
|
|
||||||
base.OnParametersSet();
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -17,35 +17,37 @@
|
||||||
|
|
||||||
@if (UserList.Any())
|
@if (UserList.Any())
|
||||||
{
|
{
|
||||||
<table class="table table-striped">
|
<div class="list-group list-group-flush">
|
||||||
<thead>
|
<div class="list-group-item">
|
||||||
<tr>
|
<div class="row">
|
||||||
<th scope="col">
|
<div class="col fw-bold">
|
||||||
Land
|
|
||||||
</th>
|
|
||||||
<th scope="col">
|
|
||||||
Navn
|
Navn
|
||||||
</th>
|
</div>
|
||||||
<th scope="col">
|
<div class="col fw-bold">
|
||||||
Telefon
|
Telefon
|
||||||
</th>
|
</div>
|
||||||
<th scope="col">
|
<div class="col fw-bold">
|
||||||
Email
|
Email
|
||||||
</th>
|
</div>
|
||||||
</tr>
|
</div>
|
||||||
</thead>
|
</div>
|
||||||
<tbody>
|
|
||||||
@foreach (var user in UserList)
|
@foreach (var user in UserList)
|
||||||
{
|
{
|
||||||
<tr class="align-middle">
|
<a class="list-group-item list-group-item-action" href="/admin/users/office/@user.CountryCode.ToLower()/@user.UserId/view">
|
||||||
<td class="align-content-center">@user.CountryCode</td>
|
<div class="row">
|
||||||
<td><a href="/admin/users/office/@user.CountryCode.ToLower()/@user.UserId/view">@user.FullName</a></td>
|
<div class="col">
|
||||||
<td>@user.PhoneNumber</td>
|
@user.FullName
|
||||||
<td>@user.Email</td>
|
</div>
|
||||||
</tr>
|
<div class="col">
|
||||||
|
@user.PhoneNumber
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
@user.Email
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
}
|
}
|
||||||
</tbody>
|
</div>
|
||||||
</table>
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -6,5 +6,5 @@ namespace Wonky.Client.Components;
|
||||||
public partial class ReportActivityLedgerComponent
|
public partial class ReportActivityLedgerComponent
|
||||||
{
|
{
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public SalesReportDataViewModel ReportData { get; set; }
|
public ReportData ReportData { get; set; }
|
||||||
}
|
}
|
|
@ -15,7 +15,7 @@
|
||||||
//
|
//
|
||||||
*@
|
*@
|
||||||
|
|
||||||
<table class="table table-bordered table-striped d-print-table">
|
<table class="table table-sm table-bordered table-striped d-print-table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="bg-dark text-white opacity-75 border-bottom">
|
<tr class="bg-dark text-white opacity-75 border-bottom">
|
||||||
<th colspan="2">
|
<th colspan="2">
|
||||||
|
@ -25,28 +25,28 @@
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Km Aften</th>
|
<th scope="row">Aften</th>
|
||||||
<td>@ReportData.KmEvening</td>
|
<td class="text-end">@ReportData.KmEvening</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Km Morgen</th>
|
<th scope="row">Morgen</th>
|
||||||
<td>@ReportData.KmMorning</td>
|
<td class="text-end">@ReportData.KmMorning</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Km Kørt Dag</th>
|
<th scope="row">Kørt Dag</th>
|
||||||
<td>@ReportData.Distance</td>
|
<td class="text-end">@ReportData.Distance</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Km Kørt Md.</th>
|
<th scope="row">Kørt Md.</th>
|
||||||
<td>@ReportData.DistanceMonth</td>
|
<td class="text-end">@ReportData.DistanceMonth</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Km Privat</th>
|
<th scope="row">Privat</th>
|
||||||
<td>@ReportData.DistancePrivate</td>
|
<td class="text-end">@ReportData.DistancePrivate</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Km Privat Md.</th>
|
<th scope="row">Privat Md.</th>
|
||||||
<td>@ReportData.DistancePrivateMonth</td>
|
<td class="text-end">@ReportData.DistancePrivateMonth</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -6,6 +6,6 @@ namespace Wonky.Client.Components;
|
||||||
public partial class ReportDistanceLedgerComponent
|
public partial class ReportDistanceLedgerComponent
|
||||||
{
|
{
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public SalesReportDataViewModel ReportData { get; set; }
|
public ReportData ReportData { get; set; }
|
||||||
|
|
||||||
}
|
}
|
|
@ -18,7 +18,7 @@
|
||||||
<table class="table table-bordered table-striped d-print-table">
|
<table class="table table-bordered table-striped d-print-table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="bg-dark text-white opacity-75 border-bottom">
|
<tr class="bg-dark text-white opacity-75 border-bottom">
|
||||||
<th colspan="2">
|
<th colspan="3">
|
||||||
Rapport
|
Rapport
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -26,23 +26,26 @@
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Beskrivelse</th>
|
<th scope="row">Beskrivelse</th>
|
||||||
<td>@ReportData.Description</td>
|
<td colspan="2">@ReportData.Description</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Supervisor</th>
|
<th scope="row">Supervisor</th>
|
||||||
<td>@ReportData.SupervisedBy</td>
|
<td colspan="2">@ReportData.SupervisedBy</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Dagtype</th>
|
<th scope="row">Indhold</th>
|
||||||
<td>
|
<td colspan="2">
|
||||||
@{
|
@{
|
||||||
switch (ReportData.DayTypeEnum)
|
switch (ReportData.DayTypeEnum)
|
||||||
{
|
{
|
||||||
case "Sales":
|
case "Sales":
|
||||||
<span>Salgsdag: @ReportData.SalesDayNumber</span>
|
<span>Salgsdag @ReportData.SalesDayNumber</span>
|
||||||
break;
|
break;
|
||||||
case "SickLeave":
|
case "SickLeave":
|
||||||
<span>Sygdom</span>
|
<span>Sygefravær</span>
|
||||||
|
break;
|
||||||
|
case "Leave":
|
||||||
|
<span>Aftalt frihed</span>
|
||||||
break;
|
break;
|
||||||
case "Office":
|
case "Office":
|
||||||
<span>Kontordag</span>
|
<span>Kontordag</span>
|
||||||
|
@ -50,13 +53,65 @@
|
||||||
case "Meeting":
|
case "Meeting":
|
||||||
<span>Salgsmøde</span>
|
<span>Salgsmøde</span>
|
||||||
break;
|
break;
|
||||||
case "Leave":
|
default:
|
||||||
<span>Ferie</span>
|
<span></span>
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">Fra/Til</th>
|
||||||
|
<td>
|
||||||
|
@{
|
||||||
|
switch (ReportData.DayTypeEnum)
|
||||||
|
{
|
||||||
|
case "Sales":
|
||||||
|
<span>@(ReportData.FromDateTime.Split(" ")[1])</span>
|
||||||
|
break;
|
||||||
|
case "SickLeave":
|
||||||
|
<span>@(ReportData.FromDateTime.Split(" ")[0])</span>
|
||||||
|
break;
|
||||||
|
case "Leave":
|
||||||
|
<span>@(ReportData.FromDateTime.Split(" ")[0])</span>
|
||||||
|
break;
|
||||||
|
case "Office":
|
||||||
|
<span></span>
|
||||||
|
break;
|
||||||
|
case "Meeting":
|
||||||
|
<span></span>
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
<span></span>
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@{
|
||||||
|
switch (ReportData.DayTypeEnum)
|
||||||
|
{
|
||||||
|
case "Sales":
|
||||||
|
<span>@(ReportData.ToDateTime.Split(" ")[1])</span>
|
||||||
|
break;
|
||||||
|
case "SickLeave":
|
||||||
|
<span>@(ReportData.ToDateTime.Split(" ")[0])</span>
|
||||||
|
break;
|
||||||
|
case "Leave":
|
||||||
|
<span>@(ReportData.ToDateTime.Split(" ")[0])</span>
|
||||||
|
break;
|
||||||
|
case "Office":
|
||||||
|
<span></span>
|
||||||
|
break;
|
||||||
|
case "Meeting":
|
||||||
|
<span></span>
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
<span></span>
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
|
@ -6,6 +6,6 @@ namespace Wonky.Client.Components;
|
||||||
public partial class ReportSummaryComponent
|
public partial class ReportSummaryComponent
|
||||||
{
|
{
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public SalesReportDataViewModel ReportData { get; set; }
|
public ReportData ReportData { get; set; }
|
||||||
|
|
||||||
}
|
}
|
12
Wonky.Client/Components/SalesOrderViewComponent.razor
Normal file
12
Wonky.Client/Components/SalesOrderViewComponent.razor
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
@using Wonky.Entity.Views
|
||||||
|
|
||||||
|
<div class="report-item">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code{
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public ReportItemView ReportItem { get; set; } = new();
|
||||||
|
|
||||||
|
}
|
|
@ -54,14 +54,14 @@ public class ActivityHttpRepository : IActivityHttpRepository
|
||||||
_apiConfig = configuration.Value;
|
_apiConfig = configuration.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ActivityListReportView> GetActivities(string activityDate)
|
public async Task<ReportItemListView> GetActivities(string activityDate)
|
||||||
{
|
{
|
||||||
var response = await _client
|
var response = await _client
|
||||||
.GetAsync($"{_apiConfig.ActivityUri}/date/{activityDate}");
|
.GetAsync($"{_apiConfig.ActivityUri}/date/{activityDate}");
|
||||||
var content = await response.Content.ReadAsStringAsync();
|
var content = await response.Content.ReadAsStringAsync();
|
||||||
return string.IsNullOrWhiteSpace(content)
|
return string.IsNullOrWhiteSpace(content)
|
||||||
? new ActivityListReportView()
|
? new ReportItemListView()
|
||||||
: JsonSerializer.Deserialize<ActivityListReportView>(content, _options);
|
: JsonSerializer.Deserialize<ReportItemListView>(content, _options);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ApiResponseView> CreateActivity(ActivityDto model)
|
public async Task<ApiResponseView> CreateActivity(ActivityDto model)
|
||||||
|
|
|
@ -35,9 +35,9 @@ public class AdminReportHttpRepository : IAdminReportHttpRepository
|
||||||
return await _client.GetFromJsonAsync<List<NgSalesReportListView>>($"{_apiConfig.AdminAdviserUri}/{userId}/reports");
|
return await _client.GetFromJsonAsync<List<NgSalesReportListView>>($"{_apiConfig.AdminAdviserUri}/{userId}/reports");
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<SalesReportViewModel> GetReport(string userId, string workDate)
|
public async Task<ReportView> GetReport(string userId, string workDate)
|
||||||
{
|
{
|
||||||
return await _client.GetFromJsonAsync<SalesReportViewModel>($"{_apiConfig.AdminAdviserUri}/{userId}/reports/{workDate}");
|
return await _client.GetFromJsonAsync<ReportView>($"{_apiConfig.AdminAdviserUri}/{userId}/reports/{workDate}");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -27,5 +27,5 @@ public interface IActivityHttpRepository
|
||||||
Task<ActivityDto> GetActivity(string id);
|
Task<ActivityDto> GetActivity(string id);
|
||||||
Task<ApiResponseView> CreateActivity(ActivityDto model);
|
Task<ApiResponseView> CreateActivity(ActivityDto model);
|
||||||
Task<ApiResponseView> AcceptOffer(string id);
|
Task<ApiResponseView> AcceptOffer(string id);
|
||||||
Task<ActivityListReportView> GetActivities(string activityDate);
|
Task<ReportItemListView> GetActivities(string activityDate);
|
||||||
}
|
}
|
|
@ -1,5 +1,3 @@
|
||||||
using Wonky.Client.Pages;
|
|
||||||
using Wonky.Entity.DTO;
|
|
||||||
using Wonky.Entity.Views;
|
using Wonky.Entity.Views;
|
||||||
|
|
||||||
namespace Wonky.Client.HttpRepository;
|
namespace Wonky.Client.HttpRepository;
|
||||||
|
@ -7,5 +5,5 @@ namespace Wonky.Client.HttpRepository;
|
||||||
public interface IAdminReportHttpRepository
|
public interface IAdminReportHttpRepository
|
||||||
{
|
{
|
||||||
Task<List<NgSalesReportListView>> GetReports(string userId);
|
Task<List<NgSalesReportListView>> GetReports(string userId);
|
||||||
Task<SalesReportViewModel> GetReport(string userId, string workDate);
|
Task<ReportView> GetReport(string userId, string workDate);
|
||||||
}
|
}
|
|
@ -8,7 +8,7 @@ public interface IReportHttpRepository
|
||||||
{
|
{
|
||||||
Task<bool> ReportExist(string workDate);
|
Task<bool> ReportExist(string workDate);
|
||||||
Task<List<NgSalesReportListView>> GetReports();
|
Task<List<NgSalesReportListView>> GetReports();
|
||||||
Task<SalesReportViewModel> GetReport(string workDate);
|
Task<ReportView> GetReport(string workDate);
|
||||||
Task<ReportInitDto> InitializeReportData(string workDate);
|
Task<ReportInitDto> InitializeReportData(string workDate);
|
||||||
Task<ApiResponseView> PostReport(string workDate, ReportDto reportDto);
|
Task<ApiResponseView> PostReport(string workDate, ReportDto reportDto);
|
||||||
}
|
}
|
|
@ -42,9 +42,9 @@ public class ReportHttpRepository :IReportHttpRepository
|
||||||
return result.ReportClosed;
|
return result.ReportClosed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<SalesReportViewModel> GetReport(string workDate)
|
public async Task<ReportView> GetReport(string workDate)
|
||||||
{
|
{
|
||||||
return await _client.GetFromJsonAsync<SalesReportViewModel>($"{_apiConfig.ReportUri}/{workDate}");
|
return await _client.GetFromJsonAsync<ReportView>($"{_apiConfig.ReportUri}/{workDate}");
|
||||||
|
|
||||||
}
|
}
|
||||||
public async Task<ReportInitDto> InitializeReportData(string workDate)
|
public async Task<ReportInitDto> InitializeReportData(string workDate)
|
||||||
|
|
|
@ -23,13 +23,13 @@
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<div class="row mb-1 align-items-center">
|
<div class="row mb-1 align-items-center">
|
||||||
<div class="col">
|
<div class="col-md-6">
|
||||||
<h2 class="workDate">@(string.IsNullOrWhiteSpace(_workDate) ? "" : $"{DateTime.Parse(_workDate).ToLongDateString()}")</h2>
|
<h2 class="workDate">@(string.IsNullOrWhiteSpace(_workDate) ? "" : $"{DateTime.Parse(_workDate).ToLongDateString()}")</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col-md-4">
|
||||||
<WorkDateComponent OnChanged="GetActivities"></WorkDateComponent>
|
<WorkDateComponent OnChanged="GetActivities"></WorkDateComponent>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col-md-2">
|
||||||
@if (_reportExist)
|
@if (_reportExist)
|
||||||
{
|
{
|
||||||
<a class="btn btn-primary" href="/sales-reports/view/@_workDate">RAPPORT</a>
|
<a class="btn btn-primary" href="/sales-reports/view/@_workDate">RAPPORT</a>
|
||||||
|
@ -44,5 +44,5 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<ActivityTableComponent Activities="ReportView.Activities"></ActivityTableComponent>
|
<ActivityTableComponent Activities="ReportItemListView.ReportItems"></ActivityTableComponent>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -17,7 +17,7 @@ public partial class ActivityToday
|
||||||
[Inject] private IActivityHttpRepository _activityRepo { get; set; }
|
[Inject] private IActivityHttpRepository _activityRepo { get; set; }
|
||||||
[Inject] private IReportHttpRepository _reportRepo { get; set; }
|
[Inject] private IReportHttpRepository _reportRepo { get; set; }
|
||||||
[Inject] private IToastService _toast { get; set; }
|
[Inject] private IToastService _toast { get; set; }
|
||||||
private ActivityListReportView ReportView { get; set; } = new();
|
private ReportItemListView ReportItemListView { get; set; } = new();
|
||||||
private Preferences _prefs { get; set; } = new();
|
private Preferences _prefs { get; set; } = new();
|
||||||
private string _workDate { get; set; } = $"{DateTime.Now:yyyy-MM-dd}";
|
private string _workDate { get; set; } = $"{DateTime.Now:yyyy-MM-dd}";
|
||||||
private bool _reportExist = false;
|
private bool _reportExist = false;
|
||||||
|
@ -38,8 +38,8 @@ public partial class ActivityToday
|
||||||
{
|
{
|
||||||
_toast.ShowInfo("Vent nogle sekunder for data");
|
_toast.ShowInfo("Vent nogle sekunder for data");
|
||||||
_workDate = workDate;
|
_workDate = workDate;
|
||||||
ReportView = new ActivityListReportView();
|
ReportItemListView = new ReportItemListView();
|
||||||
ReportView = await _activityRepo.GetActivities(workDate);
|
ReportItemListView = await _activityRepo.GetActivities(workDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
<h3 class="workDate">@_workDate.ToLongDateString()</h3>
|
<h3 class="workDate">@_workDate.ToLongDateString()</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<WorkDateComponent OnChanged="SetWorkDate"></WorkDateComponent>
|
<WorkDateComponent SelectedDate="@_selectedDate" OnChanged="SetWorkDate"></WorkDateComponent>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -187,7 +187,7 @@
|
||||||
<th scope="col">Antal</th>
|
<th scope="col">Antal</th>
|
||||||
<th scope="col">Pris</th>
|
<th scope="col">Pris</th>
|
||||||
<th scope="col">Rabat</th>
|
<th scope="col">Rabat</th>
|
||||||
<th scope="col">SAS</th>
|
<th class="align-content-center justify-content-center" scope="col">SAS</th>
|
||||||
<th scope="col">Varenr.</th>
|
<th scope="col">Varenr.</th>
|
||||||
<th scope="col"></th>
|
<th scope="col"></th>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -203,12 +203,12 @@
|
||||||
<td>
|
<td>
|
||||||
<input type="number" class="form-control" @bind-value="@Discount"/>
|
<input type="number" class="form-control" @bind-value="@Discount"/>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td class="align-content-center justify-content-center">
|
||||||
<input type="checkbox" class="form-check" @bind-value="@Sas"/>
|
<input type="checkbox" class="form-check" @bind-value="@Sas"/>
|
||||||
</td>
|
</td>
|
||||||
<td>@_selectedItem.Sku</td>
|
<td>@_selectedItem.Sku</td>
|
||||||
<td>
|
<td>
|
||||||
<button type="button" class="btn btn-warning text-nowrap d-block" @onclick="@(() => AddItem(_selectedItem))">@_selectedItem.Name</button>
|
<button type="button" class="btn btn-warning text-nowrap d-block" @onclick="@(() => AddItem(_selectedItem))">BESTIL @Quantity @_selectedItem.Name</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
@ -268,7 +268,7 @@
|
||||||
<li class="list-group-item d-flex justify-content-between align-items-end">
|
<li class="list-group-item d-flex justify-content-between align-items-end">
|
||||||
<div class="text-sm-start px-2">@rate.Quantity</div>
|
<div class="text-sm-start px-2">@rate.Quantity</div>
|
||||||
<div class="text-sm-end">@rate.Rate</div>
|
<div class="text-sm-end">@rate.Rate</div>
|
||||||
<a class="btn btn-primary" href="#draft-line" @onclick="@(() => SelectItem(item.ItemId, rate.Quantity, rate.Rate))">
|
<a class="btn btn-primary" @onclick="@(() => SelectItem(item.ItemId, rate.Quantity, rate.Rate))">
|
||||||
Vælg
|
Vælg
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -71,6 +71,7 @@ public partial class ActivityVisitNew : IDisposable
|
||||||
private bool _reportClosdd { get; set; } = false;
|
private bool _reportClosdd { get; set; } = false;
|
||||||
private UserInfoView _ux { get; set; } = new();
|
private UserInfoView _ux { get; set; } = new();
|
||||||
private DateTime _workDate { get; set; } = DateTime.Now;
|
private DateTime _workDate { get; set; } = DateTime.Now;
|
||||||
|
private string _selectedDate { get; set; } = "";
|
||||||
|
|
||||||
protected override async Task OnParametersSetAsync()
|
protected override async Task OnParametersSetAsync()
|
||||||
{
|
{
|
||||||
|
@ -78,11 +79,12 @@ public partial class ActivityVisitNew : IDisposable
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(_prefs.WorkDate))
|
if (!string.IsNullOrWhiteSpace(_prefs.WorkDate))
|
||||||
_workDate = DateTime.Parse(_prefs.WorkDate);
|
_workDate = DateTime.Parse(_prefs.WorkDate);
|
||||||
|
_selectedDate = $"{_workDate:yyyy-MM-dd}";
|
||||||
|
|
||||||
// raise flag if report is closed
|
// raise flag if report is closed
|
||||||
_reportClosdd = await _reportRepo.ReportExist($"{_workDate:yyyy-MM-dd}");
|
_reportClosdd = await _reportRepo.ReportExist(_selectedDate);
|
||||||
if(_reportClosdd)
|
if(_reportClosdd)
|
||||||
_navigator.NavigateTo($"/sales-reports/view/{_workDate:yyyy-MM-dd}");
|
_navigator.NavigateTo($"/sales-reports/view/{_selectedDate}");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,10 +140,9 @@ public partial class ActivityVisitNew : IDisposable
|
||||||
|
|
||||||
private void SetWorkDate(string workDate)
|
private void SetWorkDate(string workDate)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"SetWorkDate => {workDate}");
|
_selectedDate = workDate;
|
||||||
_logger.LogInformation("WorkDateComponent.OnChanged(SetWorkDate(workDate)) => {workDate}", workDate);
|
_workDate = DateTime.Parse(_selectedDate);
|
||||||
_workDate = DateTime.Parse(workDate);
|
_draft.ActivityDate = _selectedDate;
|
||||||
_draft.ActivityDate = workDate;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task CreateActivity()
|
private async Task CreateActivity()
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
@using Microsoft.AspNetCore.Authorization
|
@using Microsoft.AspNetCore.Authorization
|
||||||
@attribute [Authorize(Roles = "Admin")]
|
@attribute [Authorize(Roles = "Admin")]
|
||||||
@page "/admin/users/advisers/{CountryCode}/{UserId}/reports"
|
@page "/admin/users/advisers/{CountryCode}/{UserId}/reports"
|
||||||
|
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header bg-dark text-white">
|
<div class="card-header bg-dark text-white">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
@ -27,6 +28,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<AdminReportTableComponent CountryCode="@CountryCode" UserId="@UserId" ReportList="_reports"></AdminReportTableComponent>
|
<AdminReportTableComponent CountryCode="@CountryCode" UserId="@UserId" ReportList="@_reports" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -12,7 +12,6 @@ public partial class AdminSalesReportList : IDisposable
|
||||||
[Parameter] public string CountryCode { get; set; } = "";
|
[Parameter] public string CountryCode { get; set; } = "";
|
||||||
[Inject] private IAdminReportHttpRepository _reportRepo { get; set; }
|
[Inject] private IAdminReportHttpRepository _reportRepo { get; set; }
|
||||||
[Inject] private HttpInterceptorService _interceptor { get; set; }
|
[Inject] private HttpInterceptorService _interceptor { get; set; }
|
||||||
|
|
||||||
private List<NgSalesReportListView> _reports { get; set; }
|
private List<NgSalesReportListView> _reports { get; set; }
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
|
|
|
@ -20,43 +20,50 @@
|
||||||
@page "/admin/users/advisers/{CountryCode}/{UserId}/reports/{ReportDate}"
|
@page "/admin/users/advisers/{CountryCode}/{UserId}/reports/{ReportDate}"
|
||||||
@attribute [Authorize(Roles = "Admin")]
|
@attribute [Authorize(Roles = "Admin")]
|
||||||
|
|
||||||
<PageTitle>@_report.ReportData.Name</PageTitle>
|
@if (SalesReport != null)
|
||||||
|
{
|
||||||
|
<PageTitle>@SalesReport.ReportData.Name</PageTitle>
|
||||||
|
|
||||||
<div class="card">
|
<div class="alert alert-dark">
|
||||||
<div class="card-header bg-dark text-white">
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col w-75 d-print-none justify-content-center">
|
<div class="col-md-6 d-print-none align-content-center">
|
||||||
@if (!string.IsNullOrWhiteSpace(ReportDate))
|
@if (!string.IsNullOrWhiteSpace(ReportDate))
|
||||||
{
|
{
|
||||||
<h2 class="workDate">@DateTime.Parse(ReportDate).ToLongDateString()</h2>
|
<h2 class="workDate">@DateTime.Parse(ReportDate).ToLongDateString()</h2>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
<div class="col col-sm-1 d-print-none">
|
<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>
|
<button class="btn btn-warning" type="button" onclick="window.print();">Print</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="col d-none d-print-block text-end">
|
<div class="col d-none d-print-block text-end align-content-center">
|
||||||
<h3>@_report.ReportData.Name</h3>
|
<h2>@SalesReport.ReportData.Name</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col w-75">
|
<div class="w-75">
|
||||||
<ReportSummaryComponent ReportData="_report.ReportData"></ReportSummaryComponent>
|
<ReportSummaryComponent ReportData="SalesReport.ReportData"></ReportSummaryComponent>
|
||||||
</div>
|
</div>
|
||||||
<div class="col w-25">
|
<div class="w-25">
|
||||||
<ReportDistanceLedgerComponent ReportData="_report.ReportData"></ReportDistanceLedgerComponent>
|
<ReportDistanceLedgerComponent ReportData="SalesReport.ReportData"></ReportDistanceLedgerComponent>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<ActivityTableComponent Activities="_report.Activities"></ActivityTableComponent>
|
<ActivityTableComponent Activities="SalesReport.ReportItems"></ActivityTableComponent>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<ReportActivityLedgerComponent ReportData="_report.ReportData"></ReportActivityLedgerComponent>
|
<ReportActivityLedgerComponent ReportData="SalesReport.ReportData"></ReportActivityLedgerComponent>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
}
|
||||||
</div>
|
else
|
||||||
|
{
|
||||||
|
<AppSpinner/>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,32 +1,74 @@
|
||||||
|
using System.Text.Json;
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using Wonky.Client.HttpInterceptors;
|
||||||
using Wonky.Client.HttpRepository;
|
using Wonky.Client.HttpRepository;
|
||||||
using Wonky.Entity.DTO;
|
|
||||||
using Wonky.Entity.Views;
|
using Wonky.Entity.Views;
|
||||||
|
|
||||||
namespace Wonky.Client.Pages;
|
namespace Wonky.Client.Pages;
|
||||||
|
|
||||||
public partial class AdminSalesReportView
|
public partial class AdminSalesReportView : IDisposable
|
||||||
{
|
{
|
||||||
[Parameter] public string ReportDate { get; set; } = "";
|
/// <summary>
|
||||||
[Parameter] public string UserId { get; set; } = "";
|
/// Country code from url parameter
|
||||||
|
/// </summary>
|
||||||
[Parameter] public string CountryCode { get; set; } = "";
|
[Parameter] public string CountryCode { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// Report date from url parameter
|
||||||
|
/// </summary>
|
||||||
|
[Parameter] public string ReportDate { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// User entity Id from url parameter
|
||||||
|
/// </summary>
|
||||||
|
[Parameter] public string UserId { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// Injected interceptor service
|
||||||
|
/// </summary>
|
||||||
|
[Inject] private HttpInterceptorService _interceptor { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Injected administrative report http repo
|
||||||
|
/// </summary>
|
||||||
[Inject] private IAdminReportHttpRepository _reportRepo { get; set; }
|
[Inject] private IAdminReportHttpRepository _reportRepo { get; set; }
|
||||||
private SalesReportViewModel _report { get; set; } = new();
|
/// <summary>
|
||||||
|
/// Navigation Manager
|
||||||
|
/// </summary>
|
||||||
|
[Inject] private NavigationManager _navigator { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Report to render
|
||||||
|
/// </summary>
|
||||||
|
private ReportView SalesReport { get; set; }
|
||||||
|
|
||||||
protected override async Task OnParametersSetAsync()
|
protected override async Task OnParametersSetAsync()
|
||||||
{
|
{
|
||||||
|
_interceptor.RegisterEvent();
|
||||||
|
_interceptor.RegisterBeforeSendEvent();
|
||||||
|
|
||||||
await GetReport(ReportDate);
|
await GetReport(ReportDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Work date component event handler
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="workDate"></param>
|
||||||
private async Task GetReport(string workDate)
|
private async Task GetReport(string workDate)
|
||||||
{
|
{
|
||||||
ReportDate = workDate;
|
if(workDate != ReportDate)
|
||||||
_report = new SalesReportViewModel();
|
_navigator.NavigateTo($"/admin/users/advisers/{CountryCode}/{UserId}/reports/{workDate}");
|
||||||
_report = await GetUserReport(UserId, workDate);
|
SalesReport = new ReportView();
|
||||||
|
SalesReport = await GetUserReport(UserId, workDate);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Get report for user with entity Id for work date
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="userId"></param>
|
||||||
|
/// <param name="workDate"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private async Task<ReportView> GetUserReport(string userId, string workDate)
|
||||||
|
{
|
||||||
|
return SalesReport = await _reportRepo.GetReport(userId, workDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<SalesReportViewModel> GetUserReport(string userId, string workDate)
|
public void Dispose()
|
||||||
{
|
{
|
||||||
return _report = await _reportRepo.GetReport(userId, workDate);
|
_interceptor.DisposeEvent();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -163,14 +163,14 @@
|
||||||
</DisplayStateComponent>
|
</DisplayStateComponent>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<InputDate id="nextVisit" class="form-control" @bind-Value="@(_nextVisit)"/>
|
<InputDate id="nextVisit" class="form-control" @bind-Value="@(_nextVisit)" />
|
||||||
<ValidationMessage For="@(() => _company.NextVisit)">Dato kan ikke vær før sidste besøg</ValidationMessage>
|
<ValidationMessage For="@(() => _company.NextVisit)">Dato kan ikke vær før sidste besøg</ValidationMessage>
|
||||||
</td>
|
</td>
|
||||||
<th>
|
<th>
|
||||||
Besøgt
|
Besøgt
|
||||||
</th>
|
</th>
|
||||||
<td>
|
<td>
|
||||||
<InputDate id="lastVisit" class="form-control" @bind-Value="@_lastVisit"/>
|
<InputDate id="lastVisit" class="form-control" @bind-Value="@_lastVisit" />
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="align-middle">
|
<tr class="align-middle">
|
||||||
|
|
|
@ -58,7 +58,7 @@ public partial class CompanyView : IDisposable
|
||||||
private string _orgVat;
|
private string _orgVat;
|
||||||
private string countryCode = "dk";
|
private string countryCode = "dk";
|
||||||
private string _visitState = "the-ugly";
|
private string _visitState = "the-ugly";
|
||||||
private int _enableActivity = 0;
|
private int _enableActivity = 1;
|
||||||
private bool _hideButtons = false;
|
private bool _hideButtons = false;
|
||||||
private string _actionLink = "";
|
private string _actionLink = "";
|
||||||
|
|
||||||
|
@ -70,6 +70,7 @@ public partial class CompanyView : IDisposable
|
||||||
private async Task RefreshHistory()
|
private async Task RefreshHistory()
|
||||||
{
|
{
|
||||||
_toast.ShowInfo("Vent mens data opdateres ...");
|
_toast.ShowInfo("Vent mens data opdateres ...");
|
||||||
|
_toast.ShowInfo("Der kan gå nogle minuutter inden data er klar ...");
|
||||||
var ts = await _historyRepo.UpdateProductHistory(_company.CompanyId, $"{DateTime.Parse(_company.HistorySync):yyyy-MM-dd}");;
|
var ts = await _historyRepo.UpdateProductHistory(_company.CompanyId, $"{DateTime.Parse(_company.HistorySync):yyyy-MM-dd}");;
|
||||||
_company.HistorySync = ts.Replace("\"", "");
|
_company.HistorySync = ts.Replace("\"", "");
|
||||||
}
|
}
|
||||||
|
@ -81,6 +82,9 @@ public partial class CompanyView : IDisposable
|
||||||
_interceptor.RegisterBeforeSendEvent();
|
_interceptor.RegisterBeforeSendEvent();
|
||||||
|
|
||||||
_company = await _companyRepo.GetCompanyById(CompanyId);
|
_company = await _companyRepo.GetCompanyById(CompanyId);
|
||||||
|
|
||||||
|
_logger.LogDebug("CompanyView => _company <= {_company}", JsonSerializer.Serialize(_company, _options));
|
||||||
|
|
||||||
_orgVat = _company.VatNumber;
|
_orgVat = _company.VatNumber;
|
||||||
_company.CountryCode = ux.CountryCode.ToLower();
|
_company.CountryCode = ux.CountryCode.ToLower();
|
||||||
|
|
||||||
|
@ -96,11 +100,18 @@ public partial class CompanyView : IDisposable
|
||||||
|
|
||||||
_lastVisit = DateTime.Parse(_company.LastVisit);
|
_lastVisit = DateTime.Parse(_company.LastVisit);
|
||||||
_nextVisit = DateTime.Parse(_company.NextVisit);
|
_nextVisit = DateTime.Parse(_company.NextVisit);
|
||||||
|
if (_lastVisit.Year < 2020)
|
||||||
|
{
|
||||||
|
_lastVisit = DateTime.Parse("2020-01-01");
|
||||||
|
}
|
||||||
|
|
||||||
if (!_company.ValidDateSpan())
|
if (!_company.ValidDateSpan())
|
||||||
_nextVisit = _lastVisit.AddDays(_company.Interval * 7);
|
_nextVisit = _lastVisit.AddDays(_company.Interval * 7);
|
||||||
|
|
||||||
_visitState = Utils.GetVisitState($"{_nextVisit:yyyy-MM-dd}");
|
_visitState = Utils.GetVisitState($"{_nextVisit:yyyy-MM-dd}");
|
||||||
|
|
||||||
_actionLink = $"/companies/{CompanyId}/activities/new";
|
_actionLink = $"/companies/{CompanyId}/activities/new";
|
||||||
|
|
||||||
if(_company.HasFolded == 1)
|
if(_company.HasFolded == 1)
|
||||||
{
|
{
|
||||||
_hasFolded = true;
|
_hasFolded = true;
|
||||||
|
@ -127,7 +138,7 @@ public partial class CompanyView : IDisposable
|
||||||
_company.LastVisit = $"{_lastVisit:yyyy-MM-dd}";
|
_company.LastVisit = $"{_lastVisit:yyyy-MM-dd}";
|
||||||
_company.NextVisit = $"{_nextVisit:yyyy-MM-dd}";
|
_company.NextVisit = $"{_nextVisit:yyyy-MM-dd}";
|
||||||
|
|
||||||
if (!VatUtils.ValidateFormat(_company.CountryCode, _company.VatNumber) || !_company.ValidDateSpan())
|
if (!VatUtils.ValidateFormat(_company.CountryCode, _company.VatNumber))
|
||||||
{
|
{
|
||||||
_formInvalid = true;
|
_formInvalid = true;
|
||||||
}
|
}
|
||||||
|
@ -139,7 +150,7 @@ public partial class CompanyView : IDisposable
|
||||||
}
|
}
|
||||||
private void ValidationChanged(object sender, ValidationStateChangedEventArgs e)
|
private void ValidationChanged(object sender, ValidationStateChangedEventArgs e)
|
||||||
{
|
{
|
||||||
_formInvalid = true;
|
_formInvalid = false;
|
||||||
_editContext.OnFieldChanged -= HandleFieldChanged;
|
_editContext.OnFieldChanged -= HandleFieldChanged;
|
||||||
_editContext.OnValidationStateChanged -= ValidationChanged;
|
_editContext.OnValidationStateChanged -= ValidationChanged;
|
||||||
|
|
||||||
|
@ -172,10 +183,13 @@ public partial class CompanyView : IDisposable
|
||||||
var success = await _companyRepo.UpdateCompany(CompanyId, _company );
|
var success = await _companyRepo.UpdateCompany(CompanyId, _company );
|
||||||
if (success)
|
if (success)
|
||||||
{
|
{
|
||||||
_toast.ShowSuccess("Kunde er opdateret");
|
_toast.ShowSuccess("Opdatering er afsendt. Der nogle minutter inden data er opdateret.");
|
||||||
_company = await _companyRepo.GetCompanyById(_company.CompanyId);
|
_company = await _companyRepo.GetCompanyById(_company.CompanyId);
|
||||||
|
_company.ValidVat = 1;
|
||||||
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
_hideButtons = false;
|
_hideButtons = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
<h3 class="workDate">@(_workDate.ToLongDateString())</h3>
|
<h3 class="workDate">@(_workDate.ToLongDateString())</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4 justify-content-center">
|
<div class="col-md-4 justify-content-center">
|
||||||
<WorkDateComponent OnChanged="SetWorkDate"></WorkDateComponent>
|
<WorkDateComponent SelectedDate="@($"{_workDate:yyyy-MM-dd}")" OnChanged="SetWorkDate"></WorkDateComponent>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-2 justify-content-center">
|
<div class="col-md-2 justify-content-center">
|
||||||
@if (_working)
|
@if (_working)
|
||||||
|
|
|
@ -40,7 +40,7 @@ public partial class SalesReportNew : IDisposable
|
||||||
[Inject] private IToastService _toast { get; set; }
|
[Inject] private IToastService _toast { get; set; }
|
||||||
private EditContext _editContext { get; set; }
|
private EditContext _editContext { get; set; }
|
||||||
private ReportDto _report { get; set; } = new();
|
private ReportDto _report { get; set; } = new();
|
||||||
private List<ActivityListItemView> _activities { get; set; } = new();
|
private List<ReportItemView> _activities { get; set; } = new();
|
||||||
private ReportFiguresDto _init { get; set; }
|
private ReportFiguresDto _init { get; set; }
|
||||||
private Preferences _prefs { get; set; } = new();
|
private Preferences _prefs { get; set; } = new();
|
||||||
private bool _formInvalid = true;
|
private bool _formInvalid = true;
|
||||||
|
@ -152,7 +152,7 @@ public partial class SalesReportNew : IDisposable
|
||||||
_noFigures = true;
|
_noFigures = true;
|
||||||
_report.Figures = new ReportFiguresDto();
|
_report.Figures = new ReportFiguresDto();
|
||||||
_init = new ReportFiguresDto();
|
_init = new ReportFiguresDto();
|
||||||
_activities = new List<ActivityListItemView>();
|
_activities = new List<ReportItemView>();
|
||||||
_report.Figures.KmEvening = 0;
|
_report.Figures.KmEvening = 0;
|
||||||
_report.Figures.KmMorning = 0;
|
_report.Figures.KmMorning = 0;
|
||||||
_report.Figures.Distance = 0;
|
_report.Figures.Distance = 0;
|
||||||
|
@ -167,12 +167,12 @@ public partial class SalesReportNew : IDisposable
|
||||||
{
|
{
|
||||||
_working = true;
|
_working = true;
|
||||||
var data = await _reportRepo.InitializeReportData($"{_workDate:yyyy-MM-dd}");
|
var data = await _reportRepo.InitializeReportData($"{_workDate:yyyy-MM-dd}");
|
||||||
if(data.Closed)
|
if(data.ReportClosed)
|
||||||
_navigator.NavigateTo($"/sales-reports/view/{_workDate:yyyy-MM-dd}");
|
_navigator.NavigateTo($"/sales-reports/view/{_workDate:yyyy-MM-dd}");
|
||||||
_noFigures = false;
|
_noFigures = false;
|
||||||
_report.Figures = data.Figures;
|
_report.Figures = data.ReportData;
|
||||||
_init = data.Figures;
|
_init = data.ReportData;
|
||||||
_activities = data.Activities;
|
_activities = data.ReportItems;
|
||||||
_working = false;
|
_working = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,36 +22,41 @@
|
||||||
|
|
||||||
<PageTitle>@_report.ReportData.Name</PageTitle>
|
<PageTitle>@_report.ReportData.Name</PageTitle>
|
||||||
|
|
||||||
<div class="card">
|
<div class="alert alert-dark">
|
||||||
<div class="card-header bg-dark text-white">
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col w-75 d-print-none justify-content-center">
|
<div class="col-md-6 d-print-none align-content-center">
|
||||||
@if (!string.IsNullOrWhiteSpace(ReportDate))
|
@if (!string.IsNullOrWhiteSpace(ReportDate))
|
||||||
{
|
{
|
||||||
<h2 class="workDate">@DateTime.Parse(ReportDate).ToLongDateString()</h2>
|
<h2 class="workDate">@DateTime.Parse(ReportDate).ToLongDateString()</h2>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
<div class="col d-print-none justify-content-center">
|
<div class="col col-md-4 d-print-none align-content-center">
|
||||||
<WorkDateComponent OnChanged="GetReport"></WorkDateComponent>
|
<WorkDateComponent SelectedDate="@ReportDate" OnChanged="GetReport"></WorkDateComponent>
|
||||||
</div>
|
</div>
|
||||||
<div class="col col-sm-1 d-print-none">
|
<div class="col col-md-1 d-print-none align-content-center">
|
||||||
<button class="btn btn-warning" type="button" onclick="window.print();">Print</button>
|
<button class="btn btn-warning" type="button" onclick="window.print();">Print</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="col d-none d-print-block text-end">
|
<div class="col d-none d-print-block text-end align-content-center">
|
||||||
<h3>@_report.ReportData.Name</h3>
|
<h2>@_report.ReportData.Name</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="row">
|
||||||
<div class="row">
|
<div class="w-75">
|
||||||
<div class="col w-75">
|
|
||||||
<ReportSummaryComponent ReportData="_report.ReportData"></ReportSummaryComponent>
|
<ReportSummaryComponent ReportData="_report.ReportData"></ReportSummaryComponent>
|
||||||
</div>
|
</div>
|
||||||
<div class="col w-25">
|
<div class="w-25">
|
||||||
<ReportDistanceLedgerComponent ReportData="_report.ReportData"></ReportDistanceLedgerComponent>
|
<ReportDistanceLedgerComponent ReportData="_report.ReportData"></ReportDistanceLedgerComponent>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<ActivityTableComponent Activities="_report.ReportItems"></ActivityTableComponent>
|
||||||
</div>
|
</div>
|
||||||
<ActivityTableComponent Activities="_report.Activities"></ActivityTableComponent>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
<ReportActivityLedgerComponent ReportData="_report.ReportData"></ReportActivityLedgerComponent>
|
<ReportActivityLedgerComponent ReportData="_report.ReportData"></ReportActivityLedgerComponent>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,8 @@ public partial class SalesReportView
|
||||||
{
|
{
|
||||||
[Parameter] public string ReportDate { get; set; }
|
[Parameter] public string ReportDate { get; set; }
|
||||||
[Inject] private IReportHttpRepository _reportRepo { get; set; }
|
[Inject] private IReportHttpRepository _reportRepo { get; set; }
|
||||||
private SalesReportViewModel _report { get; set; } = new();
|
[Inject] private NavigationManager _navigator { get; set; }
|
||||||
|
private ReportView _report { get; set; } = new();
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
|
@ -21,8 +22,8 @@ public partial class SalesReportView
|
||||||
|
|
||||||
private async Task GetReport(string workDate)
|
private async Task GetReport(string workDate)
|
||||||
{
|
{
|
||||||
ReportDate = workDate;
|
if(workDate != ReportDate)
|
||||||
_report = new SalesReportViewModel();
|
_navigator.NavigateTo($"/sales-reports/view/{workDate}");
|
||||||
_report = await _reportRepo.GetReport(workDate);
|
_report = await _reportRepo.GetReport(workDate);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,3 +1,4 @@
|
||||||
|
@using Wonky.Client.Components
|
||||||
@page "/task-items"
|
@page "/task-items"
|
||||||
|
|
||||||
<div class="card">
|
<div class="card">
|
||||||
|
@ -7,7 +8,7 @@
|
||||||
<h3 class="workDate">@(string.IsNullOrWhiteSpace(_workDate) ? "" : $"{DateTime.Parse(_workDate).ToLongDateString()}")</h3>
|
<h3 class="workDate">@(string.IsNullOrWhiteSpace(_workDate) ? "" : $"{DateTime.Parse(_workDate).ToLongDateString()}")</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<WorkDateComponent OnChanged="GetTaskItems"></WorkDateComponent>
|
<WorkDateComponent SelectedDate="_workDate" OnChanged="GetTaskItems"></WorkDateComponent>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<a class="btn btn-primary" href="/task-items/new">NY OPGAVE</a>
|
<a class="btn btn-primary" href="/task-items/new">NY OPGAVE</a>
|
||||||
|
|
|
@ -28,10 +28,10 @@ public partial class TaskItemList : IDisposable
|
||||||
|
|
||||||
_interceptor.RegisterEvent();
|
_interceptor.RegisterEvent();
|
||||||
_interceptor.RegisterBeforeSendEvent();
|
_interceptor.RegisterBeforeSendEvent();
|
||||||
await GetActivities(_workDate);
|
await GetTaskItems(_workDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task GetActivities(string workDate)
|
private async Task GetTaskItems(string workDate)
|
||||||
{
|
{
|
||||||
_toast.ShowInfo("Vent nogle sekunder for data");
|
_toast.ShowInfo("Vent nogle sekunder for data");
|
||||||
_workDate = workDate;
|
_workDate = workDate;
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"appInfo": {
|
"appInfo": {
|
||||||
"name": "Wonky Client",
|
"name": "Wonky Client",
|
||||||
"version": "0.8.83",
|
"version": "0.8.101",
|
||||||
"isBeta": true,
|
"isBeta": true,
|
||||||
"image": "grumpy-coder.png"
|
"image": "grumpy-coder.png"
|
||||||
},
|
},
|
||||||
"apiConfig": {
|
"apiConfig": {
|
||||||
"innoBaseUrl": "https://dev.innotec.dk",
|
"innoBaseUrl": "https://staging.innotec.dk",
|
||||||
"glsTrackUrl": "https://www.gls-group.eu/276-I-PORTAL-WEB/content/GLS/DK01/DA/5004.htm?txtAction=71000&txtRefNo=",
|
"glsTrackUrl": "https://www.gls-group.eu/276-I-PORTAL-WEB/content/GLS/DK01/DA/5004.htm?txtAction=71000&txtRefNo=",
|
||||||
"glsId": "",
|
"glsId": "",
|
||||||
"virkUrl": "api/v2/services/virk",
|
"virkUrl": "api/v2/services/virk",
|
||||||
|
|
|
@ -16,7 +16,18 @@
|
||||||
}
|
}
|
||||||
.page {
|
.page {
|
||||||
font-size: 10px;
|
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;
|
||||||
|
}
|
||||||
|
.report-item {
|
||||||
|
font-size: 10px;
|
||||||
border: initial;
|
border: initial;
|
||||||
border-radius: initial;
|
border-radius: initial;
|
||||||
box-shadow: initial;
|
box-shadow: initial;
|
||||||
|
|
2
Wonky.Client/wwwroot/robots.txt
Normal file
2
Wonky.Client/wwwroot/robots.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
User-agent: *
|
||||||
|
Disallow: /
|
|
@ -8,16 +8,16 @@ public class ReportInitDto
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Flag to prevent activity to be added to report
|
/// Flag to prevent activity to be added to report
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool Closed { get; set; }
|
public bool ReportClosed { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Report figures
|
/// Report figures
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ReportFiguresDto Figures { get; set; }
|
public ReportFiguresDto ReportData { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// List of activities for report
|
/// List of activities for report
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<ActivityListItemView> Activities { get; set; }
|
public List<ReportItemView> ReportItems { get; set; }
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,7 +0,0 @@
|
||||||
namespace Wonky.Entity.Views;
|
|
||||||
|
|
||||||
public class ActivityCompanyView
|
|
||||||
{
|
|
||||||
public string Name { get; set; } = "";
|
|
||||||
public string City { get; set; } = "";
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
namespace Wonky.Entity.Views;
|
|
||||||
|
|
||||||
public class ActivityListReportView
|
|
||||||
{
|
|
||||||
public bool ReportClosed { get; set; }
|
|
||||||
public List<ActivityListItemView> Activities { get; set; } = new();
|
|
||||||
}
|
|
7
Wonky.Entity/Views/ReportActivityInfoView.cs
Normal file
7
Wonky.Entity/Views/ReportActivityInfoView.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace Wonky.Entity.Views;
|
||||||
|
|
||||||
|
public class ReportActivityInfoView
|
||||||
|
{
|
||||||
|
public bool ReportClosed { get; set; }
|
||||||
|
public List<ReportItemView> ReportItems { get; set; } = new();
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
namespace Wonky.Entity.Views;
|
namespace Wonky.Entity.Views;
|
||||||
|
|
||||||
public class SalesReportDataViewModel
|
public class ReportData
|
||||||
{
|
{
|
||||||
public string ReportId { get; set; } = "";
|
public string ReportId { get; set; } = "";
|
||||||
public string ErpUserId { get; set; } = "";
|
public string ErpUserId { get; set; } = "";
|
37
Wonky.Entity/Views/ReportItemCustomer.cs
Normal file
37
Wonky.Entity/Views/ReportItemCustomer.cs
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
namespace Wonky.Entity.Views;
|
||||||
|
|
||||||
|
public class ReportItemCustomer
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Company name
|
||||||
|
/// </summary>
|
||||||
|
public string Name { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// Company account
|
||||||
|
/// </summary>
|
||||||
|
public string Account { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// Company office phone
|
||||||
|
/// </summary>
|
||||||
|
public string Phone { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// Company VAT registration number
|
||||||
|
/// </summary>
|
||||||
|
public string VatNumber { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// Company address city name
|
||||||
|
/// </summary>
|
||||||
|
public string City { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// Company address postal coce
|
||||||
|
/// </summary>
|
||||||
|
public string ZipCode { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// Company address line 1
|
||||||
|
/// </summary>
|
||||||
|
public string Address1 { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// Company address address line 2
|
||||||
|
/// </summary>
|
||||||
|
public string Address2 { get; set; } = "";
|
||||||
|
}
|
29
Wonky.Entity/Views/ReportItemLine.cs
Normal file
29
Wonky.Entity/Views/ReportItemLine.cs
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
namespace Wonky.Entity.Views;
|
||||||
|
|
||||||
|
public class ReportItemLine
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Line description
|
||||||
|
/// </summary>
|
||||||
|
public string Description { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// Line item SKU
|
||||||
|
/// </summary>
|
||||||
|
public string Sku { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// Line item quantity
|
||||||
|
/// </summary>
|
||||||
|
public int Quantity { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Line item discount
|
||||||
|
/// </summary>
|
||||||
|
public decimal Discount { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Line item price
|
||||||
|
/// </summary>
|
||||||
|
public decimal Price { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Line sum
|
||||||
|
/// </summary>
|
||||||
|
public decimal LineSum { get; set; }
|
||||||
|
}
|
7
Wonky.Entity/Views/ReportItemListView.cs
Normal file
7
Wonky.Entity/Views/ReportItemListView.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace Wonky.Entity.Views;
|
||||||
|
|
||||||
|
public class ReportItemListView
|
||||||
|
{
|
||||||
|
public bool ReportClosed { get; set; }
|
||||||
|
public List<ReportItemView> ReportItems { get; set; } = new();
|
||||||
|
}
|
|
@ -1,70 +1,62 @@
|
||||||
namespace Wonky.Entity.Views;
|
namespace Wonky.Entity.Views;
|
||||||
|
|
||||||
public class ActivityListItemView
|
public class ReportItemView
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Company Info in listing
|
/// Customer company info
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ActivityCompanyView Company { get; set; } = new();
|
public ReportItemCustomer Company { get; set; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Processing note to office
|
/// Lines
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string OfficeNote { get; set; } = "";
|
public List<ReportItemView> Lines { get; set; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Total amount
|
/// Closed sale
|
||||||
/// </summary>
|
|
||||||
public decimal OrderAmount { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sas amount
|
|
||||||
/// </summary>
|
|
||||||
public decimal SasAmount { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sales head entity Id
|
|
||||||
/// </summary>
|
|
||||||
public string SalesHeadId { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Flag indicating if activity is a sale or a quote
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool Closed { get; set; }
|
public bool Closed { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Document date
|
/// Order amount
|
||||||
|
/// </summary>
|
||||||
|
public decimal OrderAmount { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Order safe seal amount
|
||||||
|
/// </summary>
|
||||||
|
public decimal SasAmount { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Order date
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string OrderDate { get; set; } = "";
|
public string OrderDate { get; set; } = "";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Client reference number
|
/// Office note
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string ReferenceNumber { get; set; } = "";
|
public string OfficeNote { get; set; } = "";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Client reference name
|
/// Product demo
|
||||||
|
/// </summary>
|
||||||
|
public string Demo { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// Product sale resume
|
||||||
|
/// </summary>
|
||||||
|
public string Sales { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// Our reference
|
||||||
|
/// </summary>
|
||||||
|
public string OurRef { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// Customer reference
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string YourRef { get; set; } = "";
|
public string YourRef { get; set; } = "";
|
||||||
|
/// <summary>
|
||||||
|
/// Customer reference number
|
||||||
|
/// </summary>
|
||||||
|
public string ReferenceNumber { get; set; } = "";
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Visit type enum as string
|
/// Visit type enum as string
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string VisitTypeEnum { get; set; } = "";
|
public string VisitTypeEnum { get; set; } = "";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Status type enum as string
|
/// Status type enum as string
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string StatusTypeEnum { get; set; } = "";
|
public string StatusTypeEnum { get; set; } = "";
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Demonstration
|
|
||||||
/// </summary>
|
|
||||||
public string Demo { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sales resume
|
|
||||||
/// </summary>
|
|
||||||
public string Sales { get; set; } = "";
|
|
||||||
}
|
}
|
||||||
|
|
7
Wonky.Entity/Views/ReportView.cs
Normal file
7
Wonky.Entity/Views/ReportView.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace Wonky.Entity.Views;
|
||||||
|
|
||||||
|
public class ReportView
|
||||||
|
{
|
||||||
|
public ReportData ReportData { get; set; } = new();
|
||||||
|
public List<ReportItemView> ReportItems { get; set; } = new();
|
||||||
|
}
|
|
@ -1,7 +0,0 @@
|
||||||
namespace Wonky.Entity.Views;
|
|
||||||
|
|
||||||
public class SalesReportViewModel
|
|
||||||
{
|
|
||||||
public SalesReportDataViewModel ReportData { get; set; } = new();
|
|
||||||
public List<ActivityListItemView> Activities { get; set; } = new ();
|
|
||||||
}
|
|
Loading…
Reference in a new issue