end-of-day refactor check components doesn't use repos

This commit is contained in:
Frede Hundewadt 2022-12-31 19:10:39 +01:00
parent a4e9598fa3
commit dd91890b97
137 changed files with 931 additions and 647 deletions

View file

@ -18,13 +18,9 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class ActivityTableCrmComponent public partial class ActivityListComponent
{ {
[Parameter] public List<ReportItemView> ActivityList { get; set; } = new(); [Parameter] public List<ReportItemView> ActivityList { get; set; } = new();
[Inject] public NavigationManager Navigator { get; set; } [Inject] public NavigationManager Navigator { get; set; }
// private void ShowOrder(string companyId, string orderId)
// {
// Navigator.NavigateTo($"office/customers/{companyId}/orders/{orderId}");
// }
} }

View file

@ -21,12 +21,8 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class CatalogTableComponent public partial class CatalogListComponent
{ {
[Parameter] public List<SalesItemView> ItemList { get; set; } = new(); [Parameter] public List<SalesItemView> ItemList { get; set; } = new();
[Inject] public IToastService ToastService { get; set; } [Inject] public IToastService ToastService { get; set; }
private void AddToDraft()
{
ToastService.ShowInfo("TODO: læg til ordre kladde");
}
} }

View file

@ -21,7 +21,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class CatalogTablePrintComponent public partial class CatalogPrintComponent
{ {
[Parameter] public List<SalesItemView> ItemList { get; set; } = new(); [Parameter] public List<SalesItemView> ItemList { get; set; } = new();
[Parameter] public string CountryName { get; set; } = ""; [Parameter] public string CountryName { get; set; } = "";

View file

@ -24,7 +24,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Components namespace Wonky.Client.Components
{ {
public partial class OfficeCustomerTableComponent public partial class CountryCustomerListComponent
{ {
[Parameter] public List<CompanyDto> CompanyList { get; set; } = new(); [Parameter] public List<CompanyDto> CompanyList { get; set; } = new();

View file

@ -14,12 +14,11 @@
// //
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Wonky.Entity.DTO;
using Wonky.Entity.Views; using Wonky.Entity.Views;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class OfficeUserTableComponent public partial class CountryUserListComponent
{ {
[Parameter] public List<UserListAdminView> UserList { get; set; } = new(); [Parameter] public List<UserListAdminView> UserList { get; set; } = new();
} }

View file

@ -19,7 +19,7 @@
<div class="row"> <div class="row">
@if (ProductList.Any()) @if (Inventory.Any())
{ {
<div class="list-group mt-2"> <div class="list-group mt-2">
<div class="list-group-item bg-dark text-white"> <div class="list-group-item bg-dark text-white">
@ -31,7 +31,7 @@
<div class="col-sm-1"></div> <div class="col-sm-1"></div>
</div> </div>
</div> </div>
@foreach (var product in ProductList) @foreach (var product in Inventory)
{ {
<div class="list-group-item"> <div class="list-group-item">
<div class="row align-items-center"> <div class="row align-items-center">
@ -66,8 +66,6 @@
</div> </div>
} }
</div> </div>
<InventoryReorderModal OnSelected="@OnSelectedItem" CompanyId="@CompanyId" SalesItem="@SalesItem" @ref="ReorderModal"/>
} }
else else
{ {

View file

@ -25,20 +25,15 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class CustomerProductTableComponent public partial class CustomerInventoryListComponent
{ {
[CascadingParameter] public DraftStateProvider DraftStateProvider { get; set; } = new();
[Parameter] public List<ProductInventoryView> ProductList { get; set; } = new();
[Parameter] public string CompanyId { get; set; } = "";
[Inject] public ICatalogCrmHttpRepository CatalogCrm { get; set; }
[Inject] public ILocalStorageService Storage { get; set; } [Inject] public ILocalStorageService Storage { get; set; }
// Parameters
[Parameter] public List<ProductInventoryView> Inventory { get; set; } = new();
[Parameter] public string CompanyId { get; set; } = "";
[Parameter] public EventCallback<string> OnReorderSelected { get; set; }
// private variables // private variables
private SalesItemView SalesItem { get; set; } = new();
private string Price { get; set; } = "0";
private string Quantity { get; set; } = "1";
private string Sku { get; set; } = "";
private InventoryReorderModal ReorderModal { get; set; } = new();
private SelectedSku Item { get; set; } = new();
private bool Descending { get; set; } private bool Descending { get; set; }
private void SortProducts(PSort column) private void SortProducts(PSort column)
@ -49,57 +44,47 @@ public partial class CustomerProductTableComponent
case PSort.Desc: case PSort.Desc:
if (Descending) if (Descending)
{ {
ProductList = ProductList.OrderByDescending(x => x.Description).ToList(); Inventory = Inventory.OrderByDescending(x => x.Description).ToList();
break; break;
} }
ProductList = ProductList.OrderBy(x => x.Description).ToList(); Inventory = Inventory.OrderBy(x => x.Description).ToList();
break; break;
case PSort.Sku: case PSort.Sku:
if (Descending) if (Descending)
{ {
ProductList = ProductList.OrderByDescending(x => x.Sku).ToList(); Inventory = Inventory.OrderByDescending(x => x.Sku).ToList();
break; break;
} }
ProductList = ProductList.OrderBy(x => x.Sku).ToList(); Inventory = Inventory.OrderBy(x => x.Sku).ToList();
break; break;
case PSort.Qty: case PSort.Qty:
if (Descending) if (Descending)
{ {
ProductList = ProductList.OrderByDescending(x => x.Quantity).ToList(); Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList();
break; break;
} }
ProductList = ProductList.OrderBy(x => x.Quantity).ToList(); Inventory = Inventory.OrderBy(x => x.Quantity).ToList();
break; break;
case PSort.None: case PSort.None:
break; break;
case PSort.Abbr: case PSort.Abbr:
break; break;
default: default:
ProductList = ProductList.OrderByDescending(x => x.Quantity).ToList(); Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList();
break; break;
} }
} }
private async Task ProductCheck(string sku)
{
var x = ProductList.First(x => x.Sku == sku);
x.Check = !x.Check;
await Storage.SetItemAsync($"{CompanyId}-products", ProductList);
}
private async Task CallShowReorderModal(string sku) private async Task CallShowReorderModal(string sku)
{ {
// fetch item from http repo await ProductCheck(sku);
SalesItem = await CatalogCrm.GetSalesItemSku(sku); await OnReorderSelected.InvokeAsync(sku);
ReorderModal.Show();
} }
private async Task OnSelectedItem(DraftItem draftItem) private async Task ProductCheck(string sku)
{ {
// add item to order draft var x = Inventory.First(x => x.Sku == sku);
DraftStateProvider.Draft.DraftType = "order"; x.Check = !x.Check;
DraftStateProvider.Draft.Items.Add(draftItem); await Storage.SetItemAsync($"{CompanyId}-products", Inventory);
// set item checked
await ProductCheck(draftItem.Item.Sku);
await DraftStateProvider.SaveChangesAsync();
} }
} }

View file

@ -49,4 +49,3 @@ else
{ {
<div>Ingen data</div> <div>Ingen data</div>
} }
<InvoiceViewModal CompanyId="@CompanyId" InvoiceId="@InvoiceId" @ref="InvoiceView" />

View file

@ -0,0 +1,17 @@
using Microsoft.AspNetCore.Components;
using Wonky.Client.Shared;
using Wonky.Entity.Views;
namespace Wonky.Client.Components;
public partial class CustomerInvoiceListComponent
{
[Parameter] public string CompanyId { get; set; } = "";
[Parameter] public List<InvoiceListItemView> InvoiceList { get; set; } = new();
[Parameter] public EventCallback<string> OnShowInvoice { get; set; }
private async Task ShowInvoice(string invoiceId)
{
await OnShowInvoice.InvokeAsync(invoiceId);
}
}

View file

@ -19,7 +19,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class CustomerProductLineTableComponent public partial class CustomerProductLineListComponent
{ {
[Parameter] public List<ProductHistoryView> ProductHistory { get; set; } = new(); [Parameter] public List<ProductHistoryView> ProductHistory { get; set; } = new();

View file

@ -1,20 +0,0 @@
using Microsoft.AspNetCore.Components;
using Wonky.Client.Shared;
using Wonky.Entity.Views;
namespace Wonky.Client.Components;
public partial class InvoiceTableComponent
{
[Parameter] public string CompanyId { get; set; } = "";
[Parameter] public List<InvoiceListItemView> InvoiceList { get; set; } = new();
private InvoiceViewModal InvoiceView { get; set; } = new();
private string InvoiceId { get; set; } = "";
private void ShowInvoice(string invoiceId)
{
Console.WriteLine($"invoiceId => {invoiceId}");
Console.WriteLine($"companyId => {CompanyId}");
InvoiceId = invoiceId;
InvoiceView.Show();
}
}

View file

@ -18,12 +18,29 @@
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@using Wonky.Client.Components @using Wonky.Client.Components
<PageTitle>Innotec Admin</PageTitle> <div class="row g-3">
<div class="col-sm-3">
<div class="row"> <div class="card" style="width: 10rem;">
<div class="col"></div> <img src="flag-icons/flags/4x3/dk.svg" alt="Danmark"/>
<div class="col"></div> <div class="card-body">
<div class="col"></div> <a class="btn btn-primary d-block" href="/office/dk">Danmark</a>
<div class="col"></div> </div>
<div class="col"></div> </div>
</div>
<div class="col-sm-3">
<div class="card" style="width: 10rem;">
<img src="flag-icons/flags/4x3/no.svg" alt="Norge"/>
<div class="card-body">
<a class="btn btn-primary d-block" href="/office/no">Norge</a>
</div>
</div>
</div>
<div class="col-sm-3">
<div class="card" style="width: 10rem;">
<img src="flag-icons/flags/4x3/se.svg" alt="Sverige"/>
<div class="card-body">
<a class="btn btn-primary d-block" href="/office/se">Sverige</a>
</div>
</div>
</div>
</div> </div>

View file

@ -30,14 +30,9 @@ using Wonky.Entity.Models;
using Wonky.Entity.Views; using Wonky.Entity.Views;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class LandingComponentAdmin : IDisposable public partial class LandingComponentAdmin
{ {
[Inject] public UserProfileService ProfileService { get; set; } [Inject] public UserProfileService ProfileService { get; set; }
[Inject] public ILogger<LandingComponentAdmin> Logger { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public IToastService Toaster { get; set; }
[Inject] public ITaskItemCrmHttpRepository TaskRepo { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
private readonly JsonSerializerOptions _options = new JsonSerializerOptions private readonly JsonSerializerOptions _options = new JsonSerializerOptions
{ {
@ -46,7 +41,7 @@ public partial class LandingComponentAdmin : IDisposable
}; };
private UserPref Prefs { get; set; } = new(); private UserPref Prefs { get; set; } = new();
private string WordDate { get; set; } = $"{DateTime.Now:yyyy-MM-dd}"; private string WorkDate { get; set; } = $"{DateTime.Now:yyyy-MM-dd}";
private string Today { get; set; } = $"{DateTime.Now:yyyy-MM-dd}"; private string Today { get; set; } = $"{DateTime.Now:yyyy-MM-dd}";
@ -54,15 +49,8 @@ public partial class LandingComponentAdmin : IDisposable
{ {
Prefs = await ProfileService.GetPreferences(); Prefs = await ProfileService.GetPreferences();
if(!string.IsNullOrWhiteSpace(Prefs.WorkDate)) if(!string.IsNullOrWhiteSpace(Prefs.WorkDate))
WordDate = Prefs.WorkDate; WorkDate = Prefs.WorkDate;
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
} }
public void Dispose()
{
Interceptor.DisposeEvent();
}
} }

View file

@ -22,8 +22,6 @@
<AuthorizeView Roles="Advisor"> <AuthorizeView Roles="Advisor">
<div class="bg-dark text-white rounded-2 mb-2 py-2"> <div class="bg-dark text-white rounded-2 mb-2 py-2">
<WorkDateComponent OnChangedCallback="GetWorkdayTasks"/> <WorkDateComponent />
</div> </div>
<TaskItemTableComponent TaskItemList="TaskItems" OnCompleteTask="OnCompleteTask"
OnDeleteTask="OnDeleteConfirmed" OnTaskCompleted="OnTaskCompleted"/>
</AuthorizeView> </AuthorizeView>

View file

@ -30,14 +30,9 @@ using Wonky.Entity.Models;
using Wonky.Entity.Views; using Wonky.Entity.Views;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class LandingComponentAdvisor : IDisposable public partial class LandingComponentAdvisor
{ {
[Inject] public UserProfileService ProfileService { get; set; } [Inject] public UserProfileService ProfileService { get; set; }
[Inject] public ILogger<LandingComponentAdvisor> Logger { get; set; }
[Inject] public HttpInterceptorService Inteceptor { get; set; }
[Inject] public IToastService Toaster { get; set; }
[Inject] public ITaskItemCrmHttpRepository TaskRepo { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
private readonly JsonSerializerOptions JsonOptions = new JsonSerializerOptions private readonly JsonSerializerOptions JsonOptions = new JsonSerializerOptions
{ {
@ -47,59 +42,12 @@ public partial class LandingComponentAdvisor : IDisposable
private UserPref Prefs { get; set; } = new(); private UserPref Prefs { get; set; } = new();
private DateTime SelectedDate { get; set; } private DateTime SelectedDate { get; set; }
private List<TaskItemDto> TaskItems { get; set; } = new();
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
Prefs = await ProfileService.GetPreferences(); Prefs = await ProfileService.GetPreferences();
SelectedDate = string.IsNullOrWhiteSpace(Prefs.WorkDate) ? DateTime.Now : DateTime.Parse(Prefs.WorkDate); SelectedDate = string.IsNullOrWhiteSpace(Prefs.WorkDate) ? DateTime.Now : DateTime.Parse(Prefs.WorkDate);
Inteceptor.RegisterEvent();
Inteceptor.RegisterBeforeSendEvent();
//await GetTaskItems(_workDate);
await GetAllTasks();
}
private async Task GetAllTasks()
{
TaskItems = await TaskRepo.GetTaskList();
}
private async Task OnCompleteTask(string taskItemId)
{
await ProfileService.SetWorkDate(DateTime.Now);
var item = TaskItems.Find(x => x.TaskItemId == taskItemId);
Navigator.NavigateTo($"/companies/{item.ReferenceId}/activities/new");
}
private async Task GetWorkdayTasks(string workDate)
{
SelectedDate = DateTime.Parse(workDate);
TaskItems = new List<TaskItemDto>();
TaskItems = await TaskRepo.GetTaskList($"{SelectedDate:yyyy-MM-dd}");
}
private async Task OnTaskCompleted(string taskItemId)
{
var item = TaskItems.Find(x => x.TaskItemId == taskItemId);
item.IsCompleted = true;
await TaskRepo.UpdateTaskItem(taskItemId, item);
TaskItems.Remove(item);
Toaster.ShowInfo("Opgaven er markeret som udført.");
}
private async Task OnDeleteConfirmed(string taskItemId)
{
var item = TaskItems.First(x => x.TaskItemId == taskItemId);
TaskItems.Remove(item);
await TaskRepo.DeleteTaskItem(taskItemId);
Toaster.ShowInfo("Opgaven er slettet.");
}
public void Dispose()
{
Inteceptor.DisposeEvent();
} }
} }

View file

@ -90,19 +90,3 @@
} }
</div> </div>
@code {
[Parameter]
public List<ReportItemView> Quotes { get; set; } = new();
[Parameter] public EventCallback<QuoteCallbackArgs> OnChangedCallback { get; set; }
private async Task SetQuote(string eSalesNumber, QStatus status)
{
var args = new QuoteCallbackArgs()
{
ESalesNumber = eSalesNumber,
Status = status
};
await OnChangedCallback.InvokeAsync(args);
}
}

View file

@ -0,0 +1,22 @@
using Microsoft.AspNetCore.Components;
using Wonky.Client.Models;
using Wonky.Entity.Views;
namespace Wonky.Client.Components;
public partial class QuoteListComponent
{
[Parameter]
public List<ReportItemView> Quotes { get; set; } = new();
[Parameter] public EventCallback<QuoteCallbackArgs> OnChangedCallback { get; set; }
private async Task SetQuote(string eSalesNumber, QStatus status)
{
var args = new QuoteCallbackArgs()
{
ESalesNumber = eSalesNumber,
Status = status
};
await OnChangedCallback.InvokeAsync(args);
}
}

View file

@ -141,16 +141,3 @@
</div> </div>
} }
</div> </div>
@code{
[Parameter]
public ReportItemView ReportItem { get; set; } = new();
protected override void OnParametersSet()
{
var lines = ReportItem.Lines.OrderBy(x => x.Location).ToList();
ReportItem.Lines = lines;
}
}

View file

@ -0,0 +1,16 @@
using Microsoft.AspNetCore.Components;
using Wonky.Entity.Views;
namespace Wonky.Client.Components;
public partial class ReportItemComponent
{
[Parameter]
public ReportItemView ReportItem { get; set; } = new();
protected override void OnParametersSet()
{
var lines = ReportItem.Lines.OrderBy(x => x.Location).ToList();
ReportItem.Lines = lines;
}
}

View file

@ -19,7 +19,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class ReportTableCrmComponent public partial class ReportListComponent
{ {
[Parameter] public List<SalesReportListView> ReportList { get; set; } = new(); [Parameter] public List<SalesReportListView> ReportList { get; set; } = new();
[Parameter] public EventCallback<string> OnShowReport { get; set; } [Parameter] public EventCallback<string> OnShowReport { get; set; }

View file

@ -18,7 +18,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class ReportTableOfficeComponent public partial class ReportListOfficeComponent
{ {
[Parameter] public List<SalesReportListView> ReportList { get; set; } = new(); [Parameter] public List<SalesReportListView> ReportList { get; set; } = new();
[Parameter] public string UserId { get; set; } = ""; [Parameter] public string UserId { get; set; } = "";

View file

@ -28,7 +28,7 @@ public partial class WarehouseListComponent
{ {
[Parameter] public string Status { get; set; } = "none"; [Parameter] public string Status { get; set; } = "none";
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public IWarehouseHttpRepository WarehouseRepo { get; set; } [Inject] public IWarehouseRepository WarehouseRepo { get; set; }
[Inject] public IToastService Toaster { get; set; } [Inject] public IToastService Toaster { get; set; }
private string ItemList { get; set; } = ""; private string ItemList { get; set; } = "";

View file

@ -31,10 +31,3 @@ else
{ {
<div>Ingen data</div> <div>Ingen data</div>
} }
@code {
[Parameter] public List<WorkplaceListView> Workplaces { get; set; } = new();
[Parameter] public string CompanyId { get; set; } = "";
}

View file

@ -0,0 +1,11 @@
using Microsoft.AspNetCore.Components;
using Wonky.Entity.Views;
namespace Wonky.Client.Components;
public partial class WorkplaceListComponent
{
[Parameter] public List<WorkplaceListView> Workplaces { get; set; } = new();
[Parameter] public string CompanyId { get; set; } = "";
}

View file

@ -21,7 +21,7 @@ namespace Wonky.Client.HttpInterfaces;
/// <summary> /// <summary>
/// Interface Activity CRM Http repository /// Interface Activity CRM Http repository
/// </summary> /// </summary>
public interface IActivityCrmHttpRepository public interface IAdvisorActivityRepository
{ {
/// <summary> /// <summary>
/// Get a list of open quotes /// Get a list of open quotes

View file

@ -22,22 +22,14 @@ namespace Wonky.Client.HttpInterfaces;
/// <summary> /// <summary>
/// Interface Catalog Http repository /// Interface Catalog Http repository
/// </summary> /// </summary>
public interface ICatalogCrmHttpRepository public interface IAdvisorCatalogRepository
{ {
/// <summary> /// <summary>
/// Get a paged sales item list /// Get a paged sales item list
/// </summary> /// </summary>
/// <param name="pagingParameters"></param> /// <param name="pagingParameters"></param>
/// <returns></returns> /// <returns></returns>
Task<PagingResponse<SalesItemView>> GetSalesItemsPaged(CatalogPagingParams pagingParameters); Task<PagingResponse<SalesItemView>> GetSalesItemsPaged(CatalogPaging pagingParameters);
/// <summary>
/// Get a paged sales item list for country
/// </summary>
/// <param name="pagingParameters"></param>
/// <param name="countryCode"></param>
/// <returns></returns>
Task<PagingResponse<SalesItemView>> GetSalesItemsPaged(CatalogPagingParams pagingParameters, string countryCode);
/// <summary> /// <summary>
/// Get sales item by id /// Get sales item by id
@ -46,20 +38,13 @@ public interface ICatalogCrmHttpRepository
/// <returns></returns> /// <returns></returns>
Task<SalesItemView> GetSalesItemId(string salesItemId); Task<SalesItemView> GetSalesItemId(string salesItemId);
/// <summary>
/// Get sales item by sku
/// </summary>
/// <param name="sku"></param>
/// <returns></returns>
Task<SalesItemView> GetSalesItemSku(string sku);
/// <summary> /// <summary>
/// Overload Get sales item by sku and country code /// Overload Get sales item by sku and country code
/// </summary> /// </summary>
/// <param name="sku"></param> /// <param name="sku"></param>
/// <param name="countryCode"></param> /// <param name="countryCode"></param>
/// <returns></returns> /// <returns></returns>
Task<SalesItemView> GetSalesItemSku(string sku, string countryCode); Task<SalesItemView> GetSalesItemSku(string countryCode, string sku);
/// <summary> /// <summary>
/// Get sales item by variant id /// Get sales item by variant id

View file

@ -6,7 +6,7 @@ namespace Wonky.Client.HttpInterfaces;
/// Interface for Contacts CRM Http repository /// Interface for Contacts CRM Http repository
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public interface IContactCrmHttpRepository public interface IAdvisorContactRepository
{ {
/// <summary> /// <summary>
/// Create Contact /// Create Contact

View file

@ -22,7 +22,7 @@ namespace Wonky.Client.HttpInterfaces;
/// <summary> /// <summary>
/// Interface Customer CRM Http repository /// Interface Customer CRM Http repository
/// </summary> /// </summary>
public interface ICustomerCrmHttpRepository public interface IAdvisorCustomerRepository
{ {
/// <summary> /// <summary>
/// Get a list of CRM customers (SalesRep) /// Get a list of CRM customers (SalesRep)

View file

@ -21,7 +21,7 @@ namespace Wonky.Client.HttpInterfaces;
/// <summary> /// <summary>
/// Interface Report Http repository /// Interface Report Http repository
/// </summary> /// </summary>
public interface IReportHttpRepository public interface IAdvisorReportRepository
{ {
/// <summary> /// <summary>
/// Report Exist for given data (SalesRep) /// Report Exist for given data (SalesRep)
@ -57,19 +57,4 @@ public interface IReportHttpRepository
/// <param name="reportDto"></param> /// <param name="reportDto"></param>
/// <returns></returns> /// <returns></returns>
Task<ApiResponseView> CreateReport(string workDate, ReportDto reportDto); Task<ApiResponseView> CreateReport(string workDate, ReportDto reportDto);
/// <summary>
/// Get Reports for given userId (Office)
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
Task<List<SalesReportListView>> GetCountryReports(string userId);
/// <summary>
/// Get Report for given userId and workDate (Office)
/// </summary>
/// <param name="userId"></param>
/// <param name="workDate"></param>
/// <returns></returns>
Task<ReportView> GetCountryReport(string userId, string workDate);
} }

View file

@ -21,7 +21,7 @@ namespace Wonky.Client.HttpInterfaces;
/// <summary> /// <summary>
/// Interface for handling CRM Tasks http repository /// Interface for handling CRM Tasks http repository
/// </summary> /// </summary>
public interface ITaskItemCrmHttpRepository public interface IAdvisorTaskItemRepository
{ {
/// <summary> /// <summary>
/// Get Task List (SalesRep) /// Get Task List (SalesRep)

View file

@ -0,0 +1,65 @@
// 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 Wonky.Client.Features;
using Wonky.Entity.Requests;
using Wonky.Entity.Views;
namespace Wonky.Client.HttpInterfaces;
/// <summary>
/// Interface Catalog Http repository
/// </summary>
public interface ICountryCatalogRepository
{
/// <summary>
/// Get a paged sales item list
/// </summary>
/// <param name="countryCode"></param>
/// <param name="paging"></param>
/// <returns></returns>
Task<PagingResponse<SalesItemView>> GetSalesItemsPaged(string countryCode, CatalogPaging paging);
/// <summary>
/// Get sales item by id
/// </summary>
/// <param name="countryCode"></param>
/// <param name="salesItemId"></param>
/// <returns></returns>
Task<SalesItemView> GetSalesItemId(string countryCode, string salesItemId);
/// <summary>
/// Overload Get sales item by sku and country code
/// </summary>
/// <param name="sku"></param>
/// <param name="countryCode"></param>
/// <returns></returns>
Task<SalesItemView> GetSalesItemSku(string countryCode, string sku);
/// <summary>
/// Get sales item by variant id
/// </summary>
/// <param name="countryCode"></param>
/// <param name="variantId"></param>
/// <returns></returns>
Task<SalesItemView> GetSalesVariantId(string countryCode, string variantId);
/// <summary>
/// Complete catalog for print country
/// </summary>
/// <param name="countryCode"></param>
/// <returns></returns>
Task<List<SalesItemView>> GetPriceList(string countryCode);
}

View file

@ -22,23 +22,22 @@ namespace Wonky.Client.HttpInterfaces;
/// <summary> /// <summary>
/// Interface for Customer Office Http repository /// Interface for Customer Office Http repository
/// </summary> /// </summary>
public interface ICustomerOfficeHttpRepository public interface ICountryCustomerRepository
{ {
/// <summary> /// <summary>
/// Get customers paged for given country /// Get customers paged for given country
/// </summary> /// </summary>
/// <param name="pagingParameters"></param> /// <param name="paging"></param>
/// <param name="countryCode"></param>
/// <returns></returns> /// <returns></returns>
Task<PagingResponse<CompanyDto>> GetCompaniesPaged(CustomerPaging pagingParameters, string countryCode); Task<PagingResponse<CompanyDto>> GetCompaniesPaged(CustomerPaging paging);
/// <summary> /// <summary>
/// Get customers paged for given sales rep /// Get customers paged for given sales rep
/// </summary> /// </summary>
/// <param name="salesRepId"></param> /// <param name="salesRepId"></param>
/// <param name="pagingParameters"></param> /// <param name="paging"></param>
/// <returns></returns> /// <returns></returns>
Task<PagingResponse<CompanyDto>> GetCompaniesPagedSalesRep(string salesRepId, CustomerPaging pagingParameters); Task<PagingResponse<CompanyDto>> GetCompaniesPagedSalesRep(string salesRepId, CustomerPaging paging);
/// <summary> /// <summary>
/// Get customer by Id /// Get customer by Id

View file

@ -22,20 +22,20 @@ namespace Wonky.Client.HttpInterfaces;
/// Interface for Report http repository /// Interface for Report http repository
/// </summary> /// </summary>
/// <remarks>Possibly duplicated in IReportHttpRepository</remarks> /// <remarks>Possibly duplicated in IReportHttpRepository</remarks>
public interface IReportOfficeHttpRepository public interface ICountryReportRepository
{ {
/// <summary> /// <summary>
/// Get reports for given userId /// Get Reports for given userId (Office)
/// </summary> /// </summary>
/// <param name="userId"></param> /// <param name="userId"></param>
/// <returns></returns> /// <returns></returns>
Task<List<SalesReportListView>> GetReports(string userId); Task<List<SalesReportListView>> GetCountryReports(string userId);
/// <summary> /// <summary>
/// Get report for given userId and workDate /// Get Report for given userId and workDate (Office)
/// </summary> /// </summary>
/// <param name="userId"></param> /// <param name="userId"></param>
/// <param name="workDate"></param> /// <param name="workDate"></param>
/// <returns></returns> /// <returns></returns>
Task<ReportView> GetReport(string userId, string workDate); Task<ReportView> GetCountryReport(string userId, string workDate);
} }

View file

@ -21,7 +21,7 @@ namespace Wonky.Client.HttpInterfaces;
/// <summary> /// <summary>
/// Interface Customer History CRM Http repository /// Interface Customer History CRM Http repository
/// </summary> /// </summary>
public interface ICustomerHistoryCrmHttpRepository public interface ICustomerHistoryRepository
{ {
/// <summary> /// <summary>
/// Fetch Invoice LIst /// Fetch Invoice LIst

View file

@ -6,7 +6,7 @@ namespace Wonky.Client.HttpInterfaces;
/// <summary> /// <summary>
/// Interface for sending emai /// Interface for sending emai
/// </summary> /// </summary>
public interface ISendMailService public interface ISystemSendMailService
{ {
/// <summary> /// <summary>
/// Send Mail /// Send Mail

View file

@ -21,7 +21,7 @@ namespace Wonky.Client.HttpInterfaces;
/// <summary> /// <summary>
/// Interface for User handling over http /// Interface for User handling over http
/// </summary> /// </summary>
public interface IUserHttpRepository public interface ISystemUserRepository
{ {
/// <summary> /// <summary>
/// Get Advisors (Office) /// Get Advisors (Office)

View file

@ -20,7 +20,7 @@ namespace Wonky.Client.HttpInterfaces;
/// <summary> /// <summary>
/// Interface for processing orders in warehouse /// Interface for processing orders in warehouse
/// </summary> /// </summary>
public interface IWarehouseHttpRepository public interface IWarehouseRepository
{ {
/// <summary> /// <summary>
/// Get warehouse order list by date /// Get warehouse order list by date

View file

@ -21,7 +21,7 @@ namespace Wonky.Client.HttpInterfaces;
/// <summary> /// <summary>
/// Interface for handling Customer Workplaces (chemical document service) /// Interface for handling Customer Workplaces (chemical document service)
/// </summary> /// </summary>
public interface IWorkplaceCrmHttpRepository public interface IWorkplaceRepository
{ {
/// <summary> /// <summary>
/// Get Workplaces for given customer id /// Get Workplaces for given customer id

View file

@ -28,7 +28,7 @@ namespace Wonky.Client.HttpRepository;
/// <summary> /// <summary>
/// Implementing Interface Activity CRM Http repository /// Implementing Interface Activity CRM Http repository
/// </summary> /// </summary>
public class ActivityCrmHttpRepository : IActivityCrmHttpRepository public class AdvisorActivityRepository : IAdvisorActivityRepository
{ {
private readonly JsonSerializerOptions? _options = new JsonSerializerOptions private readonly JsonSerializerOptions? _options = new JsonSerializerOptions
{ {
@ -36,12 +36,12 @@ public class ActivityCrmHttpRepository : IActivityCrmHttpRepository
}; };
private readonly NavigationManager _navigation; private readonly NavigationManager _navigation;
private ILogger<ActivityCrmHttpRepository> _logger; private ILogger<AdvisorActivityRepository> _logger;
private readonly HttpClient _client; private readonly HttpClient _client;
private readonly ApiConfig _api; private readonly ApiConfig _api;
public ActivityCrmHttpRepository(HttpClient client, public AdvisorActivityRepository(HttpClient client,
ILogger<ActivityCrmHttpRepository> logger, ILogger<AdvisorActivityRepository> logger,
NavigationManager navigation, IOptions<ApiConfig> configuration) NavigationManager navigation, IOptions<ApiConfig> configuration)
{ {
_client = client; _client = client;

View file

@ -31,7 +31,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.HttpRepository; namespace Wonky.Client.HttpRepository;
public class CatalogCrmHttpRepository : ICatalogCrmHttpRepository public class AdvisorCatalogRepository : IAdvisorCatalogRepository
{ {
private readonly JsonSerializerOptions _options = new JsonSerializerOptions private readonly JsonSerializerOptions _options = new JsonSerializerOptions
{ {
@ -39,12 +39,12 @@ public class CatalogCrmHttpRepository : ICatalogCrmHttpRepository
}; };
private readonly NavigationManager _navigation; private readonly NavigationManager _navigation;
private ILogger<CatalogCrmHttpRepository> _logger; private ILogger<AdvisorCatalogRepository> _logger;
private readonly HttpClient _client; private readonly HttpClient _client;
private readonly ApiConfig _apiConfig; private readonly ApiConfig _apiConfig;
public CatalogCrmHttpRepository(HttpClient client, public AdvisorCatalogRepository(HttpClient client,
ILogger<CatalogCrmHttpRepository> logger, ILogger<AdvisorCatalogRepository> logger,
NavigationManager navigation, IOptions<ApiConfig> configuration) NavigationManager navigation, IOptions<ApiConfig> configuration)
{ {
_client = client; _client = client;
@ -58,7 +58,7 @@ public class CatalogCrmHttpRepository : ICatalogCrmHttpRepository
/// </summary> /// </summary>
/// <param name="pagingParameters"></param> /// <param name="pagingParameters"></param>
/// <returns></returns> /// <returns></returns>
public async Task<PagingResponse<SalesItemView>> GetSalesItemsPaged(CatalogPagingParams pagingParameters) public async Task<PagingResponse<SalesItemView>> GetSalesItemsPaged(CatalogPaging pagingParameters)
{ {
var queryString = new Dictionary<string, string> var queryString = new Dictionary<string, string>
{ {
@ -68,6 +68,7 @@ public class CatalogCrmHttpRepository : ICatalogCrmHttpRepository
["searchColumn"] = pagingParameters.SearchColumn, ["searchColumn"] = pagingParameters.SearchColumn,
["searchTerm"] = pagingParameters.SearchTerm, ["searchTerm"] = pagingParameters.SearchTerm,
["selectGroup"] = pagingParameters.SelectGroup == "0" ? "" : pagingParameters.SelectGroup, ["selectGroup"] = pagingParameters.SelectGroup == "0" ? "" : pagingParameters.SelectGroup,
["countryCode"] = pagingParameters.CountryCode
}; };
var response = await _client var response = await _client
.GetAsync(QueryHelpers.AddQueryString($"{_apiConfig.Catalog}/page", queryString)); .GetAsync(QueryHelpers.AddQueryString($"{_apiConfig.Catalog}/page", queryString));
@ -97,7 +98,7 @@ public class CatalogCrmHttpRepository : ICatalogCrmHttpRepository
/// <param name="pagingParameters"></param> /// <param name="pagingParameters"></param>
/// <param name="countryCode"></param> /// <param name="countryCode"></param>
/// <returns></returns> /// <returns></returns>
public async Task<PagingResponse<SalesItemView>> GetSalesItemsPaged(CatalogPagingParams pagingParameters, string countryCode) public async Task<PagingResponse<SalesItemView>> GetSalesItemsPaged(CatalogPaging pagingParameters, string countryCode)
{ {
var queryString = new Dictionary<string, string> var queryString = new Dictionary<string, string>
{ {
@ -107,6 +108,7 @@ public class CatalogCrmHttpRepository : ICatalogCrmHttpRepository
["searchColumn"] = pagingParameters.SearchColumn, ["searchColumn"] = pagingParameters.SearchColumn,
["searchTerm"] = pagingParameters.SearchTerm, ["searchTerm"] = pagingParameters.SearchTerm,
["selectGroup"] = pagingParameters.SelectGroup == "0" ? "" : pagingParameters.SelectGroup, ["selectGroup"] = pagingParameters.SelectGroup == "0" ? "" : pagingParameters.SelectGroup,
["countryCode"] = pagingParameters.CountryCode
}; };
var response = await _client var response = await _client
.GetAsync(QueryHelpers.AddQueryString($"{_apiConfig.Catalog}/{countryCode}/page", queryString)); .GetAsync(QueryHelpers.AddQueryString($"{_apiConfig.Catalog}/{countryCode}/page", queryString));
@ -142,24 +144,13 @@ public class CatalogCrmHttpRepository : ICatalogCrmHttpRepository
return salesItem ?? new SalesItemView(); return salesItem ?? new SalesItemView();
} }
/// <summary>
/// Get sales item by sku
/// </summary>
/// <param name="sku"></param>
/// <returns></returns>
public async Task<SalesItemView> GetSalesItemSku(string sku)
{
var salesItem = await _client.GetFromJsonAsync<SalesItemView>($"{_apiConfig.Catalog}/sku/{sku}");
return salesItem ?? new SalesItemView();
}
/// <summary> /// <summary>
/// Overload Get sales item by sku and country code /// Overload Get sales item by sku and country code
/// </summary> /// </summary>
/// <param name="sku"></param> /// <param name="sku"></param>
/// <param name="countryCode"></param> /// <param name="countryCode"></param>
/// <returns></returns> /// <returns></returns>
public async Task<SalesItemView> GetSalesItemSku(string sku, string countryCode) public async Task<SalesItemView> GetSalesItemSku(string countryCode, string sku)
{ {
var salesItem = await _client.GetFromJsonAsync<SalesItemView>($"{_apiConfig.Catalog}/{countryCode}/sku/{sku}"); var salesItem = await _client.GetFromJsonAsync<SalesItemView>($"{_apiConfig.Catalog}/{countryCode}/sku/{sku}");
return salesItem ?? new SalesItemView(); return salesItem ?? new SalesItemView();
@ -195,5 +186,4 @@ public class CatalogCrmHttpRepository : ICatalogCrmHttpRepository
{ {
return await _client.GetFromJsonAsync<List<SalesItemView>>($"{_apiConfig.Catalog}/{countryCode}", _options); return await _client.GetFromJsonAsync<List<SalesItemView>>($"{_apiConfig.Catalog}/{countryCode}", _options);
} }
} }

View file

@ -8,7 +8,7 @@ using Wonky.Entity.DTO;
namespace Wonky.Client.HttpRepository; namespace Wonky.Client.HttpRepository;
public class ContactCrmHttpRepository : IContactCrmHttpRepository public class AdvisorContactRepository : IAdvisorContactRepository
{ {
private readonly JsonSerializerOptions _options = new () private readonly JsonSerializerOptions _options = new ()
{ {
@ -16,12 +16,12 @@ public class ContactCrmHttpRepository : IContactCrmHttpRepository
}; };
private readonly NavigationManager _navigation; private readonly NavigationManager _navigation;
private ILogger<ContactCrmHttpRepository> _logger; private ILogger<AdvisorContactRepository> _logger;
private readonly HttpClient _client; private readonly HttpClient _client;
private readonly ApiConfig _conf; private readonly ApiConfig _conf;
public ContactCrmHttpRepository(HttpClient client, public AdvisorContactRepository(HttpClient client,
ILogger<ContactCrmHttpRepository> logger, ILogger<AdvisorContactRepository> logger,
NavigationManager navigation, NavigationManager navigation,
IOptions<ApiConfig> apiConfig) IOptions<ApiConfig> apiConfig)
{ {

View file

@ -34,7 +34,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.HttpRepository; namespace Wonky.Client.HttpRepository;
public class CustomerCrmCrmHttpRepository : ICustomerCrmHttpRepository public class AdvisorCustomerRepository : IAdvisorCustomerRepository
{ {
private readonly JsonSerializerOptions _options = new () private readonly JsonSerializerOptions _options = new ()
{ {
@ -42,12 +42,12 @@ public class CustomerCrmCrmHttpRepository : ICustomerCrmHttpRepository
}; };
private readonly NavigationManager _navigation; private readonly NavigationManager _navigation;
private ILogger<CustomerCrmCrmHttpRepository> _logger; private ILogger<AdvisorCustomerRepository> _logger;
private readonly HttpClient _client; private readonly HttpClient _client;
private readonly ApiConfig _conf; private readonly ApiConfig _conf;
public CustomerCrmCrmHttpRepository(HttpClient client, public AdvisorCustomerRepository(HttpClient client,
ILogger<CustomerCrmCrmHttpRepository> logger, ILogger<AdvisorCustomerRepository> logger,
NavigationManager navigation, NavigationManager navigation,
IOptions<ApiConfig> apiConfig) IOptions<ApiConfig> apiConfig)
{ {

View file

@ -25,7 +25,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.HttpRepository; namespace Wonky.Client.HttpRepository;
public class ReportHttpRepository : IReportHttpRepository public class AdvisorReportRepository : IAdvisorReportRepository
{ {
private readonly JsonSerializerOptions _options = new JsonSerializerOptions private readonly JsonSerializerOptions _options = new JsonSerializerOptions
{ {
@ -33,12 +33,12 @@ public class ReportHttpRepository : IReportHttpRepository
}; };
private readonly NavigationManager _navigation; private readonly NavigationManager _navigation;
private ILogger<ReportHttpRepository> _logger; private ILogger<AdvisorReportRepository> _logger;
private readonly HttpClient _client; private readonly HttpClient _client;
private readonly ApiConfig _apiConfig; private readonly ApiConfig _apiConfig;
public ReportHttpRepository(HttpClient client, public AdvisorReportRepository(HttpClient client,
ILogger<ReportHttpRepository> logger, ILogger<AdvisorReportRepository> logger,
NavigationManager navigation, IOptions<ApiConfig> configuration) NavigationManager navigation, IOptions<ApiConfig> configuration)
{ {
_client = client; _client = client;
@ -111,25 +111,4 @@ public class ReportHttpRepository : IReportHttpRepository
IsSuccess = result.IsSuccess IsSuccess = result.IsSuccess
}; };
} }
/// <summary>
/// Get Reports for given userId (Office)
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public async Task<List<SalesReportListView>> GetCountryReports(string userId)
{
return await _client.GetFromJsonAsync<List<SalesReportListView>>($"{_apiConfig.OfficeReports}/{userId}");
}
/// <summary>
/// Get Report for given userId and workDate (Office)
/// </summary>
/// <param name="userId"></param>
/// <param name="workDate"></param>
/// <returns></returns>
public async Task<ReportView> GetCountryReport(string userId, string workDate)
{
return await _client.GetFromJsonAsync<ReportView>($"{_apiConfig.OfficeReports}/{userId}/{workDate}");
}
} }

View file

@ -26,7 +26,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.HttpRepository; namespace Wonky.Client.HttpRepository;
public class TaskItemCrmHttpRepository : ITaskItemCrmHttpRepository public class AdvisorTaskItemRepository : IAdvisorTaskItemRepository
{ {
private readonly JsonSerializerOptions _options = new JsonSerializerOptions private readonly JsonSerializerOptions _options = new JsonSerializerOptions
{ {
@ -35,12 +35,12 @@ public class TaskItemCrmHttpRepository : ITaskItemCrmHttpRepository
}; };
private readonly NavigationManager _navigation; private readonly NavigationManager _navigation;
private ILogger<TaskItemCrmHttpRepository> _logger; private ILogger<AdvisorTaskItemRepository> _logger;
private readonly HttpClient _client; private readonly HttpClient _client;
private readonly ApiConfig _apiConfig; private readonly ApiConfig _apiConfig;
public TaskItemCrmHttpRepository(HttpClient client, public AdvisorTaskItemRepository(HttpClient client,
ILogger<TaskItemCrmHttpRepository> logger, ILogger<AdvisorTaskItemRepository> logger,
NavigationManager navigation, IOptions<ApiConfig> configuration) NavigationManager navigation, IOptions<ApiConfig> configuration)
{ {
_client = client; _client = client;

View file

@ -0,0 +1,144 @@
// 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 System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Json;
using System.Text.Json;
using System.Threading.Tasks;
using Wonky.Client.Features;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.Extensions.Options;
using Wonky.Client.HttpInterfaces;
using Wonky.Entity.Configuration;
using Wonky.Entity.DTO;
using Wonky.Entity.Requests;
using Wonky.Entity.Views;
namespace Wonky.Client.HttpRepository;
public class CountryCatalogRepository : ICountryCatalogRepository
{
private readonly JsonSerializerOptions _options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
private readonly NavigationManager _navigation;
private ILogger<CountryCatalogRepository> _logger;
private readonly HttpClient _client;
private readonly ApiConfig _apiConfig;
public CountryCatalogRepository(HttpClient client,
ILogger<CountryCatalogRepository> logger,
NavigationManager navigation, IOptions<ApiConfig> configuration)
{
_client = client;
_logger = logger;
_navigation = navigation;
_apiConfig = configuration.Value;
}
/// <summary>
/// Get a paged sales item list
/// </summary>
/// <param name="countryCode"></param>
/// <param name="paging"></param>
/// <returns></returns>
public async Task<PagingResponse<SalesItemView>> GetSalesItemsPaged(string countryCode, CatalogPaging paging)
{
var queryString = new Dictionary<string, string>
{
["pageNumber"] = paging.PageNumber.ToString(),
["pageSize"] = paging.PageSize.ToString(),
["orderBy"] = paging.OrderBy,
["searchColumn"] = paging.SearchColumn,
["searchTerm"] = paging.SearchTerm,
["selectGroup"] = paging.SelectGroup == "0" ? "" : paging.SelectGroup,
["countryCode"] = countryCode
};
var response = await _client
.GetAsync(QueryHelpers.AddQueryString($"{_apiConfig.Catalog}/country/{countryCode}/page", queryString));
if (!response.IsSuccessStatusCode)
{
return new PagingResponse<SalesItemView>
{
Items = new List<SalesItemView>(),
MetaData = new MetaData()
};
}
var content = await response.Content.ReadAsStringAsync();
var pagingResponse = new PagingResponse<SalesItemView>
{
Items = JsonSerializer.Deserialize<List<SalesItemView>>(content, _options),
MetaData = JsonSerializer.Deserialize<MetaData>(
response.Headers.GetValues("X-Pagination").First(), _options)
};
return pagingResponse;
}
/// <summary>
/// Get sales item by id
/// </summary>
/// <param name="countryCode"></param>
/// <param name="salesItemId"></param>
/// <returns></returns>
public async Task<SalesItemView> GetSalesItemId(string countryCode, string salesItemId)
{
var salesItem = await _client
.GetFromJsonAsync<SalesItemView>($"{_apiConfig.Catalog}/country/{countryCode}/{salesItemId}");
return salesItem ?? new SalesItemView();
}
/// <summary>
/// Overload Get sales item by sku and country code
/// </summary>
/// <param name="sku"></param>
/// <param name="countryCode"></param>
/// <returns></returns>
public async Task<SalesItemView> GetSalesItemSku(string countryCode, string sku)
{
var salesItem = await _client.GetFromJsonAsync<SalesItemView>($"{_apiConfig.Catalog}/country/{countryCode}/sku/{sku}");
return salesItem ?? new SalesItemView();
}
/// <summary>
/// Get sales item by variant id
/// </summary>
/// <param name="countryCode"></param>
/// <param name="variantId"></param>
/// <returns></returns>
public async Task<SalesItemView> GetSalesVariantId(string countryCode, string variantId)
{
var salesItem = await _client
.GetFromJsonAsync<SalesItemView>($"{_apiConfig.Catalog}/country/{countryCode}/variant/{variantId}");
return salesItem ?? new SalesItemView();
}
/// <summary>
/// Complete catalog for print country
/// </summary>
/// <param name="countryCode"></param>
/// <returns></returns>
public async Task<List<SalesItemView>> GetPriceList(string countryCode)
{
return await _client.GetFromJsonAsync<List<SalesItemView>>($"{_apiConfig.Catalog}/country/{countryCode}", _options);
}
}

View file

@ -34,7 +34,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.HttpRepository; namespace Wonky.Client.HttpRepository;
public class CustomerOfficeHttpRepository : ICustomerOfficeHttpRepository public class CountryCustomerRepository : ICountryCustomerRepository
{ {
private readonly JsonSerializerOptions _options = new () private readonly JsonSerializerOptions _options = new ()
{ {
@ -42,12 +42,12 @@ public class CustomerOfficeHttpRepository : ICustomerOfficeHttpRepository
}; };
private readonly NavigationManager _navigator; private readonly NavigationManager _navigator;
private ILogger<CustomerOfficeHttpRepository> _logger; private ILogger<CountryCustomerRepository> _logger;
private readonly HttpClient _client; private readonly HttpClient _client;
private readonly ApiConfig _api; private readonly ApiConfig _api;
public CustomerOfficeHttpRepository(HttpClient client, public CountryCustomerRepository(HttpClient client,
ILogger<CustomerOfficeHttpRepository> logger, ILogger<CountryCustomerRepository> logger,
NavigationManager navigator, NavigationManager navigator,
IOptions<ApiConfig> apiConfig) IOptions<ApiConfig> apiConfig)
{ {
@ -60,21 +60,20 @@ public class CustomerOfficeHttpRepository : ICustomerOfficeHttpRepository
/// <summary> /// <summary>
/// Get customers paged for given sales rep /// Get customers paged for given sales rep
/// </summary> /// </summary>
/// <param name="pagingParameters"></param> /// <param name="paging"></param>
/// <param name="countryCode"></param>
/// <returns></returns> /// <returns></returns>
public async Task<PagingResponse<CompanyDto>> GetCompaniesPaged(CustomerPaging pagingParameters, string countryCode) public async Task<PagingResponse<CompanyDto>> GetCompaniesPaged(CustomerPaging paging)
{ {
var queryString = new Dictionary<string, string> var queryString = new Dictionary<string, string>
{ {
["pageNumber"] = pagingParameters.PageNumber.ToString(), ["pageNumber"] = paging.PageNumber.ToString(),
["pageSize"] = pagingParameters.PageSize.ToString(), ["pageSize"] = paging.PageSize.ToString(),
["searchTerm"] = pagingParameters.SearchTerm, ["searchTerm"] = paging.SearchTerm,
["searchColumn"] = pagingParameters.SearchColumn, ["searchColumn"] = paging.SearchColumn,
["orderBy"] = pagingParameters.OrderBy, ["orderBy"] = paging.OrderBy,
["isHidden"] = pagingParameters.IsHidden.ToString(), ["isHidden"] = paging.IsHidden.ToString(),
["hasFolded"] = pagingParameters.HasFolded.ToString(), ["hasFolded"] = paging.HasFolded.ToString(),
["countryCode"] = pagingParameters.CountryCode ["countryCode"] = paging.CountryCode
}; };
var response = await _client.GetAsync(QueryHelpers.AddQueryString($"{_api.OfficeCustomers}", queryString)); var response = await _client.GetAsync(QueryHelpers.AddQueryString($"{_api.OfficeCustomers}", queryString));
@ -92,20 +91,20 @@ public class CustomerOfficeHttpRepository : ICustomerOfficeHttpRepository
/// Get customers paged for given sales rep /// Get customers paged for given sales rep
/// </summary> /// </summary>
/// <param name="salesRepId"></param> /// <param name="salesRepId"></param>
/// <param name="pagingParameters"></param> /// <param name="paging"></param>
/// <returns></returns> /// <returns></returns>
public async Task<PagingResponse<CompanyDto>> GetCompaniesPagedSalesRep(string salesRepId, CustomerPaging pagingParameters) public async Task<PagingResponse<CompanyDto>> GetCompaniesPagedSalesRep(string salesRepId, CustomerPaging paging)
{ {
var queryString = new Dictionary<string, string> var queryString = new Dictionary<string, string>
{ {
["pageNumber"] = pagingParameters.PageNumber.ToString(), ["pageNumber"] = paging.PageNumber.ToString(),
["pageSize"] = pagingParameters.PageSize.ToString(), ["pageSize"] = paging.PageSize.ToString(),
["searchTerm"] = pagingParameters.SearchTerm, ["searchTerm"] = paging.SearchTerm,
["searchColumn"] = pagingParameters.SearchColumn, ["searchColumn"] = paging.SearchColumn,
["orderBy"] = pagingParameters.OrderBy, ["orderBy"] = paging.OrderBy,
["isHidden"] = pagingParameters.IsHidden.ToString(), ["isHidden"] = paging.IsHidden.ToString(),
["hasFolded"] = pagingParameters.HasFolded.ToString(), ["hasFolded"] = paging.HasFolded.ToString(),
["countryCode"] = pagingParameters.CountryCode ["countryCode"] = paging.CountryCode
}; };
var response = await _client.GetAsync(QueryHelpers.AddQueryString($"{_api.OfficeCustomers}/salesRep/{salesRepId}/", queryString)); var response = await _client.GetAsync(QueryHelpers.AddQueryString($"{_api.OfficeCustomers}/salesRep/{salesRepId}/", queryString));

View file

@ -0,0 +1,70 @@
// 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 System.Net.Http.Json;
using System.Text.Json;
using Microsoft.AspNetCore.Components;
using Microsoft.Extensions.Options;
using Wonky.Client.HttpInterfaces;
using Wonky.Entity.Configuration;
using Wonky.Entity.DTO;
using Wonky.Entity.Views;
namespace Wonky.Client.HttpRepository;
public class CountryReportRepository : ICountryReportRepository
{
private readonly JsonSerializerOptions _options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
private readonly NavigationManager _navigation;
private ILogger<CountryReportRepository> _logger;
private readonly HttpClient _client;
private readonly ApiConfig _apiConfig;
public CountryReportRepository(HttpClient client,
ILogger<CountryReportRepository> logger,
NavigationManager navigation, IOptions<ApiConfig> configuration)
{
_client = client;
_logger = logger;
_navigation = navigation;
_apiConfig = configuration.Value;
}
/// <summary>
/// Get Reports for given userId (Office)
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public async Task<List<SalesReportListView>> GetCountryReports(string userId)
{
return await _client.GetFromJsonAsync<List<SalesReportListView>>($"{_apiConfig.OfficeReports}/{userId}");
}
/// <summary>
/// Get Report for given userId and workDate (Office)
/// </summary>
/// <param name="userId"></param>
/// <param name="workDate"></param>
/// <returns></returns>
public async Task<ReportView> GetCountryReport(string userId, string workDate)
{
return await _client.GetFromJsonAsync<ReportView>($"{_apiConfig.OfficeReports}/{userId}/{workDate}");
}
}

View file

@ -25,7 +25,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.HttpRepository; namespace Wonky.Client.HttpRepository;
public class CustomerHistoryCrmHttpRepository : ICustomerHistoryCrmHttpRepository public class CustomerHistoryRepository : ICustomerHistoryRepository
{ {
private readonly JsonSerializerOptions _options = new JsonSerializerOptions private readonly JsonSerializerOptions _options = new JsonSerializerOptions
{ {
@ -33,12 +33,12 @@ public class CustomerHistoryCrmHttpRepository : ICustomerHistoryCrmHttpRepositor
}; };
private readonly NavigationManager _navigation; private readonly NavigationManager _navigation;
private ILogger<CustomerHistoryCrmHttpRepository> _logger; private ILogger<CustomerHistoryRepository> _logger;
private readonly HttpClient _client; private readonly HttpClient _client;
private readonly ApiConfig _api; private readonly ApiConfig _api;
public CustomerHistoryCrmHttpRepository( public CustomerHistoryRepository(
HttpClient client, ILogger<CustomerHistoryCrmHttpRepository> logger, HttpClient client, ILogger<CustomerHistoryRepository> logger,
NavigationManager navigation, IOptions<ApiConfig> configuration) NavigationManager navigation, IOptions<ApiConfig> configuration)
{ {
_client = client; _client = client;

View file

@ -10,7 +10,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.HttpRepository; namespace Wonky.Client.HttpRepository;
public class SendMailService : ISendMailService public class SystemSendMailService : ISystemSendMailService
{ {
private readonly JsonSerializerOptions? _options = new JsonSerializerOptions private readonly JsonSerializerOptions? _options = new JsonSerializerOptions
{ {
@ -18,11 +18,11 @@ public class SendMailService : ISendMailService
}; };
private readonly NavigationManager _navigation; private readonly NavigationManager _navigation;
private ILogger<SendMailService> _logger; private ILogger<SystemSendMailService> _logger;
private readonly HttpClient _client; private readonly HttpClient _client;
private readonly ApiConfig _api; private readonly ApiConfig _api;
public SendMailService(HttpClient client, ILogger<SendMailService> logger, public SystemSendMailService(HttpClient client, ILogger<SystemSendMailService> logger,
NavigationManager navigation, IOptions<ApiConfig> configuration) NavigationManager navigation, IOptions<ApiConfig> configuration)
{ {
_client = client; _client = client;

View file

@ -25,7 +25,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.HttpRepository; namespace Wonky.Client.HttpRepository;
public class UserHttpRepository : IUserHttpRepository public class SystemUserRepository : ISystemUserRepository
{ {
private readonly JsonSerializerOptions? _options = new JsonSerializerOptions private readonly JsonSerializerOptions? _options = new JsonSerializerOptions
{ {
@ -33,11 +33,11 @@ public class UserHttpRepository : IUserHttpRepository
}; };
private readonly NavigationManager _navigation; private readonly NavigationManager _navigation;
private ILogger<UserHttpRepository> _logger; private ILogger<SystemUserRepository> _logger;
private readonly HttpClient _client; private readonly HttpClient _client;
private readonly ApiConfig _api; private readonly ApiConfig _api;
public UserHttpRepository(HttpClient client, ILogger<UserHttpRepository> logger, public SystemUserRepository(HttpClient client, ILogger<SystemUserRepository> logger,
NavigationManager navigation, IOptions<ApiConfig> configuration) NavigationManager navigation, IOptions<ApiConfig> configuration)
{ {
_client = client; _client = client;

View file

@ -23,7 +23,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.HttpRepository; namespace Wonky.Client.HttpRepository;
public class WarehouseHttpRepository : IWarehouseHttpRepository public class WarehouseRepository : IWarehouseRepository
{ {
private readonly JsonSerializerOptions? _options = new JsonSerializerOptions private readonly JsonSerializerOptions? _options = new JsonSerializerOptions
{ {
@ -31,12 +31,12 @@ public class WarehouseHttpRepository : IWarehouseHttpRepository
}; };
private readonly NavigationManager _navigation; private readonly NavigationManager _navigation;
private ILogger<WarehouseHttpRepository> _logger; private ILogger<WarehouseRepository> _logger;
private readonly HttpClient _client; private readonly HttpClient _client;
private readonly ApiConfig _api; private readonly ApiConfig _api;
public WarehouseHttpRepository(HttpClient client, public WarehouseRepository(HttpClient client,
ILogger<WarehouseHttpRepository> logger, ILogger<WarehouseRepository> logger,
NavigationManager navigation, NavigationManager navigation,
IOptions<ApiConfig> configuration) IOptions<ApiConfig> configuration)
{ {

View file

@ -24,7 +24,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.HttpRepository; namespace Wonky.Client.HttpRepository;
public class WorkplaceCrmHttpRepository : IWorkplaceCrmHttpRepository public class WorkplaceRepository : IWorkplaceRepository
{ {
private readonly JsonSerializerOptions? _options = new JsonSerializerOptions private readonly JsonSerializerOptions? _options = new JsonSerializerOptions
{ {
@ -32,12 +32,12 @@ public class WorkplaceCrmHttpRepository : IWorkplaceCrmHttpRepository
}; };
private readonly NavigationManager _navigation; private readonly NavigationManager _navigation;
private ILogger<WorkplaceCrmHttpRepository> _logger; private ILogger<WorkplaceRepository> _logger;
private readonly HttpClient _client; private readonly HttpClient _client;
private readonly ApiConfig _api; private readonly ApiConfig _api;
public WorkplaceCrmHttpRepository(HttpClient client, public WorkplaceRepository(HttpClient client,
ILogger<WorkplaceCrmHttpRepository> logger, ILogger<WorkplaceRepository> logger,
NavigationManager navigation, NavigationManager navigation,
IOptions<ApiConfig> configuration) IOptions<ApiConfig> configuration)
{ {

View file

@ -24,7 +24,7 @@
<div class="card-header"> <div class="card-header">
<h3>Rapport Arkiv - @UserInfo.FirstName @UserInfo.LastName</h3> <h3>Rapport Arkiv - @UserInfo.FirstName @UserInfo.LastName</h3>
</div> </div>
<ReportTableOfficeComponent OnShowReport="ShowThisReport" CountryCode="@CountryCode" UserId="@UserId" ReportList="@ActivityReports" /> <ReportListOfficeComponent OnShowReport="ShowThisReport" CountryCode="@CountryCode" UserId="@UserId" ReportList="@ActivityReports" />
</div> </div>

View file

@ -23,13 +23,13 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class ReportListOfficePage : IDisposable public partial class AdminReportListPage : IDisposable
{ {
[Parameter] public string UserId { get; set; } = ""; [Parameter] public string UserId { get; set; } = "";
[Parameter] public string CountryCode { get; set; } = ""; [Parameter] public string CountryCode { get; set; } = "";
[Inject] public IReportHttpRepository ReportRepo { get; set; } [Inject] public ICountryReportRepository ReportRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public IUserHttpRepository UserRepo { get; set; } [Inject] public ISystemUserRepository SystemUserRepo { get; set; }
[Inject] public NavigationManager Navigator { get; set; } [Inject] public NavigationManager Navigator { get; set; }
private List<SalesReportListView> ActivityReports { get; set; } = new(); private List<SalesReportListView> ActivityReports { get; set; } = new();
private bool Working { get; set; } = true; private bool Working { get; set; } = true;
@ -43,12 +43,19 @@ public partial class ReportListOfficePage : IDisposable
Interceptor.RegisterEvent(); Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent(); Interceptor.RegisterBeforeSendEvent();
UserInfo = await UserRepo.GetAdvisorInfo(UserId); UserInfo = await SystemUserRepo.GetAdvisorInfo(UserId);
while (string.IsNullOrWhiteSpace(UserInfo.UserId))
{
await Task.Delay(500);
}
var reports = await ReportRepo.GetCountryReports(UserId); var reports = await ReportRepo.GetCountryReports(UserId);
if (reports.Any()) if (reports.Any())
ActivityReports = reports.OrderByDescending(x => x.ReportDate).ToList(); ActivityReports = reports.OrderByDescending(x => x.ReportDate).ToList();
}
protected override void OnInitialized()
{
Working = false; Working = false;
} }

View file

@ -23,7 +23,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class ReportViewOfficePage : IDisposable public partial class AdminReportViewPage : IDisposable
{ {
/// <summary> /// <summary>
/// Country code from url parameter /// Country code from url parameter
@ -53,7 +53,7 @@ public partial class ReportViewOfficePage : IDisposable
/// Injected administrative report http repo /// Injected administrative report http repo
/// </summary> /// </summary>
[Inject] [Inject]
public IReportHttpRepository ReportRepo { get; set; } public ICountryReportRepository ReportRepo { get; set; }
/// <summary> /// <summary>
/// Navigation Manager /// Navigation Manager
@ -65,7 +65,7 @@ public partial class ReportViewOfficePage : IDisposable
/// Logger service /// Logger service
/// </summary> /// </summary>
[Inject] [Inject]
public ILogger<ReportViewOfficePage> Logger { get; set; } public ILogger<AdminReportViewPage> Logger { get; set; }
/// <summary> /// <summary>
/// Storage service /// Storage service

View file

@ -17,7 +17,7 @@
@using Wonky.Client.Components @using Wonky.Client.Components
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@attribute [Authorize(Roles = "Admin,Office")] @attribute [Authorize(Roles = "Admin")]
@page "/office/users/advisors/{CountryCode}" @page "/office/users/advisors/{CountryCode}"
<div class="card"> <div class="card">

View file

@ -5,10 +5,10 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class CountrySalesRepListPage public partial class AdminSalesRepListPage
{ {
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public IUserHttpRepository UserRepo { get; set; } [Inject] public ISystemUserRepository SystemUserRepo { get; set; }
[Parameter] public string CountryCode { get; set; } = ""; [Parameter] public string CountryCode { get; set; } = "";
private List<UserListAdminView> SalesReps { get; set; } = new(); private List<UserListAdminView> SalesReps { get; set; } = new();
private bool Working { get; set; } = true; private bool Working { get; set; } = true;
@ -17,7 +17,7 @@ public partial class CountrySalesRepListPage
{ {
Interceptor.RegisterEvent(); Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent(); Interceptor.RegisterBeforeSendEvent();
var AdvisorList = await UserRepo.GetAdvisors(); var AdvisorList = await SystemUserRepo.GetAdvisors();
SalesReps = AdvisorList SalesReps = AdvisorList
.Where(x => x.CountryCode.ToLower() == CountryCode && Convert.ToInt32(x.SalesRep) < 100) .Where(x => x.CountryCode.ToLower() == CountryCode && Convert.ToInt32(x.SalesRep) < 100)
.ToList(); .ToList();

View file

@ -15,11 +15,10 @@
// //
*@ *@
@page "/price-catalog"
@using Wonky.Client.Components @using Wonky.Client.Components
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@attribute [Authorize(Roles = "Advisor")]
@attribute [Authorize(Roles = "Advisor,Admin,Office")] @page "/price-catalog"
<div class="sticky-top bg-dark rounded-2 px-3"> <div class="sticky-top bg-dark rounded-2 px-3">
<div class="row g-3 mb-3"> <div class="row g-3 mb-3">
@ -46,7 +45,7 @@
</div> </div>
</div> </div>
</div> </div>
<CatalogTableComponent ItemList="Items"/> <CatalogListComponent ItemList="Items"/>
@if (Working) @if (Working)
{ {
<WorkingThreeDots /> <WorkingThreeDots />

View file

@ -29,15 +29,15 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class CatalogPage : IDisposable public partial class AdvisorCatalogPage : IDisposable
{ {
[Inject] public ILocalStorageService Storage { get; set; } [Inject] public ILocalStorageService Storage { get; set; }
[Inject] public ICatalogCrmHttpRepository ItemRepo { get; set; } [Inject] public IAdvisorCatalogRepository ItemRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public UserProfileService ProfileService { get; set; } [Inject] public UserProfileService ProfileService { get; set; }
private List<SalesItemView> Items { get; set; } = new(); private List<SalesItemView> Items { get; set; } = new();
private MetaData MetaInfo { get; set; } = new(); private MetaData MetaInfo { get; set; } = new();
private CatalogPagingParams PageParams = new(); private CatalogPaging _page = new();
private UserPref Prefs = new(); private UserPref Prefs = new();
private UserInfoView UserInfo { get; set; } = new(); private UserInfoView UserInfo { get; set; } = new();
private bool Working { get; set; } = true; private bool Working { get; set; } = true;
@ -47,11 +47,11 @@ public partial class CatalogPage : IDisposable
Prefs = await ProfileService.GetPreferences(); Prefs = await ProfileService.GetPreferences();
UserInfo = await Storage.GetItemAsync<UserInfoView>("_xu"); UserInfo = await Storage.GetItemAsync<UserInfoView>("_xu");
PageParams.CountryCode = UserInfo.CountryCode; _page.CountryCode = UserInfo.CountryCode;
PageParams.OrderBy = Prefs.ItemSort; _page.OrderBy = Prefs.ItemSort;
PageParams.SearchColumn = Prefs.ItemSearch; _page.SearchColumn = Prefs.ItemSearch;
PageParams.PageSize = Convert.ToInt32(Prefs.PageSize); _page.PageSize = Convert.ToInt32(Prefs.PageSize);
Interceptor.RegisterEvent(); Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent(); Interceptor.RegisterBeforeSendEvent();
@ -62,53 +62,53 @@ public partial class CatalogPage : IDisposable
private async Task SetSearchPhrase(string searchTerm) private async Task SetSearchPhrase(string searchTerm)
{ {
Items = new List<SalesItemView>(); Items = new List<SalesItemView>();
PageParams.PageNumber = 1; _page.PageNumber = 1;
PageParams.SearchTerm = searchTerm; _page.SearchTerm = searchTerm;
await FetchSalesItems(); await FetchSalesItems();
} }
private async Task SetPageSize(string pageSize) private async Task SetPageSize(string pageSize)
{ {
Items = new List<SalesItemView>(); Items = new List<SalesItemView>();
PageParams.PageSize = Convert.ToInt32(pageSize); _page.PageSize = Convert.ToInt32(pageSize);
PageParams.PageNumber = 1; _page.PageNumber = 1;
await FetchSalesItems(); await FetchSalesItems();
} }
private async Task SetSearchCol(string columnName) private async Task SetSearchCol(string columnName)
{ {
Items = new List<SalesItemView>(); Items = new List<SalesItemView>();
PageParams.PageNumber = 1; _page.PageNumber = 1;
PageParams.SearchColumn = columnName; _page.SearchColumn = columnName;
await FetchSalesItems(); await FetchSalesItems();
} }
private async Task SetSortCol(string orderBy) private async Task SetSortCol(string orderBy)
{ {
Items = new List<SalesItemView>(); Items = new List<SalesItemView>();
PageParams.OrderBy = orderBy; _page.OrderBy = orderBy;
await FetchSalesItems(); await FetchSalesItems();
} }
private async Task SetSelectedPage(int page) private async Task SetSelectedPage(int page)
{ {
Items = new List<SalesItemView>(); Items = new List<SalesItemView>();
PageParams.PageNumber = page; _page.PageNumber = page;
await FetchSalesItems(); await FetchSalesItems();
} }
private async Task SetGroupCol(string groupFilter) private async Task SetGroupCol(string groupFilter)
{ {
Items = new List<SalesItemView>(); Items = new List<SalesItemView>();
PageParams.PageNumber = 1; _page.PageNumber = 1;
PageParams.SelectGroup = groupFilter; _page.SelectGroup = groupFilter;
await FetchSalesItems(); await FetchSalesItems();
} }
private async Task FetchSalesItems() private async Task FetchSalesItems()
{ {
Working = true; Working = true;
var pagingResponse = await ItemRepo.GetSalesItemsPaged(PageParams); var pagingResponse = await ItemRepo.GetSalesItemsPaged(_page);
Working = false; Working = false;
Items = pagingResponse.Items!; Items = pagingResponse.Items!;
MetaInfo = pagingResponse.MetaData; MetaInfo = pagingResponse.MetaData;

View file

@ -15,10 +15,10 @@
// //
*@ *@
@page "/companies/{CompanyId}/activities/new"
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@attribute [Authorize(Roles = "Advisor")]
@using Wonky.Client.Components @using Wonky.Client.Components
@attribute [Authorize(Roles = "Advisor")]
@page "/companies/{CompanyId}/activities/new"
<div class="row bg-dark text-white rounded-2 mb-2 py-2 align-items-center"> <div class="row bg-dark text-white rounded-2 mb-2 py-2 align-items-center">
<div class="col"> <div class="col">
@ -40,7 +40,12 @@
@if (ReportClosed) @if (ReportClosed)
{ {
<h5>Der kan ikke oprettes besøg når der findes rapport for @SelectedDate.ToShortDateString()</h5> <div class="row">
<div class="col">
<h3>Der kan ikke oprettes besøg når der findes rapport for @SelectedDate.ToShortDateString()</h3>
</div>
</div>
} }
else else
{ {

View file

@ -31,23 +31,23 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class ActivityCreateCrmPage : IDisposable public partial class AdvisorCreateActivityPage : IDisposable
{ {
// Parameters // Parameters
[CascadingParameter] DraftStateProvider DraftProvider { get; set; } [CascadingParameter] DraftStateProvider DraftProvider { get; set; }
[Parameter] public string CompanyId { get; set; } [Parameter] public string CompanyId { get; set; }
// Services // Services
[Inject] public ILogger<ActivityCreateCrmPage> Logger { get; set; } [Inject] public ILogger<AdvisorCreateActivityPage> Logger { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public UserProfileService Profiles { get; set; } [Inject] public UserProfileService Profiles { get; set; }
[Inject] public IToastService Toast { get; set; } [Inject] public IToastService Toast { get; set; }
[Inject] public NavigationManager Navigator { get; set; } [Inject] public NavigationManager Navigator { get; set; }
[Inject] public ILocalStorageService Storage { get; set; } [Inject] public ILocalStorageService Storage { get; set; }
[Inject] public ICatalogCrmHttpRepository CatalogCrm { get; set; } [Inject] public IAdvisorCatalogRepository AdvisorCatalogCrm { get; set; }
[Inject] public ICustomerCrmHttpRepository CompanyRepo { get; set; } [Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] public IActivityCrmHttpRepository ActivityRepo { get; set; } [Inject] public IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
[Inject] public IReportHttpRepository ReportRepo { get; set; } [Inject] public IAdvisorReportRepository AdvisorReportRepo { get; set; }
[Inject] public ICustomerHistoryCrmHttpRepository HistoryRepo { get; set; } [Inject] public ICustomerHistoryRepository HistoryRepo { get; set; }
// variables // variables
private readonly JsonSerializerOptions? _options = new() {PropertyNameCaseInsensitive = true}; private readonly JsonSerializerOptions? _options = new() {PropertyNameCaseInsensitive = true};
private SalesItemView SelectedItem { get; set; } = new(); private SalesItemView SelectedItem { get; set; } = new();
@ -136,7 +136,7 @@ public partial class ActivityCreateCrmPage : IDisposable
// Initialize date variable // Initialize date variable
SelectedDate = string.IsNullOrWhiteSpace(UserPrefs.WorkDate) ? DateTime.Now : DateTime.Parse(UserPrefs.WorkDate); SelectedDate = string.IsNullOrWhiteSpace(UserPrefs.WorkDate) ? DateTime.Now : DateTime.Parse(UserPrefs.WorkDate);
// raise flag if report is closed // raise flag if report is closed
ReportClosed = await ReportRepo.ReportExist($"{SelectedDate:yyyy-MM-dd}"); ReportClosed = await AdvisorReportRepo.ReportExist($"{SelectedDate:yyyy-MM-dd}");
// Ask for confirmation of date // Ask for confirmation of date
Logger.LogDebug("Preferences.DateConfirmed => {}", UserPrefs.DateConfirmed); Logger.LogDebug("Preferences.DateConfirmed => {}", UserPrefs.DateConfirmed);
if (!UserPrefs.DateConfirmed) if (!UserPrefs.DateConfirmed)
@ -236,7 +236,7 @@ public partial class ActivityCreateCrmPage : IDisposable
/// <param name="workDate"></param> /// <param name="workDate"></param>
private async Task WorkDateComponentCallback(string workDate) private async Task WorkDateComponentCallback(string workDate)
{ {
ReportClosed = await ReportRepo.ReportExist(workDate); ReportClosed = await AdvisorReportRepo.ReportExist(workDate);
SelectedDate = DateTime.Parse(workDate); SelectedDate = DateTime.Parse(workDate);
Activity.ActivityDate = workDate; Activity.ActivityDate = workDate;
} }
@ -258,7 +258,7 @@ public partial class ActivityCreateCrmPage : IDisposable
// get selected item // get selected item
if (string.IsNullOrWhiteSpace(sku.ItemId)) if (string.IsNullOrWhiteSpace(sku.ItemId))
return; return;
SelectedItem = await CatalogCrm.GetSalesItemId(sku.ItemId); SelectedItem = await AdvisorCatalogCrm.GetSalesItemId(sku.ItemId);
ShowItem = true; ShowItem = true;
Price = sku.Rate; Price = sku.Rate;
Quantity = sku.Quantity; Quantity = sku.Quantity;
@ -361,7 +361,7 @@ public partial class ActivityCreateCrmPage : IDisposable
// debug logging // debug logging
Logger.LogDebug("CrmNewActivityPage => \n {}", JsonSerializer.Serialize(Activity)); Logger.LogDebug("CrmNewActivityPage => \n {}", JsonSerializer.Serialize(Activity));
// post to api // post to api
var result = await ActivityRepo.CreateActivity(Activity); var result = await AdvisorActivityRepo.CreateActivity(Activity);
// debug logging // debug logging
Logger.LogDebug("ApiResponseView => \n {}", JsonSerializer.Serialize(result)); Logger.LogDebug("ApiResponseView => \n {}", JsonSerializer.Serialize(result));
// show result message // show result message

View file

@ -37,13 +37,13 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages namespace Wonky.Client.Pages
{ {
public partial class CustomerCreateCrmPage : IDisposable public partial class AdvisorCreateCustomerPage : IDisposable
{ {
[Inject] public IToastService Toaster { get; set; } [Inject] public IToastService Toaster { get; set; }
[Inject] public ILogger<CustomerCreateCrmPage> Logger { get; set; } [Inject] public ILogger<AdvisorCreateCustomerPage> Logger { get; set; }
[Inject] public ILocalStorageService Storage { get; set; } [Inject] public ILocalStorageService Storage { get; set; }
[Inject] public NavigationManager Navigator { get; set; } [Inject] public NavigationManager Navigator { get; set; }
[Inject] public ICustomerCrmHttpRepository CompanyRepo { get; set; } [Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public VatInfoLookupService VatService { get; set; } [Inject] public VatInfoLookupService VatService { get; set; }
private EditContext CompanyContext { get; set; } private EditContext CompanyContext { get; set; }

View file

@ -17,8 +17,8 @@
@using Wonky.Client.Components @using Wonky.Client.Components
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@page "/companies/{CompanyId}/activities"
@attribute [Authorize(Roles = "Advisor")] @attribute [Authorize(Roles = "Advisor")]
@page "/companies/{CompanyId}/activities"
@if (!string.IsNullOrWhiteSpace(Company.Name)) @if (!string.IsNullOrWhiteSpace(Company.Name))
{ {

View file

@ -25,12 +25,12 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class ActivityListCustomerPage : IDisposable public partial class AdvisorCustomerActivityListPage : IDisposable
{ {
[Parameter] public string CompanyId { get; set; } = ""; [Parameter] public string CompanyId { get; set; } = "";
[Inject] public HttpInterceptorService _interceptor { get; set; } [Inject] public HttpInterceptorService _interceptor { get; set; }
[Inject] public IActivityCrmHttpRepository ActivityRepo { get; set; } [Inject] public IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
[Inject] public ICustomerCrmHttpRepository CompanyRepo { get; set; } [Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
private List<ReportItemView> Activities { get; set; } = new(); private List<ReportItemView> Activities { get; set; } = new();
private CompanyDto Company { get; set; } = new(); private CompanyDto Company { get; set; } = new();
private bool Working { get; set; } = true; private bool Working { get; set; } = true;
@ -48,7 +48,7 @@ public partial class ActivityListCustomerPage : IDisposable
private async Task GetActivities() private async Task GetActivities()
{ {
Working = true; Working = true;
Activities = await ActivityRepo.GetCustomerActivities(CompanyId); Activities = await AdvisorActivityRepo.GetCustomerActivities(CompanyId);
if(Activities.Any()) if(Activities.Any())
Activities = Activities.OrderByDescending(x => x.OrderDate).ToList(); Activities = Activities.OrderByDescending(x => x.OrderDate).ToList();
Working = false; Working = false;

View file

@ -19,6 +19,7 @@
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@page "/companies/{CompanyId}/h/i" @page "/companies/{CompanyId}/h/i"
@attribute [Authorize(Roles = "Advisor")] @attribute [Authorize(Roles = "Advisor")]
<div class="row pt-2 pb-1 rounded-2 bg-dark text-white"> <div class="row pt-2 pb-1 rounded-2 bg-dark text-white">
<div class="col-sm-6"> <div class="col-sm-6">
<h4 class="pt-1">@Company.Name</h4> <h4 class="pt-1">@Company.Name</h4>
@ -30,8 +31,10 @@
<a class="btn btn-primary d-block" href="/companies/@Company.CompanyId/activities/new"><i class="bi-arrow-right"></i> Nyt Besøg</a> <a class="btn btn-primary d-block" href="/companies/@Company.CompanyId/activities/new"><i class="bi-arrow-right"></i> Nyt Besøg</a>
</div> </div>
</div> </div>
<CustomerProductTableComponent CompanyId="@CompanyId" ProductList="Inventory"/>
<CustomerInventoryListComponent OnReorderSelected="OnReorderCallback" CompanyId="@CompanyId" Inventory="@Inventory" />
<InventoryReorderModal OnSelected="@OnSelectedItem" CompanyId="@CompanyId" SalesItem="@SalesItem" @ref="ReorderModal"/>
@if (Working) @if (Working)
{ {

View file

@ -22,25 +22,38 @@ using Microsoft.AspNetCore.Components;
using Wonky.Client.HttpInterceptors; using Wonky.Client.HttpInterceptors;
using Wonky.Client.HttpInterfaces; using Wonky.Client.HttpInterfaces;
using Wonky.Client.HttpRepository; using Wonky.Client.HttpRepository;
using Wonky.Client.Models;
using Wonky.Client.Shared;
using Wonky.Entity.DTO; using Wonky.Entity.DTO;
using Wonky.Entity.Views; using Wonky.Entity.Views;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class CustomerProductListCrmPage : IDisposable public partial class AdvisorCustomerInventoryListPage : IDisposable
{ {
[Parameter] public string CompanyId { get; set; } = ""; [Inject] public ICustomerHistoryRepository HistoryRepo { get; set; }
[Inject] public ICustomerHistoryCrmHttpRepository HistoryRepo { get; set; } [Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] public ICustomerCrmHttpRepository CompanyRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public IToastService Toaster { get; set; } [Inject] public IToastService Toaster { get; set; }
[Inject] public ILogger<CustomerProductListCrmPage> Logger { get; set; } [Inject] public ILogger<AdvisorCustomerInventoryListPage> Logger { get; set; }
[Inject] public ILocalStorageService Storage { get; set; } [Inject] public ILocalStorageService Storage { get; set; }
[Inject] public IAdvisorCatalogRepository AdvisorCatalogRepo { get; set; }
[CascadingParameter] public DraftStateProvider DraftStateProvider { get; set; } = new();
[Parameter] public string CompanyId { get; set; } = "";
private JsonSerializerOptions _options = new JsonSerializerOptions(JsonSerializerDefaults.Web); private JsonSerializerOptions _options = new JsonSerializerOptions(JsonSerializerDefaults.Web);
private CompanyDto Company { get; set; } = new(); private CompanyDto Company { get; set; } = new();
private List<ProductInventoryView> Inventory { get; set; } = new(); private List<ProductInventoryView> Inventory { get; set; } = new();
private bool Working { get; set; } = true; private bool Working { get; set; } = true;
private SalesItemView SalesItem { get; set; } = new();
private string Price { get; set; } = "0";
private string Quantity { get; set; } = "1";
private string Sku { get; set; } = "";
private InventoryReorderModal ReorderModal { get; set; } = new();
private SelectedSku Item { get; set; } = new();
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
Interceptor.RegisterEvent(); Interceptor.RegisterEvent();
@ -50,7 +63,7 @@ public partial class CustomerProductListCrmPage : IDisposable
while (string.IsNullOrWhiteSpace(Company.HistorySync)) while (string.IsNullOrWhiteSpace(Company.HistorySync))
{ {
await Task.Delay(1000); await Task.Delay(500);
} }
var pDate = await Storage.GetItemAsStringAsync($"{Company.CompanyId}-pDate"); var pDate = await Storage.GetItemAsStringAsync($"{Company.CompanyId}-pDate");
@ -69,6 +82,22 @@ public partial class CustomerProductListCrmPage : IDisposable
Working = false; Working = false;
} }
private async Task OnReorderCallback(string sku)
{
// fetch item from http repo
SalesItem = await AdvisorCatalogRepo.GetSalesItemSku(Company.CountryCode.ToLower(), sku);
ReorderModal.Show();
}
private async Task OnSelectedItem(DraftItem draftItem)
{
// add item to order draft
DraftStateProvider.Draft.DraftType = "order";
DraftStateProvider.Draft.Items.Add(draftItem);
// set item checked
await DraftStateProvider.SaveChangesAsync();
}
private async Task<List<ProductInventoryView>> FetchProductInventory() private async Task<List<ProductInventoryView>> FetchProductInventory()
{ {
var storage = await Storage.GetItemAsStringAsync($"{Company.CompanyId}-products"); var storage = await Storage.GetItemAsStringAsync($"{Company.CompanyId}-products");

View file

@ -0,0 +1,42 @@
@*
// 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 Wonky.Client.Components
@using Microsoft.AspNetCore.Authorization
@page "/companies/{CompanyId}/invoices"
@attribute [Authorize(Roles = "Advisor")]
@if (!string.IsNullOrWhiteSpace(Company.Name))
{
<div class="row pt-2 pb-1 rounded-2 bg-dark text-white">
<div class="col-sm-6">
<h4 class="pt-1">@Company.Name</h4>
</div>
<div class="col-sm-3 align-content-end">
<a class="btn btn-primary d-block" href="/companies/@Company.CompanyId"><i class="bi-arrow-right"></i> Kundekort</a>
</div>
<div class="col-sm-3 align-content-end">
<a class="btn btn-primary d-block" href="/companies/@Company.CompanyId/activities/new"><i class="bi-arrow-right"></i> Besøg</a>
</div>
</div>
<CustomerInvoiceListComponent OnShowInvoice="CallInvoiceModal" CompanyId="@CompanyId" InvoiceList="@CompanyInvoices.Invoices"/>
<InvoiceViewModal CompanyId="@CompanyId" InvoiceId="@InvoiceId" @ref="InvoiceView" />
}
@if (Working)
{
<WorkingThreeDots />
}

View file

@ -6,23 +6,26 @@ using Blazored.Toast.Services;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Wonky.Client.HttpInterceptors; using Wonky.Client.HttpInterceptors;
using Wonky.Client.HttpInterfaces; using Wonky.Client.HttpInterfaces;
using Wonky.Client.Shared;
using Wonky.Entity.DTO; using Wonky.Entity.DTO;
using Wonky.Entity.Views; using Wonky.Entity.Views;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class CustomerInvoiceListCrmPage : IDisposable public partial class AdvisorCustomerInvoiceListPage : IDisposable
{ {
[Parameter] public string CompanyId { get; set; } = ""; [Parameter] public string CompanyId { get; set; } = "";
[Inject] public ICustomerCrmHttpRepository CompanyRepo { get; set; } [Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ICustomerHistoryCrmHttpRepository HistoryRepo { get; set; } [Inject] public ICustomerHistoryRepository HistoryRepo { get; set; }
[Inject] public IToastService Toaster { get; set; } [Inject] public IToastService Toaster { get; set; }
[Inject] public ILocalStorageService Storage { get; set; } [Inject] public ILocalStorageService Storage { get; set; }
[Inject] public ILogger<CustomerInvoiceListCrmPage> Logger { get; set; } [Inject] public ILogger<AdvisorCustomerInvoiceListPage> Logger { get; set; }
private InvoiceListView CompanyInvoices { get; set; } = new(); private InvoiceListView CompanyInvoices { get; set; } = new();
private CompanyDto Company { get; set; } = new(); private CompanyDto Company { get; set; } = new();
private bool Working { get; set; } = true; private bool Working { get; set; } = true;
private InvoiceViewModal InvoiceView { get; set; } = new();
private string InvoiceId { get; set; } = "";
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
@ -52,6 +55,12 @@ public partial class CustomerInvoiceListCrmPage : IDisposable
Working = false; Working = false;
} }
private void CallInvoiceModal(string invoiceId)
{
InvoiceId = invoiceId;
InvoiceView.Show();
}
private async Task<InvoiceListView> FetchCompanyInvoices() private async Task<InvoiceListView> FetchCompanyInvoices()
{ {
var storage = await Storage.GetItemAsStringAsync($"{Company.CompanyId}-invoices"); var storage = await Storage.GetItemAsStringAsync($"{Company.CompanyId}-invoices");

View file

@ -15,10 +15,9 @@
// //
*@ *@
@page "/companies"
@using Wonky.Client.Components @using Wonky.Client.Components
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@page "/companies"
@attribute [Authorize(Roles = "Advisor")] @attribute [Authorize(Roles = "Advisor")]
<div class="sticky-top bg-dark text-light rounded-2 px-3"> <div class="sticky-top bg-dark text-light rounded-2 px-3">

View file

@ -28,11 +28,11 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages namespace Wonky.Client.Pages
{ {
public partial class CustomerListCrmPage : IDisposable public partial class AdvisorCustomerListPage : IDisposable
{ {
[Inject] public ILocalStorageService Storage { get; set; } [Inject] public ILocalStorageService Storage { get; set; }
[Inject] public UserProfileService ProfileService { get; set; } [Inject] public UserProfileService ProfileService { get; set; }
[Inject] public ICustomerCrmHttpRepository CompanyRepo { get; set; } [Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public NavigationManager Navigator { get; set; } [Inject] public NavigationManager Navigator { get; set; }
private List<CompanyDto> Companies { get; set; } = new(); private List<CompanyDto> Companies { get; set; } = new();

View file

@ -17,7 +17,7 @@
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@using Wonky.Client.Components @using Wonky.Client.Components
@attribute [Authorize(Roles = "Admin,Advisor,Office,Warehouse")] @attribute [Authorize(Roles = "Admin,Advisor,Warehouse")]
@page "/office/customers/{CompanyId}/orders/{OrderId}" @page "/office/customers/{CompanyId}/orders/{OrderId}"
<table class="table table-sm table-striped d-print-table"> <table class="table table-sm table-striped d-print-table">

View file

@ -30,16 +30,16 @@ using Wonky.Client.Services;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class OfficeOrderViewPage : IDisposable public partial class AdvisorCustomerOrderViewPage : IDisposable
{ {
[Parameter] public string CompanyId { get; set; } = ""; [Parameter] public string CompanyId { get; set; } = "";
[Parameter] public string OrderId { get; set; } = ""; [Parameter] public string OrderId { get; set; } = "";
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public IActivityCrmHttpRepository ActivityRepo { get; set; } [Inject] public IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
[Inject] public ISendMailService MailService { get; set; } [Inject] public ISystemSendMailService MailService { get; set; }
[Inject] public ILocalStorageService Storage { get; set; } [Inject] public ILocalStorageService Storage { get; set; }
[Inject] public IUserHttpRepository UserRepo { get; set; } [Inject] public ISystemUserRepository SystemUserRepo { get; set; }
[Inject] public ILogger<OfficeOrderViewPage> Logger { get; set; } [Inject] public ILogger<AdvisorCustomerOrderViewPage> Logger { get; set; }
[Inject] public IToastService Toast { get; set; } [Inject] public IToastService Toast { get; set; }
private ReportItemView _reportItem { get; set; } = new(); private ReportItemView _reportItem { get; set; } = new();
private bool _isNotified { get; set; } private bool _isNotified { get; set; }
@ -55,7 +55,7 @@ public partial class OfficeOrderViewPage : IDisposable
Interceptor.RegisterEvent(); Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent(); Interceptor.RegisterBeforeSendEvent();
// fetch order from backend // fetch order from backend
_reportItem = await ActivityRepo.GetReportItem(OrderId); _reportItem = await AdvisorActivityRepo.GetReportItem(OrderId);
Logger.LogDebug("ReportItem => \n {}", JsonSerializer.Serialize(_reportItem, _options)); Logger.LogDebug("ReportItem => \n {}", JsonSerializer.Serialize(_reportItem, _options));
Working = false; Working = false;
} }
@ -71,12 +71,12 @@ public partial class OfficeOrderViewPage : IDisposable
Working = true; Working = true;
Logger.LogDebug("GetExpressState => {}", JsonSerializer.Serialize(_reportItem, _options)); Logger.LogDebug("GetExpressState => {}", JsonSerializer.Serialize(_reportItem, _options));
// send request to backend // send request to backend
var responseView = await ActivityRepo.GetExpressState(_reportItem.ActivityId); var responseView = await AdvisorActivityRepo.GetExpressState(_reportItem.ActivityId);
Logger.LogDebug("SetExpressState => responseView <= {} ", JsonSerializer.Serialize(responseView)); Logger.LogDebug("SetExpressState => responseView <= {} ", JsonSerializer.Serialize(responseView));
// get user info from storage // get user info from storage
var user = await Storage.GetItemAsync<UserInfoView>("_xu"); var user = await Storage.GetItemAsync<UserInfoView>("_xu");
// fetch sales rep from response // fetch sales rep from response
var salesRep = await UserRepo.GetAdvisorInfo(responseView.Id); var salesRep = await SystemUserRepo.GetAdvisorInfo(responseView.Id);
Logger.LogDebug("SetExpressState => salesRep => {}", JsonSerializer.Serialize(salesRep)); Logger.LogDebug("SetExpressState => salesRep => {}", JsonSerializer.Serialize(salesRep));
// create email notification body // create email notification body
var body = new StringBuilder(); var body = new StringBuilder();

View file

@ -21,6 +21,7 @@
@attribute [Authorize(Roles = "Advisor")] @attribute [Authorize(Roles = "Advisor")]
@page "/companies/{CompanyId}" @page "/companies/{CompanyId}"
@if (!string.IsNullOrWhiteSpace(Company.Account)) @if (!string.IsNullOrWhiteSpace(Company.Account))
{ {
@if (!string.IsNullOrWhiteSpace(Company.Blocked)) @if (!string.IsNullOrWhiteSpace(Company.Blocked))

View file

@ -31,15 +31,15 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class CustomerViewCrmPage : IDisposable public partial class AdvisorCustomerViewPage : IDisposable
{ {
[Parameter] public string CompanyId { get; set; } = ""; [Parameter] public string CompanyId { get; set; } = "";
[Inject] public IToastService Toaster { get; set; } [Inject] public IToastService Toaster { get; set; }
[Inject] public ILogger<CustomerViewCrmPage> Logger { get; set; } [Inject] public ILogger<AdvisorCustomerViewPage> Logger { get; set; }
[Inject] public NavigationManager Navigator { get; set; } [Inject] public NavigationManager Navigator { get; set; }
[Inject] public ICustomerCrmHttpRepository CompanyRepo { get; set; } [Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] public ICustomerHistoryCrmHttpRepository HistoryRepo { get; set; } [Inject] public ICustomerHistoryRepository HistoryRepo { get; set; }
[Inject] public IContactCrmHttpRepository ContactRepo { get; set; } [Inject] public IAdvisorContactRepository AdvisorContactRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public VatInfoLookupService VatService { get; set; } [Inject] public VatInfoLookupService VatService { get; set; }
[Inject] public ILocalStorageService Storage { get; set; } [Inject] public ILocalStorageService Storage { get; set; }
@ -150,7 +150,7 @@ public partial class CustomerViewCrmPage : IDisposable
private async Task FetchContacts(string companyId) private async Task FetchContacts(string companyId)
{ {
// load contacts // load contacts
Contacts = await ContactRepo.GetContacts(companyId); Contacts = await AdvisorContactRepo.GetContacts(companyId);
if(Contacts.Any() && Contacts.Count > 1) if(Contacts.Any() && Contacts.Count > 1)
Contacts = Contacts.OrderBy(x => x.FirstName).ToList(); Contacts = Contacts.OrderBy(x => x.FirstName).ToList();
} }
@ -216,14 +216,14 @@ public partial class CustomerViewCrmPage : IDisposable
// new contact created // new contact created
Logger.LogDebug("create => {}", jsonContact); Logger.LogDebug("create => {}", jsonContact);
// send post request to backend // send post request to backend
await ContactRepo.CreateContact(contact); await AdvisorContactRepo.CreateContact(contact);
} }
else else
{ {
// contact modified // contact modified
Logger.LogDebug("update => {}", jsonContact); Logger.LogDebug("update => {}", jsonContact);
// send put request to backend // send put request to backend
await ContactRepo.UpdateContact(contact); await AdvisorContactRepo.UpdateContact(contact);
} }
// reset selected contact // reset selected contact
SelectedContact = new ContactDto(); SelectedContact = new ContactDto();
@ -241,7 +241,7 @@ public partial class CustomerViewCrmPage : IDisposable
Working = true; Working = true;
Logger.LogDebug("delete {}", contactId); Logger.LogDebug("delete {}", contactId);
// send delete request to backend // send delete request to backend
await ContactRepo.DeleteContact(CompanyId, contactId); await AdvisorContactRepo.DeleteContact(CompanyId, contactId);
// reset selected contact // reset selected contact
SelectedContact = new ContactDto(); SelectedContact = new ContactDto();
// reload contacts from backend // reload contacts from backend

View file

@ -13,11 +13,11 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class QuoteListCrmPage : IDisposable public partial class AdvisorQuoteListPage : IDisposable
{ {
[Inject] public IActivityCrmHttpRepository ActivityRepo { get; set; } [Inject] public IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ILogger<QuoteListCrmPage> Logger { get; set; } [Inject] public ILogger<AdvisorQuoteListPage> Logger { get; set; }
[Inject] public IToastService Toaster { get; set; } [Inject] public IToastService Toaster { get; set; }
[Inject] public ILocalStorageService Storage { get; set; } [Inject] public ILocalStorageService Storage { get; set; }
private List<ReportItemView> Quotes { get; set; } = new(); private List<ReportItemView> Quotes { get; set; } = new();
@ -29,7 +29,7 @@ public partial class QuoteListCrmPage : IDisposable
{ {
Interceptor.RegisterEvent(); Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent(); Interceptor.RegisterBeforeSendEvent();
Quotes = await ActivityRepo.GetQuotes(); Quotes = await AdvisorActivityRepo.GetQuotes();
await Storage.SetItemAsync("quotes", Quotes.OrderBy(x => x.Company.Name)); await Storage.SetItemAsync("quotes", Quotes.OrderBy(x => x.Company.Name));
if (Quotes.Any()) if (Quotes.Any())
await FilterQuotes(QFilter); await FilterQuotes(QFilter);
@ -57,12 +57,12 @@ public partial class QuoteListCrmPage : IDisposable
if (args.Status == QStatus.Win) if (args.Status == QStatus.Win)
quote.OrderDate = $"{DateTime.Now:yyyy-MM-dd}"; quote.OrderDate = $"{DateTime.Now:yyyy-MM-dd}";
quote.QuoteStatusEnum = Utils.EnumToString(args.Status); quote.QuoteStatusEnum = Utils.EnumToString(args.Status);
var response = await ActivityRepo.UpdateQuoteStatus(quote); var response = await AdvisorActivityRepo.UpdateQuoteStatus(quote);
Toaster.ShowInfo($"{response.Message}", $"HTTP STATUS {response.Code}"); Toaster.ShowInfo($"{response.Message}", $"HTTP STATUS {response.Code}");
Quotes = new List<ReportItemView>(); Quotes = new List<ReportItemView>();
await Storage.RemoveItemAsync("quotes"); await Storage.RemoveItemAsync("quotes");
Quotes = await ActivityRepo.GetQuotes(); Quotes = await AdvisorActivityRepo.GetQuotes();
while (!Quotes.Any()) while (!Quotes.Any())
await Task.Delay(1000); await Task.Delay(1000);

View file

@ -27,14 +27,14 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class ReportCreateCrmPage : IDisposable public partial class AdvisorReportCreatePage : IDisposable
{ {
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public UserProfileService ProfileService { get; set; } [Inject] public UserProfileService ProfileService { get; set; }
[Inject] public IActivityCrmHttpRepository ActivityRepo { get; set; } [Inject] public IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
[Inject] public IReportHttpRepository ReportRepo { get; set; } [Inject] public IAdvisorReportRepository AdvisorReportRepo { get; set; }
[Inject] public NavigationManager Navigator { get; set; } [Inject] public NavigationManager Navigator { get; set; }
[Inject] public ILogger<ReportCreateCrmPage> Logger { get; set; } [Inject] public ILogger<AdvisorReportCreatePage> Logger { get; set; }
[Inject] public IToastService Toaster { get; set; } [Inject] public IToastService Toaster { get; set; }
private EditContext ReportContext { get; set; } private EditContext ReportContext { get; set; }
private ReportDto Report { get; set; } = new(); private ReportDto Report { get; set; } = new();
@ -130,7 +130,7 @@ public partial class ReportCreateCrmPage : IDisposable
return; return;
Working = true; Working = true;
var result = await ReportRepo.CreateReport($"{_workDate:yyyy-MM-dd}", Report); var result = await AdvisorReportRepo.CreateReport($"{_workDate:yyyy-MM-dd}", Report);
Toaster.ShowInfo($"{result.Message}", $"HTTP Status"); Toaster.ShowInfo($"{result.Message}", $"HTTP Status");
// reset km and date confirmation // reset km and date confirmation
@ -250,7 +250,7 @@ public partial class ReportCreateCrmPage : IDisposable
InitialValues = new ReportFiguresDto(); InitialValues = new ReportFiguresDto();
Activities = new List<ReportItemView>(); Activities = new List<ReportItemView>();
var data = await ReportRepo.InitializeReportData($"{_workDate:yyyy-MM-dd}"); var data = await AdvisorReportRepo.InitializeReportData($"{_workDate:yyyy-MM-dd}");
if(data.ReportClosed) if(data.ReportClosed)
Navigator.NavigateTo($"/sales-reports/view/{_workDate:yyyy-MM-dd}"); Navigator.NavigateTo($"/sales-reports/view/{_workDate:yyyy-MM-dd}");

View file

@ -21,10 +21,10 @@
@page "/sales-reports" @page "/sales-reports"
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header bg-dark text-white">
<h3>Rapport Arkiv</h3> <h3>Rapport Arkiv</h3>
</div> </div>
<ReportTableCrmComponent ReportList="ReportList" OnShowReport="ShowThisReport"/> <ReportListComponent ReportList="ReportList" OnShowReport="ShowThisReport"/>
</div> </div>

View file

@ -22,12 +22,12 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class ReportListCrmPage : IDisposable public partial class AdvisorReportListPage : IDisposable
{ {
[Inject] public IReportHttpRepository ReportRepo { get; set; } [Inject] public IAdvisorReportRepository AdvisorReportRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public NavigationManager Navigator { get; set; } [Inject] public NavigationManager Navigator { get; set; }
[Inject] public ILogger<ReportListCrmPage> Logger { get; set; } [Inject] public ILogger<AdvisorReportListPage> Logger { get; set; }
private List<SalesReportListView> ReportList { get; set; } = new(); private List<SalesReportListView> ReportList { get; set; } = new();
private bool Working { get; set; } = true; private bool Working { get; set; } = true;
@ -37,7 +37,7 @@ public partial class ReportListCrmPage : IDisposable
Interceptor.RegisterEvent(); Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent(); Interceptor.RegisterBeforeSendEvent();
ReportList = await ReportRepo.GetReports(); ReportList = await AdvisorReportRepo.GetReports();
if (ReportList.Any()) if (ReportList.Any())
ReportList = ReportList.OrderByDescending(x => x.ReportDate).ToList(); ReportList = ReportList.OrderByDescending(x => x.ReportDate).ToList();

View file

@ -23,14 +23,14 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class ReportViewCrmPage : IDisposable public partial class AdvisorReportViewPage : IDisposable
{ {
[Parameter] public string ReportDate { get; set; } [Parameter] public string ReportDate { get; set; }
[Inject] public IReportHttpRepository ReportRepo { get; set; } [Inject] public IAdvisorReportRepository AdvisorReportRepo { get; set; }
[Inject] public NavigationManager Navigator { get; set; } [Inject] public NavigationManager Navigator { get; set; }
[Inject] public ILocalStorageService Storage { get; set; } [Inject] public ILocalStorageService Storage { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ILogger<ReportViewCrmPage> Logger { get; set; } [Inject] public ILogger<AdvisorReportViewPage> Logger { get; set; }
[Inject] public UserProfileService ProfileService { get; set; } [Inject] public UserProfileService ProfileService { get; set; }
private UserPref Prefs { get; set; } = new(); private UserPref Prefs { get; set; } = new();
@ -101,7 +101,7 @@ public partial class ReportViewCrmPage : IDisposable
Working = true; Working = true;
// fetch report // fetch report
Report = await ReportRepo.GetReport(workDate); Report = await AdvisorReportRepo.GetReport(workDate);
// extract activities // extract activities
Activities = Report.ReportItems.Where(x => x.Lines.Any()).ToList(); Activities = Report.ReportItems.Where(x => x.Lines.Any()).ToList();

View file

@ -25,13 +25,13 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class TaskItemListCrmPage : IDisposable public partial class AdvisorTaskItemListCrmPage : IDisposable
{ {
[Inject] public UserProfileService UserProfileService { get; set; } [Inject] public UserProfileService UserProfileService { get; set; }
[Inject] public ILogger<TaskItemListCrmPage> Logger { get; set; } [Inject] public ILogger<AdvisorTaskItemListCrmPage> Logger { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public NavigationManager Navigator { get; set; } [Inject] public NavigationManager Navigator { get; set; }
[Inject] public ITaskItemCrmHttpRepository TaskRepo { get; set; } [Inject] public IAdvisorTaskItemRepository AdvisorTaskRepo { get; set; }
[Inject] public IToastService Toaster { get; set; } [Inject] public IToastService Toaster { get; set; }
private UserPref Prefs { get; set; } = new(); private UserPref Prefs { get; set; } = new();
private string WorkDate { get; set; } = $"{DateTime.Now:yyyy-MM-dd}"; private string WorkDate { get; set; } = $"{DateTime.Now:yyyy-MM-dd}";
@ -55,7 +55,7 @@ public partial class TaskItemListCrmPage : IDisposable
{ {
Working = true; Working = true;
Toaster.ShowInfo("Vent nogle sekunder for data"); Toaster.ShowInfo("Vent nogle sekunder for data");
TaskItems = await TaskRepo.GetTaskList(workDate); TaskItems = await AdvisorTaskRepo.GetTaskList(workDate);
Toaster.ClearAll(); Toaster.ClearAll();
Working = false; Working = false;

View file

@ -24,11 +24,11 @@ using Wonky.Entity.DTO;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class TaskItemViewCrmPage : IDisposable public partial class AdvisorTaskItemViewCrmPage : IDisposable
{ {
[Parameter] public string TaskItemId { get; set; } [Parameter] public string TaskItemId { get; set; }
[Inject] public HttpInterceptorService _interceptor { get; set; } [Inject] public HttpInterceptorService _interceptor { get; set; }
[Inject] public ITaskItemCrmHttpRepository TaskRepo { get; set; } [Inject] public IAdvisorTaskItemRepository AdvisorTaskRepo { get; set; }
private TaskItemDto _taskItem = new (); private TaskItemDto _taskItem = new ();
private EditContext _editContext { get; set; } private EditContext _editContext { get; set; }
private bool Working { get; set; } = true; private bool Working { get; set; } = true;
@ -39,7 +39,7 @@ public partial class TaskItemViewCrmPage : IDisposable
_interceptor.RegisterEvent(); _interceptor.RegisterEvent();
_interceptor.RegisterBeforeSendEvent(); _interceptor.RegisterBeforeSendEvent();
_taskItem = await TaskRepo.GetTaskItem(TaskItemId); _taskItem = await AdvisorTaskRepo.GetTaskItem(TaskItemId);
Console.WriteLine(JsonSerializer.Serialize(_taskItem)); Console.WriteLine(JsonSerializer.Serialize(_taskItem));
Working = false; Working = false;
} }

View file

@ -40,7 +40,7 @@
</div> </div>
@if (ReportStatusView.ReportItems.Any()) @if (ReportStatusView.ReportItems.Any())
{ {
<ActivityTableCrmComponent ActivityList="ReportStatusView.ReportItems"/> <ActivityListComponent ActivityList="ReportStatusView.ReportItems"/>
} }
@if (Working) @if (Working)
{ {

View file

@ -25,14 +25,14 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages; namespace Wonky.Client.Pages;
public partial class ActivityListTodayCrmPage : IDisposable public partial class AdvisorTodayActivityListPage : IDisposable
{ {
[Inject] public UserProfileService UserProfileService { get; set; } [Inject] public UserProfileService UserProfileService { get; set; }
[Inject] public ILogger<ActivityListTodayCrmPage> Logger { get; set; } [Inject] public ILogger<AdvisorTodayActivityListPage> Logger { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public NavigationManager Navigator { get; set; } [Inject] public NavigationManager Navigator { get; set; }
[Inject] public IActivityCrmHttpRepository ActivityRepo { get; set; } [Inject] public IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
[Inject] public IReportHttpRepository ReportRepo { get; set; } [Inject] public IAdvisorReportRepository AdvisorReportRepo { get; set; }
[Inject] public IToastService Toaster { get; set; } [Inject] public IToastService Toaster { get; set; }
private ReportStatusView? ReportStatusView { get; set; } = new(); private ReportStatusView? ReportStatusView { get; set; } = new();
private UserPref UserPref { get; set; } = new(); private UserPref UserPref { get; set; } = new();
@ -46,7 +46,7 @@ public partial class ActivityListTodayCrmPage : IDisposable
Interceptor.RegisterBeforeSendEvent(); Interceptor.RegisterBeforeSendEvent();
UserPref = await UserProfileService.GetPreferences(); UserPref = await UserProfileService.GetPreferences();
SelectedDate = string.IsNullOrWhiteSpace(UserPref.WorkDate) ? DateTime.Now : DateTime.Parse(UserPref.WorkDate); SelectedDate = string.IsNullOrWhiteSpace(UserPref.WorkDate) ? DateTime.Now : DateTime.Parse(UserPref.WorkDate);
ReportExist = await ReportRepo.ReportExist($"{SelectedDate:yyyy-MM-dd}"); ReportExist = await AdvisorReportRepo.ReportExist($"{SelectedDate:yyyy-MM-dd}");
await GetActivities($"{SelectedDate:yyyy-MM-dd}"); await GetActivities($"{SelectedDate:yyyy-MM-dd}");
Working = false; Working = false;
} }
@ -57,8 +57,8 @@ public partial class ActivityListTodayCrmPage : IDisposable
Toaster.ShowInfo("Vent nogle sekunder for data", "HENTER DATA"); Toaster.ShowInfo("Vent nogle sekunder for data", "HENTER DATA");
SelectedDate = DateTime.Parse(workDate); SelectedDate = DateTime.Parse(workDate);
ReportStatusView = new ReportStatusView(); ReportStatusView = new ReportStatusView();
ReportExist = await ReportRepo.ReportExist($"{SelectedDate:yyyy-MM-dd}"); ReportExist = await AdvisorReportRepo.ReportExist($"{SelectedDate:yyyy-MM-dd}");
ReportStatusView = await ActivityRepo.GetActivities($"{SelectedDate:yyyy-MM-dd}"); ReportStatusView = await AdvisorActivityRepo.GetActivities($"{SelectedDate:yyyy-MM-dd}");
Logger.LogDebug("Activities => {}", JsonSerializer.Serialize(ReportStatusView)); Logger.LogDebug("Activities => {}", JsonSerializer.Serialize(ReportStatusView));
Working = false; Working = false;
Toaster.ClearAll(); Toaster.ClearAll();

View file

@ -18,7 +18,7 @@
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@using Wonky.Client.Components @using Wonky.Client.Components
@attribute [Authorize(Roles = "Admin,Office,Warehouse,Advisor")] @attribute [Authorize(Roles = "Admin,Advisor,Warehouse")]
@page "/companies/{CompanyId}/orders/{OrderId}" @page "/companies/{CompanyId}/orders/{OrderId}"
@page "/companies/{CompanyId}/quotes/{OrderId}" @page "/companies/{CompanyId}/quotes/{OrderId}"

Some files were not shown because too many files have changed in this diff Show more