/// <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(); }
/// <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(); }
/// <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(); }
/// <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(); }
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); } }
/// <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(); }
/// <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 }
/// <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(); } }
/// <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 }