private async Task ValidateFieldsAsync(ProductoViewModel productoViewModel) { productoViewModel.Unidades = await _getHelper.GetUnidadByIdAsync((Guid)productoViewModel.UnidadID); //validate if register exist with that value var codeexist = await _context.Productos .Include(p => p.Unidades) .FirstOrDefaultAsync(p => p.Codigo == productoViewModel.Codigo && p.ProductoID != productoViewModel.ProductoID); if (codeexist != null) { ModelState.AddModelError("Codigo", "Ya existe un producto con este código."); } //validate field Tasa de Impuesto if (productoViewModel.TasaID == null || productoViewModel.TasaID == Guid.Empty) { ModelState.AddModelError("TasaID", "El campo Tasa de Impuesto es requerido"); } //validate field Unidad if (productoViewModel.UnidadID == null || productoViewModel.UnidadID == Guid.Empty) { ModelState.AddModelError("UnidadID", "El campo Unidad es requerido"); } else { //if field unidad have value, then, validate fields CodigoPieza and Cantidad if (productoViewModel.Unidades.Paquete) { if (string.IsNullOrEmpty(productoViewModel.CodigoPieza)) { ModelState.AddModelError("CodigoPieza", "El campo Unidad es requerido"); } //if field CodigoPieza have value, then, validate if product exist var codepieceexist = await _context.Productos .Include(p => p.Unidades) .FirstOrDefaultAsync(p => p.Codigo == productoViewModel.CodigoPieza); if (codepieceexist == null) { ModelState.AddModelError("CodigoPieza", "Código de producto inexistente."); } else if (!codepieceexist.Activo) { ModelState.AddModelError("CodigoPieza", "Producto no disponible (ver detalle)."); } else { //validate that producto be piece if (codepieceexist.Unidades.Paquete) { ModelState.AddModelError("CodigoPieza", "El producto no puede ser caja."); } else { //validate package and piece be whole pieces if (productoViewModel.Unidades.Pieza) { if (!codepieceexist.Unidades.Pieza) { ModelState.AddModelError("CodigoPieza", "No coincide con la unidad del paquete."); } } //validate package and piece be bulk pieces else if (!productoViewModel.Unidades.Pieza) { if (codepieceexist.Unidades.Pieza) { ModelState.AddModelError("CodigoPieza", "No coincide con la unidad del paquete."); } } } } if (productoViewModel.CantidadProductoxPaquete == null || productoViewModel.CantidadProductoxPaquete <= 0) { ModelState.AddModelError("CantidadProductoxPaquete", "El campo Unidad es requerido"); } } } }