confirmation dialog for office printing orders - set process accepted
This commit is contained in:
parent
7a99f8c6b1
commit
d9f4e71470
11 changed files with 85 additions and 30 deletions
|
@ -13,6 +13,7 @@
|
|||
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
|
||||
//
|
||||
|
||||
using Wonky.Entity.DTO;
|
||||
using Wonky.Entity.Views;
|
||||
|
||||
namespace Wonky.Client.HttpInterfaces;
|
||||
|
@ -20,7 +21,7 @@ namespace Wonky.Client.HttpInterfaces;
|
|||
/// <summary>
|
||||
/// Interface for processing orders in warehouse
|
||||
/// </summary>
|
||||
public interface IWarehouseRepository
|
||||
public interface IOrderProcessRepository
|
||||
{
|
||||
/// <summary>
|
||||
/// Get warehouse order list by date
|
||||
|
@ -47,7 +48,7 @@ public interface IWarehouseRepository
|
|||
/// <summary>
|
||||
/// Update Order status setting new process status
|
||||
/// </summary>
|
||||
/// <param name="process"></param>
|
||||
/// <param name="processState"></param>
|
||||
/// <returns></returns>
|
||||
Task UpdateWarehouseOrderStatus(WarehouseProcess process);
|
||||
Task UpdateWarehouseOrderStatus(OrderProcessState processState);
|
||||
}
|
|
@ -19,11 +19,12 @@ 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 WarehouseRepository : IWarehouseRepository
|
||||
public class OrderProcessRepository : IOrderProcessRepository
|
||||
{
|
||||
private readonly JsonSerializerOptions? _options = new JsonSerializerOptions
|
||||
{
|
||||
|
@ -31,12 +32,12 @@ public class WarehouseRepository : IWarehouseRepository
|
|||
};
|
||||
|
||||
private readonly NavigationManager _navigation;
|
||||
private ILogger<WarehouseRepository> _logger;
|
||||
private ILogger<OrderProcessRepository> _logger;
|
||||
private readonly HttpClient _client;
|
||||
private readonly ApiConfig _api;
|
||||
|
||||
public WarehouseRepository(HttpClient client,
|
||||
ILogger<WarehouseRepository> logger,
|
||||
public OrderProcessRepository(HttpClient client,
|
||||
ILogger<OrderProcessRepository> logger,
|
||||
NavigationManager navigation,
|
||||
IOptions<ApiConfig> configuration)
|
||||
{
|
||||
|
@ -81,11 +82,11 @@ public class WarehouseRepository : IWarehouseRepository
|
|||
/// <summary>
|
||||
/// Update Order status setting new process status
|
||||
/// </summary>
|
||||
/// <param name="process"></param>
|
||||
/// <param name="processState"></param>
|
||||
/// <returns></returns>
|
||||
public async Task UpdateWarehouseOrderStatus(WarehouseProcess process)
|
||||
public async Task UpdateWarehouseOrderStatus(OrderProcessState processState)
|
||||
{
|
||||
_logger.LogDebug("process => {}", JsonSerializer.Serialize(process, _options));
|
||||
await _client.PutAsJsonAsync($"{_api.Warehouse}/{process.OrderId}", process, _options);
|
||||
_logger.LogDebug("process => {}", JsonSerializer.Serialize(processState, _options));
|
||||
await _client.PutAsJsonAsync($"{_api.Warehouse}/{processState.OrderId}", processState, _options);
|
||||
}
|
||||
}
|
|
@ -7,5 +7,6 @@ public enum PStatus
|
|||
Packed,
|
||||
Shipped,
|
||||
All,
|
||||
Express
|
||||
Express,
|
||||
Accepted
|
||||
}
|
|
@ -25,6 +25,9 @@
|
|||
<a class="btn btn-info" href="@ReturnUrl"><i class="bi-back"></i> Tilbage</a>
|
||||
</div>
|
||||
<div class="col-sm-6 d-grid">
|
||||
<AuthorizeView Roles="Admin,Office">
|
||||
<button class="btn btn-primary" type="button" @onclick="ShowConfirmationModal"><i class="bi-printer"></i> Udskriv</button>
|
||||
</AuthorizeView>
|
||||
<button class="btn btn-primary" type="button" @onclick="Print"><i class="bi-printer"></i> Udskriv</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -44,3 +47,5 @@ else
|
|||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
<ConfirmationModal BodyMessage="@BodyMessage" OnOkClicked="OnOkCallBack" OnCancelClicked="OnCancelCallback" />
|
|
@ -17,6 +17,10 @@ using Blazored.LocalStorage;
|
|||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.JSInterop;
|
||||
using Wonky.Client.Helpers;
|
||||
using Wonky.Client.HttpInterfaces;
|
||||
using Wonky.Client.Models;
|
||||
using Wonky.Client.Shared;
|
||||
using Wonky.Entity.DTO;
|
||||
using Wonky.Entity.Views;
|
||||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
@ -28,12 +32,15 @@ public partial class ReportPrintOrderPage
|
|||
[Parameter] public string ReportDate { get; set; } = "";
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
[Inject] public IOrderProcessRepository ProcessRepo { get; set; }
|
||||
[Inject] private IJSRuntime JSRuntime { get; set; }
|
||||
[Inject] public ILogger<ReportPrintOrderPage> Logger { get; set; }
|
||||
private ReportView Report { get; set; } = new();
|
||||
private List<ReportItemView> Items { get; set; } = new();
|
||||
private IJSObjectReference JsModule { get; set; }
|
||||
private string ReturnUrl { get; set; } = "";
|
||||
private ConfirmationModal ConfirmAccepted { get; set; }
|
||||
private string BodyMessage { get; set; } = "";
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
if (firstRender)
|
||||
|
@ -53,6 +60,31 @@ public partial class ReportPrintOrderPage
|
|||
Items = Report.ReportItems;
|
||||
}
|
||||
|
||||
private void ShowConfirmationModal()
|
||||
{
|
||||
BodyMessage = "<p>Vil du sætte ordrestatus til accepteret i CRM?</p><p>Dette sikrer at ordrelisten kun udskrives en gang.</p>";
|
||||
ConfirmAccepted.Show();
|
||||
}
|
||||
|
||||
private async Task OnOkCallBack()
|
||||
{
|
||||
foreach (var process in Report.ReportItems.Select(item => new OrderProcessState
|
||||
{
|
||||
OrderId = item.ActivityId,
|
||||
ProcessStatusEnum = Utils.EnumToString(PStatus.Accepted)
|
||||
}))
|
||||
{
|
||||
await ProcessRepo.UpdateWarehouseOrderStatus(process);
|
||||
}
|
||||
|
||||
await Print();
|
||||
}
|
||||
|
||||
private async Task OnCancelCallback()
|
||||
{
|
||||
await Print();
|
||||
}
|
||||
|
||||
private async Task Print()
|
||||
{
|
||||
await JsModule.InvokeVoidAsync("printInvoke");
|
||||
|
|
|
@ -3,6 +3,7 @@ using Wonky.Client.Helpers;
|
|||
using Wonky.Client.HttpInterceptors;
|
||||
using Wonky.Client.HttpInterfaces;
|
||||
using Wonky.Client.Models;
|
||||
using Wonky.Entity.DTO;
|
||||
using Wonky.Entity.Views;
|
||||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
@ -12,7 +13,7 @@ public partial class WarehouseOrderListPage : IDisposable
|
|||
[Parameter] public string Status { get; set; } = "none";
|
||||
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public IWarehouseRepository WarehouseRepo { get; set; }
|
||||
[Inject] public IOrderProcessRepository OrderProcessRepo { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
private List<WarehouseOrderView> OrderList { get; set; }
|
||||
private bool Working { get; set; } = true;
|
||||
|
@ -66,12 +67,12 @@ public partial class WarehouseOrderListPage : IDisposable
|
|||
Working = true;
|
||||
var order = OrderList.First(x => x.OrderId == orderId);
|
||||
order.ProcessStatusEnum = "packed";
|
||||
var process = new WarehouseProcess
|
||||
var process = new OrderProcessState
|
||||
{
|
||||
OrderId = order.OrderId,
|
||||
ProcessStatusEnum = "packed"
|
||||
};
|
||||
await WarehouseRepo.UpdateWarehouseOrderStatus(process);
|
||||
await OrderProcessRepo.UpdateWarehouseOrderStatus(process);
|
||||
OrderList.Remove(order);
|
||||
Working = false;
|
||||
}
|
||||
|
@ -84,12 +85,12 @@ public partial class WarehouseOrderListPage : IDisposable
|
|||
foreach (var order in OrderList.Where(order => order.ProcessStatusEnum.ToLower() == "packed"))
|
||||
{
|
||||
order.ProcessStatusEnum = "shipped";
|
||||
var process = new WarehouseProcess
|
||||
var process = new OrderProcessState
|
||||
{
|
||||
OrderId = order.OrderId,
|
||||
ProcessStatusEnum = "shipped"
|
||||
};
|
||||
await WarehouseRepo.UpdateWarehouseOrderStatus(process);
|
||||
await OrderProcessRepo.UpdateWarehouseOrderStatus(process);
|
||||
}
|
||||
Working = false;
|
||||
}
|
||||
|
@ -97,7 +98,7 @@ public partial class WarehouseOrderListPage : IDisposable
|
|||
private async Task<List<WarehouseOrderView>> FetchOrders(string status)
|
||||
{
|
||||
Working = true;
|
||||
var orderList = await WarehouseRepo.GetWarehouseOrderListByStatus(status.ToLower());
|
||||
var orderList = await OrderProcessRepo.GetWarehouseOrderListByStatus(status.ToLower());
|
||||
if(orderList.Any(x => x.Express))
|
||||
orderList = orderList.OrderByDescending(x => x.Express).ToList();
|
||||
Working = false;
|
||||
|
|
|
@ -21,6 +21,7 @@ using Microsoft.AspNetCore.Components;
|
|||
using Wonky.Client.HttpInterceptors;
|
||||
using Wonky.Client.HttpInterfaces;
|
||||
using Wonky.Client.HttpRepository;
|
||||
using Wonky.Entity.DTO;
|
||||
using Wonky.Entity.Views;
|
||||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
@ -29,7 +30,7 @@ public partial class WarehouseOrderViewPage : IDisposable
|
|||
{
|
||||
[Parameter] public string OrderId { get; set; } = "";
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public IWarehouseRepository WarehouseRepo { get; set; }
|
||||
[Inject] public IOrderProcessRepository OrderProcessRepo { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
[Inject] public IToastService Toast { get; set; }
|
||||
[Inject] public ILogger<WarehouseOrderViewPage> Logger { get; set; }
|
||||
|
@ -42,7 +43,7 @@ public partial class WarehouseOrderViewPage : IDisposable
|
|||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
if (!string.IsNullOrWhiteSpace(OrderId))
|
||||
Order = await WarehouseRepo.GetWarehouseOrder(OrderId);
|
||||
Order = await OrderProcessRepo.GetWarehouseOrder(OrderId);
|
||||
|
||||
Logger.LogDebug("Warehouse OrderView =>\n{}", JsonSerializer.Serialize(Order));
|
||||
Working = false;
|
||||
|
@ -54,12 +55,12 @@ public partial class WarehouseOrderViewPage : IDisposable
|
|||
return;
|
||||
|
||||
Working = true;
|
||||
var process = new WarehouseProcess
|
||||
var process = new OrderProcessState
|
||||
{
|
||||
OrderId = Order.OrderId,
|
||||
ProcessStatusEnum = "picked"
|
||||
};
|
||||
await WarehouseRepo.UpdateWarehouseOrderStatus(process);
|
||||
await OrderProcessRepo.UpdateWarehouseOrderStatus(process);
|
||||
Navigator.NavigateTo("/warehouse/orders/none");
|
||||
}
|
||||
|
||||
|
@ -68,12 +69,12 @@ public partial class WarehouseOrderViewPage : IDisposable
|
|||
if (Working)
|
||||
return;
|
||||
Working = true;
|
||||
var process = new WarehouseProcess
|
||||
var process = new OrderProcessState
|
||||
{
|
||||
OrderId = Order.OrderId,
|
||||
ProcessStatusEnum = "packed"
|
||||
};
|
||||
await WarehouseRepo.UpdateWarehouseOrderStatus(process);
|
||||
await OrderProcessRepo.UpdateWarehouseOrderStatus(process);
|
||||
Navigator.NavigateTo("/warehouse/orders/picked");
|
||||
}
|
||||
|
||||
|
@ -82,12 +83,12 @@ public partial class WarehouseOrderViewPage : IDisposable
|
|||
if (Working)
|
||||
return;
|
||||
Working = true;
|
||||
var process = new WarehouseProcess
|
||||
var process = new OrderProcessState
|
||||
{
|
||||
OrderId = Order.OrderId,
|
||||
ProcessStatusEnum = "shipped"
|
||||
};
|
||||
await WarehouseRepo.UpdateWarehouseOrderStatus(process);
|
||||
await OrderProcessRepo.UpdateWarehouseOrderStatus(process);
|
||||
Navigator.NavigateTo("/warehouse/orders/none");
|
||||
}
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ builder.Services.AddScoped<ICountryCustomerRepository, CountryCustomerRepository
|
|||
builder.Services.AddScoped<ICountryReportRepository, CountryReportRepository>();
|
||||
builder.Services.AddScoped<ISystemUserRepository, SystemUserRepository>();
|
||||
// warehouse repository
|
||||
builder.Services.AddScoped<IWarehouseRepository, WarehouseRepository>();
|
||||
builder.Services.AddScoped<IOrderProcessRepository, OrderProcessRepository>();
|
||||
// mail service
|
||||
builder.Services.AddScoped<ISystemSendMailService, SystemSendMailService>();
|
||||
// interceptor
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" @onclick="Hide">Afbryd</button>
|
||||
<button type="button" class="btn btn-primary" data-bs-dismiss="modal" @onclick="() => OnOkClicked.InvokeAsync()">OK</button>
|
||||
<button type="button" class="btn btn-primary" data-bs-dismiss="modal" @onclick="OkSelected">OK</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -23,6 +23,19 @@ public partial class ConfirmationModal
|
|||
private bool _showBackdrop;
|
||||
[Parameter] public string BodyMessage { get; set; } = "";
|
||||
[Parameter] public EventCallback OnOkClicked { get; set; }
|
||||
[Parameter] public EventCallback? OnCancelClicked { get; set; }
|
||||
|
||||
private void OkSelected()
|
||||
{
|
||||
OnOkClicked.InvokeAsync();
|
||||
Hide();
|
||||
}
|
||||
|
||||
private void CancelSelected()
|
||||
{
|
||||
OnCancelClicked?.InvokeAsync();
|
||||
Hide();
|
||||
}
|
||||
|
||||
public void Show()
|
||||
{
|
||||
|
|
|
@ -14,9 +14,9 @@
|
|||
//
|
||||
|
||||
|
||||
namespace Wonky.Entity.Views;
|
||||
namespace Wonky.Entity.DTO;
|
||||
|
||||
public class WarehouseProcess
|
||||
public class OrderProcessState
|
||||
{
|
||||
/// <summary>
|
||||
/// Entity id
|
Loading…
Reference in a new issue