Esempio n. 1
0
        public static ExpensasEdificio getExpensasUnidad(edificio edificio, DateTime periodo, unidad unidad)
        {
            try
            {
                ExpensasEdificio expensasEdificio = new ExpensasEdificio();
                using (admEntities db = new admEntities())
                {

                    List<provedor> proveedores = db.edificio.Where(x => x.direccion == edificio.direccion).SingleOrDefault().provedor.ToList();
                    expensasEdificio.Proveedores = new List<Proveedor>();
                    foreach (var p in proveedores)
                    {
                        Proveedor prov = new Proveedor();
                        prov.cargo = p.cargo;
                        prov.nombre = p.razon_social;
                        prov.telefono = p.telefono1;
                        expensasEdificio.Proveedores.Add(prov);
                    }

                    expensasEdificio.Periodo = periodo;
                    expensasEdificio.Edificio = edificio = db.edificio.Where(x => x.direccion == edificio.direccion).SingleOrDefault();
                    List<unidad> unidades = db.unidad.Where(x => x.dir_edificio == edificio.direccion && x.id_unidad == unidad.id_unidad).ToList();
                    expensasEdificio.Sectores = (from es in db.edificios_sectores join e in db.edificio on es.dir_edificio equals e.direccion join s in db.sector on es.id_sector equals s.idsector where e.direccion == edificio.direccion select s).ToList();
                    expensasEdificio.Conceptos = db.Database.SqlQuery<Conceptos>(@"select  s.descripcion 'Sector', f.numero_factura 'NumeroFactura', p.razon_social 'Proveedor', concat(tg.descripcion, ' ', f.detalle) 'concepto', f.importe from factura f                                                     left join provedor p                            on p.razon_social = f.razon_provedor   join sector s on id_sector = s.idsector      join tipo_gasto tg  on f.id_tipogasto = tg.idtipo_gasto                    where dir_edificio = '" + edificio.direccion + "' and month(f.fecha) = " + periodo.Month + " and year(f.fecha) = " + periodo.Year).ToList();
                    expensasEdificio.TotalUnidad = new List<TotalUnidad>();
                    expensasEdificio.EstadoDeCaja = new EstadoCaja();
                    expensasEdificio.EstadoDeCaja.MovimientosDeCaja = db.Database.SqlQuery<MovimientosCaja>("select * from movimiento_caja mc where dir_edificio = '" + edificio.direccion + @"' and month(periodo)=" + periodo.Month + " and year(periodo)=" + periodo.Year).ToList();
                    int tasaRecargoVto = CatalogoTasas.getTasaVto();
                    expensasEdificio.Tasa2Vto = tasaRecargoVto;
                    DateTime fechaActual = DateTime.Parse(1 + "/" + periodo.Month + "/" + periodo.Year);
                    DateTime fechaAnterior = fechaActual.AddMonths(-1);
                    expensasEdificio.EstadoDeCaja.FechaActual = fechaActual.ToShortDateString();
                    expensasEdificio.EstadoDeCaja.FechaAnterior = fechaAnterior.ToShortDateString();
                    expensasEdificio.Deudores = CatalogoDeudores.getDeudoresFromEdificioRegenerarUnidad(edificio, periodo);

                    Double saldoCajaMesAnterior = CatalogoCajaEdificio.getSaldoCajaMes(edificio, fechaAnterior.AddMonths(1).AddDays(-1));
                    Double saldoCajaMesActual = CatalogoCajaEdificio.getSaldoCajaMes(edificio, fechaActual.AddMonths(1).AddDays(-1));

                    expensasEdificio.EstadoDeCaja.ImporteAnterior = saldoCajaMesAnterior;
                    expensasEdificio.EstadoDeCaja.ImporteActual = saldoCajaMesActual;

                    DateTime asd = DateTime.Parse("1 /" + periodo.Month + "/" + periodo.Year);

                    expensas expensaExistente = db.expensas.Where(x => x.dir_edificio == edificio.direccion && x.fecha == asd && x.id_unidad == unidad.id_unidad).SingleOrDefault();

                    foreach (unidad u in unidades)
                    {
                        unidad tempUni = new unidad();
                        if (u.titular == null)
                        {
                            tempUni.titular = new titular();
                            tempUni.titular.nombre = "<<ninguno>>";
                        }
                        else
                            tempUni.titular = u.titular;

                        TotalUnidad totalUnidad = new TotalUnidad();
                        totalUnidad.Unidad = tempUni;
                        string idUnidad = u.id_unidad;
                        tempUni.id_unidad = idUnidad;

                        totalUnidad.Exclusivos = db.recargo_exclusivo.Where(x => x.dir_edificio == u.dir_edificio && x.id_unidad == u.id_unidad && x.fecha.Month == periodo.Month && x.fecha.Year == periodo.Year && x.pagado != 1).Sum(x => (double?)x.importe) ?? 0; ;
                        totalUnidad.Legales = db.recargo_legal.Where(x => x.dir_edificio == u.dir_edificio && x.id_unidad == u.id_unidad && x.fecha.Month == periodo.Month && x.fecha.Year == periodo.Year && x.pagado != 1).Sum(x => (double?)x.importe) ?? 0; ;
                        totalUnidad.Varios = db.recargo_vario.Where(x => x.dir_edificio == u.dir_edificio && x.id_unidad == u.id_unidad && x.fecha.Month == periodo.Month && x.fecha.Year == periodo.Year && x.pagado != 1).Sum(x => (double?)x.importe) ?? 0; ;

                        totalUnidad.TotalSector = db.Database.SqlQuery<Totales>(@"DROP TEMPORARY TABLE IF EXISTS asd;                        CREATE TEMPORARY TABLE IF NOT EXISTS asd AS (                        select id_sector,porcentaje from unidades_sectores us                        where us.dir_edificio = '" + edificio.direccion + @"' and us.id_unidad = '" + u.id_unidad + @"');                        SELECT descripcion 'sector', sum(importe)'importe', porcentaje 'distribucion', (sum(importe) / 100 * porcentaje) 'corresponde' FROM factura f                        join sector s                        on s.idsector = f.id_sector                        join asd r1                        on r1.id_sector = s.idsector                        where month(f.fecha) = " + periodo.Month + @" and year(f.fecha) = " + periodo.Year + @" and f.dir_edificio = '" + edificio.direccion + @"'                        group by  descripcion                        order by r1.id_sector                        ").ToList();

                        double deuda = 0;
                        double recargo = 0;

                        foreach (CatalogoDeudores.Deudor d in expensasEdificio.Deudores)
                        {
                            if (u.id_unidad == d.Unidad)
                            {
                                deuda += d.Importe;
                                recargo += d.Recargo;
                            }
                        }
                        totalUnidad.Deuda = deuda;
                        totalUnidad.Recargo = recargo;
                        totalUnidad.NroFactura = expensaExistente.nro_factura;
                        expensasEdificio.TotalUnidad.Add(totalUnidad);

                        expensasEdificio.ImporteVto1 = (Double)expensaExistente.importeVto1;
                        expensasEdificio.ImporteVto2 = (Double)expensaExistente.importeVto2;

                        expensasEdificio.Vto1 = (DateTime)expensaExistente.fechaVto1;
                        expensasEdificio.Vto2 = (DateTime)expensaExistente.fechaVto2;
                    }

                }
                return expensasEdificio;
            }
            catch (Exception ex)
            {
                Logger.Log.write(ex.InnerException == null ? ex.Message : ex.InnerException.Message);
                throw ex;
            }
        }
Esempio n. 2
0
        public static ExpensasEdificio getExpensasEdificio(edificio edificio, DateTime periodo, DateTime vto1, DateTime vto2, ref int correlativo, admEntities db, List<expensas> allExpensasExistentes)
        {
            try
            {
                ExpensasEdificio expensasEdificio = new ExpensasEdificio();
                {

                    expensasEdificio.Periodo = periodo;
                    expensasEdificio.Edificio = edificio;//db.edificio.Where(x => x.direccion == edificio.direccion).SingleOrDefault();
                    List<unidad> unidades = CatalogoUnidades.getAllUnidades(edificio);
                    // expensasEdificio.Sectores = (from es in db.edificios_sectores join e in db.edificio on es.dir_edificio equals e.direccion join s in db.sector on es.id_sector equals s.idsector where e.direccion == edificio.direccion select s).ToList();
                    expensasEdificio.Conceptos = db.Database.SqlQuery<Conceptos>(@"select  s.descripcion 'Sector', f.numero_factura 'NumeroFactura', p.razon_social 'Proveedor', concat(tg.descripcion, ' ', f.detalle) 'concepto', f.importe from factura f                                                     left join provedor p                            on p.razon_social = f.razon_provedor   join sector s on id_sector = s.idsector      join tipo_gasto tg  on f.id_tipogasto = tg.idtipo_gasto                    where dir_edificio = '" + edificio.direccion + "' and month(f.fecha) = " + periodo.Month + " and year(f.fecha) = " + periodo.Year).ToList();
                    expensasEdificio.TotalUnidad = new List<TotalUnidad>();
                    expensasEdificio.EstadoDeCaja = new EstadoCaja();
                    expensasEdificio.EstadoDeCaja.MovimientosDeCaja = db.Database.SqlQuery<MovimientosCaja>("select * from movimiento_caja mc where dir_edificio = '" + edificio.direccion + @"' and month(periodo)=" + periodo.Month + " and year(periodo)=" + periodo.Year).ToList();

                    List<provedor> proveedores = db.edificio.Where(x => x.direccion == edificio.direccion).SingleOrDefault().provedor.ToList();
                    expensasEdificio.Proveedores = new List<Proveedor>();
                    foreach (var pr in proveedores)
                    {
                        Proveedor prov = new Proveedor();
                        prov.cargo = pr.cargo;
                        prov.nombre = pr.razon_social;
                        prov.telefono = pr.telefono1;
                        expensasEdificio.Proveedores.Add(prov);
                    }

                    DateTime fechaActual = DateTime.Parse(1 + "/" + periodo.Month + "/" + periodo.Year);
                    DateTime fechaAnterior = fechaActual.AddMonths(-1);
                    expensasEdificio.EstadoDeCaja.FechaActual = fechaActual.ToShortDateString();
                    expensasEdificio.EstadoDeCaja.FechaAnterior = fechaAnterior.ToShortDateString();
                    expensasEdificio.Deudores = CatalogoDeudores.getDeudoresFromEdificio(edificio, periodo);
                    int tasaRecargoVto = CatalogoTasas.getTasaVto();
                    expensasEdificio.Tasa2Vto = tasaRecargoVto;

                    Double saldoCajaMesAnterior = CatalogoCajaEdificio.getSaldoCajaMes(edificio, fechaAnterior.AddMonths(1).AddDays(-1));
                    Double saldoCajaMesActual = CatalogoCajaEdificio.getSaldoCajaMes(edificio, fechaActual.AddMonths(1).AddDays(-1));

                    expensasEdificio.EstadoDeCaja.ImporteAnterior = saldoCajaMesAnterior;
                    expensasEdificio.EstadoDeCaja.ImporteActual = saldoCajaMesActual;

                    DateTime asd = DateTime.Parse("1 /" + periodo.Month + "/" + periodo.Year);

                    List<expensas> expensasExistentes = allExpensasExistentes.Where(x => x.dir_edificio == edificio.direccion).ToList();

                    foreach (unidad u in unidades)
                    {
                        unidad tempUni = new unidad();
                        if (u.titular == null)
                        {
                            tempUni.titular = new titular();
                            tempUni.titular.nombre = "<<ninguno>>";
                        }
                        else
                            tempUni.titular = u.titular;

                        TotalUnidad totalUnidad = new TotalUnidad();
                        totalUnidad.Unidad = tempUni;
                        string idUnidad = u.id_unidad;
                        tempUni.id_unidad = idUnidad;

                        totalUnidad.Exclusivos = db.recargo_exclusivo.Where(x => x.dir_edificio == u.dir_edificio && x.id_unidad == u.id_unidad && x.fecha.Month == periodo.Month && x.fecha.Year == periodo.Year && x.pagado != 1).Sum(x => (double?)x.importe) ?? 0; ;
                        totalUnidad.Legales = db.recargo_legal.Where(x => x.dir_edificio == u.dir_edificio && x.id_unidad == u.id_unidad && x.fecha.Month == periodo.Month && x.fecha.Year == periodo.Year && x.pagado != 1).Sum(x => (double?)x.importe) ?? 0; ;
                        totalUnidad.Varios = db.recargo_vario.Where(x => x.dir_edificio == u.dir_edificio && x.id_unidad == u.id_unidad && x.fecha.Month == periodo.Month && x.fecha.Year == periodo.Year && x.pagado != 1).Sum(x => (double?)x.importe) ?? 0; ;

                        totalUnidad.TotalSector = db.Database.SqlQuery<Totales>(@"DROP TEMPORARY TABLE IF EXISTS asd;                        CREATE TEMPORARY TABLE IF NOT EXISTS asd AS (                        select id_sector,porcentaje from unidades_sectores us                        where us.dir_edificio = '" + edificio.direccion + @"' and us.id_unidad = '" + u.id_unidad + @"');                        SELECT descripcion 'sector', sum(importe)'importe', porcentaje 'distribucion', (sum(importe) / 100 * porcentaje) 'corresponde' FROM factura f                        join sector s                        on s.idsector = f.id_sector                        join asd r1                        on r1.id_sector = s.idsector                        where month(f.fecha) = " + periodo.Month + @" and year(f.fecha) = " + periodo.Year + @" and f.dir_edificio = '" + edificio.direccion + @"'                        group by  descripcion                        order by r1.id_sector                        ").ToList();

                        double deuda = 0;
                        double recargo = 0;

                        foreach (CatalogoDeudores.Deudor d in expensasEdificio.Deudores)
                        {
                            if (u.id_unidad == d.Unidad)
                            {
                                deuda += d.Importe;
                                recargo += d.Recargo;
                            }
                        }
                        totalUnidad.Deuda = deuda;
                        totalUnidad.Recargo = recargo;
                        totalUnidad.NroFactura = (correlativo++).ToString();
                        expensasEdificio.TotalUnidad.Add(totalUnidad);

                        double importe1 = 0;
                        double importe2 = 0;
                        double mesEnEmision = 0;
                        foreach (Totales total in totalUnidad.TotalSector) //CatalogoExpensas.getTotales(edificio, unidad, periodo))
                        {
                            mesEnEmision += total.corresponde;
                        }

                        importe1 = mesEnEmision + totalUnidad.Deuda + totalUnidad.Recargo;
                        Double importeSinExclusivos = importe1;

                        importe1 += totalUnidad.Exclusivos;
                        importe1 += totalUnidad.Varios;
                        importe1 += totalUnidad.Legales;

                        importe2 = importe1 * (1 + (Double)tasaRecargoVto / 100);

                        expensas expensa = new expensas();
                        expensa.dir_edificio = edificio.direccion;
                        expensa.fecha = DateTime.Parse("1 /" + periodo.Month + "/" + periodo.Year);
                        expensa.id_unidad = u.id_unidad;
                        expensa.importeVto1 = double.Parse(importe1.ToString("n2"));
                        expensa.importeVto2 = double.Parse(importe2.ToString("n2"));
                        expensa.nro_factura = totalUnidad.NroFactura;
                        expensa.fechaVto1 = vto1;
                        expensa.fechaVto2 = vto2;
                        expensa.importeSinExclusivos = importeSinExclusivos;
                        expensa.nro_referencia = completarCadena(Math.Abs((expensa.dir_edificio.ToLower() + u.id_unidad.Replace("-", "")).GetHashCode()).ToString(), 12, "0");
                        expensa.pagado = 0;
                        expensa.mesEnEmision = mesEnEmision;
                        expensa.importeVto1 = importe1;
                        expensa.importeVto2 = importe2;

                        bool update = false;

                        foreach (expensas exp in expensasExistentes)
                        {

                            if (exp.id_unidad == expensa.id_unidad)
                            {
                                {
                                    exp.importeVto1 = expensa.importeVto1;
                                    exp.importeVto2 = expensa.importeVto2;
                                    exp.nro_factura = expensa.nro_factura;
                                    exp.fechaVto1 = vto1;
                                    exp.fechaVto2 = vto2;
                                    expensa.mesEnEmision = mesEnEmision;
                                    exp.importeSinExclusivos = importeSinExclusivos;
                                    exp.nro_referencia = completarCadena(Math.Abs((expensa.dir_edificio.ToLower() + u.id_unidad.Replace("-", "")).GetHashCode()).ToString(), 12, "0");
                                    db.Entry(exp).State = System.Data.EntityState.Modified;
                                    update = true;
                                    break;
                                }
                            }
                        }

                        if (update == false)
                            db.expensas.Add(expensa);

                        //db.Database.ExecuteSqlCommand("delete from expensas where dir_edificio={0} and fecha = {1} and id_unidad ={2}", expensa.dir_edificio, expensa.fecha, expensa.id_unidad);

                    }
                    db.SaveChanges();
                }

                return expensasEdificio;
            }
            catch (Exception ex)
            {
                Logger.Log.write(ex.InnerException == null ? ex.Message : ex.InnerException.Message);
                throw ex;
            }
        }
Esempio n. 3
0
        public static ExpensasEdificio getExpensasEdificioVistaPrevia(edificio edificio, DateTime periodo, DateTime vto1, DateTime vto2, ref int correlativo, admEntities db, List<expensas> allExpensasExistentes)
        {
            try
            {
                ExpensasEdificio expensasEdificio = new ExpensasEdificio();

                expensasEdificio.Periodo = periodo;
                expensasEdificio.Edificio = edificio;//db.edificio.Where(x => x.direccion == edificio.direccion).SingleOrDefault();
                List<unidad> unidades = CatalogoUnidades.getAllUnidades(edificio);
                // expensasEdificio.Sectores = (from es in db.edificios_sectores join e in db.edificio on es.dir_edificio equals e.direccion join s in db.sector on es.id_sector equals s.idsector where e.direccion == edificio.direccion select s).ToList();
                expensasEdificio.Conceptos = db.Database.SqlQuery<Conceptos>(@"select  s.descripcion 'Sector', f.numero_factura 'NumeroFactura', p.razon_social 'Proveedor', concat(tg.descripcion, ' ', f.detalle) 'concepto', f.importe from factura f                                                     left join provedor p                            on p.razon_social = f.razon_provedor   join sector s on id_sector = s.idsector      join tipo_gasto tg  on f.id_tipogasto = tg.idtipo_gasto                    where dir_edificio = '" + edificio.direccion + "' and month(f.fecha) = " + periodo.Month + " and year(f.fecha) = " + periodo.Year).ToList();
                expensasEdificio.TotalUnidad = new List<TotalUnidad>();
                expensasEdificio.EstadoDeCaja = new EstadoCaja();
                expensasEdificio.EstadoDeCaja.MovimientosDeCaja = db.Database.SqlQuery<MovimientosCaja>("select * from movimiento_caja mc where dir_edificio = '" + edificio.direccion + @"' and month(periodo)=" + periodo.Month + " and year(periodo)=" + periodo.Year).ToList();

                List<provedor> proveedores = db.edificio.Where(x => x.direccion == edificio.direccion).SingleOrDefault().provedor.ToList();
                expensasEdificio.Proveedores = new List<Proveedor>();
                foreach (var pr in proveedores)
                {
                    Proveedor prov = new Proveedor();
                    prov.cargo = pr.cargo;
                    prov.nombre = pr.razon_social;
                    prov.telefono = pr.telefono1;
                    expensasEdificio.Proveedores.Add(prov);
                }

                DateTime fechaActual = DateTime.Parse(1 + "/" + periodo.Month + "/" + periodo.Year);
                DateTime fechaAnterior = fechaActual.AddMonths(-1);
                expensasEdificio.EstadoDeCaja.FechaActual = fechaActual.ToShortDateString();
                expensasEdificio.EstadoDeCaja.FechaAnterior = fechaAnterior.ToShortDateString();
                expensasEdificio.Deudores = CatalogoDeudores.getDeudoresFromEdificio(edificio, periodo);
                int tasaRecargoVto = CatalogoTasas.getTasaVto();
                expensasEdificio.Tasa2Vto = tasaRecargoVto;

                Double saldoCajaMesAnterior = CatalogoCajaEdificio.getSaldoCajaMes(edificio, fechaAnterior.AddMonths(1).AddDays(-1));
                Double saldoCajaMesActual = CatalogoCajaEdificio.getSaldoCajaMes(edificio, fechaActual.AddMonths(1).AddDays(-1));

                expensasEdificio.EstadoDeCaja.ImporteAnterior = saldoCajaMesAnterior;
                expensasEdificio.EstadoDeCaja.ImporteActual = saldoCajaMesActual;
                return expensasEdificio;
            }
            catch (Exception ex)
            {
                Logger.Log.write(ex.InnerException == null ? ex.Message : ex.InnerException.Message);
                throw ex;
            }
        }
 private static void hacerLiquidacionThread(ExpensasEdificio expensasEdificio, DateTime p, DateTime vto1, DateTime vto2, string textoPie, System.Drawing.Image _24, System.Drawing.Image qr, System.Drawing.Image tijera)
 {
     Document doc = new Document(PageSize.A4, milimetroToPoint(12), milimetroToPoint(12), milimetroToPoint(7), 0f);
     bool exists = System.IO.Directory.Exists(Ruta + "Liquidaciones\\" + p.Month + " del " + p.Year);
     if (!exists)
         System.IO.Directory.CreateDirectory(Ruta + "Liquidaciones\\" + p.Month + " del " + p.Year);
     var output = new FileStream(Ruta + @"Liquidaciones\\" + p.Month + " del " + p.Year + "\\" + expensasEdificio.Edificio.direccion + ".pdf", FileMode.Create);
     var writer = PdfWriter.GetInstance(doc, output);
     doc.Open();
     PDFFooter footer = new PDFFooter();
     footer.texto = textoPie;
     writer.PageEvent = footer;
     foreach (TotalUnidad totalesUnidad in expensasEdificio.TotalUnidad)
     {
         addEncabezado(doc, expensasEdificio, totalesUnidad.Unidad, "Ordinaria", totalesUnidad.NroFactura, qr);
         addGastos(doc, expensasEdificio);
         doc.Add(new Paragraph(3, " "));
         addTotales(doc, expensasEdificio, totalesUnidad);
         addResumen(doc, expensasEdificio, totalesUnidad);
         addEstadoCaja(doc, expensasEdificio);
         addDeudores(doc, expensasEdificio);
         doc.Add(new Paragraph(8, " "));
         addUrgencias(doc, writer, expensasEdificio, _24, tijera);
         doc.Add(new Paragraph(8, " "));
         addCuponDePago(doc, writer, expensasEdificio, totalesUnidad, vto1, vto2);//, strWriter);
         doc.NewPage();
     }
     unidad uniAdm = new unidad();
     titular titAdm = new titular();
     titAdm.nombre = "Administración";
     uniAdm.id_unidad = "Archivo";
     uniAdm.titular = titAdm;
     addEncabezado(doc, expensasEdificio, uniAdm, "Ordinaria", "000000000000000", qr);
     addGastos(doc, expensasEdificio);
     doc.Add(new Paragraph(3, " "));
     addEstadoCaja(doc, expensasEdificio);
     addDeudores(doc, expensasEdificio);
     doc.Add(new Paragraph(8, " "));
     addUrgencias(doc, writer, expensasEdificio, _24, tijera);
     doc.Close();
 }
        //, StreamWriter strWriter)
        static void addCuponDePago(Document doc, PdfWriter writer, ExpensasEdificio expensa, TotalUnidad unidad, DateTime vto1, DateTime vto2)
        {
            PdfPTable t = new PdfPTable(4);
            t.WidthPercentage = 85;
            float[] widths = new float[] { 30f, 25f, 40f, 30f };
            t.SetWidths(widths);
            double importe1 = 0;
            double importe2 = 0;

            foreach (Totales total in unidad.TotalSector) //CatalogoExpensas.getTotales(edificio, unidad, periodo))
            {
                importe1 += total.corresponde;
            }

            importe1 += unidad.Exclusivos;
            importe1 += unidad.Varios;
            importe1 += unidad.Legales;
            importe1 += unidad.Deuda + unidad.Recargo;

            importe2 = importe1 * (1 + (Double)expensa.Tasa2Vto / 100);

            if (expensa.ImporteVto1 > 0 && expensa.ImporteVto2 > 0)
            {
                importe1 = expensa.ImporteVto1;
                importe2 = expensa.ImporteVto2;
            }

            string codigoEmpresa = "0954";
            string nroReferencia = completarCadena(Math.Abs((expensa.Edificio.direccion.ToLower() + unidad.Unidad.id_unidad.Replace("-", "")).GetHashCode()).ToString(), 12, "0");
            string nroFactura = completarCadena(unidad.NroFactura, 15, "0");
            string fechaVto = getFechaCsv(vto1).Replace("/", ""); // vto1.ToShortDateString().Replace("/", "");
            string parametroFijo = "0400";
            string fechaVtoCB = vto1.ToShortDateString().Replace("/", "");
            string codigo = codigoEmpresa + nroReferencia + nroFactura + fechaVtoCB + parametroFijo + codigoEmpresa;
            string digitoVerificador = getDigitoVerificador(codigo).ToString();
            codigo += digitoVerificador;

            Paragraph p;

            int leading = 9;
            PdfPCell totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            totalesSector.PaddingTop = 6;
            p = new Paragraph(leading, "Cupón de pago", calibri11N);
            totalesSector.AddElement(p);
            t.AddCell(totalesSector);

            totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            totalesSector.PaddingTop = 6;
            p = new Paragraph(leading, "Red Banelco", calibri11B);
            totalesSector.AddElement(p);
            t.AddCell(totalesSector);

            totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            totalesSector.PaddingTop = 6;
            p = new Paragraph(leading, "www.pagomiscuentas.com", calibri11B);
            p.Alignment = Element.ALIGN_CENTER;
            totalesSector.AddElement(p);
            t.AddCell(totalesSector);

            totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            totalesSector.PaddingTop = 6;
            p = new Paragraph(leading, " ", calibri11N);
            totalesSector.AddElement(p);
            t.AddCell(totalesSector);

            /////////////////////////////////

            totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            totalesSector.PaddingTop = 6;
            p = new Paragraph(leading, " ", calibri11N);
            totalesSector.AddElement(p);
            t.AddCell(totalesSector);

            totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            totalesSector.PaddingTop = 6;
            p = new Paragraph(leading, "Código Electrónico : ", calibri11N);
            totalesSector.AddElement(p);
            t.AddCell(totalesSector);

            totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            totalesSector.PaddingTop = 6;
            p = new Paragraph(leading, nroReferencia, calibri11B);
            p.Alignment = Element.ALIGN_CENTER;
            totalesSector.HorizontalAlignment = Element.ALIGN_CENTER;
            totalesSector.AddElement(p);

            t.AddCell(totalesSector);

            totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            totalesSector.PaddingTop = 6;
            p = new Paragraph(leading, " ", calibri11N);
            totalesSector.AddElement(p);
            t.AddCell(totalesSector);

            //////////////////////////////////////

            totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            totalesSector.PaddingTop = 6;
            p = new Paragraph(leading, " ", calibri11N);
            totalesSector.AddElement(p);
            t.AddCell(totalesSector);

            totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            totalesSector.PaddingTop = 6;
            p = new Paragraph(leading, "VTO 1 : " + vto1.ToShortDateString(), calibri11N);
            totalesSector.AddElement(p);
            t.AddCell(totalesSector);

            totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            totalesSector.PaddingTop = 6;
            p = new Paragraph(leading, "$ " + importe1.ToString("n2"), calibri11B);
            p.Alignment = Element.ALIGN_CENTER;
            totalesSector.HorizontalAlignment = Element.ALIGN_CENTER;
            totalesSector.AddElement(p);
            t.AddCell(totalesSector);

            totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            totalesSector.PaddingTop = 6;
            p = new Paragraph(leading, " ", calibri11N);
            totalesSector.AddElement(p);
            t.AddCell(totalesSector);

            ///////////////////////////////////////////

            totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            totalesSector.PaddingTop = 6;
            p = new Paragraph(leading, " ", calibri11N);
            totalesSector.AddElement(p);
            t.AddCell(totalesSector);

            totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            totalesSector.PaddingTop = 6;
            p = new Paragraph(leading, "VTO 2 : " + vto2.ToShortDateString(), calibri11N);
            totalesSector.AddElement(p);
            t.AddCell(totalesSector);

            totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            totalesSector.PaddingTop = 6;
            p = new Paragraph(leading, "$ " + importe2.ToString("n2"), calibri11B);
            p.Alignment = Element.ALIGN_CENTER;
            totalesSector.HorizontalAlignment = Element.ALIGN_CENTER;
            totalesSector.AddElement(p);
            t.AddCell(totalesSector);

            totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            totalesSector.PaddingTop = 6;
            p = new Paragraph(leading, " ", calibri11N);
            totalesSector.AddElement(p);
            t.AddCell(totalesSector);
            doc.Add(t);

            doc.Add(new Paragraph(10, " "));

            Barcode128 code128 = new Barcode128();
            code128.CodeSet = Barcode128.Barcode128CodeSet.C;
            code128.CodeType = Barcode128.CODE_C;
            code128.ChecksumText = true;
            code128.GenerateChecksum = true;
            code128.Code = codigo;

            PdfPCell codigoDeBarrasCell = new PdfPCell();
            codigoDeBarrasCell.AddElement(code128.CreateImageWithBarcode(writer.DirectContent, null, null));
            codigoDeBarrasCell.BorderWidth = 0;

            //StringBuilder sb = new StringBuilder("");
            //.Replace("\n\r", Environment.NewLine);
            string strAclaracion = "El pago del mes en emisión no implica libre deuda de la unidad.\r\nCarece de valor sin intervención de las entidades de cobro autorizadas.\r\nAl cierre de la presente pueden quedar operaciones sin registrar.";
            p = new Paragraph(10, strAclaracion, calibri9N);
            p.Alignment = Element.ALIGN_CENTER;
            codigoDeBarrasCell.AddElement(p);
            t = new PdfPTable(1);
            t.AddCell(codigoDeBarrasCell);
            t.WidthPercentage = 70;
            doc.Add(t);
        }
        static void addTotales(Document doc, ExpensasEdificio expensa, TotalUnidad unidad)
        {
            //Font fontCalibri = FontFactory.GetFont("calibri");
            //BaseFont calibri = fontCalibri.BaseFont;

            //Font calibri8N = new Font(calibri, 8, Font.NORMAL);
            //Font calibri8B = new Font(calibri, 8, Font.BOLD);

            //Font calibri9N = new Font(calibri, 9, Font.NORMAL);
            //Font calibri11N = new Font(calibri, 10, Font.NORMAL);

            //Font calibri9B = new Font(calibri, 9, Font.BOLD);
            //Font calibri11B = new Font(calibri, 10, Font.BOLD);

            PdfPTable t = new PdfPTable(4);
            t.WidthPercentage = 85;
            float[] widths = new float[] { 30f, 25f, 40f, 35f };
            t.SetWidths(widths);

            Paragraph p;

            int leading = 6;
            PdfPCell totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            p = new Paragraph(leading, "Totales por sector", calibri8B);
            totalesSector.AddElement(p);
            t.AddCell(totalesSector);

            PdfPCell importe = new PdfPCell();
            importe = new PdfPCell();
            importe.Border = 0;
            p = new Paragraph(leading, "Importe", calibri8B);
            p.Alignment = Element.ALIGN_RIGHT;
            importe.AddElement(p);
            t.AddCell(importe);

            PdfPCell distribucion = new PdfPCell();
            distribucion.Border = 0;
            p = new Paragraph(leading, "Distribución (%)", calibri8B);
            p.Alignment = Element.ALIGN_RIGHT;
            distribucion.AddElement(p);
            t.AddCell(distribucion);

            PdfPCell correspondeUnidad = new PdfPCell();
            correspondeUnidad.Border = 0;
            p = new Paragraph(leading, "Corresponde unidad", calibri8B);
            p.Alignment = Element.ALIGN_RIGHT;
            correspondeUnidad.AddElement(p);
            t.AddCell(correspondeUnidad);

            PdfPCell totalSectorItem = new PdfPCell();
            PdfPCell importeItem = new PdfPCell();
            PdfPCell distribucionItem = new PdfPCell();
            PdfPCell correspondeItem = new PdfPCell();

            leading = 10;

            //List<Totales> totales = CatalogoExpensas.getTotales(edificio, unidad, periodo);

            foreach (Totales total in unidad.TotalSector)
            {
                totalSectorItem.Border = 0;
                p = new Paragraph(leading, total.sector, calibri8N);
                totalSectorItem.AddElement(p);
                totalSectorItem.PaddingTop = -2;

                importeItem.Border = 0;
                p = new Paragraph(leading, total.importe.ToString("n2"), calibri8N);
                p.Alignment = Element.ALIGN_RIGHT;
                importeItem.AddElement(p);
                importeItem.PaddingTop = -2;

                distribucionItem.Border = 0;
                p = new Paragraph(leading, total.distribucion.ToString("n2"), calibri8N);
                p.Alignment = Element.ALIGN_RIGHT;
                distribucionItem.AddElement(p);
                distribucionItem.PaddingTop = -2;

                correspondeItem.Border = 0;
                p = new Paragraph(leading, total.corresponde.ToString("n2"), calibri8N);
                p.Alignment = Element.ALIGN_RIGHT;
                correspondeItem.AddElement(p);
                correspondeItem.PaddingTop = -2;
            }

            t.AddCell(totalSectorItem);
            t.AddCell(importeItem);
            t.AddCell(distribucionItem);
            t.AddCell(correspondeItem);

            doc.Add(t);
        }
        static void addUrgencias(Document doc, PdfWriter writer, ExpensasEdificio expensa, System.Drawing.Image _24, System.Drawing.Image _tijera)
        {
            Image img = iTextSharp.text.Image.GetInstance(_24, System.Drawing.Imaging.ImageFormat.Png);
            img.SetAbsolutePosition(milimetroToPoint(12), doc.PageSize.Height - milimetroToPoint(9.5f) - milimetroToPoint(7));
            img.ScaleToFit(milimetroToPoint(9.5f), milimetroToPoint(9.5f));

            PdfPTable t = new PdfPTable(4);
            t.WidthPercentage = 85;
            float[] widths = new float[] { 8.5f, 35f, 35f, 35f };
            t.SetWidths(widths);

            PdfPCell c = new PdfPCell();
            Paragraph p;

            c.PaddingTop = 10;
            c.PaddingLeft = 0;
            c.Border = 0;
            c.AddElement(img);
            t.WidthPercentage = 100;
            t.AddCell(c);

            int leading = 9;
            c = new PdfPCell();
            c.Border = 0;
            p = new Paragraph(leading, "Urgencias", calibri8B);
            c.AddElement(p);

            int pos = 0;
            foreach (Proveedor prov in expensa.Proveedores)
            {
                p = new Paragraph(leading, prov.cargo + ": " + prov.nombre + " - " + prov.telefono, calibri8N);
                c.AddElement(p);
                pos++;
                if (pos == 3)
                {
                    t.AddCell(c);
                    c = new PdfPCell();
                    c.Border = 0;
                    c.AddElement(new Paragraph(" ", calibri8N));
                    pos = 0;
                }
            }
            t.AddCell(c);

            c = new PdfPCell();
            c.Border = 0;
            for (int i = 0; i <= (expensa.Proveedores.Count % 3); i++)
                t.AddCell(c);

            doc.Add(t);

            doc.Add(new Paragraph(8, " "));

            Image tijera = iTextSharp.text.Image.GetInstance(_tijera, System.Drawing.Imaging.ImageFormat.Png);
            //tijera.SetAbsolutePosition(milimetroToPoint(12), doc.PageSize.Height - milimetroToPoint(9.5f) - milimetroToPoint(7));
            tijera.ScaleToFit(milimetroToPoint(9f), milimetroToPoint(9f));
            tijera.SetAbsolutePosition(40, writer.GetVerticalPosition(true) - 10);
            writer.DirectContent.AddImage(tijera);

            doc.Add(new Paragraph(5, "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"));
            doc.Add(tijera);
        }
        static void addResumen(Document doc, ExpensasEdificio expensa, TotalUnidad unidad)
        {
            //Font fontCalibri = FontFactory.GetFont("calibri");
            //BaseFont calibri = fontCalibri.BaseFont;

            //Font calibri8N = new Font(calibri, 8, Font.NORMAL);
            //Font calibri8B = new Font(calibri, 8, Font.BOLD);

            //Font calibri9N = new Font(calibri, 9, Font.NORMAL);
            //Font calibri11N = new Font(calibri, 10, Font.NORMAL);

            //Font calibri9B = new Font(calibri, 9, Font.BOLD);
            //Font calibri11B = new Font(calibri, 10, Font.BOLD);

            PdfPTable t = new PdfPTable(4);
            t.WidthPercentage = 85;
            float[] widths = new float[] { 30f, 25f, 40f, 35f };
            t.SetWidths(widths);

            //double deudaAnterior = 0;
            //double RecargosDeuda = 0;
            //
            //foreach (CatalogoDeudores.Deudor d in expensa.Deudores)
            //{
            //    if (unidad.Unidad.id_unidad == d.Unidad)
            //    {
            //        deudaAnterior = d.Importe;
            //        RecargosDeuda = d.Recargo - d.Importe;
            //    }
            //}

            string deudaAnteriorStr, recargoDeudaStr;
            deudaAnteriorStr = unidad.Deuda.ToString("n2"); //deudaAnterior.ToString("n2");
            recargoDeudaStr = unidad.Recargo.ToString("n2"); //RecargosDeuda.ToString("n2");

            double mesEnEmision = 0;
            foreach (Totales total in unidad.TotalSector) //CatalogoExpensas.getTotales(edificio, unidad, periodo))
            {
                mesEnEmision += total.corresponde;
            }

            string saldoAPagarStr;
            double saldoAPagar = 0;

            saldoAPagar = unidad.Deuda + unidad.Recargo + unidad.Exclusivos + unidad.Legales + unidad.Varios + mesEnEmision;

            saldoAPagarStr = saldoAPagar.ToString("n2");

            Paragraph p;

            int leading = 9;
            PdfPCell totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            p = new Paragraph(5, "Resumen", calibri8B);
            totalesSector.AddElement(p);
            t.AddCell(totalesSector);

            PdfPCell importe = new PdfPCell();
            importe = new PdfPCell();
            importe.Border = 0;
            p = new Paragraph(5, " ", calibri11B);
            p.Alignment = Element.ALIGN_RIGHT;
            importe.AddElement(p);
            t.AddCell(importe);

            PdfPCell distribucion = new PdfPCell();
            distribucion.Border = 0;
            p = new Paragraph(5, " ", calibri11B);
            p.Alignment = Element.ALIGN_RIGHT;
            distribucion.AddElement(p);
            t.AddCell(distribucion);

            PdfPCell correspondeUnidad = new PdfPCell();
            correspondeUnidad.Border = 0;
            p = new Paragraph(5, " ", calibri11B);
            p.Alignment = Element.ALIGN_RIGHT;
            correspondeUnidad.AddElement(p);
            t.AddCell(correspondeUnidad);

            PdfPCell totalSectorItem = new PdfPCell();
            PdfPCell importeItem = new PdfPCell();
            PdfPCell distribucionItem = new PdfPCell();
            PdfPCell correspondeItem = new PdfPCell();

            leading = 9;
            totalSectorItem.Border = 0;
            p = new Paragraph(leading, "Mes en emisión", calibri8N);
            totalSectorItem.AddElement(p);

            importeItem.Border = 0;
            p = new Paragraph(leading, " ", calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            importeItem.AddElement(p);

            distribucionItem.Border = 0;
            p = new Paragraph(leading, " ", calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            distribucionItem.AddElement(p);

            correspondeItem.Border = 0;
            p = new Paragraph(leading, mesEnEmision.ToString("n2"), calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            correspondeItem.AddElement(p);

            totalSectorItem.PaddingTop = -2;
            importeItem.PaddingTop = -2;
            distribucionItem.PaddingTop = -2;
            correspondeItem.PaddingTop = -2;

            totalSectorItem.Border = 0;
            p = new Paragraph(leading, "Deuda anterior", calibri8N);
            totalSectorItem.AddElement(p);

            importeItem.Border = 0;
            p = new Paragraph(leading, " ", calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            importeItem.AddElement(p);

            distribucionItem.Border = 0;
            p = new Paragraph(leading, " ", calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            distribucionItem.AddElement(p);

            correspondeItem.Border = 0;
            p = new Paragraph(leading, deudaAnteriorStr, calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            correspondeItem.AddElement(p);

            totalSectorItem.Border = 0;
            p = new Paragraph(leading, "Exclusivos", calibri8N);
            totalSectorItem.AddElement(p);

            importeItem.Border = 0;
            p = new Paragraph(leading, " ", calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            importeItem.AddElement(p);

            distribucionItem.Border = 0;
            p = new Paragraph(leading, " ", calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            distribucionItem.AddElement(p);

            correspondeItem.Border = 0;
            p = new Paragraph(leading, unidad.Exclusivos.ToString("n2"), calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            correspondeItem.AddElement(p);

            totalSectorItem.Border = 0;
            p = new Paragraph(leading, "Legales", calibri8N);
            totalSectorItem.AddElement(p);

            importeItem.Border = 0;
            p = new Paragraph(leading, " ", calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            importeItem.AddElement(p);

            distribucionItem.Border = 0;
            p = new Paragraph(leading, " ", calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            distribucionItem.AddElement(p);

            correspondeItem.Border = 0;
            p = new Paragraph(leading, unidad.Legales.ToString("n2"), calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            correspondeItem.AddElement(p);

            totalSectorItem.Border = 0;
            p = new Paragraph(leading, "Varios", calibri8N);
            totalSectorItem.AddElement(p);

            importeItem.Border = 0;
            p = new Paragraph(leading, " ", calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            importeItem.AddElement(p);

            distribucionItem.Border = 0;
            p = new Paragraph(leading, " ", calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            distribucionItem.AddElement(p);

            correspondeItem.Border = 0;
            p = new Paragraph(leading, unidad.Varios.ToString("n2"), calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            correspondeItem.AddElement(p);

            totalSectorItem.Border = 0;
            p = new Paragraph(leading, "Recargos", calibri8N);
            totalSectorItem.AddElement(p);

            importeItem.Border = 0;
            p = new Paragraph(leading, " ", calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            importeItem.AddElement(p);

            distribucionItem.Border = 0;
            p = new Paragraph(leading, " ", calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            distribucionItem.AddElement(p);

            correspondeItem.Border = 0;
            p = new Paragraph(leading, recargoDeudaStr, calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            correspondeItem.AddElement(p);

            totalSectorItem.Border = 0;
            p = new Paragraph(leading, "Saldo a pagar", calibri8B);
            totalSectorItem.AddElement(p);

            importeItem.Border = 0;
            p = new Paragraph(leading, " ", calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            importeItem.AddElement(p);

            distribucionItem.Border = 0;
            p = new Paragraph(leading, " ", calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            distribucionItem.AddElement(p);

            correspondeItem.Border = 0;
            p = new Paragraph(leading, saldoAPagarStr, calibri8B);
            p.Alignment = Element.ALIGN_RIGHT;
            correspondeItem.AddElement(p);

            t.AddCell(totalSectorItem);
            t.AddCell(importeItem);
            t.AddCell(distribucionItem);
            t.AddCell(correspondeItem);

            doc.Add(t);

            doc.Add(new Paragraph(0, "_____________________________________________________________________________"));
        }
        static void addGastos(Document doc, ExpensasEdificio expensa)
        {
            PdfPTable t = new PdfPTable(4);
            t.WidthPercentage = 85;
            float[] widths = new float[] { 30f, 10f, 120f, 30f };
            t.SetWidths(widths);

            Paragraph p;

            int leading = 5;
            PdfPCell sector = new PdfPCell();
            sector.Border = 0;
            p = new Paragraph(leading, "Sector", calibri8B);
            sector.AddElement(p);
            t.AddCell(sector);

            sector = new PdfPCell();
            sector.Border = 0;
            p = new Paragraph(leading, " ", calibri8B);
            sector.AddElement(p);
            t.AddCell(sector);

            PdfPCell concepto = new PdfPCell();
            concepto = new PdfPCell();
            concepto.Border = 0;
            p = new Paragraph(leading, "Concepto", calibri8B);
            concepto.AddElement(p);
            t.AddCell(concepto);

            PdfPCell importe = new PdfPCell();
            importe.Border = 0;
            p = new Paragraph(leading, "Importe", calibri8B);
            p.Alignment = Element.ALIGN_RIGHT;
            importe.AddElement(p);
            t.AddCell(importe);

            PdfPCell sectorItem = new PdfPCell();
            PdfPCell nroFacturaItem = new PdfPCell();
            PdfPCell conceptoItem = new PdfPCell();
            PdfPCell importeItem = new PdfPCell();

            double total = 0;

            string desc = "-123";
            string sect = " ";
            leading = 4;
            foreach (var gasto in expensa.Conceptos)
            {
                if (sect != gasto.Sector)
                {
                    desc = gasto.Sector;
                    sect = gasto.Sector;
                }
                else
                    desc = " ";

                sectorItem.Border = 0;

                p = new Paragraph(leading, desc, calibri8N);
                sectorItem.AddElement(p);

                conceptoItem.Border = 0;

                if (gasto.NumeroFactura == "")
                    gasto.NumeroFactura = " ";

                p = new Paragraph(leading, gasto.NumeroFactura, calibri8N);
                p.Alignment = Element.ALIGN_RIGHT;
                nroFacturaItem.AddElement(p);
                nroFacturaItem.Border = 0;

                if (gasto.Proveedor != null && gasto.Proveedor != "" && !gasto.Proveedor.Contains(" : "))
                    gasto.Proveedor += " : ";

                p = new Paragraph(leading, gasto.Proveedor + gasto.Concepto, calibri8N);
                p.Alignment = Element.ALIGN_LEFT;
                conceptoItem.AddElement(p);

                importeItem.Border = 0;
                p = new Paragraph(leading, gasto.Importe.ToString("n2"), calibri8N);
                p.Alignment = Element.ALIGN_RIGHT;
                importeItem.AddElement(p);
                desc = " ";
                total += gasto.Importe;
                leading = 9;
            }

            p = new Paragraph(leading, "Total Edificio", calibri8B);
            p.Alignment = Element.ALIGN_LEFT;
            sectorItem.AddElement(p);

            p = new Paragraph(leading, " ", calibri8N);
            p.Alignment = Element.ALIGN_LEFT;
            nroFacturaItem.AddElement(p);

            p = new Paragraph(leading, " ", calibri8N);
            p.Alignment = Element.ALIGN_LEFT;
            conceptoItem.AddElement(p);

            p = new Paragraph(leading, total.ToString("n2"), calibri8B);
            p.Alignment = Element.ALIGN_RIGHT;
            importeItem.AddElement(p);

            t.AddCell(sectorItem);
            t.AddCell(nroFacturaItem);
            t.AddCell(conceptoItem);
            t.AddCell(importeItem);

            doc.Add(t);

            doc.Add(new Paragraph(0, "_____________________________________________________________________________"));
        }
        static void addEstadoCaja(Document doc, ExpensasEdificio expensa)
        {
            doc.Add(new Paragraph(8, " "));

            PdfPTable t = new PdfPTable(2);
            t.WidthPercentage = 85;
            float[] widths = new float[] { 80f, 20f };
            t.SetWidths(widths);

            Paragraph p;

            int leading = 6;
            PdfPCell totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            p = new Paragraph(leading, "Estado caja", calibri8B);
            totalesSector.AddElement(p);
            totalesSector.PaddingTop = -3;
            t.AddCell(totalesSector);

            PdfPCell importe = new PdfPCell();
            PdfPCell distribucion = new PdfPCell();

            PdfPCell correspondeUnidad = new PdfPCell();
            correspondeUnidad.Border = 0;
            p = new Paragraph(leading, " ", calibri11B);
            p.Alignment = Element.ALIGN_RIGHT;
            correspondeUnidad.AddElement(p);
            t.AddCell(correspondeUnidad);

            PdfPCell totalSectorItem = new PdfPCell();
            PdfPCell importeItem = new PdfPCell();
            PdfPCell distribucionItem = new PdfPCell();
            PdfPCell correspondeItem = new PdfPCell();

            leading = 9;
            totalSectorItem.Border = 0;
            p = new Paragraph(leading, "Saldo al " + DateTime.Parse(expensa.EstadoDeCaja.FechaAnterior).AddMonths(1).AddDays(-1).ToShortDateString(), calibri8N);
            totalSectorItem.AddElement(p);

            correspondeItem.Border = 0;
            p = new Paragraph(leading, expensa.EstadoDeCaja.ImporteAnterior.ToString("n2"), calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            correspondeItem.AddElement(p);

            totalSectorItem.PaddingTop = -6;
            importe.PaddingTop = -6;
            distribucionItem.PaddingTop = -6;
            correspondeItem.PaddingTop = -6;

            foreach (MovimientosCaja mc in expensa.EstadoDeCaja.MovimientosDeCaja)
            {
                totalSectorItem.Border = 0;
                p = new Paragraph(leading, mc.Concepto, calibri8N);
                totalSectorItem.AddElement(p);

                correspondeItem.Border = 0;
                p = new Paragraph(leading, mc.Importe.ToString("n2"), calibri8N);
                p.Alignment = Element.ALIGN_RIGHT;
                correspondeItem.AddElement(p);
            }

            totalSectorItem.Border = 0;
            p = new Paragraph(leading, "Saldo al " + DateTime.Parse(expensa.EstadoDeCaja.FechaActual).AddMonths(1).AddDays(-1).ToShortDateString(), calibri8N);
            totalSectorItem.AddElement(p);

            correspondeItem.Border = 0;
            p = new Paragraph(leading, expensa.EstadoDeCaja.ImporteActual.ToString("n2"), calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            correspondeItem.AddElement(p);

            totalSectorItem.Border = 0;
            p = new Paragraph(leading, "Deudores al cierre s/nomina", calibri8N);
            totalSectorItem.AddElement(p);

            double deudoresAlcierre = 0;
            foreach (CatalogoDeudores.Deudor d in expensa.Deudores)
            {
                deudoresAlcierre += d.Importe;
            }

            correspondeItem.Border = 0;
            p = new Paragraph(leading, deudoresAlcierre.ToString("n2"), calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            correspondeItem.AddElement(p);

            totalSectorItem.Border = 0;
            p = new Paragraph(leading, "Disponibilidad", calibri8N);
            totalSectorItem.AddElement(p);

            correspondeItem.Border = 0;
            p = new Paragraph(leading, (expensa.EstadoDeCaja.ImporteActual - deudoresAlcierre).ToString("n2"), calibri8N);
            p.Alignment = Element.ALIGN_RIGHT;
            correspondeItem.AddElement(p);
            t.AddCell(totalSectorItem);
            t.AddCell(correspondeItem);

            doc.Add(t);

            doc.Add(new Paragraph(0, "_____________________________________________________________________________"));
        }
        static void addEncabezado(Document doc, ExpensasEdificio expensaEdificio, unidad u, string Tipo, string nroComprobante, System.Drawing.Image qr)
        {
            Image img = iTextSharp.text.Image.GetInstance(qr, System.Drawing.Imaging.ImageFormat.Png);
            img.SetAbsolutePosition(milimetroToPoint(12), doc.PageSize.Height - milimetroToPoint(19) - milimetroToPoint(7));
            img.ScaleToFit(milimetroToPoint(19), milimetroToPoint(19));

            PdfPTable t = new PdfPTable(4);

            float[] widths = new float[] { 25f, 40f, 85f, 25f };
            t.SetWidths(widths);

            PdfPCell c = new PdfPCell();
            Paragraph p;

            c.PaddingTop = -2;
            c.PaddingLeft = 0;
            c.Border = 0;
            c.BorderWidthBottom = 0.5f;
            c.AddElement(img);
            t.WidthPercentage = 100;
            t.AddCell(c);

            int leading = 9;
            c = new PdfPCell();
            c.PaddingTop = -2;
            c.Border = 0;
            c.BorderWidthBottom = 0.5f;
            p = new Paragraph(leading, "CALVAGNA CONSORCIOS", calibri8N);
            c.AddElement(p);

            p = new Paragraph(leading, "Maipú 1148 Piso 10º Of. 04", calibri8N);
            c.AddElement(p);

            p = new Paragraph(leading, "S2000CGN Rosario ", calibri8N);
            c.AddElement(p);

            p = new Paragraph(leading, "+54 341 4260298", calibri8N);
            c.AddElement(p);

            p = new Paragraph(leading, "+54 341 6415393", calibri8N);
            c.AddElement(p);

            p = new Paragraph(leading, "*****@*****.**", calibri8N);
            c.AddElement(p);

            t.AddCell(c);

            c = new PdfPCell();
            c.PaddingTop = -2;
            c.Border = 0;
            c.BorderWidthBottom = 0.5f;
            p = new Paragraph(leading, "CONSORCIO EDIFICIO: " + expensaEdificio.Edificio.direccion.ToUpper(), calibri8B);
            c.AddElement(p);

            p = new Paragraph(leading, "LIQUIDACION EXPENSAS COMUNES PERIODO: " + expensaEdificio.Periodo.Month + "/" + expensaEdificio.Periodo.Year, calibri8N);
            c.AddElement(p);

            p = new Paragraph(leading, "TIPO: " + Tipo, calibri8N);
            c.AddElement(p);

            p = new Paragraph(leading, "UNIDAD: " + u.id_unidad, calibri8B);
            c.AddElement(p);
            if (u.titular == null)
            {
                u.titular = new titular();
                u.titular.nombre = "<<ninguno>>";
            }
            p = new Paragraph(leading, "TITULAR: " + u.titular.nombre, calibri8B);
            c.AddElement(p);

            p = new Paragraph(leading, "Comprobante número: " + nroComprobante, calibri8N);
            c.AddElement(p);

            t.AddCell(c);

            c = new PdfPCell();

            p = new Paragraph(leading, "Rosario, " + DateTime.Today.ToShortDateString(), calibri8N);
            c.PaddingTop = -2;
            c.Border = 0;
            c.BorderWidthBottom = 0.5f;
            c.AddElement(p);
            t.AddCell(c);
            doc.Add(t);
        }
        static void addDeudores(Document doc, ExpensasEdificio expensa)
        {
            //Font fontCalibri = FontFactory.GetFont("calibri");
            //BaseFont calibri = fontCalibri.BaseFont;

            //Font calibri8N = new Font(calibri, 8, Font.NORMAL);
            //Font calibri8B = new Font(calibri, 8, Font.BOLD);

            //Font calibri9N = new Font(calibri, 9, Font.NORMAL);
            //Font calibri11N = new Font(calibri, 10, Font.NORMAL);

            //Font calibri9B = new Font(calibri, 9, Font.BOLD);
            //Font calibri11B = new Font(calibri, 10, Font.BOLD);

            PdfPTable t = new PdfPTable(1);
            t.WidthPercentage = 85;
            //float[] widths = new float[] { 30f, 25f, 40f, 35f };
            //t.SetWidths(widths);

            string deudoresStr = ""; //00-01: 54,40 / 00-02: 12,30 / 04-05: 2004, 54

            foreach (CatalogoDeudores.Deudor d in expensa.Deudores)
            {
                deudoresStr += d.Unidad + ": $" + d.Importe.ToString("n2") + " / ";
            }

            if (deudoresStr.Length > 0)
                deudoresStr = deudoresStr.Remove(deudoresStr.LastIndexOf(" / "));

            Paragraph p;

            int leading = 8;
            PdfPCell totalesSector = new PdfPCell();
            totalesSector.Border = 0;
            totalesSector.PaddingTop = 6;
            //p = new Paragraph(leading, "Deudores: " + deudoresStr, calibri11B);

            var titleChunk = new Chunk("Deudores: ", calibri11N);
            var descriptionChunk = new Chunk(deudoresStr, calibri8N);

            var phrase = new Phrase(leading, titleChunk);
            phrase.Add(descriptionChunk);

            totalesSector.AddElement(phrase);

            t.AddCell(totalesSector);

            doc.Add(t);

            doc.Add(new Paragraph(0, "_____________________________________________________________________________"));
        }