Files
moadiran/Back/Validations/AddOrUpdateInvoiceValidation.cs
mmrbnjd 4df6c87012 docker
2025-10-03 23:30:01 +03:30

105 lines
5.4 KiB
C#

using Back.Common;
using Back.Data.Contracts;
using Back.Data.Models;
using Back.Services;
using FluentValidation;
using Microsoft.EntityFrameworkCore;
using Shared.DTOs;
namespace Back.Validations
{
public class AddOrUpdateInvoiceValidation : AbstractValidator<Tuple<int, NUInvoiceDTO, eActionValidation>>
{
public AddOrUpdateInvoiceValidation(IAsyncRepository<Pattern> patternRepo, servCustomer servCustomer
, servInvoice servInvoice, CheckPermission checkPermission)
{
When(m => m.Item3 == eActionValidation.update, () =>
{
RuleFor(r => r)
.Custom((model, context) =>
{
if (model.Item2.ID == null || model.Item2.ID <= 0)
context.AddFailure("شناسه صورتحساب در حالت ویرایش نمی تواند خالی باشد");
else if (!servInvoice.ExistInvoiceByInvoiceID(model.Item1,model.Item2.ID.Value ).Result)
context.AddFailure("ضورتحساب یافت نشد");
else if (servInvoice.checkFatherInvoiceByInvoiceID(model.Item1, model.Item2.ID.Value).Result)
context.AddFailure("این صورتحساب، مرجع چند صورتحساب دیگر می باشد " +'\n'+
"ابتدا آن هارا حذف کنید");
});
});
When(m => m.Item3 == eActionValidation.add || m.Item3 == eActionValidation.copy, () =>
{
RuleFor(r => r.Item1)
.Custom((CompanyID, context) =>
{
if (!checkPermission.AllowAddInvoiceInCompany(CompanyID).Result)
context.AddFailure("اضافه کردن صورتحساب محدود شده است");
});
});
When(m => m.Item3 == eActionValidation.add || m.Item3 == eActionValidation.update, () =>
{
RuleFor(r => r.Item2.Title)
.NotNull().WithMessage("عنوان نمی تواند خالی باشد")
.NotEmpty().WithMessage("عنوان نمی تواند خالی باشد")
.MinimumLength(3).WithMessage("عنوان حداقل باید 3 کاراکتر باشد");
RuleFor(r => r.Item2.PatternID)
.Custom((PatternID, context) =>
{
if (PatternID != null && PatternID > 0 && !patternRepo.Get(w => w.Status && w.ID == PatternID).AnyAsync().Result)
context.AddFailure("الگوی صورتحساب معتبر نیست");
});
RuleFor(r => r)
.Custom((model, context) =>
{
if (model.Item2.CustomerID == null || model.Item2.CustomerID <= 0)
context.AddFailure("برای صدور صورتحساب باید مشتری تعریف شود");
else if (!servCustomer.ExistCustomerByCustomerID(model.Item2.CustomerID, model.Item1).Result)
context.AddFailure("مشتری یافت نشد");
var cus = servCustomer.GetCustomerByCustomerID(model.Item2.CustomerID, model.Item1).Result;
if (cus.CustomerType == CustomerType.WithoutIdentity && !(model.Item2.PatternID == 3 || model.Item2.PatternID == 5 ||
model.Item2.PatternID == 5 || model.Item2.PatternID == 6 || model.Item2.PatternID == 8 || model.Item2.PatternID == 9 || model.Item2.PatternID == 14))
context.AddFailure("مشتری بدون هویت برای این الگو نمیتوان در نظر گرفت");
});
RuleFor(r => r.Item2.InvoiceDate)
.Custom((InvoiceDate, context) =>
{
if (string.IsNullOrEmpty(InvoiceDate))
context.AddFailure("تاریخ ایجاد صورتحساب نمی تواند خالی باشد");
else if(InvoiceDate.Length!=8)
context.AddFailure("تاریخ ایجاد صورتحساب صحیح نمی باشد");
else if (InvoiceDate.Trim().ToMiladi() > DateTime.Now)
context.AddFailure("تاریخ ایجاد صورتحساب نمی تواند از امروز جلوتر باشد");
});
RuleFor(r => r.Item2.InvoicIssueDate)
.Custom((InvoicIssueDate, context) =>
{
if (string.IsNullOrEmpty(InvoicIssueDate))
context.AddFailure("تاریخ صدور صورتحساب نمی تواند خالی باشد");
else if (InvoicIssueDate.Length != 8)
context.AddFailure("تاریخ صدور صورتحساب صحیح نمی باشد");
else if (InvoicIssueDate.Trim().ToMiladi() > DateTime.Now)
context.AddFailure("تاریخ صدور صورتحساب نمی تواند از امروز جلوتر باشد");
});
});
}
}
}