diff --git a/src/FrontOffice.BFF.Application/UserOrderCQ/Queries/GetVATRate/GetVATRateQuery.cs b/src/FrontOffice.BFF.Application/UserOrderCQ/Queries/GetVATRate/GetVATRateQuery.cs new file mode 100644 index 0000000..a544291 --- /dev/null +++ b/src/FrontOffice.BFF.Application/UserOrderCQ/Queries/GetVATRate/GetVATRateQuery.cs @@ -0,0 +1,6 @@ +namespace FrontOffice.BFF.Application.UserOrderCQ.Queries.GetVATRate; + +/// +/// دریافت نرخ مالیات بر ارزش افزوده +/// +public record GetVATRateQuery : IRequest; diff --git a/src/FrontOffice.BFF.Application/UserOrderCQ/Queries/GetVATRate/GetVATRateQueryHandler.cs b/src/FrontOffice.BFF.Application/UserOrderCQ/Queries/GetVATRate/GetVATRateQueryHandler.cs new file mode 100644 index 0000000..65b387b --- /dev/null +++ b/src/FrontOffice.BFF.Application/UserOrderCQ/Queries/GetVATRate/GetVATRateQueryHandler.cs @@ -0,0 +1,61 @@ +using CMSMicroservice.Protobuf.Protos.Configuration; + +namespace FrontOffice.BFF.Application.UserOrderCQ.Queries.GetVATRate; + +/// +/// هندلر دریافت نرخ مالیات بر ارزش افزوده +/// +public class GetVATRateQueryHandler : IRequestHandler +{ + private readonly IApplicationContractContext _context; + + public GetVATRateQueryHandler(IApplicationContractContext context) + { + _context = context; + } + + public async Task Handle(GetVATRateQuery request, CancellationToken cancellationToken) + { + // Default values + var response = new GetVATRateResponseDto + { + VatRate = 0.09, // 9% default + VatPercentage = 9, + IsEnabled = true + }; + + try + { + // دریافت نرخ مالیات از تنظیمات سیستم + // Scope: VAT = 4 + var rateConfig = await _context.Configuration.GetConfigurationByKeyAsync( + new GetConfigurationByKeyRequest { Key = "VAT.Rate" }, + cancellationToken: cancellationToken); + + if (rateConfig != null && !string.IsNullOrEmpty(rateConfig.Value)) + { + if (double.TryParse(rateConfig.Value, out var rate)) + { + response.VatRate = rate; + response.VatPercentage = (int)(rate * 100); + } + } + + // دریافت وضعیت فعال بودن مالیات + var enabledConfig = await _context.Configuration.GetConfigurationByKeyAsync( + new GetConfigurationByKeyRequest { Key = "VAT.IsEnabled" }, + cancellationToken: cancellationToken); + + if (enabledConfig != null && !string.IsNullOrEmpty(enabledConfig.Value)) + { + response.IsEnabled = bool.TryParse(enabledConfig.Value, out var enabled) && enabled; + } + } + catch + { + // در صورت خطا، مقادیر پیش‌فرض برگردانده می‌شود + } + + return response; + } +} diff --git a/src/FrontOffice.BFF.Application/UserOrderCQ/Queries/GetVATRate/GetVATRateResponseDto.cs b/src/FrontOffice.BFF.Application/UserOrderCQ/Queries/GetVATRate/GetVATRateResponseDto.cs new file mode 100644 index 0000000..bdcb2d1 --- /dev/null +++ b/src/FrontOffice.BFF.Application/UserOrderCQ/Queries/GetVATRate/GetVATRateResponseDto.cs @@ -0,0 +1,22 @@ +namespace FrontOffice.BFF.Application.UserOrderCQ.Queries.GetVATRate; + +/// +/// پاسخ نرخ مالیات بر ارزش افزوده +/// +public class GetVATRateResponseDto +{ + /// + /// نرخ مالیات (مثلاً 0.09 = 9%) + /// + public double VatRate { get; set; } + + /// + /// درصد مالیات (مثلاً 9) + /// + public int VatPercentage { get; set; } + + /// + /// آیا مالیات فعال است + /// + public bool IsEnabled { get; set; } +} diff --git a/src/FrontOffice.BFF.WebApi/Services/UserOrderService.cs b/src/FrontOffice.BFF.WebApi/Services/UserOrderService.cs index ad0c1bb..dfc4a06 100644 --- a/src/FrontOffice.BFF.WebApi/Services/UserOrderService.cs +++ b/src/FrontOffice.BFF.WebApi/Services/UserOrderService.cs @@ -4,6 +4,7 @@ using FrontOffice.BFF.Application.UserOrderCQ.Commands.UpdateUserOrder; using FrontOffice.BFF.Application.UserOrderCQ.Commands.DeleteUserOrder; using FrontOffice.BFF.Application.UserOrderCQ.Queries.GetUserOrder; using FrontOffice.BFF.Application.UserOrderCQ.Queries.GetAllUserOrderByFilter; +using FrontOffice.BFF.Application.UserOrderCQ.Queries.GetVATRate; using FrontOffice.BFF.Application.UserOrderCQ.Commands.SubmitShopBuyOrder; using FrontOffice.BFF.UserOrder.Protobuf.Protos.UserOrder; @@ -40,4 +41,9 @@ public class UserOrderService : UserOrderContract.UserOrderContractBase { return await _dispatchRequestToCQRS.Handle(request, context); } + + public override async Task GetVATRate(Empty request, ServerCallContext context) + { + return await _dispatchRequestToCQRS.Handle(request, context); + } } diff --git a/src/Protobufs/FrontOffice.BFF.UserOrder.Protobuf/Protos/userorder.proto b/src/Protobufs/FrontOffice.BFF.UserOrder.Protobuf/Protos/userorder.proto index bedba82..9d818cf 100644 --- a/src/Protobufs/FrontOffice.BFF.UserOrder.Protobuf/Protos/userorder.proto +++ b/src/Protobufs/FrontOffice.BFF.UserOrder.Protobuf/Protos/userorder.proto @@ -48,6 +48,12 @@ service UserOrderContract body: "*" }; }; + // دریافت نرخ مالیات بر ارزش افزوده + rpc GetVATRate(google.protobuf.Empty) returns (GetVATRateResponse){ + option (google.api.http) = { + get: "/GetVATRate" + }; + }; } message CreateNewUserOrderRequest { @@ -216,4 +222,12 @@ message SubmitShopBuyOrderResponse sfixed32 nanos = 2; } + +// پاسخ نرخ مالیات بر ارزش افزوده +message GetVATRateResponse +{ + double vat_rate = 1; // نرخ مالیات (مثلاً 0.09 = 9%) + int32 vat_percentage = 2; // درصد مالیات (مثلاً 9) + bool is_enabled = 3; // آیا مالیات فعال است +} \ No newline at end of file