Пример #1
0
        public void Cabecera_OP_Grafica(string nomarchivo)
        {
            ////// ClosedXML ////////
            XLWorkbook oWB = new XLWorkbook(nomarchivo);
            var oSheet = oWB.Worksheet(1);

            switch (_Estado.ToUpper())
            {
                case "ORDENADO":
                    {
                        EmpresaDTO empresa = new DAO.EmpresaDAO().Read(1);
                        OrdenadoCabDTO miCabecera = (OrdenadoCabDTO)_Cabecera;
                        DTO.MediosPubDTO medio = CRUDHelper.Read(string.Format("IdentifMedio = '{0}'", _Espacio.IdentifMedio), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.MediosPub));

                        string[] Meses = { "", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };
                        string aniomes = miCabecera.AnoMes.ToString();

                        oSheet.Cells("C6").Value = "" + Meses[Convert.ToInt32(aniomes.Substring(4, 2))].ToUpper() + "/" + aniomes.Substring(0, 4);
                        oSheet.Cells("C7").Value = medio.Name;
                        oSheet.Cells("C8").Value = _Espacio.Name;
                        oSheet.Cells("C9").Value = _Espacio.Telefono == null ? "" : _Espacio.Telefono;
                        oSheet.Cells("C10").Value = _Espacio.Contacto == null ? "" : _Espacio.Contacto.ToUpper();
                        oSheet.Cells("D14").Value = "MES: " + Meses[Convert.ToInt32(aniomes.Substring(4, 2))].ToUpper() + "/" + aniomes.Substring(0, 4);
                        oSheet.Cells("F25").Value = _Espacio.Responsable == null ? "" : _Espacio.Responsable.ToUpper();

                        SetUpDTO setup = new SetUpDTO();
                        string sector = setup.Sector;

                        oSheet.Cells("F26").Value = sector;
                        oSheet.Cells("F27").Value = empresa.Name;
                        oSheet.Cells("F28").Value = empresa.Leyenda;

                        break;
                    }
            
                case "ESTIMADO": {

                    EmpresaDTO empresa = new DAO.EmpresaDAO().Read(1);
                    EstimadoCabDTO miCabecera = (EstimadoCabDTO)_Cabecera;
                    DTO.MediosPubDTO medio = CRUDHelper.Read(string.Format("IdentifMedio = '{0}'", _Espacio.IdentifMedio), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.MediosPub));

                    string[] Meses = { "", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };
                    string aniomes = miCabecera.AnoMes.ToString();

                    oSheet.Cells("C6").Value = "" + Meses[Convert.ToInt32(aniomes.Substring(4, 2))].ToUpper() + "/" + aniomes.Substring(0, 4);
                    oSheet.Cells("C7").Value = medio.Name;
                    oSheet.Cells("C8").Value = _Espacio.Name;
                    oSheet.Cells("C9").Value = _Espacio.Telefono == null ? "" : _Espacio.Telefono;
                    oSheet.Cells("C10").Value = _Espacio.Contacto == null ? "" : _Espacio.Contacto.ToUpper();
                    oSheet.Cells("D14").Value = "MES: " + Meses[Convert.ToInt32(aniomes.Substring(4, 2))].ToUpper() + "/" + aniomes.Substring(0, 4);
                    oSheet.Cells("F25").Value = _Espacio.Responsable == null ? "" : _Espacio.Responsable.ToUpper();

                    SetUpDTO setup = new SetUpDTO();
                    string sector = setup.Sector;

                    oSheet.Cells("F26").Value = sector;
                    oSheet.Cells("F27").Value = empresa.Name;
                    oSheet.Cells("F28").Value = empresa.Leyenda;
                    
                    break; }

                case "CERTIFICADO":
                    {
                        EmpresaDTO empresa = new DAO.EmpresaDAO().Read(1);
                        CertificadoCabDTO miCabecera = (CertificadoCabDTO)_Cabecera;
                        DTO.MediosPubDTO medio = CRUDHelper.Read(string.Format("IdentifMedio = '{0}'", _Espacio.IdentifMedio), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.MediosPub));

                        string[] Meses = { "", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };
                        string aniomes = miCabecera.AnoMes.ToString();

                        oSheet.Cells("C6").Value = "" + Meses[Convert.ToInt32(aniomes.Substring(4, 2))].ToUpper() + "/" + aniomes.Substring(0, 4);
                        oSheet.Cells("C7").Value = medio.Name;
                        oSheet.Cells("C8").Value = _Espacio.Name;
                        oSheet.Cells("C9").Value = _Espacio.Telefono == null ? "" : _Espacio.Telefono;
                        oSheet.Cells("C10").Value = _Espacio.Contacto == null ? "" : _Espacio.Contacto.ToUpper();
                        oSheet.Cells("D14").Value = "MES: " + Meses[Convert.ToInt32(aniomes.Substring(4, 2))].ToUpper() + "/" + aniomes.Substring(0, 4);
                        oSheet.Cells("F25").Value = _Espacio.Responsable == null ? "" : _Espacio.Responsable.ToUpper();

                        SetUpDTO setup = new SetUpDTO();
                        string sector = setup.Sector;

                        oSheet.Cells("F26").Value = sector;
                        oSheet.Cells("F27").Value = empresa.Name;
                        oSheet.Cells("F28").Value = empresa.Leyenda;

                        break;
                    }
            }

            oWB.SaveAs(nomarchivo);
            oWB.Dispose();
            oSheet = null;
            oWB = null;
            GC.Collect(); 
        }
Пример #2
0
        public void Cabecera_OP_Calendario_Numerico(string nomarchivo)
        {
            ////// ClosedXML ////////
            XLWorkbook oWB = new XLWorkbook(nomarchivo);
            var oSheet = oWB.Worksheet(1);


            string[] Meses = { "", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };

            EmpresaDTO empresa = new DAO.EmpresaDAO().Read(1);

            switch (_Estado.ToUpper())
            {
                case "ORDENADO":
                    {
                        OrdenadoCabDTO miCabecera = (OrdenadoCabDTO)_Cabecera;
                        string aniomes = miCabecera.AnoMes.ToString();
                        oSheet.Cells("C8").Value = miCabecera.PautaId;
                        oSheet.Cells("C11").Value = "'" + Meses[Convert.ToInt32(aniomes.Substring(4, 2))].ToUpper() + "/" + aniomes.Substring(0, 4);

                        break;
                    }
                case "ESTIMADO": {

                    EstimadoCabDTO miCabecera = (EstimadoCabDTO)_Cabecera;
                    string aniomes = miCabecera.AnoMes.ToString();
                    oSheet.Cells("C8").Value = miCabecera.PautaId;
                    oSheet.Cells("C11").Value = "'" + Meses[Convert.ToInt32(aniomes.Substring(4, 2))].ToUpper() + "/" + aniomes.Substring(0, 4);

                    break;
                }
                case "CERTIFICADO": {

                    CertificadoCabDTO miCabecera = (CertificadoCabDTO)_Cabecera;
                    string aniomes = miCabecera.AnoMes.ToString();
                    oSheet.Cells("C8").Value = miCabecera.PautaId;
                    oSheet.Cells("C11").Value = "'" + Meses[Convert.ToInt32(aniomes.Substring(4, 2))].ToUpper() + "/" + aniomes.Substring(0, 4);

                    break; }
            }

            DTO.MediosPubDTO medio = CRUDHelper.Read(string.Format("IdentifMedio = '{0}'", _Espacio.IdentifMedio), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.MediosPub));

            oSheet.Cells("C9").Value = medio.Name;
            oSheet.Cells("C10").Value = _Espacio.Name;
            oSheet.Cells("C12").Value = _Espacio.Contacto == null ? "" : _Espacio.Contacto.ToUpper();
            oSheet.Cells("C13").Value = _Espacio.Telefono == null ? "" : "'" + _Espacio.Telefono;
            oSheet.Cells("C14").Value = _Espacio.Direccion == null ? "" : _Espacio.Direccion;
            oSheet.Cells("c15").Value = _Espacio.Email == null ? "" : _Espacio.Email;

            oWB.SaveAs(nomarchivo);
            oWB.Dispose();
            oSheet = null;
            oWB = null;
            GC.Collect(); 
        
        }
Пример #3
0
        public void Cabecera_OP_Calendario_Descriptivo(string nomarchivo)
        {

            ////// ClosedXML ////////
            XLWorkbook oWB = new XLWorkbook(nomarchivo);
            var oSheet = oWB.Worksheet(1);

            switch (_Estado.ToUpper())
            {
                case "ORDENADO": {

                    EmpresaDTO empresa        = new DAO.EmpresaDAO().Read(1);
                    OrdenadoCabDTO miCabecera = (OrdenadoCabDTO)_Cabecera;

                    DTO.MediosPubDTO medio = CRUDHelper.Read(string.Format("IdentifMedio = '{0}'", _Espacio.IdentifMedio), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.MediosPub));
                    string[] Meses         = { "", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };
                    string aniomes         = miCabecera.AnoMes.ToString();


                    //ARMADO DE CALENDARIO - MEJORAR
                    int mes       = Convert.ToInt32(aniomes.Substring(4, 2));
                    int anio      = Convert.ToInt32(aniomes.Substring(0, 4));
                    int DiasEnMes = System.DateTime.DaysInMonth(anio, mes);

                    string[] DiasSemana = { "", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo" };
                    int PrimerDiaSemana = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfWeek);
                    int PrimerDiaMes    = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfYear);

                    int dia = PrimerDiaMes - PrimerDiaSemana + 2;

                    for (int Filas = 20; Filas <= 40; Filas = Filas + 5)
                    {
                        for (int Columnas = 2; Columnas <= 8; Columnas++)
                        {
                            DateTime theDate = new DateTime(anio, 1, 1).AddDays(dia-2);

                            oSheet.Cell(Filas, Columnas).Value = theDate;

                            dia++;
                        }
                    }

                    oSheet.Cells("C5").Value  = "Orden de Publicidad - " + miCabecera.IdentifEspacio;
                    oSheet.Cells("B9").Value  = miCabecera.PautaId;
                    oSheet.Cells("B10").Value = medio.Name;
                    oSheet.Cells("B11").Value = _Espacio.Name;
                    oSheet.Cells("B12").Value = "'" + Meses[Convert.ToInt32(aniomes.Substring(4, 2))].ToUpper() + "/" + aniomes.Substring(0, 4);
                    oSheet.Cells("B13").Value = _Espacio.Contacto == null ? "" : _Espacio.Contacto.ToUpper();
                    oSheet.Cells("A14").Value = "EMAIL: ";
                    oSheet.Cells("B14").Value = _Espacio.Email == null ? "" : _Espacio.Email;
                    FrecuenciaDTO frecuencia  = CRUDHelper.Read(string.Format("IdentifFrecuencia = '{0}'", miCabecera.IdentifFrecuencia), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.Frecuencia));
                    oSheet.Cells("B15").Value = frecuencia.Name + " de " + _Espacio.HoraInicio + " a " + _Espacio.HoraFin + "hs.";

                    break; }
                case "ESTIMADO": {

                    EmpresaDTO empresa        = new DAO.EmpresaDAO().Read(1);
                    EstimadoCabDTO miCabecera = (EstimadoCabDTO)_Cabecera;

                    DTO.MediosPubDTO medio = CRUDHelper.Read(string.Format("IdentifMedio = '{0}'", _Espacio.IdentifMedio), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.MediosPub));
                    string[] Meses         = { "", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };
                    string aniomes         = miCabecera.AnoMes.ToString();

                    //ARMADO DE CALENDARIO - MEJORAR
                    int mes       = Convert.ToInt32(aniomes.Substring(4, 2));
                    int anio      = Convert.ToInt32(aniomes.Substring(0, 4));
                    int DiasEnMes = System.DateTime.DaysInMonth(anio, mes);

                    string[] DiasSemana = { "", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo" };
                    int PrimerDiaSemana = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfWeek);
                    int PrimerDiaMes    = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfYear);

                    int dia = PrimerDiaMes - PrimerDiaSemana + 2;

                    for (int Filas = 20; Filas <= 40; Filas = Filas + 5)
                    {
                        for (int Columnas = 2; Columnas <= 8; Columnas++)
                        {
                            DateTime theDate = new DateTime(anio, 1, 1).AddDays(dia - 2);

                            oSheet.Cell(Filas, Columnas).Value = theDate;

                            dia++;
                        }
                    }

                    oSheet.Cells("C5").Value  = "Orden de Publicidad - " + miCabecera.IdentifEspacio;
                    oSheet.Cells("B9").Value  = miCabecera.PautaId;
                    oSheet.Cells("B10").Value = medio.Name;
                    oSheet.Cells("B11").Value = _Espacio.Name;
                    oSheet.Cells("B12").Value = "'" + Meses[Convert.ToInt32(aniomes.Substring(4, 2))].ToUpper() + "/" + aniomes.Substring(0, 4);
                    oSheet.Cells("B13").Value = _Espacio.Contacto == null ? "" : _Espacio.Contacto.ToUpper();
                    oSheet.Cells("A14").Value = "EMAIL: ";
                    oSheet.Cells("B14").Value = _Espacio.Email == null ? "" : _Espacio.Email;
                    FrecuenciaDTO frecuencia  = CRUDHelper.Read(string.Format("IdentifFrecuencia = '{0}'", miCabecera.IdentifFrecuencia), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.Frecuencia));
                    oSheet.Cells("B15").Value = frecuencia.Name + " de " + _Espacio.HoraInicio + " a " + _Espacio.HoraFin + "hs.";

                    break; }

                case "CERTIFICADO": {

                    EmpresaDTO empresa           = new DAO.EmpresaDAO().Read(1);
                    CertificadoCabDTO miCabecera = (CertificadoCabDTO)_Cabecera;

                    DTO.MediosPubDTO medio = CRUDHelper.Read(string.Format("IdentifMedio = '{0}'", _Espacio.IdentifMedio), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.MediosPub));
                    string[] Meses         = { "", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };
                    string aniomes         = miCabecera.AnoMes.ToString();


                    //ARMADO DE CALENDARIO - MEJORAR
                    int mes       = Convert.ToInt32(aniomes.Substring(4, 2));
                    int anio      = Convert.ToInt32(aniomes.Substring(0, 4));
                    int DiasEnMes = System.DateTime.DaysInMonth(anio, mes);

                    string[] DiasSemana = { "", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo" };
                    int PrimerDiaSemana = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfWeek);
                    int PrimerDiaMes = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfYear);

                    int dia = PrimerDiaMes - PrimerDiaSemana + 2;

                    for (int Filas = 20; Filas <= 40; Filas = Filas + 5)
                    {
                        for (int Columnas = 2; Columnas <= 8; Columnas++)
                        {

                            DateTime theDate = new DateTime(anio, 1, 1).AddDays(dia - 2);

                            oSheet.Cell(Filas, Columnas).Value = theDate;

                            dia++;
                        }
                    }

                    oSheet.Cells("C5").Value = "Orden de Publicidad - " + miCabecera.IdentifEspacio;
                    oSheet.Cells("B9").Value = miCabecera.PautaId;
                    oSheet.Cells("B10").Value = medio.Name;
                    oSheet.Cells("B11").Value = _Espacio.Name;
                    oSheet.Cells("B12").Value = "'" + Meses[Convert.ToInt32(aniomes.Substring(4, 2))].ToUpper() + "/" + aniomes.Substring(0, 4);
                    oSheet.Cells("B13").Value = _Espacio.Contacto == null ? "" : _Espacio.Contacto.ToUpper();
                    oSheet.Cells("A14").Value = "EMAIL: ";
                    oSheet.Cells("B14").Value = _Espacio.Email == null ? "" : _Espacio.Email;
                    FrecuenciaDTO frecuencia = CRUDHelper.Read(string.Format("IdentifFrecuencia = '{0}'", miCabecera.IdentifFrecuencia), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.Frecuencia));
                    oSheet.Cells("B15").Value = frecuencia.Name + " de " + _Espacio.HoraInicio + " a " + _Espacio.HoraFin + "hs.";
                    
                    break; }
            }

            oWB.SaveAs(nomarchivo);
            oWB.Dispose();
            oSheet = null;
            oWB = null;
            GC.Collect(); 

        }
Пример #4
0
        public void Detalle_OP_PNT_Salida(string nomarchivo)
        {

            ////// ClosedXML ////////
            XLWorkbook oWB = new XLWorkbook(nomarchivo);
            var oSheet = oWB.Worksheet(1);

            int Espaciado = 4;

            switch (_Estado.ToUpper())
            {
                #region Ordenado
                case "ORDENADO": {

                    AvisosDTO aviso = null;
                    OrdenadoCabDTO miCabecera = (OrdenadoCabDTO)_Cabecera;
                    List<OrdenadoDetDTO> miDetalle = (List<OrdenadoDetDTO>)_Detalle;
                    miDetalle = miDetalle.OrderBy(p =>p.Dia).ThenBy(q =>q.Hora).ThenBy(r =>r.Salida).ToList();

                    string[] Meses = { "", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };

                    //ARMADO DE CALENDARIO - MEJORAR
                    string aniomes = miCabecera.AnoMes.ToString();
                    int mes = Convert.ToInt32(aniomes.Substring(4, 2));
                    int anio = Convert.ToInt32(aniomes.Substring(0, 4));
                    int DiasEnMes = System.DateTime.DaysInMonth(anio, mes);
                    string[] DiasSemana = { "", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo" };
                    int PrimerDiaSemana = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfWeek);
                    int PrimerDiaMes = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfYear);
                    int dia = PrimerDiaMes - PrimerDiaSemana + 2;
                    int DiaDelAnio = miDetalle[0].Fecha.DayOfYear;
                    int[] DiasPautados = new int[DiasEnMes + 1];

                    for (int x = 1; x <= DiasEnMes; x++)
                    {
                        for (int j = 0; j <= miDetalle.Count - 1; j++)
                        {
                            if (miDetalle[j].Fecha.Day == x)
                            {
                                DiasPautados[x]++;
                            }
                        }
                    }

                    //CALCULA LA MAXIMA CANTIDAD DE SALIDAS DE AVISOS
                    int MaxLines = 0;

                    for (int k = 0; k <= DiasPautados.Length - 1; k++)
                    {
                        if (DiasPautados[k] > MaxLines)
                        {
                            MaxLines = DiasPautados[k];
                        }
                    }

                    string[] Celdas = { "", "", "", "C", "D", "E", "F", "G", "H", "I" };

                    ////// inicio de semanas ///////////

                    int Salida = 0;
                    int _Fila = 21;

                    if (MaxLines > 1)
                    {
                        //INSERCION DE FILAS PARA SALIDAS ADICIONALES
                        var rng = oSheet.Range("A" + (_Fila).ToString() + ":N" + (_Fila).ToString());

                        rng.InsertRowsBelow(MaxLines-1);

                        for (int i = _Fila; i <= _Fila + (MaxLines - 1); i++)
                        {
                            Salida++;

                            oSheet.Cell("A" + (i)).Value = "SALIDA " + Salida.ToString();
                        }
                    }
                    aviso = null;

                    for (int Columnas = 3; Columnas <= 9; Columnas++)
                    {
                        string aa = oSheet.Cell(20, Columnas).Value.ToString();
                        string bb = Convert.ToDateTime(aa).Day.ToString();


                        List<OrdenadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString("00") == aa.Substring(3,2)).ToList();

                        if (SubLista.Count > 0)
                        {
                            for (int i = 0; i <= SubLista.Count - 1; i++)
                            {
                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", SubLista[i].IdentifAviso));

                                if (oSheet.Cell(20 + i, 2).Value == null || oSheet.Cell(25 + i, 2).Value.ToString() == "")
                                {
                                    oSheet.Cell(21 + i, 2).Value = aviso.Duracion.ToString() + " SEG.";
                                }

                                oSheet.Cell(21 + i, Columnas).Value = aviso.EtiquetaProd;
                            }

                            if (SubLista.Count > 1)
                            {
                                oSheet.Cell(20 + MaxLines + 1, Columnas).FormulaA1 = string.Format("=COUNTA({0}" + (21).ToString() + ":{1}{2})", Celdas[Columnas].ToString(), Celdas[Columnas].ToString(), 20 + SubLista.Count);
                            }
                            else
                            {
                                oSheet.Cell(20 + MaxLines + 1, Columnas).FormulaA1 = string.Format("=+COUNTA({0}" + (21).ToString() + ")", Celdas[Columnas].ToString());
                            }
                        }
                    }

                    ////// SEMANA 2 //////

                    Salida = 0;
                    _Fila = 21 + MaxLines -1 + Espaciado;

                    if (MaxLines > 1)
                    {
                        //INSERCION DE FILAS PARA SALIDAS ADICIONALES
                        var rng = oSheet.Range("A" + (_Fila + 1).ToString() + ":N" + (_Fila + 1).ToString());

                        rng.InsertRowsBelow(MaxLines - 1);

                        for (int i = _Fila; i <= _Fila + (MaxLines - 1); i++)
                        {
                            Salida++;

                            oSheet.Cell("A" + (i +1)).Value = "SALIDA " + Salida.ToString();
                        }
                    }
                    aviso = null;

                    for (int Columnas = 3; Columnas <= 9; Columnas++)
                    {
                        string aa = oSheet.Cell(20 + MaxLines + 4, Columnas).Value.ToString();

                        string bb = Convert.ToDateTime(aa).Day.ToString();

                        List<OrdenadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString("00") == aa.Substring(3, 2)).ToList();

                        if (SubLista.Count > 0)
                        {
                            for (int i = 1; i <= SubLista.Count; i++)
                            {
                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", SubLista[i-1].IdentifAviso));

                                if (oSheet.Cell(_Fila + i, 2).Value == null || oSheet.Cell(_Fila + i, 2).Value.ToString() == "")
                                {
                                    oSheet.Cell(_Fila + i, 2).Value = aviso.Duracion.ToString() + " SEG.";
                                }

                                oSheet.Cell(_Fila + i, Columnas).Value = aviso.EtiquetaProd;

                            }

                            if (SubLista.Count > 1)
                            {
                                oSheet.Cell(_Fila + MaxLines + 1, Columnas).FormulaA1 = string.Format("=COUNTA({0}" + (_Fila + 1).ToString() + ":{1}{2})", Celdas[Columnas].ToString(), Celdas[Columnas].ToString(), _Fila + MaxLines);
                            }
                            else
                            {
                                oSheet.Cell(_Fila + SubLista.Count + 1, Columnas).FormulaA1 = string.Format("=+COUNTA({0}" + (_Fila + 1).ToString() + ")", Celdas[Columnas].ToString());
                            }
                        }
                    }


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

                    ////// SEMANA 3//////

                    Salida = 0;
                    _Fila += MaxLines + Espaciado;

                    if (MaxLines > 1)
                    {
                        //INSERCION DE FILAS PARA SALIDAS ADICIONALES
                        var rng = oSheet.Range("A" + (_Fila + 1).ToString() + ":N" + (_Fila + 1).ToString());
                        rng.InsertRowsBelow(MaxLines - 1);
                    }

                    _Fila++;

                    for (int i = _Fila; i <= _Fila + (MaxLines - 1); i++)
                    {
                        Salida++;

                        oSheet.Cell("A" + (i)).Value = "SALIDA " + Salida.ToString();
                    }

                    aviso = null;

                    for (int Columnas = 3; Columnas <= 9; Columnas++)
                    {
                        string aa = oSheet.Cell(20 + MaxLines + 4, Columnas).Value.ToString();

                        string bb = Convert.ToDateTime(aa).Day.ToString();

                        List<OrdenadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString("00") == aa.Substring(3, 2)).ToList();

                        if (SubLista.Count > 0)
                        {
                            for (int i = 1; i <= SubLista.Count; i++)
                            {
                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", SubLista[i - 1].IdentifAviso));

                                if (oSheet.Cell(_Fila + i -1, 2).Value == null || oSheet.Cell(_Fila + i, 2).Value.ToString() == "")
                                {
                                    oSheet.Cell(_Fila + i -1, 2).Value = aviso.Duracion.ToString() + " SEG.";
                                }

                                oSheet.Cell(_Fila + i -1, Columnas).Value = aviso.EtiquetaProd;

                            }

                            if (SubLista.Count > 1)
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=COUNTA({0}" + (_Fila).ToString() + ":{1}{2})", Celdas[Columnas].ToString(), Celdas[Columnas].ToString(), _Fila + MaxLines -1);
                            }
                            else
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=+COUNTA({0}" + (_Fila).ToString() + ")", Celdas[Columnas].ToString());
                            }
                        }
                    }


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

                    ////// SEMANA 4//////

                    Salida = 0;
                    _Fila += MaxLines + Espaciado -1;

                    if (MaxLines > 1)
                    {
                        //INSERCION DE FILAS PARA SALIDAS ADICIONALES
                        var rng = oSheet.Range("A" + (_Fila + 1).ToString() + ":N" + (_Fila + 1).ToString());
                        rng.InsertRowsBelow(MaxLines - 1);
                    }

                    _Fila++;

                    for (int i = _Fila; i <= _Fila + (MaxLines - 1); i++)
                    {
                        Salida++;

                        oSheet.Cell("A" + (i)).Value = "SALIDA " + Salida.ToString();
                    }

                    aviso = null;

                    for (int Columnas = 3; Columnas <= 9; Columnas++)
                    {
                        string aa = oSheet.Cell(_Fila -1, Columnas).Value.ToString();

                        string bb = Convert.ToDateTime(aa).Day.ToString();

                        List<OrdenadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString("00") == aa.Substring(3, 2)).ToList();

                        if (SubLista.Count > 0)
                        {
                            for (int i = 1; i <= SubLista.Count; i++)
                            {
                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", SubLista[i - 1].IdentifAviso));

                                if (oSheet.Cell(_Fila + i - 1, 2).Value == null || oSheet.Cell(_Fila + i, 2).Value.ToString() == "")
                                {
                                    oSheet.Cell(_Fila + i - 1, 2).Value = aviso.Duracion.ToString() + " SEG.";
                                }

                                oSheet.Cell(_Fila + i - 1, Columnas).Value = aviso.EtiquetaProd;

                            }

                            if (SubLista.Count > 1)
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=COUNTA({0}" + (_Fila).ToString() + ":{1}{2})", Celdas[Columnas].ToString(), Celdas[Columnas].ToString(), _Fila + MaxLines - 1);
                            }
                            else
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=+COUNTA({0}" + (_Fila).ToString() + ")", Celdas[Columnas].ToString());
                            }
                        }
                    }


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

                    ////// SEMANA 5//////

                    Salida = 0;
                    _Fila += MaxLines + Espaciado -1;

                    if (MaxLines > 1)
                    {
                        //INSERCION DE FILAS PARA SALIDAS ADICIONALES
                        var rng = oSheet.Range("A" + (_Fila + 1).ToString() + ":N" + (_Fila + 1).ToString());
                        rng.InsertRowsBelow(MaxLines - 1);
                    }

                    _Fila++;

                    for (int i = _Fila; i <= _Fila + (MaxLines - 1); i++)
                    {
                        Salida++;

                        oSheet.Cell("A" + (i)).Value = "SALIDA " + Salida.ToString();
                    }

                    aviso = null;

                    for (int Columnas = 3; Columnas <= 9; Columnas++)
                    {
                        string aa = oSheet.Cell(_Fila -1, Columnas).Value.ToString();

                        string bb = Convert.ToDateTime(aa).Day.ToString();

                        List<OrdenadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString("00") == aa.Substring(3, 2)).ToList();

                        if (SubLista.Count > 0)
                        {
                            for (int i = 1; i <= SubLista.Count; i++)
                            {
                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", SubLista[i - 1].IdentifAviso));

                                if (oSheet.Cell(_Fila + i - 1, 2).Value == null || oSheet.Cell(_Fila + i, 2).Value.ToString() == "")
                                {
                                    oSheet.Cell(_Fila + i - 1, 2).Value = aviso.Duracion.ToString() + " SEG.";
                                }

                                oSheet.Cell(_Fila + i - 1, Columnas).Value = aviso.EtiquetaProd;

                            }

                            if (SubLista.Count > 1)
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=COUNTA({0}" + (_Fila).ToString() + ":{1}{2})", Celdas[Columnas].ToString(), Celdas[Columnas].ToString(), _Fila + MaxLines - 1);
                            }
                            else
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=+COUNTA({0}" + (_Fila).ToString() + ")", Celdas[Columnas].ToString());
                            }
                        }
                    }

                    ///////////// fin de semanas //////////////

                    int Columna = 6; //COD. INGESTA
                    int Fila = 5;

                    while (1 == 1)
                    {
                        if (oSheet.Cell(Fila, Columna).Value != null && oSheet.Cell(Fila, Columna).Value.ToString() == "COD. INGESTA")
                        {

                            List<string> IdentifAvisos = new List<string>();

                            for (int i = 0; i <= miDetalle.Count - 1; i++)
                            {

                                if (IdentifAvisos.Count == 0)
                                {
                                    IdentifAvisos.Add(miDetalle[i].IdentifAviso);
                                }

                                bool lencontrado = false;

                                string scadena = miDetalle[i].IdentifAviso;

                                for (int j = 0; j <= IdentifAvisos.Count - 1; j++)
                                {
                                    if (IdentifAvisos[j] == scadena)
                                    {
                                        lencontrado = true;

                                        break;
                                    }
                                }

                                if (!lencontrado)
                                {
                                    IdentifAvisos.Add(miDetalle[i].IdentifAviso);

                                    break;
                                }

                            }

                            for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                            {

                                Fila++;

                                Columna = 3;

                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", IdentifAvisos[i]));
                                oSheet.Cell(Fila, Columna).Value = aviso.EtiquetaProd;

                                DTO.PiezasArteDTO pieza = CRUDHelper.Read(string.Format("IdentifPieza = '{0}'", aviso.IdentifPieza),
                                                          BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.PiezasArte));

                                DTO.AnunInternosDTO ai = CRUDHelper.Read(string.Format("IdentifAnun = '{0}'", pieza.IdentifAnun),
                                                              BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.AnunInternos));

                                oSheet.Cell(Fila, Columna + 1).Value = ai.Name;
                                oSheet.Cell(Fila, Columna + 2).Value = aviso.Zocalo;
                                oSheet.Cell(Fila, Columna + 3).Value = aviso.NroIngesta;

                                int cantsal = 0;

                                for (int j = 0; j <= miDetalle.Count - 1; j++)
                                {
                                    if (miDetalle[j].IdentifAviso == IdentifAvisos[i])
                                    {
                                        cantsal++;
                                    }
                                }

                                oSheet.Cell(Fila, Columna + 4).Value = cantsal;

                                Columna = 9;

                                decimal CostoPorSalida = miDetalle[0].CostoOp / miDetalle.Count;
                                oSheet.Cell(Fila, Columna).Value = CostoPorSalida;


                            }

                            Fila += 7;

                            oSheet.Cell(Fila, Columna).Value = _Espacio.Responsable;

                            Fila++;

                            DAO.SetUpDAO STUP = new DAO.SetUpDAO();

                            SetUpDTO setup = STUP.Read(1);

                            string sector = setup.Sector;

                            oSheet.Cell(Fila, Columna).Value = sector;

                            Fila++;

                            EmpresaDTO empresa = new DAO.EmpresaDAO().Read(1);

                            oSheet.Cell(Fila, Columna).Value = empresa.Name;

                            // telefonos //

                            for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                            {
                                AvisosIdAtenDTO aia = CRUDHelper.Read(string.Format("IdentifAviso = '{0}'", IdentifAvisos[i]), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.AvisosIdAten));
                                oSheet.Cell("E" + (Fila + i).ToString()).Value = "'" + aia.IdentifIdentAte;


                            }
                            //////////////


                            break;
                        }

                        Fila++;
                    }

                   
                    break;
                }
                #endregion

                #region Estimado
                case "ESTIMADO": {

                    AvisosDTO aviso = null;
                    EstimadoCabDTO miCabecera = (EstimadoCabDTO)_Cabecera;
                    List<EstimadoDetDTO> miDetalle = (List<EstimadoDetDTO>)_Detalle;
                    miDetalle = miDetalle.OrderBy(p => p.Dia).ThenBy(q => q.Hora).ThenBy(r => r.Salida).ToList();

                    string[] Meses = { "", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };

                    //ARMADO DE CALENDARIO - MEJORAR
                    string aniomes = miCabecera.AnoMes.ToString();
                    int mes = Convert.ToInt32(aniomes.Substring(4, 2));
                    int anio = Convert.ToInt32(aniomes.Substring(0, 4));
                    int DiasEnMes = System.DateTime.DaysInMonth(anio, mes);
                    string[] DiasSemana = { "", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo" };
                    int PrimerDiaSemana = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfWeek);
                    int PrimerDiaMes = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfYear);
                    int dia = PrimerDiaMes - PrimerDiaSemana + 2;
                    int DiaDelAnio = miDetalle[0].Fecha.DayOfYear;
                    int[] DiasPautados = new int[DiasEnMes + 1];

                    for (int x = 1; x <= DiasEnMes; x++)
                    {
                        for (int j = 0; j <= miDetalle.Count - 1; j++)
                        {
                            if (miDetalle[j].Fecha.Day == x)
                            {
                                DiasPautados[x]++;
                            }
                        }
                    }

                    //CALCULA LA MAXIMA CANTIDAD DE SALIDAS DE AVISOS
                    int MaxLines = 0;

                    for (int k = 0; k <= DiasPautados.Length - 1; k++)
                    {
                        if (DiasPautados[k] > MaxLines)
                        {
                            MaxLines = DiasPautados[k];
                        }
                    }

                    string[] Celdas = { "", "", "", "C", "D", "E", "F", "G", "H", "I" };

                    ////// inicio de semanas ///////////

                    int Salida = 0;
                    int _Fila = 21;

                    if (MaxLines > 1)
                    {
                        //INSERCION DE FILAS PARA SALIDAS ADICIONALES
                        var rng = oSheet.Range("A" + (_Fila).ToString() + ":N" + (_Fila).ToString());

                        rng.InsertRowsBelow(MaxLines - 1);

                        for (int i = _Fila; i <= _Fila + (MaxLines - 1); i++)
                        {
                            Salida++;

                            oSheet.Cell("A" + (i)).Value = "SALIDA " + Salida.ToString();
                        }
                    }
                    aviso = null;

                    for (int Columnas = 3; Columnas <= 9; Columnas++)
                    {
                        string aa = oSheet.Cell(20, Columnas).Value.ToString();

                        DateTime theDate = new DateTime(miDetalle[0].Fecha.Year, 1, 1).AddDays( Convert.ToInt32(aa) - 2);

                        //string bb = Convert.ToDateTime(aa).Day.ToString();
                        string bb = theDate.Day.ToString();

                        List<EstimadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString("00") == theDate.ToString().Substring(3, 2)).ToList();

                        if (SubLista.Count > 0)
                        {
                            for (int i = 0; i <= SubLista.Count - 1; i++)
                            {
                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", SubLista[i].IdentifAviso));

                                if (oSheet.Cell(20 + i, 2).Value == null || oSheet.Cell(25 + i, 2).Value.ToString() == "")
                                {
                                    oSheet.Cell(21 + i, 2).Value = aviso.Duracion.ToString() + " SEG.";
                                }

                                oSheet.Cell(21 + i, Columnas).Value = aviso.EtiquetaProd;
                            }

                            if (SubLista.Count > 1)
                            {
                                oSheet.Cell(20 + MaxLines + 1, Columnas).FormulaA1 = string.Format("=COUNTA({0}" + (21).ToString() + ":{1}{2})", Celdas[Columnas].ToString(), Celdas[Columnas].ToString(), 20 + SubLista.Count);
                            }
                            else
                            {
                                oSheet.Cell(20 + MaxLines + 1, Columnas).FormulaA1 = string.Format("=+COUNTA({0}" + (21).ToString() + ")", Celdas[Columnas].ToString());
                            }
                        }
                    }

                    ////// SEMANA 2 //////

                    Salida = 0;

                    _Fila = 21 + MaxLines - 1 + Espaciado;

                    if (MaxLines > 1)
                    {
                        //INSERCION DE FILAS PARA SALIDAS ADICIONALES
                        var rng = oSheet.Range("A" + (_Fila + 1).ToString() + ":N" + (_Fila + 1).ToString());

                        rng.InsertRowsBelow(MaxLines - 1);

                        for (int i = _Fila; i <= _Fila + (MaxLines - 1); i++)
                        {
                            Salida++;

                            oSheet.Cell("A" + (i + 1)).Value = "SALIDA " + Salida.ToString();
                        }
                    }
                    aviso = null;

                    for (int Columnas = 3; Columnas <= 9; Columnas++)
                    {
                        string aa = oSheet.Cell(20 + MaxLines + 4, Columnas).Value.ToString();

                        DateTime theDate = new DateTime(miDetalle[0].Fecha.Year, 1, 1).AddDays(Convert.ToInt32(aa) - 2);
                        string bb = theDate.Day.ToString();
                        List<EstimadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString("00") == theDate.ToString().Substring(3, 2)).ToList();

                        //string aa = oSheet.Cell(20 + MaxLines + 4, Columnas).Value.ToString();

                        //DateTime theDate = new DateTime(miDetalle[0].Fecha.Year, 1, 1).AddDays(Convert.ToInt32(aa) - 1);

                        ////string bb = Convert.ToDateTime(aa).Day.ToString();
                        //string bb = theDate.Day.ToString();

                        //List<EstimadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString() == theDate.ToString().Substring(3, 2)).ToList();


                        if (SubLista.Count > 0)
                        {
                            for (int i = 1; i <= SubLista.Count; i++)
                            {
                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", SubLista[i - 1].IdentifAviso));

                                if (oSheet.Cell(_Fila + i, 2).Value == null || oSheet.Cell(_Fila + i, 2).Value.ToString() == "")
                                {
                                    oSheet.Cell(_Fila + i, 2).Value = aviso.Duracion.ToString() + " SEG.";
                                }

                                oSheet.Cell(_Fila + i, Columnas).Value = aviso.EtiquetaProd;

                            }

                            if (SubLista.Count > 1)
                            {
                                oSheet.Cell(_Fila + MaxLines + 1, Columnas).FormulaA1 = string.Format("=COUNTA({0}" + (_Fila + 1).ToString() + ":{1}{2})", Celdas[Columnas].ToString(), Celdas[Columnas].ToString(), _Fila + MaxLines);
                            }
                            else
                            {
                                oSheet.Cell(_Fila + SubLista.Count + 1, Columnas).FormulaA1 = string.Format("=+COUNTA({0}" + (_Fila + 1).ToString() + ")", Celdas[Columnas].ToString());
                            }
                        }
                    }


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

                    ////// SEMANA 3//////

                    Salida = 0;
                    _Fila += MaxLines + Espaciado;

                    if (MaxLines > 1)
                    {
                        //INSERCION DE FILAS PARA SALIDAS ADICIONALES
                        var rng = oSheet.Range("A" + (_Fila + 1).ToString() + ":N" + (_Fila + 1).ToString());
                        rng.InsertRowsBelow(MaxLines - 1);
                    }

                    _Fila++;

                    for (int i = _Fila; i <= _Fila + (MaxLines - 1); i++)
                    {
                        Salida++;

                        oSheet.Cell("A" + (i)).Value = "SALIDA " + Salida.ToString();
                    }

                    aviso = null;

                    for (int Columnas = 3; Columnas <= 9; Columnas++)
                    {
                        string aa = oSheet.Cell(_Fila - 1, Columnas).Value.ToString();
                        DateTime theDate = new DateTime(miDetalle[0].Fecha.Year, 1, 1).AddDays(Convert.ToInt32(aa) - 2);
                        string bb = theDate.Day.ToString();
                        List<EstimadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString("00") == theDate.ToString().Substring(3, 2)).ToList();

                        //string aa = oSheet.Cell(20 + MaxLines + 4, Columnas).Value.ToString();
                        //DateTime theDate = new DateTime(miDetalle[0].Fecha.Year, 1, 1).AddDays(Convert.ToInt32(aa) - 1);
                        //string bb = theDate.Day.ToString();
                        //List<EstimadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString() == theDate.ToString().Substring(3, 2)).ToList();


                        if (SubLista.Count > 0)
                        {
                            for (int i = 1; i <= SubLista.Count; i++)
                            {
                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", SubLista[i - 1].IdentifAviso));

                                if (oSheet.Cell(_Fila + i - 1, 2).Value == null || oSheet.Cell(_Fila + i, 2).Value.ToString() == "")
                                {
                                    oSheet.Cell(_Fila + i - 1, 2).Value = aviso.Duracion.ToString() + " SEG.";
                                }

                                oSheet.Cell(_Fila + i - 1, Columnas).Value = aviso.EtiquetaProd;

                            }

                            if (SubLista.Count > 1)
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=COUNTA({0}" + (_Fila).ToString() + ":{1}{2})", Celdas[Columnas].ToString(), Celdas[Columnas].ToString(), _Fila + MaxLines - 1);
                            }
                            else
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=+COUNTA({0}" + (_Fila).ToString() + ")", Celdas[Columnas].ToString());
                            }
                        }
                    }


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

                    ////// SEMANA 4//////

                    Salida = 0;
                    _Fila += MaxLines + Espaciado - 1;

                    if (MaxLines > 1)
                    {
                        //INSERCION DE FILAS PARA SALIDAS ADICIONALES
                        var rng = oSheet.Range("A" + (_Fila + 1).ToString() + ":N" + (_Fila + 1).ToString());
                        rng.InsertRowsBelow(MaxLines - 1);
                    }

                    _Fila++;

                    for (int i = _Fila; i <= _Fila + (MaxLines - 1); i++)
                    {
                        Salida++;

                        oSheet.Cell("A" + (i)).Value = "SALIDA " + Salida.ToString();
                    }

                    aviso = null;

                    for (int Columnas = 3; Columnas <= 9; Columnas++)
                    {

                        string aa = oSheet.Cell(_Fila - 1, Columnas).Value.ToString();
                        DateTime theDate = new DateTime(miDetalle[0].Fecha.Year, 1, 1).AddDays(Convert.ToInt32(aa) - 2);
                        string bb = theDate.Day.ToString();
                        List<EstimadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString("00") == theDate.ToString().Substring(3, 2)).ToList();

                        if (SubLista.Count > 0)
                        {
                            for (int i = 1; i <= SubLista.Count; i++)
                            {
                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", SubLista[i - 1].IdentifAviso));

                                if (oSheet.Cell(_Fila + i - 1, 2).Value == null || oSheet.Cell(_Fila + i, 2).Value.ToString() == "")
                                {
                                    oSheet.Cell(_Fila + i - 1, 2).Value = aviso.Duracion.ToString() + " SEG.";
                                }

                                oSheet.Cell(_Fila + i - 1, Columnas).Value = aviso.EtiquetaProd;

                            }

                            if (SubLista.Count > 1)
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=COUNTA({0}" + (_Fila).ToString() + ":{1}{2})", Celdas[Columnas].ToString(), Celdas[Columnas].ToString(), _Fila + MaxLines - 1);
                            }
                            else
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=+COUNTA({0}" + (_Fila).ToString() + ")", Celdas[Columnas].ToString());
                            }
                        }
                    }


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

                    ////// SEMANA 5//////

                    Salida = 0;
                    _Fila += MaxLines + Espaciado - 1;

                    if (MaxLines > 1)
                    {
                        //INSERCION DE FILAS PARA SALIDAS ADICIONALES
                        var rng = oSheet.Range("A" + (_Fila + 1).ToString() + ":N" + (_Fila + 1).ToString());
                        rng.InsertRowsBelow(MaxLines - 1);
                    }

                    _Fila++;

                    for (int i = _Fila; i <= _Fila + (MaxLines - 1); i++)
                    {
                        Salida++;

                        oSheet.Cell("A" + (i)).Value = "SALIDA " + Salida.ToString();
                    }

                    aviso = null;

                    for (int Columnas = 3; Columnas <= 9; Columnas++)
                    {

                        string aa = oSheet.Cell(_Fila - 1, Columnas).Value.ToString();
                        DateTime theDate = new DateTime(miDetalle[0].Fecha.Year, 1, 1).AddDays(Convert.ToInt32(aa) - 2);
                        string bb = theDate.Day.ToString();
                        List<EstimadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString("00") == theDate.ToString().Substring(3, 2)).ToList();

                        if (SubLista.Count > 0)
                        {
                            for (int i = 1; i <= SubLista.Count; i++)
                            {
                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", SubLista[i - 1].IdentifAviso));

                                if (oSheet.Cell(_Fila + i - 1, 2).Value == null || oSheet.Cell(_Fila + i, 2).Value.ToString() == "")
                                {
                                    oSheet.Cell(_Fila + i - 1, 2).Value = aviso.Duracion.ToString() + " SEG.";
                                }

                                oSheet.Cell(_Fila + i - 1, Columnas).Value = aviso.EtiquetaProd;

                            }

                            if (SubLista.Count > 1)
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=COUNTA({0}" + (_Fila).ToString() + ":{1}{2})", Celdas[Columnas].ToString(), Celdas[Columnas].ToString(), _Fila + MaxLines - 1);
                            }
                            else
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=+COUNTA({0}" + (_Fila).ToString() + ")", Celdas[Columnas].ToString());
                            }
                        }
                    }

                    ///////////// fin de semanas //////////////

                    int Columna = 6; //COD. INGESTA
                    int Fila = 5;

                    while (1 == 1)
                    {
                        if (oSheet.Cell(Fila, Columna).Value != null && oSheet.Cell(Fila, Columna).Value.ToString() == "COD. INGESTA")
                        {

                            List<string> IdentifAvisos = new List<string>();

                            for (int i = 0; i <= miDetalle.Count - 1; i++)
                            {

                                if (IdentifAvisos.Count == 0)
                                {
                                    IdentifAvisos.Add(miDetalle[i].IdentifAviso);
                                }

                                bool lencontrado = false;

                                string scadena = miDetalle[i].IdentifAviso;

                                for (int j = 0; j <= IdentifAvisos.Count - 1; j++)
                                {
                                    if (IdentifAvisos[j] == scadena)
                                    {
                                        lencontrado = true;

                                        break;
                                    }
                                }

                                if (!lencontrado)
                                {
                                    IdentifAvisos.Add(miDetalle[i].IdentifAviso);

                                    break;
                                }

                            }

                            for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                            {

                                Fila++;

                                Columna = 3;

                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", IdentifAvisos[i]));
                                oSheet.Cell(Fila, Columna).Value = aviso.EtiquetaProd;

                                DTO.PiezasArteDTO pieza = CRUDHelper.Read(string.Format("IdentifPieza = '{0}'", aviso.IdentifPieza),
                                                          BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.PiezasArte));

                                DTO.AnunInternosDTO ai = CRUDHelper.Read(string.Format("IdentifAnun = '{0}'", pieza.IdentifAnun),
                                                              BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.AnunInternos));

                                oSheet.Cell(Fila, Columna + 1).Value = ai.Name;
                                oSheet.Cell(Fila, Columna + 2).Value = aviso.Zocalo;
                                oSheet.Cell(Fila, Columna + 3).Value = aviso.NroIngesta;

                                int cantsal = 0;

                                for (int j = 0; j <= miDetalle.Count - 1; j++)
                                {
                                    if (miDetalle[j].IdentifAviso == IdentifAvisos[i])
                                    {
                                        cantsal++;
                                    }
                                }

                                oSheet.Cell(Fila, Columna + 4).Value = cantsal;

                                Columna = 9;

                                decimal CostoPorSalida = miDetalle[0].CostoOp / miDetalle.Count;
                                oSheet.Cell(Fila, Columna).Value = CostoPorSalida;


                            }

                            Fila += 7;

                            oSheet.Cell(Fila, Columna).Value = _Espacio.Responsable;

                            Fila++;

                            DAO.SetUpDAO STUP = new DAO.SetUpDAO();

                            SetUpDTO setup = STUP.Read(1);

                            string sector = setup.Sector;

                            oSheet.Cell(Fila, Columna).Value = sector;

                            Fila++;

                            EmpresaDTO empresa = new DAO.EmpresaDAO().Read(1);

                            oSheet.Cell(Fila, Columna).Value = empresa.Name;

                            // telefonos //

                            for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                            {
                                AvisosIdAtenDTO aia = CRUDHelper.Read(string.Format("IdentifAviso = '{0}'", IdentifAvisos[i]), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.AvisosIdAten));
                                oSheet.Cell("E" + (Fila + i).ToString()).Value = "'" + aia.IdentifIdentAte;


                            }
                            //////////////


                            break;
                        }

                        Fila++;
                    }


                    break;
                }
#endregion

                #region Certificado

                case "CERTIFICADO": {

                    AvisosDTO aviso = null;
                    CertificadoCabDTO miCabecera = (CertificadoCabDTO)_Cabecera;
                    List<CertificadoDetDTO> miDetalle = (List<CertificadoDetDTO>)_Detalle;
                    miDetalle = miDetalle.OrderBy(p => p.Dia).ThenBy(q => q.Hora).ThenBy(r => r.Salida).ToList();

                    string[] Meses = { "", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };

                    //ARMADO DE CALENDARIO - MEJORAR
                    string aniomes = miCabecera.AnoMes.ToString();
                    int mes = Convert.ToInt32(aniomes.Substring(4, 2));
                    int anio = Convert.ToInt32(aniomes.Substring(0, 4));
                    int DiasEnMes = System.DateTime.DaysInMonth(anio, mes);
                    string[] DiasSemana = { "", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo" };
                    int PrimerDiaSemana = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfWeek);
                    int PrimerDiaMes = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfYear);
                    int dia = PrimerDiaMes - PrimerDiaSemana + 2;
                    int DiaDelAnio = miDetalle[0].Fecha.DayOfYear;
                    int[] DiasPautados = new int[DiasEnMes + 1];

                    for (int x = 1; x <= DiasEnMes; x++)
                    {
                        for (int j = 0; j <= miDetalle.Count - 1; j++)
                        {
                            if (miDetalle[j].Fecha.Day == x)
                            {
                                DiasPautados[x]++;
                            }
                        }
                    }

                    //CALCULA LA MAXIMA CANTIDAD DE SALIDAS DE AVISOS
                    int MaxLines = 0;

                    for (int k = 0; k <= DiasPautados.Length - 1; k++)
                    {
                        if (DiasPautados[k] > MaxLines)
                        {
                            MaxLines = DiasPautados[k];
                        }
                    }

                    string[] Celdas = { "", "", "", "C", "D", "E", "F", "G", "H", "I" };

                    ////// inicio de semanas ///////////

                    int Salida = 0;
                    int _Fila = 21;

                    if (MaxLines > 1)
                    {
                        //INSERCION DE FILAS PARA SALIDAS ADICIONALES
                        var rng = oSheet.Range("A" + (_Fila).ToString() + ":N" + (_Fila).ToString());

                        rng.InsertRowsBelow(MaxLines - 1);

                        for (int i = _Fila; i <= _Fila + (MaxLines - 1); i++)
                        {
                            Salida++;

                            oSheet.Cell("A" + (i)).Value = "SALIDA " + Salida.ToString();
                        }
                    }
                    aviso = null;

                    for (int Columnas = 3; Columnas <= 9; Columnas++)
                    {
                        string aa = oSheet.Cell(20, Columnas).Value.ToString();

                        DateTime theDate = new DateTime(miDetalle[0].Fecha.Year, 1, 1).AddDays(Convert.ToInt32(aa) - 2);

                        //string bb = Convert.ToDateTime(aa).Day.ToString();
                        string bb = theDate.Day.ToString();

                        List<CertificadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString("00") == theDate.ToString().Substring(3, 2)).ToList();

                        if (SubLista.Count > 0)
                        {
                            for (int i = 0; i <= SubLista.Count - 1; i++)
                            {
                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", SubLista[i].IdentifAviso));

                                if (oSheet.Cell(20 + i, 2).Value == null || oSheet.Cell(25 + i, 2).Value.ToString() == "")
                                {
                                    oSheet.Cell(21 + i, 2).Value = aviso.Duracion.ToString() + " SEG.";
                                }

                                oSheet.Cell(21 + i, Columnas).Value = aviso.EtiquetaProd;
                            }

                            if (SubLista.Count > 1)
                            {
                                oSheet.Cell(20 + MaxLines + 1, Columnas).FormulaA1 = string.Format("=COUNTA({0}" + (21).ToString() + ":{1}{2})", Celdas[Columnas].ToString(), Celdas[Columnas].ToString(), 20 + SubLista.Count);
                            }
                            else
                            {
                                oSheet.Cell(20 + MaxLines + 1, Columnas).FormulaA1 = string.Format("=+COUNTA({0}" + (21).ToString() + ")", Celdas[Columnas].ToString());
                            }
                        }
                    }

                    ////// SEMANA 2 //////

                    Salida = 0;

                    _Fila = 21 + MaxLines - 1 + Espaciado;

                    if (MaxLines > 1)
                    {
                        //INSERCION DE FILAS PARA SALIDAS ADICIONALES
                        var rng = oSheet.Range("A" + (_Fila + 1).ToString() + ":N" + (_Fila + 1).ToString());

                        rng.InsertRowsBelow(MaxLines - 1);

                        for (int i = _Fila; i <= _Fila + (MaxLines - 1); i++)
                        {
                            Salida++;

                            oSheet.Cell("A" + (i + 1)).Value = "SALIDA " + Salida.ToString();
                        }
                    }
                    aviso = null;

                    for (int Columnas = 3; Columnas <= 9; Columnas++)
                    {
                        string aa = oSheet.Cell(20 + MaxLines + 4, Columnas).Value.ToString();

                        DateTime theDate = new DateTime(miDetalle[0].Fecha.Year, 1, 1).AddDays(Convert.ToInt32(aa) - 2);
                        string bb = theDate.Day.ToString();
                        List<CertificadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString("00") == theDate.ToString().Substring(3, 2)).ToList();

                        //string aa = oSheet.Cell(20 + MaxLines + 4, Columnas).Value.ToString();

                        //DateTime theDate = new DateTime(miDetalle[0].Fecha.Year, 1, 1).AddDays(Convert.ToInt32(aa) - 1);

                        ////string bb = Convert.ToDateTime(aa).Day.ToString();
                        //string bb = theDate.Day.ToString();

                        //List<EstimadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString() == theDate.ToString().Substring(3, 2)).ToList();


                        if (SubLista.Count > 0)
                        {
                            for (int i = 1; i <= SubLista.Count; i++)
                            {
                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", SubLista[i - 1].IdentifAviso));

                                if (oSheet.Cell(_Fila + i, 2).Value == null || oSheet.Cell(_Fila + i, 2).Value.ToString() == "")
                                {
                                    oSheet.Cell(_Fila + i, 2).Value = aviso.Duracion.ToString() + " SEG.";
                                }

                                oSheet.Cell(_Fila + i, Columnas).Value = aviso.EtiquetaProd;

                            }

                            if (SubLista.Count > 1)
                            {
                                oSheet.Cell(_Fila + MaxLines + 1, Columnas).FormulaA1 = string.Format("=COUNTA({0}" + (_Fila + 1).ToString() + ":{1}{2})", Celdas[Columnas].ToString(), Celdas[Columnas].ToString(), _Fila + MaxLines);
                            }
                            else
                            {
                                oSheet.Cell(_Fila + SubLista.Count + 1, Columnas).FormulaA1 = string.Format("=+COUNTA({0}" + (_Fila + 1).ToString() + ")", Celdas[Columnas].ToString());
                            }
                        }
                    }


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

                    ////// SEMANA 3//////

                    Salida = 0;
                    _Fila += MaxLines + Espaciado;

                    if (MaxLines > 1)
                    {
                        //INSERCION DE FILAS PARA SALIDAS ADICIONALES
                        var rng = oSheet.Range("A" + (_Fila + 1).ToString() + ":N" + (_Fila + 1).ToString());
                        rng.InsertRowsBelow(MaxLines - 1);
                    }

                    _Fila++;

                    for (int i = _Fila; i <= _Fila + (MaxLines - 1); i++)
                    {
                        Salida++;

                        oSheet.Cell("A" + (i)).Value = "SALIDA " + Salida.ToString();
                    }

                    aviso = null;

                    for (int Columnas = 3; Columnas <= 9; Columnas++)
                    {
                        string aa = oSheet.Cell(_Fila - 1, Columnas).Value.ToString();
                        DateTime theDate = new DateTime(miDetalle[0].Fecha.Year, 1, 1).AddDays(Convert.ToInt32(aa) - 2);
                        string bb = theDate.Day.ToString();
                        List<CertificadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString("00") == theDate.ToString().Substring(3, 2)).ToList();

                        //string aa = oSheet.Cell(20 + MaxLines + 4, Columnas).Value.ToString();
                        //DateTime theDate = new DateTime(miDetalle[0].Fecha.Year, 1, 1).AddDays(Convert.ToInt32(aa) - 1);
                        //string bb = theDate.Day.ToString();
                        //List<EstimadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString() == theDate.ToString().Substring(3, 2)).ToList();


                        if (SubLista.Count > 0)
                        {
                            for (int i = 1; i <= SubLista.Count; i++)
                            {
                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", SubLista[i - 1].IdentifAviso));

                                if (oSheet.Cell(_Fila + i - 1, 2).Value == null || oSheet.Cell(_Fila + i, 2).Value.ToString() == "")
                                {
                                    oSheet.Cell(_Fila + i - 1, 2).Value = aviso.Duracion.ToString() + " SEG.";
                                }

                                oSheet.Cell(_Fila + i - 1, Columnas).Value = aviso.EtiquetaProd;

                            }

                            if (SubLista.Count > 1)
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=COUNTA({0}" + (_Fila).ToString() + ":{1}{2})", Celdas[Columnas].ToString(), Celdas[Columnas].ToString(), _Fila + MaxLines - 1);
                            }
                            else
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=+COUNTA({0}" + (_Fila).ToString() + ")", Celdas[Columnas].ToString());
                            }
                        }
                    }


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

                    ////// SEMANA 4//////

                    Salida = 0;
                    _Fila += MaxLines + Espaciado - 1;

                    if (MaxLines > 1)
                    {
                        //INSERCION DE FILAS PARA SALIDAS ADICIONALES
                        var rng = oSheet.Range("A" + (_Fila + 1).ToString() + ":N" + (_Fila + 1).ToString());
                        rng.InsertRowsBelow(MaxLines - 1);
                    }

                    _Fila++;

                    for (int i = _Fila; i <= _Fila + (MaxLines - 1); i++)
                    {
                        Salida++;

                        oSheet.Cell("A" + (i)).Value = "SALIDA " + Salida.ToString();
                    }

                    aviso = null;

                    for (int Columnas = 3; Columnas <= 9; Columnas++)
                    {

                        string aa = oSheet.Cell(_Fila - 1, Columnas).Value.ToString();
                        DateTime theDate = new DateTime(miDetalle[0].Fecha.Year, 1, 1).AddDays(Convert.ToInt32(aa) - 2);
                        string bb = theDate.Day.ToString();
                        List<CertificadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString("00") == theDate.ToString().Substring(3, 2)).ToList();

                        if (SubLista.Count > 0)
                        {
                            for (int i = 1; i <= SubLista.Count; i++)
                            {
                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", SubLista[i - 1].IdentifAviso));

                                if (oSheet.Cell(_Fila + i - 1, 2).Value == null || oSheet.Cell(_Fila + i, 2).Value.ToString() == "")
                                {
                                    oSheet.Cell(_Fila + i - 1, 2).Value = aviso.Duracion.ToString() + " SEG.";
                                }

                                oSheet.Cell(_Fila + i - 1, Columnas).Value = aviso.EtiquetaProd;

                            }

                            if (SubLista.Count > 1)
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=COUNTA({0}" + (_Fila).ToString() + ":{1}{2})", Celdas[Columnas].ToString(), Celdas[Columnas].ToString(), _Fila + MaxLines - 1);
                            }
                            else
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=+COUNTA({0}" + (_Fila).ToString() + ")", Celdas[Columnas].ToString());
                            }
                        }
                    }


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

                    ////// SEMANA 5//////

                    Salida = 0;
                    _Fila += MaxLines + Espaciado - 1;

                    if (MaxLines > 1)
                    {
                        //INSERCION DE FILAS PARA SALIDAS ADICIONALES
                        var rng = oSheet.Range("A" + (_Fila + 1).ToString() + ":N" + (_Fila + 1).ToString());
                        rng.InsertRowsBelow(MaxLines - 1);
                    }

                    _Fila++;

                    for (int i = _Fila; i <= _Fila + (MaxLines - 1); i++)
                    {
                        Salida++;

                        oSheet.Cell("A" + (i)).Value = "SALIDA " + Salida.ToString();
                    }

                    aviso = null;

                    for (int Columnas = 3; Columnas <= 9; Columnas++)
                    {

                        string aa = oSheet.Cell(_Fila - 1, Columnas).Value.ToString();
                        DateTime theDate = new DateTime(miDetalle[0].Fecha.Year, 1, 1).AddDays(Convert.ToInt32(aa) - 2);
                        string bb = theDate.Day.ToString();
                        List<CertificadoDetDTO> SubLista = miDetalle.FindAll(x => x.Dia.ToString() == bb && x.Fecha.Month.ToString("00") == theDate.ToString().Substring(3, 2)).ToList();

                        if (SubLista.Count > 0)
                        {
                            for (int i = 1; i <= SubLista.Count; i++)
                            {
                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", SubLista[i - 1].IdentifAviso));

                                if (oSheet.Cell(_Fila + i - 1, 2).Value == null || oSheet.Cell(_Fila + i, 2).Value.ToString() == "")
                                {
                                    oSheet.Cell(_Fila + i - 1, 2).Value = aviso.Duracion.ToString() + " SEG.";
                                }

                                oSheet.Cell(_Fila + i - 1, Columnas).Value = aviso.EtiquetaProd;

                            }

                            if (SubLista.Count > 1)
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=COUNTA({0}" + (_Fila).ToString() + ":{1}{2})", Celdas[Columnas].ToString(), Celdas[Columnas].ToString(), _Fila + MaxLines - 1);
                            }
                            else
                            {
                                oSheet.Cell(_Fila + MaxLines, Columnas).FormulaA1 = string.Format("=+COUNTA({0}" + (_Fila).ToString() + ")", Celdas[Columnas].ToString());
                            }
                        }
                    }

                    ///////////// fin de semanas //////////////

                    int Columna = 6; //COD. INGESTA
                    int Fila = 5;

                    while (1 == 1)
                    {
                        if (oSheet.Cell(Fila, Columna).Value != null && oSheet.Cell(Fila, Columna).Value.ToString() == "COD. INGESTA")
                        {

                            List<string> IdentifAvisos = new List<string>();

                            for (int i = 0; i <= miDetalle.Count - 1; i++)
                            {

                                if (IdentifAvisos.Count == 0)
                                {
                                    IdentifAvisos.Add(miDetalle[i].IdentifAviso);
                                }

                                bool lencontrado = false;

                                string scadena = miDetalle[i].IdentifAviso;

                                for (int j = 0; j <= IdentifAvisos.Count - 1; j++)
                                {
                                    if (IdentifAvisos[j] == scadena)
                                    {
                                        lencontrado = true;

                                        break;
                                    }
                                }

                                if (!lencontrado)
                                {
                                    IdentifAvisos.Add(miDetalle[i].IdentifAviso);

                                    break;
                                }

                            }

                            for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                            {

                                Fila++;

                                Columna = 3;

                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", IdentifAvisos[i]));
                                oSheet.Cell(Fila, Columna).Value = aviso.EtiquetaProd;

                                DTO.PiezasArteDTO pieza = CRUDHelper.Read(string.Format("IdentifPieza = '{0}'", aviso.IdentifPieza),
                                                          BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.PiezasArte));

                                DTO.AnunInternosDTO ai = CRUDHelper.Read(string.Format("IdentifAnun = '{0}'", pieza.IdentifAnun),
                                                              BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.AnunInternos));

                                oSheet.Cell(Fila, Columna + 1).Value = ai.Name;
                                oSheet.Cell(Fila, Columna + 2).Value = aviso.Zocalo;
                                oSheet.Cell(Fila, Columna + 3).Value = aviso.NroIngesta;

                                int cantsal = 0;

                                for (int j = 0; j <= miDetalle.Count - 1; j++)
                                {
                                    if (miDetalle[j].IdentifAviso == IdentifAvisos[i])
                                    {
                                        cantsal++;
                                    }
                                }

                                oSheet.Cell(Fila, Columna + 4).Value = cantsal;

                                Columna = 9;

                                decimal CostoPorSalida = miDetalle[0].CostoOp / miDetalle.Count;
                                oSheet.Cell(Fila, Columna).Value = CostoPorSalida;


                            }

                            Fila += 7;

                            oSheet.Cell(Fila, Columna).Value = _Espacio.Responsable;

                            Fila++;

                            DAO.SetUpDAO STUP = new DAO.SetUpDAO();

                            SetUpDTO setup = STUP.Read(1);

                            string sector = setup.Sector;

                            oSheet.Cell(Fila, Columna).Value = sector;

                            Fila++;

                            EmpresaDTO empresa = new DAO.EmpresaDAO().Read(1);

                            oSheet.Cell(Fila, Columna).Value = empresa.Name;

                            // telefonos //

                            for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                            {
                                AvisosIdAtenDTO aia = CRUDHelper.Read(string.Format("IdentifAviso = '{0}'", IdentifAvisos[i]), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.AvisosIdAten));
                                oSheet.Cell("E" + (Fila + i).ToString()).Value = "'" + aia.IdentifIdentAte;


                            }
                            //////////////


                            break;
                        }

                        Fila++;
                    }


                    break;


                }
#endregion
            }

            oWB.SaveAs(nomarchivo);
            oWB.Dispose();
            oSheet = null;
            oWB = null;
            GC.Collect(); 
        }
Пример #5
0
        public void Detalle_OP_Calendario_Numerico(string nomArchivo)
        {
            ////// ClosedXML ////////
            XLWorkbook oWB = new XLWorkbook(nomArchivo);
            var oSheet = oWB.Worksheet(1);

            int iDia = 0;
            int DiasEnMes = 0;
            string[] Meses = { "", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };
            string[] DiasSemana = { "", "L", "M", "M", "J", "V", "S", "D" };
            int[] DiasPautados = new int[10];
            int ocurrencias = 0;
            int MaxLines = 0;
            List<string> IdentifAvisos = new List<string>();

            switch (_Estado.ToUpper())
            {
                case "ORDENADO":
                    {
                        OrdenadoCabDTO miCabecera = (OrdenadoCabDTO)_Cabecera;
                        List<OrdenadoDetDTO> miDetalle = (List<OrdenadoDetDTO>)_Detalle;
                        miDetalle = miDetalle.OrderBy(P => P.Dia).ThenBy(Q => Q.Hora).ThenBy(R => R.Salida).ToList();
                        int DiaDelAnio = miDetalle[0].Fecha.DayOfYear;
                        string aniomes = miCabecera.AnoMes.ToString();
                        int mes = Convert.ToInt32(aniomes.Substring(4, 2));
                        int anio = Convert.ToInt32(aniomes.Substring(0, 4));
                        DiasEnMes = System.DateTime.DaysInMonth(anio, mes);
                        DiasPautados = new int[DiasEnMes + 1];
                        int PrimerDiaSemana = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfWeek);
                        int PrimerDiaMes = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfYear);
                        int dia = PrimerDiaMes - PrimerDiaSemana + 2;

                        iDia = PrimerDiaSemana;

                        for (int x = 1; x <= DiasEnMes; x++)
                        {
                            for (int j = 0; j <= miDetalle.Count - 1; j++)
                            {
                                if (miDetalle[j].Fecha.Day == x)
                                {
                                    DiasPautados[x]++;
                                }
                            }
                        }

                        iDia = PrimerDiaSemana;

                        //CALCULA LA MAXIMA CANTIDAD DE SALIDAS DE AVISOS
                        MaxLines = 0;

                        for (int k = 0; k <= DiasPautados.Length - 1; k++)
                        {
                            if (DiasPautados[k] > MaxLines)
                            {
                                MaxLines = DiasPautados[k];
                            }
                        }



                        IdentifAvisos.Add(miDetalle[0].IdentifAviso);

                        bool lencontrado = false;

                        for (int i = 0; i <= miDetalle.Count - 1; i++)
                        {
                            lencontrado = false;

                            for(int j = 0; j<=IdentifAvisos.Count-1;j++)
                            {
                                if (IdentifAvisos[j] == miDetalle[i].IdentifAviso)
                                {
                                    lencontrado = true;

                                    break;

                                }
                            }

                            if (!lencontrado)
                            {
                                IdentifAvisos.Add(miDetalle[i].IdentifAviso);

                            }
                        }


                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {

                            int cantsal = 0;

                            for (int j = 0; j <= miDetalle.Count - 1; j++)
                            {
                                if (miDetalle[j].IdentifAviso == IdentifAvisos[i])
                                {

                                    int ThisDay = (int)miDetalle[j].Dia;
                                    ocurrencias = 0;

                                    for (int k = 0; k <= miDetalle.Count - 1; k++)
                                    {
                                        if ((int)miDetalle[k].Dia == ThisDay && miDetalle[k].IdentifAviso == IdentifAvisos[i])
                                        {
                                            ocurrencias++;
                                        }
                                    }

                                    cantsal++;
                                }
                            }
                        }


                        //LIMPIEZA DE DIAS Y FECHAS
                        for (int i = 1; i <= 31; i++)
                        {
                            oSheet.Cell(18, 2 + i).Value = "";
                            oSheet.Cell(19, 2 + i).Value = "";
                        }

                        for (int i = 1; i <= (DiasEnMes); i++)
                        {
                            oSheet.Cell(18, 2 + i).Value = DiasSemana[iDia].ToUpper();
                            oSheet.Cell(19, 2 + i).Value = i;

                            iDia++;

                            if (iDia == 8)
                            {
                                iDia = 1;
                            }
                        }
                        /// FIN ARMADO CALENDARIO ///
                        /// 

                        /////////////////
                        //EMPIEZO A ARMAR FRAME PARA CADA UNO DE LOS PRODUCTOS

                        var xlSourceRange = oSheet.Range("B17:AK22");


                        for (int i = 1; i <= IdentifAvisos.Count - 1; i++)
                        {
                            var rng = oSheet.Range("B16:AK16");
                            rng.InsertRowsBelow(6);
                        }

                        int Fila = 17;

                        for (int i = 1; i <= IdentifAvisos.Count - 1; i++)
                        {
                            oSheet.Cell(Fila, 2).Value = xlSourceRange;

                            Fila = Fila + 6;
                        }


                        ////// CUENTO OCURRENCIAS X AVISO PARA INSERTAR LAS LINEAS RESEPECIIVAS /////

                        int[] FilasProducto = new int[IdentifAvisos.Count];

                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {
                            for (int diaMes = 1; diaMes <= DiasEnMes - 1; diaMes++)
                            {
                                ocurrencias = 0;

                                for (int k = 0; k <= miDetalle.Count - 1; k++)
                                {
                                    if (miDetalle[k].IdentifAviso == IdentifAvisos[i] && miDetalle[k].Fecha.Day == diaMes && miDetalle[k].Fecha.Month == mes)
                                    {
                                        ocurrencias++;
                                    }

                                }

                                if (ocurrencias > 0)
                                {
                                    if (ocurrencias > FilasProducto[i])
                                    {
                                        FilasProducto[i] = ocurrencias;
                                    }
                                }


                            }
                        }

                        //inserta filas en cada uno de los productos de acuerdo a lo que hay en filasproducto
                        Fila = 20;

                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {
                            var rng = oSheet.Range("B" + Fila.ToString() + ":AK" + Fila.ToString());

                            rng.InsertRowsBelow(FilasProducto[i]-1);

                            Fila += 6 + Convert.ToInt32(FilasProducto[i]-1);
                        }

                        ////// comienzo a rellenar con valores //

                        Fila = 17;

                        for (int j = 0; j <= IdentifAvisos.Count - 1; j++)
                        {
                            AvisosDTO aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", IdentifAvisos[j].ToString()));

                            oSheet.Cell(Fila, 3).Value = aviso.EtiquetaProd;

                            Fila += 6 + FilasProducto[j]-1;
                        }


                        Fila = 20;
                        int FilaPosicional = 20;

                        string[] Celdas = { "", "", "", "C", "D", "E", "F", "G", "H", "I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","AA","AB","AC","AD","AE","AF","AG" };

                        miDetalle = miDetalle.OrderBy(p => p.Dia).ThenBy(q => q.Hora).ThenBy(r => r.Salida).ToList();

                        for (int j = 0; j <= IdentifAvisos.Count - 1; j++)
                        {
                            for (int k = 1; k <= DiasEnMes; k++)
                            {

                                oSheet.Column(k + 2).Width = 3;

                                for (int l = 0; l <= miDetalle.Count - 1; l++)
                                {
                                    
                                    if (miDetalle[l].Fecha.Day == k &&
                                        miDetalle[l].Fecha.Month == mes &&
                                        miDetalle[l].IdentifAviso == IdentifAvisos[j])
                                    {
                                        oSheet.Cell(Fila, k + 2).Value = 1;

                                        int sumDesde = FilaPosicional;
                                        int sumHasta = FilaPosicional + FilasProducto[j]-1;

                                        string Formula = string.Format("=+SUM({0}{1}:{2}{3})", Celdas[k + 2].ToString(), sumDesde.ToString(), Celdas[k + 2].ToString(), sumHasta.ToString());

                                        oSheet.Cell(FilaPosicional + FilasProducto[j], k + 2).FormulaA1 = Formula;

                                        Fila++;
                                    }

                                }

                                Fila = FilaPosicional;
                            }

                            FilaPosicional = Fila += 6 + FilasProducto[j]-1;

                        }


                        //// SUBTOTALES DE CADA COLUMNA /////

                        int[] STP = new int[DiasEnMes + 1];
                        int[] STT = new int[DiasEnMes + 1];

                        FilaPosicional = 15;

                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {
                            FilaPosicional = FilaPosicional + 5 + FilasProducto[i];

                            for (int j = 1; j <= DiasEnMes; j++)
                            {
                                if (oSheet.Cell(FilaPosicional, j + 2).Value.ToString() == "")
                                {
                                    STP[j] = Convert.ToInt32(oSheet.Cell(FilaPosicional, j + 2).Value + "0");
                                }
                                else
                                {
                                    STP[j] = Convert.ToInt32(oSheet.Cell(FilaPosicional, j + 2).Value);
                                }

                                STT[j] += STP[j];
                            }
                        }

                        FilaPosicional += 2;

                        for (int j = 1; j <= DiasEnMes; j++)
                        {
                            oSheet.Cell(FilaPosicional, j + 2).Value = STT[j];
                        }

                        ////// LLENO MARGEN DERECHO CON TOTALES ////////////

                        FilaPosicional = 15;

                        decimal CostoTotal = 0;
                        decimal GrandTotal = 0;
                        int UnidadesTotales = 0;

                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {
                            FilaPosicional = FilaPosicional + 5;

                            for(int j=0;j<=FilasProducto[i]-1;j++)
                            {
                                oSheet.Cell("AH" + FilaPosicional.ToString()).FormulaA1 = string.Format("=SUM({0}{1}:{2}{3})", "C",FilaPosicional ,"AG", FilaPosicional);

                                for (int k = 0; k <= miDetalle.Count - 1; k++)
                                {
                                    if (miDetalle[k].IdentifAviso == IdentifAvisos[i])
                                    {
                                        oSheet.Cell("AI" + FilaPosicional.ToString()).Value = miDetalle[k].CostoOp;
                                        oSheet.Cell("AJ" + FilaPosicional.ToString()).Value = miDetalle[k].Duracion;
                                        oSheet.Cell("AK" + FilaPosicional.ToString()).Value = Convert.ToDecimal(oSheet.Cell("AH" + FilaPosicional.ToString()).Value) * Convert.ToDecimal(oSheet.Cell("AI" + FilaPosicional.ToString()).Value);  

                                        CostoTotal += Convert.ToDecimal(oSheet.Cell("AK" + FilaPosicional.ToString()).Value);

                                        break;
                                    }
                                }

                                oSheet.Cell("AK" + FilaPosicional.ToString()).Value = Convert.ToDecimal(oSheet.Cell("AH" + FilaPosicional.ToString()).Value) * Convert.ToDecimal(oSheet.Cell("AI" + FilaPosicional.ToString()).Value);  

                                FilaPosicional++;

                            }

                            oSheet.Cell("AH" + FilaPosicional.ToString()).FormulaA1 = string.Format("=SUM({0}{1}:{2}{3})", "C", FilaPosicional, "AG", FilaPosicional);
                            oSheet.Cell("AI" + FilaPosicional.ToString()).Value = "";
                            oSheet.Cell("AJ" + FilaPosicional.ToString()).Value = "";
                            oSheet.Cell("AK" + FilaPosicional.ToString()).Value = CostoTotal;

                            GrandTotal += CostoTotal;

                            UnidadesTotales += Convert.ToInt32(oSheet.Cell("AH" + FilaPosicional.ToString()).Value);

                            CostoTotal = 0;

                        }

                        FilaPosicional += 2;

                        oSheet.Cell("AH" + FilaPosicional.ToString()).Value = UnidadesTotales;
                        oSheet.Cell("AK" + FilaPosicional.ToString()).Value = GrandTotal;

                        FilaPosicional += 3;

                        oSheet.Cell("AI" + FilaPosicional.ToString()).Value = _Espacio.Responsable;


                        DAO.SetUpDAO STUP = new DAO.SetUpDAO();

                        SetUpDTO setup = STUP.Read(1);

                        oSheet.Cell("AI" + (FilaPosicional + 1).ToString()).Value = setup.Sector;

                        EmpresaDTO empresa = new DAO.EmpresaDAO().Read(1);

                        oSheet.Cell("AI" + (FilaPosicional + 2).ToString()).Value = empresa.Name;

                        ////////////////////////////////////////////////////
                        
                        break;
                    }

                case "ESTIMADO":
                    {
                        EstimadoCabDTO miCabecera = (EstimadoCabDTO)_Cabecera;
                        List<EstimadoDetDTO> miDetalle = (List<EstimadoDetDTO>)_Detalle;
                        miDetalle = miDetalle.OrderBy(P => P.Dia).ThenBy(Q => Q.Hora).ThenBy(R => R.Salida).ToList();
                        int DiaDelAnio = miDetalle[0].Fecha.DayOfYear;
                        string aniomes = miCabecera.AnoMes.ToString();
                        int mes = Convert.ToInt32(aniomes.Substring(4, 2));
                        int anio = Convert.ToInt32(aniomes.Substring(0, 4));
                        DiasEnMes = System.DateTime.DaysInMonth(anio, mes);
                        DiasPautados = new int[DiasEnMes + 1];
                        int PrimerDiaSemana = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfWeek);
                        int PrimerDiaMes = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfYear);
                        int dia = PrimerDiaMes - PrimerDiaSemana + 2;

                        iDia = PrimerDiaSemana;

                        for (int x = 1; x <= DiasEnMes; x++)
                        {
                            for (int j = 0; j <= miDetalle.Count - 1; j++)
                            {
                                if (miDetalle[j].Fecha.Day == x)
                                {
                                    DiasPautados[x]++;
                                }
                            }
                        }

                        iDia = PrimerDiaSemana;

                        //CALCULA LA MAXIMA CANTIDAD DE SALIDAS DE AVISOS
                        MaxLines = 0;

                        for (int k = 0; k <= DiasPautados.Length - 1; k++)
                        {
                            if (DiasPautados[k] > MaxLines)
                            {
                                MaxLines = DiasPautados[k];
                            }
                        }



                        IdentifAvisos.Add(miDetalle[0].IdentifAviso);

                        bool lencontrado = false;

                        for (int i = 0; i <= miDetalle.Count - 1; i++)
                        {
                            lencontrado = false;

                            for (int j = 0; j <= IdentifAvisos.Count - 1; j++)
                            {
                                if (IdentifAvisos[j] == miDetalle[i].IdentifAviso)
                                {
                                    lencontrado = true;

                                    break;

                                }
                            }

                            if (!lencontrado)
                            {
                                IdentifAvisos.Add(miDetalle[i].IdentifAviso);

                            }
                        }


                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {

                            int cantsal = 0;

                            for (int j = 0; j <= miDetalle.Count - 1; j++)
                            {
                                if (miDetalle[j].IdentifAviso == IdentifAvisos[i])
                                {

                                    int ThisDay = (int)miDetalle[j].Dia;
                                    ocurrencias = 0;

                                    for (int k = 0; k <= miDetalle.Count - 1; k++)
                                    {
                                        if ((int)miDetalle[k].Dia == ThisDay && miDetalle[k].IdentifAviso == IdentifAvisos[i])
                                        {
                                            ocurrencias++;
                                        }
                                    }

                                    cantsal++;
                                }
                            }
                        }


                        //LIMPIEZA DE DIAS Y FECHAS
                        for (int i = 1; i <= 31; i++)
                        {
                            oSheet.Cell(18, 2 + i).Value = "";
                            oSheet.Cell(19, 2 + i).Value = "";
                        }

                        for (int i = 1; i <= (DiasEnMes); i++)
                        {
                            oSheet.Cell(18, 2 + i).Value = DiasSemana[iDia].ToUpper();
                            oSheet.Cell(19, 2 + i).Value = i;

                            iDia++;

                            if (iDia == 8)
                            {
                                iDia = 1;
                            }
                        }
                        /// FIN ARMADO CALENDARIO ///
                        /// 

                        /////////////////
                        //EMPIEZO A ARMAR FRAME PARA CADA UNO DE LOS PRODUCTOS

                        var xlSourceRange = oSheet.Range("B17:AK22");


                        for (int i = 1; i <= IdentifAvisos.Count - 1; i++)
                        {
                            var rng = oSheet.Range("B16:AK16");
                            rng.InsertRowsBelow(6);
                        }

                        int Fila = 17;

                        for (int i = 1; i <= IdentifAvisos.Count - 1; i++)
                        {
                            oSheet.Cell(Fila, 2).Value = xlSourceRange;

                            Fila = Fila + 6;
                        }


                        ////// CUENTO OCURRENCIAS X AVISO PARA INSERTAR LAS LINEAS RESEPECIIVAS /////

                        int[] FilasProducto = new int[IdentifAvisos.Count];

                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {
                            for (int diaMes = 1; diaMes <= DiasEnMes - 1; diaMes++)
                            {
                                ocurrencias = 0;

                                for (int k = 0; k <= miDetalle.Count - 1; k++)
                                {
                                    if (miDetalle[k].IdentifAviso == IdentifAvisos[i] && miDetalle[k].Fecha.Day == diaMes && miDetalle[k].Fecha.Month == mes)
                                    {
                                        ocurrencias++;
                                    }

                                }

                                if (ocurrencias > 0)
                                {
                                    if (ocurrencias > FilasProducto[i])
                                    {
                                        FilasProducto[i] = ocurrencias;
                                    }
                                }


                            }
                        }

                        //inserta filas en cada uno de los productos de acuerdo a lo que hay en filasproducto
                        Fila = 20;

                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {
                            var rng = oSheet.Range("B" + Fila.ToString() + ":AK" + Fila.ToString());

                            rng.InsertRowsBelow(FilasProducto[i] - 1);

                            Fila += 6 + Convert.ToInt32(FilasProducto[i] - 1);
                        }

                        ////// comienzo a rellenar con valores //

                        Fila = 17;

                        for (int j = 0; j <= IdentifAvisos.Count - 1; j++)
                        {
                            AvisosDTO aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", IdentifAvisos[j].ToString()));

                            oSheet.Cell(Fila, 3).Value = aviso.EtiquetaProd;

                            Fila += 6 + FilasProducto[j] - 1;
                        }


                        Fila = 20;
                        int FilaPosicional = 20;

                        string[] Celdas = { "", "", "", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG" };

                        miDetalle = miDetalle.OrderBy(p => p.Dia).ThenBy(q => q.Hora).ThenBy(r => r.Salida).ToList();

                        for (int j = 0; j <= IdentifAvisos.Count - 1; j++)
                        {
                            for (int k = 1; k <= DiasEnMes; k++)
                            {

                                oSheet.Column(k + 2).Width = 3;

                                for (int l = 0; l <= miDetalle.Count - 1; l++)
                                {

                                    if (miDetalle[l].Fecha.Day == k &&
                                        miDetalle[l].Fecha.Month == mes &&
                                        miDetalle[l].IdentifAviso == IdentifAvisos[j])
                                    {
                                        oSheet.Cell(Fila, k + 2).Value = 1;

                                        int sumDesde = FilaPosicional;
                                        int sumHasta = FilaPosicional + FilasProducto[j] - 1;

                                        string Formula = string.Format("=+SUM({0}{1}:{2}{3})", Celdas[k + 2].ToString(), sumDesde.ToString(), Celdas[k + 2].ToString(), sumHasta.ToString());

                                        oSheet.Cell(FilaPosicional + FilasProducto[j], k + 2).FormulaA1 = Formula;

                                        Fila++;
                                    }

                                }

                                Fila = FilaPosicional;
                            }

                            FilaPosicional = Fila += 6 + FilasProducto[j] - 1;

                        }


                        //// SUBTOTALES DE CADA COLUMNA /////

                        int[] STP = new int[DiasEnMes + 1];
                        int[] STT = new int[DiasEnMes + 1];

                        FilaPosicional = 15;

                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {
                            FilaPosicional = FilaPosicional + 5 + FilasProducto[i];

                            for (int j = 1; j <= DiasEnMes; j++)
                            {
                                if (oSheet.Cell(FilaPosicional, j + 2).Value.ToString() == "")
                                {
                                    STP[j] = Convert.ToInt32(oSheet.Cell(FilaPosicional, j + 2).Value + "0");
                                }
                                else
                                {
                                    STP[j] = Convert.ToInt32(oSheet.Cell(FilaPosicional, j + 2).Value);
                                }

                                STT[j] += STP[j];
                            }
                        }

                        FilaPosicional += 2;

                        for (int j = 1; j <= DiasEnMes; j++)
                        {
                            oSheet.Cell(FilaPosicional, j + 2).Value = STT[j];
                        }

                        ////// LLENO MARGEN DERECHO CON TOTALES ////////////

                        FilaPosicional = 15;

                        decimal CostoTotal = 0;
                        decimal GrandTotal = 0;
                        int UnidadesTotales = 0;

                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {
                            FilaPosicional = FilaPosicional + 5;

                            for (int j = 0; j <= FilasProducto[i] - 1; j++)
                            {
                                oSheet.Cell("AH" + FilaPosicional.ToString()).FormulaA1 = string.Format("=SUM({0}{1}:{2}{3})", "C", FilaPosicional, "AG", FilaPosicional);

                                for (int k = 0; k <= miDetalle.Count - 1; k++)
                                {
                                    if (miDetalle[k].IdentifAviso == IdentifAvisos[i])
                                    {
                                        oSheet.Cell("AI" + FilaPosicional.ToString()).Value = miDetalle[k].CostoOp;
                                        oSheet.Cell("AJ" + FilaPosicional.ToString()).Value = miDetalle[k].Duracion;
                                        oSheet.Cell("AK" + FilaPosicional.ToString()).Value = Convert.ToDecimal(oSheet.Cell("AH" + FilaPosicional.ToString()).Value) * Convert.ToDecimal(oSheet.Cell("AI" + FilaPosicional.ToString()).Value);

                                        CostoTotal += Convert.ToDecimal(oSheet.Cell("AK" + FilaPosicional.ToString()).Value);

                                        break;
                                    }
                                }

                                oSheet.Cell("AK" + FilaPosicional.ToString()).Value = Convert.ToDecimal(oSheet.Cell("AH" + FilaPosicional.ToString()).Value) * Convert.ToDecimal(oSheet.Cell("AI" + FilaPosicional.ToString()).Value);

                                FilaPosicional++;

                            }

                            oSheet.Cell("AH" + FilaPosicional.ToString()).FormulaA1 = string.Format("=SUM({0}{1}:{2}{3})", "C", FilaPosicional, "AG", FilaPosicional);
                            oSheet.Cell("AI" + FilaPosicional.ToString()).Value = "";
                            oSheet.Cell("AJ" + FilaPosicional.ToString()).Value = "";
                            oSheet.Cell("AK" + FilaPosicional.ToString()).Value = CostoTotal;

                            GrandTotal += CostoTotal;

                            UnidadesTotales += Convert.ToInt32(oSheet.Cell("AH" + FilaPosicional.ToString()).Value);

                            CostoTotal = 0;

                        }

                        FilaPosicional += 2;

                        oSheet.Cell("AH" + FilaPosicional.ToString()).Value = UnidadesTotales;
                        oSheet.Cell("AK" + FilaPosicional.ToString()).Value = GrandTotal;

                        FilaPosicional += 3;

                        oSheet.Cell("AI" + FilaPosicional.ToString()).Value = _Espacio.Responsable;


                        DAO.SetUpDAO STUP = new DAO.SetUpDAO();

                        SetUpDTO setup = STUP.Read(1);

                        oSheet.Cell("AI" + (FilaPosicional + 1).ToString()).Value = setup.Sector;

                        EmpresaDTO empresa = new DAO.EmpresaDAO().Read(1);

                        oSheet.Cell("AI" + (FilaPosicional + 2).ToString()).Value = empresa.Name;

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

                        break;

                    }
                case "CERTIFICADO":
                    {
                        CertificadoCabDTO miCabecera = (CertificadoCabDTO)_Cabecera;
                        List<CertificadoDetDTO> miDetalle = (List<CertificadoDetDTO>)_Detalle;
                        miDetalle = miDetalle.OrderBy(P => P.Dia).ThenBy(Q => Q.Hora).ThenBy(R => R.Salida).ToList();
                        int DiaDelAnio = miDetalle[0].Fecha.DayOfYear;
                        string aniomes = miCabecera.AnoMes.ToString();
                        int mes = Convert.ToInt32(aniomes.Substring(4, 2));
                        int anio = Convert.ToInt32(aniomes.Substring(0, 4));
                        DiasEnMes = System.DateTime.DaysInMonth(anio, mes);
                        DiasPautados = new int[DiasEnMes + 1];
                        int PrimerDiaSemana = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfWeek);
                        int PrimerDiaMes = Convert.ToInt32(Convert.ToDateTime(aniomes.Substring(0, 4) + "-" + aniomes.Substring(4, 2) + "-" + "01").DayOfYear);
                        int dia = PrimerDiaMes - PrimerDiaSemana + 2;

                        iDia = PrimerDiaSemana;

                        for (int x = 1; x <= DiasEnMes; x++)
                        {
                            for (int j = 0; j <= miDetalle.Count - 1; j++)
                            {
                                if (miDetalle[j].Fecha.Day == x)
                                {
                                    DiasPautados[x]++;
                                }
                            }
                        }

                        iDia = PrimerDiaSemana;

                        //CALCULA LA MAXIMA CANTIDAD DE SALIDAS DE AVISOS
                        MaxLines = 0;

                        for (int k = 0; k <= DiasPautados.Length - 1; k++)
                        {
                            if (DiasPautados[k] > MaxLines)
                            {
                                MaxLines = DiasPautados[k];
                            }
                        }



                        IdentifAvisos.Add(miDetalle[0].IdentifAviso);

                        bool lencontrado = false;

                        for (int i = 0; i <= miDetalle.Count - 1; i++)
                        {
                            lencontrado = false;

                            for (int j = 0; j <= IdentifAvisos.Count - 1; j++)
                            {
                                if (IdentifAvisos[j] == miDetalle[i].IdentifAviso)
                                {
                                    lencontrado = true;

                                    break;

                                }
                            }

                            if (!lencontrado)
                            {
                                IdentifAvisos.Add(miDetalle[i].IdentifAviso);

                            }
                        }


                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {

                            int cantsal = 0;

                            for (int j = 0; j <= miDetalle.Count - 1; j++)
                            {
                                if (miDetalle[j].IdentifAviso == IdentifAvisos[i])
                                {

                                    int ThisDay = (int)miDetalle[j].Dia;
                                    ocurrencias = 0;

                                    for (int k = 0; k <= miDetalle.Count - 1; k++)
                                    {
                                        if ((int)miDetalle[k].Dia == ThisDay && miDetalle[k].IdentifAviso == IdentifAvisos[i])
                                        {
                                            ocurrencias++;
                                        }
                                    }

                                    cantsal++;
                                }
                            }
                        }


                        //LIMPIEZA DE DIAS Y FECHAS
                        for (int i = 1; i <= 31; i++)
                        {
                            oSheet.Cell(18, 2 + i).Value = "";
                            oSheet.Cell(19, 2 + i).Value = "";
                        }

                        for (int i = 1; i <= (DiasEnMes); i++)
                        {
                            oSheet.Cell(18, 2 + i).Value = DiasSemana[iDia].ToUpper();
                            oSheet.Cell(19, 2 + i).Value = i;

                            iDia++;

                            if (iDia == 8)
                            {
                                iDia = 1;
                            }
                        }
                        /// FIN ARMADO CALENDARIO ///
                        /// 

                        /////////////////
                        //EMPIEZO A ARMAR FRAME PARA CADA UNO DE LOS PRODUCTOS

                        var xlSourceRange = oSheet.Range("B17:AK22");


                        for (int i = 1; i <= IdentifAvisos.Count - 1; i++)
                        {
                            var rng = oSheet.Range("B16:AK16");
                            rng.InsertRowsBelow(6);
                        }

                        int Fila = 17;

                        for (int i = 1; i <= IdentifAvisos.Count - 1; i++)
                        {
                            oSheet.Cell(Fila, 2).Value = xlSourceRange;

                            Fila = Fila + 6;
                        }


                        ////// CUENTO OCURRENCIAS X AVISO PARA INSERTAR LAS LINEAS RESEPECIIVAS /////

                        int[] FilasProducto = new int[IdentifAvisos.Count];

                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {
                            for (int diaMes = 1; diaMes <= DiasEnMes - 1; diaMes++)
                            {
                                ocurrencias = 0;

                                for (int k = 0; k <= miDetalle.Count - 1; k++)
                                {
                                    if (miDetalle[k].IdentifAviso == IdentifAvisos[i] && miDetalle[k].Fecha.Day == diaMes && miDetalle[k].Fecha.Month == mes)
                                    {
                                        ocurrencias++;
                                    }

                                }

                                if (ocurrencias > 0)
                                {
                                    if (ocurrencias > FilasProducto[i])
                                    {
                                        FilasProducto[i] = ocurrencias;
                                    }
                                }


                            }
                        }

                        //inserta filas en cada uno de los productos de acuerdo a lo que hay en filasproducto
                        Fila = 20;

                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {
                            var rng = oSheet.Range("B" + Fila.ToString() + ":AK" + Fila.ToString());

                            rng.InsertRowsBelow(FilasProducto[i] - 1);

                            Fila += 6 + Convert.ToInt32(FilasProducto[i] - 1);
                        }

                        ////// comienzo a rellenar con valores //

                        Fila = 17;

                        for (int j = 0; j <= IdentifAvisos.Count - 1; j++)
                        {
                            AvisosDTO aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", IdentifAvisos[j].ToString()));

                            oSheet.Cell(Fila, 3).Value = aviso.EtiquetaProd;

                            Fila += 6 + FilasProducto[j] - 1;
                        }


                        Fila = 20;
                        int FilaPosicional = 20;

                        string[] Celdas = { "", "", "", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG" };

                        miDetalle = miDetalle.OrderBy(p => p.Dia).ThenBy(q => q.Hora).ThenBy(r => r.Salida).ToList();

                        for (int j = 0; j <= IdentifAvisos.Count - 1; j++)
                        {
                            for (int k = 1; k <= DiasEnMes; k++)
                            {

                                oSheet.Column(k + 2).Width = 3;

                                for (int l = 0; l <= miDetalle.Count - 1; l++)
                                {

                                    if (miDetalle[l].Fecha.Day == k &&
                                        miDetalle[l].Fecha.Month == mes &&
                                        miDetalle[l].IdentifAviso == IdentifAvisos[j])
                                    {
                                        oSheet.Cell(Fila, k + 2).Value = 1;

                                        int sumDesde = FilaPosicional;
                                        int sumHasta = FilaPosicional + FilasProducto[j] - 1;

                                        string Formula = string.Format("=+SUM({0}{1}:{2}{3})", Celdas[k + 2].ToString(), sumDesde.ToString(), Celdas[k + 2].ToString(), sumHasta.ToString());

                                        oSheet.Cell(FilaPosicional + FilasProducto[j], k + 2).FormulaA1 = Formula;

                                        Fila++;
                                    }

                                }

                                Fila = FilaPosicional;
                            }

                            FilaPosicional = Fila += 6 + FilasProducto[j] - 1;

                        }


                        //// SUBTOTALES DE CADA COLUMNA /////

                        int[] STP = new int[DiasEnMes + 1];
                        int[] STT = new int[DiasEnMes + 1];

                        FilaPosicional = 15;

                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {
                            FilaPosicional = FilaPosicional + 5 + FilasProducto[i];

                            for (int j = 1; j <= DiasEnMes; j++)
                            {
                                if (oSheet.Cell(FilaPosicional, j + 2).Value.ToString() == "")
                                {
                                    STP[j] = Convert.ToInt32(oSheet.Cell(FilaPosicional, j + 2).Value + "0");
                                }
                                else
                                {
                                    STP[j] = Convert.ToInt32(oSheet.Cell(FilaPosicional, j + 2).Value);
                                }

                                STT[j] += STP[j];
                            }
                        }

                        FilaPosicional += 2;

                        for (int j = 1; j <= DiasEnMes; j++)
                        {
                            oSheet.Cell(FilaPosicional, j + 2).Value = STT[j];
                        }

                        ////// LLENO MARGEN DERECHO CON TOTALES ////////////

                        FilaPosicional = 15;

                        decimal CostoTotal = 0;
                        decimal GrandTotal = 0;
                        int UnidadesTotales = 0;

                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {
                            FilaPosicional = FilaPosicional + 5;

                            for (int j = 0; j <= FilasProducto[i] - 1; j++)
                            {
                                oSheet.Cell("AH" + FilaPosicional.ToString()).FormulaA1 = string.Format("=SUM({0}{1}:{2}{3})", "C", FilaPosicional, "AG", FilaPosicional);

                                for (int k = 0; k <= miDetalle.Count - 1; k++)
                                {
                                    if (miDetalle[k].IdentifAviso == IdentifAvisos[i])
                                    {
                                        oSheet.Cell("AI" + FilaPosicional.ToString()).Value = miDetalle[k].CostoOp;
                                        oSheet.Cell("AJ" + FilaPosicional.ToString()).Value = miDetalle[k].Duracion;
                                        oSheet.Cell("AK" + FilaPosicional.ToString()).Value = Convert.ToDecimal(oSheet.Cell("AH" + FilaPosicional.ToString()).Value) * Convert.ToDecimal(oSheet.Cell("AI" + FilaPosicional.ToString()).Value);

                                        CostoTotal += Convert.ToDecimal(oSheet.Cell("AK" + FilaPosicional.ToString()).Value);

                                        break;
                                    }
                                }

                                oSheet.Cell("AK" + FilaPosicional.ToString()).Value = Convert.ToDecimal(oSheet.Cell("AH" + FilaPosicional.ToString()).Value) * Convert.ToDecimal(oSheet.Cell("AI" + FilaPosicional.ToString()).Value);

                                FilaPosicional++;

                            }

                            oSheet.Cell("AH" + FilaPosicional.ToString()).FormulaA1 = string.Format("=SUM({0}{1}:{2}{3})", "C", FilaPosicional, "AG", FilaPosicional);
                            oSheet.Cell("AI" + FilaPosicional.ToString()).Value = "";
                            oSheet.Cell("AJ" + FilaPosicional.ToString()).Value = "";
                            oSheet.Cell("AK" + FilaPosicional.ToString()).Value = CostoTotal;

                            GrandTotal += CostoTotal;

                            UnidadesTotales += Convert.ToInt32(oSheet.Cell("AH" + FilaPosicional.ToString()).Value);

                            CostoTotal = 0;

                        }

                        FilaPosicional += 2;

                        oSheet.Cell("AH" + FilaPosicional.ToString()).Value = UnidadesTotales;
                        oSheet.Cell("AK" + FilaPosicional.ToString()).Value = GrandTotal;

                        FilaPosicional += 3;

                        oSheet.Cell("AI" + FilaPosicional.ToString()).Value = _Espacio.Responsable;


                        DAO.SetUpDAO STUP = new DAO.SetUpDAO();

                        SetUpDTO setup = STUP.Read(1);

                        oSheet.Cell("AI" + (FilaPosicional + 1).ToString()).Value = setup.Sector;

                        EmpresaDTO empresa = new DAO.EmpresaDAO().Read(1);

                        oSheet.Cell("AI" + (FilaPosicional + 2).ToString()).Value = empresa.Name;

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

                        break;
                    }

            }

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

            oWB.SaveAs(nomArchivo);
            oWB.Dispose();
            oSheet = null;
            oWB = null;
            GC.Collect();
        }
Пример #6
0
        public void Detalle_OP_Calendario_Descriptivo(string nomArchivo)
        {
            ////// ClosedXML ////////
            XLWorkbook oWB = new XLWorkbook(nomArchivo);
            var oSheet = oWB.Worksheet(1);

            switch (_Estado.ToUpper())
            {
                #region Ordenado
                case "ORDENADO":
                    {

                        OrdenadoCabDTO miCabecera = (OrdenadoCabDTO)_Cabecera;
                        List<OrdenadoDetDTO> miDetalle = (List<OrdenadoDetDTO>)_Detalle;

                        miDetalle = miDetalle.OrderBy(P => P.Dia).ThenBy(Q => Q.Hora).ThenBy(R => R.Salida).ToList();

                        DTO.MediosPubDTO medio = CRUDHelper.Read(string.Format("IdentifMedio = '{0}'", _Espacio.IdentifMedio), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.MediosPub));

                        string[] Meses = { "", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };
                        string[] DiasSemana = { "", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo" };

                        AvisosDTO aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", miDetalle[0].IdentifAviso));

                        var dao = BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.AvisosIdAten);

                        AvisosIdAtenDTO ident =(AvisosIdAtenDTO)CRUDHelper.Read((string.Format("IdentifAviso = '{0}'", miDetalle[0].IdentifAviso)), dao);

                        dao = BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.IdentAtencion);

                        IdentAtencionDTO entity = (DTO.IdentAtencionDTO)CRUDHelper.Read(ident.RecId, dao);

                        if(entity != null)
                        {
                            oSheet.Cells("D16").Value = "Teléfonos " + entity.Telefono;
                        }

                        string aniomes = miCabecera.AnoMes.ToString();

                        List<string> IdentifAvisos = new List<string>();

                        for (int i = 0; i <= miDetalle.Count - 1; i++)
                        {

                            if (IdentifAvisos.Count == 0)
                            {
                                IdentifAvisos.Add(miDetalle[i].IdentifAviso);
                            }

                            bool lencontrado = false;

                            string scadena = miDetalle[i].IdentifAviso;

                            for (int j = 0; j <= IdentifAvisos.Count - 1; j++)
                            {
                                if (IdentifAvisos[j] == scadena)
                                {
                                    lencontrado = true;

                                    break;
                                }
                            }

                            if (!lencontrado)
                            {
                                IdentifAvisos.Add(miDetalle[i].IdentifAviso);

                                break;
                            }

                        }

                        List<string> Horarios = new List<string>();

                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {
                            int cantsal = 0;

                            for (int j = 0; j <= miDetalle.Count - 1; j++)
                            {
                                if (miDetalle[j].IdentifAviso == IdentifAvisos[i])
                                {
                                    cantsal++;

                                }

                            }
                        }

                        Horarios.Add("");

                        string sHora = string.Empty;

                        for (int i = 0; i <= miDetalle.Count - 1; i++)
                        {
                            sHora = miDetalle[i].Hora.ToString();

                            bool lEncontrado = false;

                            for (int j = 0; j <= Horarios.Count - 1; j++)
                            {
                                if (Horarios[j] == miDetalle[i].Hora.ToString())
                                {
                                    lEncontrado = true;

                                    break;
                                }
                            }

                            if (!lEncontrado)
                            {
                                Horarios.Add(miDetalle[i].Hora.ToString());
                            }
                        }

                        Horarios.RemoveAt(0);

                        Horarios.Sort();

                        string[] Celdas = { "", "", "B", "C", "D", "E", "F", "G", "H" };

                        if (Horarios.Count > 1)
                        {
                            oSheet.Row(41).InsertRowsBelow(Horarios.Count - 1);
                            oSheet.Row(36).InsertRowsBelow(Horarios.Count - 1);
                            oSheet.Row(31).InsertRowsBelow(Horarios.Count - 1);
                            oSheet.Row(26).InsertRowsBelow(Horarios.Count - 1);
                            oSheet.Row(21).InsertRowsBelow(Horarios.Count - 1);

                        }

                        int FilaBase = 21;

                        for (int j = 1; j <= 5; j++) //semanas
                        {

                            for (int k = 2; k <= 8; k++) //columnas
                            {
                                oSheet.Cell(FilaBase + Horarios.Count, k).FormulaA1 = string.Format("=COUNTA({0}{1}:{2}{3})", Celdas[k].ToString(), (FilaBase).ToString(), Celdas[k].ToString(), (FilaBase + Horarios.Count - 1).ToString());
                            }

                            FilaBase += 5 + Horarios.Count - 1;

                        }

                        int anio = Convert.ToInt32(miCabecera.AnoMes.ToString().Substring(0, 4));
                        int mes = Convert.ToInt32(miCabecera.AnoMes.ToString().Substring(4, 2));

                        int DiasEnMes = System.DateTime.DaysInMonth(anio, mes);

                        for (int x = 0; x <= 4; x++)
                        {
                            FilaBase = 20 + (5 * x);

                            FilaBase += ((Horarios.Count - 1) * x) + 1;

                            for (int i = 0; i <= Horarios.Count - 1; i++)
                            {
                                oSheet.Cell(FilaBase + i, 1).Value = Horarios[i].ToString();

                            }

                            for (int i = 2; i <= 8; i++)
                            {
                                string DiaAnio = oSheet.Cell(FilaBase - 1, i).Value.ToString();

                                for (int j = 0; j <= miDetalle.Count - 1; j++)
                                {
                                    if (miDetalle[j].Fecha.ToString() == DiaAnio)
                                    {
                                        for (int k = 0; k <= Horarios.Count - 1; k++)
                                        {
                                            if (miDetalle[j].Hora.ToString() == oSheet.Cell(FilaBase + k, 1).Value.ToString())
                                            {
                                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", miDetalle[j].IdentifAviso));

                                                oSheet.Cell(FilaBase + k, i).Value = aviso.EtiquetaProd;

                                                break;

                                            }
                                        }
                                    }
                                }
                            }

                            decimal CosOp = 0;

                            for (int i = 0; i <= miDetalle.Count - 1; i++)
                            {
                                CosOp += miDetalle[i].CostoOp;
                            }

                            int CeldaCosOp = 48 + ((Horarios.Count - 1) * 5);

                            oSheet.Cells("H" + CeldaCosOp.ToString()).Value = CosOp;


                            ////firma//
                            oSheet.Cells("H" + (CeldaCosOp + 5).ToString()).Value = _Espacio.Responsable;

                            DAO.SetUpDAO STUP = new DAO.SetUpDAO();
                            SetUpDTO setup = STUP.Read(1);
                            oSheet.Cells("H" + (CeldaCosOp + 6).ToString()).Value = setup.Sector;

                            EmpresaDTO empresa = new DAO.EmpresaDAO().Read(1);
                            oSheet.Cells("H" + (CeldaCosOp + 7).ToString()).Value = empresa.Name;

                            oSheet.Name = "O" + aniomes + miCabecera.IdentifEspacio;


                        }

                        break;
                    }
                #endregion
                #region Estimado
                case "ESTIMADO":
                    {

                        EstimadoCabDTO miCabecera = (EstimadoCabDTO)_Cabecera;
                        List<EstimadoDetDTO> miDetalle = (List<EstimadoDetDTO>)_Detalle;

                        miDetalle = miDetalle.OrderBy(P => P.Dia).ThenBy(Q => Q.Hora).ThenBy(R => R.Salida).ToList();

                        DTO.MediosPubDTO medio = CRUDHelper.Read(string.Format("IdentifMedio = '{0}'", _Espacio.IdentifMedio), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.MediosPub));

                        string[] Meses = { "", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };
                        string[] DiasSemana = { "", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo" };

                        AvisosDTO aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", miDetalle[0].IdentifAviso));

                        var dao = BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.AvisosIdAten);

                        AvisosIdAtenDTO ident =(AvisosIdAtenDTO)CRUDHelper.Read((string.Format("IdentifAviso = '{0}'", miDetalle[0].IdentifAviso)), dao);

                        dao = BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.IdentAtencion);

                        IdentAtencionDTO entity = (DTO.IdentAtencionDTO)CRUDHelper.Read(ident.RecId, dao);

                        if(entity != null)
                        {
                            oSheet.Cells("D16").Value = "Teléfonos " + entity.Telefono;
                        }

                        string aniomes = miCabecera.AnoMes.ToString();

                        List<string> IdentifAvisos = new List<string>();

                        for (int i = 0; i <= miDetalle.Count - 1; i++)
                        {

                            if (IdentifAvisos.Count == 0)
                            {
                                IdentifAvisos.Add(miDetalle[i].IdentifAviso);
                            }

                            bool lencontrado = false;

                            string scadena = miDetalle[i].IdentifAviso;

                            for (int j = 0; j <= IdentifAvisos.Count - 1; j++)
                            {
                                if (IdentifAvisos[j] == scadena)
                                {
                                    lencontrado = true;

                                    break;
                                }
                            }

                            if (!lencontrado)
                            {
                                IdentifAvisos.Add(miDetalle[i].IdentifAviso);

                                break;
                            }

                        }

                        List<string> Horarios = new List<string>();

                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {
                            int cantsal = 0;

                            for (int j = 0; j <= miDetalle.Count - 1; j++)
                            {
                                if (miDetalle[j].IdentifAviso == IdentifAvisos[i])
                                {
                                    cantsal++;

                                }

                            }
                        }

                        Horarios.Add("");

                        string sHora = string.Empty;

                        for (int i = 0; i <= miDetalle.Count - 1; i++)
                        {
                            sHora = miDetalle[i].Hora.ToString();

                            bool lEncontrado = false;

                            for (int j = 0; j <= Horarios.Count - 1; j++)
                            {
                                if (Horarios[j] == miDetalle[i].Hora.ToString())
                                {
                                    lEncontrado = true;

                                    break;
                                }
                            }

                            if (!lEncontrado)
                            {
                                Horarios.Add(miDetalle[i].Hora.ToString());
                            }
                        }

                        Horarios.RemoveAt(0);

                        Horarios.Sort();

                        string[] Celdas = { "", "", "B", "C", "D", "E", "F", "G", "H" };

                        if (Horarios.Count > 1)
                        {
                            oSheet.Row(41).InsertRowsBelow(Horarios.Count - 1);
                            oSheet.Row(36).InsertRowsBelow(Horarios.Count - 1);
                            oSheet.Row(31).InsertRowsBelow(Horarios.Count - 1);
                            oSheet.Row(26).InsertRowsBelow(Horarios.Count - 1);
                            oSheet.Row(21).InsertRowsBelow(Horarios.Count - 1);

                        }

                        int FilaBase = 21;

                        for (int j = 1; j <= 5; j++) //semanas
                        {

                            for (int k = 2; k <= 8; k++) //columnas
                            {
                                oSheet.Cell(FilaBase + Horarios.Count, k).FormulaA1 = string.Format("=COUNTA({0}{1}:{2}{3})", Celdas[k].ToString(), (FilaBase).ToString(), Celdas[k].ToString(), (FilaBase + Horarios.Count - 1).ToString());
                            }

                            FilaBase += 5 + Horarios.Count - 1;

                        }

                        int anio = Convert.ToInt32(miCabecera.AnoMes.ToString().Substring(0, 4));
                        int mes = Convert.ToInt32(miCabecera.AnoMes.ToString().Substring(4, 2));

                        int DiasEnMes = System.DateTime.DaysInMonth(anio, mes);

                        for (int x = 0; x <= 4; x++)
                        {
                            FilaBase = 20 + (5 * x);

                            FilaBase += ((Horarios.Count - 1) * x) + 1;

                            for (int i = 0; i <= Horarios.Count - 1; i++)
                            {
                                oSheet.Cell(FilaBase + i, 1).Value = Horarios[i].ToString();

                            }

                            for (int i = 2; i <= 8; i++)
                            {
                                string DiaAnio = oSheet.Cell(FilaBase - 1, i).Value.ToString();

                                for (int j = 0; j <= miDetalle.Count - 1; j++)
                                {
                                    if (miDetalle[j].Fecha.ToString() == DiaAnio)
                                    {
                                        for (int k = 0; k <= Horarios.Count - 1; k++)
                                        {
                                            if (miDetalle[j].Hora.ToString() == oSheet.Cell(FilaBase + k, 1).Value.ToString())
                                            {
                                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", miDetalle[j].IdentifAviso));

                                                oSheet.Cell(FilaBase + k, i).Value = aviso.EtiquetaProd;

                                                break;

                                            }
                                        }
                                    }
                                }
                            }

                            decimal CosOp = 0;

                            for (int i = 0; i <= miDetalle.Count - 1; i++)
                            {
                                CosOp += miDetalle[i].CostoOp;
                            }

                            int CeldaCosOp = 48 + ((Horarios.Count - 1) * 5);

                            oSheet.Cells("H" + CeldaCosOp.ToString()).Value = CosOp;


                            ////firma//
                            oSheet.Cells("H" + (CeldaCosOp + 5).ToString()).Value = _Espacio.Responsable;

                            DAO.SetUpDAO STUP = new DAO.SetUpDAO();
                            SetUpDTO setup = STUP.Read(1);
                            oSheet.Cells("H" + (CeldaCosOp + 6).ToString()).Value = setup.Sector;

                            EmpresaDTO empresa = new DAO.EmpresaDAO().Read(1);
                            oSheet.Cells("H" + (CeldaCosOp + 7).ToString()).Value = empresa.Name;

                            oSheet.Name = "O" + aniomes + miCabecera.IdentifEspacio;


                        }

                        break;
                    }
                #endregion
                #region Certificado
                case "CERTIFICADO":
                    {
                        CertificadoCabDTO miCabecera = (CertificadoCabDTO)_Cabecera;
                        List<CertificadoDetDTO> miDetalle = (List<CertificadoDetDTO>)_Detalle;

                        miDetalle = miDetalle.OrderBy(P => P.Dia).ThenBy(Q => Q.Hora).ThenBy(R => R.Salida).ToList();

                        DTO.MediosPubDTO medio = CRUDHelper.Read(string.Format("IdentifMedio = '{0}'", _Espacio.IdentifMedio), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.MediosPub));

                        string[] Meses = { "", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" };
                        string[] DiasSemana = { "", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo" };

                        AvisosDTO aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", miDetalle[0].IdentifAviso));

                        var dao = BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.AvisosIdAten);

                        AvisosIdAtenDTO ident = (AvisosIdAtenDTO)CRUDHelper.Read((string.Format("IdentifAviso = '{0}'", miDetalle[0].IdentifAviso)), dao);

                        dao = BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.IdentAtencion);

                        IdentAtencionDTO entity = (DTO.IdentAtencionDTO)CRUDHelper.Read(ident.RecId, dao);

                        if (entity != null)
                        {
                            oSheet.Cells("D16").Value = "Teléfonos " + entity.Telefono;
                        }

                        string aniomes = miCabecera.AnoMes.ToString();

                        List<string> IdentifAvisos = new List<string>();

                        for (int i = 0; i <= miDetalle.Count - 1; i++)
                        {

                            if (IdentifAvisos.Count == 0)
                            {
                                IdentifAvisos.Add(miDetalle[i].IdentifAviso);
                            }

                            bool lencontrado = false;

                            string scadena = miDetalle[i].IdentifAviso;

                            for (int j = 0; j <= IdentifAvisos.Count - 1; j++)
                            {
                                if (IdentifAvisos[j] == scadena)
                                {
                                    lencontrado = true;

                                    break;
                                }
                            }

                            if (!lencontrado)
                            {
                                IdentifAvisos.Add(miDetalle[i].IdentifAviso);

                                break;
                            }

                        }

                        List<string> Horarios = new List<string>();

                        for (int i = 0; i <= IdentifAvisos.Count - 1; i++)
                        {
                            int cantsal = 0;

                            for (int j = 0; j <= miDetalle.Count - 1; j++)
                            {
                                if (miDetalle[j].IdentifAviso == IdentifAvisos[i])
                                {
                                    cantsal++;

                                }

                            }
                        }

                        Horarios.Add("");

                        string sHora = string.Empty;

                        for (int i = 0; i <= miDetalle.Count - 1; i++)
                        {
                            sHora = miDetalle[i].Hora.ToString();

                            bool lEncontrado = false;

                            for (int j = 0; j <= Horarios.Count - 1; j++)
                            {
                                if (Horarios[j] == miDetalle[i].Hora.ToString())
                                {
                                    lEncontrado = true;

                                    break;
                                }
                            }

                            if (!lEncontrado)
                            {
                                Horarios.Add(miDetalle[i].Hora.ToString());
                            }
                        }

                        Horarios.RemoveAt(0);

                        Horarios.Sort();

                        string[] Celdas = { "", "", "B", "C", "D", "E", "F", "G", "H" };

                        if (Horarios.Count > 1)
                        {
                            oSheet.Row(41).InsertRowsBelow(Horarios.Count - 1);
                            oSheet.Row(36).InsertRowsBelow(Horarios.Count - 1);
                            oSheet.Row(31).InsertRowsBelow(Horarios.Count - 1);
                            oSheet.Row(26).InsertRowsBelow(Horarios.Count - 1);
                            oSheet.Row(21).InsertRowsBelow(Horarios.Count - 1);

                        }

                        int FilaBase = 21;

                        for (int j = 1; j <= 5; j++) //semanas
                        {

                            for (int k = 2; k <= 8; k++) //columnas
                            {
                                oSheet.Cell(FilaBase + Horarios.Count, k).FormulaA1 = string.Format("=COUNTA({0}{1}:{2}{3})", Celdas[k].ToString(), (FilaBase).ToString(), Celdas[k].ToString(), (FilaBase + Horarios.Count - 1).ToString());
                            }

                            FilaBase += 5 + Horarios.Count - 1;

                        }

                        int anio = Convert.ToInt32(miCabecera.AnoMes.ToString().Substring(0, 4));
                        int mes = Convert.ToInt32(miCabecera.AnoMes.ToString().Substring(4, 2));

                        int DiasEnMes = System.DateTime.DaysInMonth(anio, mes);

                        for (int x = 0; x <= 4; x++)
                        {
                            FilaBase = 20 + (5 * x);

                            FilaBase += ((Horarios.Count - 1) * x) + 1;

                            for (int i = 0; i <= Horarios.Count - 1; i++)
                            {
                                oSheet.Cell(FilaBase + i, 1).Value = Horarios[i].ToString();

                            }

                            for (int i = 2; i <= 8; i++)
                            {
                                string DiaAnio = oSheet.Cell(FilaBase - 1, i).Value.ToString();

                                for (int j = 0; j <= miDetalle.Count - 1; j++)
                                {
                                    if (miDetalle[j].Fecha.ToString() == DiaAnio)
                                    {
                                        for (int k = 0; k <= Horarios.Count - 1; k++)
                                        {
                                            if (miDetalle[j].Hora.ToString() == oSheet.Cell(FilaBase + k, 1).Value.ToString())
                                            {
                                                aviso = Business.Avisos.Read(string.Format("IdentifAviso = '{0}'", miDetalle[j].IdentifAviso));

                                                oSheet.Cell(FilaBase + k, i).Value = aviso.EtiquetaProd;

                                                break;

                                            }
                                        }
                                    }
                                }
                            }

                            decimal CosOp = 0;

                            for (int i = 0; i <= miDetalle.Count - 1; i++)
                            {
                                CosOp += miDetalle[i].CostoOp;
                            }

                            int CeldaCosOp = 48 + ((Horarios.Count - 1) * 5);

                            oSheet.Cells("H" + CeldaCosOp.ToString()).Value = CosOp;


                            ////firma//
                            oSheet.Cells("H" + (CeldaCosOp + 5).ToString()).Value = _Espacio.Responsable;

                            DAO.SetUpDAO STUP = new DAO.SetUpDAO();
                            SetUpDTO setup = STUP.Read(1);
                            oSheet.Cells("H" + (CeldaCosOp + 6).ToString()).Value = setup.Sector;

                            EmpresaDTO empresa = new DAO.EmpresaDAO().Read(1);
                            oSheet.Cells("H" + (CeldaCosOp + 7).ToString()).Value = empresa.Name;

                            oSheet.Name = "O" + aniomes + miCabecera.IdentifEspacio;


                        }

                        break;
                    }

                #endregion
            }

            oWB.SaveAs(nomArchivo);
            oWB.Dispose();
            oSheet = null;
            oWB = null;
            GC.Collect();
        }