示例#1
0
        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);
            }
        }