fix - customer phone number
This commit is contained in:
parent
dc434e22f0
commit
c3f39d1b94
16 changed files with 428 additions and 135 deletions
|
@ -21,7 +21,7 @@
|
||||||
@if (Inventory.Any())
|
@if (Inventory.Any())
|
||||||
{
|
{
|
||||||
<div class="list-group mt-2">
|
<div class="list-group mt-2">
|
||||||
<div class="list-group-item">
|
<div class="list-group-item d-print-none">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-4" style="cursor: pointer;" @onclick="() => SortProducts(ProductSort.Desc)"><i class="bi-sort-alpha-down"></i> Navn <i class="bi-sort-alpha-up-alt"></i></div>
|
<div class="col-sm-4" style="cursor: pointer;" @onclick="() => SortProducts(ProductSort.Desc)"><i class="bi-sort-alpha-down"></i> Navn <i class="bi-sort-alpha-up-alt"></i></div>
|
||||||
<div class="col-sm-3" style="cursor: pointer;" @onclick="() => SortProducts(ProductSort.Sku)"><i class="bi-sort-alpha-down"></i> Varenr <i class="bi-sort-alpha-up-alt"></i></div>
|
<div class="col-sm-3" style="cursor: pointer;" @onclick="() => SortProducts(ProductSort.Sku)"><i class="bi-sort-alpha-down"></i> Varenr <i class="bi-sort-alpha-up-alt"></i></div>
|
||||||
|
@ -50,10 +50,10 @@
|
||||||
<div class="col-sm-2 text-center">
|
<div class="col-sm-2 text-center">
|
||||||
@product.Quantity
|
@product.Quantity
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-2">
|
<div class="col-sm-2 d-print-none">
|
||||||
<a class="btn btn-info d-block" type="button" @onclick="() => CallShowReorderModal(product.Sku)"><i class="bi-cart"></i> Genbestil</a>
|
<a class="btn btn-info d-block" type="button" @onclick="() => CallShowReorderModal(product.Sku)"><i class="bi-cart"></i> Genbestil</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-1" @onclick="() => ProductCheck(product.Sku)">
|
<div class="col-sm-1 d-print-none" @onclick="() => ProductCheck(product.Sku)">
|
||||||
<input type="checkbox" class="btn-check" id="btn-@product.Sku.Replace(",", "")" autocomplete="off"/>
|
<input type="checkbox" class="btn-check" id="btn-@product.Sku.Replace(",", "")" autocomplete="off"/>
|
||||||
@if (product.Check)
|
@if (product.Check)
|
||||||
{
|
{
|
||||||
|
|
|
@ -37,7 +37,9 @@ public partial class CustomerInventoryListComponent
|
||||||
{
|
{
|
||||||
if(Inventory.Any())
|
if(Inventory.Any())
|
||||||
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void SortProducts(ProductSort column)
|
private void SortProducts(ProductSort column)
|
||||||
{
|
{
|
||||||
Descending = !Descending;
|
Descending = !Descending;
|
||||||
|
@ -78,12 +80,14 @@ public partial class CustomerInventoryListComponent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private async Task CallShowReorderModal(string sku)
|
private async Task CallShowReorderModal(string sku)
|
||||||
{
|
{
|
||||||
await ProductCheck(sku);
|
await ProductCheck(sku);
|
||||||
await OnReorderSelected.InvokeAsync(sku);
|
await OnReorderSelected.InvokeAsync(sku);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private async Task ProductCheck(string sku)
|
private async Task ProductCheck(string sku)
|
||||||
{
|
{
|
||||||
var x = Inventory.First(x => x.Sku == sku);
|
var x = Inventory.First(x => x.Sku == sku);
|
||||||
|
|
|
@ -62,20 +62,31 @@ public partial class OfficeCountryCustomerListComponent
|
||||||
private async Task ShowInvoiceList(string companyId)
|
private async Task ShowInvoiceList(string companyId)
|
||||||
{
|
{
|
||||||
// check for console manipulation
|
// check for console manipulation
|
||||||
if (!Utils.Validate(ValidateType.Id, companyId)) return;
|
if (!Utils.Validate(ValidateType.Id, companyId))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
SelectedCompany = CompanyList.First(x => x.CompanyId == companyId);
|
SelectedCompany = CompanyList.First(x => x.CompanyId == companyId);
|
||||||
|
|
||||||
// call erp to crm sync before requesting invoices
|
// call erp to crm sync before requesting invoices
|
||||||
var newSyncDate = await HistoryRepo.RequestErpToCrmSync(CountryCode, companyId, SelectedCompany.HistorySync);
|
var newSyncDate = await HistoryRepo.RequestErpToCrmSync(CountryCode, companyId, SelectedCompany.HistorySync);
|
||||||
await Task.Delay(500);
|
await Task.Delay(500);
|
||||||
|
|
||||||
InvoiceList = await HistoryRepo.GetInvoiceList(CountryCode, companyId);
|
InvoiceList = await HistoryRepo.GetInvoiceList(CountryCode, companyId);
|
||||||
if(!string.IsNullOrWhiteSpace(newSyncDate)) SelectedCompany.HistorySync = newSyncDate;
|
if (!string.IsNullOrWhiteSpace(newSyncDate))
|
||||||
|
{
|
||||||
|
SelectedCompany.HistorySync = newSyncDate;
|
||||||
|
}
|
||||||
InvoiceListOverlay.Show();
|
InvoiceListOverlay.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task ShowActivityList(string companyId)
|
private async Task ShowActivityList(string companyId)
|
||||||
{
|
{
|
||||||
// check for console manipulation
|
// check for console manipulation
|
||||||
if (!Utils.Validate(ValidateType.Id, companyId)) return;
|
if (!Utils.Validate(ValidateType.Id, companyId))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
SelectedCompany = CompanyList.First(x => x.CompanyId == companyId);
|
SelectedCompany = CompanyList.First(x => x.CompanyId == companyId);
|
||||||
ActivityList = await CustomerActivityRepo.GetActivityList(companyId);
|
ActivityList = await CustomerActivityRepo.GetActivityList(companyId);
|
||||||
ActivityListOverlay.Show();
|
ActivityListOverlay.Show();
|
||||||
|
@ -84,20 +95,29 @@ public partial class OfficeCountryCustomerListComponent
|
||||||
private async Task ShowInventory(string companyId)
|
private async Task ShowInventory(string companyId)
|
||||||
{
|
{
|
||||||
// check for console manipulation
|
// check for console manipulation
|
||||||
if (!Utils.Validate(ValidateType.Id, companyId)) return;
|
if (!Utils.Validate(ValidateType.Id, companyId))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
SelectedCompany = CompanyList.First(x => x.CompanyId == companyId);
|
SelectedCompany = CompanyList.First(x => x.CompanyId == companyId);
|
||||||
// call erp to crm sync before requesting products
|
// call erp to crm sync before requesting products
|
||||||
var newSyncDate = await HistoryRepo.RequestErpToCrmSync(CountryCode, companyId, SelectedCompany.HistorySync);
|
var newSyncDate = await HistoryRepo.RequestErpToCrmSync(CountryCode, companyId, SelectedCompany.HistorySync);
|
||||||
await Task.Delay(500);
|
await Task.Delay(500);
|
||||||
if(!string.IsNullOrWhiteSpace(newSyncDate)) SelectedCompany.HistorySync = newSyncDate;
|
if (!string.IsNullOrWhiteSpace(newSyncDate))
|
||||||
|
{
|
||||||
|
SelectedCompany.HistorySync = newSyncDate;
|
||||||
|
}
|
||||||
ProductList = await HistoryRepo.GetInventory(SelectedCompany.CountryCode, SelectedCompany.CompanyId);
|
ProductList = await HistoryRepo.GetInventory(SelectedCompany.CountryCode, SelectedCompany.CompanyId);
|
||||||
ProductListOverlay.Show();
|
ProductListOverlay.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task ShowOrder(string companyId)
|
private void ShowOrder(string companyId)
|
||||||
{
|
{
|
||||||
// check for console manipulation
|
// check for console manipulation
|
||||||
if (!Utils.Validate(ValidateType.Id, companyId)) return;
|
if (!Utils.Validate(ValidateType.Id, companyId))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
SelectedCompany = CompanyList.First(x => x.CompanyId == companyId);
|
SelectedCompany = CompanyList.First(x => x.CompanyId == companyId);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -51,7 +51,7 @@ public class AdvisorCustomerRepository : IAdvisorCustomerRepository
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get a list of CRM customers (SalesRep)
|
/// SalesRep => Get a list of CRM customers
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="pagingParameters"></param>
|
/// <param name="pagingParameters"></param>
|
||||||
/// <returns>A paged response defined by pagingParameters</returns>
|
/// <returns>A paged response defined by pagingParameters</returns>
|
||||||
|
@ -90,17 +90,23 @@ public class AdvisorCustomerRepository : IAdvisorCustomerRepository
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get CRM customer by Id (SalesRep)
|
/// SalesRep => Get CRM customer by Id
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="companyId"></param>
|
/// <param name="companyId"></param>
|
||||||
/// <returns>A CRM Company entity</returns>
|
/// <returns>A CRM Company entity</returns>
|
||||||
public async Task<CompanyDto> GetCompanyById(string companyId)
|
public async Task<CompanyDto> GetCompanyById(string companyId)
|
||||||
{
|
{
|
||||||
return await _client.GetFromJsonAsync<CompanyDto>($"{_conf.CrmCustomers}/{companyId}", _options);
|
var result = await _client.GetAsync($"{_conf.CrmCustomers}/{companyId}");
|
||||||
|
var content = await result.Content.ReadAsStringAsync();
|
||||||
|
if (!result.IsSuccessStatusCode || string.IsNullOrWhiteSpace(content))
|
||||||
|
{
|
||||||
|
return new CompanyDto();
|
||||||
|
}
|
||||||
|
return JsonSerializer.Deserialize<CompanyDto>(content, _options) ?? new CompanyDto();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create Customer (SalesRep)
|
/// SalesRep => Create Customer
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="company"></param>
|
/// <param name="company"></param>
|
||||||
/// <returns>The Id of the entity</returns>
|
/// <returns>The Id of the entity</returns>
|
||||||
|
@ -113,7 +119,7 @@ public class AdvisorCustomerRepository : IAdvisorCustomerRepository
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delete the CRM customer (SalesRep)
|
/// SalesRep => Delete the CRM customer
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="companyId"></param>
|
/// <param name="companyId"></param>
|
||||||
/// <returns>true/false to define success</returns>
|
/// <returns>true/false to define success</returns>
|
||||||
|
@ -124,7 +130,7 @@ public class AdvisorCustomerRepository : IAdvisorCustomerRepository
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Update CRM customer properties (SalesRep)
|
/// SalesRep => Update CRM customer properties
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="companyId"></param>
|
/// <param name="companyId"></param>
|
||||||
/// <param name="company"></param>
|
/// <param name="company"></param>
|
||||||
|
@ -146,7 +152,7 @@ public class AdvisorCustomerRepository : IAdvisorCustomerRepository
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Update ERP customer properties (SalesRep)
|
/// SalesRep => Update ERP customer properties
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="companyId"></param>
|
/// <param name="companyId"></param>
|
||||||
/// <param name="company"></param>
|
/// <param name="company"></param>
|
||||||
|
@ -172,7 +178,7 @@ public class AdvisorCustomerRepository : IAdvisorCustomerRepository
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Update customer Vat Number (SalesRep)
|
/// SalesRep => Update customer Vat Number
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="companyId"></param>
|
/// <param name="companyId"></param>
|
||||||
/// <param name="vatNumber"></param>
|
/// <param name="vatNumber"></param>
|
||||||
|
@ -190,10 +196,4 @@ public class AdvisorCustomerRepository : IAdvisorCustomerRepository
|
||||||
return JsonSerializer.Deserialize<CompanyDto>(content)
|
return JsonSerializer.Deserialize<CompanyDto>(content)
|
||||||
?? new CompanyDto { Name = "ERROR", VatNumber = vatNumber, CrmNotes = $"FEJL: {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;
|
|
||||||
// }
|
|
||||||
}
|
}
|
|
@ -48,22 +48,50 @@ public class AdvisorWorkplaceRepository : IAdvisorWorkplaceRepository
|
||||||
|
|
||||||
public async Task<List<WorkplaceListView>> GetWorkplaces(string companyId)
|
public async Task<List<WorkplaceListView>> GetWorkplaces(string companyId)
|
||||||
{
|
{
|
||||||
var result = await _client.GetFromJsonAsync<List<WorkplaceListView>>(
|
var result = await _client.GetAsync(
|
||||||
$"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}", _options);
|
$"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}");
|
||||||
return result ?? new List<WorkplaceListView>();
|
var content = await result.Content.ReadAsStringAsync();
|
||||||
|
if (!result.IsSuccessStatusCode || string.IsNullOrWhiteSpace(content))
|
||||||
|
{
|
||||||
|
return new List<WorkplaceListView>();
|
||||||
|
}
|
||||||
|
return JsonSerializer.Deserialize<List<WorkplaceListView>>(content, _options) ?? new List<WorkplaceListView>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<WorkplaceDto> GetWorkplace(string companyId, string workplaceId)
|
public async Task<WorkplaceDto> GetWorkplace(string companyId, string workplaceId)
|
||||||
{
|
{
|
||||||
var result = await _client.GetFromJsonAsync<WorkplaceDto>(
|
var result = await _client.GetAsync(
|
||||||
$"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}/{workplaceId}", _options);
|
$"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}/{workplaceId}");
|
||||||
return result ?? new WorkplaceDto();
|
var content = await result.Content.ReadAsStringAsync();
|
||||||
|
if (!result.IsSuccessStatusCode || string.IsNullOrWhiteSpace(content))
|
||||||
|
{
|
||||||
|
return new WorkplaceDto();
|
||||||
|
}
|
||||||
|
return JsonSerializer.Deserialize<WorkplaceDto>(content, _options) ?? new WorkplaceDto();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task CreateWorkplace(string companyId, WorkplaceDto workplace)
|
public async Task<WorkplaceInventory> GetWorkplaceInventory(string companyId, string workplaceId)
|
||||||
{
|
{
|
||||||
await _client.PostAsJsonAsync(
|
var result = await _client.GetAsync(
|
||||||
|
$"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}/{workplaceId}/documents");
|
||||||
|
var content = await result.Content.ReadAsStringAsync();
|
||||||
|
if (!result.IsSuccessStatusCode || string.IsNullOrWhiteSpace(content))
|
||||||
|
{
|
||||||
|
return new WorkplaceInventory();
|
||||||
|
}
|
||||||
|
return JsonSerializer.Deserialize<WorkplaceInventory>(content, _options) ?? new WorkplaceInventory();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<string> CreateWorkplace(string companyId, WorkplaceDto workplace)
|
||||||
|
{
|
||||||
|
var result = await _client.PostAsJsonAsync(
|
||||||
$"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}", workplace, _options);
|
$"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}", workplace, _options);
|
||||||
|
var content = await result.Content.ReadAsStringAsync();
|
||||||
|
// if (!result.IsSuccessStatusCode || string.IsNullOrWhiteSpace(content))
|
||||||
|
// {
|
||||||
|
// return "";
|
||||||
|
// }
|
||||||
|
return content;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task UpdateWorkplace(string companyId, WorkplaceDto workplace)
|
public async Task UpdateWorkplace(string companyId, WorkplaceDto workplace)
|
||||||
|
@ -77,11 +105,4 @@ public class AdvisorWorkplaceRepository : IAdvisorWorkplaceRepository
|
||||||
await _client.DeleteAsync(
|
await _client.DeleteAsync(
|
||||||
$"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}/{workplaceId}");
|
$"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}/{workplaceId}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<WorkplaceInventory> GetWorkplaceInventory(string companyId, string workplaceId)
|
|
||||||
{
|
|
||||||
var result = await _client.GetFromJsonAsync<WorkplaceInventory>(
|
|
||||||
$"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}/{workplaceId}/documents");
|
|
||||||
return result ?? new WorkplaceInventory();
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -44,7 +44,7 @@ public interface IAdvisorWorkplaceRepository
|
||||||
/// <param name="companyId"></param>
|
/// <param name="companyId"></param>
|
||||||
/// <param name="workplace"></param>
|
/// <param name="workplace"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task CreateWorkplace(string companyId, WorkplaceDto workplace);
|
Task<string> CreateWorkplace(string companyId, WorkplaceDto workplace);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Update workplace given the customer id and updated data
|
/// Update workplace given the customer id and updated data
|
||||||
|
|
|
@ -74,7 +74,7 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
private bool Working { get; set; } = true;
|
private bool Working { get; set; } = true;
|
||||||
private UserManagerEditView SalesRep { get; set; } = new();
|
private UserManagerEditView SalesRep { get; set; } = new();
|
||||||
private DateTime SelectedDate { get; set; }
|
private DateTime SelectedDate { get; set; }
|
||||||
private string OldPhone { get; set; } = "";
|
// private string OldPhone { get; set; } = "";
|
||||||
private string PromptDateConfirm { get; set; } = "";
|
private string PromptDateConfirm { get; set; } = "";
|
||||||
private string ButtonText { get; set; } = "Gem besøg";
|
private string ButtonText { get; set; } = "Gem besøg";
|
||||||
private bool OrgWarning { get; set; }
|
private bool OrgWarning { get; set; }
|
||||||
|
@ -127,19 +127,23 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (Company.HasFolded == 1)
|
if (Company.HasFolded == 1)
|
||||||
|
{
|
||||||
// Company has shut down
|
// Company has shut down
|
||||||
Activity.OrderMessage = "BEMÆRK: CVR nummer er ophørt.";
|
Activity.OrderMessage = "BEMÆRK: CVR nummer er ophørt.";
|
||||||
|
}
|
||||||
// variable to validate if customer needs phone number update
|
//
|
||||||
OldPhone = Company.Phone;
|
if (Company.CountryCode.ToLower() == "dk"
|
||||||
if (string.IsNullOrWhiteSpace(Company.Phone)
|
&& string.IsNullOrWhiteSpace(Company.Phone)
|
||||||
&& !string.IsNullOrWhiteSpace(Company.Account)
|
&& !string.IsNullOrWhiteSpace(Company.Account)
|
||||||
&& Company.Account != "NY" && Company.Account.Length > 7)
|
&& !Company.Account.StartsWith("NY")
|
||||||
|
&& Company.Account.Length > 7)
|
||||||
{
|
{
|
||||||
Company.Phone = Company.Account[..8];
|
Company.Phone = Company.Account[..8];
|
||||||
}
|
}
|
||||||
Activity.ActivityStatusEnum = "noSale";
|
Activity.ActivityStatusEnum = "noSale";
|
||||||
Activity.ActivityVisitEnum = Company.Account is "" or "NY" ? "new" : "recall";
|
Activity.ActivityVisitEnum = string.IsNullOrWhiteSpace(Company.Account)
|
||||||
|
|| Company.Account.StartsWith("NY")
|
||||||
|
? "new" : "recall";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Populate base activity information
|
// Populate base activity information
|
||||||
|
@ -185,14 +189,17 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
if (DraftProvider.Draft.DraftType == "order")
|
if (DraftProvider.Draft.DraftType == "order")
|
||||||
{
|
{
|
||||||
// set dropdown selection accordingly
|
// set dropdown selection accordingly
|
||||||
if(Activity.ActivityTypeEnum != "phone")
|
if (Activity.ActivityTypeEnum != "phone")
|
||||||
|
{
|
||||||
Activity.ActivityTypeEnum = "onSite";
|
Activity.ActivityTypeEnum = "onSite";
|
||||||
|
}
|
||||||
|
|
||||||
Activity.ActivityStatusEnum = "order";
|
Activity.ActivityStatusEnum = "order";
|
||||||
PoFormInvalid = false;
|
PoFormInvalid = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Working = false;
|
Working = false;
|
||||||
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -307,7 +314,9 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
{
|
{
|
||||||
// get selected item
|
// get selected item
|
||||||
if (string.IsNullOrWhiteSpace(sku.ItemId))
|
if (string.IsNullOrWhiteSpace(sku.ItemId))
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
SelectedItem = await CatalogRepo.GetSalesItemId(SalesRep.CountryCode.ToLower(), sku.ItemId);
|
SelectedItem = await CatalogRepo.GetSalesItemId(SalesRep.CountryCode.ToLower(), sku.ItemId);
|
||||||
ShowItem = true;
|
ShowItem = true;
|
||||||
Price = sku.Rate;
|
Price = sku.Rate;
|
||||||
|
@ -319,7 +328,9 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
private void PriceHistoryCallback(decimal price)
|
private void PriceHistoryCallback(decimal price)
|
||||||
{
|
{
|
||||||
if (price == 0)
|
if (price == 0)
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
Price = price.ToString("N2", CultureInfo.InvariantCulture);
|
Price = price.ToString("N2", CultureInfo.InvariantCulture);
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
@ -369,14 +380,18 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
private async Task<InvoiceListView> FetchCompanyInvoices()
|
private async Task<InvoiceListView> FetchCompanyInvoices()
|
||||||
{
|
{
|
||||||
// no need to do for kanvas entry
|
// no need to do for kanvas entry
|
||||||
if (Kanvas) return new InvoiceListView();
|
if (Kanvas)
|
||||||
|
{
|
||||||
|
return new InvoiceListView();
|
||||||
|
}
|
||||||
// fetch from storage
|
// fetch from storage
|
||||||
var storage = await Storage.GetItemAsStringAsync($"{CompanyId}-invoices");
|
var storage = await Storage.GetItemAsStringAsync($"{CompanyId}-invoices");
|
||||||
await Task.Delay(500);
|
await Task.Delay(250);
|
||||||
var iDate = await Storage.GetItemAsStringAsync($"{CompanyId}-iDate");
|
var iDate = await Storage.GetItemAsStringAsync($"{CompanyId}-iDate");
|
||||||
// if we have a list and iDate was today return the list
|
// if we have a list and iDate was today return the list
|
||||||
if (!string.IsNullOrWhiteSpace(storage) && (!string.IsNullOrWhiteSpace(iDate) &&
|
if (!string.IsNullOrWhiteSpace(storage)
|
||||||
DateTime.Parse(iDate.Replace("\"", "")) >= DateTime.Now))
|
&& !string.IsNullOrWhiteSpace(iDate)
|
||||||
|
&& DateTime.Parse(iDate.Replace("\"", "")) >= DateTime.Now)
|
||||||
{
|
{
|
||||||
Logger.LogDebug("fetching invoices from storage");
|
Logger.LogDebug("fetching invoices from storage");
|
||||||
Logger.LogDebug("storage contains <= {}", storage);
|
Logger.LogDebug("storage contains <= {}", storage);
|
||||||
|
@ -401,7 +416,9 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
{
|
{
|
||||||
// avoid duplication
|
// avoid duplication
|
||||||
if (Working)
|
if (Working)
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Logger.LogDebug("view kanvas activity => {}", JsonSerializer.Serialize(Activity));
|
Logger.LogDebug("view kanvas activity => {}", JsonSerializer.Serialize(Activity));
|
||||||
switch (Kanvas)
|
switch (Kanvas)
|
||||||
|
@ -427,7 +444,7 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
Toaster.ShowError("Ved bestilling skal der være en eller flere linjer i kladden.");
|
Toaster.ShowError("Ved bestilling skal der være en eller flere linjer i kladden.");
|
||||||
return;
|
return;
|
||||||
// phone number is required if first time customer
|
// phone number is required if first time customer
|
||||||
case "order" when Company.Account is "NY" or "" && string.IsNullOrWhiteSpace(Activity.Phone):
|
case "order" when Company.Account.StartsWith("NY") || Company.Account.StartsWith("KANVAS") || string.IsNullOrWhiteSpace(Company.Account) && string.IsNullOrWhiteSpace(Activity.Phone):
|
||||||
Toaster.ShowError("Ved bestilling til ny kunde skal telefon nummer angives.");
|
Toaster.ShowError("Ved bestilling til ny kunde skal telefon nummer angives.");
|
||||||
return;
|
return;
|
||||||
// verify email address is a valid address
|
// verify email address is a valid address
|
||||||
|
@ -435,21 +452,11 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
Toaster.ShowError("Ved tilbud skal en gyldig email adresse angives.");
|
Toaster.ShowError("Ved tilbud skal en gyldig email adresse angives.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// raise working flag
|
// raise working flag
|
||||||
Working = true;
|
Working = true;
|
||||||
|
|
||||||
// reset selected item
|
// reset selected item
|
||||||
SelectedItem = new SalesItemView();
|
|
||||||
// check if phone number need to be updated
|
|
||||||
if (!Kanvas && OldPhone != Activity.Phone)
|
|
||||||
{
|
|
||||||
Company.Phone = Activity.Phone;
|
|
||||||
Activity.OrderMessage = $"BEMÆRK: {Activity.Phone}\n{Activity.OrderMessage}";
|
|
||||||
await CompanyRepo.UpdateErpData(Company.CompanyId, Company);
|
|
||||||
}
|
|
||||||
|
|
||||||
// begin assembling activity
|
// begin assembling activity
|
||||||
|
SelectedItem = new SalesItemView();
|
||||||
// activity date
|
// activity date
|
||||||
Activity.ActivityDate = $"{SelectedDate:yyyy-MM-dd}";
|
Activity.ActivityDate = $"{SelectedDate:yyyy-MM-dd}";
|
||||||
// activity type
|
// activity type
|
||||||
|
@ -461,7 +468,9 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
};
|
};
|
||||||
// if express add 'E' to ourRef
|
// if express add 'E' to ourRef
|
||||||
if (Activity.Express)
|
if (Activity.Express)
|
||||||
|
{
|
||||||
Activity.OurRef = $"E{Activity.OurRef}";
|
Activity.OurRef = $"E{Activity.OurRef}";
|
||||||
|
}
|
||||||
// begin lines
|
// begin lines
|
||||||
Activity.Lines = new List<ActivityLineDto>();
|
Activity.Lines = new List<ActivityLineDto>();
|
||||||
var ln = 0;
|
var ln = 0;
|
||||||
|
@ -507,11 +516,18 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
|
|
||||||
private void ShowOrgWarning()
|
private void ShowOrgWarning()
|
||||||
{
|
{
|
||||||
if (Kanvas) return;
|
if (Kanvas)
|
||||||
if (OrgWarning) return;
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (OrgWarning)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
OrgWarning = true;
|
OrgWarning = true;
|
||||||
if (Company.CountryCode.ToLower() == "se" && Utils.StringToDigits(Activity.VatNumber).Length < 10 &&
|
if (Company.CountryCode.ToLower() == "se"
|
||||||
Activity.ActivityStatusEnum == "order")
|
&& Utils.StringToDigits(Activity.VatNumber).Length < 10
|
||||||
|
&& Activity.ActivityStatusEnum == "order")
|
||||||
{
|
{
|
||||||
Toaster.ShowWarning("Org nummer er ufuldstændig. Skal opdateres før bestilling kan sendes. ");
|
Toaster.ShowWarning("Org nummer er ufuldstændig. Skal opdateres før bestilling kan sendes. ");
|
||||||
}
|
}
|
||||||
|
@ -547,7 +563,9 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
// add it to the cart
|
// add it to the cart
|
||||||
DraftProvider.Draft.Items.Add(item);
|
DraftProvider.Draft.Items.Add(item);
|
||||||
if (Activity.ActivityStatusEnum != "quote")
|
if (Activity.ActivityStatusEnum != "quote")
|
||||||
|
{
|
||||||
Activity.ActivityStatusEnum = "order";
|
Activity.ActivityStatusEnum = "order";
|
||||||
|
}
|
||||||
// save the item using the CartStateProvider's save method
|
// save the item using the CartStateProvider's save method
|
||||||
await DraftProvider.SaveChangesAsync();
|
await DraftProvider.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
|
@ -560,7 +578,9 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
// save the remaining draft
|
// save the remaining draft
|
||||||
await DraftProvider.SaveChangesAsync();
|
await DraftProvider.SaveChangesAsync();
|
||||||
if (!DraftProvider.Draft.Items.Any())
|
if (!DraftProvider.Draft.Items.Any())
|
||||||
|
{
|
||||||
Activity.ActivityStatusEnum = "noSale";
|
Activity.ActivityStatusEnum = "noSale";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -581,15 +601,19 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
{
|
{
|
||||||
"nosale" => "Gem Besøg",
|
"nosale" => "Gem Besøg",
|
||||||
"order" => "Send Bestilling",
|
"order" => "Send Bestilling",
|
||||||
"quote" => "Send Tilbud"
|
"quote" => "Send Tilbud",
|
||||||
|
_ => throw new ArgumentOutOfRangeException()
|
||||||
};
|
};
|
||||||
|
|
||||||
// InvalidCanvas = InvalidActivityType;
|
// InvalidCanvas = InvalidActivityType;
|
||||||
InvalidActivity = InvalidActivityType
|
InvalidActivity = InvalidActivityType
|
||||||
|| PoFormInvalid
|
|| PoFormInvalid
|
||||||
|| DraftProvider.Draft.Items.Count == 0
|
|| DraftProvider.Draft.Items.Count == 0
|
||||||
|| (Activity.ActivityStatusEnum == "offer" && string.IsNullOrWhiteSpace(Activity.Email));
|
|| (Activity.ActivityStatusEnum == "offer"
|
||||||
if (Activity.YourRef.Length > 35 || Activity.ReferenceNumber.Length > 20 || InvalidActivity)
|
&& string.IsNullOrWhiteSpace(Activity.Email));
|
||||||
|
if (Activity.YourRef.Length > 35
|
||||||
|
|| Activity.ReferenceNumber.Length > 20
|
||||||
|
|| InvalidActivity)
|
||||||
{
|
{
|
||||||
PoFormInvalid = true;
|
PoFormInvalid = true;
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -24,10 +24,10 @@
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<h4 class="pt-1">@Company.Name</h4>
|
<h4 class="pt-1">@Company.Name</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-3 align-content-end">
|
<div class="col-sm-3 align-content-end d-print-none">
|
||||||
<a class="btn btn-primary d-block" href="/advisor/customers/@CompanyId"><i class="bi-arrow-right"></i> Kundekort</a>
|
<a class="btn btn-primary d-block" href="/advisor/customers/@CompanyId"><i class="bi-arrow-right"></i> Kundekort</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-3 align-content-end">
|
<div class="col-sm-3 align-content-end d-print-none">
|
||||||
<a class="btn btn-primary d-block" href="/advisor/customers/@CompanyId/activities/new"><i class="bi-arrow-right"></i> Nyt Besøg</a>
|
<a class="btn btn-primary d-block" href="/advisor/customers/@CompanyId/activities/new"><i class="bi-arrow-right"></i> Nyt Besøg</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -309,15 +309,13 @@
|
||||||
<div class="col-sm-3 d-grid">
|
<div class="col-sm-3 d-grid">
|
||||||
<button type="button" class="btn btn-danger" @onclick="ToggleVisibility">@ToggleButtonText</button>
|
<button type="button" class="btn btn-danger" @onclick="ToggleVisibility">@ToggleButtonText</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="col text-end">
|
||||||
@if (AppInfo.Value.Rc)
|
@if (AppInfo.Value.Rc)
|
||||||
{
|
{
|
||||||
<div class="row mt-5">
|
<a class="btn btn-info" href="@($"/advisor/customers/{CompanyId}/workplaces")">Kemi Dokumentationr</a>
|
||||||
<div class="col-sm-3">
|
}
|
||||||
<a class="btn btn-info" href="@($"/advisor/customers/{CompanyId}/workplaces")">Arbejdssteder</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
}
|
</div>
|
||||||
}
|
}
|
||||||
</EditForm>
|
</EditForm>
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,8 @@
|
||||||
@using Wonky.Client.Components
|
@using Wonky.Client.Components
|
||||||
@attribute [Authorize(Roles = "Advisor")]
|
@attribute [Authorize(Roles = "Advisor")]
|
||||||
@page "/advisor/customers/{CompanyId}/workplaces"
|
@page "/advisor/customers/{CompanyId}/workplaces"
|
||||||
<PageTitle>@Company.Name arbejdssteder</PageTitle>
|
|
||||||
|
<PageTitle>Arbejdssteder - @Company.Name</PageTitle>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
@ -26,7 +27,7 @@
|
||||||
<h2>@Company.Name</h2>
|
<h2>@Company.Name</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-2">
|
<div class="col-sm-2">
|
||||||
<div class="btn btn-primary"><i class="bi-plus-lg"></i> NY</div>
|
<a class="btn btn-primary" href="/advisor/customers/@CompanyId/workplaces/new"><i class="bi-plus-lg"></i> NY</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-2">
|
<div class="col-sm-2">
|
||||||
|
|
||||||
|
|
|
@ -19,35 +19,47 @@ using Wonky.Client.HttpInterceptors;
|
||||||
using Wonky.Client.HttpRepository;
|
using Wonky.Client.HttpRepository;
|
||||||
using Wonky.Entity.DTO;
|
using Wonky.Entity.DTO;
|
||||||
using Wonky.Entity.Views;
|
using Wonky.Entity.Views;
|
||||||
|
|
||||||
#pragma warning disable CS8618
|
#pragma warning disable CS8618
|
||||||
|
|
||||||
namespace Wonky.Client.Pages;
|
namespace Wonky.Client.Pages;
|
||||||
|
|
||||||
public partial class AdvisorCustomerWorkplaceListPage : IDisposable
|
public partial class AdvisorCustomerWorkplaceListPage : IDisposable
|
||||||
{
|
{
|
||||||
[Parameter] public string CompanyId { get; set; } = "";
|
// ###############################################################
|
||||||
[Inject] public IAdvisorWorkplaceRepository WorkplaceRepo { get; set; }
|
[Inject] public IAdvisorWorkplaceRepository WorkplaceRepo { get; set; }
|
||||||
[Inject] public IAdvisorCustomerRepository CustomerRepo { get; set; }
|
[Inject] public IAdvisorCustomerRepository CustomerRepo { get; set; }
|
||||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||||
|
|
||||||
|
// ###############################################################
|
||||||
|
[Parameter] public string CompanyId { get; set; } = "";
|
||||||
|
|
||||||
|
// ###############################################################
|
||||||
private List<WorkplaceListView> Workplaces { get; set; } = new();
|
private List<WorkplaceListView> Workplaces { get; set; } = new();
|
||||||
private CompanyDto Company { get; set; } = new();
|
private CompanyDto Company { get; set; } = new();
|
||||||
private bool Working { get; set; } = true;
|
private bool Working { get; set; } = true;
|
||||||
|
|
||||||
protected override async Task OnParametersSetAsync()
|
|
||||||
{
|
|
||||||
Interceptor.RegisterEvent();
|
|
||||||
Interceptor.RegisterBeforeSendEvent();
|
|
||||||
Company = await CustomerRepo.GetCompanyById(CompanyId);
|
|
||||||
Working = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
Working = true;
|
Interceptor.RegisterEvent();
|
||||||
|
Interceptor.RegisterBeforeSendEvent();
|
||||||
|
|
||||||
|
Company = await CustomerRepo.GetCompanyById(CompanyId);
|
||||||
|
|
||||||
|
await Task.Delay(150);
|
||||||
|
|
||||||
Workplaces = await WorkplaceRepo.GetWorkplaces(CompanyId);
|
Workplaces = await WorkplaceRepo.GetWorkplaces(CompanyId);
|
||||||
|
|
||||||
Working = false;
|
Working = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task<List<WorkplaceListView>> GetWorkplaces()
|
||||||
|
{
|
||||||
|
return await WorkplaceRepo.GetWorkplaces(CompanyId);
|
||||||
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
Interceptor.DisposeEvent();
|
Interceptor.DisposeEvent();
|
||||||
|
|
114
Wonky.Client/Pages/AdvisorCustomerWorkplaceNew.razor
Normal file
114
Wonky.Client/Pages/AdvisorCustomerWorkplaceNew.razor
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
@* 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
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
|
||||||
|
*@
|
||||||
|
|
||||||
|
@attribute [Authorize(Roles = "Advisor")]
|
||||||
|
@page "/advisor/customers/{CompanyId}/workplaces/new"
|
||||||
|
@using Microsoft.AspNetCore.Authorization
|
||||||
|
|
||||||
|
<PageTitle>Opret arbejdssted - @Company.Name</PageTitle>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<h2>Opret arbejdssted for @Company.Name</h2>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-2">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<EditForm EditContext="FormContext" OnValidSubmit="SubmitWorkplace">
|
||||||
|
<DataAnnotationsValidator/>
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="align-middle" colspan="4">
|
||||||
|
<h3>Stamdata</h3>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="align-middle">Navn</td>
|
||||||
|
<td class="align-middle">
|
||||||
|
<InputText id="name" class="form-control" placeholder="plade, auto, klargøring, lab" @bind-Value="Workplace.Name"></InputText>
|
||||||
|
<ValidationMessage For="@(() => Workplace.Name)"></ValidationMessage>
|
||||||
|
</td>
|
||||||
|
<td class="align-middle">Beskrivelse</td>
|
||||||
|
<td class="align-middle">
|
||||||
|
<InputText id="description" class="form-control" placeholder="kort beskrivelse" @bind-Value="Workplace.Description"></InputText>
|
||||||
|
<ValidationMessage For="@(() => Workplace.Description)"></ValidationMessage>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th class="align-middle" colspan="4">
|
||||||
|
<h3>Placering og Opbevaring</h3>
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="align-middle">Produkter</td>
|
||||||
|
<td class="align-middle">
|
||||||
|
<InputText id="productStorage" class="form-control" placeholder="produkt opbevaring" @bind-Value="Workplace.ProductStorage"></InputText>
|
||||||
|
<ValidationMessage For="@(() => Workplace.ProductStorage)"></ValidationMessage>
|
||||||
|
</td>
|
||||||
|
<td class="align-middle">Øjenskylleflaske</td>
|
||||||
|
<td class="align-middle">
|
||||||
|
<InputText id="eyeCleanerLocation" class="form-control" placeholder="placering af øjenskyller" @bind-Value="Workplace.EyeCleanerLocation"></InputText>
|
||||||
|
<ValidationMessage For="@(() => Workplace.EyeCleanerLocation)"></ValidationMessage>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="align-middle">Masker</td>
|
||||||
|
<td class="align-middle">
|
||||||
|
<InputText id="maskStorage" class="form-control" placeholder="maske opbevaring" @bind-Value="Workplace.MaskStorage"></InputText>
|
||||||
|
<ValidationMessage For="@(() => Workplace.MaskStorage)"></ValidationMessage>
|
||||||
|
</td>
|
||||||
|
<td class="align-middle">Førstehjælp</td>
|
||||||
|
<td class="align-middle">
|
||||||
|
<InputText id="firstAidStorage" class="form-control" placeholder="placering af førstehjælpskasse" @bind-Value="Workplace.FirstAidStorage"></InputText>
|
||||||
|
<ValidationMessage For="@(() => Workplace.FirstAidStorage)"></ValidationMessage>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="align-middle">Handsker</td>
|
||||||
|
<td class="align-middle">
|
||||||
|
<InputText id="glovesStorage" class="form-control" placeholder="placering af handsker" @bind-Value="Workplace.GlovesStorage"></InputText>
|
||||||
|
<ValidationMessage For="@(() => Workplace.GlovesStorage)"></ValidationMessage>
|
||||||
|
</td>
|
||||||
|
<td class="align-middle" colspan="2"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="align-middle">Sikkerhedsbriller</td>
|
||||||
|
<td class="align-middle">
|
||||||
|
<InputText id="gogglesStorage" class="form-control" placeholder="opbevaring beskyttelses briller" @bind-Value="Workplace.GogglesStorage"></InputText>
|
||||||
|
<ValidationMessage For="@(() => Workplace.GogglesStorage)"></ValidationMessage>
|
||||||
|
</td>
|
||||||
|
<td class="align-middle">Affald</td>
|
||||||
|
<td class="align-middle">
|
||||||
|
<InputText id="wasteDeposit" class="form-control" placeholder="deponering af affald og spild" @bind-Value="Workplace.WasteDeposit"></InputText>
|
||||||
|
<ValidationMessage For="@(() => Workplace.WasteDeposit)"></ValidationMessage>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="row mb-2">
|
||||||
|
<div class="col text-end">
|
||||||
|
<button type="submit" class="btn btn-success" disabled="@FormInvalid">Gem</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</EditForm>
|
||||||
|
</div>
|
||||||
|
</div>
|
107
Wonky.Client/Pages/AdvisorCustomerWorkplaceNew.razor.cs
Normal file
107
Wonky.Client/Pages/AdvisorCustomerWorkplaceNew.razor.cs
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
// 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
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
|
||||||
|
//
|
||||||
|
|
||||||
|
using System.Text.Json;
|
||||||
|
using Blazored.Toast.Services;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using Microsoft.AspNetCore.Components.Forms;
|
||||||
|
using Wonky.Client.HttpInterceptors;
|
||||||
|
using Wonky.Client.HttpRepository;
|
||||||
|
using Wonky.Entity.DTO;
|
||||||
|
|
||||||
|
namespace Wonky.Client.Pages;
|
||||||
|
|
||||||
|
#pragma warning disable CS8618
|
||||||
|
|
||||||
|
public partial class AdvisorCustomerWorkplaceNew : IDisposable
|
||||||
|
{
|
||||||
|
// ###############################################################
|
||||||
|
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||||
|
[Inject] public IAdvisorCustomerRepository CustomerRepo { get; set; }
|
||||||
|
[Inject] public IAdvisorWorkplaceRepository WorkplaceRepo { get; set; }
|
||||||
|
[Inject] public IToastService Toaster { get; set; }
|
||||||
|
[Inject] public ILogger<AdvisorCustomerWorkplaceNew> Logger { get; set; }
|
||||||
|
|
||||||
|
// ###############################################################
|
||||||
|
[Parameter] public string CompanyId { get; set; } = "";
|
||||||
|
|
||||||
|
|
||||||
|
// ###############################################################
|
||||||
|
private WorkplaceDto Workplace { get; set; } = new();
|
||||||
|
private EditContext FormContext { get; set; }
|
||||||
|
private CompanyDto Company { get; set; } = new();
|
||||||
|
private bool FormInvalid { get; set; } = true;
|
||||||
|
private bool Working { get; set; } = true;
|
||||||
|
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
Interceptor.RegisterEvent();
|
||||||
|
Interceptor.RegisterBeforeSendEvent();
|
||||||
|
|
||||||
|
FormContext = new EditContext(Workplace);
|
||||||
|
|
||||||
|
FormContext.OnFieldChanged += HandleFieldChanged!;
|
||||||
|
FormContext.OnValidationStateChanged += ValidationChanged!;
|
||||||
|
|
||||||
|
// get company
|
||||||
|
Company = await GetCompany(CompanyId);
|
||||||
|
while (string.IsNullOrWhiteSpace(Company.CompanyId))
|
||||||
|
{
|
||||||
|
await Task.Delay(150);
|
||||||
|
}
|
||||||
|
Working = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task<CompanyDto> GetCompany(string companyId)
|
||||||
|
{
|
||||||
|
return await CustomerRepo.GetCompanyById(companyId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task SubmitWorkplace()
|
||||||
|
{
|
||||||
|
Logger.LogDebug("CompanyId {}", JsonSerializer.Serialize(Workplace));
|
||||||
|
Logger.LogDebug("Workplace {}", JsonSerializer.Serialize(Workplace, new JsonSerializerOptions(JsonSerializerDefaults.Web)));
|
||||||
|
var result = await WorkplaceRepo.CreateWorkplace(CompanyId, Workplace);
|
||||||
|
Logger.LogDebug("HTTP result {}", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void HandleFieldChanged(object sender, FieldChangedEventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
FormInvalid = !FormContext.Validate();
|
||||||
|
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void ValidationChanged(object sender, ValidationStateChangedEventArgs e)
|
||||||
|
{
|
||||||
|
FormInvalid = false;
|
||||||
|
FormContext.OnFieldChanged -= HandleFieldChanged!;
|
||||||
|
FormContext.OnValidationStateChanged -= ValidationChanged!;
|
||||||
|
FormContext = new EditContext(Workplace);
|
||||||
|
FormContext.OnFieldChanged += HandleFieldChanged!;
|
||||||
|
FormContext.OnValidationStateChanged += ValidationChanged!;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
Interceptor.DisposeEvent();
|
||||||
|
FormContext.OnFieldChanged -= HandleFieldChanged!;
|
||||||
|
FormContext.OnValidationStateChanged -= ValidationChanged!;
|
||||||
|
}
|
||||||
|
}
|
|
@ -28,84 +28,81 @@
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
|
||||||
<EditForm EditContext="WorkplaceContext" OnValidSubmit="SubmitUpdate">
|
<EditForm EditContext="WorkplaceContext" OnValidSubmit="SubmitUpdate">
|
||||||
<DataAnnotationsValidator/>
|
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
|
||||||
<th colspan="4">
|
|
||||||
Stamdata
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="align-middle" colspan="4">
|
||||||
|
<h3>Stamdata</h3>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="align-middle">Navn</td>
|
<td class="align-middle">Navn</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
<InputText id="name" class="form-control" @bind-Value="Workplace.Name"/>
|
<InputText id="name" class="form-control" placeholder="plade, auto, klargøring, lab" @bind-Value="Workplace.Name"></InputText>
|
||||||
<ValidationMessage For="@(() => Workplace.Name)"></ValidationMessage>
|
<ValidationMessage For="@(() => Workplace.Name)"></ValidationMessage>
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle">Beskrivelse</td>
|
<td class="align-middle">Beskrivelse</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
<InputText id="description" class="form-control" @bind-Value="Workplace.Description"/>
|
<InputText id="description" class="form-control" placeholder="kort beskrivelse" @bind-Value="Workplace.Description"></InputText>
|
||||||
<ValidationMessage For="@(() => Workplace.Description)"></ValidationMessage>
|
<ValidationMessage For="@(() => Workplace.Description)"></ValidationMessage>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="align-middle text-center" colspan="4">Placering og Opbevaring</th>
|
<td class="align-middle" colspan="4">
|
||||||
|
<h3>Placering og Opbevaring</h3>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="align-middle">Produkter</td>
|
<td class="align-middle">Produkter</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
<InputText id="productStorage" class="form-control" @bind-Value="Workplace.ProductStorage"/>
|
<InputText id="productStorage" class="form-control" placeholder="produkt opbevaring" @bind-Value="Workplace.ProductStorage"></InputText>
|
||||||
<ValidationMessage For="@(() => Workplace.ProductStorage)"></ValidationMessage>
|
<ValidationMessage For="@(() => Workplace.ProductStorage)"></ValidationMessage>
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle" colspan="2"></td>
|
<td class="align-middle">Øjenskylleflaske</td>
|
||||||
|
<td class="align-middle">
|
||||||
|
<InputText id="eyeCleanerLocation" class="form-control" placeholder="placering af øjenskyller" @bind-Value="Workplace.EyeCleanerLocation"></InputText>
|
||||||
|
<ValidationMessage For="@(() => Workplace.EyeCleanerLocation)"></ValidationMessage>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="align-middle">Masker</td>
|
<td class="align-middle">Masker</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
<InputText id="maskStorage" class="form-control" @bind-Value="Workplace.MaskStorage"/>
|
<InputText id="maskStorage" class="form-control" placeholder="maske opbevaring" @bind-Value="Workplace.MaskStorage"></InputText>
|
||||||
<ValidationMessage For="@(() => Workplace.MaskStorage)"></ValidationMessage>
|
<ValidationMessage For="@(() => Workplace.MaskStorage)"></ValidationMessage>
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle">Øjenskylleflaske</td>
|
<td class="align-middle">Førstehjælp</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
<InputText id="eyeCleanerLocation" class="form-control" @bind-Value="Workplace.EyeCleanerLocation"/>
|
<InputText id="firstAidStorage" class="form-control" placeholder="placering af førstehjælpskasse" @bind-Value="Workplace.FirstAidStorage"></InputText>
|
||||||
<ValidationMessage For="@(() => Workplace.EyeCleanerLocation)"></ValidationMessage>
|
<ValidationMessage For="@(() => Workplace.FirstAidStorage)"></ValidationMessage>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="align-middle">Handsker</td>
|
<td class="align-middle">Handsker</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
<InputText id="glovesStorage" class="form-control" @bind-Value="Workplace.GlovesStorage"/>
|
<InputText id="glovesStorage" class="form-control" placeholder="placering af handsker" @bind-Value="Workplace.GlovesStorage"></InputText>
|
||||||
<ValidationMessage For="@(() => Workplace.GlovesStorage)"></ValidationMessage>
|
<ValidationMessage For="@(() => Workplace.GlovesStorage)"></ValidationMessage>
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle">Førstehjælp</td>
|
<td class="align-middle" colspan="2"></td>
|
||||||
<td class="align-middle">
|
|
||||||
<InputText id="firstAidStorage" class="form-control" @bind-Value="Workplace.FirstAidStorage"/>
|
|
||||||
<ValidationMessage For="@(() => Workplace.FirstAidStorage)"></ValidationMessage>
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="align-middle">Sikkerhedsbriller</td>
|
<td class="align-middle">Sikkerhedsbriller</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
<InputText id="gogglesStorage" class="form-control" @bind-Value="Workplace.GogglesStorage"/>
|
<InputText id="gogglesStorage" class="form-control" placeholder="opbevaring beskyttelses briller" @bind-Value="Workplace.GogglesStorage"></InputText>
|
||||||
<ValidationMessage For="@(() => Workplace.GogglesStorage)"></ValidationMessage>
|
<ValidationMessage For="@(() => Workplace.GogglesStorage)"></ValidationMessage>
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle" colspan="2"></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class="align-middle">Affald</td>
|
<td class="align-middle">Affald</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
<InputText id="wasteDeposit" class="form-control" @bind-Value="Workplace.WasteDeposit"/>
|
<InputText id="wasteDeposit" class="form-control" placeholder="deponering af affald og spild" @bind-Value="Workplace.WasteDeposit"></InputText>
|
||||||
<ValidationMessage For="@(() => Workplace.WasteDeposit)"></ValidationMessage>
|
<ValidationMessage For="@(() => Workplace.WasteDeposit)"></ValidationMessage>
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle" colspan="2"></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="row mb-2">
|
<div class="row mb-2">
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<button type="button" class="btn btn-danger" disabled @onclick="DeleteWorkplace">Slet</button>
|
<button type="button" class="btn btn-danger" onclick="@DeleteWorkplace">Slet</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<button type="submit" class="btn btn-success">Gem</button>
|
<button type="submit" class="btn btn-success">Gem</button>
|
||||||
|
|
|
@ -94,8 +94,9 @@ public partial class SupervisorDocumentNewPage : IDisposable
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Toaster.ShowSuccess("Ok");
|
Toaster.ShowSuccess("Ok");
|
||||||
Navigator.NavigateTo("/supervisor/advisors/{AdvisorId}/documents/{x.DocumentId}");
|
Navigator.NavigateTo($"/supervisor/advisors/{AdvisorId}/documents/{x.DocumentId}");
|
||||||
}
|
}
|
||||||
|
Toaster.ClearAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HandleFieldChanged(object sender, FieldChangedEventArgs e)
|
private void HandleFieldChanged(object sender, FieldChangedEventArgs e)
|
||||||
|
@ -107,11 +108,7 @@ public partial class SupervisorDocumentNewPage : IDisposable
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Validation change event
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender"></param>
|
|
||||||
/// <param name="e"></param>
|
|
||||||
private void ValidationChanged(object sender, ValidationStateChangedEventArgs e)
|
private void ValidationChanged(object sender, ValidationStateChangedEventArgs e)
|
||||||
{
|
{
|
||||||
FormInvalid = false;
|
FormInvalid = false;
|
||||||
|
@ -121,14 +118,12 @@ public partial class SupervisorDocumentNewPage : IDisposable
|
||||||
FormContext.OnFieldChanged += HandleFieldChanged!;
|
FormContext.OnFieldChanged += HandleFieldChanged!;
|
||||||
FormContext.OnValidationStateChanged += ValidationChanged!;
|
FormContext.OnValidationStateChanged += ValidationChanged!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
Interceptor.DisposeEvent();
|
Interceptor.DisposeEvent();
|
||||||
FormContext.OnFieldChanged -= HandleFieldChanged!;
|
FormContext.OnFieldChanged -= HandleFieldChanged!;
|
||||||
FormContext.OnValidationStateChanged -= ValidationChanged!;
|
FormContext.OnValidationStateChanged -= ValidationChanged!;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,8 +1,8 @@
|
||||||
{
|
{
|
||||||
"appInfo": {
|
"appInfo": {
|
||||||
"name": "Wonky Online",
|
"name": "Wonky Online",
|
||||||
"version": "138.5",
|
"version": "139.0",
|
||||||
"rc": false,
|
"rc": true,
|
||||||
"sandBox": false,
|
"sandBox": false,
|
||||||
"image": "grumpy-coder.png"
|
"image": "grumpy-coder.png"
|
||||||
},
|
},
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"apiConfig": {
|
"apiConfig": {
|
||||||
"baseUrl": "https://zeta.innotec.dk",
|
"baseUrl": "https://dev.innotec.dk",
|
||||||
"catalog": "api/v2/catalog/country",
|
"catalog": "api/v2/catalog/country",
|
||||||
"crmCustomers": "api/v2/crm/companies",
|
"crmCustomers": "api/v2/crm/companies",
|
||||||
"crmInventoryExt": "history/inventory",
|
"crmInventoryExt": "history/inventory",
|
||||||
|
|
Loading…
Reference in a new issue