refactoring of AccountTypes, Accounts, Contacts, Products and ProductLines

pull/1/head
DJh2o2 2023-01-10 17:17:24 +07:00
parent 4c90bf6559
commit d43c22917e
10 changed files with 144 additions and 113 deletions

@ -2,24 +2,42 @@
@using Gremlin_BlazorServer.Data.EntityClasses;
@using Gremlin_BlazorServer.Services;
@using System.Globalization;
@using System.Diagnostics;
@inject ControllerService<AccountType> AccountTypeService
<h1>AccountTypes</h1>
<DataGrid TItem="AccountType" Data="@accountTypes" Editable ShowPager Bordered Hoverable Sortable Filterable Striped Responsive>
<DataGrid TItem="AccountType" Data="@accountTypes" SelectedRow="@selectedAccountType" SelectedRowChanged="@OnSelectedAccountTypeChanged" Editable ShowPager Bordered Hoverable Sortable Filterable Striped Responsive>
<DataGridCommandColumn />
<DataGridColumn Field="@nameof(AccountType.AccountTypeCode)" Caption="AccountTypeCode" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(AccountType.AccountTypeDescription)" Caption="AccountTypeDescription" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(AccountType.DataStatus)" Caption="DataStatus" Filterable Sortable Editable/>
</DataGrid>
<h2>@selectedAccountType.AccountTypeCode: @selectedAccountType.AccountTypeDescription</h2>
<DataGrid TItem="Account" Data="@accountsOfSelectedAccountType" Editable ShowPager Bordered Hoverable Sortable Filterable Striped Responsive>
<DataGridCommandColumn />
<DataGridColumn Field="@nameof(Account.AccountId)" Caption="AccountId" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Account.AccountName)" Caption="AccountName" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Account.Street)" Caption="Street" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Account.Zip)" Caption="Zip" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Account.City)" Caption="City" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Account.SapAccountNumber)" Caption="SapAccountNumber" Filterable Sortable Editable/>
</DataGrid>
@code {
List<AccountType> accountTypes = new();
AccountType selectedAccountType = new();
List<Account> accountsOfSelectedAccountType = new();
protected override async Task OnInitializedAsync()
{
accountTypes = await Task.Run(() => AccountTypeService.GetAllAsync());
selectedAccountType = accountTypes.First();
}
private async Task OnSelectedAccountTypeChanged(AccountType sAt)
{
selectedAccountType = sAt;
accountsOfSelectedAccountType = await AccountTypeService.GetAllAccountsAsync(selectedAccountType);
}
}

@ -0,0 +1,46 @@
@page "/Accounts/AccountIndex"
@using Gremlin_BlazorServer.Data.EntityClasses;
@using Gremlin_BlazorServer.Services;
@inject ControllerService<Account> AccountService
<h1>Accounts</h1>
<DataGrid TItem="Account" Data="@accounts" SelectedRow="@selectedAccount" SelectedRowChanged="@OnSelectedAccountChanged" Editable ShowPager Bordered Hoverable Sortable Filterable Striped Responsive>
<DataGridCommandColumn />
<DataGridColumn Field="@nameof(Account.AccountId)" Caption="AccountId" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Account.AccountName)" Caption="AccountName" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Account.Street)" Caption="Street" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Account.Zip)" Caption="Zip" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Account.City)" Caption="City" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Account.SapAccountNumber)" Caption="SapAccountNumber" Filterable Sortable Editable/>
</DataGrid>
<h2>Contacts in @selectedAccount.AccountName</h2>
<DataGrid TItem="Contact" Data="@contactsInSelectedAccount" Editable ShowPager Bordered Hoverable Sortable Filterable Striped Responsive>
<DataGridCommandColumn />
<DataGridColumn Field="@nameof(Contact.ContactId)" Caption="ContactId" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Contact.AccountId)" Caption="AccountId" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Contact.LastName)" Caption="LastName" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Contact.FirstName)" Caption="FirstName" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Contact.Gender)" Caption="Gender" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Contact.EMail)" Caption="EMail" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Contact.SapContactNumber)" Caption="SAPContactNumber" Filterable Sortable Editable/>
</DataGrid>
@code {
List<Account> accounts = new();
Account selectedAccount = new();
List<Contact> contactsInSelectedAccount = new();
protected override async Task OnInitializedAsync()
{
accounts = await Task.Run(() => AccountService.GetAllAsync());
selectedAccount = accounts.First();
}
private async Task OnSelectedAccountChanged(Account sA)
{
selectedAccount = sA;
contactsInSelectedAccount = await AccountService.GetAllContactsAsync(selectedAccount);
}
}

@ -1,82 +0,0 @@
@page "/Accounts/Index"
@using Gremlin_BlazorServer.Data.EntityClasses;
@using Gremlin_BlazorServer.Services;
@inject AccountService AccountService
<h1>Accounts</h1>
<div class="text-center bg-blue-100">
<input class="border-4 w-1/3 rounded m-6 p-6 h-8
border-blue-300" @bind-value="SearchAccount"
@bind-value:event="oninput" placeholder="Search by AccountName"
@onchange="SearchAccount_OnChange"/>
</div>
<NavLink class="nav-link" href="Accounts/Add">
<span class="oi oi-plus" aria-hidden="true">Add New Account</span>
</NavLink>
@if (allAccounts is null)
{
<p><em>Loading... !</em></p>
}
else
{
<p>Es wurden @filteredAccounts.Count Accounts gefunden.</p>
@if (allAccounts != null)
{
<table class="table">
<thead>
<tr>
<th>@nameof(Account.AccountId)</th>
<th>@nameof(Account.AccountName)</th>
<th>@nameof(Account.Street)</th>
<th>@nameof(Account.Zip)</th>
<th>@nameof(Account.City)</th>
<th>@nameof(Account.SapAccountNumber)</th>
</tr>
</thead>
<tbody>
@foreach (Account account in filteredAccounts)
{<tr>
<td>@account.AccountId</td>
<td>@account.AccountName</td>
<td>@account.Street</td>
<td>@account.Zip</td>
<td>@account.City</td>
<td>@account.SapAccountNumber</td>
<td>
<a class="nav-link" href="Accounts/Edit/@account.AccountId">
<span class="oi oi-pencil" aria-hidden="true">Edit</span>
</a>
<a class="nav-link" href="Accounts/Delete/@account.AccountId">
<span class="oi oi-trash" aria-hidden="true">Delete</span>
</a>
</td>
</tr>}
</tbody>
</table>
}
}
@code {
public string SearchAccount = "";
List<Account> allAccounts = new();
List<Account> filteredAccounts = new();
protected override async Task OnInitializedAsync()
{
allAccounts = await Task.Run(() => AccountService.GetAllAccountsAsync());
filteredAccounts = allAccounts;
}
private void SearchAccount_OnChange()
{
filteredAccounts = allAccounts.Where(a => a.AccountName.ToLower().Contains(SearchAccount.ToLower())).ToList();
}
}

@ -1,9 +1,8 @@
@page "/Contacts/Index"
@page "/Contacts/ContactIndex"
@using Gremlin_BlazorServer.Data.EntityClasses;
@using Gremlin_BlazorServer.Services;
@* @inject ContactService ContactService *@
@inject ControllerService<Contact> ContactService
<h1>Contacts</h1>
@ -19,6 +18,7 @@
<DataGridColumn Field="@nameof(Contact.SapContactNumber)" Caption="SAPContactNumber" Filterable Sortable Editable/>
</DataGrid>
<h2>SelectedContact: @selectedContact.FirstName @selectedContact.LastName</h2>
<Column ColumnSize="ColumnSize.Is4">
<Fields>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">FirstName</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit ReadOnly Text="@selectedContact.FirstName"/></FieldBody></Field>

@ -40,7 +40,6 @@
private async Task OnSelectedProductLineChanged(ProductLine pL)
{
selectedProductLine = pL;
//productsOfSelectedProductLine = selectedProductLine.Products;
productsOfSelectedProductLine = await ProductService.GetAllProductsByProductLineAsync(selectedProductLine);
productsOfSelectedProductLine = await ProductService.GetAllProductsAsync(selectedProductLine);
}
}

@ -2,6 +2,7 @@
@using Gremlin_BlazorServer.Data.EntityClasses;
@using Gremlin_BlazorServer.Services;
@using System.Globalization
@inject ControllerService<Product> ProductService
@ -12,23 +13,22 @@
<DataGridColumn Field="@nameof(Product.ProductNumber)" Caption="ProductNumber" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Product.OptionNumber)" Caption="OptionNumber" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Product.SapShortDescription)" Caption="SapShortDescription" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Product.SapLongDescription)" Caption="SapLongDescription" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Product.CustomDescriptionId)" Caption="CustomDescriptionId" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Product.ListPrice)" Caption="ListPrice" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Product.Weight)" Caption="Weight" Filterable Sortable Editable/>
<DataGridColumn Field="@nameof(Product.ProductLineCode)" Caption="ProductLineCode" Filterable Sortable Editable/>
</DataGrid>
@* <Column ColumnSize="ColumnSize.Is4"> *@
@* <Fields> *@
@* <Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">FirstName</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit ReadOnly Text="@selectedProduct.FirstName"/></FieldBody></Field> *@
@* <Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">LastName</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit ReadOnly Text="@selectedProduct.LastName"/></FieldBody></Field> *@
@* <Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">AccountName</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit ReadOnly Text="@selectedProduct.Account.AccountName"/></FieldBody></Field> *@
@* <Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">AccountStreet</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit ReadOnly Text="@selectedProduct.Account.Street"/></FieldBody></Field> *@
@* <Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">AccountZIP</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit ReadOnly Text="@selectedProduct.Account.Zip.ToString()"/></FieldBody></Field> *@
@* <Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">AccountCity</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit ReadOnly Text="@selectedProduct.Account.City"/></FieldBody></Field> *@
@* </Fields> *@
@* </Column> *@
<Column ColumnSize="ColumnSize.Is9">
<Fields>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">ProductNumber</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit ReadOnly Text="@selectedProduct.ProductNumber"/></FieldBody></Field>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">OptionNumber</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit ReadOnly Text="@selectedProduct.OptionNumber"/></FieldBody></Field>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">SapShortDescription</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit ReadOnly Text="@selectedProduct.SapShortDescription"/></FieldBody></Field>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">SapLongDescription</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit ReadOnly Text="@selectedProduct.SapLongDescription"/></FieldBody></Field>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">Heading</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit ReadOnly Text="@selectedProduct.CustomDescription.Heading"/></FieldBody></Field>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">CoverletterText</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit ReadOnly Text="@selectedProduct.CustomDescription.CoverletterText"/></FieldBody></Field>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">DescriptionText</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit ReadOnly Text="@selectedProduct.CustomDescription.DescriptionText"/></FieldBody></Field>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">Weight</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit ReadOnly Text="@selectedProduct.Weight.ToString(CultureInfo.CurrentCulture)"/></FieldBody></Field>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">ListPrice</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit ReadOnly Text="@selectedProduct.ListPrice.ToString(CultureInfo.CurrentCulture)"/></FieldBody></Field>
</Fields>
</Column>
@code {
List<Product> products = new();

@ -31,8 +31,8 @@
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">Angebotsname:</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit Text="@selectedQuote.Description"/></FieldBody></Field>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">Angebotsnummer:</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit Text="@selectedQuote.QuotationNumber"/></FieldBody></Field>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">Angebotspfad:</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6">@selectedQuote.Path</FieldBody></Field>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">Gewährleistung (Monate):</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6">@selectedQuote.Warranty</FieldBody></Field>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">Angebotsgültigkeit (Tage):</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit Text="@selectedQuote.ValidFor.ToString()"/></FieldBody></Field>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">Gewährleistung (Monate):</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6">@selectedQuote.Warranty.ToString(CultureInfo.CurrentCulture)</FieldBody></Field>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">Angebotsgültigkeit (Tage):</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit Text="@selectedQuote.ValidFor.ToString(CultureInfo.CurrentCulture)"/></FieldBody></Field>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">Mehrwertsteuer (%):</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit Text="@selectedQuote.Vat.ToString(CultureInfo.CurrentCulture)"/></FieldBody></Field>
<Field Horizontal><FieldLabel ColumnSize="ColumnSize.Is4">Versandkosten (%):</FieldLabel><FieldBody ColumnSize="ColumnSize.Is6"><TextEdit Text="@selectedQuote.Freight.ToString(CultureInfo.CurrentCulture)" /></FieldBody></Field>
</Fields>

@ -13,11 +13,11 @@ builder.Services.AddServerSideBlazor();
builder.Services.AddScoped<GremlinDb>();
builder.Services.AddScoped<ControllerService<Contact>>();
builder.Services.AddScoped<ControllerService<Account>>();
builder.Services.AddScoped<ControllerService<AccountType>>();
builder.Services.AddScoped<ControllerService<ProductLine>>();
builder.Services.AddScoped<ControllerService<Product>>();
builder.Services.AddScoped<AccountService>();
builder.Services.AddScoped<CustomDescriptionService>();
builder.Services.AddScoped<LineItemService>();
builder.Services.AddScoped<QuoteService>();

@ -1,5 +1,4 @@
using Blazorise.Extensions;
using Gremlin_BlazorServer.Data.DBClasses;
using Gremlin_BlazorServer.Data.DBClasses;
using Gremlin_BlazorServer.Data.EntityClasses;
using Microsoft.EntityFrameworkCore;
@ -70,12 +69,11 @@ namespace Gremlin_BlazorServer.Services
}
}
public async Task<List<Product>> GetAllProductsByProductLineAsync(ProductLine productLine)
public async Task<List<Product>> GetAllProductsAsync(ProductLine productLine)
{
try
{
List<Product> products = await gremlinDb.Products.Where(p => p.ProductLine.Equals(productLine)).ToListAsync();
return products;
return await gremlinDb.Products.Where(p => p.ProductLine.Equals(productLine)).ToListAsync();
}
catch (Exception e)
{
@ -83,5 +81,57 @@ namespace Gremlin_BlazorServer.Services
throw;
}
}
public async Task<List<Account>> GetAllAccountsAsync(AccountType accountType)
{
try
{
return await gremlinDb.Accounts.Where(a => a.AccountType.Equals(accountType)).ToListAsync();
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
public async Task<List<Contact>> GetAllContactsAsync(Account account)
{
try
{
return await gremlinDb.Contacts.Where(a => a.Account.Equals(account)).ToListAsync();
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
// public async Task<List<T>> GetAllAsync(Func<object, T> searcher)
// {
// try
// {
// List<T> results = await gremlinDb.Set<T>().ToListAsync();
//
// // return results.Where(s => s.TSearch.Equals(search)).ToList();
// }
// catch (Exception e)
// {
// Console.WriteLine(e);
// throw;
// }
// }
//
// public void Search(ISearcher<Account,AccountType> searcher, T search)
// {
// List<T> results = searcher.Search(search);
// }
//
// public interface ISearcher<out TResult, in TSearch>
// {
// TResult Search(TSearch search);
// }
}
}

@ -20,12 +20,12 @@
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="Contacts/Index">
<NavLink class="nav-link" href="Contacts/ContactIndex">
<span class="oi oi-target" aria-hidden="true"></span>Contacts
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="Accounts/Index">
<NavLink class="nav-link" href="Accounts/AccountIndex">
<span class="oi oi-star" aria-hidden="true"></span>Accounts
</NavLink>
</div>