Files
marechai/Marechai/Pages/Admin/Details/Company.razor.cs

233 lines
7.7 KiB
C#
Raw Normal View History

2020-05-27 21:24:53 +01:00
using System;
2020-05-25 02:44:52 +01:00
using System.Collections.Generic;
using System.Threading.Tasks;
2020-05-27 21:24:53 +01:00
using Blazorise;
2020-05-25 02:44:52 +01:00
using Marechai.Database;
using Marechai.Database.Models;
2020-05-27 21:24:53 +01:00
using Marechai.Shared;
2020-05-25 02:44:52 +01:00
using Marechai.ViewModels;
using Microsoft.AspNetCore.Components;
namespace Marechai.Pages.Admin.Details
{
public partial class Company
{
2020-05-27 21:24:53 +01:00
List<CompanyViewModel> _companies;
List<Iso31661Numeric> _countries;
2020-05-27 22:30:06 +01:00
bool _creating;
2020-05-27 21:24:53 +01:00
bool _editing;
bool _loaded;
CompanyViewModel _model;
bool _unknownAddress;
bool _unknownCity;
bool _unknownCountry;
bool _unknownFacebook;
bool _unknownFounded;
bool _unknownPostalCode;
bool _unknownProvince;
bool _unknownSold;
bool _unknownSoldTo;
bool _unknownTwitter;
bool _unknownWebsite;
2020-05-25 02:44:52 +01:00
[Parameter]
public int Id { get; set; }
int Status
2020-05-25 02:44:52 +01:00
{
get => (int)_model.Status;
set => _model.Status = (CompanyStatus)value;
2020-05-25 02:44:52 +01:00
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if(_loaded)
return;
_loaded = true;
2020-05-27 22:30:06 +01:00
_creating = NavigationManager.ToBaseRelativePath(NavigationManager.Uri).ToLowerInvariant().
StartsWith("admin/companies/create", StringComparison.InvariantCulture);
if(Id <= 0 && !_creating)
2020-05-25 02:44:52 +01:00
return;
_countries = await CountriesService.GetAsync();
_companies = await Service.GetAsync();
2020-05-27 22:30:06 +01:00
_model = _creating ? new CompanyViewModel() : await Service.GetAsync(Id);
2020-05-25 02:44:52 +01:00
2020-05-27 22:30:06 +01:00
_editing = _creating || NavigationManager.ToBaseRelativePath(NavigationManager.Uri).ToLowerInvariant().
StartsWith("admin/companies/edit/",
StringComparison.InvariantCulture);
2020-05-27 21:24:53 +01:00
if(_editing)
SetCheckboxes();
StateHasChanged();
}
void SetCheckboxes()
{
_unknownWebsite = string.IsNullOrWhiteSpace(_model.Website);
_unknownCountry = !_model.CountryId.HasValue;
_unknownFounded = !_model.Founded.HasValue;
_unknownAddress = string.IsNullOrWhiteSpace(_model.Address);
_unknownFacebook = string.IsNullOrWhiteSpace(_model.Facebook);
_unknownCity = string.IsNullOrWhiteSpace(_model.City);
_unknownProvince = string.IsNullOrWhiteSpace(_model.Province);
_unknownTwitter = string.IsNullOrWhiteSpace(_model.Twitter);
_unknownPostalCode = string.IsNullOrWhiteSpace(_model.PostalCode);
_unknownSold = !_model.Sold.HasValue;
_unknownSoldTo = !_model.SoldToId.HasValue;
}
void OnEditClicked()
{
_editing = true;
SetCheckboxes();
StateHasChanged();
}
async void OnCancelClicked()
{
_editing = false;
2020-05-27 22:30:06 +01:00
if(_creating)
{
NavigationManager.ToBaseRelativePath("admin/companies");
return;
}
_model = await Service.GetAsync(Id);
2020-05-27 21:24:53 +01:00
SetCheckboxes();
2020-05-25 02:44:52 +01:00
StateHasChanged();
}
2020-05-27 21:24:53 +01:00
async void OnSaveClicked()
{
if(_unknownWebsite)
_model.Website = null;
else if(string.IsNullOrWhiteSpace(_model.Website))
return;
if(_unknownCountry)
_model.CountryId = null;
else if(_model.CountryId < 0)
return;
if(_unknownFounded)
_model.Founded = null;
else if(_model.Founded?.Date >= DateTime.UtcNow.Date)
return;
if(_unknownAddress)
_model.Address = null;
else if(string.IsNullOrWhiteSpace(_model.Address))
return;
if(_unknownFacebook)
_model.Facebook = null;
else if(string.IsNullOrWhiteSpace(_model.Facebook))
return;
if(_unknownFacebook)
_model.Facebook = null;
else if(string.IsNullOrWhiteSpace(_model.Facebook))
return;
if(_unknownCity)
_model.City = null;
else if(string.IsNullOrWhiteSpace(_model.City))
return;
if(string.IsNullOrWhiteSpace(_model.Name))
return;
if(_unknownProvince)
_model.Province = null;
else if(string.IsNullOrWhiteSpace(_model.Province))
return;
if(_unknownTwitter)
_model.Twitter = null;
else if(string.IsNullOrWhiteSpace(_model.Twitter))
return;
if(_unknownPostalCode)
_model.PostalCode = null;
else if(string.IsNullOrWhiteSpace(_model.PostalCode))
return;
if(_unknownSoldTo)
_model.SoldToId = null;
else if(_model.SoldToId < 0)
return;
if(_unknownSold)
_model.Sold = null;
else if(_model.Sold?.Date >= DateTime.UtcNow.Date)
return;
2020-05-27 22:30:06 +01:00
if(_creating)
Id = await Service.CreateAsync(_model);
else
await Service.UpdateAsync(_model);
_editing = false;
_creating = false;
_model = await Service.GetAsync(Id);
2020-05-27 21:24:53 +01:00
SetCheckboxes();
StateHasChanged();
}
void ValidateName(ValidatorEventArgs e) =>
Validators.ValidateString(e, L["Name must be smaller than 256 characters."], 256);
void ValidateFounded(ValidatorEventArgs e) => Validators.ValidateDate(e);
void ValidateAddress(ValidatorEventArgs e) =>
Validators.ValidateString(e, L["Address must be smaller than 80 characters."], 80);
void ValidateCity(ValidatorEventArgs e) =>
Validators.ValidateString(e, L["City name must be smaller than 80 characters."], 80);
void ValidateProvince(ValidatorEventArgs e) =>
Validators.ValidateString(e, L["Province name must be smaller than 80 characters."], 80);
void ValidatePostalCode(ValidatorEventArgs e) =>
Validators.ValidateString(e, L["Postal code name must be smaller than 25 characters."], 25);
void ValidateSold(ValidatorEventArgs e) => Validators.ValidateDate(e);
void ValidateWebsite(ValidatorEventArgs e) =>
Validators.ValidateUrl(e, L["Webpage must be smaller than 255 characters."], 255);
void ValidateTwitter(ValidatorEventArgs e)
{
if(!(e.Value is string twitter))
{
e.Status = ValidationStatus.Error;
return;
}
if(twitter.Length < 1 ||
twitter.Length > 255)
{
e.ErrorText = L["Twitter handle must be smaller than 255 characters."];
e.Status = ValidationStatus.Error;
return;
}
if(twitter[0] == '@')
return;
e.ErrorText = L["Invalid Twitter handle."];
e.Status = ValidationStatus.Error;
}
void ValidateFacebook(ValidatorEventArgs e) =>
Validators.ValidateString(e, L["Facebook username must be smaller than 256 characters."], 256);
2020-05-25 02:44:52 +01:00
}
}