private Lfx.Types.OperationResult EditarPago() { Lbl.Comprobantes.ComprobanteConArticulos Factura = this.Elemento as Lbl.Comprobantes.ComprobanteConArticulos; if (Factura.ImporteCancelado >= Factura.Total) { return(new Lfx.Types.FailureOperationResult("Este comprobante ya fue cancelado en su totalidad.")); } if (Factura.FormaDePago.Tipo == Lbl.Pagos.TiposFormasDePago.Efectivo) { using (IDbTransaction Trans = Factura.Connection.BeginTransaction()) { Factura.AsentarPago(false); Factura.MoverExistencias(false); Trans.Commit(); } this.PuedeEditarPago = false; } else if (Factura.FormaDePago.Tipo == Lbl.Pagos.TiposFormasDePago.CuentaCorriente) { CrearReciboParaEstaFactura(); } else { using (Comprobantes.Recibos.EditarCobro FormularioEditarPago = new Comprobantes.Recibos.EditarCobro()) { FormularioEditarPago.Cobro.FromCobro(new Lbl.Comprobantes.Cobro(this.Connection, Factura.FormaDePago)); FormularioEditarPago.Cobro.FormaDePagoEditable = true; FormularioEditarPago.Cobro.Importe = Factura.Total; FormularioEditarPago.Cobro.ImporteVisible = true; FormularioEditarPago.Cobro.ImporteEditable = false; if (FormularioEditarPago.ShowDialog() == DialogResult.OK) { Lbl.Comprobantes.Cobro MiCobro = FormularioEditarPago.Cobro.ToCobro(Factura.Connection); if (MiCobro.FormaDePago.Id != Factura.FormaDePago.Id) { // Tengo que actualizar la forma de pago using (IDbTransaction Trans = Factura.Connection.BeginTransaction()) { Factura.FormaDePago = MiCobro.FormaDePago; EntradaFormaPago.Elemento = MiCobro; Factura.Connection.FieldInt("UPDATE comprob SET id_formapago=" + MiCobro.FormaDePago.Id.ToString() + " WHERE id_comprob=" + Factura.Id.ToString()); if (MiCobro.FormaDePago.Tipo == Lbl.Pagos.TiposFormasDePago.CuentaCorriente) { // Si la nueva forma de pago es cta. cte., asiento el saldo // Y uso saldo a favor, si lo hay decimal Saldo = Factura.Cliente.CuentaCorriente.ObtenerSaldo(true); Factura.Cliente.CuentaCorriente.AsentarMovimiento(true, Lbl.Cajas.Concepto.IngresosPorFacturacion, "Saldo a Cta. Cte. s/" + Factura.ToString(), Factura.ImporteImpago, null, Factura, null, null); if (Saldo < 0) { Saldo = Math.Abs(Saldo); if (Saldo > Factura.Total) { Factura.CancelarImporte(Factura.Total, null); } else { Factura.CancelarImporte(Saldo, null); } } } Trans.Commit(); } } switch (Factura.FormaDePago.Tipo) { case Lbl.Pagos.TiposFormasDePago.Efectivo: using (IDbTransaction TransEfe = Factura.Connection.BeginTransaction()) { Lbl.Cajas.Caja CajaDiaria = new Lbl.Cajas.Caja(Factura.Connection, Lfx.Workspace.Master.CurrentConfig.Empresa.CajaDiaria); CajaDiaria.Movimiento(true, Lbl.Cajas.Concepto.IngresosPorFacturacion, Factura.ToString(), Factura.Cliente, Factura.ImporteImpago, Factura.Obs, Factura, null, null); Factura.CancelarImporte(Factura.Total, null); TransEfe.Commit(); } break; case Lbl.Pagos.TiposFormasDePago.CuentaCorriente: CrearReciboParaEstaFactura(); break; case Lbl.Pagos.TiposFormasDePago.ChequeTerceros: using (IDbTransaction TransCheTer = Factura.Connection.BeginTransaction()) { Lbl.Bancos.Cheque Cheque = MiCobro.Cheque; Cheque.Concepto = Lbl.Cajas.Concepto.IngresosPorFacturacion; Cheque.ConceptoTexto = "Cobro s/" + this.Elemento.ToString(); Cheque.Factura = Factura; Cheque.Guardar(); Factura.CancelarImporte(Factura.Total, null); TransCheTer.Commit(); } PuedeEditarPago = false; break; case Lbl.Pagos.TiposFormasDePago.Tarjeta: using (IDbTransaction TransTarj = Factura.Connection.BeginTransaction()) { Lbl.Pagos.Cupon CuponCredito = MiCobro.Cupon; CuponCredito.Concepto = Lbl.Cajas.Concepto.IngresosPorFacturacion; CuponCredito.ConceptoTexto = "Cobro s/" + Factura.ToString(); if (EntradaVendedor.ValueInt > 0) { CuponCredito.Vendedor = new Lbl.Personas.Persona(Factura.Connection, EntradaVendedor.ValueInt); } CuponCredito.Factura = Factura; CuponCredito.Guardar(); Factura.CancelarImporte(Factura.Total, null); TransTarj.Commit(); } PuedeEditarPago = false; break; case Lbl.Pagos.TiposFormasDePago.Caja: using (IDbTransaction TransCaja = Factura.Connection.BeginTransaction()) { Lbl.Cajas.Caja CajaDeposito = MiCobro.CajaDestino; CajaDeposito.Movimiento(true, Lbl.Cajas.Concepto.IngresosPorFacturacion, "Cobro s/" + Factura.ToString(), Factura.Cliente, MiCobro.Importe, MiCobro.Obs, Factura, null, null); Factura.CancelarImporte(Factura.Total, null); TransCaja.Commit(); } PuedeEditarPago = false; break; default: throw new NotImplementedException("No se reconoce la forma de pago " + Factura.FormaDePago.Tipo.ToString()); } } else { return(new Lfx.Types.SuccessOperationResult()); } } this.PuedeEditarPago = false; } return(new Lfx.Types.SuccessOperationResult()); }
private void BotonAcreditar_Click(object sender, System.EventArgs e) { if (Listado.CheckedItems.Count == 0) { Lui.Forms.MessageBox.Show("Debe marcar uno o más cupones para acreditar.", "Acreditar"); return; } using (Lfc.Tarjetas.Cupones.Acreditar FormularioAcreditacion = new Lfc.Tarjetas.Cupones.Acreditar()) { Lfx.Types.OperationProgress Progreso = new Lfx.Types.OperationProgress("Acreditando cupones", "Se están marcando los cupones seleccionados como 'Acreditado'."); Progreso.Modal = false; decimal Total = 0; decimal TotalAcreditar = 0; int iCantidad = 0; System.Text.StringBuilder Cupones = new System.Text.StringBuilder(); decimal ComisionTarjeta = 0; decimal ComisionPlan = 0; decimal GestionDeCobro = 0; Progreso.Max = Listado.Items.Count + 2; Progreso.Begin(); Progreso.ChangeStatus("Analizando"); Lbl.Pagos.FormaDePago Tarjeta = null; foreach (System.Windows.Forms.ListViewItem itm in Listado.Items) { if (itm.Checked) { iCantidad++; Lbl.Pagos.Cupon Cupon = new Lbl.Pagos.Cupon(Connection, Lfx.Types.Parsing.ParseInt(itm.Text)); Total += Cupon.Importe; if (Cupones.Length > 0) { Cupones.Append("," + Cupon.Numero); } else { Cupones.Append(Cupon.Numero); } if (Cupon.FormaDePago != null) { if (Tarjeta == null) { Tarjeta = Cupon.FormaDePago; } else if (Tarjeta.Id != Cupon.FormaDePago.Id) { //Mezcla de tarjetas Progreso.End(); Lui.Forms.MessageBox.Show("No todos los cupones seleccionados pertenecen a la misma forma de pago.", "Error"); return; } ComisionTarjeta += Cupon.Importe * (Tarjeta.Retencion / 100); if (Cupon.Plan != null) { ComisionPlan += Cupon.Importe * (Cupon.Plan.Comision / 100); } } } Progreso.ChangeStatus(itm.Index); } FormularioAcreditacion.IgnorarCambios = true; FormularioAcreditacion.EntradaCuponesCantidad.Text = iCantidad.ToString(); FormularioAcreditacion.EntradaCuponesSubTotal.Text = Lfx.Types.Formatting.FormatCurrency(Total, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales); FormularioAcreditacion.EntradaComisionTarjeta.Text = Lfx.Types.Formatting.FormatCurrency(ComisionTarjeta, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales); FormularioAcreditacion.EntradaComisionPlan.Text = Lfx.Types.Formatting.FormatCurrency(ComisionPlan, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales); FormularioAcreditacion.EntradaComisionUsuario.Text = "0"; FormularioAcreditacion.EntradaTotal.Text = Lfx.Types.Formatting.FormatCurrency(Total - ComisionTarjeta - ComisionPlan, Lfx.Workspace.Master.CurrentConfig.Moneda.Decimales); FormularioAcreditacion.IgnorarCambios = false; bool Aceptar = false; Lfc.Comprobantes.Recibos.EditarCobro FormularioPago = new Lfc.Comprobantes.Recibos.EditarCobro(); do { if (FormularioAcreditacion.ShowDialog() == DialogResult.OK) { TotalAcreditar = Lfx.Types.Parsing.ParseCurrency(FormularioAcreditacion.EntradaTotal.Text); GestionDeCobro = Total - TotalAcreditar; FormularioPago.Cobro.FromCobro(new Lbl.Comprobantes.Cobro(this.Connection, ((Lbl.Pagos.TiposFormasDePago)(Lfx.Types.Parsing.ParseInt(FormularioAcreditacion.EntradaFormaPago.TextKey))))); FormularioPago.Cobro.FormaDePagoEditable = false; FormularioPago.Cobro.Importe = TotalAcreditar; FormularioPago.Cobro.ImporteEditable = false; if (Tarjeta != null && Tarjeta.Caja != null) { FormularioPago.Cobro.EntradaCaja.ValueInt = Tarjeta.Caja.Id; } FormularioPago.Cobro.Obs = "Cupones Nº " + Cupones.ToString(); FormularioPago.Cobro.ObsEditable = false; if (FormularioPago.ShowDialog() == DialogResult.OK) { Aceptar = true; break; } } else { Aceptar = false; break; } }while (true); if (Aceptar) { IDbTransaction Trans = Connection.BeginTransaction(IsolationLevel.Serializable); Progreso.ChangeStatus("Asentando el movimiento"); Progreso.Max = Listado.Items.Count + 2; Progreso.Begin(); // Marcar los cupones como acreditados foreach (System.Windows.Forms.ListViewItem itm in Listado.Items) { if (itm.Checked) { Lbl.Pagos.Cupon Cupon = new Lbl.Pagos.Cupon(this.Connection, Lfx.Types.Parsing.ParseInt(itm.Text)); if (Cupon.Estado == 0 || Cupon.Estado == 10) { Cupon.Acreditar(); } } Progreso.ChangeStatus(itm.Index); } Progreso.ChangeStatus("Acreditando el importe"); // Acreditar el dinero Lbl.Comprobantes.Cobro MiCobro = FormularioPago.Cobro.ToCobro(Connection); switch (FormularioPago.Cobro.FormaDePago.Tipo) { case Lbl.Pagos.TiposFormasDePago.Efectivo: Lbl.Cajas.Caja CajaDiaria = new Lbl.Cajas.Caja(Connection, Lfx.Workspace.Master.CurrentConfig.Empresa.CajaDiaria); CajaDiaria.Movimiento(true, Lbl.Cajas.Concepto.IngresosPorFacturacion, "Acreditación de Cupones", null, Total, "Cupones Nº " + Cupones.ToString(), null, null, null); CajaDiaria.Movimiento(true, new Lbl.Cajas.Concepto(this.Connection, 24010), "Gestión de Cobro de Cupones", null, -GestionDeCobro, "Cupones Nº " + Cupones.ToString(), null, null, null); break; case Lbl.Pagos.TiposFormasDePago.ChequePropio: Lbl.Bancos.Cheque Cheque = MiCobro.Cheque; Cheque.Concepto = Lbl.Cajas.Concepto.IngresosPorFacturacion; Cheque.ConceptoTexto = "Acreditación Tarjetas"; Cheque.Guardar(); break; case Lbl.Pagos.TiposFormasDePago.Caja: MiCobro.CajaDestino.Movimiento(true, Lbl.Cajas.Concepto.IngresosPorFacturacion, "Acreditación de Cupones", null, Total, "Cupones Nº " + Cupones.ToString(), null, null, null); MiCobro.CajaDestino.Movimiento(true, new Lbl.Cajas.Concepto(this.Connection, 24010), "Gestión de Cobro de Cupones", null, -GestionDeCobro, "Cupones Nº " + Cupones.ToString(), null, null, null); break; } Trans.Commit(); Progreso.End(); } } this.RefreshList(); }