complete Integration FOC and Material Price Endpoints

This commit is contained in:
dibakor 2026-07-26 15:43:14 +06:00
parent 16dcf2351f
commit 13b1739ab1
5 changed files with 184 additions and 101 deletions

View File

@ -10,7 +10,7 @@ public class IntegrationBillingDocumentRequest
{ {
[Required(ErrorMessage = "Invoice/Billing document number is required.")] [Required(ErrorMessage = "Invoice/Billing document number is required.")]
[StringLength(50, ErrorMessage = "Invoice/Billing document number cannot exceed 50 characters.")] [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.")] [Required(ErrorMessage = "Billing date is required.")]
[DataType(DataType.Date)] [DataType(DataType.Date)]

View File

@ -1,17 +1,22 @@
using System; using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
namespace OnlineSalesAutoCrop.CoreAPI.Models.Requests.Integrations; namespace OnlineSalesAutoCrop.CoreAPI.Models.Requests.Integrations;
public class IntegrationMaterialFreeGoodsRequest public class IntegrationMaterialFreeGoodsRequest
{ {
public IntegrationMaterialFreeGoodsRequest()
{
Slabs = new List<IntegrationMaterialFreeGoodItemRequest>();
}
[Required(ErrorMessage = "SalesOrg is required.")] [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; } public string SalesOrg { get; set; }
[Required(ErrorMessage = "DistributionChannel is required.")] [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; } public string DistributionChannel { get; set; }
[StringLength(13, MinimumLength = 1, ErrorMessage = "CustomerNumber must be between 1 and 13 characters.")] [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.")] [StringLength(2, MinimumLength = 1, ErrorMessage = "CustomerPriceGroup must be between 1 and 2 characters.")]
public string? CustomerPriceGroup { get; set; } public string? CustomerPriceGroup { get; set; }
[Required(ErrorMessage = "MaterialCode is required.")]
[StringLength(10, MinimumLength = 1, ErrorMessage = "MaterialCode must be between 1 and 10 characters.")] [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<IntegrationMaterialFreeGoodItemRequest> Slabs { get; set; }
}
[Required(ErrorMessage = "MinOrderQuantity is required.")] public class IntegrationMaterialFreeGoodItemRequest
{
[Range(0.001, 9999999999999.999, ErrorMessage = "MinOrderQuantity must be greater than 0.")] [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.")] [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.")] [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.")] [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.")] [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.")] [Required(ErrorMessage = "ValidFrom is required.")]
public DateOnly ValidFrom { get; set; } public DateOnly ValidFrom { get; set; }
@ -54,7 +57,6 @@ public class IntegrationMaterialFreeGoodsRequest
public string? Status { get; set; } // NULL = Active, X = Inactive public string? Status { get; set; } // NULL = Active, X = Inactive
} }
public class GetMaterialFreeGoodsByFilterRequest public class GetMaterialFreeGoodsByFilterRequest
{ {
[Required(ErrorMessage = "SalesOrg is required.")] [Required(ErrorMessage = "SalesOrg is required.")]

View File

@ -88,4 +88,7 @@ public class GetMaterialPriceByCodeRequest
[StringLength(10, ErrorMessage = "Customer Group Code cannot exceed 10 characters.")] [StringLength(10, ErrorMessage = "Customer Group Code cannot exceed 10 characters.")]
public string? CustomerGroupCode { get; set; } public string? CustomerGroupCode { get; set; }
[StringLength(10, ErrorMessage = "Distributor Channel Code cannot exceed 10 characters.")]
public string? DistributorChannelCode { get; set; }
} }

View File

@ -290,10 +290,21 @@ public class IntegrationService : IIntegrationService
{ {
IntegrationMaterialPriceResponse meterialPrice = await GetMaterialPriceByCodeAndConditionTypeAsync(tc, IntegrationMaterialPriceResponse meterialPrice = await GetMaterialPriceByCodeAndConditionTypeAsync(tc,
new GetMaterialPriceByCodeRequest() { MaterialCode = request.MaterialCode, ConditionType = request.ConditionType, 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)) 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); UpdateMaterialPrice(tc, request);
response.IsUpdated = true; response.IsUpdated = true;
} }
@ -363,6 +374,16 @@ public class IntegrationService : IIntegrationService
if (meterialFreeGoods != null && !string.IsNullOrWhiteSpace(meterialFreeGoods.MaterialCode)) 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); UpdateMaterialFreeGoods(tc, request);
response.IsUpdated = true; response.IsUpdated = true;
} }
@ -1129,7 +1150,8 @@ public class IntegrationService : IIntegrationService
SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode), SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode),
SqlHelperExtension.CreateInParam("@ConditionType", SqlDbType.NVarChar, request.ConditionType), SqlHelperExtension.CreateInParam("@ConditionType", SqlDbType.NVarChar, request.ConditionType),
SqlHelperExtension.CreateInParam("@CustomerNumber", SqlDbType.NVarChar, string.IsNullOrWhiteSpace(request.CustomerNumber)? null : request.CustomerNumber ), 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)) using (IDataReader dr = await tc.ExecuteReaderSpAsync("dbo.GetMaterialPriceByMaterialCodeAndConditionType", parameterValues: p))
@ -1165,29 +1187,39 @@ public class IntegrationService : IIntegrationService
return response; return response;
} }
private bool DeleteMaterialPriceByCodeAndConditionType(TransactionContext tc, GetMaterialPriceByCodeRequest request)
{
bool response = false;
try
{
SqlParameter[] p =
[
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("dbo.DeleteMaterialPriceByMaterialCodeAndConditionType", parameterValues: p);
}
catch (Exception ex)
{
throw DBCustomError.GenerateCustomError(ex);
}
return response;
}
private bool CreateMaterialPrice(TransactionContext tc, IntegrationMaterialPriceRequest request) private bool CreateMaterialPrice(TransactionContext tc, IntegrationMaterialPriceRequest request)
{ {
bool response = false; 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 try
{
foreach (var item in request.Slabs)
{ {
SqlParameter[] p = SqlParameter[] p =
[ [
@ -1200,11 +1232,15 @@ public class IntegrationService : IIntegrationService
SqlHelperExtension.CreateInParam("@CalculationType", SqlDbType.NVarChar, request.CalculationType), SqlHelperExtension.CreateInParam("@CalculationType", SqlDbType.NVarChar, request.CalculationType),
SqlHelperExtension.CreateInParam("@PricingUnit", SqlDbType.NVarChar, request.PricingUnit), SqlHelperExtension.CreateInParam("@PricingUnit", SqlDbType.NVarChar, request.PricingUnit),
SqlHelperExtension.CreateInParam("@UnitOfMeasure", SqlDbType.NVarChar, request.UnitOfMeasure), SqlHelperExtension.CreateInParam("@UnitOfMeasure", SqlDbType.NVarChar, request.UnitOfMeasure),
SqlHelperExtension.CreateInParam("@DiscountSlabItemType",SqlDbType.Structured, dtSlabs), 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); _ = tc.ExecuteNonQuerySp(spName: "dbo.InsertIntegrationMaterialPrice", parameterValues: p);
}
response = true; response = true;
} }
catch (Exception) catch (Exception)
@ -1219,28 +1255,30 @@ public class IntegrationService : IIntegrationService
{ {
bool returnValue = false; bool returnValue = false;
try try
{
foreach (var item in request.Slabs)
{ {
SqlParameter[] p = SqlParameter[] p =
[ [
SqlHelperExtension.CreateInParam("@SalesOrg", SqlDbType.NVarChar, request.SalesOrg), SqlHelperExtension.CreateInParam("@SalesOrg", SqlDbType.NVarChar, request.SalesOrg),
SqlHelperExtension.CreateInParam("@DistributionChannel", SqlDbType.NVarChar, request.DistributionChannel), SqlHelperExtension.CreateInParam("@DistributionChannel", SqlDbType.NVarChar, request.DistributionChannel),
SqlHelperExtension.CreateInParam("@CustomerNumber", SqlDbType.NVarChar, string.IsNullOrWhiteSpace(request.CustomerNumber) ? null : request.CustomerNumber), SqlHelperExtension.CreateInParam("@CustomerNumber", SqlDbType.NVarChar, request.CustomerNumber),
SqlHelperExtension.CreateInParam("@CustomerGroupCode", SqlDbType.NVarChar, request.CustomerGroupCode), SqlHelperExtension.CreateInParam("@CustomerGroupCode", SqlDbType.NVarChar, request.CustomerGroupCode),
SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode), SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode),
SqlHelperExtension.CreateInParam("@ConditionType", SqlDbType.NVarChar, request.ConditionType), SqlHelperExtension.CreateInParam("@ConditionType", SqlDbType.NVarChar, request.ConditionType),
SqlHelperExtension.CreateInParam("@CalculationType", SqlDbType.NVarChar, request.CalculationType), SqlHelperExtension.CreateInParam("@CalculationType", SqlDbType.NVarChar, request.CalculationType),
SqlHelperExtension.CreateInParam("@PricingUnit", SqlDbType.NVarChar, request.PricingUnit), SqlHelperExtension.CreateInParam("@PricingUnit", SqlDbType.NVarChar, request.PricingUnit),
SqlHelperExtension.CreateInParam("@UnitOfMeasure", SqlDbType.NVarChar, request.UnitOfMeasure), SqlHelperExtension.CreateInParam("@UnitOfMeasure", SqlDbType.NVarChar, request.UnitOfMeasure),
//SqlHelperExtension.CreateInParam("@ValidFrom", SqlDbType.DateTime, request.ValidFrom), SqlHelperExtension.CreateInParam("@ScaleValue", SqlDbType.NVarChar, item.ScaleValue),
//SqlHelperExtension.CreateInParam("@ValidTo", SqlDbType.DateTime, request.ValidTo), SqlHelperExtension.CreateInParam("@ValidFrom", SqlDbType.DateTime, item.ValidFrom),
//SqlHelperExtension.CreateInParam("@Status", SqlDbType.NVarChar, request.Status), SqlHelperExtension.CreateInParam("@ValidTo", SqlDbType.DateTime, item.ValidTo),
//SqlHelperExtension.CreateInParam("@ConditionValue", SqlDbType.Decimal, request.ConditionValue) 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; returnValue = true;
} }
@ -1306,7 +1344,9 @@ public class IntegrationService : IIntegrationService
return response; return response;
} }
private bool CreateMaterialFreeGoods(TransactionContext tc, IntegrationMaterialFreeGoodsRequest request)
private bool DeleteMaterialFreeGoodsByFilter(
TransactionContext tc, GetMaterialFreeGoodsByFilterRequest request)
{ {
bool response = false; bool response = false;
@ -1316,20 +1356,49 @@ public class IntegrationService : IIntegrationService
[ [
SqlHelperExtension.CreateInParam("@SalesOrg", SqlDbType.NVarChar, request.SalesOrg), SqlHelperExtension.CreateInParam("@SalesOrg", SqlDbType.NVarChar, request.SalesOrg),
SqlHelperExtension.CreateInParam("@DistributionChannel", SqlDbType.NVarChar, request.DistributionChannel), 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)
];
_ = 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("@CustomerPriceGroup", SqlDbType.NVarChar, request.CustomerPriceGroup),
SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode), SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode),
SqlHelperExtension.CreateInParam("@MinOrderQuantity", SqlDbType.Decimal, request.MinOrderQuantity), SqlHelperExtension.CreateInParam("@MinOrderQuantity", SqlDbType.Decimal, item.MinOrderQuantity),
SqlHelperExtension.CreateInParam("@ForQuantity", SqlDbType.Decimal, request.ForQuantity), SqlHelperExtension.CreateInParam("@ForQuantity", SqlDbType.Decimal, item.ForQuantity),
SqlHelperExtension.CreateInParam("@UnitOfMeasure", SqlDbType.NVarChar, request.UnitOfMeasure), SqlHelperExtension.CreateInParam("@UnitOfMeasure", SqlDbType.NVarChar, item.UnitOfMeasure),
SqlHelperExtension.CreateInParam("@FreeQuantity", SqlDbType.Decimal, request.FreeQuantity), SqlHelperExtension.CreateInParam("@FreeQuantity", SqlDbType.Decimal, item.FreeQuantity),
SqlHelperExtension.CreateInParam("@FocUnitOfMeasure", SqlDbType.NVarChar, request.FocUnitOfMeasure), SqlHelperExtension.CreateInParam("@FocUnitOfMeasure", SqlDbType.NVarChar, item.FocUnitOfMeasure),
SqlHelperExtension.CreateInParam("@ValidFrom", SqlDbType.Date, request.ValidFrom), SqlHelperExtension.CreateInParam("@ValidFrom", SqlDbType.Date, item.ValidFrom),
SqlHelperExtension.CreateInParam("@ValidTo", SqlDbType.Date, request.ValidTo), SqlHelperExtension.CreateInParam("@ValidTo", SqlDbType.Date, item.ValidTo),
SqlHelperExtension.CreateInParam("@Status", SqlDbType.NVarChar, (object?)request.Status ?? DBNull.Value), SqlHelperExtension.CreateInParam("@Status", SqlDbType.NVarChar, item.Status),
]; ];
_ = tc.ExecuteNonQuerySp(spName: "dbo.InsertIntegrationMaterialFreeGoods", parameterValues: p); _ = tc.ExecuteNonQuerySp(spName: "dbo.InsertIntegrationMaterialFreeGoods", parameterValues: p);
}
response = true; response = true;
} }
@ -1346,25 +1415,28 @@ public class IntegrationService : IIntegrationService
bool returnValue = false; bool returnValue = false;
try try
{
foreach (var item in request.Slabs)
{ {
SqlParameter[] p = SqlParameter[] p =
[ [
SqlHelperExtension.CreateInParam("@SalesOrg", SqlDbType.NVarChar, request.SalesOrg), SqlHelperExtension.CreateInParam("@SalesOrg", SqlDbType.NVarChar, request.SalesOrg),
SqlHelperExtension.CreateInParam("@DistributionChannel", SqlDbType.NVarChar, request.DistributionChannel), SqlHelperExtension.CreateInParam("@DistributionChannel", SqlDbType.NVarChar, request.DistributionChannel),
SqlHelperExtension.CreateInParam("@CustomerNumber", SqlDbType.NVarChar, string.IsNullOrWhiteSpace(request.CustomerNumber)? null : request.CustomerNumber ), SqlHelperExtension.CreateInParam("@CustomerNumber", SqlDbType.NVarChar, request.CustomerNumber),
SqlHelperExtension.CreateInParam("@CustomerPriceGroup", SqlDbType.NVarChar, request.CustomerPriceGroup), SqlHelperExtension.CreateInParam("@CustomerPriceGroup", SqlDbType.NVarChar, request.CustomerPriceGroup),
SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode), SqlHelperExtension.CreateInParam("@MaterialCode", SqlDbType.NVarChar, request.MaterialCode),
SqlHelperExtension.CreateInParam("@MinOrderQuantity", SqlDbType.Decimal, request.MinOrderQuantity), SqlHelperExtension.CreateInParam("@MinOrderQuantity", SqlDbType.Decimal, item.MinOrderQuantity),
SqlHelperExtension.CreateInParam("@ForQuantity", SqlDbType.Decimal, request.ForQuantity), SqlHelperExtension.CreateInParam("@ForQuantity", SqlDbType.Decimal, item.ForQuantity),
SqlHelperExtension.CreateInParam("@UnitOfMeasure", SqlDbType.NVarChar, request.UnitOfMeasure), SqlHelperExtension.CreateInParam("@UnitOfMeasure", SqlDbType.NVarChar, item.UnitOfMeasure),
SqlHelperExtension.CreateInParam("@FreeQuantity", SqlDbType.Decimal, request.FreeQuantity), SqlHelperExtension.CreateInParam("@FreeQuantity", SqlDbType.Decimal, item.FreeQuantity),
SqlHelperExtension.CreateInParam("@FocUnitOfMeasure", SqlDbType.NVarChar, request.FocUnitOfMeasure), SqlHelperExtension.CreateInParam("@FocUnitOfMeasure", SqlDbType.NVarChar, item.FocUnitOfMeasure),
SqlHelperExtension.CreateInParam("@ValidFrom", SqlDbType.Date, request.ValidFrom), SqlHelperExtension.CreateInParam("@ValidFrom", SqlDbType.Date, item.ValidFrom),
SqlHelperExtension.CreateInParam("@ValidTo", SqlDbType.Date, request.ValidTo), SqlHelperExtension.CreateInParam("@ValidTo", SqlDbType.Date, item.ValidTo),
SqlHelperExtension.CreateInParam("@Status", SqlDbType.NVarChar, (object?)request.Status ?? DBNull.Value) SqlHelperExtension.CreateInParam("@Status", SqlDbType.NVarChar, item.Status ),
]; ];
_ = tc.ExecuteNonQuerySp(spName: "dbo.UpdateIntegrationMaterialFreeGoods", parameterValues: p); _ = tc.ExecuteNonQuerySp(spName: "dbo.UpdateIntegrationMaterialFreeGoods", parameterValues: p);
}
returnValue = true; returnValue = true;
} }
@ -1484,7 +1556,7 @@ public class IntegrationService : IIntegrationService
try try
{ {
CreateBillingDocument(tc, request); CreateBillingDocument(tc, request);
response.InvoiceBillingDocumentNumber = request.InvoiceBillingDocumentNumber; response.InvoiceBillingDocumentNumber = request.BillingDocumentNumber;
response.BillingDate = request.BillingDate; response.BillingDate = request.BillingDate;
tc.End(); tc.End();
} }
@ -1556,7 +1628,7 @@ public class IntegrationService : IIntegrationService
SqlParameter[] p = 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("@SalesOrderNo", SqlDbType.NVarChar, request.SalesOrderReferenceNumber),
SqlHelperExtension.CreateInParam("@BillingDate", SqlDbType.DateTime, request.BillingDate), SqlHelperExtension.CreateInParam("@BillingDate", SqlDbType.DateTime, request.BillingDate),
SqlHelperExtension.CreateInParam("@DeliveryNumber", SqlDbType.NVarChar, request.DeliveryReferenceNumber), SqlHelperExtension.CreateInParam("@DeliveryNumber", SqlDbType.NVarChar, request.DeliveryReferenceNumber),

View File

@ -210,6 +210,12 @@ namespace OnlineSalesAutoCrop.CoreAPI.Controllers
MaterialFreeGoodsByReqResponse response = new MaterialFreeGoodsByReqResponse(); MaterialFreeGoodsByReqResponse response = new MaterialFreeGoodsByReqResponse();
try 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); response = await _integrationService.UpsertMaterialFreeGoodsAsync(request);
if (!response.IsUpdated) if (!response.IsUpdated)
{ {
@ -333,14 +339,14 @@ namespace OnlineSalesAutoCrop.CoreAPI.Controllers
try try
{ {
response = await _integrationService.SaveBillingDocumentAsync(request); 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} "); $"And BillingDate : {request.BillingDate} ");
response.ReturnStatus = StatusCodes.Status201Created; response.ReturnStatus = StatusCodes.Status201Created;
return StatusCode(StatusCodes.Status201Created, response); return StatusCode(StatusCodes.Status201Created, response);
} }
catch (Exception ex) 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} "; $"And BillingDate : {request.BillingDate} ";
_logger.LogError(exception: ex, msg); _logger.LogError(exception: ex, msg);
response.ReturnStatus = StatusCodes.Status500InternalServerError; response.ReturnStatus = StatusCodes.Status500InternalServerError;