示例#1
0
        protected void imbAgregarDetalle_Click(object sender, ImageClickEventArgs e)
        {
            lblAviso.Text = "";
            int iIdProducto = MedDalProducto.idProducto;

            MedNeg.Usuarios.BlUsuarios oblUsuarios = new MedNeg.Usuarios.BlUsuarios();
            MedDAL.DAL.usuarios oUsuario = new MedDAL.DAL.usuarios();
            oUsuario = (MedDAL.DAL.usuarios)oblUsuarios.Buscar(int.Parse(Session["usuarioid"].ToString()));

            MedNeg.Productos.BlProductos oblProducto = new MedNeg.Productos.BlProductos();
            List<MedDAL.DAL.productos_almacen> lstProductosAlmacen = new List<MedDAL.DAL.productos_almacen>();
            lstProductosAlmacen.AddRange(oblProducto.ObtenerExistenciaProducto(iIdProducto, oUsuario.idAlmacen, ddlProductoLotes.SelectedValue, ddlProductoSeries.SelectedValue));

            string sRutaArchivoConfig = Server.MapPath("~/Archivos/Configuracion.xml");
            MedNeg.Configuracion.BlConfiguracion oblConfiguracion = new MedNeg.Configuracion.BlConfiguracion();
            MedDAL.Configuracion.DALConfiguracion objConfiguracion = new MedDAL.Configuracion.DALConfiguracion();
            objConfiguracion = (MedDAL.Configuracion.DALConfiguracion)oblConfiguracion.CargaDatos(sRutaArchivoConfig);

            decimal dCantidad = decimal.Parse(txbCantSurtida.Text);

            if (lstProductosAlmacen.Count != 0)
            {
                if ((lstProductosAlmacen[0].Cantidad >= dCantidad || (objConfiguracion.iVentasNegativas == 1 && lstProductosAlmacen[0].Cantidad < dCantidad)) && lstProductosAlmacen[0].FechaCaducidad.Value > DateTime.Today)
                {            
                    MedDAL.DAL.recetas_partida oRecetaPartida = new MedDAL.DAL.recetas_partida();
                    oRecetaPartida.idProducto = MedDalProducto.idProducto;
                    oRecetaPartida.idLineaCredito = int.Parse(cmbLineasCredito.SelectedValue);
                    oRecetaPartida.CantidadRecetada = decimal.Parse(txbCantRecetada.Text);
                    oRecetaPartida.CantidaSurtida = decimal.Parse(txbCantSurtida.Text);
                    oRecetaPartida.Precio = MedDalProducto.PrecioPublico;
                    oRecetaPartida.Lote = ddlProductoLotes.SelectedValue;
                    oRecetaPartida.NoSerie = ddlProductoSeries.SelectedValue;
                    oRecetaPartida.PrimeraIntencion = rdbIntencionPrimera.Checked;
                    oRecetaPartida.SegundaIntencion = rdbIntencionSegunda.Checked;

                    MedNeg.Causes.BlCauses oBLCauses = new MedNeg.Causes.BlCauses();
                    MedDAL.DAL.causes_cie oCausesCie = oBLCauses.BuscarCie(txbClaveCie.Text);
                    if (oCausesCie != null)
                    {
                        oRecetaPartida.Cause = true;
                        oRecetaPartida.idCausesCie = oCausesCie.idCauseCie;
                        oRecetaPartida.causes_cie = new MedDAL.DAL.causes_cie();
                        oRecetaPartida.causes_cie.Clave = oCausesCie.Clave;
                    }
                    else
                    {
                        oRecetaPartida.Cause = false;
                        oRecetaPartida.idCausesCie = null;
                    }
                    
                    //oRecetaPartida.Cause = rdbCauseSi.Checked;
                    oRecetaPartida.Factura = false;
                    oRecetaPartida.lineas_creditos = new MedDAL.DAL.lineas_creditos();
                    oRecetaPartida.lineas_creditos.Clave = cmbLineasCredito.SelectedItem.ToString();
                    oRecetaPartida.productos = new MedDAL.DAL.productos();
                    oRecetaPartida.productos.Nombre = txbProducto.Text;
                    oRecetaPartida.productos.Clave1 = txbClave.Text;
                    

                    if (lstProductosAlmacen[0].FechaCaducidad.Value <= DateTime.Today)
                    {
                        ScriptManager.RegisterStartupScript(upnForm, upnForm.GetType(), "alertstock", "alertarCaducidad(3);", true);
                    }
                    else if (lstProductosAlmacen[0].FechaCaducidad.Value <= DateTime.Today.AddDays(objConfiguracion.iCaducidad)) {
                        ScriptManager.RegisterStartupScript(upnForm, upnForm.GetType(), "alertstock", "alertarCaducidad(2);", true);
                    }
                    //else if (lstProductosAlmacen[0].FechaCaducidad.Value <= DateTime.Today) 
                    //{
                        
                    //}

                    /*Producto pTemp = new Producto(MedDalProducto, MedDalProducto.Clave1, MedDalProducto.Nombre,
                                              decimal.Parse(txbCantRecetada.Text),
                                              decimal.Parse(txbCantSurtida.Text),
                                              ddlProductoLotes.SelectedValue,
                                              ddlProductoSeries.SelectedValue,
                                              (decimal)0,
                                              //decimal.Parse(ddlPrecios.SelectedItem.Text),
                                              rdbIntencionPrimera.Checked ? 1 : 2,
                                              rdbCauseSi.Checked,
                                              blRecetas.buscarLineaCredito(idAlmacen, MedDalProducto.idProducto, ddlProductoSeries.SelectedValue, ddlProductoLotes.SelectedValue)
                                              );*/
                    if (estadoActual == 2)
                    {
                        ((List<MedDAL.DAL.recetas_partida>)Session["lstrecetaspartidaedicion"]).Add(oRecetaPartida);
                        
                        int iContador = ((List<MedDAL.DAL.recetas_partida>)Session["lstrecetaspartida"]).Count + 1 - ((List<MedDAL.DAL.recetas_partida>)Session["lstrecetaspartidaedicion"]).Count;
                        int i = 0;

                        foreach (GridViewRow oRow in dgvPartidaDetalle.Rows)
                        {
                            oRow.Cells[9].Controls.Clear();
                            i++;
                            if (i == iContador) break;
                        }                                            
                    }
                    ((List<MedDAL.DAL.recetas_partida>)Session["lstrecetaspartida"]).Add(oRecetaPartida);
                    dgvPartidaDetalle.DataBind();
                    //GT 14-10-2011 0578 Aqui es el lugar correcto donde se debe de limpiar el txbCantidadSurtida y no en los eventos text_changed de clave o producto por que la función inicializaGuiPartida va a borrar lo que el usuario capturo en el textbox de cantidad surtida, por eso se comenta esa linea en la funcion y se pone aqui
                    inicializaGuiPartida(true, true);
                    txbCantSurtida.Text = "0";
                    txbCantRecetada.Text = "0";
                }
                else if (objConfiguracion.iVentasNegativas == 0 && lstProductosAlmacen[0].Cantidad < dCantidad)
                {
                    ScriptManager.RegisterStartupScript(upnForm, upnForm.GetType(), "alertstock", "alertarStock(2);", true);
                }
                else if (lstProductosAlmacen[0].FechaCaducidad.Value <= DateTime.Today) 
                {
                    ScriptManager.RegisterStartupScript(upnForm, upnForm.GetType(), "alertstock", "alertarCaducidad(3);", true);
                }
            }
        }
示例#2
0
        protected void imbAgregarDetalle_Click(object sender, ImageClickEventArgs e)
        {
            lblAviso.Text = "";
            //Evitar mandar valores nullos para las conversiones
            decimal dCantidad, dIeps, dImp1 = 0, dImp2 = 0, dIva, dPrecio, dTotal;
            bool bEsEnsamble;

            if (txbCant.Text.Equals(""))
                dCantidad = 0;
            else
                dCantidad = int.Parse(txbCant.Text);

            //Calcular el total
            dPrecio = decimal.Parse(cmbPrecios.SelectedValue);
            dTotal = dCantidad * dPrecio;

            //IEPS
            if (txbIeps.Text.Equals(""))
                dIeps = 0;
            else
                dIeps = dTotal * (decimal.Parse(txbIeps.Text) / 100);

            ////Imp1
            //if (txbImp1.Text.Equals(""))
            //    dImp1 = 0;
            //else
            //    dImp1 = dTotal * (decimal.Parse(txbImp1.Text) / 100);

            /////Imp2
            //if (txbImp2.Text.Equals(""))
            //    dImp2 = 0;
            //else
            //    dImp2 = dTotal * (decimal.Parse(txbImp2.Text) / 100);

            ///Iva
            if (txbIva.Text.Equals(""))
                dIva = 0;
            else
                dIva = dTotal * (decimal.Parse(txbIva.Text) / 100);


            //Agregar los impuestos al total
            dTotal += dIeps + dImp1 + dImp2 + dIva;

            //Recuperar el id del producto para ya tenerlo en la lista
            MedNeg.Productos.BlProductos oblProducto = new MedNeg.Productos.BlProductos();
            int iIdProducto = oblProducto.RecuperarIdProducto(txbClave.Text);

            MedNeg.Usuarios.BlUsuarios oblUsuarios = new MedNeg.Usuarios.BlUsuarios();
            MedDAL.DAL.usuarios oUsuario = new MedDAL.DAL.usuarios();
            oUsuario = (MedDAL.DAL.usuarios)oblUsuarios.Buscar(int.Parse(Session["usuarioid"].ToString()));

            List<MedDAL.DAL.productos_almacen> lstProductosAlmacen = new List<MedDAL.DAL.productos_almacen>();
            lstProductosAlmacen.AddRange(oblProducto.ObtenerExistenciaProducto(iIdProducto, oUsuario.idAlmacen));

            string sRutaArchivoConfig = Server.MapPath("~/Archivos/Configuracion.xml");
            MedNeg.Configuracion.BlConfiguracion oblConfiguracion = new MedNeg.Configuracion.BlConfiguracion();
            MedDAL.Configuracion.DALConfiguracion objConfiguracion = new MedDAL.Configuracion.DALConfiguracion();
            objConfiguracion = (MedDAL.Configuracion.DALConfiguracion)oblConfiguracion.CargaDatos(sRutaArchivoConfig);
            
            if (lstProductosAlmacen.Count != 0)
            {
                if (lstProductosAlmacen[0].Cantidad >= dCantidad || (objConfiguracion.iVentasNegativas == 1 && lstProductosAlmacen[0].Cantidad < dCantidad))
                {
                    if ((int)Session["sBolEsEnsamble"] == 1)
                        bEsEnsamble = true;
                    else
                        bEsEnsamble = false;

                    //Crear el objeto ya con sus parametros
                    oblDetallePartida = new MedNeg.Facturas.BlDetallePartida(
                        iIdProducto,
                        txbClave.Text,
                        txbProducto.Text,
                        dCantidad,
                        dIeps,
                        //dImp1,
                        //dImp2,
                        dIva,
                        dPrecio,
                        txbObservaciones.Text,
                        dTotal,
                        txbProducto.Text,
                        bEsEnsamble);

                    //Agregar el objeto detalle partida al objeto lstDetallePartidaPedidos
                    ((List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartidaPedidos"]).Add(oblDetallePartida);
                    Session["sTotalFactura"] = Convert.ToDecimal(Session["sTotalFactura"]) + dTotal;
                    lblTotal.Text = "TOTAL:$" + Session["sTotalFactura"].ToString();
                    dgvPartidaDetalle.DataBind();
                    LimpiarDatosDetalle();
                    txbClave.Focus();
                }
                else if (objConfiguracion.iVentasNegativas == 0 && lstProductosAlmacen[0].Cantidad < dCantidad)
                {
                    lblAviso.Text = "El producto que desea agregar no cuenta con suficientes existencias";
                }
            }
        }
        /// <summary>
        /// Registrar nuevo pedido
        /// </summary>
        private void Nuevo()
        {

            string sRutaArchivoConfig=Server.MapPath("~/Archivos/Configuracion.xml");

            oRemision = new MedDAL.DAL.remisiones();
            oblRemision = new MedNeg.Remisiones.BlRemisiones();

            if (Session["sIdCliente"] != null)
            {
                oRemision.idCliente = (int)Session["sIdCliente"];
                oRemision.Fecha = DateTime.Now;
                oRemision.Estatus = cmbEstatus.SelectedValue;

                //Validar Folio Repetido
                if (ValidaFolioRepetido())
                {

                    //Validar si se esta respetando el folio automatico y verificar si aun es el mismo o cambio su valor
                    if (Session["iFolioAutomatico"].Equals(txbFolio.Text))
                    {
                        oRemision.Folio = oblRemision.RecuperaFolioAutomatico(sRutaArchivoConfig).ToString();
                    }
                    else
                    {
                        oRemision.Folio = txbFolio.Text;
                    }

                    if ((bool)Session["sEsDePedido"] == true)
                    {
                        oRemision.idPedido = (int)Session["sIdPedido"];
                    }

                    if (oblRemision.NuevoRegistro(oRemision))
                    {
                        //Datos de la bitacora
                        string sDatosBitacora = string.Empty;
                        sDatosBitacora += "Tipo:" + cmbTipoRemision.SelectedValue.ToString() + " ";
                        sDatosBitacora += "Folio:" + txbFolio.Text + " ";
                        sDatosBitacora += "Fecha:" + txbFecha.Text + " ";
                        sDatosBitacora += "Estatus:" + cmbEstatus.SelectedItem.ToString() + " ";
                        sDatosBitacora += "Cliente:" + txbCliente.Text + " ";


                        // Registrar la partida de la remision
                        oRemision = new MedDAL.DAL.remisiones();
                        oRemision = oblRemision.BuscarRemisionFolio(txbFolio.Text);
                        int iIdRemision = oRemision.idRemision;
                        bool bRegistroFallido = false;

                        //Recorrer el objeto de sesion lstDetallePartida que contiene los datos de la partida
                        foreach (MedNeg.Facturas.BlDetallePartida pedidoDetalle in (List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartida"])
                        {

                            //0087 Saber si es un ensamble el que se esta registrando
                            if (pedidoDetalle.bEsEnsamble == true)
                            {
                                AgregarDetalleEnsamble(pedidoDetalle, iIdRemision);
                            }
                            else
                            {
                                oblRemision = new MedNeg.Remisiones.BlRemisiones();
                                MedDAL.DAL.remisiones_partida oRemisionPartida = new MedDAL.DAL.remisiones_partida();

                                oRemisionPartida.idRemision = iIdRemision;
                                oRemisionPartida.idProducto = pedidoDetalle.iIdProducto;
                                oRemisionPartida.Cantidad = pedidoDetalle.dCantidad;
                                oRemisionPartida.IEPS = pedidoDetalle.dIeps;
                                oRemisionPartida.Iva = pedidoDetalle.dIva;
                                oRemisionPartida.Precio = pedidoDetalle.dPrecio;
                                oRemisionPartida.Observaciones = pedidoDetalle.sObservaciones;
                                oRemisionPartida.Descripcion = pedidoDetalle.sDescripcion;

                                //Registrar el detalle del pedido
                                if (!oblRemision.NuevoDetallePartida(oRemisionPartida))
                                {
                                    bRegistroFallido = true;
                                }
                                else
                                {
                                    sDatosBitacora += "Producto:" + pedidoDetalle.iIdProducto.ToString() + " ";
                                    sDatosBitacora += "Cant:" + pedidoDetalle.dCantidad.ToString() + " ";
                                    sDatosBitacora += "IEPS:" + pedidoDetalle.dIeps.ToString() + " ";
                                    sDatosBitacora += "Iva:" + pedidoDetalle.dIva.ToString() + " ";
                                    sDatosBitacora += "Precio:" + pedidoDetalle.dPrecio.ToString() + " ";
                                    sDatosBitacora += "Total:" + Convert.ToDecimal((pedidoDetalle.dCantidad * pedidoDetalle.dPrecio) + pedidoDetalle.dIeps + pedidoDetalle.dIva) + ", ";
                                }


                            }
                        }


                        if (!bRegistroFallido)
                        {
                            //Registrar datos de la remision en la bitacora
                            //lblAviso.Text = "El usuario se ha registrado con éxito";
                            oBitacora = new MedDAL.DAL.bitacora();
                            oblBitacora = new MedNeg.Bitacora.BlBitacora();
                            oBitacora.FechaEntradaSrv = DateTime.Now;
                            oBitacora.FechaEntradaCte = DateTime.Now;//Linea Temporal
                            oBitacora.Modulo = "Remisiones";
                            oBitacora.Usuario = Session["usuario"].ToString();
                            oBitacora.Nombre = Session["nombre"].ToString();
                            oBitacora.Accion = "Nueva Remisión";
                            oBitacora.Descripcion = sDatosBitacora;
                            if (!oblBitacora.NuevoRegistro(oBitacora))
                            {
                                lblDatos.Text = "El evento no pudo ser registrado en la bitácora";
                            }

                            //Actualizar el consecutivo en configuracion (la validacion de si esta activa o no la opcion se hace dentro de la misma funcion)
                            oblRemision.ActualizarFolioRemision(sRutaArchivoConfig);
                            Session["sIdCliente"] = null;

                            if ((bool)Session["sEsDePedido"] == true)
                            {
                                //Actualizar el estatus del pedido en caso de que se haya hecho la remision a partir de un pedido
                                MedDAL.DAL.pedidos oPedido = new MedDAL.DAL.pedidos();
                                MedNeg.Pedidos.BlPedidos oblPedido = new MedNeg.Pedidos.BlPedidos();

                                //Actualizar el estatus del pedido
                                oPedido = oblPedido.BuscarPedido((int)Session["sIdPedido"]);
                                oPedido.Estatus = "2";

                                if (!oblPedido.EditarRegistro(oPedido))
                                {
                                    lblDatos.Text = "No se pudo cambiar el estatus del pedido, contacte al administrador";
                                }
                            }

                            /******* Realizar la resta de las existencias ***********/

                            MedNeg.Productos.BlProductos oblProductos = new MedNeg.Productos.BlProductos();
                            MedNeg.Usuarios.BlUsuarios oblUsuario = new MedNeg.Usuarios.BlUsuarios();
                            MedDAL.DAL.usuarios oUsuario = new MedDAL.DAL.usuarios();


                            oUsuario = (MedDAL.DAL.usuarios)oblUsuario.Buscar(Session["usuario"].ToString());

                            MedNeg.Remisiones.BlRemisiones oblRemisiones;
                            bool bModificarExistenciasError = false;
                            bool bStockMin = false;

                            //Recorrer el objeto de sesion lstDetallePartida que contiene los datos de la partida
                            //Checar la existencia del producto despues de extraer la cantidad marcada en el detalle y alertar en caso necesario sobre stock bajo
                            foreach (MedNeg.Facturas.BlDetallePartida oPedidoDetalle in (List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartida"])
                            {
                                oblRemisiones = new MedNeg.Remisiones.BlRemisiones();
                                if (!oblRemisiones.ModificarExistenciaProducto(oUsuario.idAlmacen, oPedidoDetalle.iIdProducto, oPedidoDetalle.dCantidad, 1))
                                    bModificarExistenciasError = true;
                                else
                                {
                                    //Si el proceso de extraer se da exitosamente, se revisa ahora las existencias de todos los lotes de ese almacen
                                    //Posteriormente se revisa si la existencia esta por igual o debajo del Stock Minimo requerido
                                    decimal dCantidad = 0;
                                    foreach (MedDAL.DAL.productos_almacen oProductoAlmacen in oblProductos.ObtenerExistenciaProducto(oPedidoDetalle.iIdProducto, oUsuario.idAlmacen))
                                    {
                                        dCantidad += oProductoAlmacen.Cantidad;
                                    }

                                    MedDAL.DAL.productos_almacen_stocks oProductoAlmacenStocks = oblProductos.ObtenerProductoAlmacenStock(oUsuario.idAlmacen, oPedidoDetalle.iIdProducto);
                                    if (dCantidad <= oProductoAlmacenStocks.StockMin)
                                    {
                                        bStockMin = true;
                                    }
                                }
                            }

                            if (bModificarExistenciasError == true)
                            {
                                lblDatos.Text = "No se pudo modificar la existencia de los productos, por favor contacte al administrador";
                            }
                            if (bStockMin)
                            {
                                ScriptManager.RegisterStartupScript(pnlFormulario, pnlFormulario.GetType(), "alertstock", "alertarStock(1);", true);
                            }
                            /****** Termina resta de las existencias ***************************/
                            Session["sTotalFactura"] = 0;
                        }
                        else
                        {
                            //Eliminar la remisión, su partida e indicar al usuario que lo intente de nuevo, limpiar la cadena de bitacora
                            Eliminar(iIdRemision);
                            sDatosBitacora = "";
                            lblDatos.Text = "No se pudo registrar la remisión, por favor verifique los datos y vuelva a intentarlo";
                        }

                    }
                    else
                    {
                        //Fallo esl registro de la remisión
                        lblDatos.Text = "No se pudo registrar la remisión, por favor verifique los datos y vuelva a intentarlo";
                    }

                }
                else  //si es folio repetido
                {
                    lblDatos.Text = "Folio Repetido, no se puede generar la remisión.";

                }
            }
            else
            {
                lblDatos.Text = "Por favor, elija a un Cliente";
            }
        }
        /// <summary>
        /// Editar
        /// </summary>
        private void Editar()
        {
            oRemision = new MedDAL.DAL.remisiones();
            oblRemision = new MedNeg.Remisiones.BlRemisiones();
            //oRemision.idRemision = int.Parse(dgvDatos.SelectedDataKey.Value.ToString());
            oRemision = oblRemision.BuscarRemisionFolio(txbFolio.Text);
            oRemision.Estatus = cmbEstatus.SelectedValue.ToString();

            oblRemision = new MedNeg.Remisiones.BlRemisiones();
            if(oblRemision.EditarRegistro(oRemision))
            {
                //Datos de la bitacora
                sDatosBitacora += "Tipo:" + cmbTipoRemision.SelectedValue.ToString() + " ";
                sDatosBitacora += "Folio:" + txbFolio.Text + " ";
                sDatosBitacora += "Fecha:" + txbFecha.Text + " ";
                sDatosBitacora += "Estatus:" + cmbEstatus.SelectedItem.ToString() + " ";
                sDatosBitacora += "Cliente:" + txbCliente.Text + " ";

                oblRemision = new MedNeg.Remisiones.BlRemisiones();
                if (oblRemision.EliminarRemisionPartida(oRemision.idRemision))
                {
                    bool bRegistroFallido = false;

                    //Recorrer el objeto de sesion lstDetallePartida que contiene los datos de la partida
                    foreach (MedNeg.Facturas.BlDetallePartida pedidoDetalle in (List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartida"])
                    {
                        //Saber si es un ensamble el que se esta registrando
                        if (pedidoDetalle.bEsEnsamble == true)
                        {
                            AgregarDetalleEnsamble(pedidoDetalle, oRemision.idRemision);
                        }
                        else
                        {

                            oblRemision = new MedNeg.Remisiones.BlRemisiones();
                            MedDAL.DAL.remisiones_partida oRemisionPartida = new MedDAL.DAL.remisiones_partida();

                            oRemisionPartida.idRemision = oRemision.idRemision;
                            oRemisionPartida.idProducto = pedidoDetalle.iIdProducto;
                            oRemisionPartida.Cantidad = pedidoDetalle.dCantidad;
                            oRemisionPartida.IEPS = pedidoDetalle.dIeps;
                            oRemisionPartida.Iva = pedidoDetalle.dIva;
                            oRemisionPartida.Precio = pedidoDetalle.dPrecio;

                            //Registrar el detalle del pedido
                            if (!oblRemision.NuevoDetallePartida(oRemisionPartida))
                            {
                                bRegistroFallido = true;
                            }
                            else
                            {
                                sDatosBitacora += "Producto:" + pedidoDetalle.iIdProducto.ToString() + " ";
                                sDatosBitacora += "Cant:" + pedidoDetalle.dCantidad.ToString() + " ";
                                sDatosBitacora += "IEPS:" + pedidoDetalle.dIeps.ToString() + " ";
                                sDatosBitacora += "Iva:" + pedidoDetalle.dIva.ToString() + " ";
                                sDatosBitacora += "Precio:" + pedidoDetalle.dPrecio.ToString() + " ";
                                sDatosBitacora += "Total:" + Convert.ToDecimal((pedidoDetalle.dCantidad * pedidoDetalle.dPrecio) + pedidoDetalle.dIeps + pedidoDetalle.dIva) + ", ";

                           }
                        }
                    }

                    /****** GT: Modificar las existencias de los productos nuevos ***************/

                    MedNeg.Usuarios.BlUsuarios oblUsuario = new MedNeg.Usuarios.BlUsuarios();
                    MedNeg.Productos.BlProductos oblProductos = new MedNeg.Productos.BlProductos();
                    MedDAL.DAL.usuarios oUsuario = new MedDAL.DAL.usuarios();

                    bool bModificarExistenciasError = false;
                    bool bStockMin = false;

                    oUsuario = (MedDAL.DAL.usuarios)oblUsuario.Buscar(Session["usuario"].ToString());

                    oblRemision = new MedNeg.Remisiones.BlRemisiones();
                    foreach (MedNeg.Facturas.BlDetallePartida remisionDetalleNuevos in (List<MedNeg.Facturas.BlDetallePartida>)Session["lstremisionespartidaedicion"])
                    {
                        if (oblRemision.ModificarExistenciaProducto(oUsuario.idAlmacen, remisionDetalleNuevos.iIdProducto, remisionDetalleNuevos.dCantidad, 1))
                        {
                            //Si el proceso de extraer se da exitosamente, se revisa ahora las existencias de todos los lotes de ese almacen
                            //Posteriormente se revisa si la existencia esta por igual o debajo del Stock Minimo requerido
                            decimal dCantidad = 0;
                            foreach (MedDAL.DAL.productos_almacen oProductoAlmacen in oblProductos.ObtenerExistenciaProducto(remisionDetalleNuevos.iIdProducto, oUsuario.idAlmacen))
                            {
                                dCantidad += oProductoAlmacen.Cantidad;
                            }

                            MedDAL.DAL.productos_almacen_stocks oProductoAlmacenStocks = oblProductos.ObtenerProductoAlmacenStock(oUsuario.idAlmacen, remisionDetalleNuevos.iIdProducto);
                            if (dCantidad <= oProductoAlmacenStocks.StockMin)
                            {
                                bStockMin = true;
                            }
                        }
                        else 
                        {
                            bModificarExistenciasError = true;
                        }
                    }
                    if (bModificarExistenciasError == true)
                    {
                        lblDatos.Text = "No se pudo modificar la existencia de los productos, por favor contacte al administrador";
                    }

                    if (bStockMin)
                    {
                        ScriptManager.RegisterStartupScript(pnlFormulario, pnlFormulario.GetType(), "alertstock", "alertarStock(1);", true);
                    }

                    /****** GT: Modificar las existencias de los productos nuevos ***************/

                    //Anotar en la bitacora la modificación a la remision
                    oBitacora = new MedDAL.DAL.bitacora();
                    oblBitacora = new MedNeg.Bitacora.BlBitacora();
                    oBitacora.FechaEntradaSrv = DateTime.Now;
                    oBitacora.FechaEntradaCte = DateTime.Now;//Linea Temporal
                    oBitacora.Modulo = "Remisiones";
                    oBitacora.Usuario = Session["usuario"].ToString();
                    oBitacora.Nombre = Session["nombre"].ToString();
                    oBitacora.Accion = "Edición de Remision";
                    oBitacora.Descripcion = sDatosBitacora;
                    if (!oblBitacora.NuevoRegistro(oBitacora))
                    {
                        //lblAviso2.Text = "El evento no pudo ser registrado en la bitácora";
                    }
                    Session["sTotalFactura"] = 0;
                }

                
            }

        }
        /// <summary>
        /// Agregar detalle a la partida
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void imbAgregarDetalle_Click(object sender, ImageClickEventArgs e)
        {
            lblAviso.Text = "";
            //Evitar mandar valores nullos para las conversiones
            //int iCantidad;
            decimal dCantidad,dIeps, dImp1=0, dImp2=0, dIva, dPrecio, dTotal;

            if (txbCant.Text.Equals(""))
                dCantidad = 0;
            else
                dCantidad = int.Parse(txbCant.Text);

            //Calcular el total
            dPrecio = decimal.Parse(cmbPrecios.SelectedValue);
            dTotal = dCantidad * dPrecio;

            //IEPS
            if (txbIeps.Text.Equals(""))
                dIeps = 0;
            else
                dIeps = dTotal * (decimal.Parse(txbIeps.Text) / 100);

            ////Imp1
            //if (txbImp1.Text.Equals(""))
            //    dImp1 = 0;
            //else
            //    dImp1 = dTotal * (decimal.Parse(txbImp1.Text) / 100);

            /////Imp2
            //if (txbImp2.Text.Equals(""))
            //    dImp2 = 0;
            //else
            //    dImp2 = dTotal * (decimal.Parse(txbImp2.Text) / 100);

            ///Iva
            if (txbIva.Text.Equals(""))
                dIva = 0;
            else
                dIva = dTotal * (decimal.Parse(txbIva.Text) / 100);


            //Agregar los impuestos al total
            dTotal += dIeps + dImp1 + dImp2 + dIva;

            //Recuperar el id del producto para ya tenerlo en la lista
            MedNeg.Productos.BlProductos oblProducto = new MedNeg.Productos.BlProductos();
            int iIdProducto = oblProducto.RecuperarIdProducto(txbClave.Text);

            MedNeg.Usuarios.BlUsuarios oblUsuarios = new MedNeg.Usuarios.BlUsuarios();
            MedDAL.DAL.usuarios oUsuario = new MedDAL.DAL.usuarios();
            oUsuario = (MedDAL.DAL.usuarios)oblUsuarios.Buscar(int.Parse(Session["usuarioid"].ToString()));

            List<MedDAL.DAL.productos_almacen> lstProductosAlmacen = new List<MedDAL.DAL.productos_almacen>();
            lstProductosAlmacen.AddRange(oblProducto.ObtenerExistenciaProducto(iIdProducto, oUsuario.idAlmacen));

            string sRutaArchivoConfig = Server.MapPath("~/Archivos/Configuracion.xml");
            MedNeg.Configuracion.BlConfiguracion oblConfiguracion = new MedNeg.Configuracion.BlConfiguracion();
            MedDAL.Configuracion.DALConfiguracion objConfiguracion = new MedDAL.Configuracion.DALConfiguracion();
            objConfiguracion = (MedDAL.Configuracion.DALConfiguracion)oblConfiguracion.CargaDatos(sRutaArchivoConfig);

            if (lstProductosAlmacen.Count != 0)
            {
                if (lstProductosAlmacen[0].Cantidad >= dCantidad || (objConfiguracion.iVentasNegativas == 1 && lstProductosAlmacen[0].Cantidad < dCantidad) || lstProductosAlmacen[0].FechaCaducidad.Value > DateTime.Today)
                {
                    // 0087 Datos del ensamble
                    bool bEsEnsamble;
                    if ((int)Session["sBolEsEnsamble"] == 1)
                        bEsEnsamble = true;
                    else
                        bEsEnsamble = false;

                    //Crear el objeto ya con sus parametros
                    oblDetallePartida = new MedNeg.Facturas.BlDetallePartida(
                        iIdProducto,
                        txbClave.Text,
                        txbProducto.Text,
                        dCantidad,
                        dIeps,
                        //dImp1,
                        //dImp2,
                        dIva,
                        dPrecio,
                        txbObservaciones.Text,
                        dTotal,
                        txbProducto.Text, // 0087 Datos del ensamble
                        bEsEnsamble); // 0087 Datos del ensamble

                    //Agregar el objeto detalle partida al objeto lstDetallePartida
                    ((List<MedNeg.Facturas.BlDetallePartida>)Session["lstDetallePartida"]).Add(oblDetallePartida);
                    dgvPartidaDetalle.DataBind();

                    //GT: Agregar los nuevos detalles a una lista alterna para poder modificar sus existencias sin duplicar las de los productos ya existentes
                    if ((int)Session["accion"] == 2)
                        ((List<MedNeg.Facturas.BlDetallePartida>)Session["lstremisionespartidaedicion"]).Add(oblDetallePartida);



                    Session["sTotalFactura"] = Convert.ToDecimal(Session["sTotalFactura"]) + dTotal;
                    lblTotal.Text = "TOTAL:$" + Session["sTotalFactura"].ToString();
                    LimpiarDatosDetalle();
                    txbClave.Focus();

                    if (lstProductosAlmacen[0].FechaCaducidad.Value <= DateTime.Today.AddDays(objConfiguracion.iCaducidad))
                    {
                        ScriptManager.RegisterStartupScript(pnlFormulario, pnlFormulario.GetType(), "alertstock", "alertarCaducidad(2);", true);
                    }
                }
                else if (objConfiguracion.iVentasNegativas == 0 && lstProductosAlmacen[0].Cantidad < dCantidad)
                {
                    ScriptManager.RegisterStartupScript(pnlFormulario, pnlFormulario.GetType(), "alertstock", "alertarStock(2);", true);  
                }
                else if (lstProductosAlmacen[0].FechaCaducidad.Value <= DateTime.Today)
                {
                    ScriptManager.RegisterStartupScript(pnlFormulario, pnlFormulario.GetType(), "alertstock", "alertarCaducidad(3);", true);
                }
            }
        }