Contacts CRUD

pull/1/head
DJh2o2 2022-11-24 09:44:44 +07:00
parent cfea0eb37a
commit f9deadb7e0
19 changed files with 425 additions and 267 deletions

@ -34,8 +34,8 @@
//metadata: //metadata:
public DateTime DataCreationDate { get; set; } = DateTime.Now; public DateTime DataCreationDate { get; set; } = DateTime.Now;
public DateTime DataModificationDate { get; set; } = DateTime.Now; public DateTime DataModificationDate { get; set; } = DateTime.Now;
public DateTime DataValidFrom { get; set; } public DateTime DataValidFrom { get; set; } = DateTime.Now;
public DateTime DataValidUntil { get; set; } public DateTime DataValidUntil { get; set; } = DateTime.MaxValue;
public string? DataModificationByUser { get; set; } = "Gremlin"; public string? DataModificationByUser { get; set; } = "Gremlin";
public uint DataVersionNumber { get; set; } public uint DataVersionNumber { get; set; }
public string? DataVersionComment { get; set; } public string? DataVersionComment { get; set; }

@ -43,13 +43,13 @@
public string? SAPCompetitiveIBase { get; set; } public string? SAPCompetitiveIBase { get; set; }
//metadata: //metadata:
public DateTime DataCreationDate { get; set; } public DateTime DataCreationDate { get; set; } = DateTime.Now;
public DateTime DataModificationDate { get; set; } public DateTime DataModificationDate { get; set; } = DateTime.Now;
public DateTime DataValidFrom { get; set; } public DateTime DataValidFrom { get; set; } = DateTime.Now;
public DateTime DataValidUntil { get; set; } public DateTime DataValidUntil { get; set; } = DateTime.MaxValue;
public string? DataModificationByUser { get; set; } public string? DataModificationByUser { get; set; }
public uint DataVersionNumber { get; set; } public uint DataVersionNumber { get; set; }
public string? DataVersionComment { get; set; } public string? DataVersionComment { get; set; }
public string? DataStatus { get; set; } public string? DataStatus { get; set; } = "Active";
} }
} }

@ -1,36 +0,0 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
using Gremlin_BlazorServer.Data.DBClasses;
using Gremlin_BlazorServer.Data.EntityClasses;
namespace Gremlin_BlazorServer.Models
{
public class AccountModel : PageModel
{
private readonly GremlinContext gremlinContext;
public AccountModel(GremlinContext context) => gremlinContext = context;
public Account Account { get; set; } = default!;
public async Task<IActionResult> OnGetAsync(uint? id)
{
if (id == null || gremlinContext.Accounts == null)
{
return NotFound();
}
Account? account = await gremlinContext.Accounts.FirstOrDefaultAsync(account => account.AccountId == id);
if (account == null)
{
return NotFound();
}
else
{
Account = account;
}
return Page();
}
}
}

@ -1,50 +0,0 @@
using Gremlin_BlazorServer.Data.DBClasses;
using Gremlin_BlazorServer.Data.EntityClasses;
using Gremlin_BlazorServer.ViewModels;
namespace Gremlin_BlazorServer.Models
{
public class ContactModel
{
internal static async Task<List<ContactViewModel>> GetContactViewModel()
{
GremlinContext gremlinContext = new();
List<Contact> contacts = DbHelper.GetAllContacts(gremlinContext);
return ConvertContactToContactVM(contacts);
}
internal static ContactViewModel GetContactViewModel(string lastName)
{
GremlinContext gremlinContext = new();
Contact contact = DbHelper.GetContact(gremlinContext, lastName);
return ConvertContactToContactVM(contact);
}
internal static ContactViewModel GetContactViewModel(uint contactId)
{
GremlinContext gremlinContext = new();
Contact contact = DbHelper.GetContact(gremlinContext, contactId);
return ConvertContactToContactVM(contact);
}
public static ContactViewModel ConvertContactToContactVM(Contact contact)
{
return new(contact.ContactId, contact.AccountId, contact.LastName, contact.FirstName, contact.Gender, contact.EMail);
}
public static List<ContactViewModel> ConvertContactToContactVM(List<Contact> contacts)
{
List<ContactViewModel> contactsVM = new();
if (contacts != null)
{
foreach (Contact contact in contacts)
{
ContactViewModel contactVM = new(contact.ContactId, contact.AccountId, contact.LastName, contact.FirstName, contact.Gender, contact.EMail);
contactsVM.Add(contactVM);
}
}
return contactsVM;
}
}
}

@ -1,4 +1,4 @@
@page "/AddAccount" @page "/Accounts/Add"
@using Gremlin_BlazorServer.Data.EntityClasses; @using Gremlin_BlazorServer.Data.EntityClasses;
@using Gremlin_BlazorServer.Services; @using Gremlin_BlazorServer.Services;
@ -56,9 +56,9 @@
if (await accountService.InsertAccountAsync(account)) if (await accountService.InsertAccountAsync(account))
{ {
navigationManager.NavigateTo("Accounts"); navigationManager.NavigateTo("Accounts/Index");
} }
} }
void Cancel() => navigationManager.NavigateTo("Accounts"); void Cancel() => navigationManager.NavigateTo("Accounts/Index");
} }

@ -1,4 +1,4 @@
@page "/DeleteAccount/{AccountId}" @page "/Accounts/Delete/{AccountId}"
@using Gremlin_BlazorServer.Data.EntityClasses; @using Gremlin_BlazorServer.Data.EntityClasses;
@using Gremlin_BlazorServer.Services; @using Gremlin_BlazorServer.Services;
@ -38,7 +38,7 @@
<div class="row"> <div class="row">
<div class="col-md-4"> <div class="col-md-4">
<div class="form-group"> <div class="form-group">
<input type="button" class="btn btn-danger" @onclick="@DelAccount" value="Delete" /> <input type="button" class="btn btn-danger" @onclick="@DeleteAccount" value="Delete" />
<input type="button" class="btn btn-primary" @onclick="@Cancel" value="Cancel" /> <input type="button" class="btn btn-primary" @onclick="@Cancel" value="Cancel" />
</div> </div>
</div> </div>
@ -54,13 +54,13 @@
{ {
account = await Task.Run(() => accountService.GetAccountAsync(Convert.ToUInt32(AccountId))); account = await Task.Run(() => accountService.GetAccountAsync(Convert.ToUInt32(AccountId)));
} }
protected async void DelAccount() protected async void DeleteAccount()
{ {
await accountService.DeleteAccountAsync(account); await accountService.DeleteAccountAsync(account);
navigationManager.NavigateTo("Accounts"); navigationManager.NavigateTo("Accounts/Index");
} }
void Cancel() void Cancel()
{ {
navigationManager.NavigateTo("Accounts"); navigationManager.NavigateTo("Accounts/Index");
} }
} }

@ -1,4 +1,4 @@
@page "/EditAccount/{AccountId}" @page "/Accounts/Edit/{AccountId}"
@using Gremlin_BlazorServer.Data.EntityClasses; @using Gremlin_BlazorServer.Data.EntityClasses;
@using Gremlin_BlazorServer.Services; @using Gremlin_BlazorServer.Services;
@ -63,8 +63,8 @@
protected async void UpdateAccount() protected async void UpdateAccount()
{ {
await accountService.UpdateAccountAsync(account); await accountService.UpdateAccountAsync(account);
navigationManager.NavigateTo("Accounts"); navigationManager.NavigateTo("Accounts/Index");
} }
void Cancel() => navigationManager.NavigateTo("Accounts"); void Cancel() => navigationManager.NavigateTo("Accounts/Index");
} }

@ -1,4 +1,4 @@
@page "/accounts" @page "/Accounts/Index"
@using Gremlin_BlazorServer.Data.EntityClasses; @using Gremlin_BlazorServer.Data.EntityClasses;
@using Gremlin_BlazorServer.Services; @using Gremlin_BlazorServer.Services;
@ -14,7 +14,7 @@
@onchange="SearchAccount_OnChange"/> @onchange="SearchAccount_OnChange"/>
</div> </div>
<NavLink class="nav-link" href="AddAccount"> <NavLink class="nav-link" href="Accounts/Add">
<span class="oi oi-plus" aria-hidden="true">Add New Account</span> <span class="oi oi-plus" aria-hidden="true">Add New Account</span>
</NavLink> </NavLink>
@ -49,10 +49,10 @@ else
<td>@account.City</td> <td>@account.City</td>
<td>@account.SAPAccountNumber</td> <td>@account.SAPAccountNumber</td>
<td> <td>
<a class="nav-link" href="EditAccount/@account.AccountId"> <a class="nav-link" href="Accounts/Edit/@account.AccountId">
<span class="oi oi-pencil" aria-hidden="true">Edit</span> <span class="oi oi-pencil" aria-hidden="true">Edit</span>
</a> </a>
<a class="nav-link" href="DeleteAccount/@account.AccountId"> <a class="nav-link" href="Accounts/Delete/@account.AccountId">
<span class="oi oi-trash" aria-hidden="true">Delete</span> <span class="oi oi-trash" aria-hidden="true">Delete</span>
</a> </a>
</td> </td>

@ -1,69 +0,0 @@
@page "/contacts"
@using Gremlin_BlazorServer.Data.DBClasses;
@using Gremlin_BlazorServer.Models;
@using Gremlin_BlazorServer.ViewModels;
<PageTitle>Contacts</PageTitle>
<h1>Contacts in Regulus</h1>
<p>Hier werden die Daten aus der MariaDB geladen und angezeigt.</p>
<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="searchContact"
@bind-value:event="oninput" placeholder="Search by LastName"
@onchange="SearchContact_OnChange"/>
</div>
@if (!filteredContacts.Any())
{
<p><em>No contacts found!</em></p>
}
else
{
<p><em>@filteredContacts.Count contacts found!</em></p>
<table class="table">
<thead>
<tr>
<th>ContactID</th>
<th>AccountID</th>
<th>FirstName</th>
<th>LastName</th>
<th>Gender</th>
<th>EMail</th>
</tr>
</thead>
<tbody>
@foreach (ContactViewModel contact in filteredContacts)
{
<tr>
<td>@contact.ContactId</td>
<td>@contact.AccountId</td>
<td>@contact.FirstName</td>
<td>@contact.LastName</td>
<td>@contact.Gender</td>
<td>@contact.EMail</td>
</tr>
}
</tbody>
</table>
}
@code {
public string searchContact = "";
private List<ContactViewModel> allContacts = new();
private List<ContactViewModel> filteredContacts = new();
protected override async Task OnInitializedAsync()
{
allContacts = await ContactModel.GetContactViewModel();
filteredContacts = allContacts;
//allContacts = await DataAccessService.GetContactsFromDb("");
}
private void SearchContact_OnChange()
{
filteredContacts = allContacts.Where(c => c.LastName.ToLower().Contains(searchContact.ToLower())).ToList();
}
}

@ -0,0 +1,71 @@
@page "/Contacts/Add"
@using Gremlin_BlazorServer.Data.EntityClasses;
@using Gremlin_BlazorServer.Services;
@inject ContactService contactService
@inject NavigationManager navigationManager
<h2>Add Contact</h2>
<hr />
<form>
<div class="row">
<div class="col-md-8">
<div class="form-group">
<label for="ContactId" class="control-label">ContactId</label>
<input form="ContactId" class="form-control" @bind="@contact.ContactId" />
</div>
<div class="form-group">
<label for="AccountId" class="control-label">AccountId</label>
<input form="AccountId" class="form-control" @bind="@contact.AccountId" />
</div>
<div class="form-group">
<label for="LastName" class="control-label">LastName</label>
<input form="LastName" class="form-control" @bind="@contact.LastName" />
</div>
<div class="form-group">
<label for="FirstName" class="control-label">FirstName</label>
<input form="FirstName" class="form-control" @bind="@contact.FirstName" />
</div>
<div class="form-group">
<label for="Gender" class="control-label">Gender</label>
<input form="Gender" class="form-control" @bind="@contact.Gender" />
</div>
<div class="form-group">
<label for="EMail" class="control-label">EMail</label>
<input form="EMail" class="form-control" @bind="@contact.EMail" />
</div>
<div class="form-group">
<label for="SAPContactNumber" class="control-label">SAPContactNumber</label>
<input form="SAPContactNumber" class="form-control" @bind="@contact.SAPContactNumber" />
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<input type="button" class="btn btn-primary" @onclick="@CreateContact" value="Save"/>
<input type="button" class="btn btn-primary" @onclick="@Cancel" value="Cancel"/>
</div>
</div>
</div>
</form>
@code {
Contact contact = new Contact();
protected async void CreateContact()
{
contact.DataModificationByUser = "Gremlin_BlazorServer";
//contact.DataStatus = "Active";
if (await contactService.InsertContactAsync(contact))
{
navigationManager.NavigateTo("Contacts/Index");
}
}
void Cancel() => navigationManager.NavigateTo("Contacts/Index");
}

@ -0,0 +1,74 @@
@page "/Contacts/Delete/{ContactId}"
@using Gremlin_BlazorServer.Data.EntityClasses;
@using Gremlin_BlazorServer.Services;
@inject ContactService contactService
@inject NavigationManager navigationManager
<h2>Delete Employee</h2>
<hr />
<h3>Are you sure want to delete this?</h3>
<form>
<div class="row">
<div class=" col-md-8">
<div class="form-group">
<label>ContactId:</label>
<label>@contact.ContactId</label>
</div>
<div class="form-group">
<label>ContactId:</label>
<label>@contact.ContactId</label>
</div>
<div class="form-group">
<label>LastName:</label>
<label>@contact.LastName</label>
</div>
<div class="form-group">
<label>FirstName:</label>
<label>@contact.FirstName</label>
</div>
<div class="form-group">
<label>Gender:</label>
<label>@contact.Gender</label>
</div>
<div class="form-group">
<label>EMail:</label>
<label>@contact.EMail</label>
</div>
<div class="form-group">
<label>SAPContactNumber:</label>
<label>@contact.SAPContactNumber</label>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<input type="button" class="btn btn-danger" @onclick="@DeleteContact" value="Delete" />
<input type="button" class="btn btn-primary" @onclick="@Cancel" value="Cancel" />
</div>
</div>
</div>
</form>
@code {
[Parameter]
public string contactId { get; set; } = default!;
Contact? contact = new Contact();
protected override async Task OnInitializedAsync()
{
contact = await Task.Run(() => contactService.GetContactAsync(Convert.ToUInt32(contactId)));
}
protected async void DeleteContact()
{
await contactService.DeleteContactAsync(contact);
navigationManager.NavigateTo("Contacts/Index");
}
void Cancel()
{
navigationManager.NavigateTo("Contacts/Index");
}
}

@ -0,0 +1,76 @@
@page "/Contacts/Edit/{ContactId}"
@using Gremlin_BlazorServer.Data.EntityClasses;
@using Gremlin_BlazorServer.Services;
@inject ContactService contactService
@inject NavigationManager navigationManager
<h2>Edit Contact</h2>
<hr />
<form>
<div class="row">
<div class="col-md-8">
<div class="form-group">
<label for="ContactId" class="control-label">ContactId</label>
<input form="ContactId" class="form-control" @bind="@contact.ContactId" />
</div>
<div class="form-group">
<label for="AccountId" class="control-label">AccountId</label>
<input form="AccountId" class="form-control" @bind="@contact.AccountId" />
</div>
<div class="form-group">
<label for="LastName" class="control-label">LastName</label>
<input form="LastName" class="form-control" @bind="@contact.LastName" />
</div>
<div class="form-group">
<label for="FirstName" class="control-label">FirstName</label>
<input form="FirstName" class="form-control" @bind="@contact.FirstName" />
</div>
<div class="form-group">
<label for="Gender" class="control-label">Gender</label>
<input form="Gender" class="form-control" @bind="@contact.Gender" />
</div>
<div class="form-group">
<label for="EMail" class="control-label">EMail</label>
<input form="EMail" class="form-control" @bind="@contact.EMail" />
</div>
<div class="form-group">
<label for="SAPContactNumber" class="control-label">SAPContactNumber</label>
<input form="SAPContactNumber" class="form-control" @bind="@contact.SAPContactNumber" />
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
<input type="button" class="btn btn-primary" @onclick="@UpdateContact" value="Update" />
<input type="button" class="btn btn-primary" @onclick="@Cancel" value="Cancel" />
</div>
</div>
</div>
</form>
@code {
[Parameter]
public string? contactId { get; set; }
Contact? contact = new Contact();
protected override async Task OnInitializedAsync()
{
contact = await Task.Run(() => contactService.GetContactAsync(Convert.ToUInt32(contactId)));
}
protected async void UpdateContact()
{
contact.DataModificationByUser = "Gremlin_BlazorServer";
contact.DataModificationDate = DateTime.Now;
contact.DataVersionNumber++;
await contactService.UpdateContactAsync(contact);
navigationManager.NavigateTo("Contacts/Index");
}
void Cancel() => navigationManager.NavigateTo("Contacts/Index");
}

@ -0,0 +1,83 @@
@page "/Contacts/Index"
@using Gremlin_BlazorServer.Data.EntityClasses;
@using Gremlin_BlazorServer.Services;
@inject ContactService ContactService
<h1>Contacts</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="searchContact"
@bind-value:event="oninput" placeholder="Search by LastName"
@onchange="SearchContact_OnChange"/>
</div>
<NavLink class="nav-link" href="Contacts/Add">
<span class="oi oi-plus" aria-hidden="true">Add New Contact</span>
</NavLink>
@if (allContacts is null)
{
<p><em>Loading... !</em></p>
}
else
{
<p>Es wurden @filteredContacts.Count Contacts gefunden.</p>
@if (allContacts != null)
{
<table class="table">
<thead>
<tr>
<th>@nameof(Contact.ContactId)</th>
<th>@nameof(Contact.AccountId)</th>
<th>@nameof(Contact.LastName)</th>
<th>@nameof(Contact.FirstName)</th>
<th>@nameof(Contact.Gender)</th>
<th>@nameof(Contact.EMail)</th>
<th>@nameof(Contact.SAPContactNumber)</th>
</tr>
</thead>
<tbody>
@foreach (Contact Contact in filteredContacts)
{<tr>
<td>@Contact.ContactId</td>
<td>@Contact.AccountId</td>
<td>@Contact.LastName</td>
<td>@Contact.FirstName</td>
<td>@Contact.Gender</td>
<td>@Contact.EMail</td>
<td>@Contact.SAPContactNumber</td>
<td>
<a class="nav-link" href="Contacts/Edit/@Contact.ContactId">
<span class="oi oi-pencil" aria-hidden="true">Edit</span>
</a>
<a class="nav-link" href="Contacts/Delete/@Contact.ContactId">
<span class="oi oi-trash" aria-hidden="true">Delete</span>
</a>
</td>
</tr>}
</tbody>
</table>
}
}
@code {
public string searchContact = "";
List<Contact> allContacts = new();
List<Contact> filteredContacts = new();
protected override async Task OnInitializedAsync()
{
allContacts = await Task.Run(() => ContactService.GetAllContactsAsync());
filteredContacts = allContacts;
}
private void SearchContact_OnChange()
{
filteredContacts = allContacts.Where(a => a.LastName.ToLower().Contains(searchContact.ToLower())).ToList();
}
}

@ -8,8 +8,10 @@ WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
// Add services to the container. // Add services to the container.
builder.Services.AddRazorPages(); builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor(); builder.Services.AddServerSideBlazor();
builder.Services.AddScoped<GremlinContext>(); builder.Services.AddScoped<GremlinContext>();
builder.Services.AddScoped<AccountService>(); builder.Services.AddScoped<AccountService>();
builder.Services.AddScoped<ContactService>();
builder.WebHost.UseWebRoot("wwwroot"); builder.WebHost.UseWebRoot("wwwroot");
builder.WebHost.UseStaticWebAssets(); builder.WebHost.UseStaticWebAssets();

@ -0,0 +1,56 @@
using Gremlin_BlazorServer.Data.DBClasses;
using Gremlin_BlazorServer.Data.EntityClasses;
using Microsoft.EntityFrameworkCore;
using System.Diagnostics;
namespace Gremlin_BlazorServer.Services
{
public class ContactService
{
private readonly GremlinContext gremlinContext;
public ContactService(GremlinContext gC) => gremlinContext = gC;
public void ConfigureServices(IServiceCollection services)
{
_ = services.AddDbContext<GremlinContext>(ServiceLifetime.Scoped);
}
public async Task<List<Contact>> GetAllContactsAsync() => await gremlinContext.Contacts.ToListAsync();
public async Task<bool> InsertContactAsync(Contact Contact)
{
try
{
_ = await gremlinContext.Contacts.AddAsync(Contact);
_ = await gremlinContext.SaveChangesAsync();
return true;
}
catch (Exception exception)
{
Debug.WriteLine(exception.Message);
return false;
}
}
public async Task<Contact?> GetContactAsync(uint contactId)
{
Contact? Contact = await gremlinContext.Contacts.FirstOrDefaultAsync(Contact => Contact.ContactId.Equals(contactId));
return Contact;
}
public async Task<bool> UpdateContactAsync(Contact contact)
{
_ = gremlinContext.Contacts.Update(contact);
_ = await gremlinContext.SaveChangesAsync();
return true;
}
public async Task<bool> DeleteContactAsync(Contact contact)
{
_ = gremlinContext.Remove(contact);
_ = await gremlinContext.SaveChangesAsync();
return true;
}
}
}

@ -15,12 +15,12 @@
</NavLink> </NavLink>
</div> </div>
<div class="nav-item px-3"> <div class="nav-item px-3">
<NavLink class="nav-link" href="contacts"> <NavLink class="nav-link" href="Contacts/Index">
<span class="oi oi-list-rich" aria-hidden="true"></span> Contacts <span class="oi oi-list-rich" aria-hidden="true"></span> Contacts
</NavLink> </NavLink>
</div> </div>
<div class="nav-item px-3"> <div class="nav-item px-3">
<NavLink class="nav-link" href="accounts"> <NavLink class="nav-link" href="Accounts/Index">
<span class="oi oi-list-rich" aria-hidden="true"></span> Accounts <span class="oi oi-list-rich" aria-hidden="true"></span> Accounts
</NavLink> </NavLink>
</div> </div>

@ -1,9 +1,4 @@
using Gremlin_BlazorServer.Data.EntityClasses; namespace Gremlin_BlazorServer.Utilities
using Gremlin_BlazorServer.Models;
using Gremlin_BlazorServer.ViewModels;
using System.Text;
namespace Gremlin_BlazorServer.Utilities
{ {
internal class TexHandler internal class TexHandler
{ {
@ -31,44 +26,44 @@ namespace Gremlin_BlazorServer.Utilities
// } // }
// } // }
public static StringBuilder CreateBriefkopf(ContactViewModel contactVM, bool tex = false) //public static StringBuilder CreateBriefkopf(ContactViewModel contactVM, bool tex = false)
{
StringBuilder briefkopf = new();
_ = contactVM.Gender == (byte)Enums.Gender.Male
? briefkopf.AppendLine($"Herr {contactVM.FirstName} {contactVM.LastName}")
: briefkopf.AppendLine($"Frau {contactVM.FirstName} {contactVM.LastName}");
if (tex)
{
_ = briefkopf.AppendLine($"\\\\");
}
//AccountViewModel accountVM = AccountModel.GetAccountViewModel(contactVM.AccountId);
//AccountNamen mit "&" im Namen abfangen
//if (tex && accountVM.AccountName.Contains('&'))
//{ //{
// string[] accountNameSplit = accountVM.AccountName.Split("&"); //.Replace? // StringBuilder briefkopf = new();
// accountVM.AccountName = "";
// for (int i = 0; i < accountNameSplit.Length; i++) // _ = contactVM.Gender == (byte)Enums.Gender.Male
// ? briefkopf.AppendLine($"Herr {contactVM.FirstName} {contactVM.LastName}")
// : briefkopf.AppendLine($"Frau {contactVM.FirstName} {contactVM.LastName}");
// if (tex)
// { // {
// accountVM.AccountName += i < accountNameSplit.Length - 1 // _ = briefkopf.AppendLine($"\\\\");
// ? accountNameSplit[i] + "\\&"
// : accountNameSplit[i];
// }
// } // }
//_ = briefkopf.AppendLine($"{accountVM.AccountName}"); // //AccountViewModel accountVM = AccountModel.GetAccountViewModel(contactVM.AccountId);
//if (tex) { _ = briefkopf.AppendLine($"\\\\"); }
//_ = briefkopf.AppendLine($"{accountVM.AccountStreet}"); // //AccountNamen mit "&" im Namen abfangen
//if (tex) { _ = briefkopf.AppendLine($"\\\\"); } // //if (tex && accountVM.AccountName.Contains('&'))
// //{
// // string[] accountNameSplit = accountVM.AccountName.Split("&"); //.Replace?
// // accountVM.AccountName = "";
// // for (int i = 0; i < accountNameSplit.Length; i++)
// // {
// // accountVM.AccountName += i < accountNameSplit.Length - 1
// // ? accountNameSplit[i] + "\\&"
// // : accountNameSplit[i];
// // }
// //}
//_ = briefkopf.AppendLine($"{accountVM.AccountZIP} {accountVM.AccountCity}"); // //_ = briefkopf.AppendLine($"{accountVM.AccountName}");
//if (tex) { _ = briefkopf.AppendLine($"\\\\"); } // //if (tex) { _ = briefkopf.AppendLine($"\\\\"); }
return briefkopf; // //_ = briefkopf.AppendLine($"{accountVM.AccountStreet}");
} // //if (tex) { _ = briefkopf.AppendLine($"\\\\"); }
// //_ = briefkopf.AppendLine($"{accountVM.AccountZIP} {accountVM.AccountCity}");
// //if (tex) { _ = briefkopf.AppendLine($"\\\\"); }
// return briefkopf;
//}
// private static StringBuilder CreateTexFile(QuoteViewModel quoteVM) // private static StringBuilder CreateTexFile(QuoteViewModel quoteVM)
// { // {

@ -1,20 +0,0 @@
namespace Gremlin_BlazorServer.ViewModels
{
public class AccountViewModel
{
public string AccountName { get; set; }
public string AccountStreet { get; set; }
public uint AccountZIP { get; set; }
public string AccountCity { get; set; }
public string AccountTypeCode { get; set; }
public AccountViewModel(string accountName, string accountStreet, uint accountZIP, string accountCity, string accountTypeCode)
{
AccountName = accountName ?? throw new ArgumentNullException(nameof(accountName));
AccountStreet = accountStreet ?? throw new ArgumentNullException(nameof(accountStreet));
AccountZIP = accountZIP;
AccountCity = accountCity ?? throw new ArgumentNullException(nameof(accountCity));
AccountTypeCode = accountTypeCode ?? throw new ArgumentNullException(nameof(accountTypeCode));
}
}
}

@ -1,24 +0,0 @@
namespace Gremlin_BlazorServer.ViewModels
{
public class ContactViewModel
{
public uint ContactId { get; set; }
public uint AccountId { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public byte Gender { get; set; }
public string EMail { get; set; }
public ContactViewModel(uint contactId, uint accountId, string lastName, string firstName, byte gender, string eMail)
{
ContactId = contactId;
AccountId = accountId;
LastName = lastName ?? throw new ArgumentNullException(nameof(lastName));
FirstName = firstName ?? throw new ArgumentNullException(nameof(firstName));
Gender = gender;
EMail = eMail ?? throw new ArgumentNullException(nameof(eMail));
}
public ContactViewModel() { }
}
}