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