com.inmovilizaciones.activity.ListarInmovilizacionesActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.inmovilizaciones.activity.ListarInmovilizacionesActivity.java

Source

/*
 * PinDroid - http://code.google.com/p/PinDroid/
 *
 * Copyright (C) 2010 Matt Schmidt
 *
 * PinDroid is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published
 * by the Free Software Foundation; either version 3 of the License,
 * or (at your option) any later version.
 *
 * PinDroid is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with PinDroid; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 * USA
 */

package com.inmovilizaciones.activity;

import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.SearchManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SearchView;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;

import com.inmovilizaciones.aplication.AplicacionInmovilizaciones;
import com.inmovilizaciones.db.ClaseVehiculo;
import com.inmovilizaciones.db.ClaseVehiculoDao;
import com.inmovilizaciones.db.Color;
import com.inmovilizaciones.db.ColorDao;
import com.inmovilizaciones.db.Departamento;
import com.inmovilizaciones.db.DepartamentoDao;
import com.inmovilizaciones.db.Grua;
import com.inmovilizaciones.db.GruaDao;
import com.inmovilizaciones.db.Infraccion;
import com.inmovilizaciones.db.InfraccionDao;
import com.inmovilizaciones.db.Inmovilizacion;
import com.inmovilizaciones.db.InmovilizacionDao;
import com.inmovilizaciones.db.Municipio;
import com.inmovilizaciones.db.MunicipioDao;
import com.inmovilizaciones.db.Parqueadero;
import com.inmovilizaciones.db.ParqueaderoDao;
import com.inmovilizaciones.db.Persona;
import com.inmovilizaciones.db.PersonaDao;
import com.inmovilizaciones.db.TipoIdentificacion;
import com.inmovilizaciones.db.TipoIdentificacionDao;
import com.inmovilizaciones.db.TipoServicio;
import com.inmovilizaciones.db.TipoServicioDao;
import com.inmovilizaciones.db.Vehiculo;
import com.inmovilizaciones.db.VehiculoDao;
import com.inmovilizaciones.db.Zonas;
import com.inmovilizaciones.db.ZonasDao;
import com.inmovilizaciones.listadapter.InmovilizacionRecyclerView;
import com.inmovilizaciones.service.EnviarInmovilizacionService;
import com.inmovilizaciones.utilidadesgenerales.UtilidadesGenerales;
import com.inmovilizaciones.db.DaoSession;
import com.inmovilizaciones.webservice.api.WSGruparClient;
import com.inmovilizaciones.webservice.api.WSGruparInterface;
import com.inmovilizaciones.webservice.modelo.WSGruparResult;
import com.melnykov.fab.FloatingActionButton;
import com.inmovilizaciones.R;

import org.greenrobot.greendao.query.QueryBuilder;
import org.greenrobot.greendao.query.WhereCondition;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import retrofit2.Call;
import retrofit2.Response;

import static com.inmovilizaciones.Constants.NOTIFICACIONES_ID;
import static com.inmovilizaciones.Constants.RESPUESTA_SERVICIO;
import static com.inmovilizaciones.Constants.SLEEP_PROGRESS_MAESTROS;

public class ListarInmovilizacionesActivity extends AppCompatActivity {

    private static final String TAG = "ListarInmActivity";
    private AplicacionInmovilizaciones app;
    private FloatingActionButton btnAgregarComparendo;
    private ClaseVehiculoDao claseVehiculoDao;
    private ColorDao coloresDao;
    private DaoSession daoSession;
    private DepartamentoDao departamentosDao;
    private ProgressDialog dialogoBuscando;
    private GruaDao gruasDao;
    private InfraccionDao infraccionDao;
    private InmovilizacionDao inmovilizacionDao;
    LinearLayoutManager llm;
    private InmovilizacionRecyclerView mAdapter;
    private EjecutarConsultarServiciosAsyncTask mConsultarInmovilizacionesTask;
    private ProgressDialogFragment mProgressDialog;
    private MunicipioDao municipioDao;
    private ParqueaderoDao parqueaderoDao;
    private PersonaDao personasDao;
    RecyclerView rv;
    private TipoIdentificacionDao tipoIdentificacionDao;
    private TipoServicioDao tipoServicioDao;
    private VehiculoDao vehiculoDao;
    private ZonasDao zonasDao;

    private BroadcastReceiver mActualizarListaComparendosBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            try {
                String result = intent.getStringExtra("resultado");
                if (result != null && !result.equals("")) {
                    if (app != null) {
                        daoSession = app.getDaoSession();
                    }
                    ejecutarConsultaServicios(0, "");
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    };

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        try {

            UtilidadesGenerales.context = this;
            setContentView(R.layout.listar_inmovilizacion_activity);
            this.app = (AplicacionInmovilizaciones) getApplication();
            this.daoSession = this.app.getDaoSession();
            this.inmovilizacionDao = this.daoSession.getInmovilizacionDao();
            this.departamentosDao = this.daoSession.getDepartamentoDao();
            this.municipioDao = this.daoSession.getMunicipioDao();
            this.infraccionDao = this.daoSession.getInfraccionDao();
            this.parqueaderoDao = this.daoSession.getParqueaderoDao();
            this.zonasDao = this.daoSession.getZonasDao();
            this.tipoIdentificacionDao = this.daoSession.getTipoIdentificacionDao();
            this.gruasDao = this.daoSession.getGruaDao();
            this.coloresDao = this.daoSession.getColorDao();
            this.tipoServicioDao = this.daoSession.getTipoServicioDao();
            this.claseVehiculoDao = this.daoSession.getClaseVehiculoDao();
            this.personasDao = this.daoSession.getPersonaDao();
            this.vehiculoDao = this.daoSession.getVehiculoDao();
            this.rv = (RecyclerView) findViewById(R.id.rv);
            this.rv.setHasFixedSize(true);
            this.llm = new LinearLayoutManager(this);
            this.rv.setLayoutManager(this.llm);
            Intent intent = getIntent();

            if (Intent.ACTION_SEARCH.equals(intent.getAction()) && !intent.hasExtra("MainSearchResults")
                    && !intent.hasExtra("query")) {
                onSearchRequested();
            }

            btnAgregarComparendo = (FloatingActionButton) findViewById(R.id.agregarComparendo);
            btnAgregarComparendo.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    if (ListarInmovilizacionesActivity.this.validarParametrizacion().equals("")) {
                        ListarInmovilizacionesActivity.this
                                .startActivityForResult(new Intent(ListarInmovilizacionesActivity.this,
                                        AgregarInmovilizacionActivity.class), NOTIFICACIONES_ID);
                    }
                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void configurarBuscador(Menu menu) {
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        MenuItem searchItem = menu.findItem(R.id.menu_buscar);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        searchView.setSubmitButtonEnabled(false);

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

            public boolean onQueryTextSubmit(String query) {
                realizarBusqueda(query);
                return true;
            }

            public boolean onQueryTextChange(final String s) {
                return false;
            }
        });
    }

    public void realizarBusqueda(String consulta) {
        try {
            ejecutarConsultaServicios(3, consulta);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void ejecutarConsultaServicios(int parametro, String consulta) {
        String mensaje;
        try {
            mensaje = parametro == 4 ? "Actualizando maestros..." : getString(R.string.ui_listar_inmovilizaciones);
            showProgress(mensaje);
            mConsultarInmovilizacionesTask = new EjecutarConsultarServiciosAsyncTask();
            mConsultarInmovilizacionesTask.execute(parametro, consulta);
        } catch (Exception ex) {
            ex.printStackTrace();
            return;
        }
    }

    @Override
    public void onResume() {
        super.onResume();
        try {
            setTitle(getString(R.string.listar_inmovilizacion_title));
            if (this.app != null) {
                this.daoSession = this.app.getDaoSession();
            }
            ejecutarConsultaServicios(0, "");
            IntentFilter filter = new IntentFilter();
            filter.addAction(RESPUESTA_SERVICIO);
            registerReceiver(mActualizarListaComparendosBroadcastReceiver, filter);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        unregisterReceiver(this.mActualizarListaComparendosBroadcastReceiver);
    }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.base_menu, menu);
        configurarBuscador(menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        try {
            boolean result = false;
            switch (item.getItemId()) {
            case R.id.menu_buscar:
                onSearchRequested();
                return true;
            case R.id.menu_inm_sort_date_asc:
                ejecutarConsultaServicios(1, "");
                result = true;
                break;
            case R.id.menu_inm_sort_date_desc:
                ejecutarConsultaServicios(2, "");
                result = true;
                break;
            case R.id.menu_inm_sincronizar_maestros:
                ejecutarConsultaServicios(4, "");
                result = true;
                break;
            case R.id.menu_inm_sincronizar:
                try {
                    if (UtilidadesGenerales.isOnline()) {
                        startService(new Intent(this, EnviarInmovilizacionService.class));
                    } else {
                        AlertDialog.Builder builder = new AlertDialog.Builder(ListarInmovilizacionesActivity.this);
                        builder.setTitle("Informacin");
                        builder.setMessage(
                                "Revise su conexin a internet. No se pudo realizar el envio de la inmovilizacion, intente nuevamente de forma manual.");
                        builder.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.dismiss();
                            }
                        });
                        AlertDialog alert = builder.create();
                        alert.show();
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                result = true;
                break;
            case R.id.menu_inm_cerrar:
                UtilidadesGenerales.escribirSharedPreferences(R.string.pref_usuario_key, "-1",
                        UtilidadesGenerales.STRING_TYPE);
                app.setIdUsuario(-1);
                app.setUsuario("");
                finish();
                result = true;
                break;
            }
            result = super.onOptionsItemSelected(item);
            return result;

        } catch (Exception ex) {
            ex.printStackTrace();
            return false;
        }
    }

    public class EjecutarConsultarServiciosAsyncTask extends AsyncTask<Object, String, List<Inmovilizacion>> {
        private int opcion = -1;

        @Override
        protected List<Inmovilizacion> doInBackground(Object... params) {
            try {
                List<Inmovilizacion> inmovilizaciones = null;
                opcion = (int) params[0];
                String consulta = (String) params[1];
                WSGruparInterface service = WSGruparClient.getClient();
                switch (opcion) {
                case 0://listar todos los inmovilizaciones
                    inmovilizaciones = inmovilizacionDao.queryBuilder()
                            .orderDesc(InmovilizacionDao.Properties.Fec_ini_inm).list();
                    break;
                case 1:
                    //ordenar ascendentemente por fecha
                    inmovilizaciones = inmovilizacionDao.queryBuilder()
                            .orderAsc(InmovilizacionDao.Properties.Fec_ini_inm).list();
                    break;
                case 2:
                    //ordenar descendentemente por fecha
                    inmovilizaciones = inmovilizacionDao.queryBuilder()
                            .orderDesc(InmovilizacionDao.Properties.Fec_ini_inm).list();
                    break;
                case 3:
                    //aplicar filtro
                    QueryBuilder qb = inmovilizacionDao.queryBuilder();
                    QueryBuilder.LOG_SQL = true;
                    if (UtilidadesGenerales.isOnline()) {
                        Response<WSGruparResult<com.inmovilizaciones.webservice.modelo.Inmovilizacion>> responseInmovilizaciones = service
                                .consultarinmovilizaciones(consulta.replaceAll("/", "-")).execute();
                        if (responseInmovilizaciones != null && responseInmovilizaciones.isSuccessful()) {
                            List<com.inmovilizaciones.webservice.modelo.Inmovilizacion> inmovilizacionesServicio = ((WSGruparResult) responseInmovilizaciones
                                    .body()).getItems();
                            if (inmovilizacionesServicio != null && inmovilizacionesServicio.size() > 0) {
                                SimpleDateFormat formatFechaHora = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
                                inmovilizaciones = new ArrayList();
                                try {
                                    for (com.inmovilizaciones.webservice.modelo.Inmovilizacion inm : inmovilizacionesServicio) {
                                        Inmovilizacion inmovilizacion = new Inmovilizacion();
                                        inmovilizacion
                                                .__setDaoSession(ListarInmovilizacionesActivity.this.daoSession);
                                        inmovilizacion.setNo_comparendo(inm.getNo_comparendo());
                                        if (!(inm.getFec_ini_inm() == null || inm.getFec_ini_inm().equals(""))) {
                                            inmovilizacion
                                                    .setFec_ini_inm(formatFechaHora.parse(inm.getFec_ini_inm()));
                                        }
                                        inmovilizacion.setId_usuario(inm.getId_usuario());
                                        inmovilizacion.setId_agente(inm.getId_agente());
                                        inmovilizacion.setPropietario_presente(inm.getPropietario_presente());
                                        inmovilizacion.setId_infraccion(inm.getId_infraccion());
                                        inmovilizacion.setId_grua(inm.getId_grua());
                                        inmovilizacion.setId_zona(inm.getId_zona());
                                        inmovilizacion.setId_parqueadero(inm.getId_parqueadero());
                                        inmovilizacion.setDesenganche(inm.getDesenganche());
                                        inmovilizacion.setObservacion(inm.getObservacion());
                                        inmovilizacion.setDireccion(inm.getDireccion());
                                        Vehiculo vehiculo = new Vehiculo();
                                        vehiculo.setPlaca(inm.getPlaca());
                                        vehiculo.setNo_chasis(inm.getNo_chasis());
                                        vehiculo.setNo_motor(inm.getNo_motor());
                                        vehiculo.setNo_serie(inm.getNo_serie());
                                        vehiculo.setId_clase_vehiculo(inm.getId_clase_vehiculo());
                                        vehiculo.setId_color(inm.getId_color());
                                        vehiculo.setId_tipo_servicio(inm.getId_tipo_servicio());
                                        inmovilizacion.setVehiculo(vehiculo);
                                        Persona infractor = new Persona();
                                        infractor.setId_tipo_identificacion(inm.getId_tipo_identificacion());
                                        infractor.setNo_identificacion(inm.getNo_identificacion());
                                        infractor.setNombre1(inm.getNombre1());
                                        infractor.setNombre2(inm.getNombre2());
                                        infractor.setApellido1(inm.getApellido1());
                                        infractor.setApellido2(inm.getApellido2());
                                        inmovilizacion.setInfractor(infractor);
                                        inmovilizacion.setEstado("E");
                                        inmovilizaciones.add(inmovilizacion);
                                    }
                                    return inmovilizaciones;
                                } catch (Exception e) {
                                    qb.join(InmovilizacionDao.Properties.Id_infractor, Persona.class);
                                    qb.join(InmovilizacionDao.Properties.Id_agente, Persona.class);
                                    qb.join(InmovilizacionDao.Properties.Id_infraccion, Infraccion.class);
                                    qb.where(new WhereCondition.StringCondition(
                                            " CAST(T.NO_COMPARENDO AS TEXT) LIKE '%" + consulta
                                                    + "%' OR  J1.NO_IDENTIFICACION LIKE '%" + consulta
                                                    + "%' OR J2.placa LIKE '%" + consulta
                                                    + "%' OR strftime('%d/%m/%Y', T.FEC_INI_INM/1000, 'unixepoch') LIKE '%"
                                                    + consulta + "%' OR J3.CODIGO LIKE '%" + consulta + "%' "));
                                    inmovilizaciones = qb.list();
                                }
                            } else {
                                qb.join(InmovilizacionDao.Properties.Id_infractor, Persona.class);
                                qb.join(InmovilizacionDao.Properties.Id_agente, Persona.class);
                                qb.join(InmovilizacionDao.Properties.Id_infraccion, Infraccion.class);
                                qb.where(new WhereCondition.StringCondition(" CAST(T.NO_COMPARENDO AS TEXT) LIKE '%"
                                        + consulta + "%' OR  J1.NO_IDENTIFICACION LIKE '%" + consulta
                                        + "%' OR J2.placa LIKE '%" + consulta
                                        + "%' OR strftime('%d/%m/%Y', T.FEC_INI_INM/1000, 'unixepoch') LIKE '%"
                                        + consulta + "%' OR J3.CODIGO LIKE '%" + consulta + "%' "));
                                inmovilizaciones = qb.list();
                            }
                        } else {
                            qb.join(InmovilizacionDao.Properties.Id_infractor, Persona.class);
                            qb.join(InmovilizacionDao.Properties.Id_agente, Persona.class);
                            qb.join(InmovilizacionDao.Properties.Id_infraccion, Infraccion.class);
                            qb.where(new WhereCondition.StringCondition(" CAST(T.NO_COMPARENDO AS TEXT) LIKE '%"
                                    + consulta + "%' OR  J1.NO_IDENTIFICACION LIKE '%" + consulta
                                    + "%' OR J2.placa LIKE '%" + consulta
                                    + "%' OR strftime('%d/%m/%Y', T.FEC_INI_INM/1000, 'unixepoch') LIKE '%"
                                    + consulta + "%' OR J3.CODIGO LIKE '%" + consulta + "%' "));
                            inmovilizaciones = qb.list();
                        }
                    } else {
                        qb.join(InmovilizacionDao.Properties.Id_infractor, Persona.class);
                        qb.join(InmovilizacionDao.Properties.Id_agente, Persona.class);
                        qb.join(InmovilizacionDao.Properties.Id_infraccion, Infraccion.class);
                        qb.where(new WhereCondition.StringCondition(" CAST(T.NO_COMPARENDO AS TEXT) LIKE '%"
                                + consulta + "%' OR  J1.NO_IDENTIFICACION LIKE '%" + consulta
                                + "%' OR J2.placa LIKE '%" + consulta
                                + "%' OR strftime('%d/%m/%Y', T.FEC_INI_INM/1000, 'unixepoch') LIKE '%" + consulta
                                + "%' OR J3.CODIGO LIKE '%" + consulta + "%' "));
                        inmovilizaciones = qb.list();
                    }
                    break;
                case 4:
                    if (UtilidadesGenerales.isOnline()) {
                        List<Inmovilizacion> inmovilizacionEnviadas = inmovilizacionDao.queryBuilder()
                                .where(InmovilizacionDao.Properties.Estado.eq("E")).list();
                        if (inmovilizacionEnviadas != null && inmovilizacionEnviadas.size() > 0) {
                            inmovilizacionDao.deleteInTx(inmovilizacionEnviadas);
                        }
                        inmovilizaciones = new ArrayList();
                        Call<WSGruparResult<Departamento>> listarDepartamentosCall = service.listarDepartamentos();
                        Response<WSGruparResult<Departamento>> responseDepartamentos = listarDepartamentosCall
                                .execute();
                        if (responseDepartamentos != null && responseDepartamentos.isSuccessful()) {
                            WSGruparResult<Departamento> result = responseDepartamentos.body();
                            List<Departamento> departamentos = result.getItems();
                            if (departamentos != null && departamentos.size() > 0) {
                                publishProgress(
                                        "Actualizando departamentos. N registros: " + departamentos.size());
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                                departamentosDao.deleteAll();
                                departamentosDao.insertInTx(departamentos);
                            } else {
                                publishProgress("No se encontraron registros en departamentos.");
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                            }
                        } else {
                            publishProgress("Error al consultar departamentos.");
                            Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                        }

                        Call<WSGruparResult<Municipio>> listarMunicipiosCall = service.listarMunicipios();
                        Response<WSGruparResult<Municipio>> responseMunicipios = listarMunicipiosCall.execute();
                        if (responseMunicipios != null && responseMunicipios.isSuccessful()) {
                            WSGruparResult<Municipio> result = responseMunicipios.body();
                            List<Municipio> municipios = result.getItems();
                            if (municipios != null && municipios.size() > 0) {
                                publishProgress("Actualizando municipios. N registros: " + municipios.size());
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                                municipioDao.deleteAll();
                                municipioDao.insertInTx(municipios);
                            } else {
                                publishProgress("No se encontraron registros en municipios.");
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                            }
                        } else {
                            publishProgress("Error al consultar municipios.");
                            Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                        }

                        Call<WSGruparResult<Infraccion>> listarInfraccionesCall = service.listarInfracciones();
                        Response<WSGruparResult<Infraccion>> responseInfracciones = listarInfraccionesCall
                                .execute();
                        if (responseInfracciones != null && responseInfracciones.isSuccessful()) {
                            WSGruparResult<Infraccion> result = responseInfracciones.body();
                            List<Infraccion> infracciones = result.getItems();
                            if (infracciones != null && infracciones.size() > 0) {
                                publishProgress("Actualizando infracciones. N registros: " + infracciones.size());
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                                infraccionDao.deleteAll();
                                infraccionDao.insertInTx(infracciones);
                            } else {
                                publishProgress("No se encontraron registros en infracciones.");
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                            }
                        } else {
                            publishProgress("Error al consultar infracciones.");
                            Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                        }

                        Call<WSGruparResult<Parqueadero>> listarParqueaderoCall = service.listarParqueadero();
                        Response<WSGruparResult<Parqueadero>> responseParqueadero = listarParqueaderoCall.execute();
                        if (responseParqueadero != null && responseParqueadero.isSuccessful()) {
                            WSGruparResult<Parqueadero> result = responseParqueadero.body();
                            List<Parqueadero> parqueaderos = result.getItems();
                            if (parqueaderos != null && parqueaderos.size() > 0) {
                                publishProgress("Actualizando parqueaderos. N registros: " + parqueaderos.size());
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                                parqueaderoDao.deleteAll();
                                parqueaderoDao.insertInTx(parqueaderos);
                            } else {
                                publishProgress("No se encontraron registros en parqueadero.");
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                            }
                        } else {
                            publishProgress("Error al consultar parqueaderos.");
                            Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                        }

                        Call<WSGruparResult<Zonas>> listarZonasCall = service.listarZonas();
                        Response<WSGruparResult<Zonas>> responseZonas = listarZonasCall.execute();
                        if (responseZonas != null && responseZonas.isSuccessful()) {
                            WSGruparResult<Zonas> result = responseZonas.body();
                            List<Zonas> zonas = result.getItems();
                            if (zonas != null && zonas.size() > 0) {
                                publishProgress("Actualizando zonas. N registros: " + zonas.size());
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                                zonasDao.deleteAll();
                                zonasDao.insertInTx(zonas);
                            } else {
                                publishProgress("No se encontraron registros en zonas.");
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                            }
                        } else {
                            publishProgress("Error al consultar zonas.");
                            Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                        }

                        Call<WSGruparResult<TipoIdentificacion>> listarTipoIdentificacionCall = service
                                .listarTipoIdentificacion();
                        Response<WSGruparResult<TipoIdentificacion>> responseTipoIdentificacion = listarTipoIdentificacionCall
                                .execute();
                        if (responseTipoIdentificacion != null && responseTipoIdentificacion.isSuccessful()) {
                            WSGruparResult<TipoIdentificacion> result = responseTipoIdentificacion.body();
                            List<TipoIdentificacion> tipoIdentificaciones = result.getItems();
                            if (tipoIdentificaciones != null && tipoIdentificaciones.size() > 0) {
                                publishProgress("Actualizando tipo identificacion. N registros: "
                                        + tipoIdentificaciones.size());
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                                tipoIdentificacionDao.deleteAll();
                                tipoIdentificacionDao.insertInTx(tipoIdentificaciones);
                            } else {
                                publishProgress("No se encontraron registros en tipo identificacion.");
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                            }
                        } else {
                            publishProgress("Error al consultar tipo identificaciones.");
                            Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                        }

                        Call<WSGruparResult<Grua>> listarGruasCall = service.listarGruas();
                        Response<WSGruparResult<Grua>> responseGruas = listarGruasCall.execute();
                        if (responseGruas != null && responseGruas.isSuccessful()) {
                            WSGruparResult<Grua> result = responseGruas.body();
                            List<Grua> gruas = result.getItems();
                            if (gruas != null && gruas.size() > 0) {
                                publishProgress("Actualizando gruas. N registros: " + gruas.size());
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                                gruasDao.deleteAll();
                                gruasDao.insertInTx(gruas);
                            } else {
                                publishProgress("No se encontraron registros en gruas.");
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                            }
                        } else {
                            publishProgress("Error al consultar gruas.");
                            Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                        }

                        Call<WSGruparResult<Color>> listarColoresCall = service.listarColores();
                        Response<WSGruparResult<Color>> responseColores = listarColoresCall.execute();
                        if (responseColores != null && responseColores.isSuccessful()) {
                            WSGruparResult<Color> result = responseColores.body();
                            List<Color> colores = result.getItems();
                            if (colores != null && colores.size() > 0) {
                                publishProgress("Actualizando colores. N registros: " + colores.size());
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                                coloresDao.deleteAll();
                                coloresDao.insertInTx(colores);
                            } else {
                                publishProgress("No se encontraron registros en colores.");
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                            }
                        } else {
                            publishProgress("Error al consultar colores.");
                            Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                        }

                        Call<WSGruparResult<TipoServicio>> listarTipoServicioCall = service.listarTipoServicios();
                        Response<WSGruparResult<TipoServicio>> responseTipoServicios = listarTipoServicioCall
                                .execute();
                        if (responseTipoServicios != null && responseTipoServicios.isSuccessful()) {
                            WSGruparResult<TipoServicio> result = responseTipoServicios.body();
                            List<TipoServicio> tipoServicios = result.getItems();
                            if (tipoServicios != null && tipoServicios.size() > 0) {
                                publishProgress(
                                        "Actualizando tipo servicios. N registros: " + tipoServicios.size());
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                                tipoServicioDao.deleteAll();
                                tipoServicioDao.insertInTx(tipoServicios);
                            } else {
                                publishProgress("No se encontraron registros en tipo servicios.");
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                            }
                        } else {
                            publishProgress("Error al consultar tipo servicios.");
                            Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                        }

                        Call<WSGruparResult<ClaseVehiculo>> listarClaseVehiculoCall = service
                                .listarClaseVehiculos();
                        Response<WSGruparResult<ClaseVehiculo>> responseClaseVehiculo = listarClaseVehiculoCall
                                .execute();
                        if (responseClaseVehiculo != null && responseClaseVehiculo.isSuccessful()) {
                            WSGruparResult<ClaseVehiculo> result = responseClaseVehiculo.body();
                            List<ClaseVehiculo> claseVehiculos = result.getItems();
                            if (claseVehiculos != null && claseVehiculos.size() > 0) {
                                publishProgress(
                                        "Actualizando clase vehiculos. N registros: " + claseVehiculos.size());
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                                claseVehiculoDao.deleteAll();
                                claseVehiculoDao.insertInTx(claseVehiculos);
                            } else {
                                publishProgress("No se encontraron registros en clase vehiculos.");
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                            }
                        } else {
                            publishProgress("Error al consultar clase vehiculos.");
                            Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                        }

                        /*Call<WSGruparResult<Vehiculo>> listarVehiculoCall = service.listarVehiculos();
                        Response<WSGruparResult<Vehiculo>> responseVehiculo = listarVehiculoCall.execute();
                        if (responseVehiculo != null && responseVehiculo.isSuccessful()) {
                        WSGruparResult<Vehiculo> result = responseVehiculo.body();
                        List<Vehiculo> vehiculos = result.getItems();
                        if (vehiculos != null && vehiculos.size() > 0) {
                            publishProgress("Actualizando vehiculos. N registros: " + vehiculos.size());
                            Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                            vehiculoDao.deleteAll();
                            
                            vehiculoDao.insertInTx(vehiculos);
                            
                        } else {
                            publishProgress("No se encontraron registros en vehiculos.");
                            Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                        }
                        } else {
                        publishProgress("Error al consultar vehiculos.");
                        Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                        }*/

                        Call<WSGruparResult<Persona>> listarPersonasCall = service.listarPersonas();
                        Response<WSGruparResult<Persona>> responsePersonas = listarPersonasCall.execute();
                        if (responsePersonas != null && responsePersonas.isSuccessful()) {
                            WSGruparResult<Persona> result = responsePersonas.body();
                            List<Persona> personas = result.getItems();
                            if (personas != null && personas.size() > 0) {
                                publishProgress(
                                        "Actualizando usuarios y agentes. N registros: " + personas.size());
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                                /*List<Persona> agenteUsuarios = personasDao.queryBuilder().where(PersonaDao.Properties.Tipo.eq("U"), PersonaDao.Properties.Tipo.eq("A")).list();
                                if (agenteUsuarios != null && agenteUsuarios.size() > 0) {
                                    personasDao.deleteInTx(agenteUsuarios);
                                }*/
                                personasDao.insertOrReplaceInTx(personas);
                            } else {
                                publishProgress("No se encontraron registros en usuarios y agentes.");
                                Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                            }
                        } else {
                            publishProgress("Error al consultar usuarios y agentes.");
                            Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                        }
                    } else {
                        publishProgress(
                                "No fue posible la actualizacion de maestros, verifique su conexion a internet e intente nuevamente.");
                        Thread.sleep(SLEEP_PROGRESS_MAESTROS);
                    }
                    break;
                }
                return inmovilizaciones;
            } catch (Exception ex) {
                Log.e(TAG, "ListarInmovilizaciones.doInBackground: fallo consultar comparendos");
                Log.e(TAG, "", ex);
                return null;
            }
        }

        @Override
        protected void onProgressUpdate(String... values) {
            super.onProgressUpdate(values);
            try {
                if (mProgressDialog != null)
                    mProgressDialog.actualizarMensaje(values[0]);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        @Override
        protected void onPostExecute(final List<Inmovilizacion> inmovilizaciones) {
            onConsultarInmovilizacionFinish(inmovilizaciones, opcion);
        }

        @Override
        protected void onCancelled() {
            onConsultarInmovilizacionesCancel();
        }
    }

    private void onConsultarInmovilizacionFinish(List<Inmovilizacion> inmovilizaciones, int opcion) {
        this.mConsultarInmovilizacionesTask = null;
        hideProgress();
        if (opcion != 4) {
            this.mAdapter = new InmovilizacionRecyclerView(inmovilizaciones, this);
            this.rv.setAdapter(this.mAdapter);
        }
        AlertDialog.Builder builder;
        if ((inmovilizaciones == null || (inmovilizaciones != null && inmovilizaciones.size() == 0))
                && opcion == 3) {
            builder = new AlertDialog.Builder(ListarInmovilizacionesActivity.this);
            builder.setTitle("Informacin");
            builder.setMessage("No se encontraron inmovilizaciones.");
            builder.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        } else if (inmovilizaciones != null && inmovilizaciones.size() > 0 && opcion == 3) {
            builder = new AlertDialog.Builder(ListarInmovilizacionesActivity.this);
            builder.setTitle("Informacin");
            builder.setMessage("Se encontraron " + inmovilizaciones.size() + " inmovilizaciones.");
            builder.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            AlertDialog alert = builder.create();
            alert.show();
        }
    }

    protected void showProgress(String mensaje) {
        this.mProgressDialog = ProgressDialogFragment.newInstance(mensaje);
        this.mProgressDialog.show(getSupportFragmentManager(), "dialog_loading");
    }

    private void hideProgress() {
        try {
            if (this.mProgressDialog != null) {
                this.mProgressDialog.dismissAllowingStateLoss();
                this.mProgressDialog = null;
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    private void onConsultarInmovilizacionesCancel() {
        cancel();
    }

    public void cancel() {
        if (this.mConsultarInmovilizacionesTask != null) {
            this.mConsultarInmovilizacionesTask.cancel(true);
        }
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == NOTIFICACIONES_ID && resultCode == RESULT_OK) {
            try {
                ejecutarConsultaServicios(0, "");
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

    public String validarParametrizacion() {
        String parametrosComparendos = "";
        try {
            if (this.departamentosDao.queryBuilder().count() == 0) {
                parametrosComparendos = parametrosComparendos + "-No existen departamentos registrados.\n";
            }
            if (this.municipioDao.queryBuilder().count() == 0) {
                parametrosComparendos = parametrosComparendos + "-No existen municipios registrados.\n";
            }
            if (this.infraccionDao.queryBuilder().count() == 0) {
                parametrosComparendos = parametrosComparendos + "-No existen infracciones registradas.\n";
            }
            if (this.zonasDao.queryBuilder().count() == 0) {
                parametrosComparendos = parametrosComparendos + "-No existen zonas registradas.\n";
            }
            if (this.parqueaderoDao.queryBuilder().count() == 0) {
                parametrosComparendos = parametrosComparendos + "-No existen parqueaderos registrados.\n";
            }
            if (this.personasDao.queryBuilder().count() == 0) {
                parametrosComparendos = parametrosComparendos
                        + "-No existen usuarios y agentes de tr\u00e1nsito registrados.\n";
            }
            if (this.tipoIdentificacionDao.queryBuilder().count() == 0) {
                parametrosComparendos = parametrosComparendos + "-No existen tipo documentos registrados.\n";
            }
            if (this.gruasDao.queryBuilder().count() == 0) {
                parametrosComparendos = parametrosComparendos + "-No existen gruas registradas.\n";
            }
            if (this.coloresDao.queryBuilder().count() == 0) {
                parametrosComparendos = parametrosComparendos + "-No existen colores registrados.\n";
            }
            if (this.tipoServicioDao.queryBuilder().count() == 0) {
                parametrosComparendos = parametrosComparendos + "-No existen tipo de servicios registrados.\n";
            }
            if (this.claseVehiculoDao.queryBuilder().count() == 0) {
                parametrosComparendos = parametrosComparendos + "-No existen clases de vehiculos registrados.\n";
            }
            if (!parametrosComparendos.equals("")) {
                parametrosComparendos = parametrosComparendos + "\nEjecute la opci\u00f3n: sincronizar maestros.";
            }
            if (!parametrosComparendos.equals("")) {
                AlertDialog.Builder builder = new AlertDialog.Builder(ListarInmovilizacionesActivity.this);
                builder.setTitle("Informacin");
                builder.setMessage(parametrosComparendos);
                builder.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
                AlertDialog alert = builder.create();
                alert.show();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return parametrosComparendos;
    }

    public static class ProgressDialogFragment extends DialogFragment {

        private ProgressDialog dialog;
        private String mensaje;

        public static ProgressDialogFragment newInstance() {
            ProgressDialogFragment frag = new ProgressDialogFragment();
            return frag;
        }

        public void inicializarMensaje(String mensaje) {
            try {
                this.mensaje = mensaje;
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

        public void actualizarMensaje(String mensaje) {
            try {
                if (this.dialog != null) {
                    this.dialog.setMessage(mensaje);
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

        public static ProgressDialogFragment newInstance(String mensaje) {
            ProgressDialogFragment frag = new ProgressDialogFragment();
            frag.inicializarMensaje(mensaje);
            return frag;
        }

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            dialog = new ProgressDialog(getActivity());
            dialog.setMessage(this.mensaje);
            dialog.setIndeterminate(true);
            dialog.setCancelable(true);
            dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
                public void onCancel(DialogInterface dialog) {
                    Log.i(TAG, "Cargando inmovilizaciones fue cancelado por el usuario.");
                    ((ListarInmovilizacionesActivity) getActivity()).cancel();
                }
            });
            return dialog;
        }
    }
}