FEAT: show hide customers in list
This commit is contained in:
parent
e740f32fd7
commit
1a0255a14a
7 changed files with 266 additions and 231 deletions
|
@ -1,4 +1,3 @@
|
|||
|
||||
// Copyright (C) 2022 FCS Frede's Computer Services.
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
|
@ -78,15 +77,18 @@ public class AdvisorCustomerRepository : IAdvisorCustomerRepository
|
|||
MetaData = new MetaData()
|
||||
};
|
||||
}
|
||||
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
|
||||
var pagingResponse = new PagingResponse<CompanyDto>
|
||||
{
|
||||
Items = JsonSerializer.Deserialize<List<CompanyDto>>(content, _options),
|
||||
MetaData = JsonSerializer.Deserialize<MetaData>(response.Headers.GetValues("X-Pagination").First(), _options)
|
||||
MetaData = JsonSerializer.Deserialize<MetaData>(response.Headers.GetValues("X-Pagination").First(),
|
||||
_options)
|
||||
};
|
||||
return pagingResponse;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get CRM customer by Id (SalesRep)
|
||||
/// </summary>
|
||||
|
@ -182,9 +184,16 @@ public class AdvisorCustomerRepository : IAdvisorCustomerRepository
|
|||
{ "VatNumber", vatNumber }
|
||||
};
|
||||
var response = await _client.PutAsJsonAsync($"{_conf.CrmCustomers}/{companyId}/vat", model, _options);
|
||||
if (!response.IsSuccessStatusCode)
|
||||
return new CompanyDto();
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
return response.IsSuccessStatusCode
|
||||
? JsonSerializer.Deserialize<CompanyDto>(content)
|
||||
: new CompanyDto{Name = "ERROR", VatNumber = vatNumber, CrmNotes = $"FEJL: {content}"};
|
||||
return JsonSerializer.Deserialize<CompanyDto>(content)
|
||||
?? new CompanyDto { Name = "ERROR", VatNumber = vatNumber, CrmNotes = $"FEJL: {content}" };
|
||||
}
|
||||
|
||||
// public async Task<bool> ToggleVisibility(string companyId, bool hide)
|
||||
// {
|
||||
// var response = await _client.PostAsync($"{_conf.CrmCustomers}/{companyId}/toggle?hide={hide}", null);
|
||||
// return response.IsSuccessStatusCode;
|
||||
// }
|
||||
}
|
|
@ -76,4 +76,6 @@ public interface IAdvisorCustomerRepository
|
|||
/// <param name="vatNumber"></param>
|
||||
/// <returns>A CRM Company entity</returns>
|
||||
Task<CompanyDto> UpdateCompanyVat(string companyId, string vatNumber);
|
||||
|
||||
// Task<bool> ToggleVisibility(string companyId, bool hide);
|
||||
}
|
|
@ -34,13 +34,17 @@
|
|||
<div class="col-sm-2">
|
||||
<PageSizeComponent OnChanged="SetPageSize" />
|
||||
</div>
|
||||
<div class="col-sm-2">
|
||||
<button type button class="btn btn-warning @(@IncludeFolded ? "active" : "")"
|
||||
data-bs-toggle="button" aria-pressed="@IncludeFolded" @onclick="OnFoldedClick">
|
||||
<div class="col-sm-3">
|
||||
<button type button class="btn btn-warning @(ShowFolded ? "active" : "")"
|
||||
data-bs-toggle="button" aria-pressed="@ShowFolded" @onclick="OnFoldedClick">
|
||||
@ButtonFoldedText
|
||||
</button>
|
||||
<button type button class="btn btn-warning @(@ShowHidden ? "active" : "")"
|
||||
data-bs-toggle="button" aria-pressed="@ShowHidden" @onclick="OnHiddenClick">
|
||||
@ButtonHiddenText
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-sm-8">
|
||||
<div class="col-sm-7">
|
||||
<PaginationComponent MetaData="PageData" Spread="2" SelectedPage="SelectedPage"/>
|
||||
</div>
|
||||
<div class="col-sm-2 text-end">
|
||||
|
|
|
@ -39,12 +39,13 @@ namespace Wonky.Client.Pages
|
|||
private UserProfile Profiles { get; set; } = new();
|
||||
private UserManagerEditView XUserInfo { get; set; } = new();
|
||||
private string SavedSearch { get; set; } = "";
|
||||
private bool IncludeFolded { get; set; }
|
||||
private bool Working { get; set; } = true;
|
||||
private MetaData PageData { get; set; } = new();
|
||||
private CustomerPaging Paging { get; set; } = new();
|
||||
private string ButtonFoldedText { get; set; } = "Vis Ophørte";
|
||||
|
||||
private bool ShowFolded { get; set; }
|
||||
private string ButtonHiddenText { get; set; } = "Vis Skjulte";
|
||||
private bool ShowHidden { get; set; }
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
|
@ -60,7 +61,7 @@ namespace Wonky.Client.Pages
|
|||
Paging.OrderBy = Profiles.CompanySort;
|
||||
Paging.SearchColumn = Profiles.CompanySearch;
|
||||
Paging.PageSize = Convert.ToInt32(Profiles.PageSize);
|
||||
Paging.HasFolded = IncludeFolded ? 1 : 0;
|
||||
Paging.HasFolded = ShowFolded ? 1 : 0;
|
||||
|
||||
// load saved search
|
||||
SavedSearch = string.IsNullOrWhiteSpace(Profiles.CompanyFilterPhrase) ? "" : Profiles.CompanyFilterPhrase;
|
||||
|
@ -74,11 +75,22 @@ namespace Wonky.Client.Pages
|
|||
private async Task OnFoldedClick()
|
||||
{
|
||||
Working = true;
|
||||
IncludeFolded = !IncludeFolded;
|
||||
ButtonFoldedText = IncludeFolded ? "Vis Aktive" : "Vis Ophørte";
|
||||
ShowFolded = !ShowFolded;
|
||||
ButtonFoldedText = ShowFolded ? "Vis Aktive" : "Vis Ophørte";
|
||||
CompanyList = new List<CompanyDto>();
|
||||
Paging.PageNumber = 1;
|
||||
Paging.HasFolded = IncludeFolded ? 1 : 0;
|
||||
Paging.HasFolded = ShowFolded ? 1 : 0;
|
||||
await FetchCustomers();
|
||||
}
|
||||
|
||||
private async Task OnHiddenClick()
|
||||
{
|
||||
Working = true;
|
||||
ShowHidden = !ShowHidden;
|
||||
ButtonHiddenText = ShowHidden ? "Vis Normale" : "Vis skjulte";
|
||||
CompanyList = new List<CompanyDto>();
|
||||
Paging.PageNumber = 1;
|
||||
Paging.IsHidden = ShowHidden ? 1 : 0;
|
||||
await FetchCustomers();
|
||||
}
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
</div>
|
||||
}
|
||||
<div class="row pt-2 mb-2 rounded rounded-2 bg-dark text-white">
|
||||
<h3>@Company.Name</h3>
|
||||
<h3>@Company.Name @(string.IsNullOrWhiteSpace(Company.Account) ? "" : "- ")@Company.Account</h3>
|
||||
</div>
|
||||
// erp context
|
||||
<EditForm EditContext="ErpContext">
|
||||
|
@ -75,36 +75,37 @@
|
|||
</div>
|
||||
@* Phone *@
|
||||
<label for="phone" class="col-sm-1 col-form-label-sm">Telefon</label>
|
||||
<div class="col-sm-5">
|
||||
<div class="col-sm-3">
|
||||
<InputText id="phone" class="form-control" @bind-Value="Company.Phone"/>
|
||||
<ValidationMessage For="@(() => Company.Phone)"></ValidationMessage>
|
||||
</div>
|
||||
@* Mobile *@
|
||||
<label for="mobile" class="col-sm-1 col-form-label-sm">Mobil</label>
|
||||
<div class="col-sm-5">
|
||||
<div class="col-sm-3">
|
||||
<InputText id="mobile" class="form-control" @bind-Value="Company.Mobile"/>
|
||||
<ValidationMessage For="@(() => Company.Mobile)"></ValidationMessage>
|
||||
</div>
|
||||
<div class="col-sm-4 d-grid mx-auto">
|
||||
<button type="button" class="btn btn-danger" @onclick="ToggleVisibility">@ToggleButtonText</button>
|
||||
</div>
|
||||
@* Email *@
|
||||
<label for="email" class="col-sm-1 col-form-label-sm">Epost</label>
|
||||
<div class="col-sm-7">
|
||||
<div class="col-sm-5">
|
||||
<InputText id="email" class="form-control" @bind-Value="Company.Email"/>
|
||||
<ValidationMessage For="@(() => Company.Email)"></ValidationMessage>
|
||||
</div>
|
||||
<div class="col-sm-2 d-grid mx-auto">
|
||||
<div class="col-sm-3 d-grid mx-auto">
|
||||
<button type="button" class="btn btn-primary d-block" disabled="@(Company.HasFolded == 0 || Company.Name == "ERROR")" onclick="@ForceActivity">Aktiver besøg</button>
|
||||
</div>
|
||||
<div class="col-sm-2 d-grid mx-auto">
|
||||
<button type="button" class="btn btn-primary d-block" onclick="@UpdateErpData" disabled="@(Working || Company.Name == "ERROR")"><i class="bi-cloud-arrow-up"></i> STAM data </button>
|
||||
<div class="col-sm-3 d-grid mx-auto">
|
||||
<button type="button" class="btn btn-danger d-block" onclick="@UpdateErpData" disabled="@(Working || Company.Name == "ERROR")"><i class="bi-cloud-arrow-up"></i> STAM data </button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* account *@
|
||||
<label for="account" class="col-sm-1 col-form-label-sm">Konto</label>
|
||||
<div class="col-sm-2">
|
||||
<input id="account" type="text" class="form-control" readonly value="@Company.Account"/>
|
||||
</div>
|
||||
<hr class="mb-3"/>
|
||||
<div class="row">
|
||||
@* vat number*@
|
||||
<label for="vatNumber" class="col-sm-1 col-form-label-sm">Cvr/Org nr.</label>
|
||||
<label for="vatNumber" class="col-sm-2 col-form-label-sm">CVR/Org nr.</label>
|
||||
<div class="col-sm-4">
|
||||
<div class="input-group">
|
||||
<span class="input-group-text">
|
||||
|
@ -115,23 +116,23 @@
|
|||
</div>
|
||||
</div>
|
||||
@* vat lookup *@
|
||||
<div class="col-sm-2 d-grid mx-auto">
|
||||
<div class="col-sm-3 d-grid mx-auto">
|
||||
@switch (CountryCode)
|
||||
{
|
||||
case "dk":
|
||||
<button type="button" class="btn btn-info" @onclick="OpenVatLookupModal"><i class="bi-search"></i> Firma opslag</button>
|
||||
<button type="button" class="btn btn-info" @onclick="OpenVatLookupModal"><i class="bi-search"></i> CVR</button>
|
||||
break;
|
||||
case "no":
|
||||
<a class="btn btn-info" href="https://brreg.no/" target="_blank"><i class="bi-search"></i> Firma opslag</a>
|
||||
<a class="btn btn-info" href="https://brreg.no/" target="_blank"><i class="bi-search"></i> brreg.no</a>
|
||||
break;
|
||||
case "se":
|
||||
<a class="btn btn-info" href="https://www.allabolag.se/what/@Company.Name" target="_blank"><i class="bi-search"></i> Firma opslag</a>
|
||||
<a class="btn btn-info" href="https://www.allabolag.se/what/@Company.Name" target="_blank"><i class="bi-search"></i> allabolag.se</a>
|
||||
break;
|
||||
}
|
||||
</div>
|
||||
@* save vat number *@
|
||||
<div class="col-sm-2 d-grid mx-auto">
|
||||
<button type="button" class="btn btn-primary d-block" @onclick="UpdateVatNumber"><i class="bi-cloud-arrow-up"></i> Moms/Org Nr.</button>
|
||||
<div class="col-sm-3 d-grid mx-auto">
|
||||
<button type="button" class="btn btn-warning d-block" @onclick="UpdateVatNumber"><i class="bi-cloud-arrow-up"></i> Moms/Org Nr.</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -160,7 +161,7 @@
|
|||
@* crm context - OBS note *@
|
||||
<div class="row mb-2">
|
||||
<label for="note" class="col-sm-1 col-form-label-sm">OBS</label>
|
||||
<div class="col-sm-9">
|
||||
<div class="col-sm-8">
|
||||
@if (string.IsNullOrWhiteSpace(Company.Note))
|
||||
{
|
||||
<InputText name="note" id="note" class="form-control" @bind-Value="Company.Note"/>
|
||||
|
@ -172,8 +173,8 @@
|
|||
<ValidationMessage For="@(() => Company.Note)"></ValidationMessage>
|
||||
</div>
|
||||
@* Save CRM data button *@
|
||||
<div class="col-sm-2 d-grid mx-auto">
|
||||
<button type="button" class="btn btn-primary" disabled="@(Company.Name == "ERROR")" @onclick="UpdateCrmData"><i class="bi-cloud-arrow-up"></i> CRM data</button>
|
||||
<div class="col-sm-3 d-grid mx-auto">
|
||||
<button type="button" class="btn btn-warning" disabled="@(Company.Name == "ERROR")" @onclick="UpdateCrmData"><i class="bi-cloud-arrow-up"></i> CRM data</button>
|
||||
</div>
|
||||
</div>
|
||||
@* crm context - contacts *@
|
||||
|
|
|
@ -39,7 +39,7 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
|
|||
[Inject] public IToastService Toaster { get; set; }
|
||||
[Inject] public ILogger<AdvisorCustomerViewEditPage> Logger { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
[Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
|
||||
[Inject] public IAdvisorCustomerRepository CustomerRepo { get; set; }
|
||||
[Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
|
||||
[Inject] public IAdvisorContactRepository AdvisorContactRepo { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
|
@ -68,7 +68,8 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
|
|||
private ContactDto SelectedContact { get; set; } = new();
|
||||
private ContactDto DefaultContact { get; set; } = new();
|
||||
private ContactModal ContactPopup { get; set; } = new();
|
||||
private UserManagerEditView XUserInfo { get; set; } = new();
|
||||
private UserManagerEditView UserInfo { get; set; } = new();
|
||||
private string ToggleButtonText { get; set; } = "";
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
|
@ -86,19 +87,18 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
|
|||
ErpContext.OnValidationStateChanged += ValidationChanged;
|
||||
|
||||
// fetch user info from local storage
|
||||
XUserInfo = await UserInfoService.GetUserInfo();
|
||||
CountryCode = XUserInfo.CountryCode.ToLower();
|
||||
UserInfo = await UserInfoService.GetUserInfo();
|
||||
CountryCode = UserInfo.CountryCode.ToLower();
|
||||
CountryIsDk = CountryCode == "dk";
|
||||
|
||||
Logger.LogDebug("companyId => {}", CompanyId);
|
||||
|
||||
Company = await CompanyRepo.GetCompanyById(CompanyId);
|
||||
Company = await CustomerRepo.GetCompanyById(CompanyId);
|
||||
|
||||
Logger.LogDebug("company => {}", JsonSerializer.Serialize(Company));
|
||||
|
||||
ToggleButtonText = Company.IsHidden == 0 ? "Skjul kunde" : "Vis kunde";
|
||||
CurrentVat = Company.VatNumber;
|
||||
|
||||
Company.CountryCode = XUserInfo.CountryCode.ToLower();
|
||||
Company.CountryCode = UserInfo.CountryCode.ToLower();
|
||||
// internal flag
|
||||
EnableActivity = Company.ValidVat;
|
||||
// override if canvas which has account property as empty string or "NY"
|
||||
|
@ -110,7 +110,7 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
|
|||
// visit date init
|
||||
LastVisit = DateTime.Parse(Company.LastVisit);
|
||||
NextVisit = DateTime.Parse(Company.NextVisit);
|
||||
// if not previous visit is registered - force last visit date to 2020
|
||||
// if no previous visit is registered - force last visit date to 2020
|
||||
if (LastVisit.Year < 2020)
|
||||
LastVisit = DateTime.Parse("2020-01-01");
|
||||
// set next visit according to last visit and interval
|
||||
|
@ -149,6 +149,13 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
|
|||
await RequestErpUpdate();
|
||||
}
|
||||
|
||||
private async Task ToggleVisibility()
|
||||
{
|
||||
Company.IsHidden = Company.IsHidden == 0 ? 1 : 0;
|
||||
ToggleButtonText = Company.IsHidden == 0 ? "Skjul kunde" : "Vis kunde";
|
||||
Logger.LogDebug("ToggleVisibility => Company.IsHidden == {}", Company.IsHidden);
|
||||
await CustomerRepo.UpdateCrmData(CompanyId, Company);
|
||||
}
|
||||
private async Task RequestErpUpdate()
|
||||
{
|
||||
if(Working)
|
||||
|
@ -277,7 +284,7 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
|
|||
Company.LastVisit = $"{LastVisit:yyyy-MM-dd}";
|
||||
Company.NextVisit = $"{NextVisit:yyyy-MM-dd}";
|
||||
Company.IsHidden = 0;
|
||||
var result = await CompanyRepo.UpdateCrmData(CompanyId, Company);
|
||||
var result = await CustomerRepo.UpdateCrmData(CompanyId, Company);
|
||||
if (!string.IsNullOrWhiteSpace(result.CompanyId))
|
||||
{
|
||||
Company = result;
|
||||
|
@ -297,7 +304,7 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
|
|||
return;
|
||||
Working = true;
|
||||
Toaster.ShowInfo("Vent venligst ...", "OPDATERER STAM DATA");
|
||||
var result = await CompanyRepo.UpdateErpData(CompanyId, Company);
|
||||
var result = await CustomerRepo.UpdateErpData(CompanyId, Company);
|
||||
if (!string.IsNullOrWhiteSpace(result.CompanyId))
|
||||
{
|
||||
Company = result;
|
||||
|
@ -323,7 +330,7 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
|
|||
return;
|
||||
Working = true;
|
||||
Toaster.ShowInfo("Vent venligst ...", "OPDATERER MOMS NUMMER");
|
||||
var result = await CompanyRepo.UpdateCompanyVat(CompanyId, Company.VatNumber);
|
||||
var result = await CustomerRepo.UpdateCompanyVat(CompanyId, Company.VatNumber);
|
||||
if (!string.IsNullOrWhiteSpace(result.CompanyId))
|
||||
{
|
||||
Company = result;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"appInfo": {
|
||||
"name": "Wonky Online",
|
||||
"version": "0.117.0",
|
||||
"version": "0.117.1",
|
||||
"rc": true,
|
||||
"sandBox": false,
|
||||
"image": "grumpy-coder.png"
|
||||
|
|
Loading…
Reference in a new issue