예제 #1
0
                public override void Crear()
                {
                        base.Crear();
                        
                        this.Fecha = this.Connection.ServerDateTime;

                        Facturas = new ColeccionComprobanteImporte();
                        
                        if (this.Tipo == null)
                                this.Tipo = Lbl.Comprobantes.Tipo.TodosPorLetra["RC"];
                        
                        this.PV = Lfx.Workspace.Master.CurrentConfig.ReadGlobalSetting<int>("Sistema.Documentos." + this.Tipo.Nomenclatura + ".PV", Lfx.Workspace.Master.CurrentConfig.Empresa.SucursalActual);
                        this.Vendedor = new Personas.Persona(this.Connection, Lbl.Sys.Config.Actual.UsuarioConectado.Id);
                }
예제 #2
0
        /// <summary>
        /// Cancela el importe impago de los comprobantes en listaComprob y si sobra continúa cancelando en los comprobantes
        /// más viejos que tengan saldo pendiente. Si continúa sobrando, deja el saldo a favor en cta. cte.
        /// </summary>
        /// <param name="cliente">El cliente.</param>
        /// <param name="listaComprob">La lista de comprobantes en los cuales cancelar saldo impago.</param>
        /// <param name="comprob">El comprobante que está cancelando saldos. Puede ser un recibo o una NC.</param>
        /// <param name="importe">El importe total a cancelar. Puede ser negativo para hacerlo en contra del cliente.</param>
        public static decimal CancelarImpagos(Lbl.Personas.Persona cliente, ColeccionComprobanteImporte listaComprob, Lbl.Comprobantes.Comprobante comprob, decimal importe)
        {
            decimal TotalACancelar = Math.Abs(importe);

            if (listaComprob != null && listaComprob.Count > 0)
            {
                // Si hay una lista de facturas, las cancelo
                foreach (ComprobanteImporte CompImp in listaComprob)
                {
                    // Calculo cuanto queda por cancelar en esta factura
                    decimal ImportePendiente = CompImp.Comprobante.Total - CompImp.Comprobante.ImporteCancelado;

                    // Intento cancelar todo
                    decimal Cancelando = ImportePendiente;

                    // Si se acabó la plata, hago un pago parcial
                    if (Cancelando > TotalACancelar)
                    {
                        Cancelando = TotalACancelar;
                    }

                    // Si alcanzo a cancelar algo, lo asiento
                    if (Cancelando > 0)
                    {
                        CompImp.Comprobante.CancelarImporte(Cancelando, comprob);
                    }

                    CompImp.Importe = Cancelando;

                    TotalACancelar -= Cancelando;
                    if (TotalACancelar <= 0)
                    {
                        break;
                    }
                }
            }

            if (TotalACancelar > 0)
            {
                // Si queda más saldo, sigo buscando facturas a cancelar
                qGen.Select SelFacConSaldo = new qGen.Select("comprob");
                SelFacConSaldo.WhereClause = new qGen.Where();
                SelFacConSaldo.WhereClause.AddWithValue("impresa", qGen.ComparisonOperators.NotEqual, 0);
                SelFacConSaldo.WhereClause.AddWithValue("anulada", 0);
                SelFacConSaldo.WhereClause.AddWithValue("numero", qGen.ComparisonOperators.GreaterThan, 0);
                SelFacConSaldo.WhereClause.AddWithValue("id_formapago", qGen.ComparisonOperators.In, new int[] { 1, 3, 99 });
                SelFacConSaldo.WhereClause.AddWithValue("cancelado", qGen.ComparisonOperators.LessThan, new qGen.SqlExpression("total"));
                SelFacConSaldo.WhereClause.AddWithValue("id_cliente", cliente.Id);
                SelFacConSaldo.WhereClause.AddWithValue("tipo_fac", qGen.ComparisonOperators.In, new string[] { "FA", "FB", "FC", "FE", "FM", "NDA", "NDB", "NDC", "NDE", "NDM" });
                if (importe > 0)
                {
                    // Cancelo facturas y ND regulares
                    SelFacConSaldo.WhereClause.AddWithValue("compra", 0);
                }
                else
                {
                    // Cancelo facturas y de compra
                    SelFacConSaldo.WhereClause.AddWithValue("compra", qGen.ComparisonOperators.NotEqual, 0);
                }
                SelFacConSaldo.Order = "id_comprob";
                using (System.Data.DataTable FacturasConSaldo = cliente.Connection.Select(SelFacConSaldo)) {
                    foreach (System.Data.DataRow Factura in FacturasConSaldo.Rows)
                    {
                        Lbl.Comprobantes.ComprobanteConArticulos Fact = new ComprobanteConArticulos(cliente.Connection, (Lfx.Data.Row)Factura);

                        decimal SaldoFactura   = Fact.ImporteImpago;
                        decimal ImporteASaldar = SaldoFactura;

                        if (ImporteASaldar > TotalACancelar)
                        {
                            ImporteASaldar = TotalACancelar;
                        }

                        listaComprob.AddWithValue(Fact, ImporteASaldar);
                        Fact.CancelarImporte(ImporteASaldar, comprob);

                        TotalACancelar -= ImporteASaldar;

                        if (TotalACancelar <= 0)
                        {
                            break;
                        }
                    }
                }
            }

            /* if (TotalACancelar > 0) {
             *      Lbl.Cajas.Concepto Conc;
             *      if (comprob is Recibo)
             *              Conc = ((Recibo)comprob).Concepto;
             *      else
             *              Conc = Lbl.Cajas.Concepto.IngresosPorFacturacion;
             *      cliente.CuentaCorriente.Movimiento(true, Conc, "Saldo s/" + comprob.ToString(), TotalACancelar * DireccionCtaCte, comprob.Obs, comprob as Lbl.Comprobantes.ComprobanteConArticulos, comprob as Lbl.Comprobantes.Recibo, null);
             *      cliente.CuentaCorriente.CancelarComprobantesConSaldo(TotalACancelar * -DireccionCtaCte, true);
             *      TotalACancelar = 0;
             * } */

            // Devuelvo el sobrante
            return(TotalACancelar);
        }