Beispiel #1
0
        private void BotonAnular_Click(object sender, System.EventArgs e)
        {
            if (Listado.CheckedItems.Count == 0)
            {
                Lui.Forms.MessageBox.Show("Debe marcar uno o más cupones para anular.", "Acreditar");
                return;
            }

            int CantidadCupones = 0;

            foreach (System.Windows.Forms.ListViewItem itm in Listado.Items)
            {
                if (itm.Checked)
                {
                    CantidadCupones++;
                    if (itm.SubItems["tarjetas_cupones.estado"].Text != "Sin presentar" && itm.SubItems["estado"].Text != "Presentado")
                    {
                        Lui.Forms.MessageBox.Show("Sólo se pueden anular cupones que no han sido acreditados o rechazados.", "Anular de cupones");
                        return;
                    }
                }
            }

            if (CantidadCupones == 0)
            {
                Lui.Forms.MessageBox.Show("Debe seleccionar uno o más cupones para anular.", "Anular de cupones");
                return;
            }


            using (Lui.Forms.YesNoDialog Pregunta = new Lui.Forms.YesNoDialog("¿Desea eliminar de manera permanente los cupones seleccionados?", "Anular cupones")) {
                Pregunta.DialogButtons = Lui.Forms.DialogButtons.YesNo;
                if (Pregunta.ShowDialog() == DialogResult.OK)
                {
                    IDbTransaction Trans = Connection.BeginTransaction(IsolationLevel.Serializable);
                    Lfx.Types.OperationProgress Progreso = new Lfx.Types.OperationProgress("Anulando cupones", "Se van a eleiminar los cupones seleccionados");
                    Progreso.Max = CantidadCupones;
                    Progreso.Begin();
                    foreach (System.Windows.Forms.ListViewItem itm in Listado.Items)
                    {
                        if (itm.Checked)
                        {
                            Progreso.Advance(1);
                            Lbl.Pagos.Cupon Cupon = new Lbl.Pagos.Cupon(this.Connection, Lfx.Types.Parsing.ParseInt(itm.Text));
                            if (Cupon.Estado == 0 || Cupon.Estado == 10)
                            {
                                Cupon.Anular();
                            }
                        }
                    }
                    Trans.Commit();
                    Progreso.End();
                    this.RefreshList();
                }
            }
        }
                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 #3
0
                private void BotonAnular_Click(object sender, System.EventArgs e)
                {
                        if (Listado.CheckedItems.Count == 0) {
                                Lui.Forms.MessageBox.Show("Debe marcar uno o más cupones para anular.", "Acreditar");
                                return;
                        }

                        int CantidadCupones = 0;
                        foreach (System.Windows.Forms.ListViewItem itm in Listado.Items) {
                                if (itm.Checked) {
                                        CantidadCupones++;
                                        if (itm.SubItems["tarjetas_cupones.estado"].Text != "Sin presentar" && itm.SubItems["estado"].Text != "Presentado") {
                                                Lui.Forms.MessageBox.Show("Sólo se pueden anular cupones que no han sido acreditados o rechazados.", "Anular de cupones");
                                                return;
                                        }
                                }
                        }

                        if (CantidadCupones == 0) {
                                Lui.Forms.MessageBox.Show("Debe seleccionar uno o más cupones para anular.", "Anular de cupones");
                                return;
                        }


                        using (Lui.Forms.YesNoDialog Pregunta = new Lui.Forms.YesNoDialog("¿Desea eliminar de manera permanente los cupones seleccionados?", "Anular cupones")) {
                                Pregunta.DialogButtons = Lui.Forms.DialogButtons.YesNo;
                                if (Pregunta.ShowDialog() == DialogResult.OK) {
                                        Lfx.Types.OperationProgress Progreso = new Lfx.Types.OperationProgress("Anulando cupones", "Se van a eleiminar los cupones seleccionados");
                                        Progreso.Max = CantidadCupones;
                                        Progreso.Begin();
                                        foreach (System.Windows.Forms.ListViewItem itm in Listado.Items) {
                                                if (itm.Checked) {
                                                        Progreso.Advance(1);
                                                        Lbl.Pagos.Cupon Cupon = new Lbl.Pagos.Cupon(this.Connection, Lfx.Types.Parsing.ParseInt(itm.Text));
                                                        if (Cupon.Estado == 0 || Cupon.Estado == 10)
                                                                Cupon.Anular();
                                                }
                                        }
                                        Progreso.End();
                                        this.RefreshList();
                                }
                        }
                }