Beispiel #1
0
        /// <summary>
        /// Agrega la cantidad de un detallemovimiento al detalle requisicion.
        /// Esta funcion no guarda en la base de datos, se debe actualizar fuera del lazo try-catch que la contenga (db.savechanges()).
        /// </summary>
        /// <param name="db">Datacontext</param>
        /// <param name="requisicion">Requisición</param>
        /// <param name="dm">Detalle del movimiento</param>
        /// <remarks>
        /// Si cantidad calculada > cantidad pedida : excepcion (no puede ser mayor)
        /// Si cantidad = cantidad despachada: procesado = true
        /// </remarks>
        public void AgregarDetalle(SinabEntities db, Requisicion requisicion, SAB_ALM_DETALLEMOVIMIENTOS dm)
        {
            var prod = db.vv_CATALOGOPRODUCTOS.FirstOrDefault(vv => vv.IDPRODUCTO == dm.IDPRODUCTO);
            var dr   =
                db.SAB_FARM_DETALLEREQUISICION.FirstOrDefault(
                    d => d.IdRequisicion == requisicion.IdRequisicion && d.Codigo == prod.CORRPRODUCTO);


            if (dr == null)
            {
                return;
            }
            var despacha = dr.CantidadDespachada += dm.CANTIDAD;

            if (dr.Cantidad == despacha)
            {
                dr.Procesado = true;
            }
            else if (despacha > dr.Cantidad)
            {
                throw new Exception("Cantidad a despachar no puede ser mayor a la cantidad solicitada. Producto: " +
                                    dr.Codigo + " - " + prod.NOMBRECORTO);
            }
            else
            {
                dr.CantidadDespachada = despacha;
            }

            //db.SaveChanges();
        }
Beispiel #2
0
        /// <summary>
        /// Anula el detalle seleccionado cambiando su cantidad a 0 y guardandola en el campo CANTIDAD ANULADA.
        /// Se prevee cambiarle también el valor a IDTIPOTRANSACCION
        /// </summary>
        /// <param name="db">contexto de la base de datos</param>
        /// <param name="detalle">detalle fuera de contexto</param>
        /// <remarks> Autor: Farid Antonio Pérez Aldana. Fecha Creación: 14/06/2016</remarks>
        public static void Anular(SinabEntities db, SAB_ALM_DETALLEMOVIMIENTOS detalle)
        {
            var res =
                db.SAB_ALM_DETALLEMOVIMIENTOS.FirstOrDefault(
                    d =>
                    d.IDESTABLECIMIENTO == detalle.IDESTABLECIMIENTO &&
                    d.IDTIPOTRANSACCION == detalle.IDTIPOTRANSACCION &&
                    d.IDMOVIMIENTO == detalle.IDMOVIMIENTO && d.IDDETALLEMOVIMIENTO == detalle.IDDETALLEMOVIMIENTO);

            if (res == null)
            {
                return;
            }
            res.CANTIDADANULADA       = res.CANTIDAD;
            res.ANULADO               = true;
            res.CANTIDAD              = 0;
            res.AUUSUARIOMODIFICACION = Membresia.ObtenerUsuario().USUARIO;
            res.AUFECHAMODIFICACION   = DateTime.Now;
            var anular = res.SAB_ALM_DETALLEMOVIMIENTOLOTES.ToList();

            foreach (var r in anular)
            {
                db.SAB_ALM_DETALLEMOVIMIENTOLOTES.DeleteObject(r);
            }
            db.SaveChanges();
        }
Beispiel #3
0
        /// <summary>
        /// Actualiza las cantidades de los lotes dependiendo del tipo de operacion a realizar.
        /// Esta funcion no guarda en la base de datos, se debe actualizar fuera del lazo try-catch que la contenga (db.savechanges()).
        /// </summary>
        /// <param name="db">Datacontext</param>
        /// <param name="detalle">Detalle del movimiento. Contiene las operaciones a relizar sobre los lotes (suma:1, resta:2)</param>
        public static void Actualizar(SinabEntities db, SAB_ALM_DETALLEMOVIMIENTOS detalle)
        {
            var cantidad  = detalle.CANTIDAD;
            var operacion = detalle.SAB_ALM_DETALLEMOVIMIENTOLOTES.FirstOrDefault();

            if (operacion == null)
            {
                return;
            }

            var lote =
                db.SAB_ALM_LOTES.FirstOrDefault(l => l.IDALMACEN == detalle.IDALMACEN && l.IDLOTE == detalle.IDLOTE
                                                &&
                                                ((l.CANTIDADDISPONIBLE >= cantidad && operacion.DISPONIBLE == 2) ||
                                                 operacion.DISPONIBLE <= 1)
                                                &&
                                                ((l.CANTIDADNODISPONIBLE >= cantidad && operacion.NODISPONIBLE == 2) ||
                                                 operacion.NODISPONIBLE <= 1)
                                                &&
                                                ((l.CANTIDADRESERVADA >= cantidad && operacion.RESERVADA == 2) ||
                                                 operacion.RESERVADA <= 1)
                                                &&
                                                ((l.CANTIDADVENCIDA >= cantidad && operacion.VENCIDA == 2) ||
                                                 operacion.VENCIDA <= 1)
                                                &&
                                                ((l.CANTIDADTEMPORAL >= cantidad && operacion.TEMPORAL == 2) ||
                                                 operacion.TEMPORAL <= 1)
                                                );

            if (lote == null)
            {
                throw new Exception("Error: La cantidad Requerida para un producto no puede ser mayor que la cantidad disponible en el lote." +
                                    "Por favor verifique las existencias en el Lote, esta operación no puede continuar" +
                                    "No. del renglón: " + detalle.RENGLON + ", cantidad: " + detalle.CANTIDAD.ToString());
            }
            //evalua cantidad disponible
            lote.CANTIDADDISPONIBLE = EvaluarCantidades(cantidad, operacion.DISPONIBLE, lote.CANTIDADDISPONIBLE);

            //evalua cantidad no disponible
            lote.CANTIDADNODISPONIBLE = EvaluarCantidades(cantidad, operacion.NODISPONIBLE,
                                                          lote.CANTIDADNODISPONIBLE);

            //evalua cantidad reservada
            lote.CANTIDADRESERVADA = EvaluarCantidades(cantidad, operacion.RESERVADA, lote.CANTIDADRESERVADA);

            //evalua cantidad vencida
            lote.CANTIDADVENCIDA = EvaluarCantidades(cantidad, operacion.VENCIDA, lote.CANTIDADVENCIDA);

            //evalua cantidad temporal
            lote.CANTIDADTEMPORAL      = EvaluarCantidades(cantidad, operacion.TEMPORAL, lote.CANTIDADTEMPORAL);
            lote.AUUSUARIOMODIFICACION = Membresia.ObtenerUsuario().USUARIO;
            lote.AUFECHAMODIFICACION   = DateTime.Now;
            db.SaveChanges();
        }
Beispiel #4
0
        /// <summary>
        /// Elimina el detalle de las tablas de DetalleMovimiento si se encuenta en la db.
        /// Esta funcion no guarda en la base de datos, se debe actualizar fuera del lazo try-catch que la contenga (db.savechanges()).
        /// </summary>
        /// <param name="db">Datacontext</param>
        /// <param name="detalle">Detalle a borrar</param>
        /// <history> SINAB_DEV 02/07/2013</history>
        /// <history> SINAB_DEV 22/07/2013: cambio a static</history>
        public static void Eliminar(SinabEntities db, SAB_ALM_DETALLEMOVIMIENTOS detalle)
        {
            var res =
                db.SAB_ALM_DETALLEMOVIMIENTOS.FirstOrDefault(
                    d =>
                    d.IDESTABLECIMIENTO == detalle.IDESTABLECIMIENTO &&
                    d.IDTIPOTRANSACCION == detalle.IDTIPOTRANSACCION &&
                    d.IDMOVIMIENTO == detalle.IDMOVIMIENTO && d.IDDETALLEMOVIMIENTO == detalle.IDDETALLEMOVIMIENTO);

            db.SAB_ALM_DETALLEMOVIMIENTOS.DeleteObject(res);
            db.SaveChanges();
        }
Beispiel #5
0
        public static void DeleteItem(string idproceso, SAB_ALM_DETALLEMOVIMIENTOS item)
        {
            var proceso = Get(idproceso);

            try
            {
                proceso.Listado.Remove(item);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
Beispiel #6
0
        /// <summary>
        /// Agrega el detalle a la tabla DetalleMovimiento.
        /// Esta funcion no guarda en la base de datos, se debe actualizar fuera del lazo try-catch que la contenga (db.savechanges()).
        /// </summary>
        /// <param name="db">Datacontext</param>
        /// <param name="detalle">Detalle a agregar</param>
        /// <history> SINAB_DEV 02/07/2013</history>
        public static void Agregar(SAB_ALM_DETALLEMOVIMIENTOS detalle, SinabEntities db)
        {
            var dms = db.SAB_ALM_DETALLEMOVIMIENTOS.Where(
                dm => dm.IDESTABLECIMIENTO == detalle.IDESTABLECIMIENTO &&
                dm.IDMOVIMIENTO == detalle.IDMOVIMIENTO &&
                dm.IDTIPOTRANSACCION == detalle.IDTIPOTRANSACCION);
            long lastIdDm = 0;

            if (dms.Any())
            {
                lastIdDm = dms.DefaultIfEmpty().Max(dm => dm == null ? 0 : dm.IDDETALLEMOVIMIENTO);
            }
            detalle.IDDETALLEMOVIMIENTO = lastIdDm + 1;
            detalle.INSERTAR            = false;
            db.SAB_ALM_DETALLEMOVIMIENTOS.AddObject(detalle);
            db.SaveChanges();
        }
Beispiel #7
0
        /// <summary>
        /// Actualiza las cantidades de los lotes dependiendo del tipo de operacion a realizar.
        /// Esta funcion no guarda en la base de datos, se debe actualizar fuera del lazo try-catch que la contenga (db.savechanges()).
        /// </summary>
        /// <param name="db">Datacontext</param>
        /// <param name="detalle">Detalle del movimiento</param>
        /// <param name="operacion">Contiene las operaciones a relizar sobre los lotes</param>
        public static void Actualizar(SinabEntities db, SAB_ALM_DETALLEMOVIMIENTOS detalle, OperacionesLotes operacion)
        {
            var cantidad = detalle.CANTIDAD;

            var lote =
                db.SAB_ALM_LOTES.FirstOrDefault(l => l.IDALMACEN == detalle.IDALMACEN && l.IDLOTE == detalle.IDLOTE
                                                &&
                                                ((l.CANTIDADDISPONIBLE >= cantidad && operacion.CantidadDisponible == 2) ||
                                                 operacion.CantidadDisponible <= 1)
                                                &&
                                                ((l.CANTIDADNODISPONIBLE >= cantidad && operacion.CantidadNoDisponible == 2) ||
                                                 operacion.CantidadNoDisponible <= 1)
                                                &&
                                                ((l.CANTIDADRESERVADA >= cantidad && operacion.CantidadReservada == 2) ||
                                                 operacion.CantidadReservada <= 1)
                                                &&
                                                ((l.CANTIDADVENCIDA >= cantidad && operacion.CantidadVencida == 2) ||
                                                 operacion.CantidadVencida <= 1)
                                                &&
                                                ((l.CANTIDADTEMPORAL >= cantidad && operacion.CantidadTemporal == 2) ||
                                                 operacion.CantidadTemporal <= 1)
                                                );

            if (lote == null)
            {
                return;
            }
            //evalua cantidad disponible
            lote.CANTIDADDISPONIBLE = EvaluarCantidades(cantidad, operacion.CantidadDisponible, lote.CANTIDADDISPONIBLE);

            //evalua cantidad no disponible
            lote.CANTIDADNODISPONIBLE = EvaluarCantidades(cantidad, operacion.CantidadNoDisponible,
                                                          lote.CANTIDADNODISPONIBLE);

            //evalua cantidad reservada
            lote.CANTIDADRESERVADA = EvaluarCantidades(cantidad, operacion.CantidadReservada, lote.CANTIDADRESERVADA);

            //evalua cantidad vencida
            lote.CANTIDADVENCIDA = EvaluarCantidades(cantidad, operacion.CantidadVencida, lote.CANTIDADVENCIDA);

            //evalua cantidad temporal
            lote.CANTIDADTEMPORAL = EvaluarCantidades(cantidad, operacion.CantidadTemporal, lote.CANTIDADTEMPORAL);

            //la db se debe actualizar fuera de esta funcion
        }
Beispiel #8
0
        /// <summary>
        /// Agrega el detalle a la tabla DetalleMovimiento.
        /// </summary>
        /// <param name="detalle">Detalle a agregar</param>
        /// <history> SINAB_DEV 02/07/2013</history>
        public static void Agregar(SAB_ALM_DETALLEMOVIMIENTOS detalle)
        {
            using (var db = new SinabEntities())
            {
                var dms = db.SAB_ALM_DETALLEMOVIMIENTOS.Where(dm =>
                                                              dm.IDESTABLECIMIENTO == detalle.IDESTABLECIMIENTO &&
                                                              dm.IDMOVIMIENTO == detalle.IDMOVIMIENTO &&
                                                              dm.IDTIPOTRANSACCION == detalle.IDTIPOTRANSACCION)
                          .DefaultIfEmpty()
                          .Max(dm => dm == null ? 0 : dm.IDDETALLEMOVIMIENTO);

                detalle.IDDETALLEMOVIMIENTO = dms + 1;

                db.SAB_ALM_DETALLEMOVIMIENTOS.AddObject(detalle);

                db.SaveChanges();
            }
        }
Beispiel #9
0
        /// <summary>
        /// Resta la cantidad de un detalle de movimiento al detalle de requisicion.
        /// Esta funcion no guarda en la base de datos, se debe actualizar fuera del lazo try-catch que la contenga (db.savechanges()).
        /// </summary>
        /// <param name="db">Datacontext</param>
        /// <param name="requisicion">Requisición</param>
        /// <param name="dm">Detalle del movimiento</param>
        /// <remarks>
        /// Si cantidad menor que 0: cantidad = 0
        /// Si procesado: !procesado
        /// </remarks>
        public void RestarDetalle(SinabEntities db, Requisicion requisicion, SAB_ALM_DETALLEMOVIMIENTOS dm)
        {
            var prod = db.vv_CATALOGOPRODUCTOS.FirstOrDefault(vv => vv.IDPRODUCTO == dm.IDPRODUCTO);
            var dr   =
                db.SAB_FARM_DETALLEREQUISICION.FirstOrDefault(
                    d => d.IdRequisicion == requisicion.IdRequisicion && d.Codigo == prod.CORRPRODUCTO);

            if (dr == null)
            {
                return;             //throw??
            }
            dr.CantidadDespachada = dr.CantidadDespachada -= dm.CANTIDAD;
            if (dr.CantidadDespachada < 0)
            {
                dr.CantidadDespachada = 0;
            }
            if (dr.Procesado)
            {
                dr.Procesado = false;
            }
            //db.SaveChanges(); la base de datos se actualiza fuera de esta funcion
        }