protected void BtnGrabar_Click(object sender, DirectEventArgs e)
    {
      try
      {
        string data = e.ExtraParams["data"];
        IList<co_rl_loteos> lotesList = JsonConvert.DeserializeObject<IList<co_rl_loteos>>(data);
        int id_remate_base = Int32.Parse(hid_id_remate_base.Text);
        foreach (co_rl_loteos lo in lotesList)
        {
          co_rl_loteos loteos = new bf_rl_loteos().GetData(lo.id_loteo);

          if (loteos.id_loteo != 0)
          {
            if (loteos.lo_numero != lo.lo_numero || loteos.lo_orden != lo.lo_orden)
            {

              loteos.lo_numero = lo.lo_numero;
              loteos.lo_orden = lo.lo_orden;
              loteos = new bf_rl_loteos().Save(loteos);

              loteos.id_remate.id = id_remate_base;

              ConexionPlgOnline plg = new ConexionPlgOnline(this.ObtenerConexion(loteos.id_remate.id));
              plg.GrabaLotes(loteos);
            }
          }
        }
        Mensajes.Show("Mensaje",ErrorText.REGISTRO_MODIFICADO,Mensajes.Icon.INFO);
        strLotesAgrupados.CommitChanges();
      }
      catch (Exception ex)
      {
        Mensajes.Error(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);
      }
    }
    private void Desasocia(IEnumerable<Remate> list)
    {
      try
      {
        IList<co_rl_loteos> lotes = new List<co_rl_loteos>();
        IList<co_rl_loteos> listLotesPLG = new List<co_rl_loteos>();
        IList<co_re_remates> listRemates = new List<co_re_remates>();
        foreach (co_re_remates reRemates in list.Select(remate => new bf_re_remates().GetData(remate.id_remate)))
        {
          reRemates.id_remate_base = 0;
          reRemates.id_usuario_agrupa = 0;
          reRemates.rem_fechaagrupa.Fecha = DateTime.MinValue;
          listRemates.Add(reRemates);
          lotes = new bf_rl_loteos().GetData(new co_rl_loteos { id_remate = { id = reRemates.id_remate } });
        }
        foreach (co_rl_loteos lote in lotes)
        {
          lote.id_remate_origen = lote.id_remate.id;
          listLotesPLG.Add(lote);
        }
        new bf_re_remates().Save(listRemates);
        new bf_rl_loteos().Save(listLotesPLG);

        ConexionPlgOnline plg = null;
        foreach (co_re_remates remate in listRemates)
        {
          string conexion = string.Empty;
          if (remate.id_familia == Constantes.FAMILIA_PROPIEDADES)
          {
            conexion = Constantes.CONEXION_PROPIEDADES;
          }
          else
          {
            conexion = Constantes.CONEXION_ONLINE;
          }
          plg = new ConexionPlgOnline(conexion);
          plg.GrabaRemate(remate);
        }
        plg.GrabaLotes(listLotesPLG);
        Mensajes.Show("Mensaje", ErrorText.REMATE_DESAGRUPADO_EXITOSAMENTE, Mensajes.Icon.INFO);
      }
      catch (Exception ex)
      {
        throw new Exception("Desasocia: " + ex.Message);
      }
    }
 protected void CmbRemates_Select(object sender, DirectEventArgs e)
 {
   try
   {
     int id_remate = Int32.Parse(cmbRemates.SelectedItem.Value);
     cmbRemates.ReadOnly = true;
     if (hid_id_remate.Text == "")
     {
       co_re_remates remate = new bf_re_remates().GetData(id_remate);
       remate.id_remate_base = id_remate;
       remate.id_usuario_agrupa = FWPConfiguration.get_ID_User(Session.SessionID);
       remate.rem_fechaagrupa.Fecha = DateTime.Now;
       string conexion = string.Empty;
       if (remate.id_familia == Constantes.FAMILIA_PROPIEDADES)
       {
         conexion = Constantes.CONEXION_PROPIEDADES;
       }
       else
       {
         conexion = Constantes.CONEXION_ONLINE;
       }
       ConexionPlgOnline plg = new ConexionPlgOnline(conexion);
       plg.GrabaRemate(remate);
       new bf_re_remates().Save(remate);
     }
     RematesDisponibles(id_remate);
     RematesAgrupados(id_remate);
   }
   catch (Exception ex)
   {
     Mensajes.Error(ErrorText.ERROR_SELECCIONAR_REMATE_BASE, "wf_agrupador_remates_adm.CmbRemates_Select", ex);
   }
 }
    public void EliminarDocumento(int id_loteopersonapago)
    {
      try
      {
        co_rl_loteospersonaspagos lotePersonaPago = new ConexionPlgOnline(this.ObtenerConexion()).ListaLotes(id_loteopersonapago);
        /* antes de eliminar veo si tiene mas de un lote asociado a este remate, si tiene solo uno se debe 
         * eliminar el registro asociado al remate, y las posturas. Si tiene mas de 1 se debe primero actualizar 
         * el valor de las garantias restando el valor
        */
        int id_remate = Convert.ToInt32(hidId_Remate.Text);

        IList<co_rl_loteospersonaspagos> lotes = new ConexionPlgOnline(this.ObtenerConexion()).ListaLotesPorRemate(lotePersonaPago.id_persona, id_remate);

        if (lotes != null && lotes.Any())
        {
          if (lotes.Count > 1)
          {
            //Resto el valor de la garantia
            decimal monto = Convert.ToInt32(Numeros.QuitaPunteo(txtMontoCompraEstimado.Text));
            monto = monto - lotePersonaPago.lopepa_postura;
            txtMontoCompraEstimado.Text = Numeros.punteaCifra(Numeros.QuitaPunteo(monto.ToString()));
            bool valido = new ConexionPlgOnline(this.ObtenerConexion()).EliminarLoteosPersonasPagos(lotePersonaPago);
            if (valido)
            {
              Mensajes.Show("Mensaje", "Registro Eliminado",Mensajes.Icon.INFO);
              Guardar();
            }
          }
          else
          {
            //elimino el registro a este remate
            bool eliminoregistrcompleto = new ConexionPlgOnline(this.ObtenerConexion()).EliminarPersonaRematePropiedades(lotePersonaPago.id_persona, id_remate);
            if (eliminoregistrcompleto)
            {
              Mensajes.Show("Mensaje", "Registro Eliminado",Mensajes.Icon.INFO);
            }
          }
        }
      }
      catch (Exception ex)
      {
        Mensajes.Error(ErrorText.ERROR_ELIMINAR_DOCUMENTO_REMATE_AGRUPADO,"wf_agrupados_garantias.EliminarDocumento", ex);
      }
    }
    private void Asocia(IEnumerable<Remate> list)
    {
      try
      {
        IList<co_rl_loteos> listLotesPLG = new List<co_rl_loteos>();
        IList<co_re_remates> listRemates = new List<co_re_remates>();
        int id_remate_base = 0;
        if (hid_id_remate.Text == "")
        {
          id_remate_base = Int32.Parse(cmbRemates.SelectedItem.Value);
        }
        else
        {
          id_remate_base = Int32.Parse(hid_id_remate.Text);
        }
        foreach (co_re_remates reRemates in list.Select(remate => new bf_re_remates().GetData(remate.id_remate)))
        {
          co_re_remates remate = new bf_re_remates().GetData(id_remate_base);
          if (!remate.rem_fecha.Fecha.ToShortDateString().Equals(reRemates.rem_fecha.Fecha.ToShortDateString()))
          {
            RematesDisponibles(id_remate_base);
            RematesAgrupados(id_remate_base);
            throw new Exception("Se produjo un error al tratar de agrupar el remate, para agrupar el remate deben tener la misma fecha");
          }
          reRemates.id_remate_base = id_remate_base;
          reRemates.id_usuario_agrupa = FWPConfiguration.get_ID_User(Session.SessionID);
          reRemates.rem_fechaagrupa.Fecha = DateTime.Now;
          listRemates.Add(reRemates);
          var lotes = new bf_rl_loteos().GetData(new co_rl_loteos { id_remate = { id = reRemates.id_remate } });
          foreach (co_rl_loteos lote in lotes)
          {
            lote.id_remate_origen = reRemates.id_remate;
            new bf_rl_loteos().Save(lote);
            lote.id_remate.id = id_remate_base;
            listLotesPLG.Add(lote);
          }
        }
        new bf_re_remates().Save(listRemates);


        ConexionPlgOnline plg = null;
        foreach (co_re_remates remate in listRemates)
        {

          string conexion = string.Empty;
          if (remate.id_familia == Constantes.FAMILIA_PROPIEDADES)
          {
            conexion = Constantes.CONEXION_PROPIEDADES;
          }
          else
          {
            conexion = Constantes.CONEXION_ONLINE;
          }
          plg = new ConexionPlgOnline(conexion);
          plg.GrabaRemate(remate);
        }
        plg.GrabaLotes(listLotesPLG);
        Mensajes.Show("Mensaje", ErrorText.REMATE_AGRUPADO_EXITOSAMENTE, Mensajes.Icon.INFO);
      }
      catch (Exception ex)
      {
        throw new Exception("Asocia: " + ex.Message);
      }
    }
    public void ValidarDocumento(int id_loteopersonapago)
    {
      try
      {
        co_rl_loteospersonaspagos lotePersonaPago = new ConexionPlgOnline(this.ObtenerConexion()).ListaLotes(id_loteopersonapago);
        lotePersonaPago.lopepa_cartaofertavalida = true;

        bool valido = new ConexionPlgOnline(this.ObtenerConexion()).GuardarLoteosPersonasPagos(lotePersonaPago);
        if (valido)
        {
          Mensajes.Show("Mensaje", "Registro Actualizado",Mensajes.Icon.INFO);
          CargaLotes();
        }
      }
      catch (Exception ex)
      {
        Mensajes.Error(ErrorText.ERROR_VALIDAR_DOCUMENTO_REMATE_AGRUPADO,"wf_agrupados_garantias.ValidarDocumento", ex);
      }
    }
 private bool  ObtenerLotesValidado(int idPersona, int idRemate)
 {
   IList<co_rl_loteospersonaspagos> lotes = new ConexionPlgOnline(this.ObtenerConexion()).ListaLotesPorRemate(idPersona, idRemate);
   foreach (co_rl_loteospersonaspagos lote in lotes)
   {
     if (lote.lopepa_cartaofertavalida == false)
     {
       return false;
     }
   }
   return true;
 }
    protected void StrUsuarios_OnReadData(object sender, StoreReadDataEventArgs e)
    {
      try
      {
        int _id_remate = hidId_Remate.Text.ValidaEntero("id_remate");

        co_tg_personas_no Nomina = new co_tg_personas_no();

        if (e != null)
        {
          int start = e.Start;
          int limit = NumInt.Init(e.Parameters.GetParameter("limit").Value);
          limit = limit == 0 ? e.Limit : limit;
          int page = (start / limit) + 1;

          Nomina.Pagina = page;
          Nomina.RegistrosPorPaginas = limit;
          Nomina.ColumnaOrden = "pe_nombres";
          Nomina.OrdenColumna =
            (FwpDataGridDataBound.Orden)
            Enum.Parse(typeof(FwpDataGridDataBound.Orden), e.Sort[0].Direction.ToString(), true);
          Nomina.id_remate = _id_remate;
        }
        else
        {
          Nomina.Pagina = 1;
          Nomina.RegistrosPorPaginas = 20;
          Nomina.ColumnaOrden = "pe_nombres";
          Nomina.OrdenColumna = FwpDataGridDataBound.Orden.ASC;
          Nomina.id_remate = _id_remate;
        }

        var conn = new ConexionPlgOnline(this.ObtenerConexion());
        var persona = conn.ListaPersonasPorRemates(Nomina);
        bool validado = false, monto = false;
        var customers = new List<PersonasGarantias>();

        foreach (var p in persona.DataSource)
        {

          IList<dynamic> persona1 = new ConexionPlgOnline(this.ObtenerConexion()).ListaPersonasPorRematePorIdPersona(_id_remate, p.id_persona);

          if (persona1.Any())
          {
            monto = Convert.ToInt32(persona1.First().ga_monto) > 0;
            validado = persona1.First().ga_habilitado;
          }

          customers.Add(new PersonasGarantias
          {
            id = p.id_persona,
            nombre = p.pe_nombres + " " + p.pe_appaterno,
            usuario = persona1.First().us_consuser,
            validado = validado,
            monto = monto,
            lotesValidado = ObtenerLotesValidado(p.id_persona, _id_remate)
        });
          AgregarFiltros(ref customers);
          AgregarOrdenamiento(ref customers, e);
        }

        strUsuarios.DataSource = customers;
        strUsuarios.DataBind();
      }
      catch (Exception ex)
      {
        Mensajes.Error(ErrorText.ERROR_CARGAR_USUARIOS_GARANTIAS + ex.Message);
      }
    }
    private void CargaLotes()
    {
      try
      {
        int id_usuario = hidIdPersona.Text.ValidaEntero("id_persona");
        int id_remate = hidId_Remate.Text.ValidaEntero("id_remate");
        IList<co_rl_loteospersonaspagos> lotes = new ConexionPlgOnline(this.ObtenerConexion()).ListaLotesPorRemate(id_usuario, id_remate);
        IList<co_rl_loteospersonaspagos> lista = new List<co_rl_loteospersonaspagos>();
        foreach (co_rl_loteospersonaspagos lote in lotes)
        {
          if (!string.IsNullOrEmpty(lote.lopepa_archivo))
          {
            lote.lopepa_archivo = Constantes.URL_DOCUMENTOS_REMATE_ONLINE + id_remate + "/" +
                                  lote.lopepa_archivo;
            lote.lopepa_comprobante = Constantes.URL_DOCUMENTOS_REMATE_ONLINE + id_remate + "/" +
                                  lote.lopepa_comprobante;
          }
          lista.Add(lote);
        }

        grdLotes.GetStore().DataSource = lista;
        grdLotes.GetStore().DataBind();
      }
      catch (Exception ex) {
        Mensajes.Error(ErrorText.ERROR_CARGAR_LISTADO_LOTES);
      }
    }
    protected void strPersonas_Select(object sender, DirectEventArgs e)
    {
      try
      {
        int id_usuario = e.ExtraParams["id_usuario"].ValidaEntero("id_usuario");
        int id_remate = hidId_Remate.Text.ValidaEntero("id_remate");
        hidIdPersona.Text = id_usuario.ToString();
        List<dynamic> persona = new ConexionPlgOnline(this.ObtenerConexion()).ListaPersonasPorRematePorIdPersona(id_remate, id_usuario);
        if (persona.Any())
        {
          string montoEstimado = persona.First().repe_montoCompra;

          txtRut.Text = persona.First().pe_rut;
          txtNombre.Text = persona.First().pe_nombres;
          txtApePaterno.Text = persona.First().pe_appaterno;
          txtApeMaterno.Text = persona.First().pe_apmaterno;
          txtDireccion.Text = persona.First().pe_direccion;
          txtCiudad.Text = persona.First().pe_ciudad;
          txtComuna.Text = persona.First().pe_comuna;
          txtEmail.Text = persona.First().pe_email;
          txtTelefono.Text = persona.First().pe_telefono;
          txtNomContacto.Text = persona.First().pe1_nombreContacto;
          txtCarContacto.Text = persona.First().pe1_cargoContacto;
          txtEmaContacto.Text = persona.First().pe1_correoContacto;
          txtTelContacto.Text = persona.First().pe1_telefonoContacto;
          txtCondPago.Text = persona.First().repe_condicionesPago;
          txtGiroComercial.Text = persona.First().pe1_giroComercial;
          txtBanco.Text = persona.First().pe1_banco;
          txtSucursal.Text = persona.First().pe1_sucursal;
          txtTipoCuenta.Text = "";
          txtNroCuenta.Text = persona.First().pe1_cuentaCorriente;
          txtMontoCompraEstimado.Text = Numeros.punteaCifra(Numeros.QuitaPunteo(montoEstimado));
          txtMonto.Text = Convert.ToInt32(persona.First().ga_monto) > 0 ? Numeros.punteaCifra(Convert.ToInt32(persona.First().ga_monto).ToString()) : "";
          chkGarantia.Checked = persona.First().ga_habilitado;
          hidid_pais.Text = persona.First().id_pais.ToString();
          hidid_tipocuenta.Text = persona.First().id_tipoCuenta.ToString();

          if (persona.First().pe1_BesEmpresa)
          {
            rdoEmpresa.Checked = true;
          }
          else
          {
            rdoPersona.Checked = true;
          }

          List<dynamic> list = new ConexionPlgOnline(this.ObtenerConexion()).ListatiposCuentasBancos();

          foreach (dynamic t in list.Where(t => t.id_tipoCuenta == persona.First().id_tipoCuenta))
          {
            txtTipoCuenta.Text = t.tc_Tdesc;
          }
          co_tg_paises ipa = new bf_tg_paises().GetData(persona.First().id_pais);
          txtPais.Text = ipa.pa_pais;
          CargaLotes();

        }
      }
      catch (Exception ex)
      {
        throw new Exception(ex.Message);
      }
    }