using Back.Common; using Back.Data.Contracts; using Back.Services; using Back.Services.Warehouse; using FluentValidation; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; using Shared.DTOs.Warehouse; namespace Back.Validations.Warehouse.Receipt { public class UpdateValidation : AbstractValidator> { public UpdateValidation(IAsyncRepository _ReceiptRepo, 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 = _ReceiptRepo.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 && ORGitem.ForSale && !model.Item1.ForSale) || ORGitem.Count > model.Item1.Count) { var ekh = ORGitem.Count - model.Item1.Count; var Inventory = warehouseService.Inventory(model.Item2, ORGitem.CODID).Result; if ((Inventory - ekh) < 0) { context.AddFailure($"این تغییرات روی موجودی کالا {ORGitem.cODItem.Title} تاثیر میگذارد و آن را منفی میکند"); return; } } else if (ORGitem.ForSale && !model.Item1.ForSale) { var Inventory = warehouseService.Inventory(model.Item2, ORGitem.CODID).Result; if (Inventory - ORGitem.Count < 0) { context.AddFailure($"این تغییرات روی موجودی کالا {ORGitem.cODItem.Title} تاثیر میگذارد و آن را منفی میکند"); return; } } if (string.IsNullOrEmpty(model.Item1.info)) { context.AddFailure("توضیحی برای رسید در نظر بگیرید"); return; } } } }); } } }