public DetalleResolverContingencia(int Id) { InitializeComponent(); try { //Contingencia = General.GetEntityById<MovimientoInventarioTraspasoContingencia>("MovimientoInventarioTraspasoContingencia", "MovimientoInventarioTraspasoContingenciaID", Id); Contingencia = Datos.GetEntity<MovimientoInventarioTraspasoContingencia>(c => c.MovimientoInventarioTraspasoContingenciaID == Id && c.Estatus); if (Contingencia == null) throw new EntityNotFoundException(Id.ToString(), "MovimientoInventarioTraspasoContingencia"); EsNuevo = false; } catch (Exception ex) { Util.MensajeError(ex.Message, GlobalClass.NombreApp); } }
public DetalleResolverContingencia(int Id) { InitializeComponent(); try { //Contingencia = General.GetEntityById<MovimientoInventarioTraspasoContingencia>("MovimientoInventarioTraspasoContingencia", "MovimientoInventarioTraspasoContingenciaID", Id); Contingencia = Datos.GetEntity <MovimientoInventarioTraspasoContingencia>(c => c.MovimientoInventarioTraspasoContingenciaID == Id && c.Estatus); if (Contingencia == null) { throw new EntityNotFoundException(Id.ToString(), "MovimientoInventarioTraspasoContingencia"); } EsNuevo = false; } catch (Exception ex) { Util.MensajeError(ex.Message, GlobalClass.NombreApp); } }
public static ResAcc RecibirTraspaso(int iUsuarioID, string sMotivo, List <modDetalleTraspaso> oDetalle, bool bValidarContingencia) { if (oDetalle.Count <= 0) { return(new ResAcc("No hay nada que recibir.")); } // Validar que lo recibido sea menor o igual que lo enviado foreach (var oReg in oDetalle) { if (oReg.Recibido > oReg.Cantidad) { return(new ResAcc("Existen uno o más artículos que tienen una cantidad recibida mayor a lo enviado.")); } } // Se verifica si existe alguna contingencia bool bExisteContingencia = false; foreach (var oReg in oDetalle) { if (oReg.Recibido < oReg.Cantidad) { bExisteContingencia = true; break; } } if (bExisteContingencia && bValidarContingencia) { return(new ResAcc("El traspaso tiene uno o más conflictos.", Cat.CodigosRes.ConflictoEnTraspasos)); } // Se valida el motivo, en caso de que haya habido contingencia if (bExisteContingencia && string.IsNullOrEmpty(sMotivo)) { return(new ResAcc("Debes especificar un motivo.")); } // Se obtiene el MovimientoInventario correspondiente al traspaso int iRecibirUnoID = oDetalle[0].MovimientoInventarioDetalleID; var oRecibirUno = Datos.GetEntity <MovimientoInventarioDetalle>(c => c.MovimientoInventarioDetalleID == iRecibirUnoID && c.Estatus); int iMovID = oRecibirUno.MovimientoInventarioID; var oTraspasoV = Datos.GetEntity <MovimientoInventarioView>(c => c.MovimientoInventarioID == iMovID); int iSucursalID = oTraspasoV.SucursalDestinoID.Valor(); // decimal mCostoTotal = 0; foreach (var oReg in oDetalle) { // Si la cantidad recibida es menor a lo enviado, almacenar la contingencia if (oReg.Recibido < oReg.Cantidad) { var contingencia = new MovimientoInventarioTraspasoContingencia() { MovimientoInventarioID = iMovID, MovimientoInventarioDetalleID = oReg.MovimientoInventarioDetalleID, ParteID = oReg.ParteID, CantidadEnviada = oReg.Cantidad, CantidadRecibida = oReg.Recibido, CantidadDiferencia = (oReg.Cantidad - oReg.Recibido), Comentario = sMotivo, UsuarioID = iUsuarioID, MovimientoInventarioEstatusContingenciaID = Cat.TraspasoEstatusContingencias.NoSolucionado }; Datos.Guardar <MovimientoInventarioTraspasoContingencia>(contingencia); } //Aumentar la existencia actual de la sucursal destino var oParte = Datos.GetEntity <Parte>(c => c.ParteID == oReg.ParteID && c.Estatus); if (!oParte.EsServicio.Valor()) { var existencia = Datos.GetEntity <ParteExistencia>(p => p.ParteID == oReg.ParteID && p.SucursalID == iSucursalID); if (existencia != null) { var inicial = existencia.Existencia; existencia.Existencia += oReg.Recibido; existencia.UsuarioID = iUsuarioID; existencia.FechaModificacion = DateTime.Now; Datos.Guardar <ParteExistencia>(existencia); var historial = new MovimientoInventarioHistorial() { MovmientoInventarioID = iMovID, ParteID = oReg.ParteID, ExistenciaInicial = Util.Decimal(inicial), ExistenciaFinal = Util.Decimal(existencia.Existencia), SucursalID = iSucursalID, UsuarioID = iUsuarioID }; Datos.Guardar <MovimientoInventarioHistorial>(historial); } } // Se agrega al Kardex var oPartePrecio = Datos.GetEntity <PartePrecio>(c => c.ParteID == oReg.ParteID && c.Estatus); AdmonProc.RegistrarKardex(new ParteKardex() { ParteID = oReg.ParteID, OperacionID = Cat.OperacionesKardex.EntradaTraspaso, SucursalID = iSucursalID, Folio = iMovID.ToString(), Fecha = DateTime.Now, RealizoUsuarioID = iUsuarioID, Entidad = Util.Cadena(oTraspasoV.NombreProveedor), Origen = oTraspasoV.SucursalOrigen, Destino = oTraspasoV.SucursalDestino, Cantidad = oReg.Recibido, Importe = oPartePrecio.Costo.Valor() }); // Se suma el importe de cada parte, para crear la póliza mCostoTotal += oPartePrecio.Costo.Valor(); } // Se genera la póliza especial correspondiente (AfeConta) var oUsuario = Datos.GetEntity <Usuario>(c => c.UsuarioID == iUsuarioID && c.Estatus); var oPoliza = ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Diario, string.Format("TRASPASO ORIGEN {0:00} DESTINO {1:00}" , oTraspasoV.SucursalOrigenID, oTraspasoV.SucursalDestinoID), Cat.ContaCuentasAuxiliares.Inventario, 0, mCostoTotal , oUsuario.NombreUsuario, Cat.Tablas.MovimientoInventario, iMovID, iSucursalID); //Actualizar el movimiento con los datos (fecha y usuario que recibio) var movimiento = Datos.GetEntity <MovimientoInventario>(m => m.MovimientoInventarioID == iMovID); if (null != movimiento) { movimiento.ExisteContingencia = bExisteContingencia; movimiento.UsuarioRecibioTraspasoID = iUsuarioID; movimiento.FechaRecepcion = DateTime.Now; movimiento.FechaModificacion = DateTime.Now; Datos.Guardar <MovimientoInventario>(movimiento); } return(new ResAcc()); }
private void btnProcesarRecibir_Click(object sender, EventArgs e) { // var log = new Log(); try { var movimientoId = Util.Entero(this.dgvRecibir.Rows[this.dgvRecibir.SelectedRows[0].Index].Cells["MovimientoInventarioID"].Value); if (movimientoId <= 0) { Util.MensajeError("Ocurrio un error al intentar recibir el traspaso.", GlobalClass.NombreApp); return; } // Se valida que no se haya procesado ya el traspaso en cuestión if (Datos.Exists<MovimientoInventario>(c => c.MovimientoInventarioID == movimientoId && c.FechaRecepcion.HasValue)) { UtilLocal.MensajeAdvertencia("El traspaso seleccionado ya fue procesado. Actualiza el listado para ver sólo los traspasos pendientes."); return; } // int iAutorizoID = 0; var ResU = UtilLocal.ValidarObtenerUsuario(null, "Autorización"); if (ResU.Exito) iAutorizoID = ResU.Respuesta.UsuarioID; else { Util.MensajeError("Error al validar el usuario.", GlobalClass.NombreApp); return; } bool existeContingencia = false; var res = Util.MensajePregunta("¿Está seguro de que la información es correcta?", GlobalClass.NombreApp); if (res == DialogResult.No) return; if (this.dgvRecibir.SelectedRows.Count <= 0) { Util.MensajeError("Debe seleccionar al menos un traspaso.", GlobalClass.NombreApp); return; } //Validar que lo recibido sea menor o igual que lo enviado foreach (DataGridViewRow row in this.dgvRecibirDetalle.Rows) { var enviado = Util.Decimal(row.Cells["Cantidad"].Value); var recibido = Util.Decimal(row.Cells["Recibido"].Value); if (recibido > enviado) { Util.MensajeError(string.Format("{0}{1}{2}", "El articulo ", row.Cells["NumeroParte"].Value, " No tiene una cantidad valida en la columna Recibido."), GlobalClass.NombreApp); return; } } //SplashScreen.Show(new Splash()); // log.Text = "Ingresando Traspaso, espere un momento..."; // log.Show(); foreach (DataGridViewRow row in this.dgvRecibirDetalle.Rows) { var enviado = Util.Decimal(row.Cells["Cantidad"].Value); var recibido = Util.Decimal(row.Cells["Recibido"].Value); if (recibido < enviado) { existeContingencia = true; } } if (existeContingencia) { var resp = Util.MensajePregunta("El Traspaso tiene uno o mas conflictos. ¿Está seguro de continuar y recibir esté Traspaso?", GlobalClass.NombreApp); if (resp == DialogResult.No) return; } if (!this.ValidacionesAlRecibir(existeContingencia)) return; Cargando.Mostrar(); this.Cursor = Cursors.WaitCursor; this.btnProcesarRecibir.Enabled = false; // Se obtienen la Sucursal Origen y Destino para el traspaso seleccionado string sOrigen = Util.Cadena(this.dgvRecibir.CurrentRow.Cells["Origen"].Value); string sDestino = Util.Cadena(this.dgvRecibir.CurrentRow.Cells["Destino"].Value); // decimal mCostoTotal = 0; foreach (DataGridViewRow row in this.dgvRecibirDetalle.Rows) { var enviado = Util.Decimal(row.Cells["Cantidad"].Value); var recibido = Util.Decimal(row.Cells["Recibido"].Value); var parteId = Util.Entero(row.Cells["ParteID"].Value); var numeroParte = Util.Cadena(row.Cells["NumeroParte"].Value); // Si la cantidad recibida es menor a lo enviado, almacenar la contingencia if (recibido < enviado) { var contingencia = new MovimientoInventarioTraspasoContingencia() { MovimientoInventarioID = movimientoId, MovimientoInventarioDetalleID = Util.Entero(row.Cells["MovimientoInventarioDetalleID"].Value), ParteID = parteId, CantidadEnviada = enviado, CantidadRecibida = recibido, CantidadDiferencia = enviado - recibido, Comentario = this.txtMotivo.Text, UsuarioID = iAutorizoID, FechaRegistro = DateTime.Now, MovimientoInventarioEstatusContingenciaID = 2, Estatus = true, Actualizar = true }; // log.AppendTextBox("Almacenando Contingencia..."); Datos.SaveOrUpdate<MovimientoInventarioTraspasoContingencia>(contingencia); } // Se actualiza la existencia y el kardex int iSucursalID = GlobalClass.SucursalID; var oPartePrecio = Datos.GetEntity<PartePrecio>(c => c.ParteID == parteId && c.Estatus); AdmonProc.AfectarExistenciaYKardex(parteId, iSucursalID, Cat.OperacionesKardex.EntradaTraspaso, movimientoId.ToString(), iAutorizoID , (existeContingencia ? "CONFLICTO" : this.cboProveedor.Text), sOrigen, sDestino, recibido, oPartePrecio.Costo.Valor(), Cat.Tablas.MovimientoInventario, movimientoId); var oExistencia = Datos.GetEntity<ParteExistencia>(c => c.ParteID == parteId && c.SucursalID == iSucursalID && c.Estatus); var historial = new MovimientoInventarioHistorial() { MovmientoInventarioID = movimientoId, ParteID = parteId, ExistenciaInicial = Util.Decimal(oExistencia.Existencia - recibido), ExistenciaFinal = Util.Decimal(oExistencia.Existencia), SucursalID = GlobalClass.SucursalID }; Datos.Guardar<MovimientoInventarioHistorial>(historial); //Aumentar la existencia actual de la sucursal destino /* var oParte = General.GetEntity<Parte>(c => c.ParteID == parteId && c.Estatus); if (!oParte.EsServicio.Valor()) { var existencia = General.GetEntity<ParteExistencia>(p => p.ParteID == parteId && p.SucursalID == GlobalClass.SucursalID); if (existencia != null) { var inicial = existencia.Existencia; existencia.Existencia += recibido; existencia.UsuarioID = iAutorizoID; // existencia.FechaModificacion = DateTime.Now; // log.AppendTextBox(string.Format("{0} {1}", "Actualizando existencia de:", numeroParte)); // General.SaveOrUpdate<ParteExistencia>(existencia, existencia); AdmonProc.AgregarExistencia(parteId, GlobalClass.SucursalID, recibido, Cat.Tablas.MovimientoInventario, movimientoId); var historial = new MovimientoInventarioHistorial() { MovmientoInventarioID = movimientoId, ParteID = parteId, ExistenciaInicial = Util.ConvertirDecimal(inicial), ExistenciaFinal = Util.ConvertirDecimal(existencia.Existencia), SucursalID = GlobalClass.SucursalID, UsuarioID = iAutorizoID, FechaRegistro = DateTime.Now, Estatus = true, Actualizar = true }; // log.AppendTextBox("Almacenando en Historial..."); General.SaveOrUpdate<MovimientoInventarioHistorial>(historial, historial); } } // Se agrega al Kardex var oPartePrecio = General.GetEntity<PartePrecio>(c => c.ParteID == parteId && c.Estatus); AdmonProc.RegistrarKardex(new ParteKardex() { ParteID = parteId, OperacionID = Cat.OperacionesKardex.EntradaTraspaso, SucursalID = GlobalClass.SucursalID, Folio = movimientoId.ToString(), Fecha = DateTime.Now, RealizoUsuarioID = iAutorizoID, Entidad = this.cboProveedor.Text, Origen = sOrigen, Destino = sDestino, Cantidad = recibido, Importe = oPartePrecio.Costo.Valor(), RelacionTabla = Cat.Tablas.MovimientoInventario, RelacionID = movimientoId }); */ // Se suma el importe de cada parte, para crear la póliza mCostoTotal += (oPartePrecio.Costo.Valor() * recibido); } // Se genera la póliza especial correspondiente (AfeConta) int iSucursalOrigenID = Util.Entero(this.dgvRecibir.CurrentRow.Cells["SucursalOrigenID"].Value); int iSucursalDestinoID = Util.Entero(this.dgvRecibir.CurrentRow.Cells["SucursalDestinoID"].Value); var oPoliza = ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Diario, string.Format("TRASPASO ORIGEN {0:00} DESTINO {1:00}", iSucursalOrigenID, iSucursalDestinoID) , Cat.ContaCuentasAuxiliares.Inventario, Cat.ContaCuentasAuxiliares.Inventario, mCostoTotal, ResU.Respuesta.NombreUsuario , Cat.Tablas.MovimientoInventario, movimientoId, iSucursalDestinoID); var oCuentaQuitar = Datos.GetEntity<ContaPolizaDetalle>(c => c.ContaPolizaID == oPoliza.ContaPolizaID && c.Abono > 0); if (oCuentaQuitar != null) { oCuentaQuitar.Abono = 0; Datos.Guardar<ContaPolizaDetalle>(oCuentaQuitar); } //Actualizar el movimiento con los datos (fecha y usuario que recibio) var movimiento = Datos.GetEntity<MovimientoInventario>(m => m.MovimientoInventarioID == movimientoId); if (null != movimiento) { movimiento.ExisteContingencia = existeContingencia; movimiento.UsuarioRecibioTraspasoID = iAutorizoID; movimiento.FechaRecepcion = DateTime.Now; movimiento.FechaModificacion = DateTime.Now; // log.AppendTextBox("Finalizando..."); Datos.SaveOrUpdate<MovimientoInventario>(movimiento); } this.LimpiarFormulario(); this.Cursor = Cursors.Default; //SplashScreen.Close(); // log.finalizo = true; // log.Close(); this.btnProcesarRecibir.Enabled = true; new Notificacion("Traspaso Recibido exitosamente", 2 * 1000).Mostrar(Principal.Instance); } catch (Exception ex) { this.Cursor = Cursors.Default; //SplashScreen.Close(); // log.finalizo = true; // log.Close(); this.btnProcesarRecibir.Enabled = true; Util.MensajeError(ex.Message, GlobalClass.NombreApp); } Cargando.Cerrar(); }
public static ResAcc RecibirTraspaso(int iUsuarioID, string sMotivo, List<modDetalleTraspaso> oDetalle, bool bValidarContingencia) { if (oDetalle.Count <= 0) return new ResAcc("No hay nada que recibir."); // Validar que lo recibido sea menor o igual que lo enviado foreach (var oReg in oDetalle) { if (oReg.Recibido > oReg.Cantidad) return new ResAcc("Existen uno o más artículos que tienen una cantidad recibida mayor a lo enviado."); } // Se verifica si existe alguna contingencia bool bExisteContingencia = false; foreach (var oReg in oDetalle) { if (oReg.Recibido < oReg.Cantidad) { bExisteContingencia = true; break; } } if (bExisteContingencia && bValidarContingencia) return new ResAcc("El traspaso tiene uno o más conflictos.", Cat.CodigosRes.ConflictoEnTraspasos); // Se valida el motivo, en caso de que haya habido contingencia if (bExisteContingencia && string.IsNullOrEmpty(sMotivo)) return new ResAcc("Debes especificar un motivo."); // Se obtiene el MovimientoInventario correspondiente al traspaso int iRecibirUnoID = oDetalle[0].MovimientoInventarioDetalleID; var oRecibirUno = Datos.GetEntity<MovimientoInventarioDetalle>(c => c.MovimientoInventarioDetalleID == iRecibirUnoID && c.Estatus); int iMovID = oRecibirUno.MovimientoInventarioID; var oTraspasoV = Datos.GetEntity<MovimientoInventarioView>(c => c.MovimientoInventarioID == iMovID); int iSucursalID = oTraspasoV.SucursalDestinoID.Valor(); // decimal mCostoTotal = 0; foreach (var oReg in oDetalle) { // Si la cantidad recibida es menor a lo enviado, almacenar la contingencia if (oReg.Recibido < oReg.Cantidad) { var contingencia = new MovimientoInventarioTraspasoContingencia() { MovimientoInventarioID = iMovID, MovimientoInventarioDetalleID = oReg.MovimientoInventarioDetalleID, ParteID = oReg.ParteID, CantidadEnviada = oReg.Cantidad, CantidadRecibida = oReg.Recibido, CantidadDiferencia = (oReg.Cantidad - oReg.Recibido), Comentario = sMotivo, UsuarioID = iUsuarioID, MovimientoInventarioEstatusContingenciaID = Cat.TraspasoEstatusContingencias.NoSolucionado }; Datos.Guardar<MovimientoInventarioTraspasoContingencia>(contingencia); } //Aumentar la existencia actual de la sucursal destino var oParte = Datos.GetEntity<Parte>(c => c.ParteID == oReg.ParteID && c.Estatus); if (!oParte.EsServicio.Valor()) { var existencia = Datos.GetEntity<ParteExistencia>(p => p.ParteID == oReg.ParteID && p.SucursalID == iSucursalID); if (existencia != null) { var inicial = existencia.Existencia; existencia.Existencia += oReg.Recibido; existencia.UsuarioID = iUsuarioID; existencia.FechaModificacion = DateTime.Now; Datos.Guardar<ParteExistencia>(existencia); var historial = new MovimientoInventarioHistorial() { MovmientoInventarioID = iMovID, ParteID = oReg.ParteID, ExistenciaInicial = Util.Decimal(inicial), ExistenciaFinal = Util.Decimal(existencia.Existencia), SucursalID = iSucursalID, UsuarioID = iUsuarioID }; Datos.Guardar<MovimientoInventarioHistorial>(historial); } } // Se agrega al Kardex var oPartePrecio = Datos.GetEntity<PartePrecio>(c => c.ParteID == oReg.ParteID && c.Estatus); AdmonProc.RegistrarKardex(new ParteKardex() { ParteID = oReg.ParteID, OperacionID = Cat.OperacionesKardex.EntradaTraspaso, SucursalID = iSucursalID, Folio = iMovID.ToString(), Fecha = DateTime.Now, RealizoUsuarioID = iUsuarioID, Entidad = Util.Cadena(oTraspasoV.NombreProveedor), Origen = oTraspasoV.SucursalOrigen, Destino = oTraspasoV.SucursalDestino, Cantidad = oReg.Recibido, Importe = oPartePrecio.Costo.Valor() }); // Se suma el importe de cada parte, para crear la póliza mCostoTotal += oPartePrecio.Costo.Valor(); } // Se genera la póliza especial correspondiente (AfeConta) var oUsuario = Datos.GetEntity<Usuario>(c => c.UsuarioID == iUsuarioID && c.Estatus); var oPoliza = ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Diario, string.Format("TRASPASO ORIGEN {0:00} DESTINO {1:00}" , oTraspasoV.SucursalOrigenID, oTraspasoV.SucursalDestinoID), Cat.ContaCuentasAuxiliares.Inventario, 0, mCostoTotal , oUsuario.NombreUsuario, Cat.Tablas.MovimientoInventario, iMovID, iSucursalID); //Actualizar el movimiento con los datos (fecha y usuario que recibio) var movimiento = Datos.GetEntity<MovimientoInventario>(m => m.MovimientoInventarioID == iMovID); if (null != movimiento) { movimiento.ExisteContingencia = bExisteContingencia; movimiento.UsuarioRecibioTraspasoID = iUsuarioID; movimiento.FechaRecepcion = DateTime.Now; movimiento.FechaModificacion = DateTime.Now; Datos.Guardar<MovimientoInventario>(movimiento); } return new ResAcc(); }