private string buscarAsuntoCorreo(tipoDeCargaArchivo _tipoArchivo)
        {
            string asunto = "";

            if (_tipoArchivo == tipoDeCargaArchivo.ContratosDeCooperacion ||
                _tipoArchivo == tipoDeCargaArchivo.ContratosDeCooperacionFirmados)
            {
                asunto = "Contrato de Cooperación e Instructivos";
            }

            if (_tipoArchivo == tipoDeCargaArchivo.ActasDeLiquidacion)
            {
                asunto = "Acta de Liquidación del Contrato";
            }

            if (_tipoArchivo == tipoDeCargaArchivo.ProrrogasDeContratos)
            {
                asunto = "Prorroga Contrato de Cooperación";
            }

            if (_tipoArchivo == tipoDeCargaArchivo.ActasDeTerminacion)
            {
                asunto = "Acta de Terminación del Contrato";
            }

            return(asunto);
        }
        public List <CargueMasivoMessage> cargarArchivo(tipoDeCargaArchivo _tipoArchivo
                                                        , int _idUsuario, FileUpload fileUpload
                                                        , string _correoEnvia
                                                        , ref string mensajeError)
        {
            List <CargueMasivoMessage> listCarga = new List <CargueMasivoMessage>();

            try
            {
                string BaseFile = _tipoArchivo + "_" + _idUsuario + "_"
                                  + string.Format("{0:00}", DateTime.Now.Day)
                                  + string.Format("{0:00}", DateTime.Now.Month)
                                  + DateTime.Now.Year + "_"
                                  + string.Format("{0:00}", DateTime.Now.Hour)
                                  + string.Format("{0:00}", DateTime.Now.Minute) + ".zip";

                string BaseDirectory = ConfigurationManager.AppSettings.Get("RutaIP")
                                       + ConfigurationManager.AppSettings.Get("DirVirtual") + _tipoArchivo + "\\";

                string FullBaseFilDirectory = BaseDirectory + BaseFile;

                string OutPutDirectory = ConfigurationManager.AppSettings.Get("RutaIP") + ConfigurationManager.AppSettings.Get("DirVirtual") + "Proyecto\\";

                string rutaArchivo = FullBaseFilDirectory;

                if (!fileUpload.HasFile)
                {
                    throw new ApplicationException("Archivo invalido");
                }
                if (!fileUpload.FileName.Contains(".zip"))
                {
                    throw new ApplicationException("Debe ser un archivo con extensión .zip");
                }
                if (!(fileUpload.PostedFile.ContentLength < 1048576000))
                {
                    throw new ApplicationException("El archivo es muy pesado, maximo 100 megas.");
                }

                cargarZip(fileUpload, rutaArchivo, BaseDirectory);

                listCarga = descomprimirZip(rutaArchivo, OutPutDirectory, _idUsuario
                                            , _tipoArchivo, _correoEnvia);


                mensajeError = "OK";
            }
            catch (ApplicationException ex)
            {
                mensajeError = "Advertencia, detalle : " + ex.Message;
            }
            catch (Exception ex)
            {
                mensajeError = ex.Message;
            }
            return(listCarga);
        }
        private List <CargueMasivoMessage> descomprimirZip(string fullBaseFileDirectory
                                                           , string OutPutDirectory, int _codUsuario
                                                           , tipoDeCargaArchivo _tipoArchivo, string _correoEnvia)
        {
            List <CargueMasivoMessage> messages = new List <CargueMasivoMessage>();

            using (ZipFile zip = ZipFile.Read(fullBaseFileDirectory))
            {
                foreach (ZipEntry zipFile in zip)
                {
                    try
                    {
                        string mensajeError = "";
                        if (!IsValidFile(zipFile.FileName, ref mensajeError))
                        {
                            throw new ApplicationException(mensajeError);
                        }

                        var codigoProyecto = GetCodigoProyecto(zipFile.FileName);

                        if (!ProyectoExist(codigoProyecto, ref mensajeError))
                        {
                            throw new ApplicationException(mensajeError);
                        }

                        //Validar Operador si es administrador no se valida
                        if (OperadorXContacto(_codUsuario).IdOperador != 0)
                        {
                            if (OperadorXContacto(_codUsuario).IdOperador != OperadorXProyecto(codigoProyecto).IdOperador)
                            {
                                throw new ApplicationException("El operador no es el mismo del proyecto");
                            }
                        }


                        var customOutPutDirectory = OutPutDirectory + "Proyecto_" + codigoProyecto + "\\";

                        if (!Directory.Exists(customOutPutDirectory))
                        {
                            Directory.CreateDirectory(customOutPutDirectory);
                        }
                        if (File.Exists(customOutPutDirectory + zipFile.FileName))
                        {
                            throw new ApplicationException("Existe un archivo con el mismo nombre, renombrelo para poder subirlo.");
                        }

                        //Se coloca el archivo en la carpeta del proyecto
                        zipFile.Extract(customOutPutDirectory, ExtractExistingFileAction.OverwriteSilently);

                        InsertRegistroDB(codigoProyecto, zipFile.FileName, _codUsuario, _tipoArchivo);

                        //si es diferente a otrosdocumentos se requiere notificacion por correo
                        if (tipoDeCargaArchivo.OtrosDocumentos != _tipoArchivo)
                        {
                            //Traer usuarios para enviar correos
                            var usuariosEnviarCorreo = correosNotificacionBLL.enviarCorreoContactosDTO(codigoProyecto);

                            var emprendedores = usuariosEnviarCorreo.Where(x => x.GrupoContacto == "Emprendedor")
                                                .Select(x => x).ToList();

                            bool correosEnviados = false;

                            //Recorrer emprendedores
                            foreach (var emp in emprendedores)
                            {
                                //traer Mensaje del correo
                                string MensajeCorreo = buscarMensajeCorreo(_tipoArchivo, codigoProyecto
                                                                           , emp.Nombres, _correoEnvia);
                                string asunto = buscarAsuntoCorreo(_tipoArchivo);
                                //Enviar Correo a Emprendedor
                                correosEnviados = EnviarCorreo(codigoProyecto, _codUsuario, emp.codContacto, emp.Nombres
                                                               , emp.Email, asunto, MensajeCorreo, ref mensajeError);


                                if (!correosEnviados)
                                {
                                    //ingresar notificacion de NO envio
                                    messages.Add(new CargueMasivoMessage
                                    {
                                        Archivo        = zipFile.FileName,
                                        CodigoProyecto = null,
                                        Message        = "Advertencia : " + mensajeError,
                                        Error          = ErrorType.Warning
                                    });
                                }


                                if (tipoDeCargaArchivo.ContratosDeCooperacionFirmados != _tipoArchivo)
                                {
                                    //Enviar Correos Asesores

                                    //Asesores
                                    var asesores = usuariosEnviarCorreo.Where(x => x.GrupoContacto == "Asesor")
                                                   .Select(x => x).ToList();

                                    var mensajesRespuestaAsesores = EnviarCorreoOtrosPerfiles(asesores, codigoProyecto, _codUsuario, emp.codContacto, emp.Nombres
                                                                                              , asunto, MensajeCorreo, zipFile.FileName, ref mensajeError);

                                    messages.AddRange(mensajesRespuestaAsesores);

                                    //Enviar Correos Interventores
                                    //Interventores
                                    var interventores = usuariosEnviarCorreo.Where(x => x.GrupoContacto == "Interventor")
                                                        .Select(x => x).ToList();

                                    var mensajesRespuestaInterventores = EnviarCorreoOtrosPerfiles(interventores, codigoProyecto, _codUsuario, emp.codContacto, emp.Nombres
                                                                                                   , asunto, MensajeCorreo, zipFile.FileName, ref mensajeError);

                                    messages.AddRange(mensajesRespuestaInterventores);
                                }
                            }

                            if (correosEnviados)
                            {
                                //Si se realizó todo correctamente
                                messages.Add(new CargueMasivoMessage
                                {
                                    Archivo        = zipFile.FileName,
                                    CodigoProyecto = codigoProyecto,
                                    Message        = "Cargado exitosamente.",
                                    Url            = ConfigurationManager.AppSettings.Get("RutaWebSite") + "Documentos/Proyecto/Proyecto_" + codigoProyecto + "/" + zipFile.FileName,
                                    Error          = ErrorType.success
                                });
                            }
                        }
                        else //Otros Documentos
                        {
                            //Si se realizó todo correctamente
                            messages.Add(new CargueMasivoMessage
                            {
                                Archivo        = zipFile.FileName,
                                CodigoProyecto = codigoProyecto,
                                Message        = "Cargado exitosamente.",
                                Url            = ConfigurationManager.AppSettings.Get("RutaWebSite") + "Documentos/Proyecto/Proyecto_" + codigoProyecto + "/" + zipFile.FileName,
                                Error          = ErrorType.success
                            });
                        }
                    }
                    catch (ApplicationException ex)
                    {
                        messages.Add(new CargueMasivoMessage
                        {
                            Archivo        = zipFile.FileName,
                            CodigoProyecto = null,
                            Message        = "Advertencia : " + ex.Message,
                            Error          = ErrorType.Warning
                        });
                    }
                    catch (Exception ex)
                    {
                        messages.Add(new CargueMasivoMessage
                        {
                            Archivo        = zipFile.FileName,
                            CodigoProyecto = null,
                            Message        = "Advertencia : " + ex.Message,
                            Error          = ErrorType.Error
                        });
                    }
                }
            }

            return(messages);
        }
        private void InsertRegistroDB(int codigoProyecto, string fileName, int _codUsuario, tipoDeCargaArchivo _tipoArchivo)
        {
            using (FonadeDBLightDataContext db = new FonadeDBLightDataContext(conexion))
            {
                var archivo = new ArchivosAdicionalesContrato
                {
                    CodContacto    = _codUsuario,
                    CodProyecto    = codigoProyecto,
                    FechaIngreso   = DateTime.Now,
                    NombreArchivo  = fileName,
                    NombreContacto = nombreContacto(_codUsuario),
                    ruta           = "Documentos/Proyecto/Proyecto_" + codigoProyecto + "/" + fileName,
                    TipoArchivo    = _tipoArchivo.ToString(),
                    Eliminado      = false
                };
                db.ArchivosAdicionalesContrato.InsertOnSubmit(archivo);
                db.SubmitChanges();
            }

            //using (Datos.FonadeDBDataContext db = new Datos.FonadeDBDataContext(conexion))
            //{
            //    var archivoContrato = new ContratosArchivosAnexo
            //    {
            //        CodProyecto = codigoProyecto,
            //        NombreArchivo = fileName,
            //        ruta = "Documentos/Proyecto/Proyecto_" + codigoProyecto + "/" + fileName,
            //        CodContacto = _codUsuario,
            //        FechaIngreso = DateTime.Now
            //    };
            //    db.ContratosArchivosAnexos.InsertOnSubmit(archivoContrato);
            //    db.SubmitChanges();
            //}
        }
        private string buscarMensajeCorreo(tipoDeCargaArchivo _tipoArchivo, int _codProyecto, string _nombreRecibe
                                           , string _correoEnvia)
        {
            string mensaje = "";

            var operador = OperadorXProyecto(_codProyecto);

            string numeroContrato = buscarContratoEmpresa(_codProyecto);

            if (_tipoArchivo == tipoDeCargaArchivo.ContratosDeCooperacionFirmados)
            {
                mensaje = "Emprendedor(a) "
                          + Environment.NewLine +
                          _nombreRecibe
                          + Environment.NewLine + Environment.NewLine +
                          "Asunto:  Contrato de Cooperación e Instructivos "
                          + Environment.NewLine + Environment.NewLine +
                          "Se informa que el contrato de cooperacion del proyecto ya se encuentra " +
                          "cargado y firmado en la pestaña contrato, seccion archivos.";
            }

            if (_tipoArchivo == tipoDeCargaArchivo.ContratosDeCooperacion)
            {
                mensaje = "Emprendedor(a) "
                          + Environment.NewLine +
                          _nombreRecibe
                          + Environment.NewLine + Environment.NewLine +
                          "Asunto:  Contrato de Cooperación e Instructivos "
                          + Environment.NewLine + Environment.NewLine +
                          "Se informa que el contrato de cooperación No " + numeroContrato + "  " +
                          "se encuentra cargada en la plataforma Fondo Emprender " +
                          "con el fin de que sea firmada digitalmente, " +
                          "y posteriormente enviada a " + operador.NombreOperador + " " +
                          "a la dirección " + _correoEnvia + ". " +
                          "con el fin de surtir el trámite interno pertinente.";
            }

            if (_tipoArchivo == tipoDeCargaArchivo.ActasDeLiquidacion)
            {
                mensaje = "Emprendedor(a) "
                          + Environment.NewLine +
                          _nombreRecibe
                          + Environment.NewLine + Environment.NewLine +
                          "Asunto: Acta de Liquidación del Contrato " + numeroContrato
                          + Environment.NewLine + Environment.NewLine +
                          "Se informa que acta liquidación del contrato de cooperación No " + numeroContrato + " " +
                          "se encuentra cargada en la plataforma de fondo Emprender " +
                          "en la pestaña de contrato, con el fin de que sea firmada " +
                          "y posteriormente enviada a " + operador.NombreOperador + " a la " +
                          "dirección " + _correoEnvia + ". " +
                          "Esta debe ser recibida  y diligenciada virtualmente lo más pronto posible, " +
                          "con el fin de surtir el trámite interno pertinente.";
            }

            if (_tipoArchivo == tipoDeCargaArchivo.ProrrogasDeContratos)
            {
                mensaje = "Emprendedor(a) "
                          + Environment.NewLine +
                          _nombreRecibe
                          + Environment.NewLine + Environment.NewLine +
                          "Asunto: Prorroga Contrato de Cooperación"
                          + Environment.NewLine + Environment.NewLine +
                          "Se informa que la prórroga al contrato de cooperación No " + numeroContrato + " " +
                          "la cual se encuentra cargada en la plataforma Fondo Emprender  " +
                          "con el fin de que sea firmada, y posteriormente " +
                          "enviada a " + operador.NombreOperador + "  a " +
                          "la dirección " + _correoEnvia + ", con el fin de surtir el trámite interno pertinente.";
            }

            if (_tipoArchivo == tipoDeCargaArchivo.ActasDeTerminacion)
            {
                mensaje = "Emprendedor(a) "
                          + Environment.NewLine +
                          _nombreRecibe
                          + Environment.NewLine + Environment.NewLine +
                          "Asunto:  Acta de Terminación del Contrato " + numeroContrato
                          + Environment.NewLine + Environment.NewLine +
                          "Se informa que acta Terminación del contrato de cooperación No " + numeroContrato + " " +
                          "se encuentra cargada en la plataforma de fondo Emprender en la pestaña de contrato, " +
                          "con el fin de que sea firmada y posteriormente enviada a " + operador.NombreOperador + " " +
                          "a la dirección " + _correoEnvia + ". " +
                          "Esta debe ser recibida  y diligenciada virtualmente lo más pronto posible, " +
                          "con el fin de surtir el trámite interno pertinente. ";
            }

            return(mensaje);
        }