From 6cd0f8f82f73977761e75d9b6e0ea62a63c59470 Mon Sep 17 00:00:00 2001 From: dibakor Date: Thu, 23 Jul 2026 11:11:46 +0600 Subject: [PATCH] update validaton for material endpoint --- .../Enums.cs | 3 +- .../IntegrationEmployeeRequest.cs | 4 --- .../Integrations/IntegrationInvoiceRequest.cs | 2 +- .../IntegrationMaterialPriceRequest.cs | 18 ++++++++-- .../IntegrationMaterialRequest.cs | 11 ++----- .../Requests/MobileApp/OrderRequest.cs | 2 +- .../Integrations/IntegrationService.cs | 33 ++++++++++++++----- .../Services/MobileApp/OrderService.cs | 3 +- Api/OnlineSalesAutoCrop.CoreAPI/Startup.cs | 14 ++++---- 9 files changed, 57 insertions(+), 33 deletions(-) diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Enums.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Enums.cs index 3924448..c406aec 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Enums.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Enums.cs @@ -752,7 +752,8 @@ namespace OnlineSalesAutoCrop.CoreAPI.Models [Description("Approved")] Approved = 6, [Description("Sent To SAP")] - SentToSAP = 7 + SentToSAP = 7, + } public enum SAPOrderStatusEnum : short diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationEmployeeRequest.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationEmployeeRequest.cs index 2c88848..caa29aa 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationEmployeeRequest.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationEmployeeRequest.cs @@ -70,19 +70,15 @@ public class IntegrationEmployeeRequest [StringLength(40, ErrorMessage = "Region/Area description cannot exceed 40 characters.")] public string RegionAreaDescription { get; set; } - [Required(ErrorMessage = "Area-AV/Sales unit code is required.")] [StringLength(10, ErrorMessage = "Area-AV/Sales unit code cannot exceed 10 characters.")] public string AreaAVSalesUnitCode { get; set; } - [Required(ErrorMessage = "Area-AV/Sales unit description is required.")] [StringLength(40, ErrorMessage = "Area-AV/Sales unit description cannot exceed 40 characters.")] public string AreaAVSalesUnitDescription { get; set; } - [Required(ErrorMessage = "Territory is required.")] [StringLength(3, ErrorMessage = "Territory cannot exceed 3 characters.")] public string Territory { get; set; } - [Required(ErrorMessage = "Territory description is required.")] [StringLength(20, ErrorMessage = "Territory description cannot exceed 20 characters.")] public string TerritoryDescription { get; set; } diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationInvoiceRequest.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationInvoiceRequest.cs index 21bc87c..7dfae46 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationInvoiceRequest.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationInvoiceRequest.cs @@ -43,7 +43,7 @@ public class IntegrationBillingDocumentItemRequest public string UnitOfMeasure { get; set; } = string.Empty; [Required(ErrorMessage = "Billing amount is required.")] - [Range(0.01, double.MaxValue, ErrorMessage = "Billing amount must be greater than zero.")] + [Range(0, double.MaxValue, ErrorMessage = "Billing amount must be greater than zero.")] [DataType(DataType.Currency)] public decimal BillingAmount { get; set; } } diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialPriceRequest.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialPriceRequest.cs index 34bc434..bee8cc3 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialPriceRequest.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialPriceRequest.cs @@ -1,10 +1,17 @@ using System; +using System.Collections; +using System.Collections.Generic; using System.ComponentModel.DataAnnotations; namespace OnlineSalesAutoCrop.CoreAPI.Models.Requests.Integrations; public class IntegrationMaterialPriceRequest { + public IntegrationMaterialPriceRequest() + { + Slabs = new List(); + } + [Required(ErrorMessage = "Sales Org is required.")] [StringLength(4, ErrorMessage = "Sales Org cannot exceed 4 characters.")] public string SalesOrg { get; set; } @@ -38,6 +45,14 @@ public class IntegrationMaterialPriceRequest [Required(ErrorMessage = "Unit Of Measure is required.")] [StringLength(3, ErrorMessage = "Unit Of Measure cannot exceed 3 characters.")] public string UnitOfMeasure { get; set; } + public IList Slabs { get; set; } +} + +public class IntegrationMaterialPriceItemRequest +{ + [Required(ErrorMessage = "Scale Value is required.")] + [Range(typeof(decimal), "0", "999999999999999999.99", ErrorMessage = "Scale Value must be greater than or equal to 0.")] + public decimal ScaleValue { get; set; } [Required(ErrorMessage = "Valid From date is required.")] public DateTime ValidFrom { get; set; } @@ -50,8 +65,7 @@ public class IntegrationMaterialPriceRequest public string Status { get; set; } [Required(ErrorMessage = "Condition Value is required.")] - [Range(typeof(decimal), "0", "999999999999999999.99", - ErrorMessage = "Condition Value must be greater than or equal to 0.")] + [Range(typeof(decimal), "0", "999999999999999999.99", ErrorMessage = "Condition Value must be greater than or equal to 0.")] public decimal ConditionValue { get; set; } } diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialRequest.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialRequest.cs index f186a75..41f29d2 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialRequest.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/Integrations/IntegrationMaterialRequest.cs @@ -56,20 +56,15 @@ public class IntegrationMaterialRequest [StringLength(30, ErrorMessage = "Plant description cannot exceed 30 characters.")] public string PlantDescription { get; set; } - [Required(ErrorMessage = "Storage location code is required.")] - [StringLength(4, ErrorMessage = "Storage location code cannot exceed 4 characters.")] - public string StorageLocationCode { get; set; } - - [Required(ErrorMessage = "Storage location description is required.")] - [StringLength(16, ErrorMessage = "Storage location description cannot exceed 16 characters.")] - public string StorageLocationDescription { get; set; } + public string? StorageLocationCode { get; set; } + public string? StorageLocationDescription { get; set; } [Required(ErrorMessage = "Sales Organization code is required.")] [StringLength(4, ErrorMessage = "Sales Organization code cannot exceed 4 characters.")] public string SalesOrganization { get; set; } [Required(ErrorMessage = "Sales Organization Description is required.")] - [StringLength(16, ErrorMessage = "Sales Organization Description cannot exceed 16 characters.")] + [StringLength( 40, MinimumLength =1, ErrorMessage = "Sales Organization Description cannot exceed 40 characters.")] public string SalesOrganizationDescription { get; set; } } diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/MobileApp/OrderRequest.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/MobileApp/OrderRequest.cs index bf7785e..1126abd 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/MobileApp/OrderRequest.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/MobileApp/OrderRequest.cs @@ -70,7 +70,7 @@ public class SaveOrderPromotionRequest public class GetOrderSummaryRequest : PagedRequest { public string? SalesOrgCode { get; set; } - public string? EmployerCode { get; set; } + public string? EmployeeCode { get; set; } public string? OrderNo { get; set; } public string? UUID { get; set; } public string? CustomerCode { get; set; } diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/Integrations/IntegrationService.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/Integrations/IntegrationService.cs index 829c0c5..0d58943 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/Integrations/IntegrationService.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/Integrations/IntegrationService.cs @@ -1169,6 +1169,24 @@ public class IntegrationService : IIntegrationService { 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 = @@ -1182,10 +1200,7 @@ public class IntegrationService : IIntegrationService 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) + SqlHelperExtension.CreateInParam("@DiscountSlabItemType",SqlDbType.Structured, dtSlabs), ]; _ = tc.ExecuteNonQuerySp(spName: "dbo.InsertIntegrationMaterialPrice", parameterValues: p); @@ -1204,6 +1219,8 @@ public class IntegrationService : IIntegrationService { bool returnValue = false; + + try { SqlParameter[] p = @@ -1217,10 +1234,10 @@ public class IntegrationService : IIntegrationService 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) + //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) ]; _ = tc.ExecuteNonQuerySp(spName: "dbo.UpdateIntegrationMaterialPrice", parameterValues: p); diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/MobileApp/OrderService.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/MobileApp/OrderService.cs index a03429c..fb8105a 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/MobileApp/OrderService.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/MobileApp/OrderService.cs @@ -164,6 +164,7 @@ public class OrderService : IOrderService response.UUID = request.UUID; response.OrderId = orderId; response.OrderDate = existingOrder.OrderDate; + response.OrderNo = existingOrder.OrderNo; } else { @@ -711,7 +712,7 @@ public class OrderService : IOrderService SqlParameter[] p = [ SqlHelperExtension.CreateInParam(pName: "@SalesOrgCode", pType: SqlDbType.VarChar, pValue:request.SalesOrgCode) , - SqlHelperExtension.CreateInParam(pName: "@EmployeeCode", pType: SqlDbType.VarChar, pValue:request.EmployerCode) , + SqlHelperExtension.CreateInParam(pName: "@EmployeeCode", pType: SqlDbType.VarChar, pValue:request.EmployeeCode) , SqlHelperExtension.CreateInParam(pName: "@OrderNo", pType: SqlDbType.VarChar, pValue: request.OrderNo ), SqlHelperExtension.CreateInParam(pName: "@UUID", pType: SqlDbType.VarChar, pValue: request.UUID ), SqlHelperExtension.CreateInParam(pName: "@CustomerCode", pType: SqlDbType.VarChar, pValue: request.CustomerCode ), diff --git a/Api/OnlineSalesAutoCrop.CoreAPI/Startup.cs b/Api/OnlineSalesAutoCrop.CoreAPI/Startup.cs index d055209..f1879fe 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI/Startup.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI/Startup.cs @@ -318,7 +318,7 @@ namespace OnlineSalesAutoCrop.CoreAPI config.UseSimpleAssemblyNameTypeSerializer(); config.UseRecommendedSerializerSettings(); - config.UseSqlServerStorage(_appSettings.HangfireDb, new SqlServerStorageOptions + config.UseSqlServerStorage(_appSettings.HangfireDb, new SqlServerStorageOptions { DisableGlobalLocks = true, QueuePollInterval = TimeSpan.Zero, @@ -327,10 +327,10 @@ namespace OnlineSalesAutoCrop.CoreAPI SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5) }); }); - services.AddHangfireServer(options => - { - options.Queues = new[] { "sap_order_send", "default" }; // merge with any queues you already have - }); ; + services.AddHangfireServer(options => + { + options.Queues = new[] { "sap_order_send", "default" }; // merge with any queues you already have + }); } @@ -546,11 +546,11 @@ namespace OnlineSalesAutoCrop.CoreAPI RecurringJobOptions options = new() { TimeZone = TimeZoneInfo.Local, MisfireHandling = MisfireHandlingMode.Relaxed }; - RecurringJob.AddOrUpdate( + RecurringJob.AddOrUpdate( "send-sap-orders", service => service.ExecuteSendingOrderAsync(CancellationToken.None), "*/1 * * * *"); - } + } #endregion