private void ProcesarPagoTarjeta(VentaDataBase ventaData, VentaPago pago, CajaMovimiento cajaMovimiento) { var pagoTarjeta = pago as VentaPagoTarjeta; if (cajaMovimiento.Tarjeta == null) { cajaMovimiento.Tarjeta = 0; } cajaMovimiento.Tarjeta += pago.Importe; //GUARDAR TARJETA MOVIMIENTO TarjetasMovimiento tarjetasMovimiento = new TarjetasMovimiento(); tarjetasMovimiento.CajaMovimientoId = cajaMovimiento.Id; tarjetasMovimiento.TarjetaId = pagoTarjeta.TarjetaId ?? 0; tarjetasMovimiento.LoteCupon = pagoTarjeta.CuponNumero; tarjetasMovimiento.Fecha = _clock.Now; tarjetasMovimiento.Importe = (float)pago.Importe; tarjetasMovimiento.Estado = 1; // No se tarjetasMovimiento.FechaAlta = _clock.Now; tarjetasMovimiento.SucursalAltaId = ventaData.SucursalId; tarjetasMovimiento.OperadorAltaId = ventaData.OperadorId; Uow.TarjetasMovimientos.Agregar(tarjetasMovimiento); }
public void GenerarPagoAutoNuevo(decimal?monto, FormaPago tipoPago) { if (Pagos.Count != 0) { foreach (var pago in Pagos) { if (pago.TipoPago == tipoPago) { pago.Importe = monto; GrillaPagos.DataSource = Pagos.ToList(); EliminarPagoCero(); RefrescarPagos(); return; } } } VentaPago pagoNuevo = new VentaPago(); pagoNuevo.TipoPago = tipoPago; pagoNuevo.Importe = monto; Pagos.Add(pagoNuevo); GrillaPagos.DataSource = Pagos.ToList(); RefrescarPagos(); }
private void ProcesarPagoCheque(VentaDataBase ventaData, VentaPago pago, CajaMovimiento cajaMovimiento) { var pagoCheque = pago as VentaPagoCheque; if (cajaMovimiento.Cheque == null) { cajaMovimiento.Cheque = 0; } cajaMovimiento.Cheque += pago.Importe; ChequesTercero chequesTercero = new ChequesTercero(); chequesTercero.Id = Guid.NewGuid(); chequesTercero.CajaMovimientoId = cajaMovimiento.Id; chequesTercero.BancoId = pagoCheque.BancoId ?? 0; chequesTercero.NroCheque = pagoCheque.Numero; chequesTercero.Fecha = _clock.Now; chequesTercero.FechaCobro = _clock.Now; chequesTercero.Importe = (float)pago.Importe; chequesTercero.FechaAlta = _clock.Now; chequesTercero.EstadoChequeId = 0; chequesTercero.SucursalAltaId = ventaData.SucursalId; chequesTercero.OperadorAltaId = ventaData.OperadorId; Uow.ChequesTerceros.Agregar(chequesTercero); }
private void OnPagoAgregado(VentaPago pago) { if (PagoAgregado != null) { PagoAgregado(this, pago); } }
private void ProcesarPagoDeposito(VentaDataBase ventaData, VentaPago pago, CajaMovimiento cajaMovimiento, Venta venta, Caja caja) { var pagoDeposito = pago as VentaPagoDeposito; if (cajaMovimiento.Deposito == null) { cajaMovimiento.Deposito = 0; } //Guardar Cuentas Movimientos cajaMovimiento.Deposito += pago.Importe; CuentasMovimiento cuentasMovimiento = new CuentasMovimiento(); cuentasMovimiento.CuentaId = pagoDeposito.CuentaId ?? 0; cuentasMovimiento.TipoMovimientoId = 2; //Deposito cuentasMovimiento.FechaMovimiento = pagoDeposito.Fecha; cuentasMovimiento.EstadoMovimientoCuentaId = 0; cuentasMovimiento.TipoComprobanteId = ventaData.TipoComprobanteSeleccionado; cuentasMovimiento.ComprobanteId = venta.Id; cuentasMovimiento.MonedaId = 0; cuentasMovimiento.CondicionVentaId = ventaData.CondicionVentaSeleccionada; cuentasMovimiento.NroMovimiento = pagoDeposito.Numero; cuentasMovimiento.Descripcion = "DEPOSITO NRO " + pagoDeposito.Numero.ToString(); cuentasMovimiento.FechaCobro = _clock.Now; cuentasMovimiento.Debito = 0; cuentasMovimiento.Credito = pago.Importe; cuentasMovimiento.TipoCarga = 2; cuentasMovimiento.CajaId = caja.Id; cuentasMovimiento.FechaAlta = _clock.Now; cuentasMovimiento.OperadorAltaId = ventaData.OperadorId; cuentasMovimiento.SucursalAltaId = ventaData.SucursalId; Uow.CuentasMovimientos.Agregar(cuentasMovimiento); }
public void GenerarPagoAuto(decimal?monto) { if (Pagos.Count == 0) { VentaPago pago = new VentaPago(); pago.TipoPago = FormaPago.Efectivo; pago.Importe = monto; Pagos.Add(pago); } else { foreach (var pago in Pagos) { switch (pago.TipoPago) { case FormaPago.Efectivo: pago.Importe = monto; break; } } } GrillaPagos.DataSource = Pagos.ToList(); RefrescarPagos(); }
public static ResAcc <int> GenerarPago(int iVentaID, decimal mImporte, int iFormaDePagoID, int iBancoID, string sFolio, string sCuenta) { // Se generan los datos del pago var oPago = new VentaPago() { VentaID = iVentaID, Fecha = DateTime.Now }; var oPagoDetalle = new List <VentaPagoDetalle>(); oPagoDetalle.Add(new VentaPagoDetalle() { TipoFormaPagoID = iFormaDePagoID, Importe = mImporte }); if (iBancoID > 0) { oPagoDetalle[0].BancoID = iBancoID; oPagoDetalle[0].Folio = sFolio; oPagoDetalle[0].Cuenta = sCuenta; } // Se guarda el pago Guardar.VentaPago(oPago, oPagoDetalle); return(new ResAcc <int>(true, oPago.VentaPagoID)); }
public void GenerarPagoCuotas(decimal?monto) { if (Pagos.Count == 0) { VentaPago pago = new VentaPago(); pago.TipoPago = FormaPago.CuentaCorriente; pago.Importe = monto; monto = 0; Pagos.Add(pago); } else { foreach (var pago in Pagos) { if (pago.TipoPago == FormaPago.CuentaCorriente) { pago.Importe = monto; monto = 0; } } } if (monto != 0) { VentaPago pago = new VentaPago(); pago.TipoPago = FormaPago.CuentaCorriente; pago.Importe = monto; Pagos.Add(pago); } GrillaPagos.DataSource = Pagos.ToList(); RefrescarPagos(); }
private void BtnGuardar_Click(object sender, EventArgs e) { VentaPago pago = ObtenerPago(); var esValido = this.ValidarForm(); if (esValido) { OnPagoAgregado(pago); } else { this.DialogResult = DialogResult.None; } }
public static ResAcc <int> GenerarPagoNegativoPorNotaDeCredito(int iVentaID, decimal mImporte, int iNotaDeCreditoID) { // Se generan los datos del pago var oPago = new VentaPago() { VentaID = iVentaID, // TipoPagoID = Cat.TiposDePago.Contado, Fecha = DateTime.Now }; var oPagoDetalle = new List <VentaPagoDetalle>(); oPagoDetalle.Add(new VentaPagoDetalle() { TipoFormaPagoID = Cat.FormasDePago.Vale, Importe = (mImporte * -1), NotaDeCreditoID = iNotaDeCreditoID }); // Se guarda el pago Guardar.VentaPago(oPago, oPagoDetalle); return(new ResAcc <int>(true, oPago.VentaPagoID)); }
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; }
public void GenerarPagoAutoNuevo(decimal? monto, FormaPago tipoPago) { if (Pagos.Count != 0) { foreach (var pago in Pagos) { if (pago.TipoPago == tipoPago) { pago.Importe = monto; GrillaPagos.DataSource = Pagos.ToList(); EliminarPagoCero(); RefrescarPagos(); return; } } } VentaPago pagoNuevo = new VentaPago(); pagoNuevo.TipoPago = tipoPago; pagoNuevo.Importe = monto; Pagos.Add(pagoNuevo); GrillaPagos.DataSource = Pagos.ToList(); RefrescarPagos(); }
private void EliminarPago(VentaPago ventaPago) { Pagos.Remove(ventaPago); RefrescarPagos(); }
public void GenerarPagoCuotas(decimal? monto) { if (Pagos.Count == 0) { VentaPago pago = new VentaPago(); pago.TipoPago = FormaPago.CuentaCorriente; pago.Importe = monto; monto = 0; Pagos.Add(pago); } else { foreach (var pago in Pagos) { if (pago.TipoPago == FormaPago.CuentaCorriente) { pago.Importe = monto; monto = 0; } } } if (monto != 0) { VentaPago pago = new VentaPago(); pago.TipoPago = FormaPago.CuentaCorriente; pago.Importe = monto; Pagos.Add(pago); } GrillaPagos.DataSource = Pagos.ToList(); RefrescarPagos(); }
private void ProcesarPagoTarjeta(VentaDataBase ventaData, VentaPago pago, CajaMovimiento cajaMovimiento) { var pagoTarjeta = pago as VentaPagoTarjeta; if (cajaMovimiento.Tarjeta == null) cajaMovimiento.Tarjeta = 0; cajaMovimiento.Tarjeta += pago.Importe; //GUARDAR TARJETA MOVIMIENTO TarjetasMovimiento tarjetasMovimiento = new TarjetasMovimiento(); tarjetasMovimiento.CajaMovimientoId = cajaMovimiento.Id; tarjetasMovimiento.TarjetaId = pagoTarjeta.TarjetaId ?? 0; tarjetasMovimiento.LoteCupon = pagoTarjeta.CuponNumero; tarjetasMovimiento.Fecha = _clock.Now; tarjetasMovimiento.Importe = (float)pago.Importe; tarjetasMovimiento.Estado = 1; // No se tarjetasMovimiento.FechaAlta = _clock.Now; tarjetasMovimiento.SucursalAltaId = ventaData.SucursalId; tarjetasMovimiento.OperadorAltaId = ventaData.OperadorId; Uow.TarjetasMovimientos.Agregar(tarjetasMovimiento); }
public static ResAcc<int> GenerarPagoNegativoPorNotaDeCredito(int iVentaID, decimal mImporte, int iNotaDeCreditoID) { // Se generan los datos del pago var oPago = new VentaPago() { VentaID = iVentaID, // TipoPagoID = Cat.TiposDePago.Contado, Fecha = DateTime.Now }; var oPagoDetalle = new List<VentaPagoDetalle>(); oPagoDetalle.Add(new VentaPagoDetalle() { TipoFormaPagoID = Cat.FormasDePago.Vale, Importe = (mImporte * -1), NotaDeCreditoID = iNotaDeCreditoID }); // Se guarda el pago Guardar.VentaPago(oPago, oPagoDetalle); return new ResAcc<int>(true, oPago.VentaPagoID); }
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 bool VentasPorCobrar() { // Se valida que haya una venta seleccionada CajaVentasPorCobrar oPorCobrar = this.ctlCajaGeneral.ctlVentasPorCobrar; int iVentaID = oPorCobrar.VentaID; if (iVentaID <= 0) { UtilLocal.MensajeAdvertencia("No hay ninguna venta seleccionada."); return false; } // Se verifica si se debe cobrar o mostrar la pantalla de cobro var oCliente = Datos.GetEntity<Cliente>(q => q.ClienteID == oPorCobrar.ClienteID && q.Estatus); if (Util.ControlAlFrente(oPorCobrar.pnlParaDetalle) == oPorCobrar.ctlDetalle) { oPorCobrar.ctlCobro.LlenarDatosGenerales(oPorCobrar.VentaID); oPorCobrar.ctlCobro.Total = oPorCobrar.ImporteVenta; oPorCobrar.ctlCobro.EstablecerFormaDePagoPredeterminada(oCliente.TipoFormaPagoID.Valor(), oPorCobrar.ctlCobro.Total, oCliente.BancoID.Valor(), oCliente.CuentaBancaria, oCliente.MenorQue2000Efectivo.Valor()); oPorCobrar.ctlCobro.Leyenda = VentasProc.ObtenerLeyenda(iVentaID); oPorCobrar.ctlCobro.BringToFront(); return false; } else { // Se pide el efectivo, si aplica if (!oPorCobrar.ctlCobro.CompletarCobro()) return false; } decimal? mEfectivoRecibido = oPorCobrar.ctlCobro.EfectivoRecibido; // Si la venta es a crédito y el cliente tiene personal, se muestran las firmas if (oPorCobrar.ctlCobro.ACredito) { var personal = Datos.GetListOf<ClientePersonal>(c => c.ClienteID == oPorCobrar.ClienteID ); if (personal.Count > 0) { var frmMostrarFirmas = new DetalleMostrarFirmas(oPorCobrar.ClienteID); frmMostrarFirmas.ShowDialog(Principal.Instance); if (frmMostrarFirmas.DialogResult != DialogResult.OK) return false; //Util.MensajeInformacion("Revisar la firma", ""); } } // Se pide la orden de compra, si aplica var oVenta = Datos.GetEntity<Venta>(q => q.VentaID == oPorCobrar.VentaID && q.Estatus); if (oPorCobrar.ctlCobro.ACredito && oCliente.SiempreVale.Valor()) { var oOrdenDeCompra = UtilLocal.ObtenerValor("Indica la Orden de Compra:", "", MensajeObtenerValor.Tipo.TextoLargo); if (oOrdenDeCompra == null) return false; oVenta.OrdenDeCompra = Util.Cadena(oOrdenDeCompra); } // Si hay que facturar, se pregunta si se debe facturar al mismo cliente de las ventas o a otro int iAFClienteID = oPorCobrar.ClienteID; if (oPorCobrar.ctlCobro.Facturar) { // Se valida que la venta sólo tenga una artículo, en caso de que se quiera dividir if (oPorCobrar.ctlCobro.DividirFactura) { if (oPorCobrar.ctlDetalle.ObtenerListaVenta().Count > 1) { UtilLocal.MensajeAdvertencia("No se puede dividir la factura si la venta tiene más de un artículo."); return false; } } // Se obtiene el cliente al cual se va a facturar if (UtilLocal.MensajePregunta("¿Deseas hacer la factura a nombre del cliente que realizó la compra?") == 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 muestra la ventana de "Cargando.." Cargando.Mostrar(); // Se validan los datos para realizar la facturación var ResVal = VentasLoc.ValidarDatosParaFactura(iVentaID, iAFClienteID); // Se cierra la ventana de "Cargando.." Cargando.Cerrar(); // if (!ResVal.Respuesta) { UtilLocal.MensajeAdvertencia("Hubo un error al validar la factura.\n\n" + ResVal.Mensaje); return false; } } // Se verifica si la venta es de un anticipo de 9500 if (Datos.Exists<Cotizacion9500>(c => c.AnticipoVentaID == iVentaID && c.Estatus)) { VentasLoc.NotificarCreacion9500(); } // Se verifica si la venta pertenece a un 9500, para tomar las acciones necesarias var o9500 = Datos.GetEntity<Cotizacion9500>(q => q.VentaID == iVentaID && q.Estatus); bool b9500 = (o9500 != null); bool bDevolverEfectivo = false; decimal mSobrante = 0; if (b9500) { var oVentaV9500 = Datos.GetEntity<VentasView>(q => q.VentaID == o9500.VentaID); mSobrante = (o9500.Anticipo - oVentaV9500.Total); // Si el total es menor que el anticipo, se pregunta por la acción a tomar if (mSobrante > 0) { var Res9500 = MessageBox.Show("El importe total es menor al anticipo que dejó el Cliente. ¿Deseas generar una notá de crédito por la diferencia?\n\n" + " Si seleccionas \"No\", deberás devolver el efectivo al Cliente.", "Saldo a favor", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); if (Res9500 == DialogResult.Cancel) return false; bDevolverEfectivo = (Res9500 == DialogResult.No); } } // Se verifica si la venta ya fue cobrada if (oVenta.VentaEstatusID != Cat.VentasEstatus.Realizada) { UtilLocal.MensajeAdvertencia("La venta seleccionada ya fue cobrada o ya no es posible realizar el cobro."); oPorCobrar.ActualizarDatos(); return false; } // Se solicita y la validación de autorización, si aplica int iAutorizoID = 0; if (oPorCobrar.ctlCobro.AutorizacionDeCreditoRequerida || oPorCobrar.ctlCobro.AutorizacionDeNotasDeCreditoRequerida) { // Aquí falta considerar que las dos autorizaciones pueden ser requeridas, se debería pedir dos veces la autorización, para validar en cada caso string sPermiso = (oPorCobrar.ctlCobro.AutorizacionDeCreditoRequerida ? "Autorizaciones.Ventas.Cobro.CreditoNoAplicable" : "Autorizaciones.Ventas.Cobro.NotaDeCreditoOtroCliente"); var Res = UtilLocal.ValidarObtenerUsuario(sPermiso, "Autorización"); iAutorizoID = (Res.Exito ? Res.Respuesta.UsuarioID : 0); } // Se muestra la ventana de "Cargando.." Cargando.Mostrar(); // Se procede a guardar los datos DateTime dAhora = DateTime.Now; // Se cambia el estatus de la venta oVenta.VentaEstatusID = Cat.VentasEstatus.Cobrada; Datos.Guardar<Venta>(oVenta); // Si la venta es a crédito, se guarda el dato, si no, se generan los datos del pago int iVentaPagoID = 0; if (oPorCobrar.ctlCobro.ACredito) { oVenta.ACredito = true; oVenta.Vencimiento = oVenta.Fecha.AddDays(oCliente.DiasDeCredito.Valor()); Datos.Guardar<Venta>(oVenta); } else { var oPago = new VentaPago() { VentaID = oPorCobrar.VentaID, Fecha = dAhora, }; var oPagoDetalle = oPorCobrar.ctlCobro.GenerarPagoDetalle(); // Se mandan guardar los datos del pago Guardar.VentaPago(oPago, oPagoDetalle); // Se actualiza la venta, pues pudo haber cambiado en el proceso anterior oVenta = Datos.GetEntity<Venta>(q => q.VentaID == oPorCobrar.VentaID && q.Estatus); iVentaPagoID = oPago.VentaPagoID; // Si hubo un pago con tarjeta de crédito se guarda la información de tarjeta y meses if (oPorCobrar.ctlCobro.BancoCuentaID > 0) { var oPagoTar = oPagoDetalle.FirstOrDefault(c => c.TipoFormaPagoID == Cat.FormasDePago.Tarjeta || c.TipoFormaPagoID == Cat.FormasDePago.TarjetaDeDebito); var oTarjeta = new VentaPagoConTarjeta() { BancoCuentaID = oPorCobrar.ctlCobro.BancoCuentaID, VentaPagoDetalleID = oPagoTar.VentaPagoDetalleID, MesesSinIntereses = oPorCobrar.ctlCobro.MesesSinIntereses.Value, Telefono = oPorCobrar.ctlCobro.CelularTarjeta }; Datos.Guardar<VentaPagoConTarjeta>(oTarjeta); // Se actualiza el movimiento bancario, con el dato de la cuenta seleccionada var oMovBanco = Datos.GetEntity<BancoCuentaMovimiento>(c => c.RelacionID == oPagoTar.VentaPagoDetalleID && c.RelacionTabla == Cat.Tablas.VentaPagoDetalle); oMovBanco.BancoCuentaID = oPorCobrar.ctlCobro.BancoCuentaID; Datos.Guardar<BancoCuentaMovimiento>(oMovBanco); // Se guarda el dato de teléfono en el registro del cliente if (oCliente.ClienteID != Cat.Clientes.Mostrador) { if (oCliente.Celular != oPorCobrar.ctlCobro.CelularTarjeta) { oCliente.Celular = oPorCobrar.ctlCobro.CelularTarjeta; Datos.Guardar<Cliente>(oCliente); } } } } // Si es de un 9500, se completa el 9500 if (b9500) VentasProc.Completar9500(o9500, mSobrante, bDevolverEfectivo); // Se guardan la autorizaciones aplicables if (oPorCobrar.ctlCobro.AutorizacionDeCreditoRequerida) VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.CreditoNoAplicable, Cat.Tablas.Venta, oPorCobrar.VentaID, iAutorizoID); if (oPorCobrar.ctlCobro.AutorizacionDeNotasDeCreditoRequerida) { // Se agrega una autorización por cada nota de otro cliente var oNotasOC = oPorCobrar.ctlCobro.NotasDeCreditoOtrosClientes(); foreach (var oNotaOC in oNotasOC) VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.NotaDeCreditoOtroClienteUsar, Cat.Tablas.NotaDeCredito, oNotaOC, iAutorizoID); } // Para la impresión del ticket o factura var oAdicionales = new Dictionary<string, object>(); oAdicionales.Add("EfectivoRecibido", mEfectivoRecibido); oAdicionales.Add("Cambio", (mEfectivoRecibido - oPorCobrar.ImporteVenta) ?? 0); // Se realiza la facturación, si aplica ResAcc<int> ResFactura = null; bool bGenerarFolio = true; if (oPorCobrar.ctlCobro.Facturar) { var oFormasDePago = UtilDatos.DeVentaPagoDetalleAVentasPagosDetalleView(oPorCobrar.ctlCobro.GenerarPagoDetalle()); if (oPorCobrar.ctlCobro.FormasDePagoLibre != null && oPorCobrar.ctlCobro.FormasDePagoLibre.Count > 0) oFormasDePago = oPorCobrar.ctlCobro.FormasDePagoLibre; // Se verifica si se debe dividir la factura var oProductos = oPorCobrar.ctlDetalle.ObtenerListaVenta(); if (oPorCobrar.ctlCobro.DividirFactura) { decimal mImporteMax = Util.Decimal(Config.Valor("Facturacion.ImporteDividir")); if (oPorCobrar.ImporteVenta > mImporteMax) { decimal mImporteFac = (mImporteMax - 60); decimal mRestante = oPorCobrar.ImporteVenta; int iFactura = 0; string sDescripcion = oProductos[0].NombreDeParte; while (mRestante > 0) { if (mRestante < mImporteFac) mImporteFac = mRestante; // Se ajustan los datos del producto oProductos[0].PrecioUnitario = UtilTheos.ObtenerPrecioSinIva(mImporteFac, 3); oProductos[0].Iva = UtilTheos.ObtenerIvaDePrecio(mImporteFac, 3); if (++iFactura > 1) oProductos[0].NombreDeParte = string.Format("{0}\n(Complemento {1})", sDescripcion, (iFactura - 1)); // Se manda hacer la factura ResFactura = VentasLoc.GenerarFacturaElectronica(new List<int>() { iVentaID }, iAFClienteID, oProductos, oFormasDePago, "", oAdicionales); if (ResFactura.Error) break; // mRestante -= mImporteFac; } // Se marca la venta como facturas divididas oVenta = Datos.GetEntity<Venta>(q => q.VentaID == oPorCobrar.VentaID && q.Estatus); oVenta.FacturaDividida = true; Datos.Guardar<Venta>(oVenta); } } if (ResFactura == null) ResFactura = VentasLoc.GenerarFacturaElectronica(new List<int>() { iVentaID }, iAFClienteID, oProductos, oFormasDePago, "", oAdicionales); // Se obtiene la forma de pago /* if (oPorCobrar.ctlCobro.FormaDePagoLibre == "") { ResFactura = VentasProc.GenerarFacturaElectronica(iVentaID, iAFClienteID , oPorCobrar.ctlDetalle.ObtenerListaVenta(), oPorCobrar.ctlCobro.GenerarPagoDetalle(), ""); } else { ResFactura = VentasProc.GenerarFacturaElectronica(new List<int>() { iVentaID }, iAFClienteID , oPorCobrar.ctlDetalle.ObtenerListaVenta(), oPorCobrar.ctlCobro.FormaDePagoLibre, ""); } // Se manda hacer la factura electrónica if (oVenta.ACredito) ResFactura = VentasProc.GenerarFacturaElectronica(iVentaID, iAFClienteID , oPorCobrar.ctlDetalle.ObtenerListaVenta(), oPorCobrar.ctlCobro.GenerarPagoDetalle(), ""); else ResFactura = VentasProc.GenerarFacturaElectronica(iVentaID, iAFClienteID, oPorCobrar.ctlDetalle.ObtenerListaVenta(), null, ""); */ if (ResFactura.Exito) { // Se escribe el folio en la venta /* Siempre no, se hace dentro del procedimiento "GenerarFacturaElectronica" var oFactura = General.GetEntity<VentaFactura>(q => q.VentaFacturaID == ResFactura.Respuesta); oVenta.Folio = (oFactura.Serie + oFactura.Folio); Datos.Guardar<Venta>(oVenta); */ bGenerarFolio = false; // Se manda a afectar contabilidad (AfeConta) var oFactura = Datos.GetEntity<VentaFactura>(c => c.VentaFacturaID == ResFactura.Respuesta && c.Estatus); if (oVenta.ACredito) ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.VentaCredito, iVentaID, (oFactura.Serie + oFactura.Folio), oCliente.Nombre); else ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.VentaContadoFacturaDirecta, iVentaID, (oFactura.Serie + oFactura.Folio), oCliente.Nombre); } else { UtilLocal.MensajeAdvertencia("Hubo un error al generar la factura.\n\n" + ResFactura.Mensaje); // return true; // Igual se sigue, porque ya se guardaron todos los datos del pago. } } // Se genera el folio de la venta, si no se hizo factura o hubo un error al generar la factura if (bGenerarFolio) { // Se genera el folio de venta string sFolio = VentasProc.GenerarFolioDeVenta(); oVenta.Folio = sFolio; oVenta.FolioIni = sFolio; Datos.Guardar<Venta>(oVenta); // Se imprimen el ticket correpondiente // Se verifica si es una venta por Anticipo de 9500 var o9500Ant = Datos.GetEntity<Cotizacion9500>(q => q.EstatusGenericoID == Cat.EstatusGenericos.Pendiente && q.AnticipoVentaID.Value == oVenta.VentaID && q.Estatus); if (o9500Ant == null) { VentasLoc.GenerarTicketDeVenta(oVenta.VentaID, oPorCobrar.ctlDetalle.ObtenerListaVenta(), oAdicionales); // Se verifica si se debe imprimir ticket precio 1 if(Datos.Exists<Cliente>(c => c.ClienteID == oPorCobrar.ClienteID && c.TicketPrecio1.HasValue && c.TicketPrecio1.Value)) VentasLoc.GenerarTicketPrecio1(oVenta.VentaID); } else VentasLoc.GenerarTicketDe9500(o9500Ant.Cotizacion9500ID); } // Se obtiene la vista de la venta actualizada, por el cambio de folio y otros cambios que pudo haber tenido var oVentaV = Datos.GetEntity<VentasView>(c => c.VentaID == oVenta.VentaID); // Si es un ticket a crédito, se genera una póliza especial de ajuste (AfeConta) if (oVenta.ACredito && !oPorCobrar.ctlCobro.Facturar) { ContaProc.CrearPolizaTemporalTicketCredito(iVentaID, oPorCobrar.ImporteVenta); } // Se verifica si se crearon movimientos bancarios (por pagos de banco), en cuyo caso, se completan con el folio de venta asignado var oPagoDet = Datos.GetListOf<VentaPagoDetalle>(c => c.VentaPagoID == iVentaPagoID && c.Estatus); foreach (var oReg in oPagoDet) { if (oReg.TipoFormaPagoID == Cat.FormasDePago.Cheque || oReg.TipoFormaPagoID == Cat.FormasDePago.Tarjeta || oReg.TipoFormaPagoID == Cat.FormasDePago.TarjetaDeDebito || oReg.TipoFormaPagoID == Cat.FormasDePago.Transferencia) { var oMovBanco = Datos.GetEntity<BancoCuentaMovimiento>(c => c.RelacionTabla == Cat.Tablas.VentaPagoDetalle && c.RelacionID == oReg.VentaPagoDetalleID); oMovBanco.Referencia = oVentaV.Folio; Datos.Guardar<BancoCuentaMovimiento>(oMovBanco); } } // Se manda a afectar contabilidad (AfeConta), si es vale // Ya no se manda hacer esta póliza porque este movimiento ya lo contempla la Factura global del Día o la Factura al // momento del Pago, sea crédito o contado. Si se quiciera reactivar esta póliza verificar la Función porque Moy la modificó 2015-08-26 // if (oPagoDet.Any(c => c.FormaDePagoID == Cat.FormasDePago.Vale)) // ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.VentaContadoVale, iVentaID, oVentaV.Folio, oCliente.Nombre); // Se modifica el registro de kardex correspondiente, para completar los datos faltantes var oVentaDet = Datos.GetListOf<VentaDetalle>(c => c.VentaID == iVentaID && c.Estatus); var oPartesKardex = Datos.GetListOf<ParteKardex>(c => c.OperacionID == Cat.OperacionesKardex.Venta && c.RelacionTabla == Cat.Tablas.Venta && c.RelacionID == iVentaID); foreach (var oReg in oVentaDet) { var oKardex = oPartesKardex.FirstOrDefault(c => c.ParteID == oReg.ParteID); if (oKardex == null) continue; oKardex.Folio = oVentaV.Folio; oKardex.Entidad = oVentaV.Cliente; oKardex.Origen = oVentaV.Sucursal; oKardex.Destino = oVentaV.Cliente; oKardex.Importe = (oReg.PrecioUnitario + oReg.Iva); Datos.Guardar<ParteKardex>(oKardex); } // Si se pagó con vale, se verifica si se crearon nuevos vales por importes restantes. Y se mandan a imprimir var oValesCreados = VentasProc.ObtenerValesCreados(oPagoDet); foreach (var oReg in oValesCreados) VentasLoc.GenerarTicketNotaDeCredito(oReg.NotaDeCreditoID); // Se cierra la ventana de "Cargando.." Cargando.Cerrar(); // Se muestra una notifiación con el resultado UtilLocal.MostrarNotificacion("Procedimiento completado correctamente."); return true; }
public static ResAcc VentaPago(VentaPago oPago, List<VentaPagoDetalle> Detalle) { // Se generan datos predeterminados o globales, en caso de que apliquen oPago.Fecha = (oPago.Fecha != DateTime.MinValue ? oPago.Fecha : DateTime.Now); oPago.SucursalID = (oPago.SucursalID > 0 ? oPago.SucursalID : Theos.SucursalID); // Se guarda el pago Datos.Guardar<VentaPago>(oPago); // Se guarda el detalle var oVentaV = Datos.GetEntity<VentasView>(q => q.VentaID == oPago.VentaID); foreach (var PartePago in Detalle) { PartePago.VentaPagoID = oPago.VentaPagoID; Datos.Guardar<VentaPagoDetalle>(PartePago); // Se afectan las notas de crédito, si hay alguna if (PartePago.TipoFormaPagoID == Cat.FormasDePago.Vale && PartePago.Importe > 0) { int iNotaID = PartePago.NotaDeCreditoID.Valor(); var oNota = Datos.GetEntity<NotaDeCredito>(q => q.NotaDeCreditoID == iNotaID && q.Estatus); if (oNota != null) { // Se verifica si se usó el importe total o sólo una parte if (PartePago.Importe < oNota.Importe) { // Se crea una nueva nota, con el importe restante // 25/11/2015 - Se busca el vale original para usarlo como origen de todas las notas derivadas, en vez de el OrigenVentaID que se mandaba antes int iOrigenValeID = (oNota.OrigenID == Cat.OrigenesNotaDeCredito.ImporteRestante ? oNota.RelacionID.Valor() : oNota.NotaDeCreditoID); VentasProc.GenerarNotaDeCredito(oNota.ClienteID, (oNota.Importe - PartePago.Importe), "", Cat.OrigenesNotaDeCredito.ImporteRestante , iOrigenValeID); // oNota.Importe = PartePago.Importe; } // oNota.Valida = false; oNota.FechaDeUso = DateTime.Now; oNota.UsoVentaID = oPago.VentaID; Datos.Guardar<NotaDeCredito>(oNota); } } // Si es un pago bancario, se genera el movimiento correspondiente if (PartePago.TipoFormaPagoID == Cat.FormasDePago.Tarjeta || PartePago.TipoFormaPagoID == Cat.FormasDePago.TarjetaDeDebito || PartePago.TipoFormaPagoID == Cat.FormasDePago.Transferencia || PartePago.TipoFormaPagoID == Cat.FormasDePago.Cheque) { var oBanco = Datos.GetEntity<Banco>(c => c.BancoID == PartePago.BancoID && c.Estatus); var oMovBanc = new BancoCuentaMovimiento() { // BancoCuentaID = (PartePago.TipoFormaPagoID == Cat.FormasDePago.Tarjeta ? (int?)Cat.CuentasBancarias.Banamex : null), EsIngreso = true, Fecha = oPago.Fecha, FechaAsignado = ((PartePago.TipoFormaPagoID == Cat.FormasDePago.Tarjeta || PartePago.TipoFormaPagoID == Cat.FormasDePago.TarjetaDeDebito) ? (DateTime?)oPago.Fecha : null), SucursalID = oPago.SucursalID, Importe = PartePago.Importe, Concepto = oVentaV.Cliente, Referencia = oVentaV.Folio, TipoFormaPagoID = PartePago.TipoFormaPagoID, DatosDePago = string.Format("{0}-{1}-{2}", oBanco.NombreBanco, PartePago.Folio, PartePago.Cuenta), RelacionTabla = Cat.Tablas.VentaPagoDetalle, RelacionID = PartePago.VentaPagoDetalleID, }; ContaProc.RegistrarMovimientoBancario(oMovBanc); } } // Se verifica el estatus de la venta, por si debe cambiar según el pago if (oVentaV.VentaEstatusID == Cat.VentasEstatus.Cobrada) { // Se obtiene el total de los pagos decimal mPagado = Datos.GetListOf<VentasPagosView>(q => q.VentaID == oVentaV.VentaID).Sum(q => q.Importe); if (mPagado >= oVentaV.Total) { var oVenta = Datos.GetEntity<Venta>(q => q.Estatus && q.VentaID == oPago.VentaID); oVenta.VentaEstatusID = Cat.VentasEstatus.Completada; // Se guarda con el nuevo estatus Datos.Guardar<Venta>(oVenta); } } return new ResAcc(true); }
private VentaPago ObtenerPago() { VentaPago ventaPago = new VentaPago(); if (TabsFormaPago.SelectedPage == this.TabEfectivo) { ventaPago.Importe = this.Importe; if (ChkCajaAnterior.Checked) { ventaPago.TipoPago = FormaPago.EfectivoCajaAnterior; ventaPago.Descripcion = "Caja Anterior"; } else { ventaPago.TipoPago = FormaPago.Efectivo; } } if (TabsFormaPago.SelectedPage == this.TabTarjeta) { var ventaPagoTarjeta = new VentaPagoTarjeta(); ventaPagoTarjeta.Interes = Interes; //ventaPagoTarjeta.Importe = Importe; var interes = Importe * Interes / 100; ventaPagoTarjeta.Intereses = interes; ventaPagoTarjeta.Importe = Importe + interes; ventaPagoTarjeta.TipoPago = FormaPago.Tarjeta; ventaPagoTarjeta.TarjetaId = TarjetaId; ventaPagoTarjeta.CuponNumero = CuponNumero; ventaPagoTarjeta.Descripcion = CbxTarjeta.Text + " - " + CuponNumero; ventaPago = ventaPagoTarjeta; } if (TabsFormaPago.SelectedPage == this.TabCheque) { var ventaPagoCheque = new VentaPagoCheque(); ventaPagoCheque.Importe = Importe; ventaPagoCheque.TipoPago = FormaPago.Cheque; ventaPagoCheque.FechaCobro = this.ChequeFechaCobro; ventaPagoCheque.BancoId = this.ChequeBancoId; ventaPagoCheque.Numero = ChequeNumero; ventaPagoCheque.Descripcion = CbxChequeBanco.Text + " - " + ChequeNumero; ventaPago = ventaPagoCheque; } if (TabsFormaPago.SelectedPage == this.TabDeposito) { VentaPagoDeposito ventaPagoDeposito = new VentaPagoDeposito(); ventaPagoDeposito.Importe = Importe; ventaPagoDeposito.TipoPago = FormaPago.Deposito; ventaPagoDeposito.Fecha = DepositoFecha; ventaPagoDeposito.CuentaId = DepositoCuentaId; ventaPagoDeposito.Numero = DepositoNumero; ventaPagoDeposito.Descripcion = CbxDepositoBanco.Text + " - " + DepositoNumero; ventaPago = ventaPagoDeposito; } if (TabsFormaPago.SelectedPage == this.TabTransferencia) { VentaPagoTransferencia ventaPagoTransferencia = new VentaPagoTransferencia(); ventaPagoTransferencia.Importe = Importe; ventaPagoTransferencia.TipoPago = FormaPago.Transferencia; ventaPagoTransferencia.Fecha = TransferenciaFecha; ventaPagoTransferencia.CuentaId = CuentaTransferencia; ventaPagoTransferencia.Numero = NumeroTransferencia; ventaPagoTransferencia.Descripcion = CbxCuentasTransferencia.Texto; ventaPago = ventaPagoTransferencia; } return(ventaPago); }
private void EliminarPago(VentaPago ventaPago) { Pagos.Remove(ventaPago); RefrescarPagos(); }
public static ResAcc<int> GenerarPago(int iVentaID, decimal mImporte, int iFormaDePagoID, int iBancoID, string sFolio, string sCuenta) { // Se generan los datos del pago var oPago = new VentaPago() { VentaID = iVentaID, Fecha = DateTime.Now }; var oPagoDetalle = new List<VentaPagoDetalle>(); oPagoDetalle.Add(new VentaPagoDetalle() { TipoFormaPagoID = iFormaDePagoID, Importe = mImporte }); if (iBancoID > 0) { oPagoDetalle[0].BancoID = iBancoID; oPagoDetalle[0].Folio = sFolio; oPagoDetalle[0].Cuenta = sCuenta; } // Se guarda el pago Guardar.VentaPago(oPago, oPagoDetalle); return new ResAcc<int>(true, oPago.VentaPagoID); }
private VentaPago ObtenerPago() { VentaPago ventaPago = new VentaPago(); if (TabsFormaPago.SelectedPage == this.TabEfectivo) { ventaPago.Importe = this.Importe; if (ChkCajaAnterior.Checked) { ventaPago.TipoPago = FormaPago.EfectivoCajaAnterior; ventaPago.Descripcion = "Caja Anterior"; } else ventaPago.TipoPago = FormaPago.Efectivo; } if (TabsFormaPago.SelectedPage == this.TabTarjeta) { var ventaPagoTarjeta = new VentaPagoTarjeta(); ventaPagoTarjeta.Interes = Interes; //ventaPagoTarjeta.Importe = Importe; var interes = Importe * Interes/100; ventaPagoTarjeta.Intereses = interes; ventaPagoTarjeta.Importe = Importe + interes; ventaPagoTarjeta.TipoPago = FormaPago.Tarjeta; ventaPagoTarjeta.TarjetaId = TarjetaId; ventaPagoTarjeta.CuponNumero = CuponNumero; ventaPagoTarjeta.Descripcion = CbxTarjeta.Text + " - " + CuponNumero; ventaPago = ventaPagoTarjeta; } if (TabsFormaPago.SelectedPage == this.TabCheque) { var ventaPagoCheque = new VentaPagoCheque(); ventaPagoCheque.Importe = Importe; ventaPagoCheque.TipoPago = FormaPago.Cheque; ventaPagoCheque.FechaCobro = this.ChequeFechaCobro; ventaPagoCheque.BancoId = this.ChequeBancoId; ventaPagoCheque.Numero = ChequeNumero; ventaPagoCheque.Descripcion = CbxChequeBanco.Text + " - " + ChequeNumero; ventaPago = ventaPagoCheque; } if (TabsFormaPago.SelectedPage == this.TabDeposito) { VentaPagoDeposito ventaPagoDeposito = new VentaPagoDeposito(); ventaPagoDeposito.Importe = Importe; ventaPagoDeposito.TipoPago = FormaPago.Deposito; ventaPagoDeposito.Fecha = DepositoFecha; ventaPagoDeposito.CuentaId = DepositoCuentaId; ventaPagoDeposito.Numero = DepositoNumero; ventaPagoDeposito.Descripcion = CbxDepositoBanco.Text + " - " + DepositoNumero; ventaPago = ventaPagoDeposito; } if (TabsFormaPago.SelectedPage == this.TabTransferencia) { VentaPagoTransferencia ventaPagoTransferencia = new VentaPagoTransferencia(); ventaPagoTransferencia.Importe = Importe; ventaPagoTransferencia.TipoPago = FormaPago.Transferencia; ventaPagoTransferencia.Fecha = TransferenciaFecha; ventaPagoTransferencia.CuentaId = CuentaTransferencia; ventaPagoTransferencia.Numero = NumeroTransferencia; ventaPagoTransferencia.Descripcion = CbxCuentasTransferencia.Texto; ventaPago = ventaPagoTransferencia; } return ventaPago; }
private void ProcesarPagoDeposito(VentaDataBase ventaData, VentaPago pago, CajaMovimiento cajaMovimiento, Venta venta, Caja caja) { var pagoDeposito = pago as VentaPagoDeposito; if (cajaMovimiento.Deposito == null) cajaMovimiento.Deposito = 0; //Guardar Cuentas Movimientos cajaMovimiento.Deposito += pago.Importe; CuentasMovimiento cuentasMovimiento = new CuentasMovimiento(); cuentasMovimiento.CuentaId = pagoDeposito.CuentaId ?? 0; cuentasMovimiento.TipoMovimientoId = 2; //Deposito cuentasMovimiento.FechaMovimiento = pagoDeposito.Fecha; cuentasMovimiento.EstadoMovimientoCuentaId = 0; cuentasMovimiento.TipoComprobanteId = ventaData.TipoComprobanteSeleccionado; cuentasMovimiento.ComprobanteId = venta.Id; cuentasMovimiento.MonedaId = 0; cuentasMovimiento.CondicionVentaId = ventaData.CondicionVentaSeleccionada; cuentasMovimiento.NroMovimiento = pagoDeposito.Numero; cuentasMovimiento.Descripcion = "DEPOSITO NRO " + pagoDeposito.Numero.ToString(); cuentasMovimiento.FechaCobro = _clock.Now; cuentasMovimiento.Debito = 0; cuentasMovimiento.Credito = pago.Importe; cuentasMovimiento.TipoCarga = 2; cuentasMovimiento.CajaId = caja.Id; cuentasMovimiento.FechaAlta = _clock.Now; cuentasMovimiento.OperadorAltaId = ventaData.OperadorId; cuentasMovimiento.SucursalAltaId = ventaData.SucursalId; Uow.CuentasMovimientos.Agregar(cuentasMovimiento); }
public void GenerarPagoAuto(decimal? monto) { if (Pagos.Count==0) { VentaPago pago = new VentaPago(); pago.TipoPago = FormaPago.Efectivo; pago.Importe = monto; Pagos.Add(pago); } else { foreach (var pago in Pagos) { switch (pago.TipoPago) { case FormaPago.Efectivo: pago.Importe= monto; break; } } } GrillaPagos.DataSource = Pagos.ToList(); RefrescarPagos(); }
private void ProcesarPagoCheque(VentaDataBase ventaData, VentaPago pago, CajaMovimiento cajaMovimiento) { var pagoCheque = pago as VentaPagoCheque; if (cajaMovimiento.Cheque == null) cajaMovimiento.Cheque = 0; cajaMovimiento.Cheque += pago.Importe; ChequesTercero chequesTercero = new ChequesTercero(); chequesTercero.Id = Guid.NewGuid(); chequesTercero.CajaMovimientoId = cajaMovimiento.Id; chequesTercero.BancoId = pagoCheque.BancoId ?? 0; chequesTercero.NroCheque = pagoCheque.Numero; chequesTercero.Fecha = _clock.Now; chequesTercero.FechaCobro = _clock.Now; chequesTercero.Importe = (float)pago.Importe; chequesTercero.FechaAlta = _clock.Now; chequesTercero.EstadoChequeId = 0; chequesTercero.SucursalAltaId = ventaData.SucursalId; chequesTercero.OperadorAltaId = ventaData.OperadorId; Uow.ChequesTerceros.Agregar(chequesTercero); }
private void OnPagoAgregado(VentaPago pago) { if (PagoAgregado != null) { PagoAgregado(this, pago); } }
public static ResAcc VentaPago(VentaPago oPago, List <VentaPagoDetalle> Detalle) { // Se generan datos predeterminados o globales, en caso de que apliquen oPago.Fecha = (oPago.Fecha != DateTime.MinValue ? oPago.Fecha : DateTime.Now); oPago.SucursalID = (oPago.SucursalID > 0 ? oPago.SucursalID : Theos.SucursalID); // Se guarda el pago Datos.Guardar <VentaPago>(oPago); // Se guarda el detalle var oVentaV = Datos.GetEntity <VentasView>(q => q.VentaID == oPago.VentaID); foreach (var PartePago in Detalle) { PartePago.VentaPagoID = oPago.VentaPagoID; Datos.Guardar <VentaPagoDetalle>(PartePago); // Se afectan las notas de crédito, si hay alguna if (PartePago.TipoFormaPagoID == Cat.FormasDePago.Vale && PartePago.Importe > 0) { int iNotaID = PartePago.NotaDeCreditoID.Valor(); var oNota = Datos.GetEntity <NotaDeCredito>(q => q.NotaDeCreditoID == iNotaID && q.Estatus); if (oNota != null) { // Se verifica si se usó el importe total o sólo una parte if (PartePago.Importe < oNota.Importe) { // Se crea una nueva nota, con el importe restante // 25/11/2015 - Se busca el vale original para usarlo como origen de todas las notas derivadas, en vez de el OrigenVentaID que se mandaba antes int iOrigenValeID = (oNota.OrigenID == Cat.OrigenesNotaDeCredito.ImporteRestante ? oNota.RelacionID.Valor() : oNota.NotaDeCreditoID); VentasProc.GenerarNotaDeCredito(oNota.ClienteID, (oNota.Importe - PartePago.Importe), "", Cat.OrigenesNotaDeCredito.ImporteRestante , iOrigenValeID); // oNota.Importe = PartePago.Importe; } // oNota.Valida = false; oNota.FechaDeUso = DateTime.Now; oNota.UsoVentaID = oPago.VentaID; Datos.Guardar <NotaDeCredito>(oNota); } } // Si es un pago bancario, se genera el movimiento correspondiente if (PartePago.TipoFormaPagoID == Cat.FormasDePago.Tarjeta || PartePago.TipoFormaPagoID == Cat.FormasDePago.TarjetaDeDebito || PartePago.TipoFormaPagoID == Cat.FormasDePago.Transferencia || PartePago.TipoFormaPagoID == Cat.FormasDePago.Cheque) { var oBanco = Datos.GetEntity <Banco>(c => c.BancoID == PartePago.BancoID && c.Estatus); var oMovBanc = new BancoCuentaMovimiento() { // BancoCuentaID = (PartePago.TipoFormaPagoID == Cat.FormasDePago.Tarjeta ? (int?)Cat.CuentasBancarias.Banamex : null), EsIngreso = true, Fecha = oPago.Fecha, FechaAsignado = ((PartePago.TipoFormaPagoID == Cat.FormasDePago.Tarjeta || PartePago.TipoFormaPagoID == Cat.FormasDePago.TarjetaDeDebito) ? (DateTime?)oPago.Fecha : null), SucursalID = oPago.SucursalID, Importe = PartePago.Importe, Concepto = oVentaV.Cliente, Referencia = oVentaV.Folio, TipoFormaPagoID = PartePago.TipoFormaPagoID, DatosDePago = string.Format("{0}-{1}-{2}", oBanco.NombreBanco, PartePago.Folio, PartePago.Cuenta), RelacionTabla = Cat.Tablas.VentaPagoDetalle, RelacionID = PartePago.VentaPagoDetalleID, }; ContaProc.RegistrarMovimientoBancario(oMovBanc); } } // Se verifica el estatus de la venta, por si debe cambiar según el pago if (oVentaV.VentaEstatusID == Cat.VentasEstatus.Cobrada) { // Se obtiene el total de los pagos decimal mPagado = Datos.GetListOf <VentasPagosView>(q => q.VentaID == oVentaV.VentaID).Sum(q => q.Importe); if (mPagado >= oVentaV.Total) { var oVenta = Datos.GetEntity <Venta>(q => q.Estatus && q.VentaID == oPago.VentaID); oVenta.VentaEstatusID = Cat.VentasEstatus.Completada; // Se guarda con el nuevo estatus Datos.Guardar <Venta>(oVenta); } } return(new ResAcc(true)); }