private void btnCambiosSistema_Click(object sender, EventArgs e) { // Se solicita la validación de Usuario var ResU = UtilLocal.ValidarObtenerUsuario(); if (ResU.Error) { return; } if (UtilLocal.ValidarPermiso(ResU.Respuesta.UsuarioID, "CambiosSistema.Agregar")) { CambiosSistema.Instance.PermisoAgregar = ""; } else { CambiosSistema.Instance.PermisoAgregar = "No tienes permisos para agregar cambios."; } if (UtilLocal.ValidarPermiso(ResU.Respuesta.UsuarioID, "CambiosSistema.Modificar")) { CambiosSistema.Instance.PermisoModificar = ""; } else { CambiosSistema.Instance.PermisoModificar = "No tienes permisos para modificar cambios."; } //this.addControlInPanel(CambiosSistema.Instance); //this.CargarControl("CambiosSistema"); this.CargarControl(CambiosSistema.Instance); }
private void BorrarMovimiento(DataGridViewRow oFila) { bool bEliminar = false; if (Util.Logico(oFila.Cells["con_FueManual"].Value)) { if (UtilLocal.MensajePreguntaCancelar("¿Estás seguro que deseas eliminar el movimiento seleccionado?") == DialogResult.Yes) { bEliminar = true; } } else { if (oFila.DefaultCellStyle.ForeColor != Color.Green) { // Se valida el permiso var oResU = UtilLocal.ValidarObtenerUsuario("Bancos.Movimientos.Borrar"); if (oResU.Error) { return; } bEliminar = true; } } if (bEliminar) { int iMovID = Util.Entero(oFila.Cells["con_BancoCuentaMovimientoID"].Value); ContaProc.EliminarMovimientoBancario(iMovID); this.LlenarConciliaciones(); } }
private void Cancelar9500(int i9500ID) { var o9500 = Datos.GetEntity <Cotizacion9500>(q => q.Cotizacion9500ID == i9500ID && q.Estatus); // Se valida que ya se haya cobrado la venta del anticipo var oVenta = Datos.GetEntity <Venta>(q => q.VentaID == o9500.AnticipoVentaID && q.Estatus); if (oVenta.VentaEstatusID == Cat.VentasEstatus.Realizada) { UtilLocal.MensajeAdvertencia("El 9500 seleccionado no ha sido cobrado. Para cancelarlo, cancela la Venta del anticipo desde Ventas por Cobrar."); return; } if (UtilLocal.MensajePregunta("¿Estás seguro que deseas cancelar el 9500 seleccionado?") == DialogResult.Yes) { var oMotivo = UtilLocal.ObtenerValor("¿Cuál es el motivo de la baja?", "", MensajeObtenerValor.Tipo.TextoLargo); if (oMotivo == null) { return; } var oResU = UtilLocal.ValidarObtenerUsuario(); if (oResU.Error) { return; } Cargando.Mostrar(); // Se cancela el 9500 VentasProc.Cancelar9500(i9500ID, Util.Cadena(oMotivo), oResU.Respuesta.UsuarioID); Cargando.Cerrar(); this.CargarLista9500(); } }
public static ResAcc <Usuario> ValidarObtenerUsuario(string sPermiso) { return(UtilLocal.ValidarObtenerUsuario(new List <string>() { sPermiso }, true, null)); }
public static ResAcc <Usuario> ValidarObtenerUsuario(string sPermiso, string sTitulo) { return(UtilLocal.ValidarObtenerUsuario((sPermiso == null ? null : new List <string>() { sPermiso }), true, sTitulo)); }
private void btnNcAgregar_Click(object sender, EventArgs e) { // Se solicita el concepto e importe de la nota de crédito string sConcepto = Util.Cadena(UtilLocal.ObtenerValor("Concepto de la Nota de Crédito:", "", MensajeObtenerValor.Tipo.TextoLargo)); if (sConcepto == "") { return; } decimal mImporte = Util.Decimal(UtilLocal.ObtenerValor("Importe de la Nota de Crédito:", "0.00", MensajeObtenerValor.Tipo.Decimal)); if (mImporte == 0) { return; } // Se solicita la autorización var ResAut = UtilLocal.ValidarObtenerUsuario("Autorizaciones.Ventas.NotasDeCredito.Agregar", "Autorización"); // Se genera la nota, si todo fue bien if (ResAut.Exito) { var ResNC = VentasProc.GenerarNotaDeCredito(this.Cliente.ClienteID, mImporte, sConcepto, Cat.OrigenesNotaDeCredito.Directo, ResAut.Respuesta.UsuarioID); // Se manda a crear la póliza contable correspondiente (AfeConta) var oVale = Datos.GetEntity <NotaDeCredito>(c => c.NotaDeCreditoID == ResNC.Respuesta && c.Estatus); ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.ValeDirecto, oVale.NotaDeCreditoID, this.Cliente.Nombre, oVale.Observacion); // Se guarda la autorización VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.NotaDeCreditoCrear, Cat.Tablas.NotaDeCredito, ResNC.Respuesta, ResAut.Respuesta.UsuarioID); // Se manda imprimir el ticket correspondiente VentasLoc.GenerarTicketNotaDeCredito(ResNC.Respuesta); // UtilLocal.MostrarNotificacion("Nota de Crédito generada correctamente."); this.NcAplicarFiltro(); } }
private void btnGuardar_Click(object sender, System.EventArgs e) { // Se solicita contraseña del Usuario var Res = UtilLocal.ValidarObtenerUsuario("Ventas.ReporteDeFaltante.Agregar"); if (Res.Error) { return; } ReporteDeFaltante Faltante = new ReporteDeFaltante() { SucursalID = GlobalClass.SucursalID , RealizoUsuarioID = Res.Respuesta.UsuarioID , ParteID = this.oParte.ParteID , CantidadRequerida = (int)this.nudCantidad.Value , Comentario = this.txtComentario.Text }; Datos.Guardar <ReporteDeFaltante>(Faltante); UtilLocal.MostrarNotificacion("Reporte guardado correctamente."); this.Dispose(); }
private void BorrarPoliza(int iPolizaID) { // Se valida el permiso var oResU = UtilLocal.ValidarObtenerUsuario("Contabilidad.Polizas.Borrar"); if (oResU.Error) { return; } // Se borra la póliza ContaProc.BorrarPoliza(iPolizaID); this.LlenarArbol(); }
private void btnAplicar_Click(object sender, System.EventArgs e) { // Se solicita contraseña del Usuario var ValUsr = UtilLocal.ValidarObtenerUsuario("AplicarPartes.Agregar"); if (ValUsr.Error) { return; } // Se procede a guardar los datos int? oMotorID = null, oAnio = null; ParteVehiculo ParteV; for (int iFila = 0; iFila < this.dgvPartes.Rows.Count; iFila++) { if (Util.Logico(this.dgvPartes["Aplicar", iFila].Value)) { if (this.oVehiculo.MotorID > 0) { oMotorID = this.oVehiculo.MotorID; } if (this.oVehiculo.Anio > 0) { oAnio = this.oVehiculo.Anio; } ParteV = new ParteVehiculo() { ParteID = Util.Entero(this.dgvPartes["ParteID", iFila].Value) , ModeloID = this.oVehiculo.ModeloID , MotorID = oMotorID , Anio = oAnio , TipoFuenteID = Cat.TipoDeFuentes.Mostrador , RegistroUsuarioID = ValUsr.Respuesta.UsuarioID }; var Res = Guardar.ParteVehiculo(ParteV); if (Res.Exito) { UtilLocal.MostrarNotificacion("Aplicación guardada exitosamente."); } else { UtilLocal.MostrarNotificacion(Res.Mensaje); } } } this.Close(); }
private void dgvNotasDeCredito_KeyDown(object sender, KeyEventArgs e) { if (this.dgvNotasDeCredito.CurrentRow == null) { return; } if (e.KeyCode == Keys.Delete) { // Se verifica la nota de crédito seleccionada int iNotaDeCreditoID = Util.Entero(this.dgvNotasDeCredito.CurrentRow.Cells["ncNotaDeCreditoID"].Value); var oNota = Datos.GetEntity <NotaDeCredito>(q => q.NotaDeCreditoID == iNotaDeCreditoID && q.Estatus); if (oNota.Valida == false) { UtilLocal.MensajeAdvertencia("La nota de crédito seleccionada ya no es válida. No se puede continuar."); return; } if (UtilLocal.MensajePregunta("¿Estás seguro que deseas dar de baja la nota de crédito seleccionada?") == DialogResult.Yes) { // Se solicita el motivo var oMotivo = UtilLocal.ObtenerValor("Indica el motivo de la baja", "", MensajeObtenerValor.Tipo.TextoLargo); if (oMotivo != null) { // Se solicita la validación de usuario var ResU = UtilLocal.ValidarObtenerUsuario("Ventas.NotasDeCredito.Baja"); if (ResU.Exito) { oNota.Valida = false; oNota.MotivoBaja = Util.Cadena(oMotivo); Datos.Guardar <NotaDeCredito>(oNota); this.NcAplicarFiltro(); } else { if (ResU.Respuesta != null) { UtilLocal.MensajeAdvertencia("No tienes permisos para realizar la operación solicitada."); } } } } } }
private bool AccionGuardar() { if (!this.Validar()) { return(false); } // Se solicita la validación de usuario var oResU = UtilLocal.ValidarObtenerUsuario(); if (oResU.Error) { return(false); } Cargando.Mostrar(); // Se guarda el error var oError = new ParteError() { ParteID = this.ParteID, Fecha = DateTime.Now, Foto = this.chkFoto.Checked, Equivalente = this.chkEquivalente.Checked, Aplicacion = this.chkAplicacion.Checked, Alterno = this.chkAlterno.Checked, Complemento = this.chkComplemento.Checked, Otro = this.chkOtro.Checked, ComentarioError = this.txtComentario.Text, ErrorUsuarioID = oResU.Respuesta.UsuarioID }; Datos.Guardar <ParteError>(oError); Cargando.Cerrar(); return(true); }
protected override void btnGuardar_Click(object sender, EventArgs e) { try { if (!Validaciones()) { return; } if (EsNuevo) { } else { 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; } SplashScreen.Show(new Splash()); this.btnGuardar.Enabled = false; var ContingenciaCompleta = Datos.GetEntity <MovimientoInventarioContingenciasView>(c => c.MovimientoInventarioTraspasoContingenciaID == Contingencia.MovimientoInventarioTraspasoContingenciaID); if (null == ContingenciaCompleta) { return; } //Actualiza la contingencia Contingencia.FechaModificacion = DateTime.Now; Contingencia.MovimientoInventarioEstatusContingenciaID = 1; Contingencia.UsuarioID = GlobalClass.UsuarioGlobal.UsuarioID; Contingencia.UsuarioSolucionoID = GlobalClass.UsuarioGlobal.UsuarioID; Contingencia.FechaSoluciono = DateTime.Now; Contingencia.TipoOperacionID = Util.Entero(this.cboTipoOperacion.SelectedValue); Contingencia.TipoConceptoOperacionID = Util.Entero(this.cboConceptoOperacion.SelectedValue); Contingencia.ObservacionSolucion = this.txtObservacion.Text; if (Util.Entero(this.cboTipoOperacion.SelectedValue) == Cat.TiposDeOperacionMovimientos.SalidaInventario) { Contingencia.ObservacionSolucion += (" - SE CREA UNA ENTRADA PARA DEVOLVER EL TRASPASO A LA TIENDA ORIGEN Y EN EL SEGUNDO MOVIMIENTO UNA SALIDA PARA PODER HACER LA SALIDA DEL INVENTARIO"); } Contingencia.FechaModificacion = DateTime.Now; Datos.SaveOrUpdate <MovimientoInventarioTraspasoContingencia>(Contingencia); int iSucursalID = ContingenciaCompleta.SucursalOrigenID.Valor(); string sOrigen = UtilDatos.NombreDeSucursal(ContingenciaCompleta.SucursalOrigenID.Valor()); string sDestino = UtilDatos.NombreDeSucursal(ContingenciaCompleta.SucursalDestinoID.Valor()); var oPrecio = Datos.GetEntity <PartePrecio>(c => c.ParteID == ContingenciaCompleta.ParteID && c.Estatus); switch (Util.Entero(cboTipoOperacion.SelectedValue)) { case 2: #region [ Entrada Inventario ] //Insertar Movimiento var movimientoEntradaI = new MovimientoInventario() { TipoOperacionID = Util.Entero(this.cboTipoOperacion.SelectedValue), TipoPagoID = 1, ProveedorID = 1, SucursalOrigenID = ContingenciaCompleta.SucursalOrigenID, SucursalDestinoID = ContingenciaCompleta.SucursalDestinoID, FechaFactura = DateTime.Now, FechaRecepcion = DateTime.Now, FolioFactura = null, Subtotal = null, IVA = null, ImporteTotal = 0, FueLiquidado = false, TipoConceptoOperacionID = ContingenciaCompleta.TipoConceptoOperacionID, Observacion = string.Format("{0}: {1}", "Traspaso por resolucion de un Conflicto. Movimiento: ", Contingencia.MovimientoInventarioID), Articulos = null, Unidades = null, Seguro = null, ImporteTotalSinDescuento = null }; Datos.Guardar <MovimientoInventario>(movimientoEntradaI); if (movimientoEntradaI.MovimientoInventarioID < 1) { new EntityNotFoundException("MovimientoInventarioID", "MovimientoInventario"); return; } //Insertar MovimientoDetalle var detalleMovimiento = new MovimientoInventarioDetalle() { MovimientoInventarioID = movimientoEntradaI.MovimientoInventarioID, ParteID = ContingenciaCompleta.ParteID, Cantidad = Util.Decimal(ContingenciaCompleta.Diferencia), PrecioUnitario = 0, Importe = 0, FueDevolucion = false, FechaRegistro = DateTime.Now, Estatus = true }; Datos.SaveOrUpdate <MovimientoInventarioDetalle>(detalleMovimiento); //Actualizar ParteExistencia /* var sucursalId = ContingenciaCompleta.SucursalOrigenID; * var existencia = General.GetEntity<ParteExistencia>(p => p.ParteID == ContingenciaCompleta.ParteID && p.SucursalID == sucursalId); * if (existencia != null) * { * existencia.Existencia += Util.ConvertirDecimal(ContingenciaCompleta.Diferencia); * Datos.Guardar<ParteExistencia>(existencia);//dmod * } */ // AdmonProc.AgregarExistencia(ContingenciaCompleta.ParteID, sucursalId.Valor(), ContingenciaCompleta.Diferencia.Valor() // , Cat.Tablas.MovimientoInventario, movimientoEntradaI.MovimientoInventarioID); // Se modifica la existencia y el kardex AdmonProc.AfectarExistenciaYKardex(ContingenciaCompleta.ParteID, iSucursalID, Cat.OperacionesKardex.EntradaTraspaso , Contingencia.MovimientoInventarioID.ToString(), Contingencia.UsuarioSolucionoID.Valor(), "Conflicto Resuelto Entrada" , sOrigen, sDestino, ContingenciaCompleta.Diferencia.Valor() , oPrecio.Costo.Valor(), Cat.Tablas.MovimientoInventario, movimientoEntradaI.MovimientoInventarioID); #endregion break; case 3: #region [ Salida Inventario ] //Insertar Movimiento var movimientoSalida = new MovimientoInventario() { TipoOperacionID = Util.Entero(this.cboTipoOperacion.SelectedValue), TipoPagoID = 1, ProveedorID = 1, SucursalOrigenID = ContingenciaCompleta.SucursalOrigenID, SucursalDestinoID = ContingenciaCompleta.SucursalDestinoID, FechaFactura = DateTime.Now, FechaRecepcion = DateTime.Now, FolioFactura = null, Subtotal = null, IVA = null, ImporteTotal = 0, FueLiquidado = false, TipoConceptoOperacionID = Util.Entero(this.cboConceptoOperacion.SelectedValue), Observacion = string.Format("{0}: {1}", "Traspaso por resolucion de un Conflicto. Movimiento: ", Contingencia.MovimientoInventarioID), Articulos = null, Unidades = null, Seguro = null, ImporteTotalSinDescuento = null }; Datos.Guardar <MovimientoInventario>(movimientoSalida); if (movimientoSalida.MovimientoInventarioID < 1) { new EntityNotFoundException("MovimientoInventarioID", "MovimientoInventario"); return; } //Insertar MovimientoDetalle var detalleMovimientoS = new MovimientoInventarioDetalle() { MovimientoInventarioID = movimientoSalida.MovimientoInventarioID, ParteID = ContingenciaCompleta.ParteID, Cantidad = Util.Decimal(ContingenciaCompleta.Diferencia), PrecioUnitario = 0, Importe = 0, FueDevolucion = false, FechaRegistro = DateTime.Now, Estatus = true }; Datos.SaveOrUpdate <MovimientoInventarioDetalle>(detalleMovimientoS); //No se descuenta por que ya se habia descontado en el traspaso anterior // Ahora sí se generan dos registros en kardex, uno de entrada y luego uno de salida, para que al final quede igual // Se hace así para mantener un registro de la operación // Se hace primero la entrada AdmonProc.AfectarExistenciaYKardex(ContingenciaCompleta.ParteID, iSucursalID, Cat.OperacionesKardex.EntradaTraspaso , Contingencia.MovimientoInventarioID.ToString(), Contingencia.UsuarioSolucionoID.Valor(), "Conflicto Resuelto Salida" , sOrigen, sDestino, ContingenciaCompleta.Diferencia.Valor() , oPrecio.Costo.Valor(), Cat.Tablas.MovimientoInventario, movimientoSalida.MovimientoInventarioID); // Luego la salida AdmonProc.AfectarExistenciaYKardex(ContingenciaCompleta.ParteID, iSucursalID, Cat.OperacionesKardex.SalidaTraspaso , Contingencia.MovimientoInventarioID.ToString(), Contingencia.UsuarioSolucionoID.Valor(), "Conflicto Resuelto Salida" , sOrigen, sDestino, (ContingenciaCompleta.Diferencia.Valor() * -1) , oPrecio.Costo.Valor(), Cat.Tablas.MovimientoInventario, movimientoSalida.MovimientoInventarioID); #endregion break; case 5: #region [ Traspaso ] //Almacenar traspaso var traspaso = new MovimientoInventario() { TipoOperacionID = Util.Entero(this.cboTipoOperacion.SelectedValue), SucursalOrigenID = ContingenciaCompleta.SucursalOrigenID, SucursalDestinoID = ContingenciaCompleta.SucursalDestinoID, ImporteTotal = 0, FueLiquidado = false, UsuarioSolicitoTraspasoID = Contingencia.UsuarioSolucionoID, ExisteContingencia = false, Observacion = string.Format("{0}: {1}", "Traspaso por resolucion de un Conflicto. Movimiento: ", Contingencia.MovimientoInventarioID) }; Datos.Guardar <MovimientoInventario>(traspaso); //Almacenar el detalle del traspaso if (traspaso.MovimientoInventarioID > 0) { var detalleTraspaso = new MovimientoInventarioDetalle() { MovimientoInventarioID = traspaso.MovimientoInventarioID, ParteID = ContingenciaCompleta.ParteID, Cantidad = Util.Decimal(ContingenciaCompleta.Diferencia), PrecioUnitario = 0, Importe = 0, FueDevolucion = false, FechaRegistro = DateTime.Now, Estatus = true }; Datos.SaveOrUpdate <MovimientoInventarioDetalle>(detalleTraspaso); //No se descuenta por que ya se habia descontado en el primer traspaso } #endregion break; default: break; } } SplashScreen.Close(); this.btnGuardar.Enabled = true; new Notificacion("Conflicto Resuelto exitosamente", 2 * 1000).Mostrar(Principal.Instance); catalogosTraspasos.Instance.CustomInvoke <catalogosTraspasos>(m => m.ActualizarListadoConflictos()); } catch (Exception ex) { SplashScreen.Close(); this.btnGuardar.Enabled = true; Util.MensajeError(ex.Message, GlobalClass.NombreApp); } this.Close(); }
private bool AccionAceptar() { // Cargando.Mostrar(); decimal mFaltante = 0; int iClienteID = 0; int iCobroVentaID = 0; bool bUsarCascosAFavor = false; bool bCrearVale = false; bool bCascoAFavor = false; int iCascoRecibido = Util.Entero(this.cmbCascoRecibido.SelectedValue); int iSucursalID = GlobalClass.SucursalID; int iCascoRegistroID = this.oCascoRegistro.CascoRegistroID; int iParteID = this.oCascoRegistro.ParteID; var oParte = Datos.GetEntity <Parte>(c => c.ParteID == iParteID && c.Estatus); var oVenta = Datos.GetEntity <Venta>(c => c.VentaID == this.oCascoRegistro.VentaID && c.Estatus); iClienteID = oVenta.ClienteID; var oCliente = Datos.GetEntity <Cliente>(c => c.ClienteID == oVenta.ClienteID && c.Estatus); if (iCascoRecibido != oParte.RequiereCascoDe) { // Si se recibió algún casco if (iCascoRecibido > 0) { // Se obtienen el importe requerido var oPrecioReq = Datos.GetEntity <PartePrecio>(c => c.ParteID == oParte.RequiereCascoDe && c.Estatus); var oPrecioRec = Datos.GetEntity <PartePrecio>(c => c.ParteID == iCascoRecibido && c.Estatus); if (oPrecioReq == null || oPrecioRec == null) { UtilLocal.MensajeAdvertencia("Hubo un error al obtener el Casco requerido."); return(false); } // Se calcula el importe faltante decimal?[] aPreciosReq = new decimal?[5] { oPrecioReq.PrecioUno, oPrecioReq.PrecioDos, oPrecioReq.PrecioTres, oPrecioReq.PrecioCuatro, oPrecioReq.PrecioCinco }; decimal?[] aPreciosRec = new decimal?[5] { oPrecioRec.PrecioUno, oPrecioRec.PrecioDos, oPrecioRec.PrecioTres, oPrecioRec.PrecioCuatro, oPrecioRec.PrecioCinco }; mFaltante = (aPreciosReq[oCliente.ListaDePrecios - 1] - aPreciosRec[oCliente.ListaDePrecios - 1]).Valor(); // Se evalúa el importe faltante, para tomar alguna acción if (mFaltante != 0) { // Si el casco recibido es menor que el casco esperado if (mFaltante > 0) { // Se busca por folio de cobro o por cascos a favor, según sea el caso if (this.txtFolioDeCobro.Text == "") { decimal mTotalAFavor = Util.Decimal(this.lblTotalAFavor.Text); if (mTotalAFavor != mFaltante) { UtilLocal.MensajeAdvertencia("El importe seleccionado con los Cascos a favor debe ser de " + mFaltante.ToString(GlobalClass.FormatoMoneda)); return(false); } bUsarCascosAFavor = true; } else { // Se obtiene el importe de la venta var oVentaCobroV = Datos.GetEntity <VentasView>(c => c.Folio == this.txtFolioDeCobro.Text && c.SucursalID == GlobalClass.SucursalID && (c.VentaEstatusID == Cat.VentasEstatus.Cobrada || c.VentaEstatusID == Cat.VentasEstatus.Completada)); if (oVentaCobroV == null) { UtilLocal.MensajeAdvertencia("La venta específicada no existe, no es de esta sucursal o no ha sido cobrada."); return(false); } iCobroVentaID = oVentaCobroV.VentaID; // Se valida que la parte de la venta sea una "diferencia de casco" if (!Datos.Exists <VentaDetalle>(c => c.VentaID == iCobroVentaID && c.ParteID == Cat.Partes.DiferenciaDeCascos && c.Estatus)) { UtilLocal.MensajeAdvertencia("La venta especificada no corresponde a una Diferencia de Casco."); return(false); } // Se valida que el importe cobrado sea el correspondiente if (oVentaCobroV.Total != mFaltante) { UtilLocal.MensajeAdvertencia("El cobro por la diferencia debe de ser de " + mFaltante.ToString(GlobalClass.FormatoMoneda)); return(false); } } } // Si el casco recibido es mayor que el casco esperado else if (mFaltante < 0) { var oRes = UtilLocal.MensajePreguntaCancelar("El importe del casco recibido es mayor al esperado. ¿Deseas crear un Vale a favor del Cliente?"); if (oRes == DialogResult.Cancel) { return(false); } bCrearVale = (oRes == DialogResult.Yes); bCascoAFavor = !bCrearVale; } } } else // Si no se recibió ningún casco, se evalúa la venta { // Se obtiene la VentaID var oVentaCobro = Datos.GetEntity <Venta>(c => c.Folio == this.txtFolioDeCobro.Text && c.SucursalID == GlobalClass.SucursalID && (c.VentaEstatusID == Cat.VentasEstatus.Cobrada || c.VentaEstatusID == Cat.VentasEstatus.Completada) && c.Estatus); if (oVentaCobro == null) { UtilLocal.MensajeAdvertencia("La venta específicada no existe, no es de esta sucursal o no ha sido cobrada."); return(false); } iCobroVentaID = oVentaCobro.VentaID; // Se valida que la venta tenga la Parte correspondiente al casco if (!Datos.Exists <VentaDetalle>(c => c.VentaID == iCobroVentaID && c.ParteID == oParte.RequiereDepositoDe && c.Estatus)) { UtilLocal.MensajeAdvertencia("El cobro del Casco no corresonde al Artículo."); return(false); } } } // Cargando.Cerrar(); // Se solicita la contraseña var oResU = UtilLocal.ValidarObtenerUsuario("Ventas.ControlDeCascos.Completar"); if (oResU.Error) { return(false); } Cargando.Mostrar(); // Se completa el registro de casco DateTime dAhora = DateTime.Now; // Se registran y modifican los Cascos a favor usados, si aplica if (bUsarCascosAFavor) { foreach (DataGridViewRow oFila in this.dgvImportesAFavor.Rows) { if (Util.Logico(oFila.Cells["Sel"].Value)) { // Se registra el importe usado para el CascoImporte int iCascoImporteID = Util.Entero(oFila.Cells["CascoImporteID"].Value); decimal mAUsar = Util.Decimal(oFila.Cells["ImporteAUsar"].Value); var oCascoImporte = Datos.GetEntity <CascoImporte>(c => c.CascoImporteID == iCascoImporteID); oCascoImporte.ImporteUsado += mAUsar; Datos.Guardar <CascoImporte>(oCascoImporte); // Se registra la relación entre el CascoRegistro y el CascoImporte var oCascoRegImp = new CascoRegistroImporte() { CascoRegistroID = this.oCascoRegistro.CascoRegistroID, CascoImporteID = oCascoImporte.CascoImporteID, Importe = mAUsar }; Datos.Guardar <CascoRegistroImporte>(oCascoRegImp); } } } // Se crea el vale, si aplica if (bCrearVale) { var oRes = VentasProc.GenerarNotaDeCredito(iClienteID, (mFaltante * -1), "", Cat.OrigenesNotaDeCredito.CascoDeMayorValor , this.oCascoRegistro.CascoRegistroID); // Se crea la póliza contable (AfeConta) ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.ValeDirecto, oRes.Respuesta, oCliente.Nombre, "POR CASCO MAYOR"); // Se manda a imprimir el ticket VentasLoc.GenerarTicketNotaDeCredito(oRes.Respuesta); } // Se registra el casco a favor, si aplica if (bCascoAFavor) { var oCascoImporte = new CascoImporte() { Fecha = dAhora, OrigenID = this.oCascoRegistro.CascoRegistroID, Importe = (mFaltante * -1) }; Datos.Guardar <CascoImporte>(oCascoImporte); } // Se afecta la existencia y el kárdex del casco recibido if (iCascoRecibido > 0) { var oSucursal = Datos.GetEntity <Sucursal>(c => c.SucursalID == iSucursalID && c.Estatus); var oPrecioRec = Datos.GetEntity <PartePrecio>(c => c.ParteID == iCascoRecibido && c.Estatus); AdmonProc.AfectarExistenciaYKardex(iCascoRecibido, GlobalClass.SucursalID, Cat.OperacionesKardex.EntradaInventario, iCascoRegistroID.ToString() , oResU.Respuesta.UsuarioID, oCliente.Nombre, "CONTROL DE CASCOS", oSucursal.NombreSucursal, 1, oPrecioRec.Costo.Valor() , Cat.Tablas.CascoRegistro, iCascoRegistroID); } // Se guardan los datos del registro de casco this.oCascoRegistro.RecibidoCascoID = (iCascoRecibido > 0 ? (int?)iCascoRecibido : null); this.oCascoRegistro.RealizoUsuarioID = oResU.Respuesta.UsuarioID; this.oCascoRegistro.CobroVentaID = (iCobroVentaID > 0 ? (int?)iCobroVentaID : null); Datos.Guardar <CascoRegistro>(this.oCascoRegistro); // Se manda a imprimir el ticket correspondiente var oCascoRegV = Datos.GetEntity <CascosRegistrosView>(c => c.CascoRegistroID == iCascoRegistroID); var oRep = new Report(); oRep.Load(GlobalClass.ConfiguracionGlobal.pathReportes + "ControlDeCascos.frx"); VentasLoc.TicketAgregarLeyendas(ref oRep); oRep.RegisterData(new List <CascosRegistrosView>() { oCascoRegV }, "ControlDeCasco"); UtilLocal.EnviarReporteASalida("Reportes.ControlDeCascos.Completar.Salida", oRep); Cargando.Cerrar(); UtilLocal.MostrarNotificacion("Control de casco completado correctamente."); return(true); }
public override bool Ejecutar() { // Se verifica si ya se hizo el cierre de caja if (UtilDatos.VerCierreDeDaja()) { UtilLocal.MensajeAdvertencia("Ya se hizo el Corte de Caja. No se puede continuar."); return(false); } // Se valida la parte de detalle if (!this.ctlDetalle.Validar()) { return(false); } // Se valida la parte de búsqueda if (!this.ctlBusqueda.Validar()) { return(false); } int iVentaID = this.ctlBusqueda.VentaID; // Se valida que no sea una venta usada para cobro de Control de Cascos if (Datos.Exists <CascosRegistrosView>(c => c.CobroVentaID == iVentaID && (c.VentaEstatusID != Cat.VentasEstatus.Cancelada && c.VentaEstatusID != Cat.VentasEstatus.CanceladaSinPago))) { UtilLocal.MensajeAdvertencia("La venta seleccionado fue utilizada para un cobro de Control de Cascos. No se puede cancelar."); return(false); } // bool bCancelacion = this.ctlDetalle.TodosMarcados(); var oVentaV = Datos.GetEntity <VentasView>(q => q.VentaID == iVentaID); // Se verifica si es una cancelación de otra sucursal if (oVentaV.SucursalID != GlobalClass.SucursalID) { if (UtilLocal.MensajePregunta("La Venta seleccionada es de otra Sucursal. ¿Deseas continuar?") != DialogResult.Yes) { return(false); } } // Se verifica si es una cancelación de factura de varios tickets int iVentaFacturaID = 0; bool bFacturaMultiple = false; bool bCancelarTodaLaFactura = this.ctlBusqueda.CancelarTodaLaFactura; List <VentaFacturaDetalle> oVentasFactura = null; if (oVentaV.Facturada) { iVentaFacturaID = Datos.GetEntity <VentaFacturaDetalle>(q => q.VentaID == oVentaV.VentaID && q.Estatus).VentaFacturaID; oVentasFactura = Datos.GetListOf <VentaFacturaDetalle>(q => q.VentaFacturaID == iVentaFacturaID && q.Estatus); bFacturaMultiple = (oVentasFactura.Count > 1); // Se muestran los datos de detalle de todas las ventas de la factura if (bCancelarTodaLaFactura && bFacturaMultiple) { if (!this.MostrarDetalleVentasFactura(oVentasFactura)) { return(false); } } } // Se verifica si se creará vale, para pedir el cliente en caso de que no haya int iValeClienteID = oVentaV.ClienteID; if (this.ctlBusqueda.FormaDeDevolucion == Cat.FormasDePago.Vale && iValeClienteID == Cat.Clientes.Mostrador) { var frmValor = new MensajeObtenerValor("Selecciona el cliente para crear el Vale:", "", MensajeObtenerValor.Tipo.Combo); frmValor.CargarCombo("ClienteID", "Nombre", Datos.GetListOf <Cliente>(q => q.ClienteID != Cat.Clientes.Mostrador && q.Estatus)); if (frmValor.ShowDialog(Principal.Instance) == DialogResult.OK) { iValeClienteID = Util.Entero(frmValor.Valor); } frmValor.Dispose(); if (iValeClienteID == 0) { return(false); } } // Se pregunta el usuario que realiza la devolución int iUsuarioID = 0; var ResU = UtilLocal.ValidarObtenerUsuario("Ventas.Devolucion.Agregar"); if (ResU.Error) { return(false); } iUsuarioID = ResU.Respuesta.UsuarioID; // Se solicita la autorización int iAutorizoID = 0; ResU = UtilLocal.ValidarObtenerUsuario("Autorizaciones.Ventas.Devoluciones.Agregar", "Autorización"); if (ResU.Exito) { iAutorizoID = ResU.Respuesta.UsuarioID; } // Se procede a guardar los cambios DateTime dAhora = DateTime.Now; // Si es factura múltiple, se cancelan todas las ventas de la factura, si no, sólo la venta seleccionada var oIdsDev = new List <int>(); var oIdsCascos = new List <int>(); if (bFacturaMultiple && bCancelarTodaLaFactura) { var oDevGeneral = this.ctlBusqueda.GenerarDevolucion(); foreach (var oVentaFac in oVentasFactura) { // Se genera la devolución var oDev = new VentaDevolucion() { VentaID = oVentaFac.VentaID, Fecha = dAhora, RealizoUsuarioID = iUsuarioID, EsCancelacion = true, MotivoID = oDevGeneral.MotivoID, Observacion = oDevGeneral.Observacion, TipoFormaPagoID = oDevGeneral.TipoFormaPagoID }; // Se genera el detalle de la devolución var oDevDet = new List <VentaDevolucionDetalle>(); var oVentaDetalle = Datos.GetListOf <VentaDetalle>(c => c.VentaID == oVentaFac.VentaID && c.Estatus); foreach (var oParte in oVentaDetalle) { oDevDet.Add(new VentaDevolucionDetalle() { ParteID = oParte.ParteID, Costo = oParte.Costo, CostoConDescuento = oParte.CostoConDescuento, Cantidad = oParte.Cantidad, PrecioUnitario = oParte.PrecioUnitario, Iva = oParte.Iva }); } // Se manda guardar la devolución this.GuardarDevolucion(oDev, oDevDet, iValeClienteID); // Se agrega a la lisa de devoluciones oIdsDev.Add(oDev.VentaDevolucionID); // Se verifica si requiere un casco foreach (var oReg in oDevDet) { if (Datos.Exists <Parte>(c => c.ParteID == oReg.ParteID && c.RequiereCascoDe > 0 && c.Estatus)) { oIdsCascos.Add(oReg.VentaDevolucionDetalleID); } } } } else { // Se genera la devolución var oDevolucion = this.ctlBusqueda.GenerarDevolucion(); oDevolucion.Fecha = dAhora; oDevolucion.EsCancelacion = bCancelacion; oDevolucion.RealizoUsuarioID = iUsuarioID; // Se genera el detalle de la devolución var oDevDetalle = new List <VentaDevolucionDetalle>(); var oProductos = this.ctlDetalle.ProductosSel(); foreach (var oProducto in oProductos) { oDevDetalle.Add(new VentaDevolucionDetalle() { ParteID = oProducto.ParteID, Costo = oProducto.Costo, CostoConDescuento = oProducto.CostoConDescuento, Cantidad = oProducto.Cantidad, PrecioUnitario = oProducto.PrecioUnitario, Iva = oProducto.Iva }); } // Se guarda la devolución this.GuardarDevolucion(oDevolucion, oDevDetalle, iValeClienteID); // oIdsDev.Add(oDevolucion.VentaDevolucionID); // Se verifica si requiere un casco foreach (var oReg in oDevDetalle) { if (Datos.Exists <Parte>(c => c.ParteID == oReg.ParteID && c.RequiereCascoDe > 0 && c.Estatus)) { oIdsCascos.Add(oReg.VentaDevolucionDetalleID); } } } // Se verifica si es factura, en cuyo caso, se cancela la factura o se genera nota de crédito, según aplique if (oVentaV.Facturada) { if (bCancelacion && (!bFacturaMultiple || (bFacturaMultiple && bCancelarTodaLaFactura))) { var ResFactura = VentasLoc.GenerarFacturaCancelacion(iVentaFacturaID, oIdsDev); if (ResFactura.Error) { UtilLocal.MensajeAdvertencia("Hubo un error al cancelar la factura.\n\n" + ResFactura.Mensaje); } } else { var ResFactura = VentasLoc.GenerarFacturaDevolucionPorDevolucion(oIdsDev[0]); if (ResFactura.Error) { UtilLocal.MensajeAdvertencia("Hubo un error al generar la factura de la devolución.\n\n" + ResFactura.Mensaje); } } } // Se verifica si hay una cancelación de control de cascos foreach (int iDevDetID in oIdsCascos) { this.DevolverControlCasco(iDevDetID, iUsuarioID); } // Se manda a afectar contabilidad (AfeConta) foreach (int iDevID in oIdsDev) { var oDevV = Datos.GetEntity <VentasDevolucionesView>(c => c.VentaDevolucionID == iDevID); if (oDevV.Facturada) { if (oDevV.VentaACredito) { if (oDevV.FormaDePagoID == Cat.FormasDePago.Vale) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.DevolucionVentaCreditoFacturadaVale, iDevID, oDevV.FolioDeVenta, oDevV.Observacion); } else { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.DevolucionVentaCreditoFacturadaPago, iDevID, oDevV.FolioDeVenta, oDevV.Observacion); } } else { if (oDevV.FormaDePagoID == Cat.FormasDePago.Vale) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.DevolucionVentaValeFactura, iDevID, oDevV.FolioDeVenta, oDevV.Observacion); } else { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.DevolucionVentaPago, iDevID, oDevV.FolioDeVenta, oDevV.Observacion); } } } else { if (oDevV.FormaDePagoID == Cat.FormasDePago.Vale) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.DevolucionVentaValeTicket, iDevID, oDevV.FolioDeVenta, oDevV.Observacion); } // Si es tiecket a crédito, se hace ajuste temporal de pólizas if (oDevV.VentaACredito) { ContaProc.BorrarPolizaTemporalTicketCredito(oDevV.VentaID); if (!bCancelacion) { var oVentaVi = Datos.GetEntity <VentasView>(c => c.VentaID == oDevV.VentaID); ContaProc.CrearPolizaTemporalTicketCredito(oDevV.VentaID, (oVentaVi.Total - oVentaVi.Pagado)); } } } } // foreach (int iDevID in oIdsDev) { // Se guarda la autorización, si aplica VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.DevolucionCancelacion, Cat.Tablas.VentaDevolucion, iDevID, iAutorizoID); // Se genera el ticket correspondiente VentasLoc.GenerarTicketDevolucion(iDevID); // Se agrega al Kardex /* Ahora se hace desde que se guarda la devolución - Guardar.VentaDevolucion() * var oDevV = General.GetEntity<VentasDevolucionesView>(c => c.VentaDevolucionID == iDevID); * var oDet = General.GetListOf<VentaDevolucionDetalle>(c => c.VentaDevolucionID == iDevID && c.Estatus); * foreach (var oReg in oDet) * { * AdmonProc.RegistrarKardex(new ParteKardex() * { * ParteID = oReg.ParteID, * OperacionID = Cat.OperacionesKardex.VentaCancelada, * SucursalID = oDevV.SucursalID, * Folio = oDevV.FolioDeVenta, * Fecha = DateTime.Now, * RealizoUsuarioID = oDevV.RealizoUsuarioID, * Entidad = oVentaV.Cliente, * Origen = oVentaV.ClienteID.ToString(), * Destino = oDevV.Sucursal, * Cantidad = oReg.Cantidad, * Importe = (oReg.PrecioUnitario + oReg.Iva), * RelacionTabla = Cat.Tablas.VentaDevolucion, * RelacionID = oDevV.VentaDevolucionID * }); * } */ } // Se manda aviso de cancelación de factura a crédito de días anteriores, si aplica if (oVentaV.Facturada && oVentaV.ACredito && oVentaV.Fecha < DateTime.Now.Date) { var oUsuarios = Datos.GetListOf <Usuario>(c => c.AlertaDevFacturaCreditoAnt == true && c.Estatus); foreach (var oReg in oUsuarios) { Proc.EnviarMensajeTcp(oReg.Ip, Proc.MensajesTcp.DevolucionFacturaCreditoAnt, oIdsDev[0].ToString()); } } // Se muestra una notifiación con el resultado UtilLocal.MostrarNotificacion((bCancelacion ? "Cancelación" : "Devolución") + " guardada correctamente."); // Se limpia después de haberse guardado this.Limpiar(); return(true); }
private void RecibirResguardo() { // Se obtiene la lista de los resugardos posibles para traspaso var oResg = Datos.GetListOf <ContaPolizasDetalleAvanzadoView>(c => c.ContaCuentaAuxiliarID == Cat.ContaCuentasAuxiliares.Resguardo && c.SucursalID != Cat.Sucursales.Matriz && c.Cargo > 0).OrderBy(c => c.SucursalID).ToList(); // Se quintan los resguardos marcados para ocultar manualmente, y también los no mover for (int i = 0; i < oResg.Count; i++) { int iPolDetID = oResg[i].ContaPolizaDetalleID; if (Datos.Exists <ContaPolizaResguardoOcultar>(c => c.ContaPolizaDetalleID == iPolDetID)) { oResg.RemoveAt(i--); continue; } // Para quitar los resguardos de "NO MOVER" if (oResg[i].Referencia == "NO MOVER") { oResg.RemoveAt(i--); } } // Se crea el formulario para el listado var frmListado = new ObtenerElementoLista("Selecciona el resguardo a recibir", oResg); frmListado.MostrarColumnas("Sucursal", "FechaPoliza", "Cargo"); frmListado.dgvDatos.Columns["Sucursal"].DisplayIndex = 0; frmListado.dgvDatos.Columns["FechaPoliza"].HeaderText = "Fecha"; frmListado.dgvDatos.Columns["Cargo"].HeaderText = "Importe"; frmListado.dgvDatos.Columns["Cargo"].FormatoMoneda(); // Se agrega opción (con menú contextual) para ocultar resguardos var cmsMenu = new ContextMenuStrip(); cmsMenu.Items.Add("Ocultar"); frmListado.dgvDatos.MouseClick += new MouseEventHandler((s, e) => { if (e.Button != MouseButtons.Right) { return; } if (frmListado.dgvDatos.CurrentRow == null) { return; } cmsMenu.Show(frmListado.dgvDatos, new Point(e.X, e.Y)); }); cmsMenu.Items[0].Click += new EventHandler((s, e) => { // if (frmListado.dgvDatos.CurrentRow == null) return; int iPolizaDetID = Util.Entero(frmListado.dgvDatos.CurrentRow.Cells["ContaPolizaDetalleID"].Value); var oOcultar = new ContaPolizaResguardoOcultar() { ContaPolizaDetalleID = iPolizaDetID }; Datos.Guardar <ContaPolizaResguardoOcultar>(oOcultar); int iFila = frmListado.dgvDatos.CurrentRow.Index; frmListado.dgvDatos.CurrentCell = null; frmListado.dgvDatos.Rows[iFila].Visible = false; }); // Se muestra el formulario con el listado if (frmListado.ShowDialog(Principal.Instance) == DialogResult.OK) { // Se pide el usuario var oResU = UtilLocal.ValidarObtenerUsuario(); if (oResU.Exito) { // Se procede a guardar la póliza var oPolizaV = (frmListado.Seleccion as ContaPolizasDetalleAvanzadoView); string sFecha = DateTime.Now.ToString(GlobalClass.FormatoFecha); // Se modifica la póliza original, para quitar el resguardo var oPolResguardo = Datos.GetEntity <ContaPolizaDetalle>(c => c.ContaPolizaID == oPolizaV.ContaPolizaID && c.ContaCuentaAuxiliarID == Cat.ContaCuentasAuxiliares.Resguardo); oPolResguardo.Cargo = 0; Datos.Guardar <ContaPolizaDetalle>(oPolResguardo); var oPoliza = Datos.GetEntity <ContaPoliza>(c => c.ContaPolizaID == oPolizaV.ContaPolizaID); oPoliza.Concepto = string.Format("{0} / {1} / {2} / {3}", oPolizaV.Sucursal, sFecha, oResU.Respuesta.NombreUsuario, oPoliza.Concepto); Datos.Guardar <ContaPoliza>(oPoliza); // Ahora se crea una nueva póliza, para meter el resguadro a matriz oPoliza = ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Diario, string.Format("RESGUARDO / {1} / {2} / {3}", DateTime.Now, oPolizaV.Sucursal , sFecha, oResU.Respuesta.NombreUsuario), Cat.ContaCuentasAuxiliares.Resguardo, Cat.ContaCuentasAuxiliares.Caja, oPolizaV.Cargo, "RESGUARDO" , null, null, Cat.Sucursales.Matriz); var oPolCaja = Datos.GetEntity <ContaPolizaDetalle>(c => c.ContaPolizaID == oPoliza.ContaPolizaID && c.ContaCuentaAuxiliarID == Cat.ContaCuentasAuxiliares.Caja); oPolCaja.Abono = 0; Datos.Guardar <ContaPolizaDetalle>(oPolCaja); // this.LlenarArbol(); } } frmListado.Dispose(); }
private bool Agregar9500() { // Se valida la parte de "Partes" if (!this.ctlPartes.Validar()) { return(false); } // Se pide el efectivo, si aplica if (!this.ctlCobro.CompletarCobro()) { return(false); } // Se valida que exista una Medida genérica, para las nuevas partes if (Datos.GetEntity <Medida>(q => q.MedidaID == Cat.Medidas.Pieza && q.Estatus) == null) { UtilLocal.MensajeAdvertencia("No existe una Medida genérica para asignarle a las partes nuevas. No se puede continuar."); return(false); } // Se solicitan la autorizaciones, si se requiere int iAutorizoID = 0; if (this.ctlPartes.AutorizacionRequeridaPrecio || this.ctlPartes.AutorizacionRequeridaAnticipo) { string sPermiso = (this.ctlPartes.AutorizacionRequeridaPrecio ? "Autorizaciones.Ventas.9500.PrecioFueraDeRango" : "Autorizaciones.Ventas.9500.NoAnticipo"); var Res = UtilLocal.ValidarObtenerUsuario(sPermiso, "Autorización"); iAutorizoID = (Res.Respuesta == null ? 0 : Res.Respuesta.UsuarioID); } // Se procede a guardar los datos DateTime dAhora = DateTime.Now; // Se genera la Cotización 9500 var o9500 = this.ctlPartes.Generar9500(); o9500.Fecha = dAhora; o9500.RealizoUsuarioID = this.ctlCobro.VendodorID; if (this.ctlCobro.ComisionistaID > 0) { o9500.ComisionistaClienteID = this.ctlCobro.ComisionistaID; } // Se genera el detalle del 9500 var oParteGanancia = this.ctlPartes.ObtenerParteGanancia(null); var o9500Detalle = new List <Cotizacion9500Detalle>(); foreach (var Parte9500 in this.ctlPartes.Detalle) { // Si la parte no existe, se agrega if (Parte9500.Value.ParteID <= 0) { int iFila = UtilLocal.findRowIndex(this.ctlPartes.dgvPartes, "Llave", Parte9500.Key); string sNumeroDeParte = Util.Cadena(this.ctlPartes.dgvPartes["NumeroDeParte", iFila].Value); string sDescripcion = Util.Cadena(this.ctlPartes.dgvPartes["Descripcion", iFila].Value); var oLinea = Datos.GetEntity <Linea>(q => q.LineaID == Parte9500.Value.LineaID && q.Estatus); Parte oParte = new Parte() { NumeroParte = sNumeroDeParte, LineaID = Parte9500.Value.LineaID, MarcaParteID = Parte9500.Value.MarcaParteID, ProveedorID = Parte9500.Value.ProveedorID, NombreParte = sDescripcion, Es9500 = true, SubsistemaID = oLinea.SubsistemaID.Valor() }; // Se agregan los precios PartePrecio oPartePrecio = null; if (oParteGanancia != null) { oPartePrecio = new PartePrecio() { Costo = Parte9500.Value.Costo, PorcentajeUtilidadUno = oParteGanancia.PorcentajeDeGanancia1, PorcentajeUtilidadDos = oParteGanancia.PorcentajeDeGanancia2, PorcentajeUtilidadTres = oParteGanancia.PorcentajeDeGanancia3, PorcentajeUtilidadCuatro = oParteGanancia.PorcentajeDeGanancia4, PorcentajeUtilidadCinco = oParteGanancia.PorcentajeDeGanancia5, PrecioUno = UtilTheos.AplicarRedondeo(Parte9500.Value.Costo * oParteGanancia.PorcentajeDeGanancia1), PrecioDos = UtilTheos.AplicarRedondeo(Parte9500.Value.Costo * oParteGanancia.PorcentajeDeGanancia2), PrecioTres = UtilTheos.AplicarRedondeo(Parte9500.Value.Costo * oParteGanancia.PorcentajeDeGanancia3), PrecioCuatro = UtilTheos.AplicarRedondeo(Parte9500.Value.Costo * oParteGanancia.PorcentajeDeGanancia4), PrecioCinco = UtilTheos.AplicarRedondeo(Parte9500.Value.Costo * oParteGanancia.PorcentajeDeGanancia5) }; } // Se guarda Guardar.Parte(oParte, oPartePrecio); Parte9500.Value.ParteID = oParte.ParteID; } // Se agrega la parte al detalle del 9500 o9500Detalle.Add(Parte9500.Value); } // Se guardan los datos de 9500 Guardar.c9500(o9500, o9500Detalle); // Se genera la venta con el anticipo var oVenta = new Venta() { ClienteID = o9500.ClienteID, RealizoUsuarioID = o9500.RealizoUsuarioID }; var oPrecioAnticipo = Datos.GetEntity <PartePrecio>(c => c.ParteID == Cat.Partes.AnticipoClientes && c.Estatus); var oVentaDetalle = new VentaDetalle() { ParteID = Cat.Partes.AnticipoClientes, Cantidad = 1, PrecioUnitario = o9500.Anticipo, Costo = oPrecioAnticipo.Costo.Valor(), CostoConDescuento = (oPrecioAnticipo.CostoConDescuento ?? oPrecioAnticipo.Costo.Valor()) }; Guardar.Venta(oVenta, new List <VentaDetalle>() { oVentaDetalle }); // Se guarda el dato de la venta con el anticipo en el registro de 9500 o9500.AnticipoVentaID = oVenta.VentaID; Datos.Guardar <Cotizacion9500>(o9500); // Se guardan las autorizaciones, si hubiera if (this.ctlPartes.AutorizacionRequeridaPrecio) { VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.c9500PrecioFueraDeRango, Cat.Tablas.Tabla9500, o9500.Cotizacion9500ID, iAutorizoID); } if (this.ctlPartes.AutorizacionRequeridaAnticipo) { VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.c9500SinAnticipo, Cat.Tablas.Tabla9500, o9500.Cotizacion9500ID, iAutorizoID); } // Se muestra una notifiación con el resultado UtilLocal.MostrarNotificacion("Cotización 9500 guardada correctamente."); return(true); }
private bool CompletarGarantia() { // Se valida la parte de búsqueda if (!this.ctlBusqueda.ValidarPendiente()) { return(false); } // int iGarantiaID = this.ctlBusqueda.SeleccionGarantiaID; var oGarantia = Datos.GetEntity <VentaGarantia>(c => c.VentaGarantiaID == iGarantiaID && c.Estatus); var oVentaV = Datos.GetEntity <VentasView>(c => c.VentaID == oGarantia.VentaID); // Se verifica si se creará vale, para pedir el cliente en caso de que no haya int iValeClienteID = oVentaV.ClienteID; if ((this.ctlBusqueda.IdAccionPosterior == Cat.VentasGarantiasAcciones.ArticuloNuevo || this.ctlBusqueda.IdAccionPosterior == Cat.VentasGarantiasAcciones.NotaDeCredito) && iValeClienteID == Cat.Clientes.Mostrador) { iValeClienteID = VentasLoc.ObtenerClienteID("Selecciona el cliente para crear el Vale:", false); if (iValeClienteID == 0) { return(false); } } // Se pregunta el usuario que realiza la devolución int iUsuarioID = 0; var ResU = UtilLocal.ValidarObtenerUsuario("Ventas.Garantia.Agregar"); if (ResU.Error) { return(false); } iUsuarioID = ResU.Respuesta.UsuarioID; // Se solicita la autorización int iAutorizoID = 0; ResU = UtilLocal.ValidarObtenerUsuario("Autorizaciones.Ventas.Garantia.Agregar", "Autorización"); if (ResU.Exito) { iAutorizoID = ResU.Respuesta.UsuarioID; } // Se procede a guardar los cambios DateTime dAhora = DateTime.Now; // Se completan los datos de la garantía oGarantia.AccionID = this.ctlBusqueda.IdAccionPosterior; oGarantia.FechaCompletado = dAhora; oGarantia.EstatusGenericoID = Cat.EstatusGenericos.Completada; if (this.ctlBusqueda.AccionObservacion != "") { oGarantia.ObservacionCompletado += (" - " + this.ctlBusqueda.AccionObservacion); } // Se guardan los datos Datos.Guardar <VentaGarantia>(oGarantia); // Si queda a revisión del proveedor, ya no se hace nada más que mandar el ticket if (oGarantia.AccionID != Cat.VentasGarantiasAcciones.NoProcede) { // Se borra la parte de la venta, pues ya se hizo válida la garantia var oParteVenta = Datos.GetEntity <VentaDetalle>(q => q.Estatus && q.VentaID == oGarantia.VentaID && q.ParteID == oGarantia.ParteID && q.PrecioUnitario == oGarantia.PrecioUnitario && q.Iva == oGarantia.Iva); if (oParteVenta.Cantidad > 1) { oParteVenta.Cantidad--; Datos.Guardar <VentaDetalle>(oParteVenta); } else { Datos.Eliminar <VentaDetalle>(oParteVenta, true); } // this.CompletarAccionGarantia(iGarantiaID, iValeClienteID); } // Se guarda la autorización, si aplica VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.Garantia, Cat.Tablas.VentaGarantia, oGarantia.VentaGarantiaID, iAutorizoID); // Se genera el ticket correspondiente VentasLoc.GenerarTicketGarantia(oGarantia.VentaGarantiaID); return(true); }
public static ResAcc <Usuario> ValidarObtenerUsuario(List <string> oPermisos, bool bCumplirTodosLosPermisos) { return(UtilLocal.ValidarObtenerUsuario(oPermisos, bCumplirTodosLosPermisos, null)); }
public static ResAcc <Usuario> ValidarObtenerUsuario() { return(UtilLocal.ValidarObtenerUsuario(null, false, null)); }
private bool AgregarGarantia() { // Se valida la parte de detalle if (!this.ctlDetalle.Validar()) { return(false); } // Se valida la parte de búsqueda if (!this.ctlBusqueda.Validar()) { return(false); } // Se valida que sólo esté seleccionada una parte if (this.ctlDetalle.ProductosSel().Count > 1) { UtilLocal.MensajeAdvertencia("Debes seleccionar sólo un producto al hacer una garantía."); return(false); } // Se verifica si se creará vale, para pedir el cliente en caso de que no haya var oGarantia = this.ctlBusqueda.GenerarGarantia(); int iVentaID = this.ctlBusqueda.VentaID; var oVentaV = Datos.GetEntity <VentasView>(q => q.VentaID == iVentaID); int iValeClienteID = oVentaV.ClienteID; if ((oGarantia.AccionID == Cat.VentasGarantiasAcciones.ArticuloNuevo || oGarantia.AccionID == Cat.VentasGarantiasAcciones.NotaDeCredito) && iValeClienteID == Cat.Clientes.Mostrador) { iValeClienteID = VentasLoc.ObtenerClienteID("Selecciona el cliente para crear el Vale:", false); if (iValeClienteID == 0) { return(false); } } // Se pregunta el usuario que realiza la devolución int iUsuarioID = 0; var ResU = UtilLocal.ValidarObtenerUsuario("Ventas.Garantia.Agregar"); if (ResU.Error) { return(false); } iUsuarioID = ResU.Respuesta.UsuarioID; // Se solicita la autorización int iAutorizoID = 0; ResU = UtilLocal.ValidarObtenerUsuario("Autorizaciones.Ventas.Garantia.Agregar", "Autorización"); if (ResU.Exito) { iAutorizoID = ResU.Respuesta.UsuarioID; } // Se procede a guardar los cambios DateTime dAhora = DateTime.Now; // Se genera la garantía oGarantia.Fecha = dAhora; oGarantia.RealizoUsuarioID = iUsuarioID; oGarantia.EstatusGenericoID = Cat.EstatusGenericos.Recibido; // Se llenan los datos de la parte var oProducto = this.ctlDetalle.ProductosSel()[0]; oGarantia.ParteID = oProducto.ParteID; oGarantia.Costo = oProducto.Costo; oGarantia.CostoConDescuento = oProducto.CostoConDescuento; oGarantia.PrecioUnitario = oProducto.PrecioUnitario; oGarantia.Iva = oProducto.Iva; // Se guarda la garantía Guardar.VentaGarantia(oGarantia); // Si queda a revisión del proveedor, ya no se hace nada más que mandar el ticket if (oGarantia.AccionID != Cat.VentasGarantiasAcciones.RevisionDeProveedor) { this.CompletarAccionGarantia(oGarantia.VentaGarantiaID, iValeClienteID); } // Se mete un registro en kárdex, en cero, sólo para mantener historial de la operación var oKardex = new ParteKardex() { ParteID = oGarantia.ParteID, OperacionID = Cat.OperacionesKardex.VentaCancelada, SucursalID = oGarantia.SucursalID, Folio = oVentaV.Folio, Fecha = dAhora, RealizoUsuarioID = iUsuarioID, Entidad = oVentaV.Cliente, Origen = oVentaV.Sucursal, Destino = "GARANTÍA RECIBIDA", Cantidad = 0, Importe = (oGarantia.PrecioUnitario + oGarantia.Iva), RelacionTabla = Cat.Tablas.VentaGarantia, RelacionID = oGarantia.VentaGarantiaID }; AdmonProc.RegistrarKardex(oKardex); // Se guarda la autorización, si aplica VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.Garantia, Cat.Tablas.VentaGarantia, oGarantia.VentaGarantiaID, iAutorizoID); // Se genera el ticket correspondiente VentasLoc.GenerarTicketGarantia(oGarantia.VentaGarantiaID); return(true); }
public override bool Ejecutar() { // Se valida la opción if (!this.ctlFacturar.Validar()) { return(false); } // Se pregunta si se debe facturar al mismo cliente de las ventas o a otro int iAFClienteID = this.Cliente.ClienteID; if (UtilLocal.MensajePregunta("¿Deseas hacer la factura a nombre del cliente seleccionado?") == DialogResult.No) { iAFClienteID = 0; var frmValor = new MensajeObtenerValor("Selecciona el cliente para facturar:", "", MensajeObtenerValor.Tipo.Combo); frmValor.CargarCombo("ClienteID", "Nombre", Datos.GetListOf <Cliente>(q => q.ClienteID != Cat.Clientes.Mostrador && q.Estatus)); if (frmValor.ShowDialog(Principal.Instance) == DialogResult.OK) { iAFClienteID = Util.Entero(frmValor.Valor); } frmValor.Dispose(); } if (iAFClienteID == 0) { return(false); } // Se solicita el usuario que realiza el proceso int iUsuarioID = 0; var Res = UtilLocal.ValidarObtenerUsuario("Ventas.FacturarTickets.Agregar"); if (Res.Error) { return(false); } iUsuarioID = Res.Respuesta.UsuarioID; // Se muestra la ventana de "Cargando.." Cargando.Mostrar(); // DateTime dAhora = DateTime.Now; // Se obtienen los datos de los productos, por si se cambió la descripción List <ProductoVenta> oPartes = null; if (this.ctlFacturar.MostrarTodasLasPartes) { oPartes = this.ctlDetalle.ObtenerListaVenta(); } // Se procede a generar la factura var oVentasAF = this.ctlFacturar.GenerarListaDeVentas(); var oFormasDePago = this.ctlFacturar.FormasDePagoLibre; var ResFe = VentasLoc.GenerarFacturaElectronica(oVentasAF, iAFClienteID, oPartes, oFormasDePago, this.ctlFacturar.Observacion, null); if (ResFe.Error) { UtilLocal.MensajeAdvertencia(ResFe.Mensaje); return(false); } // Se guarda el dato de que fue una factura de ventas var oFactura = Datos.GetEntity <VentaFactura>(q => q.VentaFacturaID == ResFe.Respuesta && q.Estatus); oFactura.Convertida = true; oFactura.RealizoUsuarioID = iUsuarioID; Datos.Guardar <VentaFactura>(oFactura); // Se manda a afectar contabilidad (AfeConta) foreach (int iVentaID in oVentasAF) { var oVentaV = Datos.GetEntity <VentasView>(c => c.VentaID == iVentaID); if (oVentaV.ACredito) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.VentaCredito, iVentaID, (oFactura.Serie + oFactura.Folio), oVentaV.Cliente); // Se verifica si el ticket ya está pagado, para hacer la póliza correspondiente a dicho pago if (oVentaV.Pagado > 0) { var oPagos = Datos.GetListOf <VentaPago>(c => c.VentaID == iVentaID && c.Estatus); foreach (var oReg in oPagos) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.PagoVentaCredito, oReg.VentaPagoID , ((oFactura.Serie + oFactura.Folio) + " / " + UtilDatos.VentaPagoFormasDePago(oReg.VentaPagoID)) , oVentaV.Cliente, oReg.SucursalID); } } // Se borra la póliza temporal creada por ser ticket a crédito ContaProc.BorrarPolizaTemporalTicketCredito(iVentaID); } else { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.VentaContadoFacturaConvertida, iVentaID , (oFactura.Serie + oFactura.Folio), oVentaV.Cliente, oVentaV.SucursalID); } } // Se guarda el dato de pendiente por descontar en la factura global, si aplica // Se guardan datos cuando se están facturando tickets abonados en otras sucursales foreach (int iVentaID in oVentasAF) { // Se obtienen los abonos de otras sucursales var oAbonos = Datos.GetListOf <VentasPagosView>(c => c.VentaID == iVentaID && c.SucursalID != GlobalClass.SucursalID) .GroupBy(c => new { c.VentaID, c.SucursalID }).Select(c => new { c.Key.VentaID, c.Key.SucursalID, Abonado = c.Sum(s => s.Importe) }); if (oAbonos != null && oAbonos.Count() > 0) { foreach (var oReg in oAbonos) { var oPendiente = new FacturaGlobalPendientePorDescontar() { VentaID = oReg.VentaID, Fecha = dAhora, SucursalID = oReg.SucursalID, Importe = oReg.Abonado }; Datos.Guardar <FacturaGlobalPendientePorDescontar>(oPendiente); } } } // Se cierra la ventana de "Cargando.." Cargando.Cerrar(); // Se muestra una notifiación con el resultado UtilLocal.MostrarNotificacion("Procedimiento ejecutado correctamente."); // Se limpia después de haberse guardado this.Limpiar(); return(true); }
public override bool Ejecutar() { // Se valida que el importe a pagar sea mayor que cero if (this.ctlCobranza.Total <= 0) { UtilLocal.MensajeAdvertencia("No hay ningún importe a pagar."); return(false); } // Se valida el cobro if (!this.ctlCobro.Validar()) { return(false); } // Se valida que el pago sea en la misma sucursal que el primer abono, si hubiera var oVentasACobrar = this.ctlCobranza.ObtenerVentasMarcadas(); string sVentasOt = ""; foreach (var oReg in oVentasACobrar) { if (Datos.Exists <VentaPago>(c => c.VentaID == oReg.VentaID && c.Estatus && c.SucursalID != GlobalClass.SucursalID)) { sVentasOt += (", " + oReg.Folio); } } if (sVentasOt != "" && oVentasACobrar[0].VentaID != 270157) // Modificaciòn temporal para no evaluar esa venta - 2015-08-24 { UtilLocal.MensajeAdvertencia("Las siguientes ventas ya fueron abonadas en otra sucursal, por lo tanto aquí no se pueden cobrar.\n\n" + sVentasOt.Substring(2)); return(false); } // Si se quiere pagar con Vales, se valida que sólo sea una venta var oFormasDePago = this.ctlCobro.GenerarPagoDetalle(); if (oFormasDePago.Any(c => c.TipoFormaPagoID == Cat.FormasDePago.Vale) && oVentasACobrar.Count > 1) { UtilLocal.MensajeAdvertencia("En selecciones múltiples no se puede usar vales. Es necesario seleccionar sólo una venta."); return(false); } // Confirmación if (UtilLocal.MensajePregunta("¿Estás seguro que deseas realizar el abono indicado?") != DialogResult.Yes) { return(false); } // Se completa el cobro, por si fue pago en efectivo if (!this.ctlCobro.CompletarCobro()) { return(false); } // Se solicita la validación de autorización, si aplica int iAutorizoID = 0; if (this.ctlCobro.AutorizacionDeNotasDeCreditoRequerida) { var Res = UtilLocal.ValidarObtenerUsuario("Autorizaciones.Ventas.Cobro.NotaDeCreditoOtroCliente", "Autorización"); iAutorizoID = (Res.Exito ? Res.Respuesta.UsuarioID : 0); } // Se procede a guardar los datos DateTime dAhora = DateTime.Now; // Se generan los pagos para las ventas marcadas, hasta donde alcance el importe decimal mPago = this.ctlCobro.Suma; var oVentasAfectadas = new List <VentasACreditoView>(); var oPagosDetalleGen = new List <VentaPagoDetalle>(); var oIdsPago = new List <int>(); foreach (var oVentaACobrar in oVentasACobrar) { // Si la venta no tiene saldo, se salta if (oVentaACobrar.Restante <= 0) { continue; } var oPago = new VentaPago() { VentaID = oVentaACobrar.VentaID, Fecha = dAhora, }; var oPagoDetalle = new List <VentaPagoDetalle>(); decimal mPagoForma = 0; oVentaACobrar.Pagado = 0; // Se hace cero para que sólo sume lo pagado en esta ocasión foreach (var oFormaDePago in oFormasDePago) { mPagoForma = (oFormaDePago.Importe > oVentaACobrar.Restante ? oVentaACobrar.Restante : oFormaDePago.Importe); if (oFormaDePago.Importe > 0) { oPagoDetalle.Add(new VentaPagoDetalle() { TipoFormaPagoID = oFormaDePago.TipoFormaPagoID, Importe = mPagoForma, BancoID = oFormaDePago.BancoID, Folio = oFormaDePago.Folio, Cuenta = oFormaDePago.Cuenta, NotaDeCreditoID = oFormaDePago.NotaDeCreditoID }); mPago -= mPagoForma; oFormaDePago.Importe -= mPagoForma; oVentaACobrar.Pagado += mPagoForma; oVentaACobrar.Restante -= mPagoForma; if (oVentaACobrar.Restante <= 0) { break; } } } Guardar.VentaPago(oPago, oPagoDetalle); // Se agrega la venta actual a las ventas afectadas oVentasAfectadas.Add(oVentaACobrar); oIdsPago.Add(oPago.VentaPagoID); oPagosDetalleGen.AddRange(oPagoDetalle); if (mPago <= 0) { break; } } // Se manda a generar la póliza contable (AfeConta) foreach (int iPagoID in oIdsPago) { var oPagoV = Datos.GetEntity <VentasPagosView>(c => c.VentaPagoID == iPagoID); if (oPagoV.Facturada) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.PagoVentaCredito, iPagoID , (oPagoV.Folio + " / " + UtilDatos.VentaPagoFormasDePago(iPagoID)), oPagoV.Cliente); } // Si es tiecket a crédito, se hace ajuste de pólizas if (!oPagoV.Facturada) { ContaProc.BorrarPolizaTemporalTicketCredito(oPagoV.VentaID); var oVentaV = Datos.GetEntity <VentasView>(c => c.VentaID == oPagoV.VentaID); if (oVentaV.VentaEstatusID == Cat.VentasEstatus.Cobrada) { ContaProc.CrearPolizaTemporalTicketCredito(oPagoV.VentaID, (oVentaV.Total - oVentaV.Pagado)); } } } // Se guardan la autorizaciones aplicables if (this.ctlCobro.AutorizacionDeNotasDeCreditoRequerida) { // Se agrega una autorización por cada nota de otro cliente var oNotasOC = this.ctlCobro.NotasDeCreditoOtrosClientes(); foreach (var oNotaOC in oNotasOC) { VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.NotaDeCreditoOtroClienteUsar, Cat.Tablas.NotaDeCredito, oNotaOC, iAutorizoID); } } // Se guardan los datos del cobro, para reimpresión de tickets string sFolioCob = VentasProc.GenerarFolioDeCobranza(); int iCuenta = 0; foreach (var oVentaAf in oVentasAfectadas) { Datos.Guardar <CobranzaTicket>(new CobranzaTicket() { Ticket = sFolioCob, VentaID = oVentaAf.VentaID, ClienteID = this.Cliente.ClienteID, Folio = oVentaAf.Folio, Fecha = oVentaAf.Fecha, Vencimiento = oVentaAf.Vencimiento, Total = oVentaAf.Total, Pagado = oVentaAf.Pagado, Restante = oVentaAf.Restante, VentaPagoID = oIdsPago[iCuenta++] }); } // Se genera el ticket correspondiente VentasLoc.GenerarTicketCobranza(sFolioCob); // Si se pagó con vale, se verifica si se crearon nuevos vales por importes restantes. Y se mandan a imprimir var oValesCreados = VentasProc.ObtenerValesCreados(oPagosDetalleGen); foreach (var oReg in oValesCreados) { VentasLoc.GenerarTicketNotaDeCredito(oReg.NotaDeCreditoID); } // Se muestra una notifiación con el resultado UtilLocal.MostrarNotificacion("Procedimiento completado correctamente."); // Se limpia después de haberse guardado this.Limpiar(); return(true); }
private void GuardarDatos() { // Se solicita la autorización var oResU = UtilLocal.ValidarObtenerUsuario("Administracion.Master.Modificar"); if (oResU.Error) { return; } int iUsuarioID = oResU.Respuesta.UsuarioID; // Se muestra progreso de avance this.IniciarTerminarProgreso(true); // Se inicia el proceso de guardado Datos.StartPersistentContext(); int iErroresVal = 0; var oCambios = new List <ParteCambio>(); var oVarCostos = new Dictionary <int, decimal>(); foreach (DataGridViewRow Fila in this.dgvDatos.Rows) { this.pgrGuardar.EjecutarPaso(true); if (!Fila.Visible) { continue; } if (!Util.Logico(Fila.Cells["Procesar"].Value)) { continue; } int iParteID = Util.Entero(Fila.Cells["ParteID"].Value); bool bCambioParte = (Util.Entero(Fila.Cells["CambioParte"].Value) == Cat.TiposDeAfectacion.Modificar); bool bCambioPrecio = (Util.Entero(Fila.Cells["CambioPrecio"].Value) == Cat.TiposDeAfectacion.Modificar); // Se valida el Proveedor - Marca - Línea int iProveedorID = 0, iMarcaID = 0, iLineaID = 0; if (bCambioParte || bCambioPrecio) { iProveedorID = Util.Entero(Fila.Cells["ProveedorID"].Value); iMarcaID = Util.Entero(Fila.Cells["MarcaID"].Value); iLineaID = Util.Entero(Fila.Cells["LineaID"].Value); if (!Datos.Exists <ProveedorMarcaParte>(q => q.ProveedorID == iProveedorID && q.MarcaParteID == iMarcaID && q.Estatus) || !Datos.Exists <LineaMarcaParte>(q => q.MarcaParteID == iMarcaID && q.LineaID == iLineaID && q.Estatus)) { Fila.ErrorText = "Proveedor - Marca - Línea inválido."; // Fila.DefaultCellStyle.ForeColor = Color.Red; iErroresVal++; continue; } } // Se guardan los datos de la parte, si aplica if (bCambioParte) { var oParte = Datos.GetEntity <Parte>(q => q.ParteID == iParteID && q.Estatus); string sNumeroDeParte = Util.Cadena(Fila.Cells["NumeroDeParte"].Value); string sDescripcion = Util.Cadena(Fila.Cells["Descripcion"].Value); int iUnidadDeMedidaID = Util.Entero(Fila.Cells["UnidadDeMedidaID"].Value); decimal mUnidadDeEmpaque = Util.Decimal(Fila.Cells["UnidadDeEmpaque"].Value); decimal mTiempoDeReposicion = Util.Decimal(Fila.Cells["TiempoDeReposicion"].Value); bool bComision = Util.Logico(Fila.Cells["Comision"].Value); bool bServicio = Util.Logico(Fila.Cells["Servicio"].Value); bool bEtiqueta = Util.Logico(Fila.Cells["Etiqueta"].Value); bool bSoloUna = Util.Logico(Fila.Cells["SoloUna"].Value); bool bEsPar = Util.Logico(Fila.Cells["EsPar"].Value); string sCodigoDeBarras = Util.Cadena(Fila.Cells["CodigoDeBarra"].Value); // Para agregar registro de cambios if (Util.Cadena(oParte.NumeroParte) != sNumeroDeParte) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.NumeroDeParte, oParte.NumeroParte, sNumeroDeParte); oParte.NumeroParte = sNumeroDeParte; } if (Util.Cadena(oParte.NombreParte) != sDescripcion) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Descripcion, oParte.NombreParte, sDescripcion); oParte.NombreParte = sDescripcion; } if (oParte.ProveedorID != iProveedorID) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Proveedor, oParte.ProveedorID.ToString(), iProveedorID.ToString()); oParte.ProveedorID = iProveedorID; } if (oParte.LineaID != iLineaID) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Linea, oParte.LineaID.ToString(), iLineaID.ToString()); oParte.LineaID = iLineaID; } if (oParte.MarcaParteID != iMarcaID) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Marca, oParte.MarcaParteID.ToString(), iMarcaID.ToString()); oParte.MarcaParteID = iMarcaID; } if (oParte.MedidaID.Valor() != iUnidadDeMedidaID) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.UnidadDeMedida, oParte.MedidaID.ToString(), iUnidadDeMedidaID.ToString()); oParte.MedidaID = iUnidadDeMedidaID; } if (oParte.UnidadEmpaque != mUnidadDeEmpaque) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.UnidadDeEmpaque, oParte.UnidadEmpaque.ToString(), mUnidadDeEmpaque.ToString()); oParte.UnidadEmpaque = mUnidadDeEmpaque; } if (oParte.TiempoReposicion != mTiempoDeReposicion) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.TiempoDeReposicion, oParte.TiempoReposicion.ToString(), mTiempoDeReposicion.ToString()); oParte.TiempoReposicion = mTiempoDeReposicion; } if (oParte.AplicaComision.Valor() != bComision) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.AplicaComision, this.CadenaDeBool(oParte.AplicaComision), bComision.ACadena()); oParte.AplicaComision = bComision; } if (oParte.EsServicio.Valor() != bServicio) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.EsServicio, this.CadenaDeBool(oParte.EsServicio), bServicio.ACadena()); oParte.EsServicio = bServicio; } if (oParte.Etiqueta.Valor() != bEtiqueta) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Etiqueta, this.CadenaDeBool(oParte.Etiqueta), bEtiqueta.ACadena()); oParte.Etiqueta = bEtiqueta; } if (oParte.SoloUnaEtiqueta.Valor() != bSoloUna) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.SoloUnaEtiqueta, this.CadenaDeBool(oParte.SoloUnaEtiqueta), bSoloUna.ACadena()); oParte.SoloUnaEtiqueta = bSoloUna; } if (oParte.EsPar.Valor() != bEsPar) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.EsPar, this.CadenaDeBool(oParte.EsPar), bEsPar.ACadena()); oParte.EsPar = bEsPar; } if (Util.Cadena(oParte.CodigoBarra) != sCodigoDeBarras) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.CodigoDeBarras, oParte.CodigoBarra, sCodigoDeBarras); oParte.CodigoBarra = sCodigoDeBarras; } /* oParte.NumeroParte = Util.ConvertirCadena(Fila.Cells["NumeroDeParte"].Value); * oParte.NombreParte = Util.ConvertirCadena(Fila.Cells["Descripcion"].Value); * oParte.ProveedorID = Util.ConvertirEntero(Fila.Cells["ProveedorID"].Value); * oParte.LineaID = Util.ConvertirEntero(Fila.Cells["LineaID"].Value); * oParte.MarcaParteID = Util.ConvertirEntero(Fila.Cells["MarcaID"].Value); * oParte.MedidaID = Util.ConvertirEntero(Fila.Cells["UnidadDeMedidaID"].Value); * oParte.AplicaComision = Util.ConvertirBool(Fila.Cells["Comision"].Value); * oParte.EsServicio = Util.ConvertirBool(Fila.Cells["Servicio"].Value); * oParte.Etiqueta = Util.ConvertirBool(Fila.Cells["Etiqueta"].Value); * oParte.SoloUnaEtiqueta = Util.ConvertirBool(Fila.Cells["SoloUna"].Value); * oParte.CodigoBarra = Util.ConvertirCadena(Fila.Cells["CodigoDeBarra"].Value); */ Datos.Guardar <Parte>(oParte); } // Se guardan los datos de precios if (bCambioPrecio) { var oParte = Datos.GetEntity <PartePrecio>(q => q.ParteID == iParteID && q.Estatus); decimal mCosto = Util.Decimal(Fila.Cells["Costo"].Value); decimal mCostoConDescuento = Util.Decimal(Fila.Cells["CostoConDescuento"].Value); decimal mPorUtil1 = Util.Decimal(Fila.Cells["Por1"].Value); decimal mPorUtil2 = Util.Decimal(Fila.Cells["Por2"].Value); decimal mPorUtil3 = Util.Decimal(Fila.Cells["Por3"].Value); decimal mPorUtil4 = Util.Decimal(Fila.Cells["Por4"].Value); decimal mPorUtil5 = Util.Decimal(Fila.Cells["Por5"].Value); decimal mPrecio1 = Util.Decimal(Fila.Cells["Precio1"].Value); decimal mPrecio2 = Util.Decimal(Fila.Cells["Precio2"].Value); decimal mPrecio3 = Util.Decimal(Fila.Cells["Precio3"].Value); decimal mPrecio4 = Util.Decimal(Fila.Cells["Precio4"].Value); decimal mPrecio5 = Util.Decimal(Fila.Cells["Precio5"].Value); // Para agregar registro de cambios if (oParte.Costo.Valor() != mCosto) { // Para calcular la diferencia total en costo, por sucursal decimal mVarCosto = (mCosto - oParte.Costo.Valor()); var oExistencias = Datos.GetListOf <ParteExistencia>(c => c.ParteID == iParteID && c.Estatus); foreach (var oReg in oExistencias) { if (!oVarCostos.ContainsKey(oReg.SucursalID)) { oVarCostos.Add(oReg.SucursalID, 0); } oVarCostos[oReg.SucursalID] += (mVarCosto * oReg.Existencia.Valor()); } // this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Costo, this.CadenaDeDecimal(oParte.Costo), mCosto.ToString()); oParte.Costo = mCosto; } if (oParte.CostoConDescuento.Valor() != mCostoConDescuento) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.CostoConDescuento , this.CadenaDeDecimal(oParte.CostoConDescuento), mCostoConDescuento.ToString()); oParte.CostoConDescuento = mCostoConDescuento; } if (oParte.PorcentajeUtilidadUno.Valor() != mPorUtil1) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.PorUtil1, this.CadenaDeDecimal(oParte.PorcentajeUtilidadUno), mPorUtil1.ToString()); oParte.PorcentajeUtilidadUno = mPorUtil1; } if (oParte.PorcentajeUtilidadDos.Valor() != mPorUtil2) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.PorUtil2, this.CadenaDeDecimal(oParte.PorcentajeUtilidadDos), mPorUtil2.ToString()); oParte.PorcentajeUtilidadDos = mPorUtil2; } if (oParte.PorcentajeUtilidadTres.Valor() != mPorUtil3) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.PorUtil3, this.CadenaDeDecimal(oParte.PorcentajeUtilidadTres), mPorUtil3.ToString()); oParte.PorcentajeUtilidadTres = mPorUtil3; } if (oParte.PorcentajeUtilidadCuatro.Valor() != mPorUtil4) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.PorUtil4, this.CadenaDeDecimal(oParte.PorcentajeUtilidadCuatro), mPorUtil4.ToString()); oParte.PorcentajeUtilidadCuatro = mPorUtil4; } if (oParte.PorcentajeUtilidadCinco.Valor() != mPorUtil5) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.PorUtil5, this.CadenaDeDecimal(oParte.PorcentajeUtilidadCinco), mPorUtil5.ToString()); oParte.PorcentajeUtilidadCinco = mPorUtil5; } if (oParte.PrecioUno.Valor() != mPrecio1) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Precio1, this.CadenaDeDecimal(oParte.PrecioUno), mPrecio1.ToString()); oParte.PrecioUno = mPrecio1; } if (oParte.PrecioDos.Valor() != mPrecio2) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Precio2, this.CadenaDeDecimal(oParte.PrecioDos), mPrecio2.ToString()); oParte.PrecioDos = mPrecio2; } if (oParte.PrecioTres.Valor() != mPrecio3) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Precio3, this.CadenaDeDecimal(oParte.PrecioTres), mPrecio3.ToString()); oParte.PrecioTres = mPrecio3; } if (oParte.PrecioCuatro.Valor() != mPrecio4) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Precio4, this.CadenaDeDecimal(oParte.PrecioCuatro), mPrecio4.ToString()); oParte.PrecioCuatro = mPrecio4; } if (oParte.PrecioCinco.Valor() != mPrecio5) { this.AgregarCambio(oCambios, oParte.ParteID, Cat.PartesCambios.Precio5, this.CadenaDeDecimal(oParte.PrecioCinco), mPrecio5.ToString()); oParte.PrecioCinco = mPrecio5; } /* oParte.Costo = Util.ConvertirDecimal(Fila.Cells["Costo"].Value); * oParte.PorcentajeUtilidadUno = Util.ConvertirDecimal(Fila.Cells["Por1"].Value); * oParte.PrecioUno = Util.ConvertirDecimal(Fila.Cells["Precio1"].Value); * oParte.PorcentajeUtilidadDos = Util.ConvertirDecimal(Fila.Cells["Por2"].Value); * oParte.PrecioDos = Util.ConvertirDecimal(Fila.Cells["Precio2"].Value); * oParte.PorcentajeUtilidadTres = Util.ConvertirDecimal(Fila.Cells["Por3"].Value); * oParte.PrecioTres = Util.ConvertirDecimal(Fila.Cells["Precio3"].Value); * oParte.PorcentajeUtilidadCuatro = Util.ConvertirDecimal(Fila.Cells["Por4"].Value); * oParte.PrecioCuatro = Util.ConvertirDecimal(Fila.Cells["Precio4"].Value); * oParte.PorcentajeUtilidadCinco = Util.ConvertirDecimal(Fila.Cells["Por5"].Value); * oParte.PrecioCinco = Util.ConvertirDecimal(Fila.Cells["Precio5"].Value); */ Datos.Guardar <PartePrecio>(oParte); } // Se restaura la fila if (bCambioParte || bCambioPrecio) { Fila.Cells["CambioParte"].Value = Cat.TiposDeAfectacion.SinCambios; Fila.Cells["CambioPrecio"].Value = Cat.TiposDeAfectacion.SinCambios; Fila.ErrorText = ""; // Fila.DefaultCellStyle.ForeColor = Color.Black; } } // Se generan los pólizas correspondientes por diferencias de costos string sObsPoliza = Util.Cadena(this.dgvDatos.Columns["Costo"].Tag); foreach (var oDif in oVarCostos) { if (oDif.Value != 0) { ContaProc.CrearPoliza(Cat.ContaTiposDePoliza.Diario, sObsPoliza, Cat.ContaCuentasAuxiliares.Inventario, Cat.ContaCuentasAuxiliares.CapitalFijo , oDif.Value, "", null, null, oDif.Key); } } // Se guardan los cambios UtilLocal.MostrarNotificacion("Guardando registro de cambios..."); Application.DoEvents(); this.pgrGuardar.Inicializar(oCambios.Count, 1); DateTime dAhora = DateTime.Now; foreach (var oCambio in oCambios) { oCambio.Fecha = dAhora; oCambio.UsuarioID = iUsuarioID; Datos.Guardar <ParteCambio>(oCambio, false); this.pgrGuardar.EjecutarPaso(true); } Datos.EndPersistentContext(); // Se restaura el color de las celdas, si no hubo error foreach (DataGridViewRow Fila in this.dgvDatos.Rows) { if (Fila.ErrorText == "") { foreach (DataGridViewCell Celda in Fila.Cells) { if (Celda.HasStyle) { Celda.Style.ForeColor = Color.Black; } } } } this.IniciarTerminarProgreso(false); UtilLocal.MostrarNotificacion("Proceso completado " + (iErroresVal > 0 ? "con errores." : "correctamente.")); }
private void Ncf_CrearNotaDeCreditoFiscal() { // Se verifica si hay ventas seleccionadas if (this.dgvNcf_Facturas.ContarIncidencias("Ncf_Aplicar", true) == 0) { UtilLocal.MensajeAdvertencia("No hay ninguna venta seleccionada."); return; } // Se obtiene el concepto var oConcepto = UtilLocal.ObtenerValor("Concepto de Nota de Crédito:", "", MensajeObtenerValor.Tipo.TextoLargo); if (oConcepto == null) { return; } // Se valida el permiso var oResU = UtilLocal.ValidarObtenerUsuario("Ventas.NotasDeCreditoFiscales.Agregar"); if (oResU.Error) { return; } int iUsuarioID = oResU.Respuesta.UsuarioID; // Se solicita la validación de autorización var oResA = UtilLocal.ValidarObtenerUsuario("Autorizaciones.Ventas.NotasDeCreditoFiscales.Agregar", "Autorización"); int?iAutorizoID = (oResA.Respuesta == null ? null : (int?)oResA.Respuesta.UsuarioID); // Se genera el detalle de la nota de crédito, para mandar a hacer la factura decimal mTotal = 0; var oNotaDetalle = new List <ProductoVenta>(); oNotaDetalle.Add(new ProductoVenta() { NombreDeParte = Util.Cadena(oConcepto), UnidadDeMedida = "." }); // Se meten las facturas afectadas foreach (DataGridViewRow oFila in this.dgvNcf_Facturas.Rows) { if (!Util.Logico(oFila.Cells["Ncf_Aplicar"].Value)) { continue; } int iVentaID = Util.Entero(oFila.Cells["Ncf_VentaID"].Value); decimal mImporte = Util.Decimal(oFila.Cells["Ncf_Diferencia"].Value); mTotal += mImporte; var oVenta = Datos.GetEntity <Venta>(c => c.VentaID == iVentaID && c.Estatus); oNotaDetalle.Add(new ProductoVenta() { NumeroDeParte = iVentaID.ToString(), // Se usa para mete la VentaID NombreDeParte = string.Format("FACTURA: {0}", oVenta.Folio), // Se usa para mostrar la factura Cantidad = 1, PrecioUnitario = UtilTheos.ObtenerPrecioSinIva(mImporte), Iva = UtilTheos.ObtenerIvaDePrecio(mImporte), UnidadDeMedida = "." }); } if (mTotal == 0) { return; } Cargando.Mostrar(); // Se manda hacer la nota de crédito fiscal var oRes = VentasLoc.GenerarNotaDeCreditoFiscal(oNotaDetalle, this.Cliente.ClienteID, iUsuarioID); if (oRes.Error) { Cargando.Cerrar(); UtilLocal.MensajeAdvertencia(string.Format("Ocurrió un error al hacer la Nota de Crédito Fiscal\n\n{0}", oRes.Mensaje)); return; } // Se modifica el detalle de la Nota de Crédito Fiscal, con datos adicionales de las ventas afectadas var oNcVentas = Datos.GetListOf <NotaDeCreditoFiscalDetalle>(c => c.NotaDeCreditoFiscalID == oRes.Respuesta); foreach (DataGridViewRow oFila in this.dgvNcf_Facturas.Rows) { if (!Util.Logico(oFila.Cells["Ncf_Aplicar"].Value)) { continue; } int iVentaID = Util.Entero(oFila.Cells["Ncf_VentaID"].Value); int iListaPre = Util.Entero(oFila.Cells["Ncf_ListaDePrecios"].Value); var oVentaV = Datos.GetEntity <VentasView>(c => c.VentaID == iVentaID); var oNcVenta = oNcVentas.FirstOrDefault(c => c.VentaID == iVentaID); if (oNcVenta == null) { continue; } oNcVenta.ListaDePreciosUsada = iListaPre; oNcVenta.ImporteAntes = oVentaV.Total; Datos.Guardar <NotaDeCreditoFiscalDetalle>(oNcVenta); } // Se descuenta el importe en cada artículo de las ventas afectadas foreach (DataGridViewRow oFila in this.dgvNcf_Facturas.Rows) { if (!Util.Logico(oFila.Cells["Ncf_Aplicar"].Value)) { continue; } int iVentaID = Util.Entero(oFila.Cells["Ncf_VentaID"].Value); int iListaPre = Util.Entero(oFila.Cells["Ncf_ListaDePrecios"].Value); var oPartes = Datos.GetListOf <VentaDetalle>(c => c.VentaID == iVentaID && c.Estatus); decimal mPrecio = 0; foreach (var oReg in oPartes) { var oPrecio = Datos.GetEntity <PartePrecio>(c => c.ParteID == oReg.ParteID && c.Estatus); switch (iListaPre) { case 1: mPrecio = oPrecio.PrecioUno.Valor(); break; case 2: mPrecio = oPrecio.PrecioDos.Valor(); break; case 3: mPrecio = oPrecio.PrecioTres.Valor(); break; case 4: mPrecio = oPrecio.PrecioCuatro.Valor(); break; case 5: mPrecio = oPrecio.PrecioCinco.Valor(); break; } // Se calcula el Iva oReg.PrecioUnitario = UtilTheos.ObtenerPrecioSinIva(mPrecio); oReg.Iva = (mPrecio - oReg.PrecioUnitario); Datos.Guardar <VentaDetalle>(oReg); } } // Se crea la póliza contable correspondiente (AfeConta) // Una póliza por cada venta afectada var oNotaV = Datos.GetEntity <NotasDeCreditoFiscalesView>(c => c.NotaDeCreditoFiscalID == oRes.Respuesta); foreach (var oReg in oNcVentas) { ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.NotaDeCreditoDescuentoVenta, oReg.NotaDeCreditoFiscalDetalleID , (oNotaV.Serie + oNotaV.Folio), oNotaV.Cliente); } // Se guarda la autorización VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.NotaDeCreditoFiscalCrear, "NotaDeCreditoFiscal", oRes.Respuesta, iAutorizoID); Cargando.Cerrar(); this.NcfLlenarFacturas(); }