From 0b0be1a247461ae3d8f53fc9214ecfc93eb46174 Mon Sep 17 00:00:00 2001 From: Frede Hundewadt Date: Tue, 13 Dec 2022 07:57:29 +0100 Subject: [PATCH] WIP: quotes - refactor express call to use get instead of put --- .../ICrmActivityHttpRepository.cs | 8 +++- .../CrmActivityHttpRepository.cs | 44 +++++++++++-------- ...CrmCompanyQuotes.razor => CrmQuotes.razor} | 2 +- Wonky.Client/Pages/InfoPage.razor | 17 ++++--- Wonky.Client/Pages/OfficeOrderViewPage.razor | 6 ++- .../Pages/OfficeOrderViewPage.razor.cs | 34 +++++++------- Wonky.Client/wwwroot/appsettings.json | 4 +- 7 files changed, 63 insertions(+), 52 deletions(-) rename Wonky.Client/Pages/{CrmCompanyQuotes.razor => CrmQuotes.razor} (87%) diff --git a/Wonky.Client/HttpInterfaces/ICrmActivityHttpRepository.cs b/Wonky.Client/HttpInterfaces/ICrmActivityHttpRepository.cs index a3807d2d..ee0534ae 100644 --- a/Wonky.Client/HttpInterfaces/ICrmActivityHttpRepository.cs +++ b/Wonky.Client/HttpInterfaces/ICrmActivityHttpRepository.cs @@ -20,6 +20,12 @@ namespace Wonky.Client.HttpInterfaces; public interface ICrmActivityHttpRepository { + /// + /// Get a list of open quotes + /// + /// List of Activities with ActivityStatus == Quote + Task> GetQuotes(); + /// /// Convert quote to sale /// @@ -67,7 +73,7 @@ public interface ICrmActivityHttpRepository /// /// /// ApiResponseView - Task SetProcessStateExpress(string activityId); + Task GetExpressState(string activityId); /// /// Update office note for activity diff --git a/Wonky.Client/HttpRepository/CrmActivityHttpRepository.cs b/Wonky.Client/HttpRepository/CrmActivityHttpRepository.cs index 5d835af1..4fd61e62 100644 --- a/Wonky.Client/HttpRepository/CrmActivityHttpRepository.cs +++ b/Wonky.Client/HttpRepository/CrmActivityHttpRepository.cs @@ -46,6 +46,16 @@ public class CrmActivityHttpRepository : ICrmActivityHttpRepository _api = configuration.Value; } + /// + /// Get a list of quotes + /// + /// List of activities with Quote status + public async Task> GetQuotes() + { + var result = await _client.GetFromJsonAsync>($"{_api.CrmActivities}/quotes", _options); + return result ?? new List(); + } + /// /// Convert quote to sale /// @@ -55,7 +65,7 @@ public class CrmActivityHttpRepository : ICrmActivityHttpRepository { var response = await _client.PutAsJsonAsync( $"{_api.CrmActivities}/{activity.SalesHeadId}/accept", activity, _options); - + var content = await response.Content.ReadAsStringAsync(); var result = JsonSerializer.Deserialize(content); return result!; @@ -89,8 +99,8 @@ public class CrmActivityHttpRepository : ICrmActivityHttpRepository 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); } @@ -115,12 +125,11 @@ public class CrmActivityHttpRepository : ICrmActivityHttpRepository { var response = await _client.GetAsync($"{_api.CrmActivities}/company/{customerId}"); var content = await response.Content.ReadAsStringAsync(); - if(!response.IsSuccessStatusCode) + if (!response.IsSuccessStatusCode) return new List(); return string.IsNullOrWhiteSpace(content) ? new List() - : JsonSerializer.Deserialize>(content, _options); - + : JsonSerializer.Deserialize>(content, _options); } /// @@ -135,24 +144,21 @@ public class CrmActivityHttpRepository : ICrmActivityHttpRepository return salesItem ?? new ReportItemView(); } + /// /// Set backend process state to express /// /// /// ApiResponseView - public async Task SetProcessStateExpress(string activityId) + public async Task GetExpressState(string activityId) { - var response = await _client.PutAsync( - $"{_api.CrmActivities}/express/{activityId}?status=Express", null); - var content = await response.Content.ReadAsStringAsync(); - return string.IsNullOrWhiteSpace(content) - ? new ApiResponseView - { - Code = (int)response.StatusCode, - Id = activityId, - Message = "Resoursen returnerede fejl", - IsSuccess = false - } - : JsonSerializer.Deserialize(content); + var response = await _client.GetFromJsonAsync($"{_api.CrmActivities}/express/{activityId}?status=Express", _options); + return response ?? new ApiResponseView + { + Code = 404, + IsSuccess = false, + Message = "Uventet svare fra server", + Id = "" + }; } /// diff --git a/Wonky.Client/Pages/CrmCompanyQuotes.razor b/Wonky.Client/Pages/CrmQuotes.razor similarity index 87% rename from Wonky.Client/Pages/CrmCompanyQuotes.razor rename to Wonky.Client/Pages/CrmQuotes.razor index c102c516..e6e5efb6 100644 --- a/Wonky.Client/Pages/CrmCompanyQuotes.razor +++ b/Wonky.Client/Pages/CrmQuotes.razor @@ -1,4 +1,4 @@ -@page "/companies/{CompanyId}/quotes" +@page "/open-quotes" @using Wonky.Client.HttpInterfaces

Åbne tilbud

diff --git a/Wonky.Client/Pages/InfoPage.razor b/Wonky.Client/Pages/InfoPage.razor index 562c99e1..5d78d83b 100644 --- a/Wonky.Client/Pages/InfoPage.razor +++ b/Wonky.Client/Pages/InfoPage.razor @@ -26,14 +26,14 @@
Wonky Logo -
+

Piktogrammer

- +
diff --git a/Wonky.Client/Pages/OfficeOrderViewPage.razor b/Wonky.Client/Pages/OfficeOrderViewPage.razor index 415dc641..ee590b0b 100644 --- a/Wonky.Client/Pages/OfficeOrderViewPage.razor +++ b/Wonky.Client/Pages/OfficeOrderViewPage.razor @@ -35,9 +35,11 @@
-
+
- +
+
+
diff --git a/Wonky.Client/Pages/OfficeOrderViewPage.razor.cs b/Wonky.Client/Pages/OfficeOrderViewPage.razor.cs index 7adee03f..bd9029b7 100644 --- a/Wonky.Client/Pages/OfficeOrderViewPage.razor.cs +++ b/Wonky.Client/Pages/OfficeOrderViewPage.razor.cs @@ -45,7 +45,7 @@ public partial class OfficeOrderViewPage : IDisposable private bool _isNotified { get; set; } private bool Working { get; set; } = true; - private readonly JsonSerializerOptions? _options = new JsonSerializerOptions + private readonly JsonSerializerOptions _options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true }; @@ -54,6 +54,7 @@ public partial class OfficeOrderViewPage : IDisposable { Interceptor.RegisterEvent(); Interceptor.RegisterBeforeSendEvent(); + // fetch order from backend _reportItem = await ActivityRepo.GetReportItem(OrderId); Logger.LogDebug("ReportItem => \n {}", JsonSerializer.Serialize(_reportItem, _options)); Working = false; @@ -64,25 +65,20 @@ public partial class OfficeOrderViewPage : IDisposable ///
private async Task SetExpressState() { + // disable doubled actions if (Working) return; Working = true; - Logger.LogDebug("SetExpressState => \n {}", JsonSerializer.Serialize(_reportItem, _options)); - var responseView = await ActivityRepo.SetProcessStateExpress(_reportItem.ActivityId); - Logger.LogDebug("SetExpressState => \n {}", responseView.Message ); - - if (!responseView.IsSuccess) - { - Toast.ShowError(responseView.Message); - Working = false; - return; - } - + Logger.LogDebug("GetExpressState => {}", JsonSerializer.Serialize(_reportItem, _options)); + // send request to backend + var responseView = await ActivityRepo.GetExpressState(_reportItem.ActivityId); + Logger.LogDebug("SetExpressState => responseView <= {} ", JsonSerializer.Serialize(responseView)); + // get user info from storage var user = await Storage.GetItemAsync("_xu"); + // fetch sales rep from response var salesRep = await UserRepo.GetAdvisorInfo(responseView.Id); - - Logger.LogDebug("SetExpressState => salesRep => \n {}", JsonSerializer.Serialize(salesRep)); - + Logger.LogDebug("SetExpressState => salesRep => {}", JsonSerializer.Serialize(salesRep)); + // create email notification body var body = new StringBuilder(); body.AppendLine($"Kvittering for modtagelse af hasteordre {_reportItem.ESalesNumber}"); body.AppendLine($"Konto : {_reportItem.Company.Account}"); @@ -93,7 +89,7 @@ public partial class OfficeOrderViewPage : IDisposable body.AppendLine("Med venlig hilsen"); body.AppendLine($"{user.FullName}"); body.AppendLine($"{user.PhoneNumber}"); - + // create a list of mail addresses var sendTo = new List { new() @@ -102,7 +98,7 @@ public partial class OfficeOrderViewPage : IDisposable Name = $"{salesRep.FirstName} {salesRep.LastName}" } }; - + // create an email var msg = new EmailMessage { Body = body.ToString(), @@ -111,7 +107,9 @@ public partial class OfficeOrderViewPage : IDisposable IsBodyHtml = false }; Logger.LogDebug("SetExpressState Notification => \n {}", JsonSerializer.Serialize(msg)); + // send a system generated email var sendMail = await MailService.SendMail("System", msg); + // result notification if (sendMail.IsSuccess) { Toast @@ -124,7 +122,7 @@ public partial class OfficeOrderViewPage : IDisposable .ShowWarning( $"Notifikation til {salesRep.FirstName} kunne ikke sendes. {sendMail.Message}", "ADVARSEL"); } - + // disable further notifications _isNotified = true; Working = false; } diff --git a/Wonky.Client/wwwroot/appsettings.json b/Wonky.Client/wwwroot/appsettings.json index d20dd595..2fa6d186 100644 --- a/Wonky.Client/wwwroot/appsettings.json +++ b/Wonky.Client/wwwroot/appsettings.json @@ -1,13 +1,13 @@ { "appInfo": { "name": "Wonky Client", - "version": "0.83.3", + "version": "0.84.1", "rc": true, "sandBox": false, "image": "grumpy-coder.png" }, "apiConfig": { - "baseUrl": "https://zeta.innotec.dk", + "baseUrl": "https://eta.innotec.dk", "catalog": "api/v2/catalog", "crmCustomers": "api/v2/crm/companies", "crmInventoryExt": "history/inventory",