public override void save <T>(T entity)
        {
            try
            {
                DetalleMovimientoStock detmovstk = entity as DetalleMovimientoStock;

                dao.DetalleMovimientoStocks.InsertOnSubmit(detmovstk);
            }
            catch (Exception ex)
            {
                throw new Exception("Error al guardar" + ex.Message);
            }
        }
        //Busca los stockMovimientos asociados a ese lote
        //Si existen stockMedicamentos-->Actualizar ese stock existente
        //Si no existe stockMedicamento-->Crear un nuevo stockMedicamento e indicarle el stock
        //Guarda el movimiento generado con todos sus detalles
        protected void bt_guardar_Click(object sender, EventArgs e)
        {
            try
            {
                numerogenerado = generarCodigo();
                String tipoM = ddl_tipoMovE.SelectedValue;
                //Busca el tipo de movimiento seleccionado
                tipoMov = iTM.getPorCriterio <TipoMovimiento>(tipoM).First <TipoMovimiento>();
                //Crea el movimiento
                DetalleMovimientoStock   f;
                MovimientoStock          movimiento = new MovimientoStock();
                IList <StockMedicamento> stockM;

                //Generaciòn del movimiento
                movimiento.fechaMovimiento = DateTime.Now.Date;
                movimiento.nroMovimiento   = numerogenerado; // generarCodigo();
                //Este tipo=1 indica que son movimienots de tipo entrada
                movimiento.tipoMovimiento = tipoMov.codigoTipoMov;
                movimiento.nroComprobante = int.Parse(txt_comprobante.Text);

                //Guarda el movimiento de stock
                iMovStk.save <MovimientoStock>(movimiento);
                Intermediario.confirmarCambios();

                DataTable dt = Session["DataTableMovimientosE"] as DataTable;

                //Guarda los elementos de la grilla--crea un detalle para cada uno

                foreach (DataRow row in dt.Rows)
                {
                    f = new DetalleMovimientoStock();
                    f.codigoMedicamento = Convert.ToInt32(row["codigo"]);
                    f.cantidad          = Convert.ToInt32(row["cantidad"]);
                    f.nroLote           = Convert.ToInt32(row["lote"]);
                    f.codDetalle        = generarCodigoDetalles();
                    f.nroMovimiento     = movimiento.nroMovimiento;
                    iDetMovStk.save <DetalleMovimientoStock>(f);
                    Intermediario.confirmarCambios();

                    //Busca el stock actual para el codigo seleccionado

                    stockM = iStockM.getCriterioById <StockMedicamento>("", "", Convert.ToInt32(Convert.ToInt32(row["codigo"])));
                    //Verifica si tiene creado stock para ese lote
                    bool existe = false;
                    foreach (StockMedicamento stk in stockM)
                    {
                        if (stk.lote == Convert.ToInt32(row["lote"]))
                        {
                            existe = true;
                        }
                    }
                    if (stockM.Count == 0 || existe == false)
                    {
                        stockNuevo = new StockMedicamento();
                        stockNuevo.codigoMedicamento = Convert.ToInt32(row["codigo"]);
                        stockNuevo.codigoStock       = generarCodigoStock();
                        stockNuevo.stockActual       = Convert.ToInt32(row["cantidad"]);
                        stockNuevo.lote = Convert.ToInt32(row["lote"]);

                        iStockM.save <StockMedicamento>(stockNuevo);
                    }
                    else
                    {
                        StockMedicamento stockMed = stockM.First <StockMedicamento>();   // = iStockM.getCriterioById<StockMedicamento>("", "", Convert.ToInt32(Convert.ToInt32(row["codigo"]))).First<StockMedicamento>();
                        stockMed.stockActual = stockMed.stockActual + Convert.ToInt32(row["cantidad"]);
                        iStockM.Update <StockMedicamento>(stockMed);
                    }

                    Intermediario.confirmarCambios();
                }


                msj = "El Movimiento ha sido creado correctamente, con el nro: " + numerogenerado;

                Session["DataTableMovimientosE"] = null;

                txt_comprobante.Text     = "";
                txt_cantidad.Text        = "";
                txt_descripcionMed.Text  = "";
                txt_codigoMed.Text       = "";
                txt_lote1.Text           = "";
                panelMedicamento.Visible = false;
                panel_grilla.Visible     = false;
                gv_Movimientos.Visible   = false;
                bt_Nuevo.Visible         = false;
                bt_cancel.Visible        = false;
                bt_guardar.Visible       = false;
                bt_cancelar.Visible      = false;
                ddl_lotes.Items.Clear();
                ddl_medicamentos.Items.Clear();
                //ddl_tipoMovE.Items.Clear();

                mostrarMensaje(msj);
            }

            catch (Exception) { }
        }
Exemple #3
0
        protected void Page_Load(object sender, EventArgs e)
        {
            listaMedicamentos        = iStockMed.getAll <StockMedicamento>();
            tipito                   = iTipo.getPorCriterio <TipoMovimiento>("Vencimiento").First <TipoMovimiento>();
            vencidos.nroMovimiento   = generarCodigo();
            vencidos.fechaMovimiento = DateTime.Today;
            vencidos.nroComprobante  = 0;
            vencidos.tipoMovimiento  = tipito.codigoTipoMov;

            iMovStk.save <MovimientoStock>(vencidos);

            mensajes.Columns.Add("codigo");
            mensajes.Columns.Add("descripcion");
            mensajes.Columns.Add("mensaje");
            mensajes.Columns.Add("fecha");
            mensajes.Columns.Add("lote");

//            int det = generarCodigoDetalles();

            foreach (StockMedicamento m in listaMedicamentos)
            {
                Lote        lote    = iLote.getCriterioById <Lote>("", "", Convert.ToInt32(m.lote)).First <Lote>();
                Medicamento remedio = iMedicamento.getCriterioById <Medicamento>("", "", Convert.ToInt32(m.codigoMedicamento)).First <Medicamento>();
                DataRow     fila    = mensajes.NewRow();
                dif = DateTime.Today.Subtract(Convert.ToDateTime(lote.fechaVto));


                if (m.fechaBaja == null)
                {
                    //VERIFICAR CUANDO EL MEDICAMENTO YA ESTÉ VENCIDO
                    if (-(dif.Days) <= remedio.diasAlertas)
                    {
                        //Agregar el mensaje a un dto mensaje
                        //msj=new DtoMensaje();

                        //Si la fecha es igual o menor a la fecha de hoy le doy de baja
                        if (lote.fechaVto <= DateTime.Today)
                        {
                            m.fechaBaja = DateTime.Today;
                            iStockMed.Update <StockMedicamento>(m);

                            fila["codigo"]      = m.codigoMedicamento;
                            fila["descripcion"] = remedio.descripcion;
                            fila["fecha"]       = lote.fechaVto.ToString();
                            fila["mensaje"]     = "El medicamento con cód: " + m.codigoMedicamento + " está vencido. Fue dado de baja.";
                            fila["lote"]        = "Pertenece al lote: " + lote.nroLote;


                            detalle                   = new DetalleMovimientoStock();
                            detalle.codDetalle        = generarCodigoDetalles();
                            detalle.cantidad          = Convert.ToInt32(m.stockActual);
                            detalle.codigoMedicamento = m.codigoMedicamento;
                            detalle.nroMovimiento     = vencidos.nroMovimiento;
                            detalle.nroLote           = m.lote;

                            iDetMovStk.save <DetalleMovimientoStock>(detalle);
                        }
                        else
                        {
                            fila["codigo"]      = m.codigoMedicamento;
                            fila["descripcion"] = remedio.descripcion;
                            fila["fecha"]       = lote.fechaVto.ToString();
                            fila["mensaje"]     = "Faltan " + Convert.ToInt32(-dif.Days) + " días para que el medicamento se venza";
                            fila["lote"]        = "Pertenece al lote: " + lote.nroLote;
                        }
                        mensajes.Rows.Add(fila);
                    }
                }
            }

            Intermediario.confirmarCambios();

            if (mensajes.Rows.Count > 0)
            {
                panelMensajes.Visible = true;
                grillaMsjs.DataSource = mensajes;
                grillaMsjs.DataBind();
                grillaMsjs.Visible = true;
            }
        }
        //Guarda el movimiento generado con todos sus detalles. Actualiza el stock
        protected void bt_guardar_Click(object sender, EventArgs e)
        {
            try
            {
                    numerogenerado = generarCodigo();

                    String tipoM = ddl_tipMov.SelectedValue;
                    tipoMov = iTM.getPorCriterio<TipoMovimiento>(tipoM).First<TipoMovimiento>();

                    DetalleMovimientoStock f;
                    MovimientoStock movimiento = new MovimientoStock();

                    StockMedicamento stockM;
                    stockM = new StockMedicamento();

                    //guarda la cabecera el movimiento
                    movimiento.fechaMovimiento = DateTime.Now.Date;
                    movimiento.nroMovimiento = numerogenerado;
                    movimiento.tipoMovimiento = tipoMov.codigoTipoMov;
                    movimiento.nroComprobante = int.Parse(txt_comprobante.Text);

                    iMovStk.save<MovimientoStock>(movimiento);
                    Intermediario.confirmarCambios();

                    // guarda los detalles del movimiento
                    DataTable dt = Session["DataTableMovimientos"] as DataTable;
                    foreach (DataRow row in dt.Rows) {

                        f= new DetalleMovimientoStock();
                        f.codigoMedicamento = Convert.ToInt32(row["codigo"]);
                        f.cantidad = Convert.ToInt32(row["cantidad"]);
                        f.nroLote = Convert.ToInt32(row["lote"]);
                        f.codDetalle = generarCodigoDetalles();
                        f.nroMovimiento = movimiento.nroMovimiento;
                        iDetMovStk.save<DetalleMovimientoStock>(f);
                        Intermediario.confirmarCambios();

                        stockM = iStockM.getCriterioById<StockMedicamento>("", "", Convert.ToInt32(Convert.ToInt32(row["codigo"]))).First<StockMedicamento>();
                        listaStkM1 = iStockM.getCriterioById<StockMedicamento>("", "", Convert.ToInt32(Convert.ToInt32(row["codigo"])));

                        //actualiza el stock del medicamento
                        foreach (StockMedicamento stk in listaStkM1)
                        {
                            if (stk.lote == Convert.ToInt32(Convert.ToInt32(row["lote"])))
                            {
                                stk.stockActual = stk.stockActual - Convert.ToInt32(row["cantidad"]);

                                if (stk.stockActual == 0) msj = "Algunos Medicamentos quedaron con stock en cero. ";

                                iStockM.Update<StockMedicamento>(stk);
                                Intermediario.confirmarCambios();
                                mostrarMensaje(msj);
                            }

                        }
                }

                msj = "El Movimiento ha sido creado correctamente, con el nro: " + numerogenerado ;
                mostrarMensaje(msj);

                //limpia variables y pantalla
                txt_comprobante.Text = "";
                txt_cantidad.Text = "";
                txt_descripcionMed.Text = "";
                txt_codigoMed.Text = "";
                txt_lote1.Text = "";
                panelMedicamento.Visible = false;
                panel_grilla.Visible = false;
                gv_Movimientos.Visible = false;
                bt_guardar.Visible = false;
                bt_cancelar.Visible = false;

            }

            catch (Exception) { }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            listaMedicamentos = iStockMed.getAll<StockMedicamento>();
            tipito=iTipo.getPorCriterio<TipoMovimiento>("Vencimiento").First<TipoMovimiento>();
            vencidos.nroMovimiento = generarCodigo();
            vencidos.fechaMovimiento = DateTime.Today;
            vencidos.nroComprobante = 0;
            vencidos.tipoMovimiento = tipito.codigoTipoMov;

            iMovStk.save<MovimientoStock>(vencidos);

            mensajes.Columns.Add("codigo");
            mensajes.Columns.Add("descripcion");
            mensajes.Columns.Add("mensaje");
            mensajes.Columns.Add("fecha");
            mensajes.Columns.Add("lote");

            //            int det = generarCodigoDetalles();

            foreach (StockMedicamento m in listaMedicamentos)
            {
                Lote lote = iLote.getCriterioById<Lote>("", "", Convert.ToInt32(m.lote)).First<Lote>();
                Medicamento remedio = iMedicamento.getCriterioById<Medicamento>("", "", Convert.ToInt32(m.codigoMedicamento)).First<Medicamento>();
                DataRow fila = mensajes.NewRow();
                dif = DateTime.Today.Subtract(Convert.ToDateTime(lote.fechaVto));

                if (m.fechaBaja == null)
                {
                    //VERIFICAR CUANDO EL MEDICAMENTO YA ESTÉ VENCIDO
                    if (-(dif.Days) <= remedio.diasAlertas)
                    {
                        //Agregar el mensaje a un dto mensaje
                        //msj=new DtoMensaje();

                        //Si la fecha es igual o menor a la fecha de hoy le doy de baja
                        if (lote.fechaVto <= DateTime.Today)
                        {
                            m.fechaBaja = DateTime.Today;
                            iStockMed.Update<StockMedicamento>(m);

                            fila["codigo"] = m.codigoMedicamento;
                            fila["descripcion"] = remedio.descripcion;
                            fila["fecha"] = lote.fechaVto.ToString();
                            fila["mensaje"] = "El medicamento con cód: " + m.codigoMedicamento + " está vencido. Fue dado de baja.";
                            fila["lote"] = "Pertenece al lote: " + lote.nroLote;

                            detalle = new DetalleMovimientoStock();
                            detalle.codDetalle = generarCodigoDetalles();
                            detalle.cantidad = Convert.ToInt32(m.stockActual);
                            detalle.codigoMedicamento = m.codigoMedicamento;
                            detalle.nroMovimiento = vencidos.nroMovimiento;
                            detalle.nroLote = m.lote;

                            iDetMovStk.save<DetalleMovimientoStock>(detalle);

                        }
                        else
                        {
                            fila["codigo"] = m.codigoMedicamento;
                            fila["descripcion"] = remedio.descripcion;
                            fila["fecha"] = lote.fechaVto.ToString();
                            fila["mensaje"] = "Faltan " + Convert.ToInt32(-dif.Days) + " días para que el medicamento se venza";
                            fila["lote"] = "Pertenece al lote: " + lote.nroLote;
                        }
                        mensajes.Rows.Add(fila);

                    }

                }

            }

            Intermediario.confirmarCambios();

            if (mensajes.Rows.Count > 0)
            {
                panelMensajes.Visible = true;
                grillaMsjs.DataSource = mensajes;
                grillaMsjs.DataBind();
                grillaMsjs.Visible = true;
            }
        }
        //Guarda el movimiento generado con todos sus detalles. Actualiza el stock
        protected void bt_guardar_Click(object sender, EventArgs e)
        {
            try
            {
                numerogenerado = generarCodigo();

                String tipoM = ddl_tipMov.SelectedValue;
                tipoMov = iTM.getPorCriterio <TipoMovimiento>(tipoM).First <TipoMovimiento>();

                DetalleMovimientoStock f;
                MovimientoStock        movimiento = new MovimientoStock();

                StockMedicamento stockM;
                stockM = new StockMedicamento();

                //guarda la cabecera el movimiento
                movimiento.fechaMovimiento = DateTime.Now.Date;
                movimiento.nroMovimiento   = numerogenerado;
                movimiento.tipoMovimiento  = tipoMov.codigoTipoMov;
                movimiento.nroComprobante  = int.Parse(txt_comprobante.Text);

                iMovStk.save <MovimientoStock>(movimiento);
                Intermediario.confirmarCambios();

                // guarda los detalles del movimiento
                DataTable dt = Session["DataTableMovimientos"] as DataTable;
                foreach (DataRow row in dt.Rows)
                {
                    f = new DetalleMovimientoStock();
                    f.codigoMedicamento = Convert.ToInt32(row["codigo"]);
                    f.cantidad          = Convert.ToInt32(row["cantidad"]);
                    f.nroLote           = Convert.ToInt32(row["lote"]);
                    f.codDetalle        = generarCodigoDetalles();
                    f.nroMovimiento     = movimiento.nroMovimiento;
                    iDetMovStk.save <DetalleMovimientoStock>(f);
                    Intermediario.confirmarCambios();

                    stockM     = iStockM.getCriterioById <StockMedicamento>("", "", Convert.ToInt32(Convert.ToInt32(row["codigo"]))).First <StockMedicamento>();
                    listaStkM1 = iStockM.getCriterioById <StockMedicamento>("", "", Convert.ToInt32(Convert.ToInt32(row["codigo"])));

                    //actualiza el stock del medicamento
                    foreach (StockMedicamento stk in listaStkM1)
                    {
                        if (stk.lote == Convert.ToInt32(Convert.ToInt32(row["lote"])))
                        {
                            stk.stockActual = stk.stockActual - Convert.ToInt32(row["cantidad"]);

                            if (stk.stockActual == 0)
                            {
                                msj = "Algunos Medicamentos quedaron con stock en cero. ";
                            }

                            iStockM.Update <StockMedicamento>(stk);
                            Intermediario.confirmarCambios();
                            mostrarMensaje(msj);
                        }
                    }
                }


                msj = "El Movimiento ha sido creado correctamente, con el nro: " + numerogenerado;
                mostrarMensaje(msj);

                //limpia variables y pantalla
                txt_comprobante.Text     = "";
                txt_cantidad.Text        = "";
                txt_descripcionMed.Text  = "";
                txt_codigoMed.Text       = "";
                txt_lote1.Text           = "";
                panelMedicamento.Visible = false;
                panel_grilla.Visible     = false;
                gv_Movimientos.Visible   = false;
                bt_guardar.Visible       = false;
                bt_cancelar.Visible      = false;
            }

            catch (Exception) { }
        }
        //Busca los stockMovimientos asociados a ese lote
        //Si existen stockMedicamentos-->Actualizar ese stock existente
        //Si no existe stockMedicamento-->Crear un nuevo stockMedicamento e indicarle el stock
        //Guarda el movimiento generado con todos sus detalles
        protected void bt_guardar_Click(object sender, EventArgs e)
        {
            try
            {
                numerogenerado = generarCodigo();
                String tipoM = ddl_tipoMovE.SelectedValue;
                //Busca el tipo de movimiento seleccionado
                tipoMov = iTM.getPorCriterio<TipoMovimiento>(tipoM).First<TipoMovimiento>();
                //Crea el movimiento
                DetalleMovimientoStock f;
                MovimientoStock movimiento = new MovimientoStock();
                IList<StockMedicamento> stockM;

                //Generaciòn del movimiento
                movimiento.fechaMovimiento = DateTime.Now.Date;
                movimiento.nroMovimiento = numerogenerado; // generarCodigo();
                //Este tipo=1 indica que son movimienots de tipo entrada
                movimiento.tipoMovimiento = tipoMov.codigoTipoMov;
                movimiento.nroComprobante = int.Parse(txt_comprobante.Text);

                //Guarda el movimiento de stock
                iMovStk.save<MovimientoStock>(movimiento);
                Intermediario.confirmarCambios();

                DataTable dt = Session["DataTableMovimientosE"] as DataTable;

                //Guarda los elementos de la grilla--crea un detalle para cada uno

                foreach (DataRow row in dt.Rows)
                {

                    f = new DetalleMovimientoStock();
                    f.codigoMedicamento = Convert.ToInt32(row["codigo"]);
                    f.cantidad = Convert.ToInt32(row["cantidad"]);
                    f.nroLote = Convert.ToInt32(row["lote"]);
                    f.codDetalle = generarCodigoDetalles();
                    f.nroMovimiento = movimiento.nroMovimiento;
                    iDetMovStk.save<DetalleMovimientoStock>(f);
                    Intermediario.confirmarCambios();

                    //Busca el stock actual para el codigo seleccionado

                    stockM = iStockM.getCriterioById<StockMedicamento>("", "", Convert.ToInt32(Convert.ToInt32(row["codigo"])));
                    //Verifica si tiene creado stock para ese lote
                    if (stockM.Count == 0)
                    {
                        stockNuevo = new StockMedicamento();
                        stockNuevo.codigoMedicamento = Convert.ToInt32(row["codigo"]);
                        stockNuevo.codigoStock = generarCodigoStock();
                        stockNuevo.stockActual = Convert.ToInt32(row["cantidad"]);
                        stockNuevo.lote = Convert.ToInt32(row["lote"]);

                        iStockM.save<StockMedicamento>(stockNuevo);

                    }
                    else
                    {

                        StockMedicamento stockMed = stockM.First<StockMedicamento>();   // = iStockM.getCriterioById<StockMedicamento>("", "", Convert.ToInt32(Convert.ToInt32(row["codigo"]))).First<StockMedicamento>();
                        stockMed.stockActual = stockMed.stockActual + Convert.ToInt32(row["cantidad"]);
                        iStockM.Update<StockMedicamento>(stockMed);

                    }

                    Intermediario.confirmarCambios();
                }


                msj = "El Movimiento ha sido creado correctamente, con el nro: " + numerogenerado;

                Session["DataTableMovimientosE"] = null;

                txt_comprobante.Text = "";
                txt_cantidad.Text = "";
                txt_descripcionMed.Text = "";
                txt_codigoMed.Text = "";
                txt_lote1.Text = "";
                panelMedicamento.Visible = false;
                panel_grilla.Visible = false;
                gv_Movimientos.Visible = false;
                bt_Nuevo.Visible = false;
                bt_cancel.Visible = false;
                bt_guardar.Visible = false;
                bt_cancelar.Visible = false;
                ddl_lotes.Items.Clear();
                ddl_medicamentos.Items.Clear();
                //ddl_tipoMovE.Items.Clear();

                mostrarMensaje(msj);
            }

            catch (Exception) { }
        }