feat: add GetVATRate RPC and corresponding query handler for VAT rate retrieval
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
namespace FrontOffice.BFF.Application.UserOrderCQ.Queries.GetVATRate;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت نرخ مالیات بر ارزش افزوده
|
||||||
|
/// </summary>
|
||||||
|
public record GetVATRateQuery : IRequest<GetVATRateResponseDto>;
|
||||||
+61
@@ -0,0 +1,61 @@
|
|||||||
|
using CMSMicroservice.Protobuf.Protos.Configuration;
|
||||||
|
|
||||||
|
namespace FrontOffice.BFF.Application.UserOrderCQ.Queries.GetVATRate;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// هندلر دریافت نرخ مالیات بر ارزش افزوده
|
||||||
|
/// </summary>
|
||||||
|
public class GetVATRateQueryHandler : IRequestHandler<GetVATRateQuery, GetVATRateResponseDto>
|
||||||
|
{
|
||||||
|
private readonly IApplicationContractContext _context;
|
||||||
|
|
||||||
|
public GetVATRateQueryHandler(IApplicationContractContext context)
|
||||||
|
{
|
||||||
|
_context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<GetVATRateResponseDto> 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
+22
@@ -0,0 +1,22 @@
|
|||||||
|
namespace FrontOffice.BFF.Application.UserOrderCQ.Queries.GetVATRate;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پاسخ نرخ مالیات بر ارزش افزوده
|
||||||
|
/// </summary>
|
||||||
|
public class GetVATRateResponseDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// نرخ مالیات (مثلاً 0.09 = 9%)
|
||||||
|
/// </summary>
|
||||||
|
public double VatRate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// درصد مالیات (مثلاً 9)
|
||||||
|
/// </summary>
|
||||||
|
public int VatPercentage { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آیا مالیات فعال است
|
||||||
|
/// </summary>
|
||||||
|
public bool IsEnabled { get; set; }
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ using FrontOffice.BFF.Application.UserOrderCQ.Commands.UpdateUserOrder;
|
|||||||
using FrontOffice.BFF.Application.UserOrderCQ.Commands.DeleteUserOrder;
|
using FrontOffice.BFF.Application.UserOrderCQ.Commands.DeleteUserOrder;
|
||||||
using FrontOffice.BFF.Application.UserOrderCQ.Queries.GetUserOrder;
|
using FrontOffice.BFF.Application.UserOrderCQ.Queries.GetUserOrder;
|
||||||
using FrontOffice.BFF.Application.UserOrderCQ.Queries.GetAllUserOrderByFilter;
|
using FrontOffice.BFF.Application.UserOrderCQ.Queries.GetAllUserOrderByFilter;
|
||||||
|
using FrontOffice.BFF.Application.UserOrderCQ.Queries.GetVATRate;
|
||||||
using FrontOffice.BFF.Application.UserOrderCQ.Commands.SubmitShopBuyOrder;
|
using FrontOffice.BFF.Application.UserOrderCQ.Commands.SubmitShopBuyOrder;
|
||||||
using FrontOffice.BFF.UserOrder.Protobuf.Protos.UserOrder;
|
using FrontOffice.BFF.UserOrder.Protobuf.Protos.UserOrder;
|
||||||
|
|
||||||
@@ -40,4 +41,9 @@ public class UserOrderService : UserOrderContract.UserOrderContractBase
|
|||||||
{
|
{
|
||||||
return await _dispatchRequestToCQRS.Handle<SubmitShopBuyOrderRequest, SubmitShopBuyOrderCommand, SubmitShopBuyOrderResponse>(request, context);
|
return await _dispatchRequestToCQRS.Handle<SubmitShopBuyOrderRequest, SubmitShopBuyOrderCommand, SubmitShopBuyOrderResponse>(request, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override async Task<GetVATRateResponse> GetVATRate(Empty request, ServerCallContext context)
|
||||||
|
{
|
||||||
|
return await _dispatchRequestToCQRS.Handle<Empty, GetVATRateQuery, GetVATRateResponse>(request, context);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,6 +48,12 @@ service UserOrderContract
|
|||||||
body: "*"
|
body: "*"
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
// دریافت نرخ مالیات بر ارزش افزوده
|
||||||
|
rpc GetVATRate(google.protobuf.Empty) returns (GetVATRateResponse){
|
||||||
|
option (google.api.http) = {
|
||||||
|
get: "/GetVATRate"
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
message CreateNewUserOrderRequest
|
message CreateNewUserOrderRequest
|
||||||
{
|
{
|
||||||
@@ -217,3 +223,11 @@ message SubmitShopBuyOrderResponse
|
|||||||
sfixed32 nanos = 2;
|
sfixed32 nanos = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// پاسخ نرخ مالیات بر ارزش افزوده
|
||||||
|
message GetVATRateResponse
|
||||||
|
{
|
||||||
|
double vat_rate = 1; // نرخ مالیات (مثلاً 0.09 = 9%)
|
||||||
|
int32 vat_percentage = 2; // درصد مالیات (مثلاً 9)
|
||||||
|
bool is_enabled = 3; // آیا مالیات فعال است
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user