build v0.8.30

This commit is contained in:
Frede Hundewadt 2022-06-24 17:15:11 +02:00
parent a6147dd670
commit b114eaa969
3 changed files with 266 additions and 283 deletions

View file

@ -34,289 +34,278 @@
<div class="card-body"> <div class="card-body">
<EditForm EditContext="_editContext"> <EditForm EditContext="_editContext">
<DataAnnotationsValidator/> <DataAnnotationsValidator/>
<div class="accordion-flush" id="crmActivity"> <div class="card-header">
<div class="accordion-item"> @_draft.Name - @_draft.Account
<h2 class="accordion-header" id="activityHeader"> </div>
<button class="accordion-button bg-light" type="button" <div class="card-body">
data-bs-toggle="collapse" data-bs-target="#activityBody" <div class="row mb-1">
aria-expanded="true" aria-controls="activityBody"> <label for="activityType" class="col-md-2 col-form-label">Ordre Type</label>
@_draft.Name - @_draft.Account <div class="col-md-4">
</button> <InputSelect id="activityType" class="form-select" @bind-Value="@_draft.ActivityTypeEnum">
</h2> <option value="">-TAG MIG-</option>
<div id="activityBody" class="accordion-collapse collapse show" <option value="onSite">Besøg</option>
aria-labelledby="activityHeader" data-bs-parent="#crmActivity"> <option value="phone">Telefon</option>
<div class="accordion-body"> </InputSelect>
<div class="row mb-1"> <ValidationMessage For="@(() => _draft.ActivityTypeEnum)"></ValidationMessage>
<label for="activityType" class="col-md-2 col-form-label">Ordre Type</label> </div>
<div class="col-md-4"> <label for="statusType" class="col-md-2 col-form-label">Status</label>
<InputSelect id="activityType" class="form-select" @bind-Value="@_draft.ActivityTypeEnum"> <div class="col-md-4">
<option value="">ORDRE TYPE</option> <InputSelect id="statusType" class="form-select" @bind-Value="@_draft.ActivityStatusEnum">
<option value="onSite">Besøg</option> <option value="noSale" selected>Ingen salg</option>
<option value="phone">Telefon</option> <option value="order">Bestilling</option>
</InputSelect> <option value="quote">Tilbud</option>
<ValidationMessage For="@(() => _draft.ActivityTypeEnum)"></ValidationMessage> </InputSelect>
</div> <ValidationMessage For="@(() => _draft.ActivityStatusEnum)"></ValidationMessage>
<label for="statusType" class="col-md-2 col-form-label">Status</label> </div>
<div class="col-md-4"> </div>
<InputSelect id="statusType" class="form-select" @bind-Value="@_draft.ActivityStatusEnum">
<option value="noSale" selected>Ingen salg</option>
<option value="order">Bestilling</option>
<option value="quote">Tilbud</option>
</InputSelect>
<ValidationMessage For="@(() => _draft.ActivityStatusEnum)"></ValidationMessage>
</div>
</div>
<div class="row mb-1"> <div class="row mb-1">
<label for="demo" class="col-md-2 col-form-label">Demo</label> <label for="demo" class="col-md-2 col-form-label">Demo</label>
<div class="col-md-4"> <div class="col-md-4">
<InputText id="demo" class="form-control" @bind-Value="_draft.Demo"/> <InputText id="demo" class="form-control" @bind-Value="_draft.Demo"/>
<ValidationMessage For="@(() => _draft.Demo)"></ValidationMessage> <ValidationMessage For="@(() => _draft.Demo)"></ValidationMessage>
</div> </div>
<label for="email" class="col-md-2 col-form-label">Epost</label> <label for="email" class="col-md-2 col-form-label">Epost</label>
<div class="col-md-4"> <div class="col-md-4">
<InputText id="email" class="form-control" @bind-Value="_draft.EMail"/> <InputText id="email" class="form-control" @bind-Value="_draft.EMail"/>
<ValidationMessage For="@(() => _draft.EMail)"></ValidationMessage> <ValidationMessage For="@(() => _draft.EMail)"></ValidationMessage>
</div> </div>
</div> </div>
<div class="row mb-1"> <div class="row mb-1">
<label for="referenceNumber" class="col-md-2 col-form-label">Rekvisition</label> <label for="referenceNumber" class="col-md-2 col-form-label">Rekvisition</label>
<div class="col-md-4"> <div class="col-md-4">
<InputText id="referenceNumber" class="form-control" <InputText id="referenceNumber" class="form-control"
@bind-Value="_draft.ReferenceNumber"v/> @bind-Value="_draft.ReferenceNumber"v/>
<ValidationMessage For="@(() => _draft.ReferenceNumber)"></ValidationMessage> <ValidationMessage For="@(() => _draft.ReferenceNumber)"></ValidationMessage>
</div> </div>
<label for="yourRef" class="col-md-2 col-form-label">Indkøber</label> <label for="yourRef" class="col-md-2 col-form-label">Indkøber</label>
<div class="col-md-4"> <div class="col-md-4">
<InputText id="yourRef" class="form-control" <InputText id="yourRef" class="form-control"
@bind-Value="_draft.YourRef"/> @bind-Value="_draft.YourRef"/>
<ValidationMessage For="@(() => _draft.YourRef)"></ValidationMessage> <ValidationMessage For="@(() => _draft.YourRef)"></ValidationMessage>
</div> </div>
</div> </div>
<div class="row mb-1"> <div class="row mb-1">
<label for="orderMessage" class="col-md-2 col-form-label">Note /Kontor</label> <label for="orderMessage" class="col-md-2 col-form-label">Note /Kontor</label>
<div class="col-md-4"> <div class="col-md-4">
<InputTextArea id="orderMessage" class="form-control" <InputTextArea id="orderMessage" class="form-control"
@bind-Value="_draft.OrderMessage"/> @bind-Value="_draft.OrderMessage"/>
<ValidationMessage For="@(() => _draft.OrderMessage)"></ValidationMessage> <ValidationMessage For="@(() => _draft.OrderMessage)"></ValidationMessage>
</div> </div>
<label for="crmNote" class="col-md-2 col-form-label">Note /Mig</label> <label for="crmNote" class="col-md-2 col-form-label">Note /Mig</label>
<div class="col-md-4"> <div class="col-md-4">
<InputTextArea id="crmNote" class="form-control" <InputTextArea id="crmNote" class="form-control"
@bind-Value="_draft.CrmNote"/> @bind-Value="_draft.CrmNote"/>
<ValidationMessage For="@(() => _draft.CrmNote)"></ValidationMessage> <ValidationMessage For="@(() => _draft.CrmNote)"></ValidationMessage>
</div> </div>
</div> </div>
<div class="row mb-1"> <div class="row mb-1">
<label for="attention" class="col-md-2 col-form-label">Att.</label> <label for="attention" class="col-md-2 col-form-label">Att.</label>
<div class="col-md-4"> <div class="col-md-4">
<InputText id="attention" class="form-control" <InputText id="attention" class="form-control"
@bind-Value="_draft.Attention"/> @bind-Value="_draft.Attention"/>
<ValidationMessage For="@(() => _draft.Attention)"></ValidationMessage> <ValidationMessage For="@(() => _draft.Attention)"></ValidationMessage>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
<div class="accordion" id="crmActivity">
@* Order lines *@ @* Order lines *@
<div class="accordion-item" style="@(_draft.ActivityStatusEnum is "order" or "quote" ? "display: block" : "display:none")"> <div class="accordion-item" style="@(_draft.ActivityStatusEnum is "order" or "quote" ? "display: block" : "display:none")">
<h2 class="accordion-header" id="catalogHeader"> <h2 class="accordion-header" id="catalogHeader">
<button class="accordion-button collapsed bg-light" type="button" <button class="accordion-button collapsed bg-light" type="button"
data-bs-toggle="collapse" data-bs-target="#catalogBody" data-bs-toggle="collapse" data-bs-target="#catalogBody"
aria-expanded="false" aria-controls="catalogBody"> aria-expanded="false" aria-controls="catalogBody">
Varelinjer Bestilling
</button> </button>
</h2> </h2>
<div id="catalogBody" class="accordion-collapse collapse" <div id="catalogBody" class="accordion-collapse collapse" aria-labelledby="catalogHeader" data-bs-parent="#crmActivity">
aria-labelledby="catalogHeader" data-bs-parent="#crmActivity">
<div class="accordion-body"> <div class="accordion-body">
<div class="row mb-1"> @* Order draft lines *@
<div class="col"> <div class="card">
<ItemGroupComponent OnChanged="SetItemGroup"/> <div class="card-header">
Kladdelinjer <span class="mx-2 draft-expires-msg">Global kladde (udløber efter @(DraftStateProvider.Draft.TimeToLiveInSeconds / 60)m inaktivitet)</span>
</div> </div>
<div class="col">
<ItemSearchComponent OnChanged="SetSearchCol"/>
</div>
<div class="col">
<SearchPhraseComponent OnChanged="SetSearchPhrase"/>
</div>
<div class="col">
<ItemSortComponent OnChanged="SetSortCol"/>
</div>
<div class="col">
<PageSizeComponent OnChanged="SetPageSize"></PageSizeComponent>
</div>
</div>
</div>
<div class="row">
<div class="col">
<PaginationComponent MetaData="_metaData" Spread="2" SelectedPage="SelectedPage"></PaginationComponent>
</div>
</div>
@if (_caltalog.Any())
{
<table class="table table-hover table-striped justify-content-center">
<thead>
<tr>
<th scope="col">Navn</th>
<th scope="col" class="text-nowrap">Varenr</th>
<th scope="col" class="text-nowrap">Fork</th>
<th scope="col">Stk / Pris</th>
</tr>
</thead>
<tbody>
@foreach (var item in _caltalog)
{
<tr>
<td>@item.Name</td>
<td>@item.Sku</td>
<td>@item.ShortName</td>
<td>
<ul class="list-group">
@foreach (var rate in item.Rates)
{
<li class="list-group-item d-flex justify-content-between align-items-end">
<div class="text-sm-start px-2">@rate.Quantity</div>
<div class="text-sm-end">@rate.Rate</div>
<button type="button" class="btn btn-primary btn-sm"
@onclick="@(() => SelectItem(item.ItemId, rate.Quantity, rate.Rate))">
Vælg
</button>
</li>
}
</ul>
</td>
</tr>
}
</tbody>
</table>
}
else
{
<AppSpinner/>
}
@if (_selectedItem != null && ShowItem)
{
<div class="card mb-3 mt-3">
<div class="card-header bg-dark fw-bold text-white">Kladdelinje</div>
<div class="card-body"> <div class="card-body">
<div class="row"> <table class="table table-hover table-striped justify-content-center">
<div class="col col-md-4 fw-bold"> <thead>
Varenavn <tr>
</div> <th scope="col">Navn</th>
<div class="col fw-bold"> <th scope="col" class="text-nowrap">Varenr</th>
Varenr <th scope="col" class="text-end">Antal</th>
</div> <th scope="col" class="text-end">Enhedspris</th>
<div class="col fw-bold"> <th scope="col" class="text-end">Linjesum</th>
Antal <th scope="col">&nbsp;</th>
</div> </tr>
<div class="col fw-bold"> </thead>
Pris <tbody>
</div> @if (DraftStateProvider != null && DraftStateProvider.Draft.Items.Count > 0)
<div class="col">
Rabat
</div>
<div class="col">
SAS
</div>
<div class="col">
</div>
</div>
<div class="row">
<div class="col col-md-4">
@_selectedItem.Name
</div>
<div class="col">
@_selectedItem.Sku
</div>
<div class="col">
<input type="number" class="form-control" @bind-value="@Quantity"/>
</div>
<div class="col">
<input type="number" class="form-control" @bind-value="@Price"/>
</div>
<div class="col">
<input type="number" class="form-control" @bind-value="@Discount"/>
</div>
<div class="col">
<input type="checkbox" class="form-check" @bind-value="@Sas"/>
</div>
<div class="col">
<button type="button" class="btn btn-info" @onclick="@(() => AddItem(_selectedItem))">Læg til</button>
</div>
</div>
</div>
</div>
}
@* Order draft lines *@
<div class="card">
<div class="card-header">
Kladdelinjer <span class="mx-2 draft-expires-msg">Global kladde (udløber efter @(DraftStateProvider.Draft.TimeToLiveInSeconds / 60)m inaktivitet)</span>
</div>
<div class="card-body">
<table class="table table-hover table-striped justify-content-center">
<thead>
<tr>
<th scope="col">Navn</th>
<th scope="col" class="text-nowrap">Varenr</th>
<th scope="col" class="text-end">Antal</th>
<th scope="col" class="text-end">Enhedspris</th>
<th scope="col" class="text-end">Linjesum</th>
<th scope="col">&nbsp;</th>
</tr>
</thead>
<tbody>
@if (DraftStateProvider != null && DraftStateProvider.Draft.Items.Count > 0)
{
@foreach (var cItem in DraftStateProvider.Draft.Items)
{ {
@foreach (var cItem in DraftStateProvider.Draft.Items)
{
<tr>
<td>@cItem.Item.Name</td>
<td>@cItem.Item.Sku</td>
<td class="text-end">@cItem.Quantity</td>
<td class="text-end">@cItem.Price</td>
<td class="text-end">@cItem.LineTotal</td>
<td>
<input type="checkbox" checked="@cItem.Sas" disabled/>
</td>
<td>
<button type="button" class="btn btn-warning" @onclick="@(() => RemoveItem(@cItem))">Slet</button>
</td>
</tr>
}
<tr> <tr>
<td>@cItem.Item.Name</td> <td></td>
<td>@cItem.Item.Sku</td> <td></td>
<td class="text-end">@cItem.Quantity</td> <td></td>
<td class="text-end">@cItem.Price</td> <td class="text-black text-end fw-bold">Total</td>
<td class="text-end">@cItem.LineTotal</td> <td class="text-black text-end fw-bold">@DraftStateProvider.Draft.Total</td>
<td> <td></td>
<input type="checkbox" checked="@cItem.Sas" disabled/>
</td>
<td>
<button type="button" class="btn btn-warning" @onclick="@(() => RemoveItem(@cItem))">Slet</button>
</td>
</tr> </tr>
} }
<tr> </tbody>
<td></td> </table>
<td></td> <div class="row">
<td></td> <div class="col">
<td class="text-black text-end fw-bold">Total</td> <button type="button" class="btn btn-danger" @onclick="@DeleteDraft" disabled="@(DraftStateProvider.Draft.Items.Count == 0)">
<td class="text-black text-end fw-bold">@DraftStateProvider.Draft.Total</td> Slet kladde
<td></td> </button>
</tr> </div>
}
</tbody>
</table>
</div>
<div class="card-footer">
<div class="row">
<div class="col">
<button type="button" class="btn btn-danger"
@onclick="@DeleteDraft"
disabled="@(DraftStateProvider.Draft.Items.Count == 0)">
Slet kladde
</button>
</div> </div>
</div> </div>
</div> </div>
@* draft line *@
@if (_selectedItem != null && ShowItem)
{
<div class="card mb-3 mt-3">
<div class="card-header bg-dark fw-bold text-white">Kladdelinje</div>
<div class="card-body">
<div class="row">
<div class="col col-md-4 fw-bold">
Varenavn
</div>
<div class="col fw-bold">
Varenr
</div>
<div class="col fw-bold">
Antal
</div>
<div class="col fw-bold">
Pris
</div>
<div class="col">
Rabat
</div>
<div class="col">
SAS
</div>
<div class="col">
</div>
</div>
<div class="row">
<div class="col col-md-4">
@_selectedItem.Name
</div>
<div class="col">
@_selectedItem.Sku
</div>
<div class="col">
<input type="number" class="form-control" @bind-value="@Quantity"/>
</div>
<div class="col">
<input type="number" class="form-control" @bind-value="@Price"/>
</div>
<div class="col">
<input type="number" class="form-control" @bind-value="@Discount"/>
</div>
<div class="col">
<input type="checkbox" class="form-check" @bind-value="@Sas"/>
</div>
<div class="col">
<button type="button" class="btn btn-info" @onclick="@(() => AddItem(_selectedItem))">Læg til</button>
</div>
</div>
</div>
</div>
}
@* catalog *@
<div class="card">
<div class="card-body">
<div class="row mb-1">
<div class="col">
<ItemGroupComponent OnChanged="SetItemGroup"/>
</div>
<div class="col">
<ItemSearchComponent OnChanged="SetSearchCol"/>
</div>
<div class="col">
<SearchPhraseComponent OnChanged="SetSearchPhrase"/>
</div>
<div class="col">
<ItemSortComponent OnChanged="SetSortCol"/>
</div>
<div class="col">
<PageSizeComponent OnChanged="SetPageSize"></PageSizeComponent>
</div>
</div>
<div class="row">
<div class="col">
<PaginationComponent MetaData="_metaData" Spread="2" SelectedPage="SelectedPage"></PaginationComponent>
</div>
</div>
@if (_caltalog.Any())
{
<table class="table table-hover table-striped justify-content-center">
<thead>
<tr>
<th scope="col">Navn</th>
<th scope="col" class="text-nowrap">Varenr</th>
<th scope="col" class="text-nowrap">Fork</th>
<th scope="col">Stk / Pris</th>
</tr>
</thead>
<tbody>
@foreach (var item in _caltalog)
{
<tr>
<td>@item.Name</td>
<td>@item.Sku</td>
<td>@item.ShortName</td>
<td>
<ul class="list-group">
@foreach (var rate in item.Rates)
{
<li class="list-group-item d-flex justify-content-between align-items-end">
<div class="text-sm-start px-2">@rate.Quantity</div>
<div class="text-sm-end">@rate.Rate</div>
<button type="button" class="btn btn-primary btn-sm" @onclick="@(() => SelectItem(item.ItemId, rate.Quantity, rate.Rate))">
Vælg
</button>
</li>
}
</ul>
</td>
</tr>
}
</tbody>
</table>
}
else
{
<AppSpinner/>
}
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@* Delivery address *@ @* Delivery address *@
<div class="accordion-item" style="@(_draft.ActivityStatusEnum == "order" ? "display: block" : "display:none")"> <div class="accordion-item" style="@(_draft.ActivityStatusEnum == "order" ? "display: block" : "display:none")">
<h2 class="accordion-header" id="deliveryHeader"> <h2 class="accordion-header" id="deliveryHeader">
<button class="accordion-button collapsed bg-light" type="button" <button class="accordion-button collapsed bg-light" type="button" data-bs-toggle="collapse" data-bs-target="#deliveryBody" aria-expanded="false" aria-controls="deliveryBody">
data-bs-toggle="collapse" data-bs-target="#deliveryBody"
aria-expanded="false" aria-controls="deliveryBody">
Leveringsadresse Leveringsadresse
</button> </button>
</h2> </h2>
@ -357,18 +346,19 @@
</div> </div>
</div> </div>
</div> </div>
<div class="row mt-2 mb-2">
<div class="col">
<a class="btn btn-primary" href="/companies">Til Oversigt</a>
</div>
<div class="col">
<a class="btn btn-primary" href="/company/@_company.CompanyId">Tilbage</a>
</div>
<div class="col">
@* <button type="submit" class="btn btn-success" disabled="@InvalidActivity">Gem</button> *@
<button type="button" class="btn btn-success" @onclick="CreateActivity">Opret besøg</button>
</div>
</div>
</EditForm> </EditForm>
</div> </div>
<div class="card-footer">
<div class="row mt-2 mb-2">
<div class="col">
<a class="btn btn-primary" href="/companies">Til Oversigt</a>
</div>
<div class="col">
<a class="btn btn-primary" href="/company/@_company.CompanyId">Tilbage</a>
</div>
<div class="col">
<button type="button" class="btn btn-success" @onclick="CreateActivity">Opret besøg</button>
</div>
</div>
</div>
</div> </div>

View file

@ -150,18 +150,14 @@ public partial class ActivityCompanyCreate : IDisposable
var activityType = _draft.ActivityTypeEnum switch var activityType = _draft.ActivityTypeEnum switch
{ {
"phone" => "T", "phone" => "T:",
"onSite" => "B", "onSite" => "B:",
_ => "" _ => ""
}; };
_draft.OurRef = $"{activityType}:{Ux.FullName.Split(" ")[0]}"; _draft.OurRef = $"{activityType}{Ux.FullName.Split(" ")[0]}";
var ln = 0; var ln = 0;
var lines = DraftStateProvider.Draft.Items.Select(item => new ActivityLineDto
// post to create activity endpoint {
var lines = new List<ActivityLineDto>();
foreach (var item in DraftStateProvider.Draft.Items)
{
var line = new ActivityLineDto{
Price = item.Price, Price = item.Price,
Discount = item.Discount, Discount = item.Discount,
Qty = item.Quantity, Qty = item.Quantity,
@ -171,15 +167,12 @@ public partial class ActivityCompanyCreate : IDisposable
LineAmount = item.LineTotal, LineAmount = item.LineTotal,
LineNumber = ++ln, LineNumber = ++ln,
Sas = item.Sas Sas = item.Sas
}; })
lines.Add(line); .ToList();
}
_draft.Lines = lines; _draft.Lines = lines;
await _storage.SetItemAsync(CompanyId, _draft);
Console.WriteLine(JsonSerializer.Serialize(_draft));
var result = await _activityRepo.CreateActivity(_draft); var result = await _activityRepo.CreateActivity(_draft);
_toast.ShowSuccess($"{result.Message}."); _toast.ShowSuccess($"{result.Message}.");
await DraftStateProvider.DeleteDraftAsync();
_navigator.NavigateTo($"/companies"); _navigator.NavigateTo($"/companies");
} }

View file

@ -18,7 +18,7 @@
}, },
"appInfo": { "appInfo": {
"name": "Wonky Client", "name": "Wonky Client",
"version": "0.8.24", "version": "0.8.30",
"isBeta": true, "isBeta": true,
"image": "grumpy-coder.png" "image": "grumpy-coder.png"
}, },