示例#1
0
        public Decimal guardarAjusteEquipo(String tipo, String idRegional, String idCiudad, int idEmpresa, int idProducto, int idEquipo, String talla, int idLote, int CantidadMod, Decimal costo, String Motivo)
        {
            Decimal idDoc = 0;
            DateTime fecha;
            Decimal idInventario = 0;

            fecha = System.DateTime.Today;
            Conexion _dato = new Conexion(Empresa);
            _dato.IniciarTransaccion();

            documento _doc = new documento(Empresa, Usuario);
            idDoc = _doc.AdicionarAlmDocumentos(0, 0, "AJUSTE", "", "", fecha, new DateTime(), 0, 0, 0, "", Motivo, _dato, 0, null);
            if (idDoc != 0)
            {
                bodega _bodega = new bodega(Empresa, Usuario);
                DataTable tablaBodega = _bodega.ObtenerAlmRegBodegaPorIds(idRegional, idCiudad, idEmpresa);
                DataRow filaBodega = tablaBodega.Rows[0];

                lote _lote = new lote(Empresa, Usuario);
                DataTable tablaLote = _lote.ObtenerAlmLotePorId(idLote, _dato);
                DataRow filalote = tablaLote.Rows[0];
                if (tipo.Equals("COSTO"))
                {
                    idInventario = AdicionarAlmInventario(Convert.ToInt32(idDoc), idProducto, Convert.ToInt32(filaBodega["ID_BODEGA"].ToString()), 0, costo, fecha, "MODIFICACION", _dato, idLote, talla, idEquipo, 0, null, filalote["REEMBOLSO"].ToString());
                    if (idInventario == 0)
                    {
                        _dato.DeshacerTransaccion();

                    }
                    else
                    {
                        if (_lote.ActualizarAlmLote(idLote, Convert.ToInt32(idDoc), idProducto, Convert.ToInt32(filalote["ID_BODEGA"].ToString()), Convert.ToDateTime(filalote["FECHA_REGISTRO"]), Convert.ToInt32(filalote["ENTRADAS"]), Convert.ToInt32(filalote["SALIDAS"]), costo, talla, "S", _dato))
                        {
                            _dato.AceptarTransaccion();
                        }
                        else
                        {
                            _dato.DeshacerTransaccion();
                            MensajeError += _lote.MensajeError;
                        }
                    }
                }
                else if (tipo.Equals("ENTRADA"))
                {
                    int contenido;
                    contenido = Convert.ToInt32(filalote["ENTRADAS"].ToString()) - Convert.ToInt32(filalote["SALIDAS"].ToString());
                    contenido = CantidadMod - contenido;

                    idInventario = AdicionarAlmInventario(Convert.ToInt32(idDoc), idProducto, Convert.ToInt32(filaBodega["ID_BODEGA"].ToString()), contenido, 0, fecha, "ENTRADA", _dato, idLote, talla, idEquipo, 0, null, filalote["REEMBOLSO"].ToString());

                    if (idInventario == 0)
                    {
                        _dato.DeshacerTransaccion();

                    }
                    else
                    {
                        if (_lote.ActualizarAlmLote(idLote, Convert.ToInt32(idDoc), idProducto, Convert.ToInt32(filalote["ID_BODEGA"].ToString()), Convert.ToDateTime(filalote["FECHA_REGISTRO"]), Convert.ToInt32(filalote["ENTRADAS"].ToString()) + contenido, Convert.ToInt32(filalote["SALIDAS"]), Convert.ToDecimal(filalote["COSTO"].ToString()), talla, "S", _dato))
                        {
                            _dato.AceptarTransaccion();
                        }
                        else
                        {
                            _dato.DeshacerTransaccion();
                            idDoc = 0;
                            MensajeError += _lote.MensajeError;
                        }
                    }
                }
                else
                {
                    int contenido;
                    contenido = Convert.ToInt32(filalote["ENTRADAS"].ToString()) - Convert.ToInt32(filalote["SALIDAS"].ToString());
                    contenido = contenido - CantidadMod;

                    idInventario = AdicionarAlmInventario(Convert.ToInt32(idDoc), idProducto, Convert.ToInt32(filaBodega["ID_BODEGA"].ToString()), contenido, 0, fecha, "SALIDA", _dato, idLote, talla, idEquipo, 0, null, filalote["REEMBOLSO"].ToString());
                    if (idInventario == 0)
                    {
                        _dato.DeshacerTransaccion();
                        idDoc = 0;

                    }
                    else
                    {
                        if (_lote.ActualizarAlmLote(idLote, Convert.ToInt32(idDoc), idProducto, Convert.ToInt32(filalote["ID_BODEGA"].ToString()), Convert.ToDateTime(filalote["FECHA_REGISTRO"]), Convert.ToInt32(filalote["ENTRADAS"].ToString()), Convert.ToInt32(filalote["SALIDAS"].ToString()) + contenido, Convert.ToDecimal(filalote["COSTO"]), talla, "S", _dato))
                        {
                            _dato.AceptarTransaccion();
                        }
                        else
                        {
                            _dato.DeshacerTransaccion();
                            idDoc = 0;
                            MensajeError += _lote.MensajeError;
                        }
                    }
                }
            }
            else
            {
                _dato.DeshacerTransaccion();
                MensajeError = _doc.MensajeError;
                idDoc = 0;
            }

            return idDoc;
        }
示例#2
0
        public Decimal guardarTraslado(Decimal id_bodega_origen,
            List<int> lista_productos,
            List<int> lista_Cantidades,
            List<int> lista_lotes,
            Decimal id_bodega_destino,
            String Observaciones,
            List<String> talla,
            List<EquipoTraslado> listaEquiposTraslado)
        {
            int cantidadRegistrosActualizados = 0;
            int ConteLo;

            DateTime fecha = System.DateTime.Today;
            Decimal idInventario = 0;
            Decimal idDOC = 0;

            Boolean correcto = true;

            Conexion conexion = new Conexion(Empresa);
            conexion.IniciarTransaccion();

            try
            {
                lote _lote = new lote(Empresa, Usuario);

                documento _doc = new documento(Empresa, Usuario);
                idDOC = _doc.AdicionarAlmDocumentos(0, 0, "TRASLADO", "", "", fecha, new DateTime(), Convert.ToInt32(id_bodega_destino), 0, 0, "ELABORADO", Observaciones, conexion, 0, null);

                if (idDOC == 0)
                {
                    conexion.DeshacerTransaccion();
                    correcto = false;
                    MensajeError = _doc.MensajeError;
                }
                else
                {
                    for (int i = 0; i < lista_productos.Count; i++)
                    {
                        _lote.MensajeError = null;
                        DataTable tablalo = _lote.ObtenerAlmLotePorId(lista_lotes[i], conexion);

                        if (_lote.MensajeError != null)
                        {
                            conexion.DeshacerTransaccion();
                            correcto = false;
                            break;
                        }
                        else
                        {
                            DataRow filalo = tablalo.Rows[0];
                            ConteLo = Convert.ToInt32(filalo["ENTRADAS"]) - Convert.ToInt32(filalo["SALIDAS"]);

                            if (lista_Cantidades[i] <= ConteLo)
                            {
                                idInventario = AdicionarAlmInventario(Convert.ToInt32(idDOC), lista_productos[i], Convert.ToInt32(id_bodega_origen), lista_Cantidades[i], Convert.ToDecimal(filalo["COSTO"]), fecha, "SALIDA", conexion, lista_lotes[i], talla[i], 0, 0, null, filalo["REEMBOLSO"].ToString());

                                if (idInventario == 0)
                                {
                                    conexion.DeshacerTransaccion();
                                    MensajeError += "ADVERTENCIA: El registro de inventario no pudo ser creado. Valide Por favor.";
                                    correcto = false;
                                    break;
                                }
                                else
                                {
                                    String activo = "S";
                                    if (ConteLo - lista_Cantidades[i] <= 0)
                                    {
                                        activo = "N";
                                    }

                                    if (_lote.ActualizarAlmLote(lista_lotes[i], Convert.ToInt32(filalo["ID_DOCUMENTO"]), lista_productos[i], Convert.ToInt32(id_bodega_origen), Convert.ToDateTime(filalo["FECHA_REGISTRO"]), Convert.ToInt32(filalo["ENTRADAS"]), Convert.ToInt32(filalo["SALIDAS"]) + lista_Cantidades[i], Convert.ToDecimal(filalo["COSTO"]), filalo["TALLA"].ToString(), activo, conexion) == false)
                                    {
                                        conexion.DeshacerTransaccion();
                                        correcto = false;
                                        MensajeError += "ADVERTENCIA: El registro del lote no pudo ser actualizado. Verifique Por Favor";
                                        break;
                                    }
                                    else
                                    {
                                        cantidadRegistrosActualizados++;
                                    }
                                }
                            }
                            else
                            {
                                conexion.DeshacerTransaccion();
                                correcto = false;
                                MensajeError += "ADVERTENCIA: La cantidad de producto (" + lista_productos[i].ToString() + ") solicitada no puede ser sacada del lote (" + lista_lotes[i].ToString() + ") seleccionado, cambie la cantidad o haga varios registros con cantidades posibles.";
                                break;
                            }
                        }
                    }

                    foreach (EquipoTraslado equipo in listaEquiposTraslado)
                    {
                        _lote.MensajeError = null;
                        DataTable tablalo = _lote.ObtenerAlmLotePorId(Convert.ToInt32(equipo.ID_LOTE), conexion);

                        if (_lote.MensajeError != null)
                        {
                            conexion.DeshacerTransaccion();
                            correcto = false;
                            break;
                        }
                        else
                        {
                            DataRow filalo = tablalo.Rows[0];
                            ConteLo = Convert.ToInt32(filalo["ENTRADAS"]) - Convert.ToInt32(filalo["SALIDAS"]);

                            if (1 <= ConteLo)
                            {
                                idInventario = AdicionarAlmInventario(Convert.ToInt32(idDOC), Convert.ToInt32(equipo.ID_PRODUCTO), Convert.ToInt32(id_bodega_origen), 1, Convert.ToDecimal(filalo["COSTO"]), fecha, "SALIDA", conexion, Convert.ToInt32(equipo.ID_LOTE), filalo["TALLA"].ToString(), Convert.ToInt32(equipo.ID_EQUIPO), 0, null, filalo["REEMBOLSO"].ToString());

                                if (idInventario == 0)
                                {
                                    conexion.DeshacerTransaccion();
                                    MensajeError += "ADVERTENCIA: El registro de inventario no pudo ser creado. Valide Por favor.";
                                    correcto = false;
                                    break;
                                }
                                else
                                {
                                    String activo = "S";
                                    if (ConteLo - 1 <= 0)
                                    {
                                        activo = "N";
                                    }

                                    if (_lote.ActualizarAlmLote(Convert.ToInt32(equipo.ID_LOTE), Convert.ToInt32(filalo["ID_DOCUMENTO"]), Convert.ToInt32(equipo.ID_PRODUCTO), Convert.ToInt32(filalo["ID_BODEGA"]), Convert.ToDateTime(filalo["FECHA_REGISTRO"]), Convert.ToInt32(filalo["ENTRADAS"]), Convert.ToInt32(filalo["SALIDAS"]) + 1, Convert.ToDecimal(filalo["COSTO"]), filalo["TALLA"].ToString(), activo, conexion) == false)
                                    {
                                        conexion.DeshacerTransaccion();
                                        correcto = false;
                                        MensajeError += "ADVERTENCIA: El registro del lote no pudo ser actualizado. Verifique Por Favor";
                                        break;
                                    }
                                    else
                                    {
                                        _lote.MensajeError = null;
                                        if (_lote.ActualizarLoteActualDeUnEquipo(equipo.ID_EQUIPO, 0, 0, conexion) == false)
                                        {
                                            conexion.DeshacerTransaccion();
                                            correcto = false;
                                            MensajeError = _lote.MensajeError;
                                            break;
                                        }
                                        else
                                        {
                                            cantidadRegistrosActualizados++;
                                        }
                                    }
                                }
                            }
                            else
                            {
                                conexion.DeshacerTransaccion();
                                correcto = false;
                                MensajeError += "ADVERTENCIA: La cantidad de (equipo(s)) solicitada no puede ser sacada del lote (" + equipo.ID_LOTE.ToString() + ") seleccionado, cambie la cantidad o haga varios registros con cantidades posibles.";
                                break;
                            }
                        }
                    }
                }

                if (correcto == true)
                {
                    conexion.AceptarTransaccion();
                }
            }
            catch (Exception ex)
            {
                conexion.DeshacerTransaccion();
                correcto = false;
                MensajeError = ex.Message;
            }
            finally
            {
                conexion.Desconectar();
            }

            if (correcto == true)
            {
                return idDOC;
            }
            else
            {
                return 0;
            }
        }
示例#3
0
        public Decimal guardarAjuste(String tipo,
            String idRegional,
            String idCiudad,
            int idEmpresa,
            int idProducto,
            String talla,
            int idLote,
            int CantidadMod,
            Decimal costo,
            String Motivo,
            Decimal idDocTemp,
            List<EquipoAjuste> listaEquiposAjuste,
            String NOMBRE_SERVICIO_COMPLEMENTARIO,
            String OBS_AUTORIZACION)
        {
            Decimal idDoc = 0;
            DateTime fecha;
            Decimal idInventario = 0;

            Boolean correcto = true;

            fecha = System.DateTime.Today;

            Conexion _dato = new Conexion(Empresa);
            _dato.IniciarTransaccion();

            try
            {
                documento _doc = new documento(Empresa, Usuario);
                idDoc = _doc.AdicionarAlmDocumentos(0, Convert.ToInt32(idDocTemp), "AJUSTE", "", "", fecha, new DateTime(), 0, 0, 0, "APROBADO", Motivo, _dato, 0, OBS_AUTORIZACION);

                if (idDoc <= 0)
                {
                    _dato.DeshacerTransaccion();
                    correcto = false;
                    MensajeError = _doc.MensajeError;
                }
                else
                {
                    bodega _bodega = new bodega(Empresa, Usuario);
                    DataTable tablaBodega = _bodega.ObtenerAlmRegBodegaPorIds(idRegional, idCiudad, idEmpresa, _dato);

                    if (_bodega.MensajeError != null)
                    {
                        _dato.DeshacerTransaccion();
                        correcto = false;
                        MensajeError = _bodega.MensajeError;
                    }
                    else
                    {
                        DataRow filaBodega = tablaBodega.Rows[0];

                        lote _lote = new lote(Empresa, Usuario);
                        DataTable tablaLote = _lote.ObtenerAlmLotePorId(idLote, _dato);

                        if (_lote.MensajeError != null)
                        {
                            _dato.DeshacerTransaccion();
                            correcto = false;
                            MensajeError = _bodega.MensajeError;
                        }
                        else
                        {

                            DataRow filalote = tablaLote.Rows[0];

                            if (tipo.Equals("COSTO"))
                            {
                                idInventario = AdicionarAlmInventario(Convert.ToInt32(idDoc), idProducto, Convert.ToInt32(filaBodega["ID_BODEGA"]), 0, costo, fecha, "COSTO", _dato, idLote, talla, 0, 0, null, filalote["REEMBOLSO"].ToString());
                                if (idInventario <= 0)
                                {
                                    _dato.DeshacerTransaccion();
                                    correcto = false;
                                }
                                else
                                {
                                    if (_lote.ActualizarAlmLote(idLote, Convert.ToInt32(filalote["ID_DOCUMENTO"]), idProducto, Convert.ToInt32(filalote["ID_BODEGA"]), Convert.ToDateTime(filalote["FECHA_REGISTRO"]), Convert.ToInt32(filalote["ENTRADAS"]), Convert.ToInt32(filalote["SALIDAS"]), costo, filalote["TALLA"].ToString(), filalote["ACTIVO"].ToString(), _dato) == false)
                                    {
                                        _dato.DeshacerTransaccion();
                                        correcto = false;
                                        MensajeError = _lote.MensajeError;
                                    }
                                }
                            }
                            else if (tipo.Equals("ENTRADA"))
                            {
                                int contenido = 0;
                                int entradas = 0;
                                int salidas = 0;

                                if (NOMBRE_SERVICIO_COMPLEMENTARIO != "EQUIPOS")
                                {
                                    entradas = Convert.ToInt32(filalote["ENTRADAS"]) + CantidadMod;
                                    salidas = Convert.ToInt32(filalote["SALIDAS"]);

                                    contenido = entradas - salidas;

                                    String activo = "S";
                                    if (contenido <= 0)
                                    {
                                        activo = "N";
                                    }

                                    idInventario = AdicionarAlmInventario(Convert.ToInt32(idDoc), idProducto, Convert.ToInt32(filaBodega["ID_BODEGA"]), CantidadMod, Convert.ToDecimal(filalote["COSTO"]), fecha, "ENTRADA", _dato, idLote, filalote["TALLA"].ToString(), 0, 0, null, filalote["REEMBOLSO"].ToString());

                                    if (idInventario <= 0)
                                    {
                                        _dato.DeshacerTransaccion();
                                        correcto = false;
                                    }
                                    else
                                    {
                                        if (_lote.ActualizarAlmLote(idLote, Convert.ToInt32(filalote["ID_DOCUMENTO"]), idProducto, Convert.ToInt32(filalote["ID_BODEGA"]), Convert.ToDateTime(filalote["FECHA_REGISTRO"]), entradas, salidas, Convert.ToDecimal(filalote["COSTO"]), filalote["TALLA"].ToString(), activo, _dato) == false)
                                        {
                                            _dato.DeshacerTransaccion();
                                            correcto = false;
                                            MensajeError += _lote.MensajeError;
                                        }
                                    }
                                }
                                else
                                {
                                    producto _prod = new producto(Empresa, Usuario);

                                    entradas = Convert.ToInt32(filalote["ENTRADAS"]);
                                    salidas = Convert.ToInt32(filalote["SALIDAS"]);

                                    foreach (EquipoAjuste equipo in listaEquiposAjuste)
                                    {
                                        Decimal ID_NUEVO_EQUIPO = _prod.AdicionarAlmEquipo(Convert.ToInt32(equipo.ID_DOCUMENTO), equipo.MARCA, equipo.MODELO, equipo.SERIE, equipo.IMEI, equipo.NUMERO_CELULAR, "S", fecha, Convert.ToDecimal(idLote), _dato);

                                        if (ID_NUEVO_EQUIPO <= 0)
                                        {
                                            _dato.DeshacerTransaccion();
                                            correcto = false;
                                            MensajeError += _lote.MensajeError;
                                            break;
                                        }
                                        else
                                        {
                                            entradas += 1;
                                            contenido = entradas - salidas;

                                            String activo = "S";
                                            if (contenido <= 0)
                                            {
                                                activo = "N";
                                            }

                                            idInventario = AdicionarAlmInventario(Convert.ToInt32(idDoc), idProducto, Convert.ToInt32(filaBodega["ID_BODEGA"]), 1, Convert.ToDecimal(filalote["COSTO"]), fecha, "ENTRADA", _dato, idLote, filalote["TALLA"].ToString(), Convert.ToInt32(ID_NUEVO_EQUIPO), 0, null, filalote["REEMBOLSO"].ToString());

                                            if (idInventario <= 0)
                                            {
                                                _dato.DeshacerTransaccion();
                                                correcto = false;
                                                break;
                                            }
                                            else
                                            {
                                                if (_lote.ActualizarAlmLote(idLote, Convert.ToInt32(filalote["ID_DOCUMENTO"]), idProducto, Convert.ToInt32(filalote["ID_BODEGA"]), Convert.ToDateTime(filalote["FECHA_REGISTRO"]), entradas, salidas, Convert.ToDecimal(filalote["COSTO"]), filalote["TALLA"].ToString(), activo, _dato) == false)
                                                {
                                                    _dato.DeshacerTransaccion();
                                                    correcto = false;
                                                    MensajeError += _lote.MensajeError;
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            else
                            {
                                int contenido = 0;
                                int entradas = 0;
                                int salidas = 0;

                                if (NOMBRE_SERVICIO_COMPLEMENTARIO != "EQUIPOS")
                                {
                                    entradas = Convert.ToInt32(filalote["ENTRADAS"]);
                                    salidas = Convert.ToInt32(filalote["SALIDAS"]) + CantidadMod;

                                    contenido = entradas - salidas;

                                    String activo = "S";
                                    if (contenido <= 0)
                                    {
                                        activo = "N";
                                    }

                                    idInventario = AdicionarAlmInventario(Convert.ToInt32(idDoc), idProducto, Convert.ToInt32(filaBodega["ID_BODEGA"]), CantidadMod, Convert.ToDecimal(filalote["COSTO"]), fecha, "SALIDA", _dato, idLote, filalote["TALLA"].ToString(), 0, 0, null, filalote["REEMBOLSO"].ToString());

                                    if (idInventario <= 0)
                                    {
                                        _dato.DeshacerTransaccion();
                                        correcto = false;
                                    }
                                    else
                                    {
                                        if (_lote.ActualizarAlmLote(idLote, Convert.ToInt32(filalote["ID_DOCUMENTO"]), idProducto, Convert.ToInt32(filalote["ID_BODEGA"]), Convert.ToDateTime(filalote["FECHA_REGISTRO"]), entradas, salidas, Convert.ToDecimal(filalote["COSTO"]), filalote["TALLA"].ToString(), activo, _dato) == false)
                                        {
                                            _dato.DeshacerTransaccion();
                                            correcto = false;
                                            MensajeError += _lote.MensajeError;
                                        }
                                    }
                                }
                                else
                                {
                                    producto _prod = new producto(Empresa, Usuario);

                                    entradas = Convert.ToInt32(filalote["ENTRADAS"]);
                                    salidas = Convert.ToInt32(filalote["SALIDAS"]);

                                    foreach (EquipoAjuste equipo in listaEquiposAjuste)
                                    {
                                        if (_prod.ActualizarAlmEquipoIdLoteActualIDocumentoActualParaSalida(equipo.ID_EQUIPO, "N", 0, 0, _dato) == false)
                                        {
                                            _dato.DeshacerTransaccion();
                                            correcto = false;
                                            MensajeError += _prod.MensajeError;
                                            break;
                                        }
                                        else
                                        {
                                            salidas += 1;

                                            contenido = entradas - salidas;

                                            String activo = "S";
                                            if (contenido <= 0)
                                            {
                                                activo = "N";
                                            }

                                            idInventario = AdicionarAlmInventario(Convert.ToInt32(idDoc), idProducto, Convert.ToInt32(filaBodega["ID_BODEGA"]), 1, Convert.ToDecimal(filalote["COSTO"]), fecha, "SALIDA", _dato, idLote, filalote["TALLA"].ToString(), Convert.ToInt32(equipo.ID_EQUIPO), 0, null, filalote["REEMBOLSO"].ToString());

                                            if (idInventario <= 0)
                                            {
                                                _dato.DeshacerTransaccion();
                                                correcto = false;
                                                break;
                                            }
                                            else
                                            {
                                                if (_lote.ActualizarAlmLote(idLote, Convert.ToInt32(filalote["ID_DOCUMENTO"]), idProducto, Convert.ToInt32(filalote["ID_BODEGA"]), Convert.ToDateTime(filalote["FECHA_REGISTRO"]), entradas, salidas, Convert.ToDecimal(filalote["COSTO"]), filalote["TALLA"].ToString(), activo, _dato) == false)
                                                {
                                                    _dato.DeshacerTransaccion();
                                                    correcto = false;
                                                    MensajeError += _lote.MensajeError;
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                if (correcto == true)
                {
                    documento_temp _docTemp = new documento_temp(Empresa, Usuario);
                    if (_docTemp.ActualizarAlmDocumentoTemp(Convert.ToInt32(idDocTemp), Convert.ToDateTime(DateTime.Now.ToShortDateString()), "APROBADO", _dato, OBS_AUTORIZACION) == false)
                    {
                        _dato.DeshacerTransaccion();
                        correcto = false;
                        MensajeError = _docTemp.MensajeError;
                    }
                }

                if (correcto == true)
                {
                    _dato.AceptarTransaccion();
                }
            }
            catch (Exception ex)
            {
                _dato.DeshacerTransaccion();
                correcto = false;
                MensajeError = ex.Message;
            }
            finally
            {
                _dato.Desconectar();
            }

            if (correcto == true)
            {
                return idDoc;
            }
            else
            {
                return 0;
            }
        }
示例#4
0
        public Decimal guardarGarantia(int idbodega,
            int idLote,
            int idEmpresa,
            int idProducto,
            int Cantidad,
            String idRegional,
            String idCiudad,
            String talla,
            String motivo)
        {
            Boolean correcto = true;

            lote _lote = new lote(Empresa, Usuario);
            documento _doc = new documento(Empresa, Usuario);
            Decimal idDoc = 0;
            Decimal idInventario = 0;
            int idProveedor = 0;

            Conexion _dato = new Conexion(Empresa);
            _dato.IniciarTransaccion();

            try
            {
                _lote.MensajeError = null;
                DataTable tablalote = _lote.ObtenerAlmLotePorId(idLote, _dato);

                if (_lote.MensajeError != null)
                {
                    _dato.DeshacerTransaccion();
                    correcto = false;
                }
                else
                {
                    DataRow filalote = tablalote.Rows[0];
                    Decimal costo = Convert.ToDecimal(filalote["COSTO"]);
                    DateTime fecha = System.DateTime.Today;

                    _doc.MensajeError = null;
                    DataTable tabladoc = _doc.ObtenerAlmRegDocumentoPorId(Convert.ToInt32(filalote["ID_DOCUMENTO"]), _dato);

                    if (_doc.MensajeError != null)
                    {
                        _dato.DeshacerTransaccion();
                        correcto = false;
                    }
                    else
                    {
                        DataRow filaDoc = tabladoc.Rows[0];
                        idProveedor = Convert.ToInt32(filaDoc["ID_PROVEEDOR"]);

                        idDoc = _doc.AdicionarAlmDocumentos(0, 0, "GARANTIA", "", "", fecha, new DateTime(), idbodega, 0, 0, "ELABORADO", motivo, _dato, idProveedor, null);

                        if (idDoc <= 0)
                        {
                            _dato.DeshacerTransaccion();
                            MensajeError += _doc.MensajeError;
                            correcto = false;
                        }
                        else
                        {
                            idInventario = AdicionarAlmInventario(Convert.ToInt32(idDoc), idProducto, idbodega, Cantidad, costo, fecha, "SALIDA", _dato, idLote, talla, 0, 0, null, filalote["REEMBOLSO"].ToString());
                            if (idInventario <= 0)
                            {
                                _dato.DeshacerTransaccion();
                                idDoc = 0;
                                correcto = false;
                            }
                            else
                            {
                                Int32 salidas = Convert.ToInt32(filalote["SALIDAS"]);
                                Int32 entradas = Convert.ToInt32(filalote["ENTRADAS"]);

                                salidas = salidas + Cantidad;

                                String ACTIVO = "S";
                                if (entradas <= salidas)
                                {
                                    ACTIVO = "N";
                                }

                                if (_lote.ActualizarAlmLote(idLote, Convert.ToInt32(filalote["ID_DOCUMENTO"]), idProducto, Convert.ToInt32(idbodega), fecha, entradas, salidas, costo, filalote["TALLA"].ToString(), ACTIVO, _dato) == false)
                                {
                                    _dato.DeshacerTransaccion();
                                    correcto = false;
                                    MensajeError = _lote.MensajeError;
                                }
                            }
                        }
                    }
                }

                if (correcto == true)
                {
                    _dato.AceptarTransaccion();
                }
            }
            catch (Exception ex)
            {
                _dato.DeshacerTransaccion();
                correcto = false;
                MensajeError = ex.Message;
            }
            finally
            {
                _dato.Desconectar();
            }

            if (correcto == true)
            {
                return idDoc;
            }
            else
            {
                return 0;
            }
        }