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(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) { if (servCOD.ExistCodByCompanyID(model.Item1.CODID, model.Item2).Result) 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; } } } } }); } } }