From 8b5af205395aa3edfea55f44ef9b1af3d49d4ff5 Mon Sep 17 00:00:00 2001 From: dibakor Date: Tue, 28 Jul 2026 14:57:24 +0600 Subject: [PATCH] inactive all previous slab based on condition --- .../IntegrationMaterialFreeGoodsRequest.cs | 3 ++ .../Integrations/IntegrationService.cs | 48 +++++++++++++++++-- 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialFreeGoodsRequest.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialFreeGoodsRequest.cs index 9715ef1..13a7754 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialFreeGoodsRequest.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialFreeGoodsRequest.cs @@ -73,4 +73,7 @@ public class GetMaterialFreeGoodsByFilterRequest [Required(ErrorMessage = "MaterialCode is required.")] [StringLength(10, MinimumLength = 1, ErrorMessage = "MaterialCode must be between 1 and 10 characters.")] public string MaterialCode { get; set; } + + public DateTime? ValidFrom { get; set; } + public DateTime? ValidTo { get; set; } } \ No newline at end of file diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/Integrations/IntegrationService.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/Integrations/IntegrationService.cs index cf2c6e9..860369f 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/Integrations/IntegrationService.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/Integrations/IntegrationService.cs @@ -395,13 +395,21 @@ public class IntegrationService : IIntegrationService using TransactionContext tc = await TransactionContext.BeginAsync(_settings.DefaultConnection.ConnectionNode, true); try { + DateTime? fromValid = null; + DateTime? toValid = null; + + if (request.Slabs != null && request.Slabs.Count > 0) + { + fromValid =Convert.ToDateTime( request.Slabs.Max(x => x.ValidFrom)); + toValid = Convert.ToDateTime(request.Slabs.Max(x => x.ValidTo)); + } + IntegrationMaterialFreeGoodsResponse meterialFreeGoods = await GetMaterialFreeGoodsByFilterAsync(tc, new GetMaterialFreeGoodsByFilterRequest() { SalesOrg = request.SalesOrg, DistributionChannel = request.DistributionChannel, - CustomerPriceGroup = request.CustomerPriceGroup,MaterialCode = request.MaterialCode, CustomerNumber = request.CustomerNumber }); + CustomerPriceGroup = request.CustomerPriceGroup,MaterialCode = request.MaterialCode, CustomerNumber = request.CustomerNumber, + ValidFrom = fromValid, ValidTo= toValid}); - if (meterialFreeGoods != null && !string.IsNullOrWhiteSpace(meterialFreeGoods.MaterialCode)) - { - DeleteMaterialFreeGoodsByFilter(tc, + InActiveMaterialFreeGoodsByFilter(tc, new GetMaterialFreeGoodsByFilterRequest() { SalesOrg = request.SalesOrg, @@ -411,6 +419,8 @@ public class IntegrationService : IIntegrationService CustomerNumber = request.CustomerNumber }); + if (meterialFreeGoods != null && !string.IsNullOrWhiteSpace(meterialFreeGoods.MaterialCode)) + { UpdateMaterialFreeGoods(tc, request); response.IsUpdated = true; } @@ -1397,7 +1407,9 @@ public class IntegrationService : IIntegrationService SqlHelperExtension.CreateInParam("@DistributionChannel", SqlDbType.NVarChar, request.DistributionChannel), SqlHelperExtension.CreateInParam("@CustomerNumber", SqlDbType.NVarChar, request.CustomerNumber), SqlHelperExtension.CreateInParam("@CustomerPriceGroup", SqlDbType.NVarChar, request.CustomerPriceGroup), - SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode) + SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode), + SqlHelperExtension.CreateInParam("@ValidFrom", SqlDbType.NVarChar, request.ValidFrom), + SqlHelperExtension.CreateInParam("@ValidTo", SqlDbType.NVarChar, request.ValidTo), ]; using (IDataReader dr = await tc.ExecuteReaderSpAsync("dbo.GetAllMaterialFreeGoodsForUpdate", parameterValues: p)) @@ -1460,6 +1472,32 @@ public class IntegrationService : IIntegrationService return response; } + private bool InActiveMaterialFreeGoodsByFilter( + TransactionContext tc, GetMaterialFreeGoodsByFilterRequest request) + { + bool response = false; + + try + { + SqlParameter[] p = + [ + SqlHelperExtension.CreateInParam("@SalesOrg", SqlDbType.NVarChar, request.SalesOrg), + SqlHelperExtension.CreateInParam("@DistributionChannel", SqlDbType.NVarChar, request.DistributionChannel), + SqlHelperExtension.CreateInParam("@CustomerNumber", SqlDbType.NVarChar, request.CustomerNumber), + SqlHelperExtension.CreateInParam("@CustomerPriceGroup", SqlDbType.NVarChar, request.CustomerPriceGroup), + SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode) + ]; + _ = tc.ExecuteNonQuerySp("dbo.InActiveMaterialFOCByFilter", parameterValues: p); + response = true; + } + catch (Exception ex) + { + throw DBCustomError.GenerateCustomError(ex); + } + + return response; + } + private bool CreateMaterialFreeGoods(TransactionContext tc, IntegrationMaterialFreeGoodsRequest request) { bool response = false;