From e6b7e658b3cc39521f4c0fb90b09edf9d0c83766 Mon Sep 17 00:00:00 2001 From: Frede Hundewadt Date: Wed, 30 Nov 2022 18:46:33 +0100 Subject: [PATCH] cosmetic fixes found during today's lectures v.0.72.1 --- .../AdvisorActivityTableComponent.razor | 4 + .../AdvisorActivityTableComponent.razor.cs | 19 +-- .../AdvisorCompanyTableComponent.razor | 100 ++++++++------- .../ProductInventoryTableComponent.razor | 27 ++++- Wonky.Client/Helpers/Utils.cs | 16 +++ .../CrmActivityHttpRepository.cs | 13 +- Wonky.Client/Pages/CrmActivityNewPage.razor | 19 ++- .../Pages/CrmActivityNewPage.razor.cs | 72 +++++------ .../Pages/CrmCompanyActivityListPage.razor | 114 ++++++++++-------- .../Pages/CrmCompanyActivityListPage.razor.cs | 14 ++- .../Pages/CrmCompanyInventoryPage.razor | 14 ++- .../Pages/CrmCompanyInvoiceListPage.razor | 14 ++- Wonky.Client/Pages/CrmCompanyListPage.razor | 6 +- .../Pages/CrmCompanyListPage.razor.cs | 3 + Wonky.Client/Pages/CrmCompanyViewPage.razor | 16 +-- Wonky.Client/Pages/CrmReportNewPage.razor | 25 ++-- Wonky.Client/Pages/CrmReportNewPage.razor.cs | 68 ++++++++--- .../Shared/ConfirmWorkDateModal.razor | 2 +- Wonky.Client/Shared/ConfirmationModal.razor | 2 +- Wonky.Client/Shared/InformationModal.razor | 2 +- Wonky.Client/wwwroot/appsettings.json | 2 +- 21 files changed, 317 insertions(+), 235 deletions(-) diff --git a/Wonky.Client/Components/AdvisorActivityTableComponent.razor b/Wonky.Client/Components/AdvisorActivityTableComponent.razor index 1fa2977a..973dae7f 100644 --- a/Wonky.Client/Components/AdvisorActivityTableComponent.razor +++ b/Wonky.Client/Components/AdvisorActivityTableComponent.razor @@ -73,4 +73,8 @@ +} +else +{ +
Ingen data
} \ No newline at end of file diff --git a/Wonky.Client/Components/AdvisorActivityTableComponent.razor.cs b/Wonky.Client/Components/AdvisorActivityTableComponent.razor.cs index 3ac7be57..4660f2db 100644 --- a/Wonky.Client/Components/AdvisorActivityTableComponent.razor.cs +++ b/Wonky.Client/Components/AdvisorActivityTableComponent.razor.cs @@ -21,23 +21,10 @@ namespace Wonky.Client.Components; public partial class AdvisorActivityTableComponent { [Parameter] public List Activities { get; set; } - [Inject] public NavigationManager _navigator { get; set; } + [Inject] public NavigationManager Navigator { get; set; } - // private static string GetProcessStatus(string processStatus) + // private void ShowOrder(string companyId, string orderId) // { - // return processStatus.ToLower() switch - // { - // "express" => "the-fast", - // "none" => "the-good", - // "picked" => "the-bad", - // "packed" => "the-ugly", - // "shipped" => "the-dead", - // _ => "" - // }; + // Navigator.NavigateTo($"office/customers/{companyId}/orders/{orderId}"); // } - - private void ShowOrder(string companyId, string orderId) - { - _navigator.NavigateTo($"office/customers/{companyId}/orders/{orderId}"); - } } \ No newline at end of file diff --git a/Wonky.Client/Components/AdvisorCompanyTableComponent.razor b/Wonky.Client/Components/AdvisorCompanyTableComponent.razor index db2b86ac..73a025bb 100644 --- a/Wonky.Client/Components/AdvisorCompanyTableComponent.razor +++ b/Wonky.Client/Components/AdvisorCompanyTableComponent.razor @@ -18,57 +18,51 @@ @using Wonky.Client.Components; @using Wonky.Client.Helpers; -@if (Companies.Any()) -{ - - - - - - - - - - +
BSNavnKontoTlfBynavn
+ + + + + + + + + + + + + @foreach (var company in Companies) + { + + + + + + + + - - - @foreach (var company in Companies) - { - - - - - - - - - - } - - -
BSNavnKontoTlfBynavn
+ + + @if (!string.IsNullOrWhiteSpace(company.Note)) + { + + } + + @company.Name + + @company.Account + + @company.Phone + + @company.City + + +
- - - @if (!string.IsNullOrWhiteSpace(company.Note)) - { - - } - - @company.Name - - @company.Account - - @company.Phone - - @company.City - - -
-} -else -{ - -} - \ No newline at end of file + } + + + + + \ No newline at end of file diff --git a/Wonky.Client/Components/ProductInventoryTableComponent.razor b/Wonky.Client/Components/ProductInventoryTableComponent.razor index b23694c4..3fc1986b 100644 --- a/Wonky.Client/Components/ProductInventoryTableComponent.razor +++ b/Wonky.Client/Components/ProductInventoryTableComponent.razor @@ -17,11 +17,32 @@ @if (Inventory.Any()) { - + @* +
+ @foreach (var product in Inventory) + { +
+
+
+ @product.Description +
+
@product.Sku
+
+ @product.Quantity +
+
+ +
+
+
+ } +
+ *@ +
@foreach (var product in Inventory) { - + @@ -32,7 +53,7 @@ @product.Quantity } diff --git a/Wonky.Client/Helpers/Utils.cs b/Wonky.Client/Helpers/Utils.cs index d117c657..57b4db2d 100644 --- a/Wonky.Client/Helpers/Utils.cs +++ b/Wonky.Client/Helpers/Utils.cs @@ -14,12 +14,28 @@ // using System; +using System.Net.Mail; using Wonky.Entity.DTO; namespace Wonky.Client.Helpers; public static class Utils { + public static bool IsValidEmail(string email) + { + var trimmedEmail = email.Trim(); + + if (trimmedEmail.EndsWith(".")) { + return false; // suggested by @TK-421 + } + try { + var addr = new MailAddress(email); + return addr.Address == trimmedEmail; + } + catch { + return false; + } + } public static int GetHashFromNow() { return DateTime.Now.ToFileTimeUtc().GetHashCode(); diff --git a/Wonky.Client/HttpRepository/CrmActivityHttpRepository.cs b/Wonky.Client/HttpRepository/CrmActivityHttpRepository.cs index e13f1ca1..5d835af1 100644 --- a/Wonky.Client/HttpRepository/CrmActivityHttpRepository.cs +++ b/Wonky.Client/HttpRepository/CrmActivityHttpRepository.cs @@ -86,9 +86,11 @@ public class CrmActivityHttpRepository : ICrmActivityHttpRepository { var response = await _client .GetAsync($"{_api.CrmActivities}/date/{activityDate}"); + if (!response.IsSuccessStatusCode) + return new ReportStatusView(); var content = await response.Content.ReadAsStringAsync(); - return string.IsNullOrWhiteSpace(content) - ? new ReportStatusView() + return string.IsNullOrWhiteSpace(content) + ? new ReportStatusView() : JsonSerializer.Deserialize(content, _options); } @@ -113,7 +115,12 @@ public class CrmActivityHttpRepository : ICrmActivityHttpRepository { var response = await _client.GetAsync($"{_api.CrmActivities}/company/{customerId}"); var content = await response.Content.ReadAsStringAsync(); - return JsonSerializer.Deserialize>(content, _options); + if(!response.IsSuccessStatusCode) + return new List(); + return string.IsNullOrWhiteSpace(content) + ? new List() + : JsonSerializer.Deserialize>(content, _options); + } /// diff --git a/Wonky.Client/Pages/CrmActivityNewPage.razor b/Wonky.Client/Pages/CrmActivityNewPage.razor index ee99c10d..7b7289d5 100644 --- a/Wonky.Client/Pages/CrmActivityNewPage.razor +++ b/Wonky.Client/Pages/CrmActivityNewPage.razor @@ -64,7 +64,7 @@ else @if (!string.IsNullOrEmpty(Activity.VatNumber) && !string.IsNullOrWhiteSpace(Activity.Address1) && Company.HasFolded == 0) { - @if (DraftStateProvider.Draft.DraftType == "quote") + @if (DraftStateProvider.Draft.DraftType == "order") { } @@ -233,30 +233,25 @@ else @@ -334,7 +329,7 @@ else Tilbage
- +
} diff --git a/Wonky.Client/Pages/CrmActivityNewPage.razor.cs b/Wonky.Client/Pages/CrmActivityNewPage.razor.cs index 3dd11fec..3f976f50 100644 --- a/Wonky.Client/Pages/CrmActivityNewPage.razor.cs +++ b/Wonky.Client/Pages/CrmActivityNewPage.razor.cs @@ -22,6 +22,7 @@ using Wonky.Client.HttpRepository; using Wonky.Client.Models; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Forms; +using Wonky.Client.Helpers; using Wonky.Client.HttpInterfaces; using Wonky.Client.Services; using Wonky.Client.Shared; @@ -55,16 +56,17 @@ public partial class CrmActivityNewPage : IDisposable private EditContext ActivityContext { get; set; } private bool PoFormInvalid { get; set; } = true; private bool ShowItem { get; set; } - private string Quantity = "1"; - private string Price = "0"; - private string Discount = "0"; - private bool Sas; - private bool InvalidActivityType = true; - private bool InvalidStatusType = true; - private bool InvalidActivity = true; - private bool InvalidCanvas = true; - private bool NoHistory = true; + private string Quantity { get; set; } = "1"; + private string Price { get; set; } = "0"; + private string Discount { get; set; } = "0"; + private bool Sas { get; set; } + private bool InvalidActivityType { get; set; } = true; + private bool InvalidStatusType { get; set; } = true; + private bool InvalidActivity { get; set; } = true; + private bool InvalidCanvas { get; set; } = true; + private bool NoHistory { get; set; } = true; private bool ReportClosed { get; set; } + private bool Working { get; set; } = true; private UserInfoView ThisUserInfo { get; set; } = new(); private DateTime SelectedDate { get; set; } private string OldPhone { get; set; } = ""; @@ -75,6 +77,9 @@ public partial class CrmActivityNewPage : IDisposable private ProductPriceHistoryModal PriceHistoryModal { get; set; } private ConfirmWorkDateModal ConfirmWorkDate { get; set; } = new(); + /// + /// Page initialization + /// protected override async Task OnInitializedAsync() { ActivityContext = new EditContext(Activity); @@ -143,6 +148,7 @@ public partial class CrmActivityNewPage : IDisposable Activity.ActivityStatusEnum = "order"; PoFormInvalid = false; } + Working = false; StateHasChanged(); } @@ -184,12 +190,10 @@ public partial class CrmActivityNewPage : IDisposable // get selected item if (string.IsNullOrWhiteSpace(sku.ItemId)) return; - SelectedItem = await Catalog.GetSalesItemId(sku.ItemId); ShowItem = true; Price = sku.Rate; Quantity = sku.Quantity; - StateHasChanged(); } @@ -210,7 +214,6 @@ public partial class CrmActivityNewPage : IDisposable { if (price == 0) return; - Price = price.ToString("N2", CultureInfo.InvariantCulture); StateHasChanged(); } @@ -221,30 +224,33 @@ public partial class CrmActivityNewPage : IDisposable private async Task CreateActivity() { // disable submit button to avoid multiple clicks - PoFormInvalid = true; - + if (Working) + return; + // validate customer address1 - this is a required input if (string.IsNullOrWhiteSpace(Activity.Address1)) { Toast.ShowError("Kunde adresse er ufuldstændig."); - PoFormInvalid = false; return; } - - if (Activity.ActivityStatusEnum == "order") + // + switch (Activity.ActivityStatusEnum) { - if (DraftStateProvider.Draft.Items.Count == 0) - { + // don't accept order with no lines + case "order" when DraftStateProvider.Draft.Items.Count == 0: Toast.ShowError("Ved bestilling skal der være en eller flere linjer i kladden."); - PoFormInvalid = false; return; - } - if (Company.Account is "NY" or "" && string.IsNullOrWhiteSpace(Activity.Phone)) - { + // phone number is required if first time customer + case "order" when Company.Account is "NY" or "" && string.IsNullOrWhiteSpace(Activity.Phone): Toast.ShowError("Ved bestilling til ny kunde skal telefon nummer angives."); - PoFormInvalid = false; return; - } + // verify email address is a valid address + case "quote" when !Utils.IsValidEmail(Activity.Email): + Toast.ShowError("Ved tilbud skal en gyldig email adresse angives."); + return; } + // raise working flag + Working = true; + // reset selected item SelectedItem = new SalesItemView(); // check if phone number need to be updated @@ -284,21 +290,24 @@ public partial class CrmActivityNewPage : IDisposable .ToList(); Activity.Lines = lines; } + // debug logging Logger.LogDebug("CrmNewActivityPage => \n {}", JsonSerializer.Serialize(Activity)); // post to api var result = await CrmActivityRepo.CreateActivity(Activity); + // debug logging Logger.LogDebug("ApiResponseView => \n {}", JsonSerializer.Serialize(result)); // show result message if (result.IsSuccess) { Toast.ShowSuccess($"{result.Message}", - DraftStateProvider.Draft.Items.Count == 0 ? "Besøg er oprettet" : "Bestilling er oprettet"); + DraftStateProvider.Draft.Items.Count == 0 ? "Besøg er oprettet" : "Bestilling/Tilbud er oprettet"); await DeleteDraft(); Navigator.NavigateTo($"/companies"); return; } - - PoFormInvalid = false; + // lower working flag + Working = false; + // show error message Toast.ShowError(result.Message, "ORDRE FEJL"); } @@ -367,16 +376,11 @@ public partial class CrmActivityNewPage : IDisposable || PoFormInvalid || DraftStateProvider.Draft.Items.Count == 0 || (Activity.ActivityStatusEnum == "offer" && string.IsNullOrWhiteSpace(Activity.Email)); - if (Activity.YourRef.Length > 35 || Activity.ReferenceNumber.Length > 20) + if (Activity.YourRef.Length > 35 || Activity.ReferenceNumber.Length > 20 || InvalidActivity) { PoFormInvalid = true; return; } - if (InvalidActivity) - { - PoFormInvalid = true; - return; - } PoFormInvalid = !ActivityContext.Validate(); StateHasChanged(); } diff --git a/Wonky.Client/Pages/CrmCompanyActivityListPage.razor b/Wonky.Client/Pages/CrmCompanyActivityListPage.razor index 164ee779..5c53fa73 100644 --- a/Wonky.Client/Pages/CrmCompanyActivityListPage.razor +++ b/Wonky.Client/Pages/CrmCompanyActivityListPage.razor @@ -20,68 +20,80 @@ @page "/companies/{CompanyId}/activities" @attribute [Authorize(Roles = "Advisor")] - -

@Company.Name

- -
-
-
-
-

Dato

-
-
-

Demo

-
-
-

Salg

-
-
-

Note /Kontor

-
-
-

Note /Selv

-
+@if (!string.IsNullOrWhiteSpace(Company.Name)) +{ +
+
+

@Company.Name

+
+ +
+ +
+
+
+
+

Dato

+
+
+

Demo

+
+
+

Salg

+
+
+

Note /Kontor

+
+
+

Note /Selv

+
+
+
- @if (Activities.Any()) - { - @foreach (var activity in Activities) + @if (Activities.Any()) + { + @foreach (var activity in Activities) + { +
+
+
+ @activity.OrderDate +
+
+ @activity.Demo +
+
+ @activity.Sales +
+
+ @activity.OfficeNote +
+
+ ikke fuldt implementeret +
+
+
+ } + } + else {
- @activity.OrderDate -
-
- @activity.Demo -
-
- @activity.Sales -
-
- @activity.OfficeNote -
-
- + Ingen data
} - } - else - { - -
-
-
- Ingen data -
-
- } -
+} + @if (Working) { - -} + +} \ No newline at end of file diff --git a/Wonky.Client/Pages/CrmCompanyActivityListPage.razor.cs b/Wonky.Client/Pages/CrmCompanyActivityListPage.razor.cs index c01450f7..b14c4d40 100644 --- a/Wonky.Client/Pages/CrmCompanyActivityListPage.razor.cs +++ b/Wonky.Client/Pages/CrmCompanyActivityListPage.razor.cs @@ -28,7 +28,6 @@ namespace Wonky.Client.Pages; public partial class CrmCompanyActivityListPage : IDisposable { [Parameter] public string CompanyId { get; set; } = ""; - [Inject] public HttpInterceptorService _interceptor { get; set; } [Inject] public ICrmActivityHttpRepository CrmActivityRepo { get; set; } [Inject] public ICrmCompanyHttpRepository CompanyRepo { get; set; } @@ -42,12 +41,19 @@ public partial class CrmCompanyActivityListPage : IDisposable _interceptor.RegisterBeforeSendEvent(); Company = await CompanyRepo.GetCompanyById(CompanyId); - - Activities = await CrmActivityRepo.GetCustomerActivities(CompanyId); - Activities = Activities.OrderByDescending(x => x.OrderDate).ToList(); + await GetActivities(); Working = false; } + private async Task GetActivities() + { + Working = true; + Activities = await CrmActivityRepo.GetCustomerActivities(CompanyId); + if(Activities.Any()) + Activities = Activities.OrderByDescending(x => x.OrderDate).ToList(); + Working = false; + } + public void Dispose() { _interceptor.DisposeEvent(); diff --git a/Wonky.Client/Pages/CrmCompanyInventoryPage.razor b/Wonky.Client/Pages/CrmCompanyInventoryPage.razor index b543a6e1..f441eb3b 100644 --- a/Wonky.Client/Pages/CrmCompanyInventoryPage.razor +++ b/Wonky.Client/Pages/CrmCompanyInventoryPage.razor @@ -19,13 +19,15 @@ @using Microsoft.AspNetCore.Authorization @page "/companies/{CompanyId}/h/i" @attribute [Authorize(Roles = "Advisor")] -
-
-

@Company.Name

+
+
+

@Company.Name

- @if (Loading) diff --git a/Wonky.Client/Pages/CrmCompanyInvoiceListPage.razor b/Wonky.Client/Pages/CrmCompanyInvoiceListPage.razor index 34129ad5..14f4348c 100644 --- a/Wonky.Client/Pages/CrmCompanyInvoiceListPage.razor +++ b/Wonky.Client/Pages/CrmCompanyInvoiceListPage.razor @@ -2,13 +2,15 @@ @using Wonky.Client.Components @if (!string.IsNullOrWhiteSpace(Company.Name)) { -
-
-

@Company.Name

+
+
+

@Company.Name

- diff --git a/Wonky.Client/Pages/CrmCompanyListPage.razor b/Wonky.Client/Pages/CrmCompanyListPage.razor index 5c688f59..f720f72b 100644 --- a/Wonky.Client/Pages/CrmCompanyListPage.razor +++ b/Wonky.Client/Pages/CrmCompanyListPage.razor @@ -54,4 +54,8 @@
- \ No newline at end of file + +@if (Working) +{ + +} \ No newline at end of file diff --git a/Wonky.Client/Pages/CrmCompanyListPage.razor.cs b/Wonky.Client/Pages/CrmCompanyListPage.razor.cs index 0b66718d..50cda5dc 100644 --- a/Wonky.Client/Pages/CrmCompanyListPage.razor.cs +++ b/Wonky.Client/Pages/CrmCompanyListPage.razor.cs @@ -42,6 +42,7 @@ namespace Wonky.Client.Pages private UserInfoView _userInfo { get; set; } = new(); private string _savedSearch { get; set; } = ""; private bool _includeFolded { get; set; } + private bool Working { get; set; } = true; protected override async Task OnInitializedAsync() { @@ -132,9 +133,11 @@ namespace Wonky.Client.Pages private async Task GetCompanies() { + Working = true; var pagingResponse = await _companyRepo.GetCompanies(_paging); _companyList = pagingResponse.Items; _metaData = pagingResponse.MetaData; + Working = false; } public void Dispose() => _interceptor.DisposeEvent(); diff --git a/Wonky.Client/Pages/CrmCompanyViewPage.razor b/Wonky.Client/Pages/CrmCompanyViewPage.razor index ff44c841..67ea78b8 100644 --- a/Wonky.Client/Pages/CrmCompanyViewPage.razor +++ b/Wonky.Client/Pages/CrmCompanyViewPage.razor @@ -123,7 +123,7 @@
@* save vat number *@
- +
@@ -131,16 +131,16 @@ @* activity buttons *@
@* Save CRM data button *@
- +
@* crm context - contacts *@ @@ -232,10 +232,6 @@
} -else -{ - -} diff --git a/Wonky.Client/Pages/CrmReportNewPage.razor b/Wonky.Client/Pages/CrmReportNewPage.razor index a72d5f1c..80e43180 100644 --- a/Wonky.Client/Pages/CrmReportNewPage.razor +++ b/Wonky.Client/Pages/CrmReportNewPage.razor @@ -28,7 +28,7 @@ @* report header *@
- +
@@ -45,14 +45,14 @@
- @* *@ + @if (Report.DayTypeEnum.ToLower().Contains("leave")) @@ -72,9 +72,11 @@ + Report.Figures.KmMorning = 0; } else { + Report.Figures.KmMorning = Preferences.KmMorning; } - @* - @@ -114,7 +112,7 @@ - + @@ -126,7 +124,6 @@ @@ -304,5 +301,5 @@
@product.Description - Historik + Se Historik
- +
- + - @* - - *@
- + - + @SelectedItem.Sku - +
Dag / Periode Begyndt Afsluttet
- + @@ -84,21 +86,17 @@ @bind-Value="_checkOut" @bind-Value:event="oninput" @onchange="OnTimeChanged"/> + - - *@ + - @*
*@ - @*
*@
TekstMedkørende SupervisorSupervisor
-
-> - \ No newline at end of file + + \ No newline at end of file diff --git a/Wonky.Client/Pages/CrmReportNewPage.razor.cs b/Wonky.Client/Pages/CrmReportNewPage.razor.cs index 5e5fff78..451ab5c5 100644 --- a/Wonky.Client/Pages/CrmReportNewPage.razor.cs +++ b/Wonky.Client/Pages/CrmReportNewPage.razor.cs @@ -46,9 +46,9 @@ public partial class CrmReportNewPage : IDisposable private List Activities { get; set; } = new(); private ReportFiguresDto InitialValues { get; set; } private Preferences Preferences { get; set; } = new(); - private bool FormInvalid = true; - private bool NoFigures = true; - private bool Working; + private bool FormInvalid { get; set; } = true; + private bool NoFigures { get; set; } = true; + private bool Working { get; set; } = true; private DateTime _workDate { get; set; } = DateTime.Now; private TimeOnly _checkIn { get; set; } = new(12, 0); private TimeOnly _checkOut { get; set; } = new(12, 0); @@ -57,6 +57,9 @@ public partial class CrmReportNewPage : IDisposable private ConfirmationModal ConfirmReportModal { get; set; } private string Prompt { get; set; } = ""; + /// + /// OnInitialized + /// protected override async Task OnInitializedAsync() { Interceptor.RegisterEvent(); @@ -81,8 +84,14 @@ public partial class CrmReportNewPage : IDisposable Report.Figures.Distance = 0; Report.Figures.DistancePrivateMonth = 0; await GetKeyFigures(); + Working = false; } + /// + /// Field data change event + /// + /// + /// private void HandleFieldChanged(object sender, FieldChangedEventArgs e) { Console.WriteLine($"e Model => {e.FieldIdentifier.Model}"); @@ -91,6 +100,11 @@ public partial class CrmReportNewPage : IDisposable StateHasChanged(); } + /// + /// Validation change event + /// + /// + /// private void ValidationChanged(object sender, ValidationStateChangedEventArgs e) { FormInvalid = false; @@ -100,7 +114,10 @@ public partial class CrmReportNewPage : IDisposable ReportContext.OnValidationStateChanged += ValidationChanged; } - private async Task ReportSaveConfirmed() + /// + /// Save report confirmed callback + /// + private async Task ConfirmSaveCallback() { // attempt to eliminate doubled click on submit button if (Working) @@ -114,27 +131,30 @@ public partial class CrmReportNewPage : IDisposable await PreferenceService.SetDateConfirmed(false); Navigator.NavigateTo($"/sales-reports/view/{_workDate:yyyy-MM-dd}"); } - + /// + /// Submit report + /// private void SubmitReport() { // attempt to eliminate doubled click on submit button if (Working) return; - + // check daytype if (string.IsNullOrWhiteSpace(Report.DayTypeEnum)) { - Toaster.ShowError("Dagtype skal vælges", "Dag type skal angives"); + Toaster.ShowError("Dagtype skal vælges", "Dag type mangler"); return; } - - if (Report.Figures.KmMorning > Report.Figures.KmEvening) + // distance day check - only if not leave + if (Report.Figures.KmMorning > Report.Figures.KmEvening && !Report.DayTypeEnum.ToLower().Contains("leave")) { Toaster.ShowError("Km udregning er negativ - kontroller venligst km tal", "Kontroller km tal"); return; } - + // local working variables DateTime checkIn; DateTime checkOut; + // create a date time object using workDate and workHour input if (Report.DayTypeEnum.ToLower().Contains("leave")) { checkIn = new DateTime(BeginLeave.Year, BeginLeave.Month, BeginLeave.Day, 0, 0, 0); @@ -145,23 +165,27 @@ public partial class CrmReportNewPage : IDisposable checkIn = new DateTime(_workDate.Year, _workDate.Month, _workDate.Day, _checkIn.Hour, _checkIn.Minute, 0); checkOut = new DateTime(_workDate.Year, _workDate.Month, _workDate.Day, _checkOut.Hour, _checkOut.Minute, 0); } - + // assign a workday number if the day is marked as salesDay Report.SalesDayNumber = Report.DayTypeEnum == "sales" ? Report.Figures.SalesDayCount + 1 : 0; + // format report date time input Report.FromDateTime = checkIn.ToString("yyyy-MM-dd'T'HH:mm:ss", CultureInfo.InvariantCulture); Report.ToDateTime = checkOut.ToString("yyyy-MM-dd'T'HH:mm:ss", CultureInfo.InvariantCulture); - + // assign final distance numbers Report.Figures.Distance = Report.Figures.KmEvening - Report.Figures.KmMorning; Report.Figures.DistanceMonth += Report.Figures.Distance; Report.Figures.DistancePrivateMonth += Report.Figures.DistancePrivate; Logger.LogDebug("_workDate => {workDate}", $"{_workDate:yyyy-MM-dd}"); Logger.LogDebug("_report => {report}", JsonSerializer.Serialize(Report)); - + // create a prompt Prompt = Report.Figures.Distance > 1000 ? $"'{Report.Figures.Distance}'KM tal er meget højt. Er du sikker på at det er rigtigt? Gem rapport for {_workDate.ToLongDateString()}?" : $"Gem Rapport for {_workDate.ToLongDateString()}?"; - + // pop confirmation ConfirmReportModal.Show(); } + /// + /// On Time changed - update the Report Date fields + /// private void OnTimeChanged() { var f = new DateTime(_workDate.Year, _workDate.Month, _workDate.Day, _checkIn.Hour, _checkIn.Minute,0); @@ -170,8 +194,12 @@ public partial class CrmReportNewPage : IDisposable var t = new DateTime(_workDate.Year, _workDate.Month, _workDate.Day, _checkOut.Hour, _checkOut.Minute,0); Report.ToDateTime = $"{t:yyyy-MM-dd'T'HH:mm}"; } - - private void SetWorkDate(string workDate) + + /// + /// Set workDate callback + /// + /// + private void SetWorkDateCallback(string workDate) { _workDate = DateTime.Parse(workDate); NoFigures = true; @@ -187,7 +215,10 @@ public partial class CrmReportNewPage : IDisposable Report.FromDateTime = $"{_workDate:yyyy-MM-dd'T'12:00}"; Report.ToDateTime = $"{_workDate:yyyy-MM-dd'T'12:00}"; } - + + /// + /// Get key figures from backend + /// private async Task GetKeyFigures() { Working = true; @@ -197,7 +228,8 @@ public partial class CrmReportNewPage : IDisposable Report.Figures = data.ReportData; InitialValues = data.ReportData; Activities = data.ReportItems; - Report.Figures.KmMorning = Preferences.KmMorning; + if(!Report.DayTypeEnum.ToLower().Contains("leave")) + Report.Figures.KmMorning = Preferences.KmMorning; NoFigures = false; Working = false; } diff --git a/Wonky.Client/Shared/ConfirmWorkDateModal.razor b/Wonky.Client/Shared/ConfirmWorkDateModal.razor index 9387291a..39a85bda 100644 --- a/Wonky.Client/Shared/ConfirmWorkDateModal.razor +++ b/Wonky.Client/Shared/ConfirmWorkDateModal.razor @@ -16,7 +16,7 @@ *@