diff --git a/REPARTO.iml b/REPARTO.iml
new file mode 100644
index 0000000..afeb48b
--- /dev/null
+++ b/REPARTO.iml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/app/app.iml b/app/app.iml
new file mode 100644
index 0000000..9efad8e
--- /dev/null
+++ b/app/app.iml
@@ -0,0 +1,183 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ generateDebugSources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..07ab39a
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,33 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 28
+ defaultConfig {
+ applicationId "verdnatura.es.repartoverdnatura"
+ minSdkVersion 19
+ targetSdkVersion 28
+ versionCode 2
+ versionName "1.2"
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'com.android.support:appcompat-v7:28.0.0'
+ implementation 'com.android.support.constraint:constraint-layout:1.1.3'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'com.android.support.test:runner:1.0.2'
+ androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+ implementation 'com.android.support:recyclerview-v7:28.0.0'
+ implementation 'com.squareup.retrofit2:retrofit:2.0.2'
+ implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
+ implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
+ implementation 'com.simplify:ink:1.0.2'
+}
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..f1b4245
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/app/release/output.json b/app/release/output.json
new file mode 100644
index 0000000..02280a3
--- /dev/null
+++ b/app/release/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":2,"versionName":"1.2","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
\ No newline at end of file
diff --git a/app/release/vndelivery.apk b/app/release/vndelivery.apk
new file mode 100644
index 0000000..d1bb86f
Binary files /dev/null and b/app/release/vndelivery.apk differ
diff --git a/app/src/androidTest/java/verdnatura/es/repartoverdnatura/ExampleInstrumentedTest.java b/app/src/androidTest/java/verdnatura/es/repartoverdnatura/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..9374394
--- /dev/null
+++ b/app/src/androidTest/java/verdnatura/es/repartoverdnatura/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package verdnatura.es.repartoverdnatura;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getTargetContext();
+
+ assertEquals("verdnatura.es.repartoverdnatura", appContext.getPackageName());
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..874589f
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/verdnatura/es/repartoverdnatura/ADAPTERS/ClientAdapter.java b/app/src/main/java/verdnatura/es/repartoverdnatura/ADAPTERS/ClientAdapter.java
new file mode 100644
index 0000000..b8d966c
--- /dev/null
+++ b/app/src/main/java/verdnatura/es/repartoverdnatura/ADAPTERS/ClientAdapter.java
@@ -0,0 +1,148 @@
+package verdnatura.es.repartoverdnatura.ADAPTERS;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import java.util.List;
+
+import verdnatura.es.repartoverdnatura.MODELS.ClientTickets;
+import verdnatura.es.repartoverdnatura.MODELS.Cliente;
+import verdnatura.es.repartoverdnatura.MODELS.Ticket;
+import verdnatura.es.repartoverdnatura.R;
+import verdnatura.es.repartoverdnatura.Tickets;
+
+public class ClientAdapter extends ArrayAdapter {
+ public ClientAdapter(Context context, List clientes) {
+ super(context,0,clientes);
+ }
+
+ @Override
+ public View getView(final int position, View convertView, ViewGroup parent) {
+ ClientTickets clientes = getItem(position);
+
+ if (convertView == null){
+ convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_ticket,parent,false);
+ }
+
+ TextView txtCliente = convertView.findViewById(R.id.textView21);
+ TextView txtConsignatorio = convertView.findViewById(R.id.textView17);
+ TextView txtTienda = convertView.findViewById(R.id.textView25);
+ TextView txtCalle = convertView.findViewById(R.id.textView24);
+ TextView txtPC = convertView.findViewById(R.id.textView27);
+ TextView txtCiudad = convertView.findViewById(R.id.textView26);
+ TextView txtNote = convertView.findViewById(R.id.txtNote);
+
+ txtCliente.setText(clientes.getClient());
+ txtConsignatorio.setText(clientes.getAddress());
+ txtTienda.setText(clientes.getClientName());
+ txtCalle.setText(clientes.getAddressName());
+ txtPC.setText(clientes.getPostalCode());
+ txtCiudad.setText(clientes.getCity());
+ /*if(clientes.getNote()!= null ){
+ txtNote.setText(clientes.getNote());
+ txtNote.setVisibility(View.VISIBLE);
+ }else{
+ txtNote.setVisibility(View.GONE);
+ }*/
+
+ LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ LinearLayout viewTickets = convertView.findViewById(R.id.layoutTickets);
+ viewTickets.removeAllViews();
+ View v;
+ for (int i =0; i < clientes.getTickets().size();i++){
+ v = vi.inflate(R.layout.row_sub_ticket,null);
+ TextView txtTicket = v.findViewById(R.id.textView29);
+ TextView txtPackage = v.findViewById(R.id.textView31);
+ TextView txtWarehouse = v.findViewById(R.id.textView33);
+ ImageView btnPolizon = v.findViewById(R.id.btnPolizon);
+ txtTicket.setText(clientes.getTickets().get(i).get("Id"));
+ txtPackage.setText(clientes.getTickets().get(i).get("Packages"));
+ txtWarehouse.setText(clientes.getTickets().get(i).get("Warehouse"));
+ if(clientes.getTickets().get(i).get("Polizon") != null){
+ final int posTicket = i;
+ btnPolizon.setVisibility(View.VISIBLE);
+ btnPolizon.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if(getContext() instanceof Tickets){
+ ((Tickets) getContext()).showPolizon(position,posTicket);
+ }
+ }
+ });
+ }else{
+ btnPolizon.setVisibility(View.GONE);
+ }
+ //rellenamos datos
+ viewTickets.addView(v);
+ }
+
+
+ ImageView btnPhone = convertView.findViewById(R.id.imageView4);
+ ImageView btnMap = convertView.findViewById(R.id.imageView5);
+ ImageView btnSign = convertView.findViewById(R.id.imageView6);
+ ImageView btnNote = convertView.findViewById(R.id.imageView7);
+ LinearLayout lyNote = convertView.findViewById(R.id.btnNote);
+ ImageView btnAddNote = convertView.findViewById(R.id.imageView9);
+
+ if (clientes.getNote() != null && clientes.getNote().length()>0){
+ lyNote.setVisibility(View.VISIBLE);
+ }else{
+ lyNote.setVisibility(View.GONE);
+ }
+
+
+ btnPhone.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if(getContext() instanceof Tickets){
+ ((Tickets) getContext()).showPhones(position);
+ }
+ }
+ });
+
+ btnMap.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if(getContext() instanceof Tickets){
+ ((Tickets) getContext()).goMaps(position);
+ }
+ }
+ });
+
+ btnSign.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if(getContext() instanceof Tickets){
+ ((Tickets) getContext()).goSign(position);
+ }
+ }
+ });
+
+ btnNote.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if(getContext() instanceof Tickets){
+ ((Tickets) getContext()).showNote(position);
+ }
+ }
+ });
+
+ btnAddNote.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if(getContext() instanceof Tickets){
+ ((Tickets) getContext()).goToNotes(position);
+ }
+ }
+ });
+
+ return convertView;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/verdnatura/es/repartoverdnatura/ADAPTERS/PendingTickets.java b/app/src/main/java/verdnatura/es/repartoverdnatura/ADAPTERS/PendingTickets.java
new file mode 100644
index 0000000..15bf5b8
--- /dev/null
+++ b/app/src/main/java/verdnatura/es/repartoverdnatura/ADAPTERS/PendingTickets.java
@@ -0,0 +1,50 @@
+package verdnatura.es.repartoverdnatura.ADAPTERS;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+
+import org.w3c.dom.Text;
+
+import java.util.List;
+
+import verdnatura.es.repartoverdnatura.MODELS.SignDataUpload;
+import verdnatura.es.repartoverdnatura.MODELS.Ticket;
+import verdnatura.es.repartoverdnatura.MainActivity;
+import verdnatura.es.repartoverdnatura.R;
+
+public class PendingTickets extends ArrayAdapter {
+public PendingTickets(Context context, List signs) {
+ super(context,0,signs);
+ }
+
+@Override
+public View getView(final int position, View convertView, ViewGroup parent) {
+ SignDataUpload sign = getItem(position);
+
+ if (convertView == null){
+ convertView = LayoutInflater.from(getContext()).inflate(R.layout.ticket_pending_row,parent,false);
+ }
+
+ TextView txtIdCliente = convertView.findViewById(R.id.txtIdCliente);
+ TextView txtNameCliente = convertView.findViewById(R.id.txtNameCliente);
+
+ txtIdCliente.setText(sign.getIdClient());
+ txtNameCliente.setText(sign.getClientName());
+
+ convertView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (getContext() instanceof MainActivity) {
+ ((MainActivity) getContext()).savePending(position);
+ }
+ }
+ });
+
+
+ return convertView;
+ }
+}
diff --git a/app/src/main/java/verdnatura/es/repartoverdnatura/ADAPTERS/PhonesAdapter.java b/app/src/main/java/verdnatura/es/repartoverdnatura/ADAPTERS/PhonesAdapter.java
new file mode 100644
index 0000000..46b253a
--- /dev/null
+++ b/app/src/main/java/verdnatura/es/repartoverdnatura/ADAPTERS/PhonesAdapter.java
@@ -0,0 +1,60 @@
+package verdnatura.es.repartoverdnatura.ADAPTERS;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.List;
+import verdnatura.es.repartoverdnatura.R;
+import verdnatura.es.repartoverdnatura.Tickets;
+
+public class PhonesAdapter extends ArrayAdapter {
+ private DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+ public List phones;
+
+
+
+ public PhonesAdapter(Context context, List phones) {
+ super(context,0,phones);
+ this.phones = phones;
+ }
+
+ @Override
+ public View getView(final int position, View convertView, ViewGroup parent) {
+ final String phone = getItem(position);
+
+ if (convertView == null){
+ convertView = LayoutInflater.from(getContext()).inflate(R.layout.phone_row,parent,false);
+ }
+ TextView txtTitulo = convertView.findViewById(R.id.txtTitulo);
+ TextView txtPhone = convertView.findViewById(R.id.txtPhone);
+
+ if(position < (phones.size() - 1)){
+
+ txtTitulo.setText(getContext().getResources().getString(R.string.telefono)+" "+(position+1));
+
+
+ }else{
+ txtTitulo.setText(getContext().getResources().getString(R.string.comercial));
+ }
+ txtPhone.setText(phone);
+
+ convertView.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View view, MotionEvent motionEvent) {
+ if(getContext() instanceof Tickets){
+ ((Tickets) getContext()).llamarTelefono(phone);
+ }
+
+ return false;
+ }
+ });
+
+ return convertView;
+ }
+}
diff --git a/app/src/main/java/verdnatura/es/repartoverdnatura/ADAPTERS/RutaAdapter.java b/app/src/main/java/verdnatura/es/repartoverdnatura/ADAPTERS/RutaAdapter.java
new file mode 100644
index 0000000..a91cc12
--- /dev/null
+++ b/app/src/main/java/verdnatura/es/repartoverdnatura/ADAPTERS/RutaAdapter.java
@@ -0,0 +1,93 @@
+package verdnatura.es.repartoverdnatura.ADAPTERS;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.List;
+
+import verdnatura.es.repartoverdnatura.MODELS.Ruta;
+import verdnatura.es.repartoverdnatura.MainActivity;
+import verdnatura.es.repartoverdnatura.R;
+import verdnatura.es.repartoverdnatura.UTILS.LocalStorage;
+
+public class RutaAdapter extends ArrayAdapter {
+ private DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+ public RutaAdapter(Context context, List rutas) {
+ super(context,0,rutas);
+ }
+
+ @Override
+ public View getView(final int position, View convertView, ViewGroup parent) {
+ Ruta ruta = getItem(position);
+
+ if (ruta.getHeader()){
+ convertView = LayoutInflater.from(getContext()).inflate(R.layout.header_route,parent,false);
+ TextView txtHour = convertView.findViewById(R.id.textView16);
+ try {
+ txtHour.setText(new SimpleDateFormat("dd/MM/yyyy").format(format.parse(ruta.getDate())));
+ }catch (Exception e){
+
+ }
+
+ }else{
+ convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_route,parent,false);
+ TextView txtIdRuta = convertView.findViewById(R.id.textView11);
+ TextView txtZona = convertView.findViewById(R.id.textView8);
+ TextView txtPalete = convertView.findViewById(R.id.textView12);
+ TextView txtM3 = convertView.findViewById(R.id.txtM3);
+ TextView txtHour = convertView.findViewById(R.id.textView15);
+ LinearLayout btnShow = convertView.findViewById(R.id.linearLayout);
+ TextView btnCargador = convertView.findViewById(R.id.btnCargadores);
+ TextView txtOnline = convertView.findViewById(R.id.txtOnline);
+ ImageView imgNoWeb = convertView.findViewById(R.id.imageView10);
+
+ txtIdRuta.setText(ruta.getId());
+ txtZona.setText(ruta.getAgency());
+ txtPalete.setText(ruta.getPlate());
+ txtM3.setText(ruta.getM3());
+ txtHour.setText(ruta.getHour());
+
+ btnShow.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (getContext() instanceof MainActivity) {
+ ((MainActivity) getContext()).onRouteSelected(position);
+ }
+ }
+ });
+
+ btnCargador.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (getContext() instanceof MainActivity) {
+ ((MainActivity) getContext()).goToLoaders(position);
+ }
+ }
+ });
+
+ if (LocalStorage.isOfflineAviable(getContext(),ruta.getId())){
+ txtOnline.setText(getContext().getResources().getString(R.string.disponible_offline));
+ txtOnline.setTextColor(getContext().getResources().getColor(R.color.colorGreen));
+ imgNoWeb.setVisibility(View.GONE);
+ }else{
+ txtOnline.setText(getContext().getResources().getString(R.string.no_disponible));
+ txtOnline.setTextColor(getContext().getResources().getColor(R.color.colorGray));
+ imgNoWeb.setVisibility(View.VISIBLE);
+ }
+
+ }
+
+
+
+ return convertView;
+ }
+}
diff --git a/app/src/main/java/verdnatura/es/repartoverdnatura/ADAPTERS/WorkerAdapter.java b/app/src/main/java/verdnatura/es/repartoverdnatura/ADAPTERS/WorkerAdapter.java
new file mode 100644
index 0000000..68118cd
--- /dev/null
+++ b/app/src/main/java/verdnatura/es/repartoverdnatura/ADAPTERS/WorkerAdapter.java
@@ -0,0 +1,122 @@
+package verdnatura.es.repartoverdnatura.ADAPTERS;
+
+import android.content.Context;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.Filter;
+import android.widget.Filterable;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+import verdnatura.es.repartoverdnatura.LoadersActivity;
+import verdnatura.es.repartoverdnatura.MODELS.Worker;
+import verdnatura.es.repartoverdnatura.R;
+
+public class WorkerAdapter extends ArrayAdapter implements Filterable {
+ private DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+ List workers;
+ List allWorkers;
+ public WorkerAdapter(Context context, List workers) {
+ super(context,0,workers);
+ this.workers = workers;
+ this.allWorkers = workers;
+ }
+
+ @Override
+ public View getView(final int position, View convertView, ViewGroup parent) {
+ final Worker worker = getItem(position);
+
+ convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_worker,parent,false);
+ TextView txtId = convertView.findViewById(R.id.textView11);
+ TextView txtFullName = convertView.findViewById(R.id.textView8);
+ TextView txtWorkerCode = convertView.findViewById(R.id.textView13);
+ TextView txtName = convertView.findViewById(R.id.txtCity);
+ LinearLayout layerSelected = convertView.findViewById(R.id.layerSelected);
+ if (worker.getSelected()){
+ layerSelected.setBackgroundColor(getContext().getResources().getColor(R.color.colorPrimary));
+ }else{
+ layerSelected.setBackgroundColor(getContext().getResources().getColor(R.color.colorMainBg));
+ }
+
+ txtId.setText(worker.getId());
+ txtFullName.setText(worker.getFullName());
+ txtWorkerCode.setText(worker.getWorkerCode());
+ txtName.setText(worker.getName());
+
+ convertView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (getContext() instanceof LoadersActivity){
+ ((LoadersActivity) getContext()).setSelectedWorker(worker);
+ }
+
+ }
+ });
+
+ return convertView;
+ }
+
+ @Override
+ public int getCount() {
+ return workers.size();
+ }
+
+ @Override
+ public Worker getItem(int position) {
+ return workers.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ public List getAllWorkers(){
+ return allWorkers;
+ }
+
+ @Override
+ public Filter getFilter() {
+ Filter filter = new Filter() {
+
+ @SuppressWarnings("unchecked")
+ @Override
+ protected void publishResults(CharSequence constraint, FilterResults results) {
+ workers = (List) results.values;
+ notifyDataSetChanged();
+ }
+
+ @Override
+ protected FilterResults performFiltering(CharSequence constraint) {
+
+ FilterResults results = new FilterResults();
+ ArrayList FilteredArrayNames = new ArrayList<>();
+
+ constraint = constraint.toString().toLowerCase();
+ for (int i = 0; i < allWorkers.size(); i++) {
+ String dataNames = allWorkers.get(i).getFullName();
+ String dataCode = allWorkers.get(i).getWorkerCode();
+ if (dataNames.toLowerCase().contains(constraint.toString()) || dataCode.toLowerCase().contains(constraint.toString())) {
+ FilteredArrayNames.add(allWorkers.get(i));
+ }
+ }
+
+ results.count = FilteredArrayNames.size();
+ results.values = FilteredArrayNames;
+ Log.e("VALUES", results.values.toString());
+
+ return results;
+ }
+ };
+
+ return filter;
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/verdnatura/es/repartoverdnatura/ConfigureActivity.java b/app/src/main/java/verdnatura/es/repartoverdnatura/ConfigureActivity.java
new file mode 100644
index 0000000..e229781
--- /dev/null
+++ b/app/src/main/java/verdnatura/es/repartoverdnatura/ConfigureActivity.java
@@ -0,0 +1,156 @@
+package verdnatura.es.repartoverdnatura;
+
+import android.app.Activity;
+import android.app.TimePickerDialog;
+import android.content.Intent;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.TimePicker;
+
+import java.text.DecimalFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+import verdnatura.es.repartoverdnatura.INTERFACES.RestClient;
+import verdnatura.es.repartoverdnatura.MODELS.Ruta;
+import verdnatura.es.repartoverdnatura.UTILS.ApiUtils;
+import verdnatura.es.repartoverdnatura.UTILS.Utils;
+
+public class ConfigureActivity extends AppCompatActivity {
+
+ private TextView txtTitle;
+ private EditText txtKmStart,txtKmFinish,txtHourStart,txtHourFinish;
+ public Ruta route;
+ private RestClient restClient;
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ restClient = ApiUtils.getAPIService();
+ Intent intent = this.getIntent();
+ Bundle bundle = intent.getExtras();
+ route = (Ruta) bundle.getSerializable("route");
+ setContentView(R.layout.activity_configure);
+ setViews();
+ setEvents();
+ }
+
+ private void setViews(){
+ txtTitle = findViewById(R.id.textView19);
+ txtTitle.setText(route.getAgency());
+
+ txtKmStart = findViewById(R.id.editText);
+ txtKmStart.setText(route.getKmStart());
+ txtKmFinish = findViewById(R.id.editText1);
+ txtKmFinish.setText(route.getKmEnd());
+ txtHourStart = findViewById(R.id.editText12);
+ txtHourStart.setText(getHour(route.getdStart()));
+ txtHourFinish = findViewById(R.id.editText123);
+ txtHourFinish.setText(getHour(route.getdEnd()));
+ }
+
+ private void setEvents(){
+ txtHourStart.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+
+ TimePickerDialog mTimePicker;
+ Calendar mcurrentTime = Calendar.getInstance();
+ int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
+ int minute = mcurrentTime.get(Calendar.MINUTE);
+
+ mTimePicker = new TimePickerDialog(ConfigureActivity.this, new TimePickerDialog.OnTimeSetListener() {
+ @Override
+ public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
+ txtHourStart.setText( selectedHour + ":" + selectedMinute);
+ }
+ }, hour, minute, true);//Yes 24 hour time
+ mTimePicker.setTitle("Select Time");
+ mTimePicker.show();
+ }
+ });
+
+ txtHourFinish.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+
+ TimePickerDialog mTimePicker;
+ Calendar mcurrentTime = Calendar.getInstance();
+ int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
+ int minute = mcurrentTime.get(Calendar.MINUTE);
+
+ mTimePicker = new TimePickerDialog(ConfigureActivity.this, new TimePickerDialog.OnTimeSetListener() {
+ @Override
+ public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
+ txtHourFinish.setText( selectedHour + ":" + selectedMinute);
+ }
+ }, hour, minute, true);//Yes 24 hour time
+ mTimePicker.setTitle("Select Time");
+ mTimePicker.show();
+ }
+ });
+ }
+
+ private String getHour(String date) {
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Calendar cal = Calendar.getInstance();
+ try {
+ cal.setTime(format.parse(date));
+ DecimalFormat f = new DecimalFormat("00");
+ return ""+f.format(cal.get(Calendar.HOUR_OF_DAY))+":"+f.format(cal.get(Calendar.MINUTE));
+
+ } catch (ParseException e) {
+ e.printStackTrace();
+ return "00:00";
+ }
+ }
+
+ public void sendConfig(View v){
+ Utils.progressBar.show(this,getResources().getString(R.string.please_wait));
+ final ConfigureActivity that = this;
+ Object[] args = new Object[5];
+ args[0] = route.getId();
+ args[1] = txtKmStart.getText().toString().trim();
+ args[2] = txtKmFinish.getText().toString().trim();
+ args[3] = txtHourStart.getText().toString().trim();
+ args[4] = txtHourFinish.getText().toString().trim();
+ restClient.saveConfig(Utils.getMapWhitUser(this),args).enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ Utils.progressBar.getDialog().dismiss();
+ if(response.isSuccessful()){
+ if (response.body().equals("Finish")){
+ Log.i("INFO","guardado");
+ Intent returnIntent = new Intent();
+ route.setKmStart(txtKmStart.getText().toString().trim());
+ route.setKmEnd(txtKmFinish.getText().toString().trim());
+ route.setdStart("2019-03-09 "+txtHourStart.getText().toString().trim()+":00");
+ route.setdEnd("2019-03-09 "+txtHourFinish.getText().toString().trim()+":00");
+ returnIntent.putExtra("route",route);
+ setResult(Activity.RESULT_OK,returnIntent);
+ finish();
+ }else{
+ Utils.showErrorDialog(that,that.getResources().getString(R.string.error_conexion));
+ }
+
+ }else{
+ Log.i("ERROR","error al guardar");
+ Utils.showErrorDialog(that,that.getResources().getString(R.string.error_conexion));
+ }
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ Utils.progressBar.getDialog().dismiss();
+ Utils.showErrorDialog(that,that.getResources().getString(R.string.error_conexion));
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/verdnatura/es/repartoverdnatura/INTERFACES/RestClient.java b/app/src/main/java/verdnatura/es/repartoverdnatura/INTERFACES/RestClient.java
new file mode 100644
index 0000000..30cd3e9
--- /dev/null
+++ b/app/src/main/java/verdnatura/es/repartoverdnatura/INTERFACES/RestClient.java
@@ -0,0 +1,44 @@
+package verdnatura.es.repartoverdnatura.INTERFACES;
+
+import java.util.List;
+import java.util.Map;
+import retrofit2.Call;
+import retrofit2.http.Body;
+import retrofit2.http.HeaderMap;
+import retrofit2.http.POST;
+import verdnatura.es.repartoverdnatura.MODELS.Cliente;
+import verdnatura.es.repartoverdnatura.MODELS.Ruta;
+import verdnatura.es.repartoverdnatura.MODELS.Version;
+import verdnatura.es.repartoverdnatura.MODELS.Worker;
+
+
+public interface RestClient {
+ @POST("/security/login")
+ Call login(@HeaderMap Map headers, @Body String[] userData);
+
+ @POST("/security/getVersion")
+ Call getVersion(@HeaderMap Map headers, @Body String[] userData);
+
+ @POST("/delivery/get_routes")
+ Call> getRoutes(@HeaderMap Map headers);
+
+ @POST("/delivery/get_tickets")
+ Call> getClients(@HeaderMap Map headers, @Body String[] route);
+
+ @POST("/delivery/save_sign")
+ Call saveSign(@HeaderMap Map headers,@Body Object[] args);
+
+ @POST("/delivery/update_routes")
+ Call saveConfig(@HeaderMap Map headers,@Body Object[] args);
+
+ @POST("/delivery/getWorkers")
+ Call> getWorkers(@HeaderMap Map headers);
+
+ @POST("/delivery/saveLoadersWorkers")
+ Call saveLoadersWorkers(@HeaderMap Map headers,@Body Object[] args);
+
+ @POST("/delivery/addNote")
+ Call addNote(@HeaderMap Map headers,@Body Object[] args);
+
+
+}
diff --git a/app/src/main/java/verdnatura/es/repartoverdnatura/InfoActivity.java b/app/src/main/java/verdnatura/es/repartoverdnatura/InfoActivity.java
new file mode 100644
index 0000000..2bb42f4
--- /dev/null
+++ b/app/src/main/java/verdnatura/es/repartoverdnatura/InfoActivity.java
@@ -0,0 +1,13 @@
+package verdnatura.es.repartoverdnatura;
+
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+
+public class InfoActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_info);
+ }
+}
diff --git a/app/src/main/java/verdnatura/es/repartoverdnatura/LoadersActivity.java b/app/src/main/java/verdnatura/es/repartoverdnatura/LoadersActivity.java
new file mode 100644
index 0000000..80e58a8
--- /dev/null
+++ b/app/src/main/java/verdnatura/es/repartoverdnatura/LoadersActivity.java
@@ -0,0 +1,196 @@
+package verdnatura.es.repartoverdnatura;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.EditText;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Stream;
+
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+import verdnatura.es.repartoverdnatura.ADAPTERS.RutaAdapter;
+import verdnatura.es.repartoverdnatura.ADAPTERS.WorkerAdapter;
+import verdnatura.es.repartoverdnatura.INTERFACES.RestClient;
+import verdnatura.es.repartoverdnatura.MODELS.Ruta;
+import verdnatura.es.repartoverdnatura.MODELS.Worker;
+import verdnatura.es.repartoverdnatura.MODELS.WorkerSave;
+import verdnatura.es.repartoverdnatura.UTILS.ApiUtils;
+import verdnatura.es.repartoverdnatura.UTILS.Utils;
+
+public class LoadersActivity extends AppCompatActivity {
+
+ private ListView workersListView;
+ private ArrayList listWorkers = new ArrayList<>();
+ private ArrayList listWorkersSelected = new ArrayList<>();
+ private ArrayList listWorkersNoSelected = new ArrayList<>();
+ private WorkerAdapter adapter;
+ private TextView txtTotal;
+ private EditText txtWorker;
+ private RestClient restClient;
+ public String idRoute = "0";
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_loaders);
+ restClient = ApiUtils.getAPIService();
+ Intent intent = this.getIntent();
+ Bundle bundle = intent.getExtras();
+ idRoute = bundle.getString("idRoute");
+ setViews();
+ getWorkers();
+ setEvents();
+ }
+
+ private void setViews(){
+ workersListView = findViewById(R.id.listWorkers);
+ txtTotal = findViewById(R.id.textView38);
+ txtWorker = findViewById(R.id.editText2);
+ }
+
+ private void setEvents(){
+
+ txtWorker.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+
+ }
+
+ @Override
+ public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+
+ }
+
+ @Override
+ public void afterTextChanged(Editable editable) {
+ Log.i("Worker",txtWorker.getText().toString());
+ filterList();
+ }
+ });
+
+
+ }
+
+ public void filterList(){
+ this.adapter.getFilter().filter(txtWorker.getText());
+ }
+
+ private void getWorkers(){
+ listWorkers = new ArrayList<>();
+ final LoadersActivity that = this;
+ Utils.progressBar.show(this,getResources().getString(R.string.please_wait));
+ restClient.getWorkers(Utils.getMapWhitUser(this)).enqueue(new Callback>() {
+ @Override
+ public void onResponse(Call> call, Response> response) {
+ Utils.progressBar.getDialog().dismiss();
+ if (response.isSuccessful()){
+ for (Worker w : response.body()){
+ if(w.getRouteLoader() != null && w.getRouteLoader().equals(idRoute)){
+ w.setSelected(true);
+ listWorkersSelected.add(w);
+ }else{
+ if(w.getRouteLoader() == null){
+ w.setSelected(false);
+ listWorkersNoSelected.add(w);
+ }
+
+ }
+
+ }
+ listWorkers.addAll(listWorkersSelected);
+ listWorkers.addAll(listWorkersNoSelected);
+ adapter = new WorkerAdapter(that,listWorkers);
+ workersListView.setAdapter(adapter);
+ txtTotal.setText(""+getSelecteds()+" "+getResources().getString(R.string.seleccionados));
+ }else{
+ Utils.showErrorDialog(that,that.getResources().getString(R.string.error_conexion));
+ }
+ }
+
+ @Override
+ public void onFailure(Call> call, Throwable t) {
+ Utils.progressBar.getDialog().dismiss();
+ Utils.showErrorDialog(that,that.getResources().getString(R.string.error_conexion));
+ }
+ });
+
+
+ }
+
+ public void setSelectedWorker(Worker worker){
+ int pos = 0;
+ for (Worker w : listWorkers){
+ if (worker == w){
+ break;
+ }
+ pos+=1;
+ }
+ listWorkers.get(pos).setSelected(!listWorkers.get(pos).getSelected());
+ adapter.notifyDataSetChanged();
+ txtTotal.setText(""+getSelecteds()+" "+getResources().getString(R.string.seleccionados));
+ }
+
+ private int getSelecteds(){
+ int count = 0;
+ for(Worker w : listWorkers){
+ if (w.getSelected()) count += 1;
+ }
+ return count;
+ }
+
+ public void saveWorkers(View v){
+ Utils.progressBar.show(this,getResources().getString(R.string.please_wait));
+ final LoadersActivity that = this;
+ ArrayList workersId = new ArrayList<>();
+ for (Worker w:listWorkers){
+ if (w.getSelected()){
+ workersId.add(w.getId());
+ }
+ }
+ WorkerSave ws = new WorkerSave(idRoute,workersId);
+ Object[] args = new Object[1];
+ args[0] = ws;
+ restClient.saveLoadersWorkers(Utils.getMapWhitUser(this),args).enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ Utils.progressBar.getDialog().dismiss();
+ if(response.isSuccessful()){
+ if (response.body().equals("Finish")){
+ finish();
+ }else{
+ Utils.showErrorDialog(that,that.getResources().getString(R.string.error_conexion));
+ }
+ }else{
+ Utils.showErrorDialog(that,that.getResources().getString(R.string.error_conexion));
+ }
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ Utils.progressBar.getDialog().dismiss();
+ Utils.showErrorDialog(that,that.getResources().getString(R.string.error_conexion));
+ }
+ });
+ }
+
+ public void orderWorkers(){
+
+ }
+}
diff --git a/app/src/main/java/verdnatura/es/repartoverdnatura/LoginActivity.java b/app/src/main/java/verdnatura/es/repartoverdnatura/LoginActivity.java
new file mode 100644
index 0000000..0ea71ff
--- /dev/null
+++ b/app/src/main/java/verdnatura/es/repartoverdnatura/LoginActivity.java
@@ -0,0 +1,110 @@
+package verdnatura.es.repartoverdnatura;
+
+import android.app.AlertDialog;
+import android.content.Intent;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.text.InputType;
+import android.text.method.HideReturnsTransformationMethod;
+import android.text.method.PasswordTransformationMethod;
+import android.util.Log;
+import android.view.View;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
+import android.widget.EditText;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import okhttp3.ResponseBody;
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+import verdnatura.es.repartoverdnatura.INTERFACES.RestClient;
+import verdnatura.es.repartoverdnatura.UTILS.ApiUtils;
+import verdnatura.es.repartoverdnatura.UTILS.CustomProgressBar;
+import verdnatura.es.repartoverdnatura.UTILS.Utils;
+
+public class LoginActivity extends AppCompatActivity {
+
+ private RestClient restClient;
+ private EditText txtUser,txtPassword;
+ private CheckBox checkVerPass;
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_login);
+ restClient = ApiUtils.getAPIService();
+ setViews();
+ setEvents();
+
+ checkUser();
+ }
+
+ private void checkUser(){
+ if (!Utils.getIdUser(this).equals("nouser")){
+ startActivity(new Intent(this,MainActivity.class));
+ }
+ }
+
+ private void setViews(){
+ txtUser = findViewById(R.id.txtUsuario);
+ txtPassword = findViewById(R.id.txtPassword);
+ checkVerPass = findViewById(R.id.checkVerPass);
+ }
+
+ private void setEvents(){
+ checkVerPass.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
+ if(!isChecked){
+ txtPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
+
+ }else{
+ txtPassword.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
+ }
+ }
+ });
+ }
+
+ public void logIn(View v){
+ Utils.progressBar.show(this,"Check user");
+ final String user = txtUser.getText().toString();
+ final String password = txtPassword.getText().toString();
+ String[] userData = new String[2];
+
+ final LoginActivity that = this;
+
+ restClient.login(Utils.getMap(user,password),userData).enqueue(new Callback() {
+ @Override
+ public void onResponse(Call call, Response response) {
+ Utils.progressBar.getDialog().dismiss();
+ if(response.isSuccessful()){
+ Log.i("API","Respuesta: "+response.body());
+ Utils.saveIdUser(that,response.body());
+ Utils.saveUserPass(that,user,password);
+ startActivity(new Intent(that,MainActivity.class));
+ txtUser.setText("");
+ txtPassword.setText("");
+ }else{
+ Utils.showErrorDialog(that,that.getResources().getString(R.string.usuario_incorrecto));
+ Log.e("API", "Response is not successful "+response.message());
+ }
+ }
+
+ @Override
+ public void onFailure(Call call, Throwable t) {
+ Utils.progressBar.getDialog().dismiss();
+ Utils.showErrorDialog(that,that.getResources().getString(R.string.error_conexion));
+ }
+ });
+
+
+ }
+
+ public void showPassword(View v){
+ txtPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
+ }
+}
diff --git a/app/src/main/java/verdnatura/es/repartoverdnatura/MODELS/ClientTickets.java b/app/src/main/java/verdnatura/es/repartoverdnatura/MODELS/ClientTickets.java
new file mode 100644
index 0000000..2a99b92
--- /dev/null
+++ b/app/src/main/java/verdnatura/es/repartoverdnatura/MODELS/ClientTickets.java
@@ -0,0 +1,149 @@
+package verdnatura.es.repartoverdnatura.MODELS;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Map;
+
+public class ClientTickets implements Serializable {
+
+ private String Client,ClientName,Address,AddressName,PostalCode,City,SalePersonPhone,Note,Latitude,Longitude,Polizon;
+ private Boolean Signed;
+ private ArrayList Phones;
+ private ArrayList