wip v.0.8.7
This commit is contained in:
parent
dd936c75ef
commit
e86e7719c5
19 changed files with 226 additions and 148 deletions
|
@ -11,7 +11,7 @@
|
||||||
<img class="state the-good rounded-circle me-1" src="state.png" alt="state"/>
|
<img class="state the-good rounded-circle me-1" src="state.png" alt="state"/>
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
Ok
|
Er besøgt.
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -19,7 +19,7 @@
|
||||||
<img class="state the-bad rounded-circle me-1" src="state.png" alt="state"/>
|
<img class="state the-bad rounded-circle me-1" src="state.png" alt="state"/>
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
Planlæg besøg
|
Planlæg besøg.
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
<img class="state the-ugly rounded-circle me-1" src="state.png" alt="state"/>
|
<img class="state the-ugly rounded-circle me-1" src="state.png" alt="state"/>
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
Interval overskredet
|
Besøges nu!
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -35,7 +35,7 @@
|
||||||
<img class="state the-draw rounded-circle me-1" src="state.png" alt="state"/>
|
<img class="state the-draw rounded-circle me-1" src="state.png" alt="state"/>
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
Opdatering nødvendig
|
Opdater besøgsdato og/eller CVR/ORG nummer.
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
<img class="state the-dead rounded-circle me-1" src="state.png" alt="state"/>
|
<img class="state the-dead rounded-circle me-1" src="state.png" alt="state"/>
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
Virksomhed ophørt
|
Virksomhed ophørt!
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
@using Microsoft.AspNetCore.Authorization
|
|
||||||
@*
|
@*
|
||||||
// Copyright (C) 2022 FCS Frede's Computer Services.
|
// Copyright (C) 2022 FCS Frede's Computer Services.
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
@ -16,58 +15,19 @@
|
||||||
//
|
//
|
||||||
*@
|
*@
|
||||||
|
|
||||||
|
@using Microsoft.AspNetCore.Authorization
|
||||||
<PageTitle>Inno Web CRM</PageTitle>
|
<PageTitle>Inno Web CRM</PageTitle>
|
||||||
|
|
||||||
<AuthorizeView>
|
<div class="card">
|
||||||
<Authorized>
|
<div class="card-header">
|
||||||
<div class="row mb-1 align-items-center">
|
<div class="row">
|
||||||
<div class="col-md-4">
|
<div class="col">
|
||||||
<span class="workDate">@(string.IsNullOrWhiteSpace(_workDate) ? "" : $"{DateTime.Parse(_workDate).ToLongDateString()}")</span>
|
<h3>Kalender</h3>
|
||||||
</div>
|
|
||||||
<div class="col-md-4">
|
|
||||||
<WorkDateComponent OnChanged="GetActivities"></WorkDateComponent>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
|
<WorkDateComponent OnChanged="GetCalender"></WorkDateComponent>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
<hr />
|
</div>
|
||||||
<h5>Dagens aktivitet</h5>
|
|
||||||
<table class="table">
|
|
||||||
<thead>
|
|
||||||
<tr class="align-items-center">
|
|
||||||
<th scope="col">Kunde</th>
|
|
||||||
<th scope="col">Demo</th>
|
|
||||||
<th scope="col">Salg</th>
|
|
||||||
<th scope="col">Sum</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
@if (_view != null)
|
|
||||||
{
|
|
||||||
foreach (var activity in _view.Activities)
|
|
||||||
{
|
|
||||||
<tr class="align-items-center">
|
|
||||||
<td>
|
|
||||||
@activity.Company.Name
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
@activity.Demo
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
@activity.SalesResume
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
@activity.OrderAmount
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</Authorized>
|
|
||||||
<NotAuthorized>
|
|
||||||
<a href="/login">Login</a>
|
|
||||||
</NotAuthorized>
|
|
||||||
</AuthorizeView>
|
|
|
@ -34,10 +34,7 @@ public partial class Home : IDisposable
|
||||||
[Inject] public UserPreferenceService UserPrefs { get; set; }
|
[Inject] public UserPreferenceService UserPrefs { get; set; }
|
||||||
[Inject] public ILogger<Home> Logger { get; set; }
|
[Inject] public ILogger<Home> Logger { get; set; }
|
||||||
[Inject] private HttpInterceptorService Interceptor { get; set; }
|
[Inject] private HttpInterceptorService Interceptor { get; set; }
|
||||||
[Inject] private NavigationManager Navigator { get; set; }
|
|
||||||
[Inject] private IActivityHttpRepository ActivityRepo { get; set; }
|
|
||||||
[Inject] private IToastService _toast { get; set; }
|
[Inject] private IToastService _toast { get; set; }
|
||||||
private NgActivityListView _view { get; set; } = new();
|
|
||||||
private Preferences _prefs { get; set; } = new();
|
private Preferences _prefs { get; set; } = new();
|
||||||
private string _workDate { get; set; } = $"{DateTime.Now:yyyy-MM-dd}";
|
private string _workDate { get; set; } = $"{DateTime.Now:yyyy-MM-dd}";
|
||||||
|
|
||||||
|
@ -50,15 +47,12 @@ public partial class Home : IDisposable
|
||||||
Interceptor.RegisterEvent();
|
Interceptor.RegisterEvent();
|
||||||
Interceptor.RegisterBeforeSendEvent();
|
Interceptor.RegisterBeforeSendEvent();
|
||||||
|
|
||||||
await GetActivities(_workDate);
|
await GetCalender(_workDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task GetActivities(string workDate)
|
private async Task GetCalender(string workDate)
|
||||||
{
|
{
|
||||||
_toast.ShowInfo("Vent nogle sekunder for data");
|
|
||||||
_workDate = workDate;
|
_workDate = workDate;
|
||||||
_view = new NgActivityListView();
|
|
||||||
_view = await ActivityRepo.GetActivities(workDate);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
|
|
|
@ -62,7 +62,7 @@ namespace Wonky.Client.HttpInterceptors
|
||||||
_interceptor.BeforeSendAsync -= InterceptBeforeSendAsync;
|
_interceptor.BeforeSendAsync -= InterceptBeforeSendAsync;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task InterceptBeforeSendAsync(object sender, HttpClientInterceptorEventArgs e)
|
private async Task InterceptBeforeSendAsync(object sender, HttpClientInterceptorEventArgs e)
|
||||||
{
|
{
|
||||||
var absolutePath = e.Request.RequestUri.AbsolutePath;
|
var absolutePath = e.Request.RequestUri.AbsolutePath;
|
||||||
|
|
||||||
|
@ -78,27 +78,24 @@ namespace Wonky.Client.HttpInterceptors
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AfterSend (object sender, HttpClientInterceptorEventArgs e)
|
private void AfterSend (object sender, HttpClientInterceptorEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.Response == null || e.Response.IsSuccessStatusCode)
|
if (e.Response == null || e.Response.IsSuccessStatusCode)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
string message;
|
string message;
|
||||||
var currDoc = _navigation.ToBaseRelativePath(_navigation.Uri);
|
var currDoc = _navigation.ToBaseRelativePath(_navigation.Uri);
|
||||||
|
if (currDoc.Contains("login"))
|
||||||
|
currDoc = "/";
|
||||||
|
|
||||||
switch (e.Response.StatusCode)
|
switch (e.Response.StatusCode)
|
||||||
{
|
{
|
||||||
case HttpStatusCode.NotFound:
|
case HttpStatusCode.NotFound:
|
||||||
//_navigation.NavigateTo("/404");
|
//_navigation.NavigateTo("/404");
|
||||||
message = "Der er ingen data ...";
|
message = "Der var ingen data ...";
|
||||||
_toast.ShowInfo(message);
|
_toast.ShowInfo(message);
|
||||||
break;
|
break;
|
||||||
case HttpStatusCode.BadRequest:
|
case HttpStatusCode.BadRequest:
|
||||||
ClearInfo();
|
|
||||||
_navigation.NavigateTo($"/login/{currDoc}");
|
|
||||||
message = "Login info skal fornyes ...";
|
|
||||||
_toast.ShowInfo(message);
|
|
||||||
break;
|
|
||||||
case HttpStatusCode.Unauthorized:
|
case HttpStatusCode.Unauthorized:
|
||||||
ClearInfo();
|
ClearInfo();
|
||||||
_navigation.NavigateTo($"/login/{currDoc}");
|
_navigation.NavigateTo($"/login/{currDoc}");
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
@using Microsoft.AspNetCore.Authorization
|
@using Microsoft.AspNetCore.Authorization
|
||||||
@attribute [Authorize(Roles = "Adviser")]
|
@attribute [Authorize(Roles = "Adviser")]
|
||||||
@using Wonky.Client.Components
|
@using Wonky.Client.Components
|
||||||
|
|
||||||
<div class="row mb-2 align-items-center">
|
<div class="row mb-2 align-items-center">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<h5 style="font-variant: small-caps">@_workDate.ToLongDateString()</h5>
|
<h5 style="font-variant: small-caps">@_workDate.ToLongDateString()</h5>
|
||||||
|
|
66
Wonky.Client/Pages/ActivityToday.razor
Normal file
66
Wonky.Client/Pages/ActivityToday.razor
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
@*
|
||||||
|
// 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 Microsoft.AspNetCore.Authorization
|
||||||
|
@using Wonky.Client.Components
|
||||||
|
@attribute [Authorize(Roles = "Adviser")]
|
||||||
|
@page "/activity-today"
|
||||||
|
|
||||||
|
<div class="row mb-1 align-items-center">
|
||||||
|
<div class="col-md-4">
|
||||||
|
<span class="workDate">@(string.IsNullOrWhiteSpace(_workDate) ? "" : $"{DateTime.Parse(_workDate).ToLongDateString()}")</span>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<WorkDateComponent OnChanged="GetActivities"></WorkDateComponent>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
<h5>Dagens aktivitet</h5>
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr class="align-items-center">
|
||||||
|
<th scope="col">Kunde</th>
|
||||||
|
<th scope="col">Demo</th>
|
||||||
|
<th scope="col">Salg</th>
|
||||||
|
<th scope="col">Sum</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@if (_view != null)
|
||||||
|
{
|
||||||
|
foreach (var activity in _view.Activities)
|
||||||
|
{
|
||||||
|
<tr class="align-items-center">
|
||||||
|
<td>
|
||||||
|
@activity.Company.Name
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@activity.Demo
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@activity.SalesResume
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
@activity.OrderAmount
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
48
Wonky.Client/Pages/ActivityToday.razor.cs
Normal file
48
Wonky.Client/Pages/ActivityToday.razor.cs
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
using Blazored.Toast.Services;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using Wonky.Client.Components;
|
||||||
|
using Wonky.Client.HttpInterceptors;
|
||||||
|
using Wonky.Client.HttpRepository;
|
||||||
|
using Wonky.Client.Services;
|
||||||
|
using Wonky.Entity.Views;
|
||||||
|
|
||||||
|
namespace Wonky.Client.Pages;
|
||||||
|
|
||||||
|
public partial class ActivityToday
|
||||||
|
{
|
||||||
|
[Inject] public UserPreferenceService UserPrefs { get; set; }
|
||||||
|
[Inject] public ILogger<Home> Logger { get; set; }
|
||||||
|
[Inject] private HttpInterceptorService Interceptor { get; set; }
|
||||||
|
[Inject] private NavigationManager Navigator { get; set; }
|
||||||
|
[Inject] private IActivityHttpRepository ActivityRepo { get; set; }
|
||||||
|
[Inject] private IToastService _toast { get; set; }
|
||||||
|
private NgActivityListView _view { get; set; } = new();
|
||||||
|
private Preferences _prefs { get; set; } = new();
|
||||||
|
private string _workDate { get; set; } = $"{DateTime.Now:yyyy-MM-dd}";
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
_prefs = await UserPrefs.GetPreferences();
|
||||||
|
if(!string.IsNullOrWhiteSpace(_prefs.WorkDate))
|
||||||
|
_workDate = _prefs.WorkDate;
|
||||||
|
|
||||||
|
Interceptor.RegisterEvent();
|
||||||
|
Interceptor.RegisterBeforeSendEvent();
|
||||||
|
|
||||||
|
await GetActivities(_workDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task GetActivities(string workDate)
|
||||||
|
{
|
||||||
|
_toast.ShowInfo("Vent nogle sekunder for data");
|
||||||
|
_workDate = workDate;
|
||||||
|
_view = new NgActivityListView();
|
||||||
|
_view = await ActivityRepo.GetActivities(workDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
Interceptor.DisposeEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -69,7 +69,9 @@
|
||||||
<th>
|
<th>
|
||||||
CVR/ORG
|
CVR/ORG
|
||||||
</th>
|
</th>
|
||||||
<td class="state"><DisplayStateComponent StateClass="@_vatState"></DisplayStateComponent></td>
|
<td class="state">
|
||||||
|
<DisplayStateComponent StateClass="@_vatState"></DisplayStateComponent>
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<InputText id="vatNumber" class="form-control" @bind-Value="_companyView.VatNumber"/>
|
<InputText id="vatNumber" class="form-control" @bind-Value="_companyView.VatNumber"/>
|
||||||
<ValidationMessage For="@(() => _companyView.VatNumber)"></ValidationMessage>
|
<ValidationMessage For="@(() => _companyView.VatNumber)"></ValidationMessage>
|
||||||
|
@ -154,7 +156,9 @@
|
||||||
<th>
|
<th>
|
||||||
Næste besøg
|
Næste besøg
|
||||||
</th>
|
</th>
|
||||||
<td class="state"><DisplayStateComponent StateClass="@(_hasFolded ? "the-dead" : Utils.GetVisitState($"{_companyView.NextVisit}"))"> </DisplayStateComponent></td>
|
<td class="state">
|
||||||
|
<DisplayStateComponent StateClass="@(_hasFolded ? "the-dead" : Utils.GetVisitState($"{_companyView.NextVisit}"))"> </DisplayStateComponent>
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<InputDate id="nextVisit" class="form-control" @bind-Value="@(_nextVisit)"/>
|
<InputDate id="nextVisit" class="form-control" @bind-Value="@(_nextVisit)"/>
|
||||||
<ValidationMessage For="@(() => _companyView.NextVisit)">Dato kan ikke vær før sidste besøg</ValidationMessage>
|
<ValidationMessage For="@(() => _companyView.NextVisit)">Dato kan ikke vær før sidste besøg</ValidationMessage>
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
@using Wonky.Client.Helpers
|
@using Wonky.Client.Helpers
|
||||||
@attribute [Authorize(Roles = "Adviser")]
|
@attribute [Authorize(Roles = "Adviser")]
|
||||||
|
|
||||||
|
|
||||||
@if (_companyDto != null)
|
@if (_companyDto != null)
|
||||||
{
|
{
|
||||||
<div class="card">
|
<div class="card">
|
||||||
|
@ -81,5 +82,5 @@
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<AppSpinner/>
|
<AppSpinner/>
|
||||||
}
|
}
|
|
@ -21,6 +21,7 @@
|
||||||
@using System.Xml
|
@using System.Xml
|
||||||
@attribute [Authorize(Roles = "Adviser")]
|
@attribute [Authorize(Roles = "Adviser")]
|
||||||
|
|
||||||
|
|
||||||
<h2>Opret kunde</h2>
|
<h2>Opret kunde</h2>
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -69,7 +70,9 @@
|
||||||
<td class="align-middle">@info.Name</td>
|
<td class="align-middle">@info.Name</td>
|
||||||
<td class="align-middle">@info.States[^1].State</td>
|
<td class="align-middle">@info.States[^1].State</td>
|
||||||
<td class="align-middle"></td>
|
<td class="align-middle"></td>
|
||||||
<td class="align-middle"><button class="btn btn-primary" @onclick="@(() => SelectCompany(info.VatNumber))">OVERFØR</button></td>
|
<td class="align-middle">
|
||||||
|
<button class="btn btn-primary" @onclick="@(() => SelectCompany(info.VatNumber))">OVERFØR</button>
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
}
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
@ -81,7 +84,7 @@
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<EditForm EditContext="_editContext" OnValidSubmit="SubmitCompanyForm">
|
<EditForm EditContext="_editContext" OnValidSubmit="SubmitCompanyForm">
|
||||||
<DataAnnotationsValidator />
|
<DataAnnotationsValidator/>
|
||||||
<InputText type="hidden" id="salesRepId" @bind-Value="_companyObject.SalesRepId"/>
|
<InputText type="hidden" id="salesRepId" @bind-Value="_companyObject.SalesRepId"/>
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -123,7 +126,9 @@
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="align-middle">Moms/Org Reg.</td>
|
<td class="align-middle">Moms/Org Reg.</td>
|
||||||
<td class="align-middle state"><DisplayStateComponent StateClass="@RegState"></DisplayStateComponent></td>
|
<td class="align-middle state">
|
||||||
|
<DisplayStateComponent StateClass="@RegState"></DisplayStateComponent>
|
||||||
|
</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
<InputText id="vatNumber" class="form-control" @bind-Value="_companyObject.VatNumber"/>
|
<InputText id="vatNumber" class="form-control" @bind-Value="_companyObject.VatNumber"/>
|
||||||
<ValidationMessage For="@(() => _companyObject.VatNumber)"></ValidationMessage>
|
<ValidationMessage For="@(() => _companyObject.VatNumber)"></ValidationMessage>
|
||||||
|
|
|
@ -18,10 +18,11 @@
|
||||||
@using Wonky.Client.Components
|
@using Wonky.Client.Components
|
||||||
@using Microsoft.Extensions.Options
|
@using Microsoft.Extensions.Options
|
||||||
@using Wonky.Entity.Configuration
|
@using Wonky.Entity.Configuration
|
||||||
|
@using Microsoft.AspNetCore.Authorization
|
||||||
@page "/info"
|
@page "/info"
|
||||||
<AuthorizeView>
|
|
||||||
<Authorized>
|
@attribute [Authorize(Roles = "Adviser,Admin")]
|
||||||
<div class="row mb-2">
|
<div class="row mb-2">
|
||||||
<div class="col col-md-2">
|
<div class="col col-md-2">
|
||||||
<img class="grumpy-coder" src="@_app?.Image" alt="Wonky Logo"/>
|
<img class="grumpy-coder" src="@_app?.Image" alt="Wonky Logo"/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -29,25 +30,26 @@
|
||||||
<h5>Browservalg</h5>
|
<h5>Browservalg</h5>
|
||||||
Det anbefales at bruge en Chrome baseret browser f.eks. Edge, Safari, Vivaldi, Chrome eller Chromium
|
Det anbefales at bruge en Chrome baseret browser f.eks. Edge, Safari, Vivaldi, Chrome eller Chromium
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<ColorCoding></ColorCoding>
|
<ColorCoding></ColorCoding>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<h5>
|
<h5>
|
||||||
App version <AppVersion></AppVersion>
|
App version <AppVersion></AppVersion>
|
||||||
</h5>
|
</h5>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Authorized>
|
|
||||||
</AuthorizeView>
|
|
||||||
@code{
|
@code{
|
||||||
|
|
||||||
[Inject] IOptions<AppInfo>? AppInfo { get; set; }
|
[Inject]
|
||||||
|
IOptions<AppInfo>? AppInfo { get; set; }
|
||||||
|
|
||||||
private AppInfo? _app;
|
private AppInfo? _app;
|
||||||
|
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
|
@ -56,4 +58,3 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
@page "/sales-item/{salesItemId}"
|
@page "/sales-item/{salesItemId}"
|
||||||
@using Microsoft.AspNetCore.Authorization
|
@using Microsoft.AspNetCore.Authorization
|
||||||
@attribute [Authorize(Roles = "Adviser,Admin")]
|
@attribute [Authorize(Roles = "Adviser,Admin")]
|
||||||
|
|
||||||
|
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h1>@Item.Name</h1>
|
<h1>@Item.Name</h1>
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
@using Microsoft.AspNetCore.Authorization
|
@using Microsoft.AspNetCore.Authorization
|
||||||
@using Wonky.Client.Components
|
@using Wonky.Client.Components
|
||||||
@attribute [Authorize(Roles = "Adviser")]
|
@attribute [Authorize(Roles = "Adviser")]
|
||||||
|
|
||||||
@page "/sales-report"
|
@page "/sales-report"
|
||||||
|
|
||||||
<EditForm EditContext="_editContext">
|
<EditForm EditContext="_editContext">
|
||||||
|
@ -62,15 +61,15 @@
|
||||||
<option value="sickLeave">Sygdom</option>
|
<option value="sickLeave">Sygdom</option>
|
||||||
<option value="leave">Ferie</option>
|
<option value="leave">Ferie</option>
|
||||||
</select>
|
</select>
|
||||||
<ValidationMessage For="@(() => _report.DayTypeEnum)" />
|
<ValidationMessage For="@(() => _report.DayTypeEnum)"/>
|
||||||
</td>
|
</td>
|
||||||
@if (_report.DayTypeEnum.ToLower().Contains("leave"))
|
@if (_report.DayTypeEnum.ToLower().Contains("leave"))
|
||||||
{
|
{
|
||||||
<td>
|
<td>
|
||||||
<InputDate class="form-control" @bind-Value="_leaveBegin" />
|
<InputDate class="form-control" @bind-Value="_leaveBegin"/>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<InputDate class="form-control" @bind-Value="_leaveEnd" />
|
<InputDate class="form-control" @bind-Value="_leaveEnd"/>
|
||||||
</td>
|
</td>
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -86,11 +85,15 @@
|
||||||
}
|
}
|
||||||
<th>
|
<th>
|
||||||
<button type="button" class="btn btn-info"
|
<button type="button" class="btn btn-info"
|
||||||
@onclick="InitializeReport" disabled="@(!_noFigures)">Nøgletal</button>
|
@onclick="InitializeReport" disabled="@(!_noFigures)">
|
||||||
|
Nøgletal
|
||||||
|
</button>
|
||||||
</th>
|
</th>
|
||||||
<td>
|
<td>
|
||||||
<button type="button" class="btn btn-info"
|
<button type="button" class="btn btn-info"
|
||||||
@onclick="SubmitReport" disabled="@(_noFigures)">Gem Rapport</button>
|
@onclick="SubmitReport" disabled="@(_noFigures)">
|
||||||
|
Gem Rapport
|
||||||
|
</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
@ -108,11 +111,11 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<InputTextArea id="description" class="form-control" @bind-Value="_report.Description"/>
|
<InputTextArea id="description" class="form-control" @bind-Value="_report.Description"/>
|
||||||
<ValidationMessage For="@(() => _report.Description)" />
|
<ValidationMessage For="@(() => _report.Description)"/>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<InputText id="supervisedBy" class="form-control" @bind-Value="_report.SupervisedBy"/>
|
<InputText id="supervisedBy" class="form-control" @bind-Value="_report.SupervisedBy"/>
|
||||||
<ValidationMessage For="@(() => _report.SupervisedBy)" />
|
<ValidationMessage For="@(() => _report.SupervisedBy)"/>
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -130,15 +133,15 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<InputNumber class="form-control" @bind-Value="@_report.Figures.KmEvening"
|
<InputNumber class="form-control" @bind-Value="@_report.Figures.KmEvening"
|
||||||
disabled="@(_noFigures)" />
|
disabled="@(_noFigures)"/>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<InputNumber class="form-control" @bind-Value="@_report.Figures.KmMorning"
|
<InputNumber class="form-control" @bind-Value="@_report.Figures.KmMorning"
|
||||||
disabled="@(_noFigures)" />
|
disabled="@(_noFigures)"/>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<InputNumber class="form-control" @bind-Value="@_report.Figures.DistancePrivate"
|
<InputNumber class="form-control" @bind-Value="@_report.Figures.DistancePrivate"
|
||||||
disabled="@(_noFigures)" />
|
disabled="@(_noFigures)"/>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
@ -247,4 +250,3 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</EditForm>
|
</EditForm>
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
@attribute [Authorize(Roles = "Adviser,Admin,Supervisor")]
|
@attribute [Authorize(Roles = "Adviser,Admin,Supervisor")]
|
||||||
|
|
||||||
<WorkDateComponent OnChanged="GetReport"></WorkDateComponent>
|
<WorkDateComponent OnChanged="GetReport"></WorkDateComponent>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
@if (_report.Activities.Any())
|
@if (_report.Activities.Any())
|
||||||
{
|
{
|
||||||
|
@ -101,9 +100,6 @@
|
||||||
<td>@(_report.Report.TotalSaleCountMonth)</td>
|
<td>@(_report.Report.TotalSaleCountMonth)</td>
|
||||||
<td>@(_report.Report.TotalTurnoverMonth)</td>
|
<td>@(_report.Report.TotalTurnoverMonth)</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
</div>
|
</div>
|
|
@ -30,10 +30,6 @@
|
||||||
<div class="content px-4">
|
<div class="content px-4">
|
||||||
@Body
|
@Body
|
||||||
</div>
|
</div>
|
||||||
<BlazoredToasts Position="ToastPosition.BottomCenter"
|
<BlazoredToasts Position="ToastPosition.BottomCenter" Timeout="2"/>
|
||||||
Timeout="3"
|
|
||||||
IconType="IconType.FontAwesome"
|
|
||||||
SuccessIcon="oi oi-thumb-up"
|
|
||||||
ErrorIcon="oi oi-bug" />
|
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
<AuthorizeView>
|
<AuthorizeView>
|
||||||
<NotAuthorized>
|
<NotAuthorized>
|
||||||
<div class="nav-item px-3">
|
<div class="nav-item px-3">
|
||||||
<NavLink class="nav-link" href="login">
|
<NavLink class="nav-link ps-2" href="login">
|
||||||
<span class="oi oi-account-login"></span> Log ind
|
<span class="oi oi-account-login"></span> Log ind
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</div>
|
</div>
|
||||||
|
@ -43,28 +43,33 @@
|
||||||
<AuthorizeView Roles="Adviser,Admin">
|
<AuthorizeView Roles="Adviser,Admin">
|
||||||
<Authorized>
|
<Authorized>
|
||||||
<div class="nav-item px-3">
|
<div class="nav-item px-3">
|
||||||
<NavLink class="nav-link" href="/" Match="NavLinkMatch.All">
|
<NavLink class="nav-link ps-2" href="/home" Match="NavLinkMatch.All">
|
||||||
<span class="oi oi-dashboard" aria-hidden="true"></span> Start
|
<span class="oi oi-dashboard" aria-hidden="true"></span> ToDo
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-item px-3">
|
<div class="nav-item px-3">
|
||||||
<NavLink class="nav-link" href="companies">
|
<NavLink class="nav-link ps-2" href="/activity-today" Match="NavLinkMatch.All">
|
||||||
|
<span class="oi oi-dashboard" aria-hidden="true"></span> Aktivitet
|
||||||
|
</NavLink>
|
||||||
|
</div>
|
||||||
|
<div class="nav-item px-3">
|
||||||
|
<NavLink class="nav-link ps-2" href="companies">
|
||||||
<span class="oi oi-file" aria-hidden="true"></span> Firmaer
|
<span class="oi oi-file" aria-hidden="true"></span> Firmaer
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-item px-3">
|
<div class="nav-item px-3">
|
||||||
<NavLink class="nav-link" href="price-catalog">
|
<NavLink class="nav-link ps-2" href="price-catalog">
|
||||||
<span class="oi oi-spreadsheet" aria-hidden="true"></span> Priskatalog
|
<span class="oi oi-spreadsheet" aria-hidden="true"></span> Priskatalog
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-item px-3">
|
<div class="nav-item px-3">
|
||||||
<NavLink class="nav-link" href="sales-report">
|
<NavLink class="nav-link ps-2" href="sales-report">
|
||||||
<span class="oi oi-document" aria-hidden="true"></span> Dagsrapport
|
<span class="oi oi-document" aria-hidden="true"></span> Dagsrapport
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="nav-item px-3">
|
<div class="nav-item px-3">
|
||||||
<NavLink class="nav-link" href="info">
|
<NavLink class="nav-link ps-2" href="info">
|
||||||
<span class="oi oi-question-mark" aria-hidden="true"></span> Hjælp
|
<span class="oi oi-question-mark" aria-hidden="true"></span> Hjælp
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
},
|
},
|
||||||
"appInfo": {
|
"appInfo": {
|
||||||
"name": "Wonky Client",
|
"name": "Wonky Client",
|
||||||
"version": "0.8.6",
|
"version": "0.8.7",
|
||||||
"isBeta": true,
|
"isBeta": true,
|
||||||
"image": "grumpy-coder.png"
|
"image": "grumpy-coder.png"
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue