private void CargarMasiva(HttpContext context)
    {
      string response = "";
      string idCarpeta = context.Request.Form["file-id_carpeta"];
      int idTabla = Constantes.TABLA_LOTES;

      List<int> numeroLotes = new List<int>();
      numeroLotes.AddRange(context.Request.Form["file-ids"].Split('*').Select(int.Parse).ToArray());

      foreach (int numero in numeroLotes)
      {
        co_rl_loteos lote = new co_rl_loteos();
        lote.lo_numero = numero;
        lote.id_remate.id = Convert.ToInt32(idCarpeta);
        IList<co_rl_loteos> lotes = new bf_rl_loteos().GetData(lote);

        if (lotes.Count == 1)
        {
          foreach (string key in context.Request.Files)
          {
            List<HttpPostedFile> imgs = new List<HttpPostedFile>();
            HttpPostedFile file = context.Request.Files[key] as HttpPostedFile;
            List<int> imgId = new List<int>();

            if (file != null && file.ContentLength == 0) continue;

            if (file != null && numero == NumeroLoteImagen(file.FileName))
            {
              int idOrigen = lotes.First().id;

              imgs.Add(file);
              imgId.Add(TipoImagen(file.FileName));
              string mensaje;
              response = !new bf_tg_imagenes().GuardaImagenesMasiva(idTabla, idOrigen, idCarpeta, imgId, imgs, out mensaje) ? mensaje : "ok";
            }
          }
        }
      }
      context.Response.Write(response);
    }
    protected void btnGuardar_Click(object sender, DirectEventArgs e)
    {
      try
      {
        string atributosParam = e.ExtraParams["atributos"];
        IList<JsonAtributos> atributos = JsonConvert.DeserializeObject<List<JsonAtributos>>(atributosParam);
        string atributosFamiliaParam = e.ExtraParams["atributosFamilia"];
        IList<JsonAtributos> atributosFamilia = JsonConvert.DeserializeObject<List<JsonAtributos>>(atributosFamiliaParam);
        string atributosCategoriaParam = e.ExtraParams["atributosCategoria"];
        IList<JsonAtributos> atributosCategoria = JsonConvert.DeserializeObject<List<JsonAtributos>>(atributosCategoriaParam);
        string atributosSubcategoriaParam = e.ExtraParams["atributosSubcategoria"];
        IList<JsonAtributos> atributosSubcategoria = JsonConvert.DeserializeObject<List<JsonAtributos>>(atributosSubcategoriaParam);
        co_rl_loteos lote = new co_rl_loteos();
        string detalle = e.ExtraParams["detalle"];
        string mensaje = ErrorText.REGISTRO_INGRESADO;

        int idLoteo = hid_id.Text.ValidaEntero("id_lote");
        if (idLoteo != 0)
        {
          lote = new bf_rl_loteos().GetData(idLoteo);
          mensaje = ErrorText.REGISTRO_MODIFICADO;
        }
        else
        {
          lote.id_remate.id = hid_idRemate.Text.ValidaEntero("id_remate");
        }

        lote.lo_codigo = txtCodigo.Text;
        lote.lo_numero = NumInt.Init(Numeros.QuitaPunteo(txtNroLote.Text));
        lote.lo_orden = NumInt.Init(Numeros.QuitaPunteo(txtNroLote.Text));
        lote.lo_cantidad = NumInt.Init(Numeros.QuitaPunteo(txtCantidad.Text));

        lote.lo_descripcion = txtDescripcion.Text.ToUpper();

        lote.lo_superficieConstruida = NumDec.Init(txtSuperficieConstruida.Text);
        lote.id_unidadConstruida.id =
          cmbUniMedSupConstruida.SelectedItem.Value.ValidaEntero(cmbUniMedSupConstruida.FieldLabel);
        lote.lo_superficieSitio = NumDec.Init(txtSuperficieSitio.Text);
        lote.id_unidadSitio.id = cmbUniMedSupSitio.SelectedItem.Value.ValidaEntero(cmbUniMedSupSitio.SelectedItem.Value);

        lote.lo_minimo = Numeros.QuitaPunteo(txtMinimo.Text).ValidaDecimal(txtMinimo.Text);
        lote.lo_iva = chkIva.Checked ? 1 : 0;
        lote.id_moneda.id = cmbMoneda.SelectedItem.Value.ValidaEntero(cmbMoneda.FieldLabel);
        lote.lo_unidad_medida = txtUnidadMedida.Text.ToUpper();
        lote.lo_comision = txtComision.Text;

        lote.lo_descripcionMonto = txtDescripcionMonto.Text.ToUpper();
        lote.lo_garantia = NumDec.Init(Numeros.QuitaPunteo(txtGarantia.Text));
        if (cmbMonedaGarantia.SelectedItem.Value != null)
        {
          lote.id_moneda_garantia.id = cmbMonedaGarantia.SelectedItem.Value.ValidaEntero(cmbMonedaGarantia.FieldLabel);
        }

        lote.id_loteoestado.id = cmbEstado.SelectedItem.Value.ValidaEntero(cmbEstado.FieldLabel);
        if (cmbMandantes.SelectedItem.Value != null)
        {
          lote.id_mandante.id = cmbMandantes.SelectedItem.Value.ValidaEntero(cmbMandantes.FieldLabel);
        }
        lote.id_familia.id = cmbFamilias.SelectedItem.Value.ValidaEntero(cmbFamilias.FieldLabel);
        lote.id_categoria.id = cmbCategoria.SelectedItem.Value.ValidaEntero(cmbCategoria.FieldLabel);
        lote.id_subcategoria.id = cmbSubCategoria.SelectedItem.Value.ValidaEntero(cmbSubCategoria.FieldLabel);

        lote.lo_direccion = txtDireccion.Text.ToUpper();
        lote.id_region.id = cmbRegion.SelectedItem.Value.ValidaEntero(cmbRegion.FieldLabel);
        lote.id_comuna.id = cmbComuna.SelectedItem.Value.ValidaEntero(cmbComuna.FieldLabel);
        lote.lo_latitud = txtLatitud.Text;
        lote.lo_longitud = txtLongitud.Text;

        lote.lo_lugar_exhibicion = txtLugarExhibicion.Text.ToUpper();
        lote.lo_exhibicion = txtExhibicion.Text.ToUpper();

        lote.lo_observacion = txtObservacion.Text.ToUpper();

        if (lote.id_remate_origen == 0)
        {
          lote.id_remate_origen = lote.id_remate.id;
        }

        if (lote.id_categoria.id == Constantes.CATEGORIA_VEHICULOS)
        {
          lote.lo_detalle = ConformarDetalle(atributosSubcategoria);
          lote.lo_titulo = ConformarNombre(atributosSubcategoria);
        }
        else
        {
          lote.lo_detalle = detalle;
          lote.lo_titulo = txtNombre.Text.ToUpper();
        }


        IList<co_rl_loteoscanales> canales = ObtenerCanales();
        IList<co_rl_incrementos> incrementos = ObtenerIncrementos();
        IList<co_tg_personaslote> contactos = ObtenerContactos();

        lote = new bf_rl_loteos().Save(lote, contactos, incrementos, canales);

        //VIMEO
        if (!string.IsNullOrWhiteSpace(txtVimeo.Text)) guardarUrlVimeo(lote.id_loteo);

        if (lote.id != 0)
        {
          if (atributos.Any())
          {
            GrabarAtributos(Constantes.TABLA_LOTES, lote.id_loteo, 0, atributos);
          }
          if (atributosFamilia.Any())
          {
            GrabarAtributos(Constantes.ATRIBUTOS_TABLA_FAMILIA, lote.id_loteo, lote.id_familia.id, atributosFamilia);
          }
          if (atributosCategoria.Any())
          {
            GrabarAtributos(Constantes.ATRIBUTOS_TABLA_CATEGORIA, lote.id_loteo, lote.id_categoria.id, atributosCategoria);
          }
          if (atributosSubcategoria.Any())
          {
            GrabarAtributos(Constantes.ATRIBUTOS_TABLA_SUBCATEGORIA, lote.id_loteo, lote.id_subcategoria.id, atributosSubcategoria);
          }
        }
        Mensajes.Show("Mensaje", mensaje, "CloseIframe();", MessageBox.Icon.INFO);
      }
      catch (Exception ex)
      {
        Mensajes.Error(ErrorText.ERROR_GUARDAR_REGISTRO + "<br />" + ex.Message);
      }
    }
    protected void StrLotesAgrupados_OnReadData(object sender, StoreReadDataEventArgs e)
    {
      try
      {
        
        co_rl_loteos Nomina = new co_rl_loteos();
        Nomina.id_familia.id = Constantes.FAMILIA_PROPIEDADES;
        Nomina.id_loteoestado.id = Constantes.ESTADO_LOTE_ACTIVO;
        if (hid_id_remate_base.Text != "")
        {
          Nomina.id_remate_base = Int32.Parse(hid_id_remate_base.Text);
        }

        IList<object> lista = new List<object>();

        IList<co_rl_loteos> data = new bf_rl_loteos().GetData(Nomina);
        
        foreach (co_rl_loteos n in data.OrderBy(c => c.lo_orden).ToList())
        {
          int posturas = new ConexionPlgOnline(ObtenerConexion(hid_id_remate_base.Text.ValidaEntero("id_remate"))).GetPosturasLote(n.id_loteo);
          lista.Add(
              new
              {
                id_loteo = n.id_loteo,
                lo_descripcion = n.lo_descripcion,
                lo_numero = n.lo_numero,
                id_remate = n.id_remate.id,
                rem_nombre = n.id_remate.descripcion,
                lo_minimo = n.lo_minimo,
                id_garantiatipo = n.id_garantiatipo,
                lo_garantia = n.lo_garantia,
                lo_montogarantia = n.lo_montogarantia,
                lo_montoadjudicacion = n.lo_montoadjudicacion,
                lo_fechaadjudicacion = n.lo_fechaadjudicacion.Fecha,
                lo_numparticipantes = n.lo_numparticipantes,
                id_persona = n.id_persona,
                lo_cantidad = n.lo_cantidad,
                id_loteoestado = n.id_loteoestado.id,
                le_loteoestado = n.id_loteoestado.descripcion,
                lo_especificaciones = n.lo_especificaciones,
                lo_orden = n.lo_orden,
                lo_titulo = n.lo_titulo,
                lo_detalle = n.lo_detalle,
                lo_iva = n.lo_iva,

                id_disponibilidad = n.id_disponibilidad,
                id_mandante = n.id_mandante,
                id_categoria = n.id_categoria.id,
                ca_categoria = n.id_categoria.descripcion,
                id_subcategoria = n.id_subcategoria.id,
                subca_subcategoria = n.id_subcategoria.descripcion,
                id_familia = n.id_familia.id,
                fa_familia = n.id_familia.descripcion,
                id_region = n.id_region.id,
                re_region = n.id_region.descripcion,
                id_comuna = n.id_comuna.id,
                co_comuna = n.id_comuna.descripcion,
                id_tipodestacado = n.id_tipodestacado,
                lo_exhibicion = n.lo_exhibicion,
                lo_latitud = n.lo_latitud,
                lo_longitud = n.lo_longitud,
                posturas =posturas
              });
        }

        strLotesAgrupados.DataSource = lista;
        PageProxy pageProxy = strLotesAgrupados.Proxy[0] as PageProxy;
        if (pageProxy != null) pageProxy.Total = lista.Count;
        strLotesAgrupados.DataBind();

      }
      catch (Exception ex)
      {
        Mensajes.Error(ErrorText.ERROR_CARGAR_LISTADO_LOTES, "wf_agrupador_lotes.StrLotesAgrupados_OnReadData", ex);
      }
    }
    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);
      }
    }