diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationInvoiceRequest.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationInvoiceRequest.cs index 7dfae46..87ac634 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationInvoiceRequest.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationInvoiceRequest.cs @@ -10,7 +10,7 @@ public class IntegrationBillingDocumentRequest { [Required(ErrorMessage = "Invoice/Billing document number is required.")] [StringLength(50, ErrorMessage = "Invoice/Billing document number cannot exceed 50 characters.")] - public string InvoiceBillingDocumentNumber { get; set; } = string.Empty; + public string BillingDocumentNumber { get; set; } = string.Empty; [Required(ErrorMessage = "Billing date is required.")] [DataType(DataType.Date)] diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialFreeGoodsRequest.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialFreeGoodsRequest.cs index 9ee11c8..775803b 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialFreeGoodsRequest.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialFreeGoodsRequest.cs @@ -1,17 +1,22 @@ using System; +using System.Collections; +using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace OnlineSalesAutoCrop.CoreAPI.Models.Requests.Integrations; public class IntegrationMaterialFreeGoodsRequest { - + public IntegrationMaterialFreeGoodsRequest() + { + Slabs = new List(); + } [Required(ErrorMessage = "SalesOrg is required.")] - [StringLength(4, MinimumLength = 1, ErrorMessage = "SalesOrg must be between 1 and 4 characters.")] + [StringLength(10, MinimumLength = 1, ErrorMessage = "SalesOrg must be between 1 and 10 characters.")] public string SalesOrg { get; set; } [Required(ErrorMessage = "DistributionChannel is required.")] - [StringLength(2, MinimumLength = 1, ErrorMessage = "DistributionChannel must be between 1 and 2 characters.")] + [StringLength(5, MinimumLength = 1, ErrorMessage = "DistributionChannel must be between 1 and 5 characters.")] public string DistributionChannel { get; set; } [StringLength(13, MinimumLength = 1, ErrorMessage = "CustomerNumber must be between 1 and 13 characters.")] @@ -20,29 +25,27 @@ public class IntegrationMaterialFreeGoodsRequest [StringLength(2, MinimumLength = 1, ErrorMessage = "CustomerPriceGroup must be between 1 and 2 characters.")] public string? CustomerPriceGroup { get; set; } - [Required(ErrorMessage = "MaterialCode is required.")] [StringLength(10, MinimumLength = 1, ErrorMessage = "MaterialCode must be between 1 and 10 characters.")] - public string MaterialCode { get; set; } + public string? MaterialCode { get; set; } + public IList Slabs { get; set; } +} - [Required(ErrorMessage = "MinOrderQuantity is required.")] +public class IntegrationMaterialFreeGoodItemRequest +{ [Range(0.001, 9999999999999.999, ErrorMessage = "MinOrderQuantity must be greater than 0.")] - public decimal MinOrderQuantity { get; set; } + public decimal? MinOrderQuantity { get; set; } - [Required(ErrorMessage = "ForQuantity is required.")] [Range(0.001, 9999999999999.999, ErrorMessage = "ForQuantity must be greater than 0.")] - public decimal ForQuantity { get; set; } + public decimal? ForQuantity { get; set; } - [Required(ErrorMessage = "UnitOfMeasure is required.")] [StringLength(3, MinimumLength = 1, ErrorMessage = "UnitOfMeasure must be between 1 and 3 characters.")] - public string UnitOfMeasure { get; set; } + public string? UnitOfMeasure { get; set; } - [Required(ErrorMessage = "FreeQuantity is required.")] [Range(0.001, 9999999999999.999, ErrorMessage = "FreeQuantity must be greater than 0.")] - public decimal FreeQuantity { get; set; } + public decimal? FreeQuantity { get; set; } - [Required(ErrorMessage = "FocUnitOfMeasure is required.")] [StringLength(3, MinimumLength = 1, ErrorMessage = "FocUnitOfMeasure must be between 1 and 3 characters.")] - public string FocUnitOfMeasure { get; set; } + public string? FocUnitOfMeasure { get; set; } [Required(ErrorMessage = "ValidFrom is required.")] public DateOnly ValidFrom { get; set; } @@ -54,7 +57,6 @@ public class IntegrationMaterialFreeGoodsRequest public string? Status { get; set; } // NULL = Active, X = Inactive } - public class GetMaterialFreeGoodsByFilterRequest { [Required(ErrorMessage = "SalesOrg is required.")] diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialPriceRequest.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialPriceRequest.cs index bee8cc3..be4acf9 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialPriceRequest.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialPriceRequest.cs @@ -88,4 +88,7 @@ public class GetMaterialPriceByCodeRequest [StringLength(10, ErrorMessage = "Customer Group Code cannot exceed 10 characters.")] public string? CustomerGroupCode { get; set; } + + [StringLength(10, ErrorMessage = "Distributor Channel Code cannot exceed 10 characters.")] + public string? DistributorChannelCode { 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 0d58943..1b7ff1f 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/Integrations/IntegrationService.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/Integrations/IntegrationService.cs @@ -290,10 +290,21 @@ public class IntegrationService : IIntegrationService { IntegrationMaterialPriceResponse meterialPrice = await GetMaterialPriceByCodeAndConditionTypeAsync(tc, new GetMaterialPriceByCodeRequest() { MaterialCode = request.MaterialCode, ConditionType = request.ConditionType, - SalesOrg=request.SalesOrg, CustomerNumber = request.CustomerNumber,CustomerGroupCode = request.CustomerGroupCode }); + SalesOrg=request.SalesOrg, CustomerNumber = request.CustomerNumber,CustomerGroupCode = request.CustomerGroupCode, + DistributorChannelCode = request.DistributionChannel}); if (meterialPrice != null && !string.IsNullOrWhiteSpace(meterialPrice.MaterialCode)) { + DeleteMaterialPriceByCodeAndConditionType(tc, + new GetMaterialPriceByCodeRequest() + { + MaterialCode = request.MaterialCode, + ConditionType = request.ConditionType, + SalesOrg = request.SalesOrg, + CustomerNumber = request.CustomerNumber, + CustomerGroupCode = request.CustomerGroupCode, + DistributorChannelCode = request.DistributionChannel + }); UpdateMaterialPrice(tc, request); response.IsUpdated = true; } @@ -363,6 +374,16 @@ public class IntegrationService : IIntegrationService if (meterialFreeGoods != null && !string.IsNullOrWhiteSpace(meterialFreeGoods.MaterialCode)) { + DeleteMaterialFreeGoodsByFilter(tc, + new GetMaterialFreeGoodsByFilterRequest() + { + SalesOrg = request.SalesOrg, + DistributionChannel = request.DistributionChannel, + CustomerPriceGroup = request.CustomerPriceGroup, + MaterialCode = request.MaterialCode, + CustomerNumber = request.CustomerNumber + }); + UpdateMaterialFreeGoods(tc, request); response.IsUpdated = true; } @@ -1129,7 +1150,8 @@ public class IntegrationService : IIntegrationService SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode), SqlHelperExtension.CreateInParam("@ConditionType", SqlDbType.NVarChar, request.ConditionType), SqlHelperExtension.CreateInParam("@CustomerNumber", SqlDbType.NVarChar, string.IsNullOrWhiteSpace(request.CustomerNumber)? null : request.CustomerNumber ), - SqlHelperExtension.CreateInParam("@CustomerGroup", SqlDbType.NVarChar, string.IsNullOrWhiteSpace(request.CustomerGroupCode)? null : request.CustomerGroupCode ) + SqlHelperExtension.CreateInParam("@CustomerGroup", SqlDbType.NVarChar, string.IsNullOrWhiteSpace(request.CustomerGroupCode)? null : request.CustomerGroupCode ), + SqlHelperExtension.CreateInParam("@DistributorChannelCode", SqlDbType.NVarChar, string.IsNullOrWhiteSpace(request.DistributorChannelCode)? null : request.DistributorChannelCode ) ]; using (IDataReader dr = await tc.ExecuteReaderSpAsync("dbo.GetMaterialPriceByMaterialCodeAndConditionType", parameterValues: p)) @@ -1165,46 +1187,60 @@ public class IntegrationService : IIntegrationService return response; } - private bool CreateMaterialPrice(TransactionContext tc, IntegrationMaterialPriceRequest request) + private bool DeleteMaterialPriceByCodeAndConditionType(TransactionContext tc, GetMaterialPriceByCodeRequest request) { bool response = false; - DataTable dtSlabs = new DataTable(); - dtSlabs.Columns.Add("ScaleValue", typeof(decimal)); - dtSlabs.Columns.Add("ValidFrom", typeof(DateTime)); - dtSlabs.Columns.Add("ValidTo", typeof(DateTime)); - dtSlabs.Columns.Add("Status", typeof(bool)); - dtSlabs.Columns.Add("ConditionValue", typeof(decimal)); - - foreach (var item in request.Slabs) - { - DataRow dr = dtSlabs.NewRow(); - dr["ScaleQty"] = item.ScaleValue; - dr["ValidFrom"] = item.ValidFrom; - dr["ValidTo"] = item.ValidTo; - dr["Status"] = item.Status; - dr["ConditionValue"] = item.ConditionValue; - dtSlabs.Rows.Add(dr); - } - 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("@CustomerGroupCode", SqlDbType.NVarChar, request.CustomerGroupCode), - SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode), - SqlHelperExtension.CreateInParam("@ConditionType", SqlDbType.NVarChar, request.ConditionType), - SqlHelperExtension.CreateInParam("@CalculationType", SqlDbType.NVarChar, request.CalculationType), - SqlHelperExtension.CreateInParam("@PricingUnit", SqlDbType.NVarChar, request.PricingUnit), - SqlHelperExtension.CreateInParam("@UnitOfMeasure", SqlDbType.NVarChar, request.UnitOfMeasure), - SqlHelperExtension.CreateInParam("@DiscountSlabItemType",SqlDbType.Structured, dtSlabs), + SqlHelperExtension.CreateInParam("@SalesOrg", SqlDbType.NVarChar, request.SalesOrg), + SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode), + SqlHelperExtension.CreateInParam("@ConditionType", SqlDbType.NVarChar, request.ConditionType), + SqlHelperExtension.CreateInParam("@CustomerNumber", SqlDbType.NVarChar, string.IsNullOrWhiteSpace(request.CustomerNumber)? null : request.CustomerNumber ), + SqlHelperExtension.CreateInParam("@CustomerGroup", SqlDbType.NVarChar, string.IsNullOrWhiteSpace(request.CustomerGroupCode)? null : request.CustomerGroupCode ), + SqlHelperExtension.CreateInParam("@DistributorChannelCode", SqlDbType.NVarChar, string.IsNullOrWhiteSpace(request.DistributorChannelCode)? null : request.DistributorChannelCode ) ]; - _ = tc.ExecuteNonQuerySp(spName: "dbo.InsertIntegrationMaterialPrice", parameterValues: p); + _ = tc.ExecuteNonQuerySp("dbo.DeleteMaterialPriceByMaterialCodeAndConditionType", parameterValues: p); + } + catch (Exception ex) + { + throw DBCustomError.GenerateCustomError(ex); + } + return response; + } + + private bool CreateMaterialPrice(TransactionContext tc, IntegrationMaterialPriceRequest request) + { + bool response = false; + + try + { + foreach (var item in request.Slabs) + { + 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("@CustomerGroupCode", SqlDbType.NVarChar, request.CustomerGroupCode), + SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode), + SqlHelperExtension.CreateInParam("@ConditionType", SqlDbType.NVarChar, request.ConditionType), + SqlHelperExtension.CreateInParam("@CalculationType", SqlDbType.NVarChar, request.CalculationType), + SqlHelperExtension.CreateInParam("@PricingUnit", SqlDbType.NVarChar, request.PricingUnit), + SqlHelperExtension.CreateInParam("@UnitOfMeasure", SqlDbType.NVarChar, request.UnitOfMeasure), + SqlHelperExtension.CreateInParam("@ScaleValue", SqlDbType.NVarChar, item.ScaleValue), + SqlHelperExtension.CreateInParam("@ValidFrom", SqlDbType.DateTime, item.ValidFrom), + SqlHelperExtension.CreateInParam("@ValidTo", SqlDbType.DateTime, item.ValidTo), + SqlHelperExtension.CreateInParam("@Status", SqlDbType.NVarChar, item.Status), + SqlHelperExtension.CreateInParam("@ConditionValue", SqlDbType.Decimal, item.ConditionValue) + ]; + + _ = tc.ExecuteNonQuerySp(spName: "dbo.InsertIntegrationMaterialPrice", parameterValues: p); + } response = true; } catch (Exception) @@ -1219,28 +1255,30 @@ public class IntegrationService : IIntegrationService { bool returnValue = false; - - try { - SqlParameter[] p = - [ - SqlHelperExtension.CreateInParam("@SalesOrg", SqlDbType.NVarChar, request.SalesOrg), - SqlHelperExtension.CreateInParam("@DistributionChannel", SqlDbType.NVarChar, request.DistributionChannel), - SqlHelperExtension.CreateInParam("@CustomerNumber", SqlDbType.NVarChar, string.IsNullOrWhiteSpace(request.CustomerNumber) ? null : request.CustomerNumber), - SqlHelperExtension.CreateInParam("@CustomerGroupCode", SqlDbType.NVarChar, request.CustomerGroupCode), - SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode), - SqlHelperExtension.CreateInParam("@ConditionType", SqlDbType.NVarChar, request.ConditionType), - SqlHelperExtension.CreateInParam("@CalculationType", SqlDbType.NVarChar, request.CalculationType), - SqlHelperExtension.CreateInParam("@PricingUnit", SqlDbType.NVarChar, request.PricingUnit), - SqlHelperExtension.CreateInParam("@UnitOfMeasure", SqlDbType.NVarChar, request.UnitOfMeasure), - //SqlHelperExtension.CreateInParam("@ValidFrom", SqlDbType.DateTime, request.ValidFrom), - //SqlHelperExtension.CreateInParam("@ValidTo", SqlDbType.DateTime, request.ValidTo), - //SqlHelperExtension.CreateInParam("@Status", SqlDbType.NVarChar, request.Status), - //SqlHelperExtension.CreateInParam("@ConditionValue", SqlDbType.Decimal, request.ConditionValue) - ]; + foreach (var item in request.Slabs) + { + 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("@CustomerGroupCode", SqlDbType.NVarChar, request.CustomerGroupCode), + SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode), + SqlHelperExtension.CreateInParam("@ConditionType", SqlDbType.NVarChar, request.ConditionType), + SqlHelperExtension.CreateInParam("@CalculationType", SqlDbType.NVarChar, request.CalculationType), + SqlHelperExtension.CreateInParam("@PricingUnit", SqlDbType.NVarChar, request.PricingUnit), + SqlHelperExtension.CreateInParam("@UnitOfMeasure", SqlDbType.NVarChar, request.UnitOfMeasure), + SqlHelperExtension.CreateInParam("@ScaleValue", SqlDbType.NVarChar, item.ScaleValue), + SqlHelperExtension.CreateInParam("@ValidFrom", SqlDbType.DateTime, item.ValidFrom), + SqlHelperExtension.CreateInParam("@ValidTo", SqlDbType.DateTime, item.ValidTo), + SqlHelperExtension.CreateInParam("@Status", SqlDbType.NVarChar, item.Status), + SqlHelperExtension.CreateInParam("@ConditionValue", SqlDbType.Decimal, item.ConditionValue) + ]; - _ = tc.ExecuteNonQuerySp(spName: "dbo.UpdateIntegrationMaterialPrice", parameterValues: p); + _ = tc.ExecuteNonQuerySp(spName: "dbo.UpdateIntegrationMaterialPrice", parameterValues: p); + } returnValue = true; } @@ -1306,7 +1344,9 @@ public class IntegrationService : IIntegrationService return response; } - private bool CreateMaterialFreeGoods(TransactionContext tc, IntegrationMaterialFreeGoodsRequest request) + + private bool DeleteMaterialFreeGoodsByFilter( + TransactionContext tc, GetMaterialFreeGoodsByFilterRequest request) { bool response = false; @@ -1316,20 +1356,49 @@ public class IntegrationService : IIntegrationService [ SqlHelperExtension.CreateInParam("@SalesOrg", SqlDbType.NVarChar, request.SalesOrg), SqlHelperExtension.CreateInParam("@DistributionChannel", SqlDbType.NVarChar, request.DistributionChannel), - SqlHelperExtension.CreateInParam("@CustomerNumber", SqlDbType.NVarChar, (object?)request.CustomerNumber ?? DBNull.Value), + SqlHelperExtension.CreateInParam("@CustomerNumber", SqlDbType.NVarChar, request.CustomerNumber), SqlHelperExtension.CreateInParam("@CustomerPriceGroup", SqlDbType.NVarChar, request.CustomerPriceGroup), - SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode), - SqlHelperExtension.CreateInParam("@MinOrderQuantity", SqlDbType.Decimal, request.MinOrderQuantity), - SqlHelperExtension.CreateInParam("@ForQuantity", SqlDbType.Decimal, request.ForQuantity), - SqlHelperExtension.CreateInParam("@UnitOfMeasure", SqlDbType.NVarChar, request.UnitOfMeasure), - SqlHelperExtension.CreateInParam("@FreeQuantity", SqlDbType.Decimal, request.FreeQuantity), - SqlHelperExtension.CreateInParam("@FocUnitOfMeasure", SqlDbType.NVarChar, request.FocUnitOfMeasure), - SqlHelperExtension.CreateInParam("@ValidFrom", SqlDbType.Date, request.ValidFrom), - SqlHelperExtension.CreateInParam("@ValidTo", SqlDbType.Date, request.ValidTo), - SqlHelperExtension.CreateInParam("@Status", SqlDbType.NVarChar, (object?)request.Status ?? DBNull.Value), + SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode) ]; + _ = tc.ExecuteNonQuerySp("dbo.DeleteMaterialFOCByFilter", parameterValues: p); + response = true; + } + catch (Exception ex) + { + throw DBCustomError.GenerateCustomError(ex); + } + + return response; + } + + private bool CreateMaterialFreeGoods(TransactionContext tc, IntegrationMaterialFreeGoodsRequest request) + { + bool response = false; + + try + { + foreach (var item in request.Slabs) + { + 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), + SqlHelperExtension.CreateInParam("@MinOrderQuantity", SqlDbType.Decimal, item.MinOrderQuantity), + SqlHelperExtension.CreateInParam("@ForQuantity", SqlDbType.Decimal, item.ForQuantity), + SqlHelperExtension.CreateInParam("@UnitOfMeasure", SqlDbType.NVarChar, item.UnitOfMeasure), + SqlHelperExtension.CreateInParam("@FreeQuantity", SqlDbType.Decimal, item.FreeQuantity), + SqlHelperExtension.CreateInParam("@FocUnitOfMeasure", SqlDbType.NVarChar, item.FocUnitOfMeasure), + SqlHelperExtension.CreateInParam("@ValidFrom", SqlDbType.Date, item.ValidFrom), + SqlHelperExtension.CreateInParam("@ValidTo", SqlDbType.Date, item.ValidTo), + SqlHelperExtension.CreateInParam("@Status", SqlDbType.NVarChar, item.Status), + ]; + + _ = tc.ExecuteNonQuerySp(spName: "dbo.InsertIntegrationMaterialFreeGoods", parameterValues: p); + } - _ = tc.ExecuteNonQuerySp(spName: "dbo.InsertIntegrationMaterialFreeGoods", parameterValues: p); response = true; } @@ -1347,24 +1416,27 @@ public class IntegrationService : IIntegrationService try { - SqlParameter[] p = - [ - SqlHelperExtension.CreateInParam("@SalesOrg", SqlDbType.NVarChar, request.SalesOrg), - SqlHelperExtension.CreateInParam("@DistributionChannel", SqlDbType.NVarChar, request.DistributionChannel), - SqlHelperExtension.CreateInParam("@CustomerNumber", SqlDbType.NVarChar, string.IsNullOrWhiteSpace(request.CustomerNumber)? null : request.CustomerNumber ), - SqlHelperExtension.CreateInParam("@CustomerPriceGroup", SqlDbType.NVarChar, request.CustomerPriceGroup), - SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode), - SqlHelperExtension.CreateInParam("@MinOrderQuantity", SqlDbType.Decimal, request.MinOrderQuantity), - SqlHelperExtension.CreateInParam("@ForQuantity", SqlDbType.Decimal, request.ForQuantity), - SqlHelperExtension.CreateInParam("@UnitOfMeasure", SqlDbType.NVarChar, request.UnitOfMeasure), - SqlHelperExtension.CreateInParam("@FreeQuantity", SqlDbType.Decimal, request.FreeQuantity), - SqlHelperExtension.CreateInParam("@FocUnitOfMeasure", SqlDbType.NVarChar, request.FocUnitOfMeasure), - SqlHelperExtension.CreateInParam("@ValidFrom", SqlDbType.Date, request.ValidFrom), - SqlHelperExtension.CreateInParam("@ValidTo", SqlDbType.Date, request.ValidTo), - SqlHelperExtension.CreateInParam("@Status", SqlDbType.NVarChar, (object?)request.Status ?? DBNull.Value) - ]; + foreach (var item in request.Slabs) + { + 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), + SqlHelperExtension.CreateInParam("@MinOrderQuantity", SqlDbType.Decimal, item.MinOrderQuantity), + SqlHelperExtension.CreateInParam("@ForQuantity", SqlDbType.Decimal, item.ForQuantity), + SqlHelperExtension.CreateInParam("@UnitOfMeasure", SqlDbType.NVarChar, item.UnitOfMeasure), + SqlHelperExtension.CreateInParam("@FreeQuantity", SqlDbType.Decimal, item.FreeQuantity), + SqlHelperExtension.CreateInParam("@FocUnitOfMeasure", SqlDbType.NVarChar, item.FocUnitOfMeasure), + SqlHelperExtension.CreateInParam("@ValidFrom", SqlDbType.Date, item.ValidFrom), + SqlHelperExtension.CreateInParam("@ValidTo", SqlDbType.Date, item.ValidTo), + SqlHelperExtension.CreateInParam("@Status", SqlDbType.NVarChar, item.Status ), + ]; - _ = tc.ExecuteNonQuerySp(spName: "dbo.UpdateIntegrationMaterialFreeGoods", parameterValues: p); + _ = tc.ExecuteNonQuerySp(spName: "dbo.UpdateIntegrationMaterialFreeGoods", parameterValues: p); + } returnValue = true; } @@ -1484,7 +1556,7 @@ public class IntegrationService : IIntegrationService try { CreateBillingDocument(tc, request); - response.InvoiceBillingDocumentNumber = request.InvoiceBillingDocumentNumber; + response.InvoiceBillingDocumentNumber = request.BillingDocumentNumber; response.BillingDate = request.BillingDate; tc.End(); } @@ -1556,7 +1628,7 @@ public class IntegrationService : IIntegrationService SqlParameter[] p = [ - SqlHelperExtension.CreateInParam("@BillingNumber", SqlDbType.NVarChar, request.InvoiceBillingDocumentNumber), + SqlHelperExtension.CreateInParam("@BillingNumber", SqlDbType.NVarChar, request.BillingDocumentNumber), SqlHelperExtension.CreateInParam("@SalesOrderNo", SqlDbType.NVarChar, request.SalesOrderReferenceNumber), SqlHelperExtension.CreateInParam("@BillingDate", SqlDbType.DateTime, request.BillingDate), SqlHelperExtension.CreateInParam("@DeliveryNumber", SqlDbType.NVarChar, request.DeliveryReferenceNumber), diff --git a/Api/OnlineSalesAutoCrop.CoreAPI/Controllers/Integretion/IntegrationController.cs b/Api/OnlineSalesAutoCrop.CoreAPI/Controllers/Integretion/IntegrationController.cs index efa56d2..3a36cc9 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI/Controllers/Integretion/IntegrationController.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI/Controllers/Integretion/IntegrationController.cs @@ -210,6 +210,12 @@ namespace OnlineSalesAutoCrop.CoreAPI.Controllers MaterialFreeGoodsByReqResponse response = new MaterialFreeGoodsByReqResponse(); try { + if(request.Slabs == null || request.Slabs?.Count==0) + { + response.ReturnMessage.Add($"At least one slab must be sent."); + response.ReturnStatus = StatusCodes.Status400BadRequest; + return StatusCode(StatusCodes.Status400BadRequest, response); + } response = await _integrationService.UpsertMaterialFreeGoodsAsync(request); if (!response.IsUpdated) { @@ -333,14 +339,14 @@ namespace OnlineSalesAutoCrop.CoreAPI.Controllers try { response = await _integrationService.SaveBillingDocumentAsync(request); - response.ReturnMessage.Add($"Successfully Save the Billing for Billing Documnet No :{request.InvoiceBillingDocumentNumber} " + + response.ReturnMessage.Add($"Successfully Save the Billing for Billing Documnet No :{request.BillingDocumentNumber} " + $"And BillingDate : {request.BillingDate} "); response.ReturnStatus = StatusCodes.Status201Created; return StatusCode(StatusCodes.Status201Created, response); } catch (Exception ex) { - string msg = $"Exception Occur in Billing for Billing Documnet No :{request.InvoiceBillingDocumentNumber} " + + string msg = $"Exception Occur in Billing for Billing Documnet No :{request.BillingDocumentNumber} " + $"And BillingDate : {request.BillingDate} "; _logger.LogError(exception: ex, msg); response.ReturnStatus = StatusCodes.Status500InternalServerError;