Compare commits

1 Commits

Author SHA1 Message Date
a08ec285f6 * Introduced ItemQuantityMapper
All checks were successful
ci/woodpecker/push/push_to_repo Pipeline was successful
* Added functionality to add, distract, multiply and divide quantity for specific items in specific numbers
2026-03-18 06:14:42 +01:00
6 changed files with 104 additions and 0 deletions

View File

@@ -4,6 +4,7 @@ using DelforSenders.Models;
using DelforSenders.Services;
using FaKrosnoEfDataModel.Dtos;
using SytelineSaAppEfDataModel.Dtos;
using Action = DelforSenders.Enums.Action;
namespace DelforSenders.Core;
@@ -32,6 +33,7 @@ public class App(IAppService service, IClientFactory clientFactory, IValidator v
IList<ItemMapperModel> itemMappers = service.GetItemMappers();
IList<OrderMapperModel> orderMappers = service.GetOrderMappers();
IList<CustomerMapperModel> customerMappers = service.GetCustomerMappers();
IList<ItemQuantityMapper> itemQuantityMappers = service.GetItemQuantityMappers();
IList<EdiCustomerOrderDto> ediCustomerOrders = new List<EdiCustomerOrderDto>();
IEnumerable<ScheduleOrderDto> scheduleOrders = await service.GetScheduleOrders(lastUpdateDate.Value);
@@ -43,6 +45,7 @@ public class App(IAppService service, IClientFactory clientFactory, IValidator v
{
logger.LogInfo($"{scheduleOrder.ID} - Rozpoczęcie procesowania zamówienia");
MapItemQuantityIfNeeded(scheduleOrder, itemQuantityMappers);
MapItemNumberIfNeeded(scheduleOrder, itemMappers);
MapOrderNumberIfNeeded(scheduleOrder, orderMappers);
@@ -203,6 +206,66 @@ public class App(IAppService service, IClientFactory clientFactory, IValidator v
return false;
}
private static void MapItemQuantityIfNeeded(ScheduleOrderDto scheduleOrder,
IList<ItemQuantityMapper> itemQuantityMappers)
{
if (itemQuantityMappers.All(x => x.OrderNumber != scheduleOrder.PONum)) return;
foreach (ScheduleOrderDetailDto scheduleOrderDetail in scheduleOrder.ScheduleOrderDetails)
{
if (itemQuantityMappers.FirstOrDefault(x =>
x.Item == scheduleOrderDetail.Sh_productCode && x.OrderNumber == scheduleOrder.PONum) is
{ } mapper)
{
switch (mapper.Action)
{
case Action.Add:
{
foreach (ScheduleOrderDetailDetailDto scheduleOrderDetailDetailDto in scheduleOrderDetail
.ScheduleOrderDetailDetails)
{
scheduleOrderDetailDetailDto.Qty += mapper.Modifier;
}
break;
}
case Action.Distract:
{
foreach (ScheduleOrderDetailDetailDto scheduleOrderDetailDetailDto in scheduleOrderDetail
.ScheduleOrderDetailDetails)
{
scheduleOrderDetailDetailDto.Qty -= mapper.Modifier;
}
break;
}
case Action.Multiply:
{
foreach (ScheduleOrderDetailDetailDto scheduleOrderDetailDetailDto in scheduleOrderDetail
.ScheduleOrderDetailDetails)
{
scheduleOrderDetailDetailDto.Qty *= mapper.Modifier;
}
break;
}
case Action.Divide:
{
foreach (ScheduleOrderDetailDetailDto scheduleOrderDetailDetailDto in scheduleOrderDetail
.ScheduleOrderDetailDetails)
{
scheduleOrderDetailDetailDto.Qty /= mapper.Modifier;
}
break;
}
default:
throw new ArgumentOutOfRangeException();
}
}
}
}
private static void MapItemNumberIfNeeded(ScheduleOrderDto scheduleOrder, IList<ItemMapperModel> itemMappers)
{
foreach (ScheduleOrderDetailDto scheduleOrderDetail in scheduleOrder.ScheduleOrderDetails)

View File

@@ -0,0 +1,9 @@
namespace DelforSenders.Enums;
public enum Action
{
Add,
Distract,
Multiply,
Divide
}

View File

@@ -0,0 +1,5 @@
using Action = DelforSenders.Enums.Action;
namespace DelforSenders.Models;
public record ItemQuantityMapper(string OrderNumber,string Item, Action Action, int Modifier);

View File

@@ -158,6 +158,14 @@ public class AppService(IRestClient restClient, IConfiguration configuration, IE
return customerMappers;
}
public IList<ItemQuantityMapper> GetItemQuantityMappers()
{
var itemQuantityMappers = configuration.GetSection("ItemQuantityMAppers").Get<List<ItemQuantityMapper>>() ??
new List<ItemQuantityMapper>();
return itemQuantityMappers;
}
public async Task GenerateAndSendEmail()
{

View File

@@ -15,6 +15,7 @@ public interface IAppService
IList<ItemMapperModel> GetItemMappers();
IList<OrderMapperModel> GetOrderMappers();
IList<CustomerMapperModel> GetCustomerMappers();
IList<ItemQuantityMapper> GetItemQuantityMappers();
Task<bool> SaveOrders(IList<EdiCustomerOrderDto> ediCustomerOrders);
Task<bool> SaveEdiCustomerOrderImport(IList<EdiCustomerOrderImportDto> ediCustomerOrderImports);
Task<bool> SaveLog(EdiLogDto ediLog);

View File

@@ -41,6 +41,16 @@
"OrderNumber": "0092190784",
"Recipient": 27,
"NewOrderNumber": "92190784"
},
{
"OrderNumber": "000098459753",
"Recipient": 37,
"NewOrderNumber": "98459753"
},
{
"OrderNumber": "0092188648",
"Recipient": 27,
"NewOrderNumber": "92188648"
}
],
"CustomerMappers": [
@@ -51,6 +61,14 @@
"CustomerSequenceNumber": 1
}
],
"ItemQuantityMappers": [
{
"OrderNumber": "000098459753",
"Item": "FA33590.97A",
"Action": "Multiply",
"Modifier": 100
}
],
"Customers": [
{
"TpCode": "000254206547900919",