Beispiel #1
0
        public override void ActualizarElemento()
        {
            Lbl.Bancos.Cheque Res = this.Elemento as Lbl.Bancos.Cheque;

            Res.Emisor       = EntradaEmisor.Text;
            Res.Banco        = EntradaBanco.Elemento as Lbl.Bancos.Banco;
            Res.Numero       = Lfx.Types.Parsing.ParseInt(EntradaNumero.Text);
            Res.FechaCobro   = Lfx.Types.Parsing.ParseDate(EntradaFechaCobro.Text);
            Res.FechaEmision = Lfx.Types.Parsing.ParseDate(EntradaFechaEmision.Text);

            base.ActualizarElemento();
        }
Beispiel #2
0
        public override void ActualizarControl()
        {
            Lbl.Bancos.Cheque Res = this.Elemento as Lbl.Bancos.Cheque;

            EntradaEmisor.Text       = Res.Emisor;
            EntradaBanco.Elemento    = Res.Banco;
            EntradaNumero.Text       = Res.Numero.ToString();
            EntradaFechaCobro.Text   = Lfx.Types.Formatting.FormatDate(Res.FechaCobro);
            EntradaFechaEmision.Text = Lfx.Types.Formatting.FormatDate(Res.FechaEmision);

            base.ActualizarControl();
        }
Beispiel #3
0
        public override Lfx.Types.OperationResult Ok()
        {
            Lfx.Types.OperationResult Res = new Lfx.Types.SuccessOperationResult();
            if (EntradaCajaOrigen.ValueInt <= 0)
            {
                Res.Success  = false;
                Res.Message += "Por favor seleccione la cuenta de origen." + Environment.NewLine;
            }
            if (EntradaTotal.ValueDecimal <= 0)
            {
                Res.Success  = false;
                Res.Message += "El importe total debe ser mayor o igual a cero." + Environment.NewLine;
            }
            if (Res.Success == true)
            {
                decimal Impuestos = EntradaImpuestos.ValueDecimal;

                IDbTransaction Trans = null;
                if (this.Connection.InTransaction == false)
                {
                    Trans = this.Connection.BeginTransaction(IsolationLevel.Serializable);
                }

                string ChequesNum = null;
                System.Data.DataTable TablaCheques = Connection.Select("SELECT * FROM bancos_cheques WHERE id_cheque IN (" + ChequesIds + ")");
                Lbl.Cajas.Caja        CajaOrigen   = new Lbl.Cajas.Caja(Connection, EntradaCajaOrigen.ValueInt);
                foreach (System.Data.DataRow RowCheque in TablaCheques.Rows)
                {
                    Lbl.Bancos.Cheque Cheque = new Lbl.Bancos.Cheque(this.Connection, (Lfx.Data.Row)RowCheque);
                    Cheque.Pagar(CajaOrigen);
                }

                if (Impuestos != 0)
                {
                    CajaOrigen.Movimiento(true, new Lbl.Cajas.Concepto(this.Connection, 23030),
                                          "Impuestos de cheque(s)",
                                          null,
                                          -Impuestos,
                                          "Cheques Nº " + ChequesNum, null, null, null);
                }

                if (Trans != null)
                {
                    Trans.Commit();
                }
            }
            return(Res);
        }
Beispiel #4
0
        private Lfx.Types.OperationResult Efectivizar()
        {
            Lfc.Bancos.Cheques.Efectivizar Efectivizar = new Lfc.Bancos.Cheques.Efectivizar();

            foreach (System.Windows.Forms.ListViewItem itm in Listado.Items)
            {
                if (itm.Checked && (itm.SubItems["bancos_cheques.estado"].Text == "A cobrar" || itm.SubItems["bancos_cheques.estado"].Text == "Depositado"))
                {
                    int IdCheque         = Lfx.Types.Parsing.ParseInt(itm.Text);
                    Lbl.Bancos.Cheque Ch = new Lbl.Bancos.Cheque(this.Connection, IdCheque);
                    Efectivizar.EntradaSubTotal.ValueDecimal = Ch.Importe;
                    Efectivizar.Cheque = Ch;
                    if (Efectivizar.ShowDialog() != System.Windows.Forms.DialogResult.OK)
                    {
                        itm.Checked = false;
                        return(new Lfx.Types.CancelOperationResult());
                    }
                }
            }
            return(new Lfx.Types.SuccessOperationResult());
        }
Beispiel #5
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());
        }
Beispiel #6
0
        public override void OnLoad()
        {
            if (this.Registro != null)
            {
                this.Numero = System.Convert.ToInt32(m_Registro["numero"]);
                this.PV     = System.Convert.ToInt32(m_Registro["pv"]);

                if (m_Registro["id_concepto"] != null)
                {
                    this.Concepto = new Lbl.Cajas.Concepto(this.Connection, this.GetFieldValue <int>("id_concepto"));
                }
                else
                {
                    this.Concepto = null;
                }

                if (m_Registro["concepto"] != null)
                {
                    this.ConceptoTexto = m_Registro["concepto"].ToString();
                }
                else
                {
                    this.ConceptoTexto = string.Empty;
                }

                this.Cobros = new ColeccionDeCobros();
                this.Pagos  = new ColeccionDePagos();

                // Cargo pagos asociados al registro
                // Pagos en efectivo
                using (System.Data.DataTable TablaPagos = Connection.Select("SELECT * FROM cajas_movim WHERE id_caja=" + Lfx.Workspace.Master.CurrentConfig.Empresa.CajaDiaria.ToString() + " AND id_recibo=" + Id.ToString())) {
                    foreach (System.Data.DataRow Pago in TablaPagos.Rows)
                    {
                        decimal ImporteCaja = System.Convert.ToDecimal(Pago["importe"]);
                        if (this.DePago && ImporteCaja < 0)
                        {
                            Pago Pg = new Pago(this.Connection, Lbl.Pagos.TiposFormasDePago.Efectivo, -ImporteCaja);
                            Pg.Recibo = this;
                            Pagos.Add(Pg);
                        }
                        else if (this.DePago == false && ImporteCaja > 0)
                        {
                            Cobro Cb = new Cobro(this.Connection, Lbl.Pagos.TiposFormasDePago.Efectivo, ImporteCaja);
                            Cb.Recibo = this;
                            Cobros.Add(Cb);
                        }
                    }
                }

                // Pagos con cheque
                using (System.Data.DataTable TablaPagos = this.Connection.Select("SELECT * FROM bancos_cheques WHERE (id_recibo=" + this.Id.ToString() + " OR id_recibo_pago=" + this.Id.ToString() + ")")) {
                    foreach (System.Data.DataRow Pago in TablaPagos.Rows)
                    {
                        Bancos.Cheque Ch = new Lbl.Bancos.Cheque(Connection, (Lfx.Data.Row)Pago);
                        if (this.DePago)
                        {
                            Ch.ReciboPago = this;
                        }
                        else
                        {
                            Ch.ReciboCobro = this;
                        }
                        if (this.DePago)
                        {
                            Pagos.Add(new Pago(Ch));
                        }
                        else
                        {
                            Cobros.Add(new Cobro(Ch));
                        }
                    }
                }

                // Pagos con Tarjetas de Crédito y Débito
                using (System.Data.DataTable TablaPagos = this.Connection.Select("SELECT id_cupon FROM tarjetas_cupones WHERE id_recibo=" + Id.ToString())) {
                    foreach (System.Data.DataRow Pago in TablaPagos.Rows)
                    {
                        Pagos.Cupon Cp = new Pagos.Cupon(Connection, System.Convert.ToInt32(Pago["id_cupon"]));
                        Cobros.Add(new Cobro(Cp));
                    }
                }

                // Acreditaciones en cuenta regular (excepto caja diaria)
                using (System.Data.DataTable TablaPagos = this.Connection.Select("SELECT * FROM cajas_movim WHERE auto=1 AND id_caja<>" + Lfx.Workspace.Master.CurrentConfig.Empresa.CajaDiaria.ToString() + " AND id_caja<>" + Lfx.Workspace.Master.CurrentConfig.Empresa.CajaCheques.ToString() + " AND id_recibo=" + this.Id.ToString())) {
                    foreach (System.Data.DataRow Pago in TablaPagos.Rows)
                    {
                        if (this.DePago)
                        {
                            Pago Pg = new Pago(this.Connection, Lbl.Pagos.TiposFormasDePago.Caja, Math.Abs(System.Convert.ToDecimal(Pago["importe"])));
                            Pg.Recibo     = this;
                            Pg.CajaOrigen = new Cajas.Caja(Connection, System.Convert.ToInt32(Pago["id_caja"]));
                            Pagos.Add(Pg);
                        }
                        else
                        {
                            Cobro Cb = new Cobro(this.Connection, Lbl.Pagos.TiposFormasDePago.Caja, System.Convert.ToDecimal(Pago["importe"]));
                            Cb.Recibo      = this;
                            Cb.CajaDestino = new Cajas.Caja(Connection, System.Convert.ToInt32(Pago["id_caja"]));
                            Cobros.Add(Cb);
                        }
                    }
                }

                // Otros valores
                using (System.Data.DataTable TablaPagos = this.Connection.Select("SELECT id_valor FROM pagos_valores WHERE id_recibo=" + Id.ToString())) {
                    foreach (System.Data.DataRow Pago in TablaPagos.Rows)
                    {
                        Lbl.Pagos.Valor Vl = new Lbl.Pagos.Valor(Connection, System.Convert.ToInt32(Pago["id_valor"]));
                        Vl.Recibo = this;
                        if (this.DePago)
                        {
                            Pagos.Add(new Pago(Vl));
                        }
                        else
                        {
                            Cobros.Add(new Cobro(Vl));
                        }
                    }
                }
            }
            base.OnLoad();
        }
Beispiel #7
0
                private Lfx.Types.OperationResult Efectivizar()
                {
                        Lfc.Bancos.Cheques.Efectivizar Efectivizar = new Lfc.Bancos.Cheques.Efectivizar();

                        foreach (System.Windows.Forms.ListViewItem itm in Listado.Items) {
                                if (itm.Checked && (itm.SubItems["bancos_cheques.estado"].Text == "A cobrar" || itm.SubItems["bancos_cheques.estado"].Text == "Depositado")) {
                                        int IdCheque = Lfx.Types.Parsing.ParseInt(itm.Text);
                                        Lbl.Bancos.Cheque Ch = new Lbl.Bancos.Cheque(this.Connection, IdCheque);
                                        Efectivizar.EntradaSubTotal.ValueDecimal = Ch.Importe;
                                        Efectivizar.Cheque = Ch;
                                        if (Efectivizar.ShowDialog() != System.Windows.Forms.DialogResult.OK) {
                                                itm.Checked = false;
                                                return new Lfx.Types.CancelOperationResult();
                                        }
                                }
                        }
                        return new Lfx.Types.SuccessOperationResult();
                }
                public void AsentarPago(bool anulacion)
                {
                        if (this.FormaDePago == null)
                                return;
                        
                        decimal ImporteMovim;
                        if(anulacion)
                                // Al cancelar, desasiento el importe pagado
                                ImporteMovim = this.ImporteCancelado;
                        else
                                // Al ingresar la factura, asiento el importe impago (que normalmente es el total)
                                ImporteMovim = this.Total;

                        if (this.FormaDePago.Tipo == Pagos.TiposFormasDePago.CuentaCorriente)
                                // Si es cuenta corriente muevo siempre el total (incluso al anular)
                                ImporteMovim = this.Total;

                        if (this.Tipo.DireccionCtaCte < 0)
                                // Este tipo de comprobantes hace créditos en cuenta corriente
                                ImporteMovim = -ImporteMovim;

                        if (this.Compra) {
                                // Es comprobante de compra, invierto la dirección del movimiento
                                ImporteMovim = -ImporteMovim;
                        }

                        if (anulacion == false) {
                                // Asiento el pago (sólo efectivo y cta. cte.)
                                // El resto de los pagos los maneja el formulario desde donde se mandó a imprimir
                                switch (this.FormaDePago.Tipo) {
                                        case Lbl.Pagos.TiposFormasDePago.Efectivo:
                                                if (this.ImporteImpago > 0) {
                                                        Lbl.Cajas.Caja CajaDiaria = new Lbl.Cajas.Caja(this.Connection, Lfx.Workspace.Master.CurrentConfig.Empresa.CajaDiaria);
                                                        CajaDiaria.Movimiento(true,
                                                                Lbl.Cajas.Concepto.IngresosPorFacturacion,
                                                                this.ToString(),
                                                                this.Cliente,
                                                                ImporteMovim,
                                                                null,
                                                                this,
                                                                null,
                                                                null);
                                                        this.CancelarImporte(this.ImporteImpago, null);
                                                }
                                                break;
                                        case Lbl.Pagos.TiposFormasDePago.CuentaCorriente:
                                                this.Cliente.CuentaCorriente.Movimiento(true,
                                                        Lbl.Cajas.Concepto.IngresosPorFacturacion,
                                                        this.ToString(),
                                                        ImporteMovim,
                                                        null,
                                                        this,
                                                        null,
                                                        null);
                                                if (this.Tipo.EsNotaCredito) {
                                                        if (this.ComprobRelacionados == null || this.ComprobRelacionados.Count == 0) {
                                                                // Si no hay comprobantes asociados, pero esta nota de crédito viene de un comprobante anteior
                                                                // asocio el comprobante original a esta nota de crédito
                                                                if (this.ComprobanteOriginal != null && this.ComprobanteOriginal.Tipo.EsFacturaOTicket) {
                                                                        this.ComprobRelacionados = new ColeccionComprobanteImporte();
                                                                        this.ComprobRelacionados.AddWithValue(this.ComprobanteOriginal, 0);
                                                                }
                                                        }
                                                        Lbl.Comprobantes.Recibo.CancelarImpagos(this.Cliente, this.ComprobRelacionados, this, this.Compra ? -this.Total : this.Total);
                                                }

                                                decimal FacturaSaldo = this.ImporteImpago;
                                                if (FacturaSaldo > 0) {
                                                        decimal SaldoCtaCteAntes = -(ImporteMovim - this.Cliente.CuentaCorriente.ObtenerSaldo(true));
                                                        // Busca un saldo en cta cte para cancelar este comprobante
                                                        if ((ImporteMovim > 0 && SaldoCtaCteAntes < 0) || (ImporteMovim < 0 && SaldoCtaCteAntes > 0)) {
                                                                decimal SaldoACancelar = ImporteMovim < 0 ? SaldoCtaCteAntes : -SaldoCtaCteAntes;

                                                                if (SaldoACancelar > FacturaSaldo)
                                                                        SaldoACancelar = FacturaSaldo;

                                                                // Cancelo la factura con un saldo a favor que tenía en cta. cte.
                                                                qGen.Update ActualizarComprob = new qGen.Update("comprob");
                                                                ActualizarComprob.Fields.AddWithValue("cancelado", new qGen.SqlExpression("cancelado+" + Lfx.Types.Formatting.FormatCurrencySql(SaldoACancelar)));
                                                                ActualizarComprob.WhereClause = new qGen.Where("id_comprob", this.Id);
                                                                this.Connection.Execute(ActualizarComprob);
                                                        }
                                                }
                                                break;
                                }
                        } else {
                                // Es una anulación, invierto la dirección del movimiento
                                ImporteMovim = -ImporteMovim;

                                switch (this.FormaDePago.Tipo) {
                                        case Lbl.Pagos.TiposFormasDePago.Efectivo:
                                                // Hago un movimiento en caja diaria
                                                Lbl.Cajas.Caja Caja = new Lbl.Cajas.Caja(Connection, Lfx.Workspace.Master.CurrentConfig.Empresa.CajaDiaria);
                                                Caja.Movimiento(true, 
                                                        Lbl.Cajas.Concepto.IngresosPorFacturacion, 
                                                        "Anulación " + this.ToString(), 
                                                        this.Cliente, 
                                                        ImporteMovim, 
                                                        null, 
                                                        this, 
                                                        null, 
                                                        null);
                                                break;

                                        case Lbl.Pagos.TiposFormasDePago.ChequePropio:
                                        case Pagos.TiposFormasDePago.ChequeTerceros:
                                                Lbl.Bancos.Cheque Cheque = new Lbl.Bancos.Cheque(Connection, this);
                                                if (Cheque != null && Cheque.Existe)
                                                        Cheque.Anular();
                                                break;

                                        case Pagos.TiposFormasDePago.Caja:
                                                throw new NotImplementedException("No implementado: anular comprobante pagado con depósito en caja.");

                                        case Lbl.Pagos.TiposFormasDePago.CuentaCorriente:
                                                // Quito el saldo pagado de la cuenta corriente
                                                this.Cliente.CuentaCorriente.Movimiento(true, Lbl.Cajas.Concepto.IngresosPorFacturacion, "Anulación " + this.ToString(), ImporteMovim, null, this, null, null);
                                                if (this.Tipo.EsNotaCredito)
                                                        Lbl.Comprobantes.Recibo.DescancelarImpagos(this.Cliente, this.ComprobRelacionados, this, this.Compra ? -this.Total : this.Total);
                                                        //this.Cliente.CuentaCorriente.CancelarComprobantesConSaldo(ImporteMovimCtaCte, false);
                                                break;

                                        case Lbl.Pagos.TiposFormasDePago.Tarjeta:
                                        case Pagos.TiposFormasDePago.OtroValor:
                                                Lbl.Pagos.Cupon Cupon = new Lbl.Pagos.Cupon(Connection, this);
                                                if (Cupon != null && Cupon.Existe)
                                                        Cupon.Anular();
                                                break;
                                }
                        }
                }
Beispiel #9
0
                public override void OnLoad()
                {
                        if (this.Registro != null) {
                                this.Numero = System.Convert.ToInt32(m_Registro["numero"]);
                                this.PV = System.Convert.ToInt32(m_Registro["pv"]);

                                if (m_Registro["id_concepto"] != null)
                                        this.Concepto = new Lbl.Cajas.Concepto(this.Connection, this.GetFieldValue<int>("id_concepto"));
                                else
                                        this.Concepto = null;

                                if (m_Registro["concepto"] != null)
                                        this.ConceptoTexto = m_Registro["concepto"].ToString();
                                else
                                        this.ConceptoTexto = string.Empty;

                                this.Cobros = new ColeccionDeCobros();
                                this.Pagos = new ColeccionDePagos();

                                // Cargo pagos asociados al registro
                                // Pagos en efectivo
                                using (System.Data.DataTable TablaPagos = Connection.Select("SELECT * FROM cajas_movim WHERE id_caja=" + Lfx.Workspace.Master.CurrentConfig.Empresa.CajaDiaria.ToString() + " AND id_recibo=" + Id.ToString())) {
                                        foreach (System.Data.DataRow Pago in TablaPagos.Rows) {
                                                decimal ImporteCaja = System.Convert.ToDecimal(Pago["importe"]);
                                                if (this.DePago && ImporteCaja < 0) {
                                                        Pago Pg = new Pago(this.Connection, Lbl.Pagos.TiposFormasDePago.Efectivo, -ImporteCaja);
                                                        Pg.Recibo = this;
                                                        Pagos.Add(Pg);
                                                } else if (this.DePago == false && ImporteCaja > 0) {
                                                        Cobro Cb = new Cobro(this.Connection, Lbl.Pagos.TiposFormasDePago.Efectivo, ImporteCaja);
                                                        Cb.Recibo = this;
                                                        Cobros.Add(Cb);
                                                }
                                        }
                                }

                                // Pagos con cheque
                                using (System.Data.DataTable TablaPagos = this.Connection.Select("SELECT * FROM bancos_cheques WHERE (id_recibo=" + this.Id.ToString() + " OR id_recibo_pago=" + this.Id.ToString() + ")")) {
                                        foreach (System.Data.DataRow Pago in TablaPagos.Rows) {
                                                Bancos.Cheque Ch = new Lbl.Bancos.Cheque(Connection, (Lfx.Data.Row)Pago);
                                                if (this.DePago)
                                                        Ch.ReciboPago = this;
                                                else
                                                        Ch.ReciboCobro = this;
                                                if (this.DePago)
                                                        Pagos.Add(new Pago(Ch));
                                                else 
                                                        Cobros.Add(new Cobro(Ch));
                                        }
                                }

                                // Pagos con Tarjetas de Crédito y Débito
                                using (System.Data.DataTable TablaPagos = this.Connection.Select("SELECT id_cupon FROM tarjetas_cupones WHERE id_recibo=" + Id.ToString())) {
                                        foreach (System.Data.DataRow Pago in TablaPagos.Rows) {
                                                Pagos.Cupon Cp = new Pagos.Cupon(Connection, System.Convert.ToInt32(Pago["id_cupon"]));
                                                Cobros.Add(new Cobro(Cp));
                                        }
                                }

                                // Acreditaciones en cuenta regular (excepto caja diaria)
                                using (System.Data.DataTable TablaPagos = this.Connection.Select("SELECT * FROM cajas_movim WHERE auto=1 AND id_caja<>" + Lfx.Workspace.Master.CurrentConfig.Empresa.CajaDiaria.ToString() + " AND id_caja<>" + Lfx.Workspace.Master.CurrentConfig.Empresa.CajaCheques.ToString() + " AND id_recibo=" + this.Id.ToString())) {
                                        foreach (System.Data.DataRow Pago in TablaPagos.Rows) {
                                                if (this.DePago) {
                                                        Pago Pg = new Pago(this.Connection, Lbl.Pagos.TiposFormasDePago.Caja, Math.Abs(System.Convert.ToDecimal(Pago["importe"])));
                                                        Pg.Recibo = this;
                                                        Pg.CajaOrigen = new Cajas.Caja(Connection, System.Convert.ToInt32(Pago["id_caja"]));
                                                        Pagos.Add(Pg);
                                                } else {
                                                        Cobro Cb = new Cobro(this.Connection, Lbl.Pagos.TiposFormasDePago.Caja, System.Convert.ToDecimal(Pago["importe"]));
                                                        Cb.Recibo = this;
                                                        Cb.CajaDestino = new Cajas.Caja(Connection, System.Convert.ToInt32(Pago["id_caja"]));
                                                        Cobros.Add(Cb);
                                                }
                                        }
                                }

                                // Otros valores
                                using (System.Data.DataTable TablaPagos = this.Connection.Select("SELECT id_valor FROM pagos_valores WHERE id_recibo=" + Id.ToString())) {
                                        foreach (System.Data.DataRow Pago in TablaPagos.Rows) {
                                                Lbl.Pagos.Valor Vl = new Lbl.Pagos.Valor(Connection, System.Convert.ToInt32(Pago["id_valor"]));
                                                Vl.Recibo = this;
                                                if (this.DePago)
                                                        Pagos.Add(new Pago(Vl));
                                                else
                                                        Cobros.Add(new Cobro(Vl));
                                        }
                                }
                        }
                        base.OnLoad();
                }
Beispiel #10
0
                public override Lfx.Types.OperationResult Ok()
                {
                        Lfx.Types.OperationResult Res = new Lfx.Types.SuccessOperationResult();
                        if (EntradaCajaOrigen.ValueInt <= 0) {
                                Res.Success = false;
                                Res.Message += "Por favor seleccione la cuenta de origen." + Environment.NewLine;
                        }
                        if (EntradaTotal.ValueDecimal <= 0) {
                                Res.Success = false;
                                Res.Message += "El importe total debe ser mayor o igual a cero." + Environment.NewLine;
                        }
                        if (Res.Success == true) {
                                decimal Impuestos = EntradaImpuestos.ValueDecimal;

                                IDbTransaction Trans = null;
                                if (this.Connection.InTransaction == false) {
                                        Trans = this.Connection.BeginTransaction(IsolationLevel.Serializable);
                                }

                                string ChequesNum = null;
                                System.Data.DataTable TablaCheques = Connection.Select("SELECT * FROM bancos_cheques WHERE id_cheque IN (" + ChequesIds + ")");
                                Lbl.Cajas.Caja CajaOrigen = new Lbl.Cajas.Caja(Connection, EntradaCajaOrigen.ValueInt);
                                foreach (System.Data.DataRow RowCheque in TablaCheques.Rows) {
                                        Lbl.Bancos.Cheque Cheque = new Lbl.Bancos.Cheque(this.Connection, (Lfx.Data.Row)RowCheque);
                                        Cheque.Pagar(CajaOrigen);
                                }

                                if (Impuestos != 0)
                                        CajaOrigen.Movimiento(true, new Lbl.Cajas.Concepto(this.Connection, 23030),
                                                "Impuestos de cheque(s)",
                                                null,
                                                -Impuestos,
                                                "Cheques Nº " + ChequesNum, null, null, null);

                                if (Trans != null) {
                                        Trans.Commit();
                                }
                        }
                        return Res;
                }
Beispiel #11
0
        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();
        }