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;
public partial class ActivityTableCrmComponent
public partial class ActivityListComponent
{
[Parameter] public List<ReportItemView> ActivityList { get; set; } = new();
[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;
public partial class CatalogTableComponent
public partial class CatalogListComponent
{
[Parameter] public List<SalesItemView> ItemList { get; set; } = new();
[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;
public partial class CatalogTablePrintComponent
public partial class CatalogPrintComponent
{
[Parameter] public List<SalesItemView> ItemList { get; set; } = new();
[Parameter] public string CountryName { get; set; } = "";

View file

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

View file

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

View file

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

View file

@ -25,20 +25,15 @@ using Wonky.Entity.Views;
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; }
// 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 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 void SortProducts(PSort column)
@ -49,57 +44,47 @@ public partial class CustomerProductTableComponent
case PSort.Desc:
if (Descending)
{
ProductList = ProductList.OrderByDescending(x => x.Description).ToList();
Inventory = Inventory.OrderByDescending(x => x.Description).ToList();
break;
}
ProductList = ProductList.OrderBy(x => x.Description).ToList();
Inventory = Inventory.OrderBy(x => x.Description).ToList();
break;
case PSort.Sku:
if (Descending)
{
ProductList = ProductList.OrderByDescending(x => x.Sku).ToList();
Inventory = Inventory.OrderByDescending(x => x.Sku).ToList();
break;
}
ProductList = ProductList.OrderBy(x => x.Sku).ToList();
Inventory = Inventory.OrderBy(x => x.Sku).ToList();
break;
case PSort.Qty:
if (Descending)
{
ProductList = ProductList.OrderByDescending(x => x.Quantity).ToList();
Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList();
break;
}
ProductList = ProductList.OrderBy(x => x.Quantity).ToList();
Inventory = Inventory.OrderBy(x => x.Quantity).ToList();
break;
case PSort.None:
break;
case PSort.Abbr:
break;
default:
ProductList = ProductList.OrderByDescending(x => x.Quantity).ToList();
Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList();
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)
{
// fetch item from http repo
SalesItem = await CatalogCrm.GetSalesItemSku(sku);
ReorderModal.Show();
await ProductCheck(sku);
await OnReorderSelected.InvokeAsync(sku);
}
private async Task OnSelectedItem(DraftItem draftItem)
private async Task ProductCheck(string sku)
{
// add item to order draft
DraftStateProvider.Draft.DraftType = "order";
DraftStateProvider.Draft.Items.Add(draftItem);
// set item checked
await ProductCheck(draftItem.Item.Sku);
await DraftStateProvider.SaveChangesAsync();
var x = Inventory.First(x => x.Sku == sku);
x.Check = !x.Check;
await Storage.SetItemAsync($"{CompanyId}-products", Inventory);
}
}

View file

@ -48,5 +48,4 @@
else
{
<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;
public partial class CustomerProductLineTableComponent
public partial class CustomerProductLineListComponent
{
[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 Wonky.Client.Components
<PageTitle>Innotec Admin</PageTitle>
<div class="row">
<div class="col"></div>
<div class="col"></div>
<div class="col"></div>
<div class="col"></div>
<div class="col"></div>
<div class="row g-3">
<div class="col-sm-3">
<div class="card" style="width: 10rem;">
<img src="flag-icons/flags/4x3/dk.svg" alt="Danmark"/>
<div class="card-body">
<a class="btn btn-primary d-block" href="/office/dk">Danmark</a>
</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>

View file

@ -30,14 +30,9 @@ using Wonky.Entity.Models;
using Wonky.Entity.Views;
namespace Wonky.Client.Components;
public partial class LandingComponentAdmin : IDisposable
public partial class LandingComponentAdmin
{
[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
{
@ -46,7 +41,7 @@ public partial class LandingComponentAdmin : IDisposable
};
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}";
@ -54,15 +49,8 @@ public partial class LandingComponentAdmin : IDisposable
{
Prefs = await ProfileService.GetPreferences();
if(!string.IsNullOrWhiteSpace(Prefs.WorkDate))
WordDate = Prefs.WorkDate;
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
WorkDate = Prefs.WorkDate;
}
public void Dispose()
{
Interceptor.DisposeEvent();
}
}

View file

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

View file

@ -30,14 +30,9 @@ using Wonky.Entity.Models;
using Wonky.Entity.Views;
namespace Wonky.Client.Components;
public partial class LandingComponentAdvisor : IDisposable
public partial class LandingComponentAdvisor
{
[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
{
@ -47,59 +42,12 @@ public partial class LandingComponentAdvisor : IDisposable
private UserPref Prefs { get; set; } = new();
private DateTime SelectedDate { get; set; }
private List<TaskItemDto> TaskItems { get; set; } = new();
protected override async Task OnInitializedAsync()
{
Prefs = await ProfileService.GetPreferences();
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>
@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>
@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;
public partial class ReportTableCrmComponent
public partial class ReportListComponent
{
[Parameter] public List<SalesReportListView> ReportList { get; set; } = new();
[Parameter] public EventCallback<string> OnShowReport { get; set; }

View file

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

View file

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

View file

@ -31,10 +31,3 @@ else
{
<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>
/// Interface Activity CRM Http repository
/// </summary>
public interface IActivityCrmHttpRepository
public interface IAdvisorActivityRepository
{
/// <summary>
/// Get a list of open quotes

View file

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

View file

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

View file

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

View file

@ -21,7 +21,7 @@ namespace Wonky.Client.HttpInterfaces;
/// <summary>
/// Interface Report Http repository
/// </summary>
public interface IReportHttpRepository
public interface IAdvisorReportRepository
{
/// <summary>
/// Report Exist for given data (SalesRep)
@ -57,19 +57,4 @@ public interface IReportHttpRepository
/// <param name="reportDto"></param>
/// <returns></returns>
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>
/// Interface for handling CRM Tasks http repository
/// </summary>
public interface ITaskItemCrmHttpRepository
public interface IAdvisorTaskItemRepository
{
/// <summary>
/// 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>
/// Interface for Customer Office Http repository
/// </summary>
public interface ICustomerOfficeHttpRepository
public interface ICountryCustomerRepository
{
/// <summary>
/// Get customers paged for given country
/// </summary>
/// <param name="pagingParameters"></param>
/// <param name="countryCode"></param>
/// <param name="paging"></param>
/// <returns></returns>
Task<PagingResponse<CompanyDto>> GetCompaniesPaged(CustomerPaging pagingParameters, string countryCode);
Task<PagingResponse<CompanyDto>> GetCompaniesPaged(CustomerPaging paging);
/// <summary>
/// Get customers paged for given sales rep
/// </summary>
/// <param name="salesRepId"></param>
/// <param name="pagingParameters"></param>
/// <param name="paging"></param>
/// <returns></returns>
Task<PagingResponse<CompanyDto>> GetCompaniesPagedSalesRep(string salesRepId, CustomerPaging pagingParameters);
Task<PagingResponse<CompanyDto>> GetCompaniesPagedSalesRep(string salesRepId, CustomerPaging paging);
/// <summary>
/// Get customer by Id

View file

@ -22,20 +22,20 @@ namespace Wonky.Client.HttpInterfaces;
/// Interface for Report http repository
/// </summary>
/// <remarks>Possibly duplicated in IReportHttpRepository</remarks>
public interface IReportOfficeHttpRepository
public interface ICountryReportRepository
{
/// <summary>
/// Get reports for given userId
/// Get Reports for given userId (Office)
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
Task<List<SalesReportListView>> GetReports(string userId);
Task<List<SalesReportListView>> GetCountryReports(string userId);
/// <summary>
/// Get report for given userId and workDate
/// Get Report for given userId and workDate (Office)
/// </summary>
/// <param name="userId"></param>
/// <param name="workDate"></param>
/// <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>
/// Interface Customer History CRM Http repository
/// </summary>
public interface ICustomerHistoryCrmHttpRepository
public interface ICustomerHistoryRepository
{
/// <summary>
/// Fetch Invoice LIst

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -25,7 +25,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.HttpRepository;
public class ReportHttpRepository : IReportHttpRepository
public class AdvisorReportRepository : IAdvisorReportRepository
{
private readonly JsonSerializerOptions _options = new JsonSerializerOptions
{
@ -33,12 +33,12 @@ public class ReportHttpRepository : IReportHttpRepository
};
private readonly NavigationManager _navigation;
private ILogger<ReportHttpRepository> _logger;
private ILogger<AdvisorReportRepository> _logger;
private readonly HttpClient _client;
private readonly ApiConfig _apiConfig;
public ReportHttpRepository(HttpClient client,
ILogger<ReportHttpRepository> logger,
public AdvisorReportRepository(HttpClient client,
ILogger<AdvisorReportRepository> logger,
NavigationManager navigation, IOptions<ApiConfig> configuration)
{
_client = client;
@ -111,25 +111,4 @@ public class ReportHttpRepository : IReportHttpRepository
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;
public class TaskItemCrmHttpRepository : ITaskItemCrmHttpRepository
public class AdvisorTaskItemRepository : IAdvisorTaskItemRepository
{
private readonly JsonSerializerOptions _options = new JsonSerializerOptions
{
@ -35,12 +35,12 @@ public class TaskItemCrmHttpRepository : ITaskItemCrmHttpRepository
};
private readonly NavigationManager _navigation;
private ILogger<TaskItemCrmHttpRepository> _logger;
private ILogger<AdvisorTaskItemRepository> _logger;
private readonly HttpClient _client;
private readonly ApiConfig _apiConfig;
public TaskItemCrmHttpRepository(HttpClient client,
ILogger<TaskItemCrmHttpRepository> logger,
public AdvisorTaskItemRepository(HttpClient client,
ILogger<AdvisorTaskItemRepository> logger,
NavigationManager navigation, IOptions<ApiConfig> configuration)
{
_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;
public class CustomerOfficeHttpRepository : ICustomerOfficeHttpRepository
public class CountryCustomerRepository : ICountryCustomerRepository
{
private readonly JsonSerializerOptions _options = new ()
{
@ -42,12 +42,12 @@ public class CustomerOfficeHttpRepository : ICustomerOfficeHttpRepository
};
private readonly NavigationManager _navigator;
private ILogger<CustomerOfficeHttpRepository> _logger;
private ILogger<CountryCustomerRepository> _logger;
private readonly HttpClient _client;
private readonly ApiConfig _api;
public CustomerOfficeHttpRepository(HttpClient client,
ILogger<CustomerOfficeHttpRepository> logger,
public CountryCustomerRepository(HttpClient client,
ILogger<CountryCustomerRepository> logger,
NavigationManager navigator,
IOptions<ApiConfig> apiConfig)
{
@ -60,21 +60,20 @@ public class CustomerOfficeHttpRepository : ICustomerOfficeHttpRepository
/// <summary>
/// Get customers paged for given sales rep
/// </summary>
/// <param name="pagingParameters"></param>
/// <param name="countryCode"></param>
/// <param name="paging"></param>
/// <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>
{
["pageNumber"] = pagingParameters.PageNumber.ToString(),
["pageSize"] = pagingParameters.PageSize.ToString(),
["searchTerm"] = pagingParameters.SearchTerm,
["searchColumn"] = pagingParameters.SearchColumn,
["orderBy"] = pagingParameters.OrderBy,
["isHidden"] = pagingParameters.IsHidden.ToString(),
["hasFolded"] = pagingParameters.HasFolded.ToString(),
["countryCode"] = pagingParameters.CountryCode
["pageNumber"] = paging.PageNumber.ToString(),
["pageSize"] = paging.PageSize.ToString(),
["searchTerm"] = paging.SearchTerm,
["searchColumn"] = paging.SearchColumn,
["orderBy"] = paging.OrderBy,
["isHidden"] = paging.IsHidden.ToString(),
["hasFolded"] = paging.HasFolded.ToString(),
["countryCode"] = paging.CountryCode
};
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
/// </summary>
/// <param name="salesRepId"></param>
/// <param name="pagingParameters"></param>
/// <param name="paging"></param>
/// <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>
{
["pageNumber"] = pagingParameters.PageNumber.ToString(),
["pageSize"] = pagingParameters.PageSize.ToString(),
["searchTerm"] = pagingParameters.SearchTerm,
["searchColumn"] = pagingParameters.SearchColumn,
["orderBy"] = pagingParameters.OrderBy,
["isHidden"] = pagingParameters.IsHidden.ToString(),
["hasFolded"] = pagingParameters.HasFolded.ToString(),
["countryCode"] = pagingParameters.CountryCode
["pageNumber"] = paging.PageNumber.ToString(),
["pageSize"] = paging.PageSize.ToString(),
["searchTerm"] = paging.SearchTerm,
["searchColumn"] = paging.SearchColumn,
["orderBy"] = paging.OrderBy,
["isHidden"] = paging.IsHidden.ToString(),
["hasFolded"] = paging.HasFolded.ToString(),
["countryCode"] = paging.CountryCode
};
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;
public class CustomerHistoryCrmHttpRepository : ICustomerHistoryCrmHttpRepository
public class CustomerHistoryRepository : ICustomerHistoryRepository
{
private readonly JsonSerializerOptions _options = new JsonSerializerOptions
{
@ -33,12 +33,12 @@ public class CustomerHistoryCrmHttpRepository : ICustomerHistoryCrmHttpRepositor
};
private readonly NavigationManager _navigation;
private ILogger<CustomerHistoryCrmHttpRepository> _logger;
private ILogger<CustomerHistoryRepository> _logger;
private readonly HttpClient _client;
private readonly ApiConfig _api;
public CustomerHistoryCrmHttpRepository(
HttpClient client, ILogger<CustomerHistoryCrmHttpRepository> logger,
public CustomerHistoryRepository(
HttpClient client, ILogger<CustomerHistoryRepository> logger,
NavigationManager navigation, IOptions<ApiConfig> configuration)
{
_client = client;

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -23,13 +23,13 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages;
public partial class ReportListOfficePage : IDisposable
public partial class AdminReportListPage : IDisposable
{
[Parameter] public string UserId { 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 IUserHttpRepository UserRepo { get; set; }
[Inject] public ISystemUserRepository SystemUserRepo { get; set; }
[Inject] public NavigationManager Navigator { get; set; }
private List<SalesReportListView> ActivityReports { get; set; } = new();
private bool Working { get; set; } = true;
@ -43,15 +43,22 @@ public partial class ReportListOfficePage : IDisposable
Interceptor.RegisterEvent();
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);
if (reports.Any())
ActivityReports = reports.OrderByDescending(x => x.ReportDate).ToList();
Working = false;
}
protected override void OnInitialized()
{
Working = false;
}
/// <summary>
/// Callback to shoe the report
/// </summary>

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -15,10 +15,10 @@
//
*@
@page "/companies/{CompanyId}/activities/new"
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize(Roles = "Advisor")]
@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="col">
@ -40,7 +40,12 @@
@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
{

View file

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

View file

@ -37,13 +37,13 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages
{
public partial class CustomerCreateCrmPage : IDisposable
public partial class AdvisorCreateCustomerPage : IDisposable
{
[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 NavigationManager Navigator { get; set; }
[Inject] public ICustomerCrmHttpRepository CompanyRepo { get; set; }
[Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public VatInfoLookupService VatService { get; set; }
private EditContext CompanyContext { get; set; }

View file

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

View file

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

View file

@ -19,6 +19,7 @@
@using Microsoft.AspNetCore.Authorization
@page "/companies/{CompanyId}/h/i"
@attribute [Authorize(Roles = "Advisor")]
<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>
@ -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>
</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)
{

View file

@ -22,25 +22,38 @@ using Microsoft.AspNetCore.Components;
using Wonky.Client.HttpInterceptors;
using Wonky.Client.HttpInterfaces;
using Wonky.Client.HttpRepository;
using Wonky.Client.Models;
using Wonky.Client.Shared;
using Wonky.Entity.DTO;
using Wonky.Entity.Views;
namespace Wonky.Client.Pages;
public partial class CustomerProductListCrmPage : IDisposable
public partial class AdvisorCustomerInventoryListPage : IDisposable
{
[Parameter] public string CompanyId { get; set; } = "";
[Inject] public ICustomerHistoryCrmHttpRepository HistoryRepo { get; set; }
[Inject] public ICustomerCrmHttpRepository CompanyRepo { get; set; }
[Inject] public ICustomerHistoryRepository HistoryRepo { get; set; }
[Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { 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 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 CompanyDto Company { get; set; } = new();
private List<ProductInventoryView> Inventory { get; set; } = new();
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()
{
Interceptor.RegisterEvent();
@ -50,7 +63,7 @@ public partial class CustomerProductListCrmPage : IDisposable
while (string.IsNullOrWhiteSpace(Company.HistorySync))
{
await Task.Delay(1000);
await Task.Delay(500);
}
var pDate = await Storage.GetItemAsStringAsync($"{Company.CompanyId}-pDate");
@ -68,6 +81,22 @@ public partial class CustomerProductListCrmPage : IDisposable
Logger.LogDebug("CustomerProductListCrmPage => Inventory <= {}", JsonSerializer.Serialize(Inventory, _options));
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()
{

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 Wonky.Client.HttpInterceptors;
using Wonky.Client.HttpInterfaces;
using Wonky.Client.Shared;
using Wonky.Entity.DTO;
using Wonky.Entity.Views;
namespace Wonky.Client.Pages;
public partial class CustomerInvoiceListCrmPage : IDisposable
public partial class AdvisorCustomerInvoiceListPage : IDisposable
{
[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 ICustomerHistoryCrmHttpRepository HistoryRepo { get; set; }
[Inject] public ICustomerHistoryRepository HistoryRepo { get; set; }
[Inject] public IToastService Toaster { 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 CompanyDto Company { get; set; } = new();
private bool Working { get; set; } = true;
private InvoiceViewModal InvoiceView { get; set; } = new();
private string InvoiceId { get; set; } = "";
protected override async Task OnInitializedAsync()
{
@ -52,6 +55,12 @@ public partial class CustomerInvoiceListCrmPage : IDisposable
Working = false;
}
private void CallInvoiceModal(string invoiceId)
{
InvoiceId = invoiceId;
InvoiceView.Show();
}
private async Task<InvoiceListView> FetchCompanyInvoices()
{
var storage = await Storage.GetItemAsStringAsync($"{Company.CompanyId}-invoices");

View file

@ -15,10 +15,9 @@
//
*@
@page "/companies"
@using Wonky.Client.Components
@using Microsoft.AspNetCore.Authorization
@page "/companies"
@attribute [Authorize(Roles = "Advisor")]
<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
{
public partial class CustomerListCrmPage : IDisposable
public partial class AdvisorCustomerListPage : IDisposable
{
[Inject] public ILocalStorageService Storage { 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 NavigationManager Navigator { get; set; }
private List<CompanyDto> Companies { get; set; } = new();

View file

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

View file

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

View file

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

View file

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

View file

@ -13,11 +13,11 @@ using Wonky.Entity.Views;
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 ILogger<QuoteListCrmPage> Logger { get; set; }
[Inject] public ILogger<AdvisorQuoteListPage> Logger { get; set; }
[Inject] public IToastService Toaster { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
private List<ReportItemView> Quotes { get; set; } = new();
@ -29,7 +29,7 @@ public partial class QuoteListCrmPage : IDisposable
{
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
Quotes = await ActivityRepo.GetQuotes();
Quotes = await AdvisorActivityRepo.GetQuotes();
await Storage.SetItemAsync("quotes", Quotes.OrderBy(x => x.Company.Name));
if (Quotes.Any())
await FilterQuotes(QFilter);
@ -57,12 +57,12 @@ public partial class QuoteListCrmPage : IDisposable
if (args.Status == QStatus.Win)
quote.OrderDate = $"{DateTime.Now:yyyy-MM-dd}";
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}");
Quotes = new List<ReportItemView>();
await Storage.RemoveItemAsync("quotes");
Quotes = await ActivityRepo.GetQuotes();
Quotes = await AdvisorActivityRepo.GetQuotes();
while (!Quotes.Any())
await Task.Delay(1000);

View file

@ -27,14 +27,14 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages;
public partial class ReportCreateCrmPage : IDisposable
public partial class AdvisorReportCreatePage : IDisposable
{
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public UserProfileService ProfileService { get; set; }
[Inject] public IActivityCrmHttpRepository ActivityRepo { get; set; }
[Inject] public IReportHttpRepository ReportRepo { get; set; }
[Inject] public IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
[Inject] public IAdvisorReportRepository AdvisorReportRepo { 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; }
private EditContext ReportContext { get; set; }
private ReportDto Report { get; set; } = new();
@ -130,7 +130,7 @@ public partial class ReportCreateCrmPage : IDisposable
return;
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");
// reset km and date confirmation
@ -250,7 +250,7 @@ public partial class ReportCreateCrmPage : IDisposable
InitialValues = new ReportFiguresDto();
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)
Navigator.NavigateTo($"/sales-reports/view/{_workDate:yyyy-MM-dd}");

View file

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

View file

@ -22,12 +22,12 @@ using Wonky.Entity.Views;
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 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 bool Working { get; set; } = true;
@ -37,7 +37,7 @@ public partial class ReportListCrmPage : IDisposable
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
ReportList = await ReportRepo.GetReports();
ReportList = await AdvisorReportRepo.GetReports();
if (ReportList.Any())
ReportList = ReportList.OrderByDescending(x => x.ReportDate).ToList();

View file

@ -23,14 +23,14 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages;
public partial class ReportViewCrmPage : IDisposable
public partial class AdvisorReportViewPage : IDisposable
{
[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 ILocalStorageService Storage { 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; }
private UserPref Prefs { get; set; } = new();
@ -101,7 +101,7 @@ public partial class ReportViewCrmPage : IDisposable
Working = true;
// fetch report
Report = await ReportRepo.GetReport(workDate);
Report = await AdvisorReportRepo.GetReport(workDate);
// extract activities
Activities = Report.ReportItems.Where(x => x.Lines.Any()).ToList();

View file

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

View file

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

View file

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

View file

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

View file

@ -18,7 +18,7 @@
@using Microsoft.AspNetCore.Authorization
@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}/quotes/{OrderId}"

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