/// <summary>
    /// Metodo que me permite notificar al WebService de Tattersall Movil que se publicó un remate, 
    /// metodo solo para los Remate, NO para la Venta Directa
    /// </summary>
    /// <param name="remate">objeto remate que creó o publicó</param>
    public static void NotificarMovilRemate(co_re_remates remate)
    {
      try
      {
        getTransaccion();
        //1. valido si el remate a sido publicado
        if (remate.id_remateEstadoWeb.id == PUBLICADO)
        {
          //realizo la instancia del wsdl para la notificacion.
          WsNotificacion notificacion = new WsNotificacionClient();

          //obtengo todos los lotes del remate con la opcion de canal movil
          var lotes = new bf_rl_loteos().getLotesNotificacion(remate.id_remate, CANAL_MOVIL);
          if (!lotes.Any())
          {
            return;
          }
          string subcategoriasMovil = lotes.Aggregate(string.Empty, (current, lote) => current + lote.id_mosubcategoria + ",");
          if (subcategoriasMovil.Length > 0)
          {
            subcategoriasMovil = subcategoriasMovil.Substring(0, (subcategoriasMovil.Length - 1));
          }
          var usuariosWeb = new bf_ca_usuariosweb().getUsuariosSubcategoriasMovil(subcategoriasMovil);
          //verifico si hay usuario a los que notificar de lo contrario no hago nada
          if (usuariosWeb.Any())
          {
            string nombreCompleto = string.Empty;
            IList<Usuario> usuarios = new List<Usuario>();
            Publicacion publicacion = new Publicacion
            {
              esRemate = true,
              id = remate.id_remate,
              titulo = remate.rem_nombre
            };

            foreach (var usu in usuariosWeb)
            {
              int uuid = usu.id_usuarioWeb;
              nombreCompleto = usu.pe_nombrecompleto;
              usuarios.Add(new Usuario { uuid = uuid.ToString(), nombre = nombreCompleto });
            }
            publicacion.Usuarios = usuarios.ToArray();

            NotificarRequest notificarRequest = new NotificarRequest
            {
              DatosTransaccion = _transaccion,
              Publicacion = publicacion
            };

            NotificarResponse res = notificacion.Notificar(notificarRequest);
            GuardarResponseMovil(res, 0, remate.id_remate, publicacion);
          }
        }
      }
      catch (Exception)
      {
        //throw new Exception(ex.Message);
      }
    }
    /// <summary>
    /// Metodo que Notifica al Usuario Movil acerca del Lote de acuerdo a sus preferencias
    /// </summary>
    /// <param name="idLote"></param>
    /// <param name="idRemate"></param>
    public static string NotificarTest(int idLote, int idRemate)
    {
      string mensaje = string.Empty;
      try
      {
        getTransaccion();
        co_rl_loteos lote = new bf_rl_loteos().GetData(idLote);
        co_re_remates remate = new bf_re_remates().GetData(idRemate);
        //valido que el remate no sea nulo
        if (remate != null)
        {
          //valido q el remate esta publicado
          if (remate.id_remateEstadoWeb.id == PUBLICADO)
          {
            //valido que el lote no sea nulo
            if (lote != null)
            {
              //valido q este marcado como activo
              if (lote.id_loteoestado.id == LOTE_ACTIVO)
              {
                //una vez validado los estados valido que este marcado como movil
                co_rl_loteoscanales canal = new bf_rl_loteoscanales().GetData(new co_rl_loteoscanales { id_loteo = { id = lote.id_loteo }, id_canal = { id = CANAL_MOVIL } }).FirstOrDefault();
                if (canal != null)
                {
                  getTransaccion();
                  //realizo la instancia del wsdl para la notificacion.
                  WsNotificacion notificacion = new WsNotificacionClient();

                  //obtengo todos los lotes del remate con la opcion de canal movil
                  var mvSubcategorias =
                    new bf_mv_mosubcategorias_subcategorias().GetData(new co_mv_mosubcategorias_subcategorias
                    {
                      id_subcategoria = lote.id_subcategoria
                    });
                  string subcategoriasMovil = mvSubcategorias.Aggregate(string.Empty,
                    (current, sb) => current + sb.id_mosubcategoria.id + ",");
                  if (subcategoriasMovil.Length > 0)
                  {
                    subcategoriasMovil = subcategoriasMovil.Substring(0, (subcategoriasMovil.Length - 1));
                  }else
                  {
                    subcategoriasMovil = @"0";
                  }

                  var usuariosWeb = new bf_ca_usuariosweb().getUsuariosSubcategoriasMovil(subcategoriasMovil);
                  //verifico si hay usuario a los que notificar de lo contrario no hago nada
                  if (usuariosWeb.Any())
                  {
                    Publicacion publicacion = new Publicacion
                    {
                      esRemate = EsRemate(remate),
                      id = lote.id_loteo,
                      titulo = lote.lo_titulo
                    };
                    IList<Usuario> usuarios = new List<Usuario>();
                    string nombreCompleto = string.Empty;
                    foreach (var usu in usuariosWeb)
                    {
                      int uuid = 1749;
                      nombreCompleto = usu.pe_nombrecompleto;
                      usuarios.Add(new Usuario { uuid = uuid.ToString(), nombre = nombreCompleto });
                    }
                    publicacion.Usuarios = usuarios.ToArray();

                    NotificarRequest notificarRequest = new NotificarRequest
                    {
                      DatosTransaccion = _transaccion,
                      Publicacion = publicacion
                    };

                    NotificarResponse response = notificacion.Notificar(notificarRequest);
                    //guardo la respuesta realizada por el WebService
                    GuardarResponseMovil(response, lote.id_loteo, remate.id_remate, publicacion);

                    mensaje = "Lote Notificado Exitosamente.";
                  }else
                  {
                    mensaje = "No hay usuarios al cual Notificar.";
                  }
                }
                else
                {
                  mensaje = "Debe Seleccionar Canal Movil para poder notificar";
                }
              }
              else
              {
                mensaje = "Lote debe estar con estado ACTIVO para poder notificar";
              }
            }
            else
            {
              mensaje = "Lote Nulo";
            }
          }
          else
          {
            mensaje = "Remate debe estar PUBLICADO para poder notificar.";
          }
        }
        else
        {
          mensaje = "Remate Nulo";
        }
      }
      catch (Exception ex)
      {
        return "Error al notificar <br>" + ex.Message;
      }
      return mensaje;
    }
    public static void NotificarMovilVentaDirecta(co_rl_loteos lote)
    {
      try
      {
        getTransaccion();
        //1. valido si el remate a sido publicado
        if (lote.id_loteoestado.id == LOTE_ACTIVO)
        {
          //realizo la instancia del wsdl para la notificacion.
          WsNotificacion notificacion = new WsNotificacionClient();

          //obtengo todos los lotes del remate con la opcion de canal movil
          var mvSubcategorias =
            new bf_mv_mosubcategorias_subcategorias().GetData(new co_mv_mosubcategorias_subcategorias
            {
              id_subcategoria = lote.id_subcategoria
            });
          string subcategoriasMovil = mvSubcategorias.Aggregate(string.Empty, (current, sb) => current + sb.id_mosubcategoria.id + ",");
          subcategoriasMovil = subcategoriasMovil.Substring(0, (subcategoriasMovil.Length - 1));

          var usuariosWeb = new bf_ca_usuariosweb().getUsuariosSubcategoriasMovil(subcategoriasMovil);
          //verifico si hay usuario a los que notificar de lo contrario no hago nada
          if (usuariosWeb.Any())
          {
            Publicacion publicacion = new Publicacion
            {
              esRemate = false,
              id = lote.id_loteo,
              titulo = lote.lo_titulo
            };
            IList<Usuario> usuarios = new List<Usuario>();
            string nombreCompleto = string.Empty;
            foreach (var usu in usuariosWeb)
            {
              int uuid = usu.id_usuarioWeb;
              nombreCompleto = usu.pe_nombrecompleto;
              usuarios.Add(new Usuario { uuid = uuid.ToString(), nombre = nombreCompleto });
            }
            publicacion.Usuarios = usuarios.ToArray();

            NotificarRequest notificarRequest = new NotificarRequest
            {
              DatosTransaccion = _transaccion,
              Publicacion = publicacion
            };

            NotificarResponse response = notificacion.Notificar(notificarRequest);
            GuardarResponseMovil(response, lote.id_loteo, lote.id_remate.id, publicacion);
          }
        }
      }
      catch (Exception)
      {
        //throw new Exception(ex.Message);
      }
    }