using Back.Data.Contracts; using Back.Services.Warehouse; using Back.Services; using FluentValidation; using Shared.DTOs.Warehouse; using Microsoft.EntityFrameworkCore; using Back.Common; namespace Back.Validations.Warehouse.Remittance { public class UpdateValidation : AbstractValidator> { public UpdateValidation(IAsyncRepository _Repo, ServCOD servCOD, WarehouseService warehouseService) { CascadeMode = CascadeMode.Stop; RuleFor(r => r.Item1.Date) .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(model => model) .Custom((model, context) => { var ORGitem = _Repo.Get(w => w.ID == model.Item1.ID && !w.Deleted).Include(i => i.cODItem).FirstOrDefault(); if (ORGitem.InvoiceID.HasValue) { context.AddFailure("حواله فاکتور قایل ویرایش نیست"); return; } if (ORGitem == null) context.AddFailure("حواله یافت نشد"); else { if (ORGitem.CODID != model.Item1.CODID) { context.AddFailure("در حواله امکان ویرایش کالا امکان پذیر نیست"); } else { if ( (ORGitem.Count < model.Item1.Count)) { var Inventory = warehouseService.Inventory(model.Item2, model.Item1.CODID).Result; if (Inventory - (model.Item1.Count - ORGitem.Count) < 0) { context.AddFailure($"این تغییرات روی موجودی کالا تاثیر میگذارد و آن را منفی میکند"); } } else { if (string.IsNullOrEmpty(model.Item1.info)) { context.AddFailure("توضیحی برای حواله در نظر بگیرید"); } } } } }); } } }