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;
            }
        }
        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;
            }
        }
        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);
        }
        //, 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 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, "_____________________________________________________________________________"));
        }