diff --git a/Wonky.Client/Components/AppSpinner.razor b/Wonky.Client/Components/AppSpinner.razor index 7a9c4f35..68b79a19 100644 --- a/Wonky.Client/Components/AppSpinner.razor +++ b/Wonky.Client/Components/AppSpinner.razor @@ -14,5 +14,5 @@ // along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] // *@
- Afventer netværk svar ...Afventer netværk svar ... + Afventer svar fra netværk ...Afventer netværk svar ...
diff --git a/Wonky.Client/Components/AppVersion.razor b/Wonky.Client/Components/AppVersion.razor index ea20d040..45ec5e89 100644 --- a/Wonky.Client/Components/AppVersion.razor +++ b/Wonky.Client/Components/AppVersion.razor @@ -17,7 +17,7 @@ @Name @Version@if(IsBeta){-beta} @code { - private const string Version = "0.2.27"; + private const string Version = "0.2.31"; private const string Name = "wwo"; private const bool IsBeta = true; } diff --git a/Wonky.Client/Models/Draft.cs b/Wonky.Client/Models/Draft.cs index ff77cb38..75f27235 100644 --- a/Wonky.Client/Models/Draft.cs +++ b/Wonky.Client/Models/Draft.cs @@ -8,7 +8,8 @@ public class DraftItem public NgSalesItemView Item { get; set; } public decimal Price { get; set; } public decimal Discount { get; set; } - public decimal LineTotal => (Price - Price * Discount / 100) * Quantity; + public bool Sas { get; set; } + public decimal LineTotal => (Price - Price * Discount / 100) * (decimal) Quantity; } public class Draft diff --git a/Wonky.Client/Pages/CompanyCreate.razor.cs b/Wonky.Client/Pages/CompanyCreate.razor.cs index 681eae66..62b969ab 100644 --- a/Wonky.Client/Pages/CompanyCreate.razor.cs +++ b/Wonky.Client/Pages/CompanyCreate.razor.cs @@ -54,7 +54,7 @@ namespace Wonky.Client.Pages _createCompany = new EditContext(_dtoNgCompany); _createCompany.OnFieldChanged += HandleFieldChanged; - var ux = await StorageService.GetItemAsync("_ux"); + var ux = await StorageService.GetItemAsync("_xu"); _dtoNgCompany.SalesRepId = ux.Id; _dtoNgCompany.CountryCode = ux.CountryCode; Interceptor.RegisterEvent(); diff --git a/Wonky.Client/Pages/CompanyUpdate.razor b/Wonky.Client/Pages/CompanyUpdate.razor index cba16754..8181084c 100644 --- a/Wonky.Client/Pages/CompanyUpdate.razor +++ b/Wonky.Client/Pages/CompanyUpdate.razor @@ -37,7 +37,7 @@
@foreach (var info in VInfos) { -
+
@info.VatNumber
@@ -57,89 +57,88 @@
-
+
-
+
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
+
-
+
-
+
-
+
diff --git a/Wonky.Client/Pages/CrmActivityCreate.razor b/Wonky.Client/Pages/CrmActivityCreate.razor index 4a8f6a65..c642e5d0 100644 --- a/Wonky.Client/Pages/CrmActivityCreate.razor +++ b/Wonky.Client/Pages/CrmActivityCreate.razor @@ -38,47 +38,50 @@ aria-labelledby="activityHeader" data-bs-parent="#crmActivity">
-
- -
-
- -
-
-
-
- -
-
- - -
-
-
- -
+ +
- - -
+ +
+
- -
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+ +
@@ -198,7 +201,10 @@ Rabat
- + SAS +
+
+
@@ -209,13 +215,16 @@ @_selectedItem.Sku
- +
- +
- + +
+
+
@@ -252,6 +261,7 @@ @cItem.Quantity @cItem.Price @cItem.LineTotal + @@ -329,12 +339,13 @@
-
+
- + @* *@ +
diff --git a/Wonky.Client/Pages/CrmActivityCreate.razor.cs b/Wonky.Client/Pages/CrmActivityCreate.razor.cs index 46bbcb94..bd5a3fbd 100644 --- a/Wonky.Client/Pages/CrmActivityCreate.razor.cs +++ b/Wonky.Client/Pages/CrmActivityCreate.razor.cs @@ -53,6 +53,7 @@ public partial class CrmActivityCreate : IDisposable private string Quantity = "1"; private string Price = "0"; private string Discount = "0"; + private bool Sas; private bool InvalidActivityType { get; set; } = true; private bool InvalidStatusType { get; set; } = true; private bool InvalidActivity { get; set; } = true; @@ -72,7 +73,7 @@ public partial class CrmActivityCreate : IDisposable _prefs = await UserPrefs.GetPreferences(); _paging.SearchColumn = _prefs.ItemSearch; await GetSalesItems(); - Ux = await StorageService.GetItemAsync("_ux"); + Ux = await StorageService.GetItemAsync("_xu"); NgCompany = await CompanyRepo.GetCompanyById(CompanyId); DraftContext = new EditContext(_poDraft); @@ -112,8 +113,8 @@ public partial class CrmActivityCreate : IDisposable await UserPrefs.SetWorkDate(_poDraft.ActivityDate); var activityType = _poDraft.ActivityTypeEnum switch { - "caPhone" => "Tlf. ", - "caOnSite" => "Bsg. ", + "phone" => "Tlf. ", + "onSite" => "Bsg. ", _ => "" }; _poDraft.OurRef = $"{activityType}{Ux.FullName.Split(" ")[0]}"; @@ -128,7 +129,8 @@ public partial class CrmActivityCreate : IDisposable Sku = item.Item.Sku, Text = item.Item.Name, LineAmount = item.LineTotal, - LineNumber = ++ln + LineNumber = ++ln, + Sas = item.Sas })) { _poDraft.Lines.Add(line); @@ -140,18 +142,18 @@ public partial class CrmActivityCreate : IDisposable private void CheckActivity() { InvalidActivityType = string.IsNullOrWhiteSpace(_poDraft.ActivityTypeEnum); - Console.WriteLine($"Type => {InvalidActivityType}"); + Console.WriteLine($"ActivityType => {InvalidActivityType}"); } private void CheckStatus() { InvalidStatusType = string.IsNullOrWhiteSpace(_poDraft.ActivityStatusEnum); - Console.WriteLine($"statusType => {InvalidStatusType}"); + Console.WriteLine($"StatusType => {InvalidStatusType}"); } private void CheckDate() { InvalidDate = _poDraft.CheckDate; - Console.WriteLine($"invalidDate => {InvalidDate}"); + Console.WriteLine($"InvalidDate => {InvalidDate}"); } private async Task DeleteDraft() @@ -175,8 +177,15 @@ public partial class CrmActivityCreate : IDisposable { Item = ngSalesItem, Quantity = Convert.ToInt32(Quantity), - Price = Convert.ToDecimal(Price) + Price = Convert.ToDecimal(Price), + Discount = Convert.ToDecimal(Discount), + Sas = Sas }; + // reset internals to initial state + Sas = false; + Quantity = "1"; + Price = "0"; + Discount = "0"; // add it to the cart DraftStateProvider.Draft.Items.Add(item); // save the item using the CartStateProvider's save method diff --git a/Wonky.Client/Pages/Login.razor.cs b/Wonky.Client/Pages/Login.razor.cs index 4d74cb6f..66d42d45 100644 --- a/Wonky.Client/Pages/Login.razor.cs +++ b/Wonky.Client/Pages/Login.razor.cs @@ -44,7 +44,7 @@ public partial class Login } else { - var returnUrl = string.IsNullOrEmpty(ReturnUrl) ? "/Companies" : ReturnUrl; + var returnUrl = string.IsNullOrEmpty(ReturnUrl) ? "/companies" : ReturnUrl; NavigationManager.NavigateTo(returnUrl); } } diff --git a/Wonky.Client/Providers/AuthStateProvider.cs b/Wonky.Client/Providers/AuthStateProvider.cs index fe3b4507..610a3998 100644 --- a/Wonky.Client/Providers/AuthStateProvider.cs +++ b/Wonky.Client/Providers/AuthStateProvider.cs @@ -37,21 +37,21 @@ namespace Wonky.Client.Providers public override async Task GetAuthenticationStateAsync() { // fetch token from localStorage - var token = await _storage.GetItemAsync("_ax"); + var token = await _storage.GetItemAsync("_xa"); if (string.IsNullOrEmpty(token)) // return anonymous if empty return _anonymous; // create an authorized user - var userInfo = await _storage.GetItemAsync("_ux"); + var userInfo = await _storage.GetItemAsync("_xu"); if (userInfo == null) return _anonymous; // set client authorization header _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", token); - var exp = await _storage.GetItemAsync("_ex"); + var exp = await _storage.GetItemAsync("_xe"); var roles = ExtractRoles(userInfo); var claims = new List @@ -79,8 +79,8 @@ namespace Wonky.Client.Providers _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", token); // create an authorized user - var userInfo = await _storage.GetItemAsync("_ux"); - var exp = await _storage.GetItemAsync("_ex"); + var userInfo = await _storage.GetItemAsync("_xu"); + var exp = await _storage.GetItemAsync("_xe"); var roles = ExtractRoles(userInfo); var claims = new List { diff --git a/Wonky.Client/Services/AuthenticationService.cs b/Wonky.Client/Services/AuthenticationService.cs index b6aa0690..d5f848c0 100644 --- a/Wonky.Client/Services/AuthenticationService.cs +++ b/Wonky.Client/Services/AuthenticationService.cs @@ -79,9 +79,9 @@ namespace Wonky.Client.Services // process response content var data = JsonSerializer.Deserialize(resContent, _options); - await _localStorage.SetItemAsync("_ax", data.AccessToken); - await _localStorage.SetItemAsync("_rx", data.RefreshToken); - await _localStorage.SetItemAsync("_ex", + await _localStorage.SetItemAsync("_xa", data.AccessToken); + await _localStorage.SetItemAsync("_xr", data.RefreshToken); + await _localStorage.SetItemAsync("_xe", (int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds + data.ExpiresIn - 60); // set default request headers using access_token @@ -89,7 +89,7 @@ namespace Wonky.Client.Services var userInfo = await UserInfo(); - await _localStorage.SetItemAsync("_ux", userInfo); + await _localStorage.SetItemAsync("_xu", userInfo); // notify system on state change ((AuthStateProvider)_authStateProvider).NotifyUserAuthenticationAsync(data.AccessToken); @@ -100,7 +100,7 @@ namespace Wonky.Client.Services public async Task RefreshToken() { - var refreshToken = await _localStorage.GetItemAsync("_rx"); + var refreshToken = await _localStorage.GetItemAsync("_xr"); var credentials = new Dictionary { ["grant_type"] = "refresh_token", @@ -109,31 +109,28 @@ namespace Wonky.Client.Services var response = await _client.PostAsync(_apiConfig.Value.TokenPath, new FormUrlEncodedContent(credentials)); - if (response.IsSuccessStatusCode) - { - var resContent = await response.Content.ReadAsStringAsync(); - var data = JsonSerializer.Deserialize(resContent, _options); + if (!response.IsSuccessStatusCode) return string.Empty; + var resContent = await response.Content.ReadAsStringAsync(); + var data = JsonSerializer.Deserialize(resContent, _options); - // set default request headers using access_token - _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", data.AccessToken); + // set default request headers using access_token + _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", data.AccessToken); + + await _localStorage.SetItemAsync("_xa", data.AccessToken); + await _localStorage.SetItemAsync("_xr", data.RefreshToken); + await _localStorage.SetItemAsync("_xe", + (int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds + data.ExpiresIn - 60); + return data.AccessToken; - await _localStorage.SetItemAsync("_ax", data.AccessToken); - await _localStorage.SetItemAsync("_rx", data.RefreshToken); - await _localStorage.SetItemAsync("_ex", - (int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds + data.ExpiresIn - 60); - return data.AccessToken; - } - - return string.Empty; } public async Task Logout() { // clear localStorage - await _localStorage.RemoveItemAsync("_ax"); - await _localStorage.RemoveItemAsync("_rx"); - await _localStorage.RemoveItemAsync("_ux"); - await _localStorage.RemoveItemAsync("_ex"); + await _localStorage.RemoveItemAsync("_xa"); + await _localStorage.RemoveItemAsync("_xr"); + await _localStorage.RemoveItemAsync("_xu"); + await _localStorage.RemoveItemAsync("_xe"); // notify system on user logout ((AuthStateProvider)_authStateProvider).NotifyUserLogout(); // remove request headers @@ -146,7 +143,7 @@ namespace Wonky.Client.Services var infoContent = await infoResponse.Content.ReadAsStringAsync(); var userInfo = JsonSerializer.Deserialize(infoContent, _options); if(write) - await _localStorage.SetItemAsync("_ux", userInfo); + await _localStorage.SetItemAsync("_xu", userInfo); return userInfo ?? new UserInfoView(); } diff --git a/Wonky.Entity/DTO/DtoNgActivity.cs b/Wonky.Entity/DTO/DtoNgActivity.cs index 4fff971e..a3bb4635 100644 --- a/Wonky.Entity/DTO/DtoNgActivity.cs +++ b/Wonky.Entity/DTO/DtoNgActivity.cs @@ -36,7 +36,7 @@ namespace Wonky.Entity.DTO [Required(ErrorMessage = "Vælg aktivitetstype")] public string ActivityTypeEnum { get; set; } = ""; [Required(ErrorMessage = "Vælg status for besøg ")] public string ActivityStatusEnum { get; set; } = ""; public bool CheckDate { get; set; } - public DateTime ActivityDate { get; set; } + [Required] public DateTime ActivityDate { get; set; } [MaxLength(50, ErrorMessage = "Du kan højst bruge 50 tegn")] public string Demo { get; set; } = ""; [MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")] public string OurRef { get; set; } = ""; [MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")] public string ReferenceNumber { get; set; } = "";