private bool Validar() { try { txtIdNumMoviDestino.Focus(); gvDetalle.MoveNext(); if (cmbSucursalOrigen.EditValue == null) { MessageBox.Show("El campo sucursal origen es obligatorio", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } if (cmbBodegaOrigen.EditValue == null) { MessageBox.Show("El campo bodega origen es obligatorio", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } if (cmbSucursalDestino.EditValue == null) { MessageBox.Show("El campo sucursal destino es obligatorio", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } if (cmbBodegaDestino.EditValue == null) { MessageBox.Show("El campo bodega destino es obligatorio", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } if (blstDetalle.Count == 0) { MessageBox.Show("Debe seleccionar al menos un producto a ser transferido", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } foreach (var item in blstDetalle) { if (item.dt_cantidad == 0) { MessageBox.Show("No se ha ingresado la cantidad a transferir para el producto: " + item.pr_descripcion, param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } if (string.IsNullOrEmpty(item.IdUnidadMedida)) { MessageBox.Show("No se ha ingresado la unidad de medida para el producto: " + item.pr_descripcion, param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } if (string.IsNullOrEmpty(item.pr_descripcion)) { MessageBox.Show("Existen productos sin descripción", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } } if (chkGenerarGuia.Checked) { if (blstDetalle.Where(q => q.EnviarEnGuia == true).Count() == 0) { MessageBox.Show("No ha seleccionado productos para enviar en la guia", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } if (string.IsNullOrEmpty(txtDireccionOrigen.Text)) { MessageBox.Show("El campo punto de partida es obligatorio", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } if (string.IsNullOrEmpty(txtDireccionDestino.Text)) { MessageBox.Show("El campo punto de llegada es obligatorio", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } if (string.IsNullOrEmpty(txtIdentificacion.Text)) { MessageBox.Show("El campo identifiación es obligatorio", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } if (string.IsNullOrEmpty(txtDestinatario.Text)) { MessageBox.Show("El campo destinatario es obligatorio", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } if (cmbTransportista.EditValue == null) { MessageBox.Show("El campo transportista es obligatorio", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } if (string.IsNullOrEmpty(txtPlaca.Text)) { MessageBox.Show("El campo placa es obligatorio", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } if (cmbMotivo.EditValue == null) { MessageBox.Show("El campo motivo es obligatorio", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } } if (infoParam.Maneja_Stock_Negativo == "N") { #region ValidarStock /* * var lst = blstDetalle.Where(Q => Q.IdProducto != null).GroupBy(q => new { q.IdProducto, q.pr_descripcion }).Select(Q => new * { * IdProducto = Q.Key.IdProducto, * pr_descripcion = Q.Key.pr_descripcion, * Cantidad = Q.Sum(q => q.dt_cantidad), * CantidadAnterior = Q.Sum(q => q.CantidadAnterior) * }); */ var lst = blstDetalle.Where(Q => Q.IdProducto != null).GroupBy(q => new { q.IdProducto, q.pr_descripcion, q.IdUnidadMedida }).Select(Q => new { IdProducto = Q.Key.IdProducto, pr_descripcion = Q.Key.pr_descripcion, Cantidad = busUnidadMedida.GetCantidadConvertida(param.IdEmpresa, Q.Key.IdProducto ?? 0, Q.Key.IdUnidadMedida, Q.Sum(q => q.dt_cantidad)), CantidadAnterior = busUnidadMedida.GetCantidadConvertida(param.IdEmpresa, Q.Key.IdProducto ?? 0, Q.Key.IdUnidadMedida, Q.Sum(q => q.CantidadAnterior)) }); lst = lst.Where(Q => Q.IdProducto != null).GroupBy(q => new { q.IdProducto, q.pr_descripcion }).Select(Q => new { IdProducto = Q.Key.IdProducto, pr_descripcion = Q.Key.pr_descripcion, Cantidad = Q.Sum(q => q.Cantidad), CantidadAnterior = Q.Sum(q => q.CantidadAnterior) }); string pr_descripcion = string.Empty; foreach (var item in lst) { pr_descripcion = string.Empty; if (!busProducto.ValidarStock(param.IdEmpresa, Convert.ToInt32(cmbSucursalOrigen.EditValue), Convert.ToInt32(cmbBodegaOrigen.EditValue), item.IdProducto ?? 0, item.Cantidad, item.CantidadAnterior, ref pr_descripcion)) { MessageBox.Show("El producto " + pr_descripcion + " no tiene stock suficiente para la transferencia.", param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } } #endregion } if (Accion == Cl_Enumeradores.eTipo_action.grabar && infoParam.P_ValidarDiasHaciaAtras != null && infoParam.P_ValidarDiasHaciaAtras != 0) { // Difference in days, hours, and minutes. TimeSpan ts = deFecha.DateTime.Date - DateTime.Now.Date; int differenceInDays = ts.Days; if (differenceInDays < infoParam.P_ValidarDiasHaciaAtras) { MessageBox.Show("No se puede registrar una transacción anterior a los dias permitidos de atraso\nDias de atraso permitidos: " + infoParam.P_ValidarDiasHaciaAtras.ToString(), param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } } #region ValidacionProductoPorBodega in_ProductoPor_tb_bodega_Bus busProductoPorBodega = new in_ProductoPor_tb_bodega_Bus(); string mensajeValidacion = string.Empty; List <decimal> ListaProducto = blstDetalle.GroupBy(q => q.IdProducto ?? 0).Select(q => q.Key).ToList(); string Retorno = busProductoPorBodega.Validar(param.IdEmpresa, Convert.ToInt32(cmbSucursalOrigen.EditValue), Convert.ToInt32(cmbBodegaOrigen.EditValue), ListaProducto); string Retorno2 = busProductoPorBodega.Validar(param.IdEmpresa, Convert.ToInt32(cmbSucursalDestino.EditValue), Convert.ToInt32(cmbBodegaDestino.EditValue), ListaProducto); Retorno += string.IsNullOrEmpty(Retorno2) ? "" : ("\n" + Retorno2); if (!string.IsNullOrEmpty(Retorno)) { mensajeValidacion += (string.IsNullOrEmpty(mensajeValidacion) ? "" : "\n") + Retorno; } if (!string.IsNullOrEmpty(mensajeValidacion)) { MessageBox.Show(mensajeValidacion, param.Nombre_sistema, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return(false); } #endregion return(true); } catch (Exception ex) { busLogError.Log_Error(ex.ToString()); MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } }