105 lines
5.4 KiB
C#
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("تاریخ صدور صورتحساب نمی تواند از امروز جلوتر باشد");
|
|
});
|
|
});
|
|
}
|
|
}
|
|
}
|