public JsonResponse GetLogin([FromBody] UsuarioAsociado usuarioAsociado)
 {
     var jsonResponse = new JsonResponse { Success = false };
     try
     {
         UsuarioAsociado usuarioAsociadoFound = UsuarioAsociadoBL.Instancia.GetLogin(usuarioAsociado.Username, usuarioAsociado.Clave);
         if (usuarioAsociadoFound.UsuarioAsociadoId > 0)
         {
             if(usuarioAsociadoFound.IsOnline==0)
             {
                 UsuarioAsociadoModel model = new UsuarioAsociadoModel();
                 model.DomainToModel(usuarioAsociadoFound);
                 jsonResponse.Success = true;
                 jsonResponse.Data = model;
             }
             else
             {
                 jsonResponse.Message = Mensajes.No_Accede_Debido_A_Otra_Sesion_Iniciada;
             }
         }
         else
         {
             jsonResponse.Message = Mensajes.No_Existe_Usuario;
         }
     }
     catch (Exception ex)
     {
         LogError(ex);
         jsonResponse.Message = Mensajes.Intentelo_Mas_Tarde;
     }
     return jsonResponse;
 }
        public JsonResponse GetByAsociado([FromBody] PropuestaModel propuestaModel)
        {
            var jsonResponse = new JsonResponse { Success = false };
            try
            {
                Propuesta propuestadFound = PropuestaBL.Instancia.GetByAsociado(Convert.ToInt32(propuestaModel.GrupoId), Convert.ToInt32(propuestaModel.AsociadoId), Convert.ToInt32(propuestaModel.ContratoId));

                if (propuestadFound.Numero!=null)
                {
                    PropuestaModel model = new PropuestaModel();
                    model.DomainToModel(propuestadFound);
                    jsonResponse.Success = true;
                    jsonResponse.Data = model;
                }
                else
                {
                    jsonResponse.Message = Mensajes.No_Existe_Asamblea;
                }
            }
            catch (Exception ex)
            {
                LogError(ex);
                jsonResponse.Message = Mensajes.Intentelo_Mas_Tarde;
            }
            return jsonResponse;
        }
        public JsonResponse GetByContrato([FromBody] CronogramaItemModel cronograma)
        {
            var jsonResponse = new JsonResponse { Success = false };
            try
            {
                List<Cronograma> cronogramaList = CronogramaBL.Instancia.GetAllByContrato(Convert.ToInt32(cronograma.ContratoId));

                if (cronogramaList.Count > 0)
                {
                    List<CronogramaItemModel> modelList = new List<CronogramaItemModel>();
                    foreach (var item in cronogramaList)
                    {
                        CronogramaItemModel model = new CronogramaItemModel();
                        model.DomainToModel(item);
                        modelList.Add(model);
                    }

                    jsonResponse.Success = true;
                    jsonResponse.Data = modelList;
                }
                else
                {
                    jsonResponse.Message = Mensajes.No_Existe_Cronograma;
                }
            }
            catch (Exception ex)
            {
                LogError(ex);
                jsonResponse.Message = Mensajes.Intentelo_Mas_Tarde;
            }
            return jsonResponse;
        }
        public JsonResponse GetByAsociado([FromBody] AsambleaItemModel asambleaItemModel)
        {
            var jsonResponse = new JsonResponse { Success = false };
            try
            {
                List<Asamblea> asambleaList = AsambleaBL.Instancia.GetAllByAsociado(Convert.ToInt32(asambleaItemModel.AsociadoId));

                if (asambleaList.Count > 0)
                {
                    List<AsambleaItemModel> modelList = new List<AsambleaItemModel>();
                    foreach (var item in asambleaList)
                    {
                        AsambleaItemModel model = new AsambleaItemModel();
                        model.DomainToModel(item);
                        modelList.Add(model);
                    }

                    jsonResponse.Success = true;
                    jsonResponse.Data = modelList;
                }
                else
                {
                    jsonResponse.Message = Mensajes.No_Existe_Asamblea;
                }
            }
            catch (Exception ex)
            {
                LogError(ex);
                jsonResponse.Message = Mensajes.Intentelo_Mas_Tarde;
            }
            return jsonResponse;
        }
        public JsonResponse GetActividad([FromBody] AsambleaModel asambleaModel)
        {
            var jsonResponse = new JsonResponse { Success = false };
            try
            {
                Actividad actividadFound = ActividadBL.Instancia.GetByAsamblea(Convert.ToInt32(asambleaModel.GrupoId), Convert.ToInt32(asambleaModel.AsociadoId));

                if (actividadFound.AOnline > 0)
                {
                    ActividadModel model = new ActividadModel();
                    model.DomainToModel(actividadFound);
                    jsonResponse.Success = true;
                    jsonResponse.Data = model;
                }
                else
                {
                    jsonResponse.Message = Mensajes.No_Existe_Actividad;
                }
            }
            catch (Exception ex)
            {
                LogError(ex);
                jsonResponse.Message = Mensajes.Intentelo_Mas_Tarde;
            }
            return jsonResponse;
        }
        private static JsonResponse enviarMensajePrueba(String registration_id)
        {
            var jsonResponse = new JsonResponse { Success = false };
            String GCM_URL = @"https://android.googleapis.com/gcm/send";
            StringBuilder sb = new StringBuilder();
            string collapseKey = DateTime.Now.ToString();
            Dictionary<string, string> data = new Dictionary<string, string>();

            data.Add("data.msg", HttpUtility.UrlEncode("Prueba. Timestamp: " + DateTime.Now.ToString()));

            sb.AppendFormat("registration_id={0}&collapse_key={1}",
                registration_id, collapseKey);

            foreach (string item in data.Keys)
            {
                if (item.Contains("data."))
                    sb.AppendFormat("&{0}={1}", item, data[item]);
            }

            string msg = sb.ToString();
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(GCM_URL);
            req.Method = "POST";
            req.ContentLength = msg.Length;
            req.ContentType = "application/x-www-form-urlencoded";

            string apiKey = "AIzaSyDoJMaK73d1mar7nqd9apsV6jjORaEAhZo";
            req.Headers.Add("Authorization:key=" + apiKey);

            using (StreamWriter oWriter = new StreamWriter(req.GetRequestStream()))
            {
                oWriter.Write(msg);
            }

            using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse())
            {
                using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
                {
                    string respData = sr.ReadToEnd();
                    jsonResponse.Data = respData;
                    if (resp.StatusCode == HttpStatusCode.OK)   // OK = 200
                    {
                        if (respData.StartsWith("id="))
                            jsonResponse.Success = true;
                    }
                    else if (resp.StatusCode == HttpStatusCode.InternalServerError)    // 500
                        jsonResponse.Message = "Error interno del servidor, prueba más tarde.";
                    else if (resp.StatusCode == HttpStatusCode.ServiceUnavailable)    // 503
                        jsonResponse.Message = "Servidor no disponible temporalmente, prueba más tarde.";
                    else if (resp.StatusCode == HttpStatusCode.Unauthorized)          // 401
                        jsonResponse.Message = "La API Key utilizada no es válida.";
                    else
                        jsonResponse.Message = "Error: " + resp.StatusCode;
                }
            }

            return jsonResponse;
        }
        public JsonResponse SendMessage([FromBody] NotificacionModel notificacionModel)
        {
            var jsonResponse = new JsonResponse { Success = false };
            try
            {
                Notificacion notificaionFound = NotificacionBL.Instancia.GetByUsername(notificacionModel.Username);

                if (notificaionFound.CodigoGCM != null)
                {
                    jsonResponse = enviarMensajePrueba(notificaionFound.CodigoGCM);
                }
                else
                {
                    jsonResponse.Message = Mensajes.No_Existe_CodigoGCM;
                }
            }
            catch (Exception ex)
            {
                LogError(ex);
                jsonResponse.Message = Mensajes.Intentelo_Mas_Tarde;
            }
            return jsonResponse;
        }
 public JsonResponse GetLogOut([FromBody] UsuarioAsociado usuarioAsociado)
 {
     var jsonResponse = new JsonResponse { Success = false };
     try
     {
         int resultado = UsuarioAsociadoBL.Instancia.GetLogOut(usuarioAsociado.Username);
         if (resultado > 0)
         {
             jsonResponse.Success = true;
             jsonResponse.Data = resultado;
         }
         else
         {
             jsonResponse.Message = Mensajes.No_Pudo_Cerrar_Sesion;
         }
     }
     catch (Exception ex)
     {
         LogError(ex);
         jsonResponse.Message = Mensajes.Intentelo_Mas_Tarde;
     }
     return jsonResponse;
 }
 public JsonResponse GetLoginGet(string username, string clave)
 {
     var jsonResponse = new JsonResponse { Success = false };
     try
     {
         UsuarioAsociado usuarioAsociado = UsuarioAsociadoBL.Instancia.GetLogin(username, clave);
         if (usuarioAsociado.UsuarioAsociadoId > 0)
         {
             jsonResponse.Success = true;
             jsonResponse.Data = usuarioAsociado;
         }
         else
         {
             jsonResponse.Message = Mensajes.No_Existe_Usuario;
         }
     }
     catch (Exception ex)
     {
         LogError(ex);
         jsonResponse.Message = Mensajes.Intentelo_Mas_Tarde;
     }
     return jsonResponse;
 }
        public JsonResponse AddOnline([FromBody] PropuestaModel propuestaModel)
        {
            var jsonResponse = new JsonResponse { Success = false };
            try
            {
                int resultado = PropuestaBL.Instancia.AddOnline(Convert.ToInt32(propuestaModel.GrupoId), Convert.ToInt32(propuestaModel.AsociadoId), Convert.ToInt32(propuestaModel.LetrasACancelar), propuestaModel.FechaCompromisoPago2);

                if (resultado > 0)
                {
                    jsonResponse.Success = true;
                    jsonResponse.Message = Mensajes.Registro_Satisfactorio;
                }
                else
                {
                    jsonResponse.Message = Mensajes.Termino_Oferta;
                }
            }
            catch (Exception ex)
            {
                LogError(ex);
                jsonResponse.Message = Mensajes.Intentelo_Mas_Tarde;
            }
            return jsonResponse;
        }
        public JsonResponse Add([FromBody] NotificacionModel notificacionModel)
        {
            var jsonResponse = new JsonResponse { Success = false };
            try
            {
                int resultado = NotificacionBL.Instancia.Add(notificacionModel.Username, notificacionModel.CodigoGCM);

                if (resultado > 0)
                {
                    jsonResponse.Success = true;
                    jsonResponse.Message = Mensajes.Registro_Satisfactorio;
                }
                else
                {
                    jsonResponse.Message = Mensajes.Registro_Fallido;
                }
            }
            catch (Exception ex)
            {
                LogError(ex);
                jsonResponse.Message = Mensajes.Intentelo_Mas_Tarde;
            }
            return jsonResponse;
        }
        public JsonResponse VerifyPlanificada([FromBody] AsambleaModel asambleaModel)
        {
            var jsonResponse = new JsonResponse { Success = false };
            try
            {
                Asamblea asambleFound = AsambleaBL.Instancia.VerifyPlanificada(Convert.ToInt32(asambleaModel.GrupoId));

                if (asambleFound.Estado == 1)
                {
                    AsambleaModel model = new AsambleaModel();
                    model.DomainToModel(asambleFound);
                    jsonResponse.Success = true;
                    jsonResponse.Data = model;
                }
                else
                {
                    jsonResponse.Message = Mensajes.Ya_Existe_Asamblea_Iniciada;
                }
            }
            catch (Exception ex)
            {
                LogError(ex);
                jsonResponse.Message = Mensajes.Intentelo_Mas_Tarde;
            }
            return jsonResponse;
        }
        public JsonResponse GetLogin([FromBody] AsambleaModel asambleaModel)
        {
            var jsonResponse = new JsonResponse { Success = false };
            try
            {
                Asamblea asambleaFound = AsambleaBL.Instancia.GetLogin(Convert.ToInt32(asambleaModel.GrupoId), asambleaModel.CodigoActivacion, Convert.ToInt32(asambleaModel.AsociadoId));

                if (asambleaFound.AsambleaId > 0)
                {
                    AsambleaModel model = new AsambleaModel();
                    model.DomainToModel(asambleaFound);
                    jsonResponse.Success = true;
                    jsonResponse.Data = model;
                }
                else
                {
                    jsonResponse.Message = Mensajes.No_Existe_Asamblea_Iniciada;
                }
            }
            catch (Exception ex)
            {
                LogError(ex);
                jsonResponse.Message = Mensajes.Intentelo_Mas_Tarde;
            }
            return jsonResponse;
        }
 public JsonResponse GetByAsociado([FromBody] ContratoModel contrato)
 {
     var jsonResponse = new JsonResponse { Success = false };
     try
     {
         Contrato contratoFound = ContratoBL.Instancia.GetByAsociado(Convert.ToInt32(contrato.AsociadoId));
         if (contratoFound.ContratoId > 0)
         {
             ContratoModel model = new ContratoModel();
             model.DomainToModel(contratoFound);
             jsonResponse.Success = true;
             jsonResponse.Data = model;
         }
         else
         {
             jsonResponse.Message = Mensajes.No_Existe_Contrato;
         }
     }
     catch (Exception ex)
     {
         LogError(ex);
         jsonResponse.Message = Mensajes.Intentelo_Mas_Tarde;
     }
     return jsonResponse;
 }