Beispiel #1
0
        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());
        }