public ReclamosController()
 {
     this.dbRepository      = new DB.ReclamosRepository();
     this.segurosRepository = new DB.SegurosRepository();
 }
        public object Post([FromQuery] string apiKey, [FromQuery] string recaptcha, [FromBody] Models.Reclamos reclamo)
        {
            try
            {
                //if (apiKey == null)
                //{
                //    return new EmptyResponse { Status = ResponseStatuses.ErrorApiKey.ToString() };
                //}

                //var itemKey = this.apiKeyRepository.FinByKey(apiKey);

                //if (itemKey == null)
                //{
                //    return new EmptyResponse { Status = ResponseStatuses.ErrorApiKey.ToString() };
                //}

                //if (!itemKey.Habilitado)
                //{
                //    return new EmptyResponse { Status = ResponseStatuses.ErrorApiKeyDeshabilitado.ToString() };
                //}


                // hacer algunas validaciones
                // validar el recaptcha
                if (recaptcha == null)
                {
                    return(new EmptyResponse {
                        Status = ResponseStatuses.ErrorParametrosIncorrectos.ToString()
                    });
                }

                Models.RecaptchaResponse recaptchaResponse = Utils.GoogleRecaptcha.VerifyRecaptcha(recaptcha);

                if (recaptchaResponse == null || !recaptchaResponse.success)
                {
                    return(new EmptyResponse {
                        Status = ResponseStatuses.ErrorParametrosIncorrectos.ToString(),
                        Message = "Ocurrió un error en la verificación del código captcha"
                    });
                }

                // Se verifica que no se haya realizado un registro desde el mismo IP
                //var ultimoReclamo = dbRepository.GetReclamoByIp(Utils.Http.GetIPAddressAsync().GetAwaiter().GetResult());
                //if (ultimoReclamo != null)
                //{
                //    TimeSpan ts = DateTime.Now - ultimoReclamo.FechaCreacion;
                //    if (ts.Minutes <= 60)
                //    {
                //        return new ReclamosResponse
                //        {
                //            Status = ResponseStatuses.ErrorParametrosIncorrectos.ToString(),
                //            Message = "Ya ha realizado un reclamo recientemente. Debe esperar al menos una hora para realizar un nuevo reclamo",
                //            Data = null
                //        };
                //    }
                //}

                var pensionesRepository = new DB.PensionesRepository();
                var data = pensionesRepository.GetEntidad(reclamo.CodigoEntidad);
                if (data == null)
                {
                    var segurosRepository = new DB.SegurosRepository();
                    data = segurosRepository.GetEntidad(reclamo.CodigoEntidad);
                }

                if (data == null)
                {
                    return(new ReclamosResponse
                    {
                        Status = ResponseStatuses.ErrorParametrosIncorrectos.ToString(),
                        Message = "El código de la entidad es inválido.",
                        Data = null
                    });
                }

                // si todo esta bien, guardar
                reclamo.FechaReclamo    = DateTime.Now;
                reclamo.Estado          = "P";
                reclamo.UsuarioCreacion = "web";
                reclamo.FechaCreacion   = DateTime.Now;
                reclamo.Ip = this.Request.HttpContext.Connection.RemoteIpAddress.ToString();


                var result = this.dbRepository.GuardarReclamo(reclamo);

                //this.apiKeyRepository.AddLog(
                //     itemKey.Id,
                //     this.Request.HttpContext.Connection.RemoteIpAddress.ToString(),
                //     Utils.Utilities.GetIPAddressAsync().GetAwaiter().GetResult(),
                //     this.Request.Method,
                //     this.Request.Path,
                //     this.Request.QueryString.ToString(),
                //     this.GetType().FullName);

                if (result)
                {
                    var builder = new ConfigurationBuilder();
                    builder.SetBasePath(Directory.GetCurrentDirectory());
                    builder.AddJsonFile("appsettings.json");
                    var  ReclamoEmailConfig = builder.Build();
                    var  EmailFrom          = ReclamoEmailConfig["Reclamo:EmailFrom"];
                    var  EmailFromUser      = ReclamoEmailConfig["Reclamo:EmailFromUser"];
                    var  EmailTo            = ReclamoEmailConfig["Reclamo:EmailTo"];
                    var  EmailToUser        = ReclamoEmailConfig["Reclamo:EmailToUser"];
                    var  MailServer         = ReclamoEmailConfig["Reclamo:MailServer"];
                    int  MailPort           = Convert.ToInt16(ReclamoEmailConfig["Reclamo:MailPort"]);
                    bool MailUseSsl         = Convert.ToBoolean(ReclamoEmailConfig["Reclamo:MailUseSsl"]);
                    var  MailUser           = ReclamoEmailConfig["Reclamo:MailUser"];
                    var  MailUserPassword   = ReclamoEmailConfig["Reclamo:MailUserPassword"];
                    var  MailDefaultSubject = ReclamoEmailConfig["Reclamo:MailDefaultSubject"];

                    var message = new MimeMessage();
                    message.From.Add(new MailboxAddress(EmailFromUser, EmailFrom));

                    message.To.Add(new MailboxAddress(EmailToUser, EmailTo));
                    message.Subject = MailDefaultSubject;

                    message.Body = new TextPart("plain")
                    {
                        Text = @"RECLAMANTE: " + reclamo.NombreCompleto +
                               "\n" + reclamo.TipoIdentificacion + ": " + reclamo.NumIdentificacion + " " + reclamo.ExpIdentificacion +
                               "\nCELULAR: " + reclamo.Celular +
                               "\nCORREO: " + reclamo.CorreoElectronico +
                               "\nDIRECCIÓN: " + reclamo.Direccion +
                               "\nENTIDAD: " + reclamo.CodigoEntidad +
                               "\nDESCRIPCIÓN DEL RECLAMO: " + reclamo.DescripcionReclamo +
                               "\nFECHA DEL RECLAMO: " + reclamo.FechaReclamo
                    };

                    using (var client = new SmtpClient())
                    {
                        // For demo-purposes, accept all SSL certificates (in case the server supports STARTTLS)
                        client.ServerCertificateValidationCallback = (s, c, h, e) => true;

                        client.Connect(MailServer, MailPort, MailUseSsl);

                        // Note: since we don't have an OAuth2 token, disable
                        // the XOAUTH2 authentication mechanism.
                        client.AuthenticationMechanisms.Remove("XOAUTH2");

                        // Note: only needed if the SMTP server requires authentication
                        client.Authenticate(MailUser, MailUserPassword);

                        client.Send(message);
                        client.Disconnect(true);
                    }

                    return(new ReclamosResponse
                    {
                        Status = ResponseStatuses.Correcto.ToString(),
                        Message = "Se ha guardado el registro.",
                        Data = null
                    });
                }
                else
                {
                    return(new ReclamosResponse
                    {
                        Status = ResponseStatuses.ErrorParametrosIncorrectos.ToString(),
                        Message = "Ocurrió un error, no se ha guardado el registro.",
                        Data = result
                    });
                }
            }
            catch (Exception ex)
            {
                return(new ReclamosResponse
                {
                    Status = ResponseStatuses.ErrorExcepcion.ToString(),
                    Message = ex.Message,
                    Data = null
                });
            }
        }
Ejemplo n.º 3
0
 public EntidadesController()
 {
     this.segurosRepository = new DB.SegurosRepository();
 }