FIX contact parameter not working

This commit is contained in:
Frede Hundewadt 2023-05-22 18:09:37 +02:00
parent 0d22adecb1
commit e1a358f8b7
7 changed files with 113 additions and 128 deletions

View file

@ -14,34 +14,11 @@
*@
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components
@using Wonky.Client.Components
@using Wonky.Entity.Configuration
@attribute [Authorize(Roles = "Advisor")]
@page "/advisor/customers/{CompanyId}"
<PageTitle>Stamkort for @Company.Name</PageTitle>
@*
<div class="led-container">
<div class="led-box">
<div class="led-green"></div>
<p>Green LED</p>
</div>
<div class="led-box">
<div class="led-yellow"></div>
<p>Yellow LED</p>
</div>
<div class="led-box">
<div class="led-red"></div>
<p>Red LED</p>
</div>
<div class="led-box">
<div class="led-blue"></div>
<p>Blue LED</p>
</div>
</div>
*@
@if (!string.IsNullOrWhiteSpace(Company.Account))
{
@if (!string.IsNullOrWhiteSpace(Company.Blocked))
@ -253,7 +230,7 @@
<label for="contacts" class="col-sm-1 col-form-label-sm">Kontakt</label>
<div id="contacts" class="col-sm-11">
<div class="list-group">
<div class="list-group-item list-group-item-action bg-dark text-white" onclick="@(() => OpenContactPopup(DefaultContact))">
<div class="list-group-item list-group-item-action bg-dark text-white" @onclick="@(() => OpenContactPopup(DefaultContact))">
<div class="row">
<div class="col-sm-4">Stilling</div>
<div class="col-sm-4">Navn</div>
@ -267,7 +244,7 @@
{
@foreach (var contact in Contacts)
{
<div class="list-group-item list-group-item-action" onclick="@(() => OpenContactPopup(contact))">
<div class="list-group-item list-group-item-action" @onclick="@(() => OpenContactPopup(contact))">
<div class="row g-2">
<div class="col-sm-4">@contact.JobTitle</div>
<div class="col-sm-4">@contact.FirstName @contact.LastName</div>
@ -318,7 +295,7 @@
<button type="button" class="btn btn-outline-dark" onclick="@ToggleVisibility">@ToggleButtonText</button>
</div>
<div class="col-sm-4 d-grid">
@if (AppInfo.Value.Rc)
@if (AppInfo!.Value!.Rc)
{
<a class="btn btn-info" href="@($"/advisor/customers/{CompanyId}/workplaces")">Kemi Dokumentation</a>
}
@ -333,5 +310,6 @@
<VatLookupDkModal VatAddress="CompanyVatAddress" EntityName="@Company.Name" VatNumber="@Company.VatNumber"
@ref="VatLookupPopup" OnSelectedCompany="SelectedCompanyCallback"/>
<ContactModal ParamContact="@SelectedContact" CompanyName="@Company.Name"
@ref="ContactPopup" OnSaveClicked="WriteContactCallback" OnDeleteClicked="DeleteContactCallback"/>
<ContactViewEditModal SelectedContact="SelectedContact" CompanyName="@Company.Name"
@ref="ContactViewPopup" OnSaveClicked="WriteContactCallback" OnDeleteClicked="DeleteContactCallback"/>

View file

@ -72,13 +72,13 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
private bool ErpEditDisabled { get; set; } = true;
private bool VatEditDisabled { get; set; } = true;
private List<ContactDto> Contacts { get; set; } = new();
private VatLookupDkModal VatLookupPopup { get; set; } = new();
private ContactDto SelectedContact { get; set; } = new();
private ContactDto DefaultContact { get; set; } = new();
private ContactModal ContactPopup { get; set; } = new();
private UserManagerEditView UserInfo { get; set; } = new();
private string ToggleButtonText { get; set; } = "";
private bool Kanvas { get; set; }
private ContactDto SelectedContact { get; set; } = new();
private ContactDto DefaultContact { get; set; } = new();
private ContactViewEditModal ContactViewPopup { get; set; } = new();
private VatLookupDkModal VatLookupPopup { get; set; } = new();
protected override async Task OnInitializedAsync()
{
@ -88,6 +88,7 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
// initialize default contact
DefaultContact = new ContactDto { CompanyId = CompanyId, ContactId = "", FirstName = "" };
// setup form context
ErpContext = new EditContext(Company);
@ -171,16 +172,19 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
Working = false;
}
private void ToggleErpEdit()
{
ErpEditDisabled = !ErpEditDisabled;
}
private void ToggleVatEdit()
{
VatEditDisabled = !VatEditDisabled;
}
private async Task ToggleVisibility()
{
Company.IsHidden = Company.IsHidden == 0 ? 1 : 0;
@ -190,6 +194,7 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
await CustomerRepo.UpdateCrmData(CompanyId, Company);
}
private async Task RequestErpUpdate()
{
if (Working)
@ -199,10 +204,7 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
Working = false;
}
/// <summary>
/// Fetch contacts from backend
/// </summary>
/// <param name="companyId"></param>
private async Task FetchContacts(string companyId)
{
// load contacts
@ -211,18 +213,13 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
Contacts = Contacts.OrderBy(x => x.FirstName).ToList();
}
/// <summary>
/// Show Vat Lookup modal
/// </summary>
private void OpenVatLookupModal()
{
VatLookupPopup.Show();
}
/// <summary>
/// Callback to update company properties
/// </summary>
/// <param name="regInfo"></param>
private void SelectedCompanyCallback(VirkRegInfo regInfo)
{
Logger.LogDebug("CrmCompanyView => SelectCompanyCallback => {}", JsonSerializer.Serialize(regInfo));
@ -244,24 +241,22 @@ public partial class AdvisorCustomerViewEditPage : IDisposable
Company.VatNumber = regInfo.VatNumber;
}
/// <summary>
/// Open contact edit popup
/// </summary>
/// <param name="contact"></param>
private void OpenContactPopup(ContactDto contact)
{
// write contact to debug log
Logger.LogDebug("CompanyView => SaveContactCallback <= {}", JsonSerializer.Serialize(contact));
Logger.LogDebug("CompanyView => OpenContactPopup => contact => {}", JsonSerializer.Serialize(contact));
// object to pass on to the popup
SelectedContact = contact;
Logger.LogDebug("CompanyView => OpenContactPopup => SelectedContact => {}", JsonSerializer.Serialize(SelectedContact));
// show the popup
ContactPopup.Show();
ContactViewPopup.Show();
}
/// <summary>
/// Callback for writing contact to backend
/// </summary>
/// <param name="contact"></param>
private async Task WriteContactCallback(ContactDto contact)
{
Working = true;

View file

@ -122,7 +122,7 @@
<i class="bi-clipboard-plus"></i>
</label>
<input class="form-control text-muted" id="qrlink" type="text" readonly value="@Workplace.ShortUrl"/>
<button type="button" class="@_buttonStyle" @onclick="@OnCopyLink">@_buttonText</button>
<button type="button" class="@_copyButtonStyle" @onclick="@OnCopyLink">@_copyButtonText</button>
</div>
</div>
<div class="col-sm-12 col-md-6">
@ -153,7 +153,7 @@
<a class="btn btn-dark btn-sm" href="@docView.ApvDocLink" target="_blank"><i class="bi-filetype-html"></i> Kemisk Risiko Vurdering</a>
</div>
<div class="col-sm-1">
<button type="button" class="btn btn-danger btn-sm" @onclick="@(() => OnRemoveVariant(docView.ProductId, docView.VariantId))">
<button type="button" class="btn btn-danger btn-sm" @onclick="@(() => OnConfirmDeleteVariant(docView))">
<i class="bi-trash"></i>
</button>
</div>
@ -177,4 +177,5 @@
<WorkingThreeDots/>
}
<ConfirmDeleteModal BodyMessage="@DeleteMessage" OnOkClicked="RemoveWorkplace" @ref="ConfirmDeleteWorkplace"/>
<ConfirmDeleteModal BodyMessage="@DeleteMessage" OnOkClicked="RemoveWorkplace" @ref="ConfirmDeleteWorkplace"/>
<ConfirmDeleteModal BodyMessage="@DeleteMessage" OnOkClicked="RemoveVariant" @ref="ConfirmDeleteVariant"/>

View file

@ -55,15 +55,16 @@ public partial class CrmCustomerWorkplaceViewEditPage : IDisposable
private WorkplaceInventory WorkplaceInventory { get; set; } = new();
private List<DocView> DocViews { get; set; } = new();
private ConfirmDeleteModal ConfirmDeleteWorkplace { get; set; }
private ConfirmDeleteModal ConfirmDeleteProduct { get; set; }
private ConfirmDeleteModal ConfirmDeleteVariant { get; set; }
private string DeleteMessage { get; set; } = "";
private string LinkRecipients { get; set; } = "";
private const string CopyText = "Kopier";
private const string CopyStyle = "btn btn-primary";
private const string SuccessText = "Kopieret";
private const string SuccessStyle = "btn btn-success";
private string _buttonText = CopyText;
private string _buttonStyle = CopyStyle;
private const string CopySuccessText = "Kopieret";
private const string CopySuccessStyle = "btn btn-success";
private string _copyButtonText = CopyText;
private string _copyButtonStyle = CopyStyle;
private DocView SelectedProduct { get; set; } = new();
protected override async Task OnInitializedAsync()
@ -136,23 +137,26 @@ public partial class CrmCustomerWorkplaceViewEditPage : IDisposable
{
await Clipboard.CopyToClipboard(Workplace.ShortUrl);
_buttonText = SuccessText;
_buttonStyle = SuccessStyle;
_copyButtonText = CopySuccessText;
_copyButtonStyle = CopySuccessStyle;
StateHasChanged();
await Task.Delay(TimeSpan.FromSeconds(2));
_buttonText = CopyText;
_buttonStyle = CopyStyle;
_copyButtonText = CopyText;
_copyButtonStyle = CopyStyle;
}
private async Task OnSubmitUpdate()
{
Working = true;
await Workplaces.UpdateWorkplace(CompanyId, Workplace);
Working = false;
Toaster.ShowSuccess("Arbejdssted er opdateret");
}
@ -160,43 +164,68 @@ public partial class CrmCustomerWorkplaceViewEditPage : IDisposable
private void OnConfirmDeleteWorkplace()
{
DeleteMessage = $"Bekræft at du sletter<br/><strong>{Workplace.Name}</strong> fra <strong>{Workplace.CompanyName}</strong>?<br/>AL INFORMATION slettes og handlingen er uigenkaldelig.";
Logger.LogDebug("ConfirmDeleteWorkplace");
ConfirmDeleteWorkplace.Show();
}
private async Task RemoveWorkplace()
{
Logger.LogDebug("DeleteWorkplace");
Working = true;
await Workplaces.DeleteWorkplace(CompanyId, WorkplaceId);
Toaster.ShowInfo("Arbejdssted er slettet.");
Navigator.NavigateTo($"/advisor/customers/{CompanyId}/workplaces");
}
private async Task OnRemoveVariant(string productId, string variantId)
private void OnConfirmDeleteVariant(DocView selectedProduct)
{
// delete the apb and apv
var product = WorkplaceInventory
.Products.First(x => x.ProductId == productId);
var variant = product.Variants.First(x => x.VariantId == variantId);
Logger.LogDebug("variant => {}", JsonSerializer.Serialize(variant, new JsonSerializerOptions(JsonSerializerDefaults.Web)));
SelectedProduct = selectedProduct;
foreach (var doc in variant.Docs)
DeleteMessage = $"Bekræft at du sletter<br/><strong>{selectedProduct.VariantName}</strong> fra <strong>{Workplace.CompanyName}</strong>?<br/>AL INFORMATION slettes og handlingen er uigenkaldelig.";
Logger.LogDebug("ConfirmDeleteProduct");
ConfirmDeleteVariant.Show();
}
private async Task RemoveVariant()
{
if (Working)
{
await WorkplaceRepo.DeleteWorkplaceDocuments(CompanyId, WorkplaceId, doc.DocumentId);
return;
}
Working = true;
var product = WorkplaceInventory
.Products
.First(x => x.ProductId == SelectedProduct.ProductId);
await WorkplaceRepo
.DeleteWorkplaceDocuments(CompanyId, WorkplaceId, SelectedProduct.ApbDocId, SelectedProduct.ApvDocId);
WorkplaceInventory.Products.Remove(product);
DocViews = GenerateDocumentListView();
Toaster.ShowInfo("Produkt dokumenter er slettet.");
Working = false;
}
private List<DocView> GenerateDocumentListView()
{
var docViews = new List<DocView>();
var docProducts = WorkplaceInventory.Products.OrderBy(x => x.TradingName).ToList();
foreach (var product in docProducts)

View file

@ -24,54 +24,50 @@
<button type="button" class="btn-close" onclick="@Hide" data-bs-dismiss="modal" aria-label="Luk"></button>
</div>
<div class="modal-body">
<EditForm Model="Contact" OnValidSubmit="SubmitContact">
<EditForm Model="SelectedContact" OnValidSubmit="SubmitContact">
<DataAnnotationsValidator/>
<InputText type="hidden" @bind-Value="@Contact.CompanyId"/>
<InputText type="hidden" @bind-Value="@Contact.ContactId"/>
<InputText type="hidden" @bind-Value="@SelectedContact.CompanyId"/>
<InputText type="hidden" @bind-Value="@SelectedContact.ContactId"/>
<div class="row g-3">
<div class="col-sm-6">
<label for="firstName">Fornavn</label>
<InputText id="firstName" class="form-control" @bind-Value="Contact.FirstName"/>
<ValidationMessage For="@(() => Contact.FirstName)"></ValidationMessage>
<InputText id="firstName" class="form-control" @bind-Value="SelectedContact.FirstName"/>
<ValidationMessage For="@(() => SelectedContact.FirstName)"></ValidationMessage>
</div>
<div class="col-sm-6">
<label for="lastName">Efternavn</label>
<InputText id="lastName" class="form-control" @bind-Value="Contact.LastName"/>
<ValidationMessage For="@(() => Contact.LastName)"></ValidationMessage>
<InputText id="lastName" class="form-control" @bind-Value="SelectedContact.LastName"/>
<ValidationMessage For="@(() => SelectedContact.LastName)"></ValidationMessage>
</div>
<div class="col-sm-6">
<label for="jobTitle">Job Titel</label>
<InputText id="jobTitle" class="form-control" @bind-Value="Contact.JobTitle"/>
<ValidationMessage For="@(() => Contact.JobTitle)"></ValidationMessage>
<InputText id="jobTitle" class="form-control" @bind-Value="SelectedContact.JobTitle"/>
<ValidationMessage For="@(() => SelectedContact.JobTitle)"></ValidationMessage>
</div>
<div class="col-sm-6">
<label for="phone">Direkte nr.</label>
<InputText id="phone" class="form-control" @bind-Value="Contact.PhoneDirect"/>
<ValidationMessage For="@(() => Contact.PhoneDirect)"></ValidationMessage>
<InputText id="phone" class="form-control" @bind-Value="SelectedContact.PhoneDirect"/>
<ValidationMessage For="@(() => SelectedContact.PhoneDirect)"></ValidationMessage>
</div>
<div class="col-sm-6">
<label for="email">Epost</label>
<InputText id="email" class="form-control" @bind-Value="Contact.Email" />
<ValidationMessage For="@(() => Contact.Email)"></ValidationMessage>
<InputText id="email" class="form-control" @bind-Value="SelectedContact.Email"/>
<ValidationMessage For="@(() => SelectedContact.Email)"></ValidationMessage>
</div>
<div class="col-sm-6">
<label for="mobile">Mobil</label>
<InputText id="mobile" class="form-control" @bind-Value="Contact.Mobile" />
<ValidationMessage For="@(() => Contact.Mobile)"></ValidationMessage>
<InputText id="mobile" class="form-control" @bind-Value="SelectedContact.Mobile"/>
<ValidationMessage For="@(() => SelectedContact.Mobile)"></ValidationMessage>
</div>
</div>
<div class="row mt-3">
<div class="col-sm-6">
@if (string.IsNullOrWhiteSpace(Contact.ContactId))
{
<button type="button" class="btn btn-danger" disabled>Slet</button>
}
else
{
<button type="button" class="btn btn-danger" @onclick="DeleteContact">Slet</button>
}
<button type="button" class="btn btn-danger"
onclick="@DeleteContact"
disabled="@(string.IsNullOrWhiteSpace(SelectedContact.ContactId))">Slet</button>
</div>
<div class="col-sm-6 text-end">
<button type="button" class="btn btn-secondary" onclick="@Hide">Afbryd</button>
<button type="submit" class="btn btn-primary">Gem</button>
</div>
</div>

View file

@ -27,51 +27,36 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Shared;
public partial class ContactModal
public partial class ContactViewEditModal
{
[Parameter] public ContactDto ParamContact { get; set; } = new();
// ##############################################################
[Inject] public ILogger<ContactViewEditModal> Logger { get; set; }
// ##############################################################
[Parameter] public ContactDto SelectedContact { get; set; }
[Parameter] public string CompanyName { get; set; } = "";
[Parameter] public ICrmContactRepository ContactRepo { get; set; }
[Parameter] public HttpInterceptorService Interceptor { get; set; }
[Parameter] public EventCallback<ContactDto> OnSaveClicked { get; set; }
[Parameter] public EventCallback<string> OnDeleteClicked { get; set; }
private ContactDto Contact { get; set; } = new();
// ##############################################################
private string _modalDisplay = "";
private bool _showBackdrop;
private bool DisableDelete { get; set; }
private bool FormInvalid { get; set; }
protected override void OnParametersSet()
{
Contact = new ContactDto
{
CompanyId = ParamContact.CompanyId,
ContactId = ParamContact.ContactId,
FirstName = ParamContact.FirstName,
LastName = ParamContact.LastName,
JobTitle = ParamContact.JobTitle,
PhoneDirect = ParamContact.PhoneDirect
};
}
protected override void OnInitialized()
{
if (string.IsNullOrWhiteSpace(Contact.ContactId))
DisableDelete = true;
}
private void DeleteContact()
{
OnDeleteClicked.InvokeAsync(Contact.ContactId);
OnDeleteClicked.InvokeAsync(SelectedContact.ContactId);
Hide();
}
private void SubmitContact()
{
OnSaveClicked.InvokeAsync(Contact);
OnSaveClicked.InvokeAsync(SelectedContact);
Hide();
}
public void Show()
{
_modalDisplay = "block;";
@ -79,11 +64,12 @@ public partial class ContactModal
StateHasChanged();
}
private void Hide()
{
_modalDisplay = "none;";
_showBackdrop = false;
Contact = new ContactDto();
SelectedContact = new ContactDto();
StateHasChanged();
}
}

View file

@ -1,7 +1,7 @@
{
"appInfo": {
"name": "Wonky Online",
"version": "146.2",
"version": "146.5",
"rc": true,
"sandBox": true,
"image": "grumpy-coder.png"