using Back.Common; using Back.Data.Contracts; using Back.Data.Models; using Back.Services; using FluentValidation; using Microsoft.EntityFrameworkCore; using Shared.DTOs; using TaxCollectData.Library.Dto.Content; namespace Back.Validations { public class AddOrUpdateInvoiceValidation : AbstractValidator> { public AddOrUpdateInvoiceValidation(IAsyncRepository 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("تاریخ صدور صورتحساب نمی تواند از امروز جلوتر باشد"); }); }); } } }