From b094c7ca753552cecd1d1075a985123323995dd3 Mon Sep 17 00:00:00 2001 From: dibakor Date: Tue, 14 Jul 2026 12:18:46 +0600 Subject: [PATCH] implement payment terms endpoint --- .../Enums.cs | 1 + .../MobileApp/MobileMasterDataRequest.cs | 8 +++ .../MobileApp/MobileMasterDataResponse.cs | 12 +++++ .../MobileApp/IMobileMasterDataService.cs | 1 + .../Integrations/IntegrationService.cs | 4 ++ .../MobileApp/MobileMasterDataService.cs | 54 +++++++++++++++++++ .../Mobile/MobileMasterDataController.cs | 28 +++++++++- 7 files changed, 107 insertions(+), 1 deletion(-) diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Enums.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Enums.cs index 0db2715..515a230 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Enums.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Enums.cs @@ -736,4 +736,5 @@ namespace OnlineSalesAutoCrop.CoreAPI.Models [Description("SAP User")] SapUser = 4 , } + } \ No newline at end of file diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/MobileApp/MobileMasterDataRequest.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/MobileApp/MobileMasterDataRequest.cs index 094e262..9d69cd3 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/MobileApp/MobileMasterDataRequest.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Requests/MobileApp/MobileMasterDataRequest.cs @@ -169,3 +169,11 @@ public class GetFOCMaterialRequest : PagedRequest public string? FOCCode { get; set; } } +public class GetPaymentTermRequest : PagedRequest +{ + [StringLength(10, MinimumLength = 3, ErrorMessage = "Sales organization code must be between 1 and 10 characters.")] + public string SalesOrgCode { get; set; } + + [StringLength(10, MinimumLength = 3, ErrorMessage = "PayementTerm Code must be between 3 and 10 characters.")] + public string? PayementTermCode { get; set; } +} \ No newline at end of file diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Responses/MobileApp/MobileMasterDataResponse.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Responses/MobileApp/MobileMasterDataResponse.cs index c03b3a9..28cb046 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Models/Responses/MobileApp/MobileMasterDataResponse.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Models/Responses/MobileApp/MobileMasterDataResponse.cs @@ -207,4 +207,16 @@ public class GetFOCMaterialResponse public string FOCUnitOfMeasurement { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } +} + + +public class GetPaymentTermResponse +{ + public int PaymentTermId { get; set; } + public string PaymentTermCode { get; set; } + public string PaymentTermDescription { get; set; } + public string SalesOrgCode { get; set; } + public DateTime StartDate { get; set; } + public DateTime EndDate { get; set; } + public string PaymentTermType { get; set; } } \ No newline at end of file diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Services/Contracts/MobileApp/IMobileMasterDataService.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Services/Contracts/MobileApp/IMobileMasterDataService.cs index 9305cfd..e0485b1 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Services/Contracts/MobileApp/IMobileMasterDataService.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Services/Contracts/MobileApp/IMobileMasterDataService.cs @@ -19,4 +19,5 @@ public interface IMobileMasterDataService Task> GetDiscountMaterialsAsync(GetDiscountMaterialRequest request); Task> GetFOCsAsync(GetFOCRequest request); Task> GetFOCMaterialsAsync(GetFOCMaterialRequest request); + Task> GetPaymentTermsAsync(GetPaymentTermRequest request); } diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/Integrations/IntegrationService.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/Integrations/IntegrationService.cs index 1c3409f..93d59d8 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/Integrations/IntegrationService.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/Integrations/IntegrationService.cs @@ -191,6 +191,10 @@ public class IntegrationService : IIntegrationService return response; } + private int DecideEmployeeAppRole(IntegrationEmployeeRequest request) + { + + } public async Task UpsertMaterialAsync(IntegrationMaterialRequest request) { diff --git a/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/MobileApp/MobileMasterDataService.cs b/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/MobileApp/MobileMasterDataService.cs index 5cc489a..d70051c 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/MobileApp/MobileMasterDataService.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI.Services/Services/MobileApp/MobileMasterDataService.cs @@ -877,5 +877,59 @@ public class MobileMasterDataService : IMobileMasterDataService return response; } + + public async Task> GetPaymentTermsAsync(GetPaymentTermRequest request) + { + PagedResult response = new(); + try + { + using TransactionContext tc = await TransactionContext.BeginAsync(_settings.DefaultConnection.ConnectionNode); + try + { + SqlParameter[] p = + [ + SqlHelperExtension.CreateInParam(pName: "@SalesOrgCode", pType: SqlDbType.VarChar, pValue: request.SalesOrgCode), + SqlHelperExtension.CreateInParam(pName: "@PaymentTermCode", pType: SqlDbType.VarChar, pValue: request.PayementTermCode), + SqlHelperExtension.CreateInParam(pName: "@PageNumber", pType: SqlDbType.Int, pValue: request.PageNumber), + SqlHelperExtension.CreateInParam(pName: "@PageSize", pType: SqlDbType.Int, pValue: request.PageSize) + ]; + + using (IDataReader dr = await tc.ExecuteReaderSpAsync("dbo.GetPaymentTermsPaginated", parameterValues: p)) + { + while (dr.Read()) + { + response.Items.Add(new GetPaymentTermResponse + { + PaymentTermId = dr.GetInt32(0), + PaymentTermCode = dr.GetString(1), + PaymentTermDescription = dr.GetString(2), + SalesOrgCode = dr.GetString(3), + StartDate = dr.GetDateTime(4), + EndDate = dr.GetDateTime(5), + PaymentTermType = dr.GetString(6), + }); + } + dr.Close(); + + response.TotalCount = response.Items.Count; + response.PageNumber = request.PageNumber; + response.PageSize = request.PageSize; + } + tc.End(); + } + catch (Exception ie) + { + tc?.HandleError(); + + throw DBCustomError.GenerateCustomError(ie); + } + } + catch (Exception) + { + throw; + } + + return response; + } } diff --git a/Api/OnlineSalesAutoCrop.CoreAPI/Controllers/Mobile/MobileMasterDataController.cs b/Api/OnlineSalesAutoCrop.CoreAPI/Controllers/Mobile/MobileMasterDataController.cs index 8b015c1..7c4f3ef 100644 --- a/Api/OnlineSalesAutoCrop.CoreAPI/Controllers/Mobile/MobileMasterDataController.cs +++ b/Api/OnlineSalesAutoCrop.CoreAPI/Controllers/Mobile/MobileMasterDataController.cs @@ -288,7 +288,7 @@ namespace OnlineSalesAutoCrop.CoreAPI.Controllers /// /// /// If login successful Return Attendance List - [HttpGet("MaterialFOCs")] + [HttpGet("FOCs")] [IgnoreAntiforgeryToken] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(GetFOCResponse))] public async Task GetMaterialFOCs([FromQuery] GetFOCRequest request) @@ -333,5 +333,31 @@ namespace OnlineSalesAutoCrop.CoreAPI.Controllers return StatusCode(StatusCodes.Status500InternalServerError, MobileResponseBase.Failure(ex.InnerException != null ? ex.InnerException.Message : ex.Message, StatusCodes.Status500InternalServerError)); } } + + /// + /// Login using your credential data retrieve from SqlServer + /// + /// + /// + /// + /// If login successful Return Attendance List + [HttpGet("PaymentTerms")] + [IgnoreAntiforgeryToken] + [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(GetPaymentTermResponse))] + public async Task GetPaymentTerms([FromQuery] GetPaymentTermRequest request) + { + PagedResult response = new(); + try + { + response = await _service.GetPaymentTermsAsync(request); + return Ok(MobileResponseBase>.Success(response)); + } + catch (Exception ex) + { + string msg = $"Exception occur on Get PaymentTerms endpoint with request - {request?.SalesOrgCode} -{request?.PayementTermCode}"; + _logger.LogError(exception: ex, message: msg); + return StatusCode(StatusCodes.Status500InternalServerError, MobileResponseBase.Failure(ex.InnerException != null ? ex.InnerException.Message : ex.Message, StatusCodes.Status500InternalServerError)); + } + } } } \ No newline at end of file