build v0.10.10 production
|
@ -49,4 +49,8 @@
|
|||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
}
|
||||
else
|
||||
{
|
||||
<LoaderBallTriangle />
|
||||
}
|
|
@ -78,5 +78,5 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<AppSpinner/>
|
||||
<LoaderBallTriangle />
|
||||
}
|
|
@ -54,5 +54,5 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<AppSpinner/>
|
||||
<LoaderBallTriangle />
|
||||
}
|
|
@ -84,7 +84,5 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<div>
|
||||
Ingen data
|
||||
</div>
|
||||
<LoaderBallTriangle />
|
||||
}
|
|
@ -51,5 +51,5 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<AppSpinner/>
|
||||
<LoaderBallTriangle />
|
||||
}
|
|
@ -67,5 +67,5 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<AppSpinner/>
|
||||
<LoaderBallTriangle />
|
||||
}
|
|
@ -55,5 +55,5 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<AppSpinner/>
|
||||
<LoaderBallTriangle />
|
||||
}
|
26
Wonky.Client/Components/LoaderBallTriangle.razor
Normal file
|
@ -0,0 +1,26 @@
|
|||
@*
|
||||
// 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]
|
||||
//
|
||||
*@
|
||||
|
||||
@if (Loading)
|
||||
{
|
||||
<div class="m-5 @(Loading ? "visible" : "invisible")">
|
||||
<div class="d-flex justify-content-center">
|
||||
<!-- loader credit: samherbert.net/svg-loaders -->
|
||||
<img src="/svg-loaders/ball-triangle" alt="loading ..."/>
|
||||
</div>
|
||||
</div>
|
||||
}
|
18
Wonky.Client/Components/LoaderBallTriangle.razor.cs
Normal file
|
@ -0,0 +1,18 @@
|
|||
|
||||
namespace Wonky.Client.Components;
|
||||
|
||||
public partial class LoaderBallTriangle
|
||||
{
|
||||
private bool Loading { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Loading = true;
|
||||
|
||||
await Task.Delay(10000);
|
||||
|
||||
Loading = false;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -14,6 +14,13 @@
|
|||
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
|
||||
//
|
||||
*@
|
||||
<div class="spinner-border text-warning" role="status">
|
||||
<span class="visually-hidden">Loading...</span>
|
||||
</div>
|
||||
|
||||
@if (Loading)
|
||||
{
|
||||
<div class="m-5 @(Loading ? "visible" : "invisible")">
|
||||
<div class="d-flex justify-content-center">
|
||||
<!-- loader credit: samherbert.net/svg-loaders -->
|
||||
<img src="/svg-loaders/bars.svg" alt="loading ..."/>
|
||||
</div>
|
||||
</div>
|
||||
}
|
18
Wonky.Client/Components/LoaderBars.razor.cs
Normal file
|
@ -0,0 +1,18 @@
|
|||
|
||||
namespace Wonky.Client.Components;
|
||||
|
||||
public partial class LoaderBars
|
||||
{
|
||||
private bool Loading { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Loading = true;
|
||||
|
||||
await Task.Delay(10000);
|
||||
|
||||
Loading = false;
|
||||
}
|
||||
|
||||
|
||||
}
|
26
Wonky.Client/Components/LoaderSnake.razor
Normal file
|
@ -0,0 +1,26 @@
|
|||
@*
|
||||
// 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]
|
||||
//
|
||||
*@
|
||||
|
||||
@if (Loading)
|
||||
{
|
||||
<div class="m-5 @(Loading ? "visible" : "invisible")">
|
||||
<div class="d-flex justify-content-center">
|
||||
<!-- loader credit: samherbert.net/svg-loaders -->
|
||||
<img src="/svg-loaders/tail-spin.svg" alt="loading ..."/>
|
||||
</div>
|
||||
</div>
|
||||
}
|
18
Wonky.Client/Components/LoaderSnake.razor.cs
Normal file
|
@ -0,0 +1,18 @@
|
|||
|
||||
namespace Wonky.Client.Components;
|
||||
|
||||
public partial class LoaderSnake
|
||||
{
|
||||
private bool Loading { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Loading = true;
|
||||
|
||||
await Task.Delay(10000);
|
||||
|
||||
Loading = false;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -82,5 +82,5 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<AppSpinner/>
|
||||
<LoaderBallTriangle />
|
||||
}
|
|
@ -15,7 +15,6 @@
|
|||
|
||||
using System.Timers;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.VisualBasic;
|
||||
using Timer = System.Timers.Timer;
|
||||
|
||||
namespace Wonky.Client.Components
|
||||
|
|
|
@ -73,5 +73,5 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<AppSpinner></AppSpinner>
|
||||
<LoaderBallTriangle />
|
||||
}
|
85
Wonky.Client/Components/WarehouseListComponent.razor
Normal file
|
@ -0,0 +1,85 @@
|
|||
<div class="row mb-3">
|
||||
<div class="col-md-8">
|
||||
<div class="btn-group-lg" role="group" aria-label="Ordre status">
|
||||
<input type="radio" class="btn-check" name="btnorder" id="btnorder1" autocomplete="off" checked @onchange="@GetOrderStatusNone" />
|
||||
<label class="btn btn-danger" for="btnorder1">Ubehandlet</label>
|
||||
|
||||
<input type="radio" class="btn-check" name="btnorder" id="btnorder2" autocomplete="off" @onchange="@GetOrderStatusPicked"/>
|
||||
<label class="btn btn-warning" for="btnorder2">Plukket</label>
|
||||
|
||||
<input type="radio" class="btn-check" name="btnorder" id="btnorder3" autocomplete="off" @onchange="@GetOrderStatusPacked" />
|
||||
<label class="btn btn-success" for="btnorder3">Pakket</label>
|
||||
|
||||
<input type="radio" class="btn-check" name="btnorder" id="btnorder4" autocomplete="off" @onchange="@GetOrderStatusShipped" />
|
||||
<label class="btn btn-info" for="btnorder4">Afsendt</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
@if (_readyToShip && _orders.Any())
|
||||
{
|
||||
<button type="button" class="btn btn-lg btn-primary text-nowrap" @onclick="SetProcessStatusShipped">Sæt alle afsendt</button>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
@if (_orders.Any())
|
||||
{
|
||||
<div class="list-group list-group-flush">
|
||||
<div class="list-group-item">
|
||||
<div class="row mb-1">
|
||||
<div class="col-md-2">
|
||||
<h4>Ordredato</h4>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<h4>Kundenavn</h4>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<h4>Postnr. Bynavn</h4>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<h4>Status</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@foreach (var order in _orders)
|
||||
{
|
||||
<a class="list-group-item list-group-item-action" href="warehouse/orders/@order.OrderId">
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
@order.OrderDate
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
@order.Company.Name
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
@order.Company.ZipCode @order.Company.City
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
@switch (order.ProcessStatusEnum.ToLower())
|
||||
{
|
||||
case "none":
|
||||
<span>Ubehandlet</span>
|
||||
break;
|
||||
case "picked":
|
||||
<span>Plukket</span>
|
||||
break;
|
||||
case "packed":
|
||||
<span>Pakket</span>
|
||||
break;
|
||||
case "shipped":
|
||||
<span>Afsendt</span>
|
||||
break;
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<LoaderBallTriangle />
|
||||
}
|
||||
|
||||
@code {
|
||||
|
||||
}
|
|
@ -4,9 +4,9 @@ using Wonky.Client.HttpInterceptors;
|
|||
using Wonky.Client.HttpRepository;
|
||||
using Wonky.Entity.Views;
|
||||
|
||||
namespace Wonky.Client.Pages;
|
||||
namespace Wonky.Client.Components;
|
||||
|
||||
public partial class WarehouseOrderListPage : IDisposable
|
||||
public partial class WarehouseListComponent
|
||||
{
|
||||
[Inject] private HttpInterceptorService _interceptor { get; set; }
|
||||
[Inject] private IWarehouseHttpRepository _warehouseRepo { get; set; }
|
||||
|
@ -28,21 +28,32 @@ public partial class WarehouseOrderListPage : IDisposable
|
|||
|
||||
private async Task GetOrderStatusNone()
|
||||
{
|
||||
_orders = new List<WarehouseOrderView>();
|
||||
_orders = await _warehouseRepo.GetWarehouseOrderListByStatus("none");
|
||||
_readyToShip = false;
|
||||
}
|
||||
|
||||
private async Task GetOrderStatusPicked()
|
||||
{
|
||||
_orders = new List<WarehouseOrderView>();
|
||||
_orders = await _warehouseRepo.GetWarehouseOrderListByStatus("picked");
|
||||
_readyToShip = false;
|
||||
}
|
||||
|
||||
private async Task GetOrderStatusPacked()
|
||||
{
|
||||
_orders = new List<WarehouseOrderView>();
|
||||
_orders = await _warehouseRepo.GetWarehouseOrderListByStatus("packed");
|
||||
_readyToShip = true;
|
||||
}
|
||||
|
||||
private async Task GetOrderStatusShipped()
|
||||
{
|
||||
_orders = new List<WarehouseOrderView>();
|
||||
var orderList = await _warehouseRepo.GetWarehouseOrderListByStatus("shipped");
|
||||
_orders = orderList.OrderByDescending(x => x.OrderDate).ToList();
|
||||
_readyToShip = false;
|
||||
}
|
||||
|
||||
private async Task SetProcessStatusShipped()
|
||||
{
|
||||
|
@ -63,4 +74,5 @@ public partial class WarehouseOrderListPage : IDisposable
|
|||
{
|
||||
_interceptor.DisposeEvent();
|
||||
}
|
||||
|
||||
}
|
|
@ -57,7 +57,7 @@ public class ActivityHttpRepository : IActivityHttpRepository
|
|||
public async Task<ReportItemListView> GetActivities(string activityDate)
|
||||
{
|
||||
var response = await _client
|
||||
.GetAsync($"{_apiConfig.ActivityUri}/date/{activityDate}");
|
||||
.GetAsync($"{_apiConfig.CrmSale}/date/{activityDate}");
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
return string.IsNullOrWhiteSpace(content)
|
||||
? new ReportItemListView()
|
||||
|
@ -67,7 +67,7 @@ public class ActivityHttpRepository : IActivityHttpRepository
|
|||
public async Task<ApiResponseView> CreateActivity(ActivityDto model)
|
||||
{
|
||||
Console.WriteLine(JsonSerializer.Serialize(model, _options));
|
||||
var response = await _client.PostAsJsonAsync($"{_apiConfig.ActivityUri}", model, _options);
|
||||
var response = await _client.PostAsJsonAsync($"{_apiConfig.CrmSale}", model, _options);
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
var result = JsonSerializer.Deserialize<ApiResponseView>(content);
|
||||
return result!;
|
||||
|
@ -76,13 +76,13 @@ public class ActivityHttpRepository : IActivityHttpRepository
|
|||
public async Task<ActivityDto> GetActivity(string id)
|
||||
{
|
||||
var salesItem = await _client
|
||||
.GetFromJsonAsync<ActivityDto>($"{_apiConfig.ActivityUri}/{id}");
|
||||
.GetFromJsonAsync<ActivityDto>($"{_apiConfig.CrmSale}/{id}");
|
||||
return salesItem ?? new ActivityDto();
|
||||
}
|
||||
|
||||
public async Task<ApiResponseView> AcceptOffer(string id)
|
||||
{
|
||||
var response = await _client.PostAsJsonAsync($"{_apiConfig.ActivityUri}/{id}/accept", id)
|
||||
var response = await _client.PostAsJsonAsync($"{_apiConfig.CrmSale}/{id}/accept", id)
|
||||
;
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
var result = JsonSerializer.Deserialize<ApiResponseView>(content);
|
||||
|
|
|
@ -47,12 +47,12 @@ public class AdminReportHttpRepository : IAdminReportHttpRepository
|
|||
|
||||
public async Task<List<NgSalesReportListView>> GetReports(string userId)
|
||||
{
|
||||
return await _client.GetFromJsonAsync<List<NgSalesReportListView>>($"{_apiConfig.AdminAdvisorUri}/{userId}/reports");
|
||||
return await _client.GetFromJsonAsync<List<NgSalesReportListView>>($"{_apiConfig.AdminUser}/{userId}/reports");
|
||||
}
|
||||
|
||||
public async Task<ReportView> GetReport(string userId, string workDate)
|
||||
{
|
||||
return await _client.GetFromJsonAsync<ReportView>($"{_apiConfig.AdminAdvisorUri}/{userId}/reports/{workDate}");
|
||||
return await _client.GetFromJsonAsync<ReportView>($"{_apiConfig.AdminUser}/{userId}/reports/{workDate}");
|
||||
|
||||
}
|
||||
}
|
|
@ -68,7 +68,7 @@ public class CompanyHttpRepository : ICompanyHttpRepository
|
|||
["isHidden"] = pagingParameters.IsHidden.ToString(),
|
||||
["hasFolded"] = pagingParameters.HasFolded.ToString()
|
||||
};
|
||||
var response = await _client.GetAsync(QueryHelpers.AddQueryString($"{_apiConfig.CompanyUri}/page", queryString));
|
||||
var response = await _client.GetAsync(QueryHelpers.AddQueryString($"{_apiConfig.CrmCustomer}/page", queryString));
|
||||
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
|
||||
|
@ -93,7 +93,7 @@ public class CompanyHttpRepository : ICompanyHttpRepository
|
|||
["hasFolded"] = pagingParameters.HasFolded.ToString()
|
||||
};
|
||||
var response = await _client
|
||||
.GetAsync(QueryHelpers.AddQueryString($"{_apiConfig.AdminAdvisorUri}/{userId}/companies", queryString));
|
||||
.GetAsync(QueryHelpers.AddQueryString($"{_apiConfig.AdminUser}/{userId}/companies", queryString));
|
||||
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
|
||||
|
@ -107,13 +107,13 @@ public class CompanyHttpRepository : ICompanyHttpRepository
|
|||
|
||||
public async Task<CompanyDto> GetCompanyByAccount(string accountNumber)
|
||||
{
|
||||
var company = await _client.GetFromJsonAsync<CompanyDto>($"{_apiConfig.CompanyUri}/account/{accountNumber}");
|
||||
var company = await _client.GetFromJsonAsync<CompanyDto>($"{_apiConfig.CrmCustomer}/account/{accountNumber}");
|
||||
return company ?? new CompanyDto();
|
||||
}
|
||||
|
||||
public async Task<CompanyDto> GetCompanyById(string companyId)
|
||||
{
|
||||
var company = await _client.GetFromJsonAsync<CompanyDto>($"{_apiConfig.CompanyUri}/{companyId}");
|
||||
var company = await _client.GetFromJsonAsync<CompanyDto>($"{_apiConfig.CrmCustomer}/{companyId}");
|
||||
return company ?? new CompanyDto();
|
||||
}
|
||||
|
||||
|
@ -124,7 +124,7 @@ public class CompanyHttpRepository : ICompanyHttpRepository
|
|||
/// <returns>company id</returns>
|
||||
public async Task<string> CreateCompany(CompanyDto model)
|
||||
{
|
||||
var response = await _client.PostAsJsonAsync($"{_apiConfig.CompanyUri}", model);
|
||||
var response = await _client.PostAsJsonAsync($"{_apiConfig.CrmCustomer}", model);
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
var result = JsonSerializer.Deserialize<CompanyDto>(content, _options);
|
||||
return result.CompanyId;
|
||||
|
@ -132,7 +132,7 @@ public class CompanyHttpRepository : ICompanyHttpRepository
|
|||
|
||||
public async Task<bool> UpdateCompany(string companyId, CompanyDto model)
|
||||
{
|
||||
var response = await _client.PutAsJsonAsync($"{_apiConfig.CompanyUri}/{companyId}", model);
|
||||
var response = await _client.PutAsJsonAsync($"{_apiConfig.CrmCustomer}/{companyId}", model);
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
Console.WriteLine(content);
|
||||
return response.IsSuccessStatusCode;
|
||||
|
@ -140,7 +140,7 @@ public class CompanyHttpRepository : ICompanyHttpRepository
|
|||
|
||||
public async Task<bool> DeleteCompany(string companyId)
|
||||
{
|
||||
var response = await _client.DeleteAsync($"{_apiConfig.CompanyUri}/{companyId}");
|
||||
var response = await _client.DeleteAsync($"{_apiConfig.CrmCustomer}/{companyId}");
|
||||
return response.IsSuccessStatusCode;
|
||||
}
|
||||
}
|
|
@ -48,7 +48,7 @@ public class HistoryHttpRepository : IHistoryHttpRepository
|
|||
}
|
||||
public async Task<List<ProductInventoryView>> FetchInventory(string companyId)
|
||||
{
|
||||
var response = await _client.GetAsync($"{_api.CompanyUri}/{companyId}/{_api.InventoryUri}");
|
||||
var response = await _client.GetAsync($"{_api.CrmCustomer}/{companyId}/{_api.CrmInventory}");
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
return response.IsSuccessStatusCode
|
||||
? JsonSerializer.Deserialize<List<ProductInventoryView>>(content, _options)
|
||||
|
@ -59,18 +59,18 @@ public class HistoryHttpRepository : IHistoryHttpRepository
|
|||
public async Task<List<ProductHistoryView>> FetchHistory(string companyId)
|
||||
{
|
||||
return await _client.GetFromJsonAsync<List<ProductHistoryView>>(
|
||||
$"{_api.CompanyUri}/{companyId}/{_api.ProductUri}");
|
||||
$"{_api.CrmCustomer}/{companyId}/{_api.CrmProduct}");
|
||||
|
||||
}
|
||||
|
||||
public async Task<List<ProductHistoryView>> FetchHistory(string companyId, string sku)
|
||||
{
|
||||
return await _client.GetFromJsonAsync<List<ProductHistoryView>>(
|
||||
$"{_api.CompanyUri}/{companyId}/{_api.ProductUri}/{sku}");
|
||||
$"{_api.CrmCustomer}/{companyId}/{_api.CrmProduct}/{sku}");
|
||||
}
|
||||
|
||||
public async Task<string> UpdateProductHistory(string companyId, string syncDate = "2010-01-01")
|
||||
{
|
||||
return await _client.GetStringAsync($"{_api.CompanyUri}/{companyId}/{_api.SyncUri}/{syncDate}");
|
||||
return await _client.GetStringAsync($"{_api.CrmCustomer}/{companyId}/{_api.CrmSync}/{syncDate}");
|
||||
}
|
||||
}
|
|
@ -48,32 +48,32 @@ public class ReportHttpRepository :IReportHttpRepository
|
|||
|
||||
public async Task<List<NgSalesReportListView>> GetReports()
|
||||
{
|
||||
return await _client.GetFromJsonAsync<List<NgSalesReportListView>>($"{_apiConfig.ReportUri}");
|
||||
return await _client.GetFromJsonAsync<List<NgSalesReportListView>>($"{_apiConfig.CrmReport}");
|
||||
}
|
||||
public async Task<bool> ReportExist(string workDate)
|
||||
{
|
||||
var result =
|
||||
await _client
|
||||
.GetFromJsonAsync<SalesReportClosedView>($"{_apiConfig.ReportUri}/exist/{workDate}");
|
||||
.GetFromJsonAsync<SalesReportClosedView>($"{_apiConfig.CrmReport}/exist/{workDate}");
|
||||
return result.ReportClosed;
|
||||
}
|
||||
|
||||
public async Task<ReportView> GetReport(string workDate)
|
||||
{
|
||||
return await _client.GetFromJsonAsync<ReportView>($"{_apiConfig.ReportUri}/{workDate}");
|
||||
return await _client.GetFromJsonAsync<ReportView>($"{_apiConfig.CrmReport}/{workDate}");
|
||||
|
||||
}
|
||||
public async Task<ReportInitDto> InitializeReportData(string workDate)
|
||||
{
|
||||
var initData = await _client
|
||||
.GetFromJsonAsync<ReportInitDto>($"{_apiConfig.ReportUri}/init/{workDate}");
|
||||
.GetFromJsonAsync<ReportInitDto>($"{_apiConfig.CrmReport}/init/{workDate}");
|
||||
return initData ?? new ReportInitDto();
|
||||
}
|
||||
|
||||
public async Task<ApiResponseView> PostReport(string workDate, ReportDto reportDto)
|
||||
{
|
||||
var response = await _client
|
||||
.PostAsJsonAsync($"{_apiConfig.ReportUri}/{workDate}", reportDto, _options);
|
||||
.PostAsJsonAsync($"{_apiConfig.CrmReport}/{workDate}", reportDto, _options);
|
||||
|
||||
var jsonDate = await response.Content.ReadAsStringAsync();
|
||||
var result = JsonSerializer.Deserialize<ApiResponseView>(jsonDate);
|
||||
|
|
|
@ -64,7 +64,7 @@ public class SalesItemHttpRepository : ISalesItemHttpRepository
|
|||
["selectGroup"] = pagingParameters.SelectGroup == "0" ? "" : pagingParameters.SelectGroup,
|
||||
};
|
||||
var response = await _client
|
||||
.GetAsync(QueryHelpers.AddQueryString($"{_apiConfig.CatalogUri}/page", queryString));
|
||||
.GetAsync(QueryHelpers.AddQueryString($"{_apiConfig.CrmCatalog}/page", queryString));
|
||||
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
|
||||
|
@ -80,7 +80,7 @@ public class SalesItemHttpRepository : ISalesItemHttpRepository
|
|||
public async Task<SalesItemView> GetSalesItem(string id)
|
||||
{
|
||||
var salesItem = await _client
|
||||
.GetFromJsonAsync<SalesItemView>($"{_apiConfig.CatalogUri}/{id}");
|
||||
.GetFromJsonAsync<SalesItemView>($"{_apiConfig.CrmCatalog}/{id}");
|
||||
return salesItem ?? new SalesItemView();
|
||||
}
|
||||
}
|
|
@ -51,31 +51,31 @@ public class TaskItemHttpRepository : ITaskItemHttpRepository
|
|||
|
||||
public async Task<List<TaskItemDto>?> GetTaskList()
|
||||
{
|
||||
return await _client.GetFromJsonAsync<List<TaskItemDto>>($"{_apiConfig.TaskUri}", _options);
|
||||
return await _client.GetFromJsonAsync<List<TaskItemDto>>($"{_apiConfig.CrmTask}", _options);
|
||||
}
|
||||
|
||||
public async Task<List<TaskItemDto>?> GetTaskList(string workDate)
|
||||
{
|
||||
return await _client.GetFromJsonAsync<List<TaskItemDto>>($"{_apiConfig.TaskUri}/date/{workDate}", _options);
|
||||
return await _client.GetFromJsonAsync<List<TaskItemDto>>($"{_apiConfig.CrmTask}/date/{workDate}", _options);
|
||||
}
|
||||
|
||||
public async Task<TaskItemDto?> GetTaskItem(string taskItemId)
|
||||
{
|
||||
return await _client.GetFromJsonAsync<TaskItemDto>($"{_apiConfig.TaskUri}/{taskItemId}", _options);
|
||||
return await _client.GetFromJsonAsync<TaskItemDto>($"{_apiConfig.CrmTask}/{taskItemId}", _options);
|
||||
}
|
||||
|
||||
public async Task CreateTaskItem(TaskItemDto taskItem)
|
||||
{
|
||||
await _client.PostAsJsonAsync($"{_apiConfig.TaskUri}", taskItem, _options);
|
||||
await _client.PostAsJsonAsync($"{_apiConfig.CrmTask}", taskItem, _options);
|
||||
}
|
||||
|
||||
public async Task UpdateTaskItem(string taskItemId, TaskItemDto taskItem)
|
||||
{
|
||||
await _client.PutAsJsonAsync($"{_apiConfig.TaskUri}/{taskItemId}", taskItem, _options);
|
||||
await _client.PutAsJsonAsync($"{_apiConfig.CrmTask}/{taskItemId}", taskItem, _options);
|
||||
}
|
||||
|
||||
public async Task DeleteTaskItem(string taskItemId)
|
||||
{
|
||||
await _client.DeleteAsync($"{_apiConfig.TaskUri}/{taskItemId}");
|
||||
await _client.DeleteAsync($"{_apiConfig.CrmTask}/{taskItemId}");
|
||||
}
|
||||
}
|
|
@ -49,37 +49,37 @@ public class UserHttpRepository : IUserHttpRepository
|
|||
|
||||
public async Task<List<UserListAdminView>> GetAdvisors()
|
||||
{
|
||||
return await _client.GetFromJsonAsync<List<UserListAdminView>>(_api.AdminAdvisorUri);
|
||||
return await _client.GetFromJsonAsync<List<UserListAdminView>>(_api.AdminUser);
|
||||
}
|
||||
|
||||
public async Task<AdminUserInfoDto> GetAdvisorInfo(string userId)
|
||||
{
|
||||
return await _client.GetFromJsonAsync<AdminUserInfoDto>($"{_api.AdminAdvisorUri}/{userId}");
|
||||
return await _client.GetFromJsonAsync<AdminUserInfoDto>($"{_api.AdminUser}/{userId}");
|
||||
}
|
||||
|
||||
public async Task UpdateAdvisor(string userId, UserUpdateDto model)
|
||||
{
|
||||
await _client.PutAsJsonAsync($"{_api.AdminAdvisorUri}/{userId}", model, _options);
|
||||
await _client.PutAsJsonAsync($"{_api.AdminUser}/{userId}", model, _options);
|
||||
}
|
||||
|
||||
public async Task<List<UserListAdminView>> GetAdminUsers()
|
||||
{
|
||||
return await _client.GetFromJsonAsync<List<UserListAdminView>>(_api.AdminUserUri);
|
||||
return await _client.GetFromJsonAsync<List<UserListAdminView>>(_api.AdminOffice);
|
||||
}
|
||||
|
||||
public async Task<AdminUserInfoDto> GetAdminUserInfo(string userId)
|
||||
{
|
||||
return await _client.GetFromJsonAsync<AdminUserInfoDto>($"{_api.AdminUserUri}/{userId}");
|
||||
return await _client.GetFromJsonAsync<AdminUserInfoDto>($"{_api.AdminOffice}/{userId}");
|
||||
}
|
||||
|
||||
public async Task UpdateAdminUser(string userId, UserUpdateDto model)
|
||||
{
|
||||
await _client.PutAsJsonAsync($"{_api.AdminUserUri}/{userId}", model, _options);
|
||||
await _client.PutAsJsonAsync($"{_api.AdminOffice}/{userId}", model, _options);
|
||||
}
|
||||
|
||||
public async Task ResetUserPassword(string userId, string newPasswd, string confirmPasswd)
|
||||
{
|
||||
var passwd = new Dictionary<string, string> {{"newPassword", newPasswd}, {"confirmPassword", confirmPasswd}};
|
||||
await _client.PostAsJsonAsync($"{_api.AdminPasswdUri}/{userId}", passwd, _options);
|
||||
await _client.PostAsJsonAsync($"{_api.AdminPasswd}/{userId}", passwd, _options);
|
||||
}
|
||||
}
|
|
@ -32,21 +32,21 @@ public class WarehouseHttpRepository : IWarehouseHttpRepository
|
|||
|
||||
public async Task<List<WarehouseOrderView>> GetWarehouseOrderListByDate(string date)
|
||||
{
|
||||
return await _client.GetFromJsonAsync<List<WarehouseOrderView>>($"{_api.WarehouseUri}?date={date}", _options);
|
||||
return await _client.GetFromJsonAsync<List<WarehouseOrderView>>($"{_api.Warehouse}?date={date}", _options);
|
||||
}
|
||||
|
||||
public async Task<List<WarehouseOrderView>> GetWarehouseOrderListByStatus(string status)
|
||||
{
|
||||
return await _client.GetFromJsonAsync<List<WarehouseOrderView>>($"{_api.WarehouseUri}?status={status}", _options);
|
||||
return await _client.GetFromJsonAsync<List<WarehouseOrderView>>($"{_api.Warehouse}?status={status}", _options);
|
||||
}
|
||||
|
||||
public async Task<WarehouseOrderView> GetWarehouseOrder(string orderId)
|
||||
{
|
||||
return await _client.GetFromJsonAsync<WarehouseOrderView>($"{_api.WarehouseUri}/{orderId}", _options);
|
||||
return await _client.GetFromJsonAsync<WarehouseOrderView>($"{_api.Warehouse}/{orderId}", _options);
|
||||
}
|
||||
public async Task UpdateWarehouseOrderStatus(WarehouseProcess process)
|
||||
{
|
||||
_logger.LogDebug("process => {}", JsonSerializer.Serialize(process));
|
||||
await _client.PutAsJsonAsync($"{_api.WarehouseUri}/{process.OrderId}", process, _options);
|
||||
await _client.PutAsJsonAsync($"{_api.Warehouse}/{process.OrderId}", process, _options);
|
||||
}
|
||||
}
|
|
@ -352,7 +352,7 @@
|
|||
<div class="card-footer">
|
||||
@if (HideButtons)
|
||||
{
|
||||
<AppSpinner></AppSpinner>
|
||||
<LoaderBallTriangle />
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
@page "/admin/users/advisors/{CountryCode}/{UserId}/view"
|
||||
@using Microsoft.AspNetCore.Authorization
|
||||
@using Wonky.Client.Components
|
||||
@attribute [Authorize(Roles = "Admin")]
|
||||
|
||||
<div class="card">
|
||||
|
@ -129,7 +130,7 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<AppSpinner/>
|
||||
<LoaderBallTriangle />
|
||||
}
|
||||
</div>
|
||||
</div>
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
@page "/admin/users/office/{CountryCode}/{UserId}/view"
|
||||
@using Microsoft.AspNetCore.Authorization
|
||||
@using Wonky.Client.Components
|
||||
@attribute [Authorize(Roles = "Admin")]
|
||||
|
||||
<div class="card">
|
||||
|
@ -112,7 +113,7 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<AppSpinner/>
|
||||
<LoaderBallTriangle />
|
||||
}
|
||||
</div>
|
||||
</div>
|
|
@ -33,7 +33,7 @@
|
|||
<div class="col-md-2 justify-content-center">
|
||||
@if (_working)
|
||||
{
|
||||
<AppSpinner></AppSpinner>
|
||||
<LoaderBallTriangle/>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -219,5 +219,5 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<AppSpinner/>
|
||||
<LoaderBallTriangle/>
|
||||
}
|
|
@ -23,22 +23,44 @@
|
|||
|
||||
@attribute [Authorize(Roles = "Advisor,Admin,Office,Warehouse")]
|
||||
<div class="row mb-2">
|
||||
<div class="col col-md-2">
|
||||
<img class="grumpy-coder" src="@_app?.Image" alt="Wonky Logo"/>
|
||||
</div>
|
||||
<div class="col">
|
||||
<h5>Browservalg</h5>
|
||||
Den nyeste udgave af Google Chrome, Chromium, Microsoft Edge, Apple Safari eller Vivaldi.
|
||||
<div class="col col-md-4">
|
||||
<div class="text-center">
|
||||
<img class="grumpy-coder mb-2" src="@_app?.Image" alt="Wonky Logo"/>
|
||||
<h5><AppVersion></AppVersion></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
|
||||
<div class="row mb-2">
|
||||
<div class="col col-md-4">
|
||||
<h2 class="text-center">Piktogrammer</h2>
|
||||
<ColorCoding></ColorCoding>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<AppVersion></AppVersion>
|
||||
|
||||
<div class="row mb-2">
|
||||
<div class="col col-md-4">
|
||||
<h2 class="text-center">Testede browsere</h2>
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item">Safari (macOS, iOS)</li>
|
||||
<li class="list-group-item">Chrome (Linux, Windows, Android)</li>
|
||||
<li class="list-group-item">Edge (Linux, Windows, Android)</li>
|
||||
<li class="list-group-item">Firefox (Linux, Windows, Android)</li>
|
||||
<li class="list-group-item">Chromium (Linux)</li>
|
||||
<li class="list-group-item">Vivaldi (Linux)</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-2">
|
||||
<div class="col col-md-4">
|
||||
<h2 class="text-center">Open Source</h2>
|
||||
<ul class="list-group">
|
||||
<a class="list-group-item list-group-item-action" href="https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor/" target="_blank">Blazor WebAssembly</a>
|
||||
<a class="list-group-item list-group-item-action" href="https://getbootstrap.com/" target="_blank">Bootstrap</a>
|
||||
<a class="list-group-item list-group-item-action" href="https://github.com/SamHerbert/SVG-Loaders" target="_blank">SVG-Loaders</a>
|
||||
<a class="list-group-item list-group-item-action" href="https://codeberg.org/wonky/Wonky.Client" target="_blank">Wonky Client</a>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -27,6 +27,9 @@
|
|||
<AdvisorLandingComponent />
|
||||
</AuthorizeView>
|
||||
|
||||
<AuthorizeView Roles="Warehouse">
|
||||
<WarehouseListComponent />
|
||||
</AuthorizeView>
|
||||
|
||||
@code{
|
||||
}
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
<div class="col d-flex justify-content-center">
|
||||
@if (execLogin)
|
||||
{
|
||||
<AppSpinner/>
|
||||
<LoaderBallTriangle />
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,78 +1,6 @@
|
|||
@using Microsoft.AspNetCore.Authorization
|
||||
@using Wonky.Client.Components
|
||||
@attribute [Authorize(Roles = "Admin,Warehouse,Office")]
|
||||
@page "/warehouse/orders"
|
||||
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-8">
|
||||
<div class="btn-group-lg" role="group" aria-label="Ordre status">
|
||||
<input type="radio" class="btn-check" name="btnorder" id="btnorder1" autocomplete="off" checked @onchange="@GetOrderStatusNone" />
|
||||
<label class="btn btn-danger" for="btnorder1">Ubehandlet</label>
|
||||
|
||||
<input type="radio" class="btn-check" name="btnorder" id="btnorder2" autocomplete="off" @onchange="@GetOrderStatusPicked"/>
|
||||
<label class="btn btn-warning" for="btnorder2">Plukket</label>
|
||||
|
||||
<input type="radio" class="btn-check" name="btnorder" id="btnorder3" autocomplete="off" @onchange="@GetOrderStatusPacked" />
|
||||
<label class="btn btn-success" for="btnorder3">Pakket</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
@if (_readyToShip && _orders.Any())
|
||||
{
|
||||
<button type="button" class="btn btn-lg btn-primary text-nowrap" @onclick="SetProcessStatusShipped">Sæt alle afsendt</button>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
@if (_orders.Any())
|
||||
{
|
||||
<div class="list-group list-group-flush">
|
||||
<div class="list-group-item">
|
||||
<div class="row mb-1">
|
||||
<div class="col-md-2">
|
||||
<h4>Ordredato</h4>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<h4>Kundenavn</h4>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<h4>Postnr. Bynavn</h4>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<h4>Status</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@foreach (var order in _orders)
|
||||
{
|
||||
<a class="list-group-item list-group-item-action" href="warehouse/orders/@order.OrderId">
|
||||
<div class="row">
|
||||
<div class="col-md-2">
|
||||
@order.OrderDate
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
@order.Company.Name
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
@order.Company.ZipCode @order.Company.City
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
@switch (order.ProcessStatusEnum.ToLower())
|
||||
{
|
||||
case "none":
|
||||
<span>Ubehandlet</span>
|
||||
break;
|
||||
case "picked":
|
||||
<span>Plukket</span>
|
||||
break;
|
||||
case "packed":
|
||||
<span>Pakket</span>
|
||||
break;
|
||||
case "shipped":
|
||||
<span>Afsendt</span>
|
||||
break;
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
<WarehouseListComponent />
|
|
@ -1,4 +1,5 @@
|
|||
@using Microsoft.AspNetCore.Authorization
|
||||
@using Wonky.Client.Components
|
||||
@attribute [Authorize(Roles = "Admin,Warehouse,Office")]
|
||||
@page "/warehouse/orders/{OrderId}"
|
||||
|
||||
|
@ -99,5 +100,5 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<div>Ingen data</div>
|
||||
<LoaderBallTriangle />
|
||||
}
|
|
@ -54,7 +54,7 @@ namespace Wonky.Client.Services
|
|||
};
|
||||
|
||||
var response = await _client
|
||||
.PostAsync(_apiConfig.Value.TokenUri, new FormUrlEncodedContent(credentials));
|
||||
.PostAsync(_apiConfig.Value.CrmAuth, new FormUrlEncodedContent(credentials));
|
||||
|
||||
var resContent = await response.Content.ReadAsStringAsync();
|
||||
|
||||
|
@ -89,7 +89,7 @@ namespace Wonky.Client.Services
|
|||
["grant_type"] = "refresh_token",
|
||||
["refresh_token"] = refreshToken
|
||||
};
|
||||
var response = await _client.PostAsync(_apiConfig.Value.TokenUri, new FormUrlEncodedContent(credentials));
|
||||
var response = await _client.PostAsync(_apiConfig.Value.CrmAuth, new FormUrlEncodedContent(credentials));
|
||||
if (!response.IsSuccessStatusCode)
|
||||
return string.Empty;
|
||||
|
||||
|
@ -119,7 +119,7 @@ namespace Wonky.Client.Services
|
|||
|
||||
public async Task<UserInfoView> UserInfo(bool write = false)
|
||||
{
|
||||
var infoResponse = await _client.GetAsync(_apiConfig.Value.UserInfoUri);
|
||||
var infoResponse = await _client.GetAsync(_apiConfig.Value.CrmUser);
|
||||
var infoContent = await infoResponse.Content.ReadAsStringAsync();
|
||||
var userInfo = JsonSerializer.Deserialize<UserInfoView>(infoContent, _options);
|
||||
if(write)
|
||||
|
|
|
@ -51,7 +51,7 @@ public class VatInfoLookupService
|
|||
["houseNumber"] = $"{query.HouseNumber}",
|
||||
["zipCode"] = $"{query.ZipCode}"
|
||||
};
|
||||
var endpoint = QueryHelpers.AddQueryString(_config.VirkUrl, queryString);
|
||||
var endpoint = QueryHelpers.AddQueryString(_config.ServiceVirk, queryString);
|
||||
var response = await _client.GetAsync(endpoint);
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
var jsonResult = JsonSerializer.Deserialize<List<VirkRegInfo>>(content, _options);
|
||||
|
@ -70,7 +70,7 @@ public class VatInfoLookupService
|
|||
{
|
||||
["vatNumber"] = $"{vatNumber}"
|
||||
};
|
||||
var endpoint = QueryHelpers.AddQueryString(_config.BrRegUrl, queryString);
|
||||
var endpoint = QueryHelpers.AddQueryString(_config.ServiceBrReg, queryString);
|
||||
var response = await _client.GetAsync(endpoint);
|
||||
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
|
@ -91,7 +91,7 @@ public class VatInfoLookupService
|
|||
{
|
||||
["vatNumber"] = $"{vatNumber}"
|
||||
};
|
||||
var endpoint = QueryHelpers.AddQueryString(_config.ViesUrl, queryString);
|
||||
var endpoint = QueryHelpers.AddQueryString(_config.ServiceVies, queryString);
|
||||
var response = await _client.GetAsync(endpoint);
|
||||
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
|
|
|
@ -11,10 +11,10 @@
|
|||
<PackageReference Include="Blazored.LocalStorage" Version="4.2.0" />
|
||||
<PackageReference Include="Blazored.Toast" Version="3.2.2" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authorization" Version="6.0.5" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="6.0.5" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.5" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="6.0.5" PrivateAssets="all" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authorization" Version="6.0.7" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="6.0.7" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.7" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="6.0.7" PrivateAssets="all" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
|
||||
|
|
|
@ -1,34 +1,32 @@
|
|||
{
|
||||
"appInfo": {
|
||||
"name": "Wonky Client",
|
||||
"version": "0.9.19",
|
||||
"rc": true,
|
||||
"version": "0.10.10",
|
||||
"rc": false,
|
||||
"sandBox": false,
|
||||
"image": "grumpy-coder.png"
|
||||
},
|
||||
"apiConfig": {
|
||||
"innoBaseUrl": "https://staging.innotec.dk",
|
||||
"innoBaseUrl": "https://production.innotec.dk",
|
||||
"glsTrackUrl": "https://www.gls-group.eu/276-I-PORTAL-WEB/content/GLS/DK01/DA/5004.htm?txtAction=71000&txtRefNo=",
|
||||
"glsId": "",
|
||||
"virkUrl": "api/v2/services/virk",
|
||||
"brRegUrl": "api/v2/services/brReg",
|
||||
"viesUrl": "api/v2/services/vies",
|
||||
"tokenUri": "token",
|
||||
"userInfoUri": "api/auth/userinfo",
|
||||
"catalogUri": "api/v2/crm/catalog",
|
||||
"activityUri": "api/v2/crm/advisors/sales",
|
||||
"reportUri": "api/v2/crm/advisors/reports",
|
||||
"taskUri": "api/v2/crm/advisors/tasks",
|
||||
"companyUri": "api/v2/crm/companies",
|
||||
"inventoryUri": "history/inventory",
|
||||
"productUri": "history/products",
|
||||
"syncUri": "history/sync",
|
||||
"adminAdvisorUri": "api/v2/admin/users/advisors",
|
||||
"adminUserUri": "api/v2/admin/users/office",
|
||||
"adminPasswdUri": "api/v2/admin/users/passwd",
|
||||
"adminReportUri": "reports",
|
||||
"adminCompanyUri": "companies",
|
||||
"warehouseUri": "api/v2/warehouse/orders"
|
||||
"servcieVirk": "api/v2/services/virk",
|
||||
"serviceBrReg": "api/v2/services/brReg",
|
||||
"servcieVies": "api/v2/services/vies",
|
||||
"crmAuth": "token",
|
||||
"crmUser": "api/auth/userinfo",
|
||||
"crmCatalog": "api/v2/crm/catalog",
|
||||
"crmSale": "api/v2/crm/advisors/sales",
|
||||
"crmReport": "api/v2/crm/advisors/reports",
|
||||
"crmTask": "api/v2/crm/advisors/tasks",
|
||||
"crmCustomer": "api/v2/crm/companies",
|
||||
"crmInventory": "history/inventory",
|
||||
"crmProduct": "history/products",
|
||||
"crmSync": "history/sync",
|
||||
"adminUser": "api/v2/admin/users/advisors",
|
||||
"adminOffice": "api/v2/admin/users/office",
|
||||
"adminPasswd": "api/v2/admin/users/passwd",
|
||||
"warehouse": "api/v2/warehouse/orders"
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
|
|
|
@ -3,28 +3,28 @@
|
|||
|
||||
<head>
|
||||
<title>Inno Web CRM</title>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||
<meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png">
|
||||
<link rel="mask-icon" href="safari-pinned-tab.svg" color="#5bbad5">
|
||||
<meta name="msapplication-TileColor" content="#ffaa00">
|
||||
<meta name="theme-color" content="#000">
|
||||
<base href="/" />
|
||||
<base href="/"/>
|
||||
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="css/app.css" rel="stylesheet" />
|
||||
<link href="Wonky.Client.styles.css" rel="stylesheet" />
|
||||
<link href="_content/Blazored.Toast/blazored-toast.min.css" rel="stylesheet" />
|
||||
<link href="css/app.css" rel="stylesheet"/>
|
||||
<link href="Wonky.Client.styles.css" rel="stylesheet"/>
|
||||
<link href="_content/Blazored.Toast/blazored-toast.min.css" rel="stylesheet"/>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
<div class="spinner-border text-warning" role="status">
|
||||
<span class="visually-hidden">Indlæser siden ...</span>
|
||||
<div class="m-5 d-flex justify-content-center">
|
||||
<!-- loader credit: samherbert.net/svg-loaders -->
|
||||
<img src="svg-loaders/ball-triangle.svg" alt="loading ..."/>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="_framework/blazor.webassembly.js"></script>
|
||||
<script src="/bootstrap/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="_framework/blazor.webassembly.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
29
Wonky.Client/wwwroot/svg-loaders/audio.svg
Normal file
|
@ -0,0 +1,29 @@
|
|||
<!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL -->
|
||||
<svg width="55" height="80" viewBox="0 0 55 80" xmlns="http://www.w3.org/2000/svg" fill="#ffaa00">
|
||||
<g transform="matrix(1 0 0 -1 0 80)">
|
||||
<rect width="10" height="20" rx="3">
|
||||
<animate attributeName="height"
|
||||
begin="0s" dur="4.3s"
|
||||
values="20;45;57;80;64;32;66;45;64;23;66;13;64;56;34;34;2;23;76;79;20" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</rect>
|
||||
<rect x="15" width="10" height="80" rx="3">
|
||||
<animate attributeName="height"
|
||||
begin="0s" dur="2s"
|
||||
values="80;55;33;5;75;23;73;33;12;14;60;80" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</rect>
|
||||
<rect x="30" width="10" height="50" rx="3">
|
||||
<animate attributeName="height"
|
||||
begin="0s" dur="1.4s"
|
||||
values="50;34;78;23;56;23;34;76;80;54;21;50" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</rect>
|
||||
<rect x="45" width="10" height="30" rx="3">
|
||||
<animate attributeName="height"
|
||||
begin="0s" dur="2s"
|
||||
values="30;45;13;80;56;72;45;76;34;23;67;30" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</rect>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
47
Wonky.Client/wwwroot/svg-loaders/ball-triangle.svg
Normal file
|
@ -0,0 +1,47 @@
|
|||
<!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL -->
|
||||
<!-- Todo: add easing -->
|
||||
<svg width="57" height="57" viewBox="0 0 57 57" xmlns="http://www.w3.org/2000/svg" stroke="#ffaa00">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<g transform="translate(1 1)" stroke-width="2">
|
||||
<circle cx="5" cy="50" r="5">
|
||||
<animate attributeName="cy"
|
||||
begin="0s" dur="2.2s"
|
||||
values="50;5;50;50"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
<animate attributeName="cx"
|
||||
begin="0s" dur="2.2s"
|
||||
values="5;27;49;5"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="27" cy="5" r="5">
|
||||
<animate attributeName="cy"
|
||||
begin="0s" dur="2.2s"
|
||||
from="5" to="5"
|
||||
values="5;50;50;5"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
<animate attributeName="cx"
|
||||
begin="0s" dur="2.2s"
|
||||
from="27" to="27"
|
||||
values="27;49;5;27"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="49" cy="50" r="5">
|
||||
<animate attributeName="cy"
|
||||
begin="0s" dur="2.2s"
|
||||
values="50;50;5;50"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
<animate attributeName="cx"
|
||||
from="49" to="49"
|
||||
begin="0s" dur="2.2s"
|
||||
values="49;5;27;49"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
52
Wonky.Client/wwwroot/svg-loaders/bars.svg
Normal file
|
@ -0,0 +1,52 @@
|
|||
<svg width="135" height="140" viewBox="0 0 135 140" xmlns="http://www.w3.org/2000/svg" fill="#ffaa00">
|
||||
<rect y="10" width="15" height="120" rx="6">
|
||||
<animate attributeName="height"
|
||||
begin="0.5s" dur="1s"
|
||||
values="120;110;100;90;80;70;60;50;40;140;120" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
<animate attributeName="y"
|
||||
begin="0.5s" dur="1s"
|
||||
values="10;15;20;25;30;35;40;45;50;0;10" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</rect>
|
||||
<rect x="30" y="10" width="15" height="120" rx="6">
|
||||
<animate attributeName="height"
|
||||
begin="0.25s" dur="1s"
|
||||
values="120;110;100;90;80;70;60;50;40;140;120" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
<animate attributeName="y"
|
||||
begin="0.25s" dur="1s"
|
||||
values="10;15;20;25;30;35;40;45;50;0;10" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</rect>
|
||||
<rect x="60" width="15" height="140" rx="6">
|
||||
<animate attributeName="height"
|
||||
begin="0s" dur="1s"
|
||||
values="120;110;100;90;80;70;60;50;40;140;120" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
<animate attributeName="y"
|
||||
begin="0s" dur="1s"
|
||||
values="10;15;20;25;30;35;40;45;50;0;10" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</rect>
|
||||
<rect x="90" y="10" width="15" height="120" rx="6">
|
||||
<animate attributeName="height"
|
||||
begin="0.25s" dur="1s"
|
||||
values="120;110;100;90;80;70;60;50;40;140;120" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
<animate attributeName="y"
|
||||
begin="0.25s" dur="1s"
|
||||
values="10;15;20;25;30;35;40;45;50;0;10" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</rect>
|
||||
<rect x="120" y="10" width="15" height="120" rx="6">
|
||||
<animate attributeName="height"
|
||||
begin="0.5s" dur="1s"
|
||||
values="120;110;100;90;80;70;60;50;40;140;120" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
<animate attributeName="y"
|
||||
begin="0.5s" dur="1s"
|
||||
values="10;15;20;25;30;35;40;45;50;0;10" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</rect>
|
||||
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
20
Wonky.Client/wwwroot/svg-loaders/circles.svg
Normal file
|
@ -0,0 +1,20 @@
|
|||
<svg width="135" height="135" viewBox="0 0 135 135" xmlns="http://www.w3.org/2000/svg" fill="#ffaa00">
|
||||
<path d="M67.447 58c5.523 0 10-4.477 10-10s-4.477-10-10-10-10 4.477-10 10 4.477 10 10 10zm9.448 9.447c0 5.523 4.477 10 10 10 5.522 0 10-4.477 10-10s-4.478-10-10-10c-5.523 0-10 4.477-10 10zm-9.448 9.448c-5.523 0-10 4.477-10 10 0 5.522 4.477 10 10 10s10-4.478 10-10c0-5.523-4.477-10-10-10zM58 67.447c0-5.523-4.477-10-10-10s-10 4.477-10 10 4.477 10 10 10 10-4.477 10-10z">
|
||||
<animateTransform
|
||||
attributeName="transform"
|
||||
type="rotate"
|
||||
from="0 67 67"
|
||||
to="-360 67 67"
|
||||
dur="2.5s"
|
||||
repeatCount="indefinite"/>
|
||||
</path>
|
||||
<path d="M28.19 40.31c6.627 0 12-5.374 12-12 0-6.628-5.373-12-12-12-6.628 0-12 5.372-12 12 0 6.626 5.372 12 12 12zm30.72-19.825c4.686 4.687 12.284 4.687 16.97 0 4.686-4.686 4.686-12.284 0-16.97-4.686-4.687-12.284-4.687-16.97 0-4.687 4.686-4.687 12.284 0 16.97zm35.74 7.705c0 6.627 5.37 12 12 12 6.626 0 12-5.373 12-12 0-6.628-5.374-12-12-12-6.63 0-12 5.372-12 12zm19.822 30.72c-4.686 4.686-4.686 12.284 0 16.97 4.687 4.686 12.285 4.686 16.97 0 4.687-4.686 4.687-12.284 0-16.97-4.685-4.687-12.283-4.687-16.97 0zm-7.704 35.74c-6.627 0-12 5.37-12 12 0 6.626 5.373 12 12 12s12-5.374 12-12c0-6.63-5.373-12-12-12zm-30.72 19.822c-4.686-4.686-12.284-4.686-16.97 0-4.686 4.687-4.686 12.285 0 16.97 4.686 4.687 12.284 4.687 16.97 0 4.687-4.685 4.687-12.283 0-16.97zm-35.74-7.704c0-6.627-5.372-12-12-12-6.626 0-12 5.373-12 12s5.374 12 12 12c6.628 0 12-5.373 12-12zm-19.823-30.72c4.687-4.686 4.687-12.284 0-16.97-4.686-4.686-12.284-4.686-16.97 0-4.687 4.686-4.687 12.284 0 16.97 4.686 4.687 12.284 4.687 16.97 0z">
|
||||
<animateTransform
|
||||
attributeName="transform"
|
||||
type="rotate"
|
||||
from="0 67 67"
|
||||
to="360 67 67"
|
||||
dur="8s"
|
||||
repeatCount="indefinite"/>
|
||||
</path>
|
||||
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
56
Wonky.Client/wwwroot/svg-loaders/grid.svg
Normal file
|
@ -0,0 +1,56 @@
|
|||
<svg width="105" height="105" viewBox="0 0 105 105" xmlns="http://www.w3.org/2000/svg" fill="#ffaa00">
|
||||
<circle cx="12.5" cy="12.5" r="12.5">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="0s" dur="1s"
|
||||
values="1;.2;1" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="12.5" cy="52.5" r="12.5" fill-opacity=".5">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="100ms" dur="1s"
|
||||
values="1;.2;1" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="52.5" cy="12.5" r="12.5">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="300ms" dur="1s"
|
||||
values="1;.2;1" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="52.5" cy="52.5" r="12.5">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="600ms" dur="1s"
|
||||
values="1;.2;1" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="92.5" cy="12.5" r="12.5">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="800ms" dur="1s"
|
||||
values="1;.2;1" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="92.5" cy="52.5" r="12.5">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="400ms" dur="1s"
|
||||
values="1;.2;1" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="12.5" cy="92.5" r="12.5">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="700ms" dur="1s"
|
||||
values="1;.2;1" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="52.5" cy="92.5" r="12.5">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="500ms" dur="1s"
|
||||
values="1;.2;1" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="92.5" cy="92.5" r="12.5">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="200ms" dur="1s"
|
||||
values="1;.2;1" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
</svg>
|
After Width: | Height: | Size: 2 KiB |
18
Wonky.Client/wwwroot/svg-loaders/hearts.svg
Normal file
|
@ -0,0 +1,18 @@
|
|||
<!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL -->
|
||||
<svg width="140" height="64" viewBox="0 0 140 64" xmlns="http://www.w3.org/2000/svg" fill="#ffaa00">
|
||||
<path d="M30.262 57.02L7.195 40.723c-5.84-3.976-7.56-12.06-3.842-18.063 3.715-6 11.467-7.65 17.306-3.68l4.52 3.76 2.6-5.274c3.717-6.002 11.47-7.65 17.305-3.68 5.84 3.97 7.56 12.054 3.842 18.062L34.49 56.118c-.897 1.512-2.793 1.915-4.228.9z" fill-opacity=".5">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="0s" dur="1.4s"
|
||||
values="0.5;1;0.5"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</path>
|
||||
<path d="M105.512 56.12l-14.44-24.272c-3.716-6.008-1.996-14.093 3.843-18.062 5.835-3.97 13.588-2.322 17.306 3.68l2.6 5.274 4.52-3.76c5.84-3.97 13.592-2.32 17.307 3.68 3.718 6.003 1.998 14.088-3.842 18.064L109.74 57.02c-1.434 1.014-3.33.61-4.228-.9z" fill-opacity=".5">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="0.7s" dur="1.4s"
|
||||
values="0.5;1;0.5"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</path>
|
||||
<path d="M67.408 57.834l-23.01-24.98c-5.864-6.15-5.864-16.108 0-22.248 5.86-6.14 15.37-6.14 21.234 0L70 16.168l4.368-5.562c5.863-6.14 15.375-6.14 21.235 0 5.863 6.14 5.863 16.098 0 22.247l-23.007 24.98c-1.43 1.556-3.757 1.556-5.188 0z" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
17
Wonky.Client/wwwroot/svg-loaders/oval.svg
Normal file
|
@ -0,0 +1,17 @@
|
|||
<!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL -->
|
||||
<svg width="38" height="38" viewBox="0 0 38 38" xmlns="http://www.w3.org/2000/svg" stroke="#ffaa00">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<g transform="translate(1 1)" stroke-width="2">
|
||||
<circle stroke-opacity=".5" cx="18" cy="18" r="18"/>
|
||||
<path d="M36 18c0-9.94-8.06-18-18-18">
|
||||
<animateTransform
|
||||
attributeName="transform"
|
||||
type="rotate"
|
||||
from="0 18 18"
|
||||
to="360 18 18"
|
||||
dur="1s"
|
||||
repeatCount="indefinite"/>
|
||||
</path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 697 B |
37
Wonky.Client/wwwroot/svg-loaders/puff.svg
Normal file
|
@ -0,0 +1,37 @@
|
|||
<!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL -->
|
||||
<svg width="44" height="44" viewBox="0 0 44 44" xmlns="http://www.w3.org/2000/svg" stroke="#ffaa00">
|
||||
<g fill="none" fill-rule="evenodd" stroke-width="2">
|
||||
<circle cx="22" cy="22" r="1">
|
||||
<animate attributeName="r"
|
||||
begin="0s" dur="1.8s"
|
||||
values="1; 20"
|
||||
calcMode="spline"
|
||||
keyTimes="0; 1"
|
||||
keySplines="0.165, 0.84, 0.44, 1"
|
||||
repeatCount="indefinite" />
|
||||
<animate attributeName="stroke-opacity"
|
||||
begin="0s" dur="1.8s"
|
||||
values="1; 0"
|
||||
calcMode="spline"
|
||||
keyTimes="0; 1"
|
||||
keySplines="0.3, 0.61, 0.355, 1"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="22" cy="22" r="1">
|
||||
<animate attributeName="r"
|
||||
begin="-0.9s" dur="1.8s"
|
||||
values="1; 20"
|
||||
calcMode="spline"
|
||||
keyTimes="0; 1"
|
||||
keySplines="0.165, 0.84, 0.44, 1"
|
||||
repeatCount="indefinite" />
|
||||
<animate attributeName="stroke-opacity"
|
||||
begin="-0.9s" dur="1.8s"
|
||||
values="1; 0"
|
||||
calcMode="spline"
|
||||
keyTimes="0; 1"
|
||||
keySplines="0.3, 0.61, 0.355, 1"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
42
Wonky.Client/wwwroot/svg-loaders/rings.svg
Normal file
|
@ -0,0 +1,42 @@
|
|||
<!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL -->
|
||||
<svg width="45" height="45" viewBox="0 0 45 45" xmlns="http://www.w3.org/2000/svg" stroke="#ffaa00">
|
||||
<g fill="none" fill-rule="evenodd" transform="translate(1 1)" stroke-width="2">
|
||||
<circle cx="22" cy="22" r="6" stroke-opacity="0">
|
||||
<animate attributeName="r"
|
||||
begin="1.5s" dur="3s"
|
||||
values="6;22"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
<animate attributeName="stroke-opacity"
|
||||
begin="1.5s" dur="3s"
|
||||
values="1;0" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
<animate attributeName="stroke-width"
|
||||
begin="1.5s" dur="3s"
|
||||
values="2;0" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="22" cy="22" r="6" stroke-opacity="0">
|
||||
<animate attributeName="r"
|
||||
begin="3s" dur="3s"
|
||||
values="6;22"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
<animate attributeName="stroke-opacity"
|
||||
begin="3s" dur="3s"
|
||||
values="1;0" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
<animate attributeName="stroke-width"
|
||||
begin="3s" dur="3s"
|
||||
values="2;0" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="22" cy="22" r="8">
|
||||
<animate attributeName="r"
|
||||
begin="0s" dur="1.5s"
|
||||
values="6;1;2;3;4;5;6"
|
||||
calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
55
Wonky.Client/wwwroot/svg-loaders/spinning-circles.svg
Normal file
|
@ -0,0 +1,55 @@
|
|||
<!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL -->
|
||||
<svg width="58" height="58" viewBox="0 0 58 58" xmlns="http://www.w3.org/2000/svg">
|
||||
<g fill="#ffaa00" fill-rule="evenodd">
|
||||
<g transform="translate(2 1)" stroke="#FFF" stroke-width="1.5">
|
||||
<circle cx="42.601" cy="11.462" r="5" fill-opacity="1" fill="#ffaa00">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="0s" dur="1.3s"
|
||||
values="1;0;0;0;0;0;0;0" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="49.063" cy="27.063" r="5" fill-opacity="0" fill="#ffaa00">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="0s" dur="1.3s"
|
||||
values="0;1;0;0;0;0;0;0" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="42.601" cy="42.663" r="5" fill-opacity="0" fill="#ffaa00">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="0s" dur="1.3s"
|
||||
values="0;0;1;0;0;0;0;0" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="27" cy="49.125" r="5" fill-opacity="0" fill="#ffaa00">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="0s" dur="1.3s"
|
||||
values="0;0;0;1;0;0;0;0" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="11.399" cy="42.663" r="5" fill-opacity="0" fill="#ffaa00">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="0s" dur="1.3s"
|
||||
values="0;0;0;0;1;0;0;0" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="4.938" cy="27.063" r="5" fill-opacity="0" fill="#ffaa00">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="0s" dur="1.3s"
|
||||
values="0;0;0;0;0;1;0;0" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="11.399" cy="11.462" r="5" fill-opacity="0" fill="#ffaa00">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="0s" dur="1.3s"
|
||||
values="0;0;0;0;0;0;1;0" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="27" cy="5" r="5" fill-opacity="0" fill="#ffaa00">
|
||||
<animate attributeName="fill-opacity"
|
||||
begin="0s" dur="1.3s"
|
||||
values="0;0;0;0;0;0;0;1" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.7 KiB |
32
Wonky.Client/wwwroot/svg-loaders/tail-spin.svg
Normal file
|
@ -0,0 +1,32 @@
|
|||
<!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL -->
|
||||
<svg width="38" height="38" viewBox="0 0 38 38" xmlns="http://www.w3.org/2000/svg">
|
||||
<defs>
|
||||
<linearGradient x1="8.042%" y1="0%" x2="65.682%" y2="23.865%" id="a">
|
||||
<stop stop-color="#ffaa00" stop-opacity="0" offset="0%"/>
|
||||
<stop stop-color="#ffaa00" stop-opacity=".631" offset="63.146%"/>
|
||||
<stop stop-color="#ffaa00" offset="100%"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<g transform="translate(1 1)">
|
||||
<path d="M36 18c0-9.94-8.06-18-18-18" id="Oval-2" stroke="url(#a)" stroke-width="2">
|
||||
<animateTransform
|
||||
attributeName="transform"
|
||||
type="rotate"
|
||||
from="0 18 18"
|
||||
to="360 18 18"
|
||||
dur="0.9s"
|
||||
repeatCount="indefinite" />
|
||||
</path>
|
||||
<circle fill="#ffaa00" cx="36" cy="18" r="1">
|
||||
<animateTransform
|
||||
attributeName="transform"
|
||||
type="rotate"
|
||||
from="0 18 18"
|
||||
to="360 18 18"
|
||||
dur="0.9s"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
33
Wonky.Client/wwwroot/svg-loaders/three-dots.svg
Normal file
|
@ -0,0 +1,33 @@
|
|||
<!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL -->
|
||||
<svg width="120" height="30" viewBox="0 0 120 30" xmlns="http://www.w3.org/2000/svg" fill="#ffaa00">
|
||||
<circle cx="15" cy="15" r="15">
|
||||
<animate attributeName="r" from="15" to="15"
|
||||
begin="0s" dur="0.8s"
|
||||
values="15;9;15" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
<animate attributeName="fill-opacity" from="1" to="1"
|
||||
begin="0s" dur="0.8s"
|
||||
values="1;.5;1" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="60" cy="15" r="9" fill-opacity="0.3">
|
||||
<animate attributeName="r" from="9" to="9"
|
||||
begin="0s" dur="0.8s"
|
||||
values="9;15;9" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
<animate attributeName="fill-opacity" from="0.5" to="0.5"
|
||||
begin="0s" dur="0.8s"
|
||||
values=".5;1;.5" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
<circle cx="105" cy="15" r="15">
|
||||
<animate attributeName="r" from="15" to="15"
|
||||
begin="0s" dur="0.8s"
|
||||
values="15;9;15" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
<animate attributeName="fill-opacity" from="1" to="1"
|
||||
begin="0s" dur="0.8s"
|
||||
values="1;.5;1" calcMode="linear"
|
||||
repeatCount="indefinite" />
|
||||
</circle>
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
|
@ -16,6 +16,11 @@ namespace Wonky.Entity.Configuration;
|
|||
|
||||
public class ApiConfig
|
||||
{
|
||||
/// <summary>
|
||||
/// Application base url
|
||||
/// </summary>
|
||||
public string InnoBaseUrl { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// GLS tracking url
|
||||
/// </summary>
|
||||
|
@ -29,90 +34,98 @@ public class ApiConfig
|
|||
/// <summary>
|
||||
/// VAT registrar url Denmark
|
||||
/// </summary>
|
||||
public string VirkUrl { get; set; } = "";
|
||||
public string ServiceVirk { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// VAT registrar url Norway
|
||||
/// </summary>
|
||||
public string BrRegUrl { get; set; } = "";
|
||||
public string ServiceBrReg { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// VAT registrar url EU
|
||||
/// </summary>
|
||||
public string ViesUrl { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Application base url
|
||||
/// </summary>
|
||||
public string InnoBaseUrl { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Application uri for company information request
|
||||
/// </summary>
|
||||
public string CompanyUri { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Application uri for product catalog request
|
||||
/// </summary>
|
||||
public string CatalogUri { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Application uri for user information request
|
||||
/// </summary>
|
||||
public string UserInfoUri { get; set; } = "";
|
||||
public string ServiceVies { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Application uri for token request
|
||||
/// </summary>
|
||||
public string TokenUri { get; set; } = "";
|
||||
public string CrmAuth { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Application uri for user information request
|
||||
/// </summary>
|
||||
public string CrmUser { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Application uri for product catalog request
|
||||
/// </summary>
|
||||
public string CrmCatalog { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Application uri for activity request
|
||||
/// </summary>
|
||||
public string ActivityUri { get; set; } = "";
|
||||
|
||||
public string CrmSale { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Application uri for sales report request
|
||||
/// </summary>
|
||||
public string ReportUri { get; set; } = "";
|
||||
|
||||
public string CrmReport { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Application uri for task items request
|
||||
/// </summary>
|
||||
public string TaskUri { get; set; } = "";
|
||||
public string CrmTask { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Application uri for customer information request
|
||||
/// </summary>
|
||||
public string CrmCustomer { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Application uri for customer product inventory request
|
||||
/// </summary>
|
||||
public string InventoryUri { get; set; } = "";
|
||||
public string CrmInventory { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Application uri for customer product sale request
|
||||
/// </summary>
|
||||
public string ProductUri { get; set; } = "";
|
||||
public string CrmProduct { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Application uri for updating customer product sale request
|
||||
/// </summary>
|
||||
public string SyncUri { get; set; } = "";
|
||||
public string CrmSync { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Application uri for administration of sales representatives
|
||||
/// </summary>
|
||||
public string AdminAdvisorUri { get; set; } = "";
|
||||
public string AdminUser { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Application uri for administration of administrative users
|
||||
/// </summary>
|
||||
public string AdminUserUri { get; set; } = "";
|
||||
public string AdminOffice { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Application uri for administrative reset of user credentials
|
||||
/// </summary>
|
||||
public string AdminPasswdUri { get; set; } = "";
|
||||
public string AdminPasswd { get; set; } = "";
|
||||
|
||||
public string WarehouseUri { get; set; } = "";
|
||||
/// <summary>
|
||||
/// Uri for warehouse requests
|
||||
/// </summary>
|
||||
public string Warehouse { get; set; } = "";
|
||||
|
||||
// /// <summary>
|
||||
// /// Application uri for reading salesReports
|
||||
// /// </summary>
|
||||
// public string AdminReport { get; set; } = "";
|
||||
//
|
||||
// /// <summary>
|
||||
// /// Application uri for handling external customer login
|
||||
// /// </summary>
|
||||
// public string AdminCompany { get; set; } = "";
|
||||
|
||||
// public string KrvVariantsUri { get; set; } = "";
|
||||
// public string KrvProductsUri { get; set; } = "";
|
||||
// public string ImageUploadUri { get; set; } = "";
|
||||
|
|
BIN
icon-512.png
Normal file
After Width: | Height: | Size: 62 KiB |