Version estable despues de campaña

This commit is contained in:
quique 2018-10-29 07:46:48 +01:00
parent 093779996d
commit c7093c679f
103 changed files with 2310 additions and 1134 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,2 @@
#Mon Sep 17 12:10:45 CEST 2018
gradle.version=4.4

Binary file not shown.

View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="WizardSettings">
<option name="children">
<map>
<entry key="imageWizard">
<value>
<PersistentState />
</value>
</entry>
</map>
</option>
</component>
</project>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: annotations-13.0">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/5991ca87ef1fb5544943d9abc5a9a37583fabe03/annotations-13.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: assertj-core-1.7.1">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.assertj/assertj-core/1.7.1/c12282981e9bab2afdd38987295e76b35c33abb2/assertj-core-1.7.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.assertj/assertj-core/1.7.1/353f0ac2df4a7eb913e61acadfba13b8515778c0/assertj-core-1.7.1-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: byte-buddy-1.5.12">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy/1.5.12/b1ba1d15f102b36ed43b826488114678d6d413da/byte-buddy-1.5.12.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy/1.5.12/377024bc29fb84da8df6b6ba2088bb71dfa1b64e/byte-buddy-1.5.12-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: byte-buddy-agent-1.5.12">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy-agent/1.5.12/bc2c4dc0a0c7ddc12d2bb389e228cd88378a8e3a/byte-buddy-agent-1.5.12.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy-agent/1.5.12/dc690b44fc62db706a47b38f8257af5f7464a3f1/byte-buddy-agent-1.5.12-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,10 @@
<component name="libraryTable">
<library name="Gradle: com.android.support.constraint:constraint-layout-1.1.3">
<CLASSES>
<root url="file://$PROJECT_DIR$/presentation/build/intermediates/exploded-aar/com.android.support.constraint/constraint-layout/1.1.3/res" />
<root url="jar://$PROJECT_DIR$/presentation/build/intermediates/exploded-aar/com.android.support.constraint/constraint-layout/1.1.3/jars/classes.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="Gradle: com.android.support.constraint:constraint-layout-solver:1.1.3@jar">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support.constraint/constraint-layout-solver/1.1.3/bde0667d7414c16ed62d3cfe993cff7f9d732373/constraint-layout-solver-1.1.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@ -0,0 +1,12 @@
<component name="libraryTable">
<library name="Gradle: com.android.volley:volley-1.1.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/presentation/build/intermediates/exploded-aar/com.android.volley/volley/1.1.0/jars/classes.jar!/" />
<root url="file://$PROJECT_DIR$/presentation/build/intermediates/exploded-aar/com.android.volley/volley/1.1.0/res" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.volley/volley/1.1.0/65ed7df4af0e83a626f383ff49c3403342659aa9/volley-1.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: hamcrest-core-1.3">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/1dc37250fbc78e23a65a67fbbaf71d2e9cbc3c0b/hamcrest-core-1.3-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: javax.inject-1">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/javax.inject/javax.inject/1/6975da39a7040257bd51d21a231b76c915872d38/javax.inject-1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/javax.inject/javax.inject/1/a00123f261762a7c5e0ec916a2c7c8298d29c400/javax.inject-1-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: junit-4.12">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/2973d150c0dc1fefe998f834810d68f278ea58ec/junit-4.12.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/a6c32b40bf3d76eca54e3c601e5d1470c86fcdfa/junit-4.12-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: junixsocket-common-2.0.4">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.kohlschutter.junixsocket/junixsocket-common/2.0.4/b4d1870bf903412533e0b79c6fcd402defcfc05b/junixsocket-common-2.0.4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.kohlschutter.junixsocket/junixsocket-common/2.0.4/93f60af6bcdca6eee8d3ed5914bcfabb9f2618f0/junixsocket-common-2.0.4-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: junixsocket-native-common-2.0.4">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.kohlschutter.junixsocket/junixsocket-native-common/2.0.4/726bd66a934dea39c817382986496fa4eda96411/junixsocket-native-common-2.0.4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.kohlschutter.junixsocket/junixsocket-native-common/2.0.4/c5c3baaf3ca3fe0012ac6826a232e45ffa704c30/junixsocket-native-common-2.0.4-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: kluent-1.14">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.amshove.kluent/kluent/1.14/7d88188e60072e6e563d91b89ea712f0c9e0ae96/kluent-1.14.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.amshove.kluent/kluent/1.14/1155192e5283fc5d602d36dc1c783d903dfe1975/kluent-1.14-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: kotlin-reflect-1.0.6">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-reflect/1.0.6/3d499d3b7768f88c4796e5a1e357933e11a8936d/kotlin-reflect-1.0.6.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-reflect/1.0.6/5dd213a21097b9f6b35ed270130a314d72a468f0/kotlin-reflect-1.0.6-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: kotlin-stdlib-1.1.0">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.1.0/96a07041a11a09cf578892932d7511e1e11e3b6c/kotlin-stdlib-1.1.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.1.0/3303374103edd7cee62bf3539c40aa193d1c4767/kotlin-stdlib-1.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: kotlin-test-1.1.0">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-test/1.1.0/5fac2076f2399c6ca0da1d14012e9ccf130ac3/kotlin-test-1.1.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-test/1.1.0/576bd16a86dd1d16a2d9ae0397e455ff73fd6a55/kotlin-test-1.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: kotlin-test-junit-1.1.0">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-test-junit/1.1.0/b516787bb3efb327ad7693c65fac0d5fa4a70216/kotlin-test-junit-1.1.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-test-junit/1.1.0/ff4787c601a131af1e75227b0ff951af81ec718d/kotlin-test-junit-1.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: log4j-1.2.17">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/log4j/log4j/1.2.17/5af35056b4d257e4b64b9e8069c0746e8b08629f/log4j-1.2.17.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/log4j/log4j/1.2.17/677abe279b68c5e7490d6d50c6951376238d7d3e/log4j-1.2.17-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: mockito-core-2.4.5">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.mockito/mockito-core/2.4.5/7977632cfc4597ef25097b6c1ab84284d61ac70e/mockito-core-2.4.5.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.mockito/mockito-core/2.4.5/20df42e57ef294099eae701b3b071dddd3a522e5/mockito-core-2.4.5-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: mockito-kotlin-1.1.0">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.nhaarman/mockito-kotlin/1.1.0/18a1bdb7cfa6ac47bc381deda5ee58bc9d821fea/mockito-kotlin-1.1.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.nhaarman/mockito-kotlin/1.1.0/9f89b111a97b82ec1f5c9f02824cd2064a710e1a/mockito-kotlin-1.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: native-lib-loader-2.0.2">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.scijava/native-lib-loader/2.0.2/1451fa03954c5e31a358b411147de472b4dab92c/native-lib-loader-2.0.2.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.scijava/native-lib-loader/2.0.2/b1e0fa440cac2b1ba8ee6694f5a70cd4d79ff85b/native-lib-loader-2.0.2-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: objenesis-2.4">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.objenesis/objenesis/2.4/2916b6c96b50c5b3ec4452ed99401db745aabb27/objenesis-2.4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.objenesis/objenesis/2.4/19b316d8da7da3ae2539ee4ee2cf73a1e127fa73/objenesis-2.4-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: okio-1.11.0">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup.okio/okio/1.11.0/840897fcd7223a8143f1d9b6f69714e7be34fd50/okio-1.11.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.squareup.okio/okio/1.11.0/46bdbd0e079883accbf581986e7f8f0d999a2637/okio-1.11.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: reactive-streams-1.0.0">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.reactivestreams/reactive-streams/1.0.0/14b8c877d98005ba3941c9257cfe09f6ed0e0d74/reactive-streams-1.0.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.reactivestreams/reactive-streams/1.0.0/5be7bd3f38e43c8fc83699bbb5328c62adb95bbf/reactive-streams-1.0.0-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,11 @@
<component name="libraryTable">
<library name="Gradle: rxjava-2.0.6">
<CLASSES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/io.reactivex.rxjava2/rxjava/2.0.6/b0100ee9ceee5d1861371aefc814cee3e78ed23b/rxjava-2.0.6.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/io.reactivex.rxjava2/rxjava/2.0.6/b65373443c52d95b6ccb0e83f303f6a6d438fbc0/rxjava-2.0.6-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -1,9 +0,0 @@
<component name="libraryTable">
<library name="multidex-1.0.1">
<CLASSES>
<root url="file://$USER_HOME$/.gradle/caches/modules-2/files-2.1/com.android.support/multidex/1.0.1/60d4a46aa19ed61f4903ca2e0ad9e959eac06ec5/multidex-1.0.1.aar" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@ -25,7 +25,7 @@
</value>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">

File diff suppressed because it is too large Load Diff

View File

@ -23,8 +23,8 @@ buildscript {
allprojects {
ext {
androidApplicationId = 'es.verdnatura.vndelivery.presentation'
androidVersionCode = 3
androidVersionName = "1.0.3"
androidVersionCode = 6
androidVersionName = "1.0.5"
testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner"
testApplicationId = 'es.verdnatura.vndelivery.presentation.test'
}

View File

@ -33,7 +33,11 @@ class RouteDb {
TableRoute.DRIVER to TEXT,
TableRoute.M3 to REAL,
TableRoute.PLATE to TEXT,
TableRoute.AGENCY to TEXT)
TableRoute.AGENCY to TEXT,
TableRoute.KMSTART to TEXT,
TableRoute.KMEND to TEXT,
TableRoute.DSTART to TEXT,
TableRoute.DEND to TEXT)
}
}
@ -51,7 +55,11 @@ class RouteDb {
TableRoute.M3 to r.M3,
TableRoute.PLATE to r.Plate,
TableRoute.AGENCY to r.Agency,
TableRoute.DRIVER to r.Driver)
TableRoute.DRIVER to r.Driver,
TableRoute.KMSTART to r.kmStart,
TableRoute.KMEND to r.kmEnd,
TableRoute.DSTART to r.dStart,
TableRoute.DEND to r.dEnd)
}
}
@ -98,7 +106,11 @@ class RouteDb {
TableRoute.DRIVER,
TableRoute.HOUR,
TableRoute.M3,
TableRoute.PLATE)
TableRoute.PLATE,
TableRoute.KMSTART,
TableRoute.KMEND,
TableRoute.DSTART,
TableRoute.DEND)
if(onlyToday)
sql = sql.whereSimple("${TableRoute.DATE} = ?", today)
sql.exec {
@ -117,7 +129,11 @@ class RouteDb {
columns[TableRoute.M3].toString().toDouble(),
columns[TableRoute.PLATE] as String,
columns[TableRoute.AGENCY] as String,
columns[TableRoute.DRIVER] as String)
columns[TableRoute.DRIVER] as String,
columns[TableRoute.KMSTART] as String,
columns[TableRoute.KMEND] as String,
columns[TableRoute.DSTART] as String,
columns[TableRoute.DEND] as String)
}
}

View File

@ -7,7 +7,7 @@ class TableRoute {
companion object {
val TABLE_ROUTE = "TABLE_ROUTE"
val TABLE_ROUTE = "TABLE_ROUTE_v2"
val ID = "ID"
val HOUR = "HOUR"
val DATE = "DATE"
@ -15,6 +15,13 @@ class TableRoute {
val PLATE = "PLATE"
val AGENCY = "AGENCY"
val DRIVER = "DRIVER"
val KMSTART = "KMSTART"
val KMEND = "KMEND"
val DSTART = "DSTART"
val DEND = "DEND"
}
}

View File

@ -115,23 +115,44 @@ class TicketOps(val db: VnOpenHelper) {
}
private fun uploadTickets(ticket: Ticket){
db.use {
update(TableTicket.TABLE_TICKET,
TableTicket.CLIENT to ticket.Client,
TableTicket.CLIENT_NAME to ticket.ClientName,
TableTicket.ADDRESS to ticket.Address,
TableTicket.ADDRESS_NAME to ticket.AddressName,
TableTicket.PACKAGES to ticket.Packages,
TableTicket.POSTAL_CODE to ticket.PostalCode,
TableTicket.CITY to ticket.City,
TableTicket.WAREHOUSE to ticket.Warehouse,
TableTicket.LONGITUDE to ticket.Loc.Longitude,
TableTicket.LATITUDE to ticket.Loc.Latitude,
TableTicket.NOTE to ticket.Note,
TableTicket.SALE_PERSON_PHONE to ticket.SalePersonPhone,
TableTicket.UPDATE_INTENT to ticket.UpdateIntent)
.whereSimple("ID=?",ticket.Id.toString()).exec()
}
if (ticket.Packages > 0) {
db.use {
update(TableTicket.TABLE_TICKET,
TableTicket.CLIENT to ticket.Client,
TableTicket.CLIENT_NAME to ticket.ClientName,
TableTicket.ADDRESS to ticket.Address,
TableTicket.ADDRESS_NAME to ticket.AddressName,
TableTicket.PACKAGES to ticket.Packages,
TableTicket.POSTAL_CODE to ticket.PostalCode,
TableTicket.CITY to ticket.City,
TableTicket.WAREHOUSE to ticket.Warehouse,
TableTicket.LONGITUDE to ticket.Loc.Longitude,
TableTicket.LATITUDE to ticket.Loc.Latitude,
TableTicket.NOTE to ticket.Note,
TableTicket.SALE_PERSON_PHONE to ticket.SalePersonPhone,
TableTicket.UPDATE_INTENT to ticket.UpdateIntent)
.whereSimple("ID=?", ticket.Id.toString()).exec()
}
}
else{
db.use {
update(TableTicket.TABLE_TICKET,
TableTicket.CLIENT to ticket.Client,
TableTicket.CLIENT_NAME to ticket.ClientName,
TableTicket.ADDRESS to ticket.Address,
TableTicket.ADDRESS_NAME to ticket.AddressName,
TableTicket.POSTAL_CODE to ticket.PostalCode,
TableTicket.CITY to ticket.City,
TableTicket.WAREHOUSE to ticket.Warehouse,
TableTicket.LONGITUDE to ticket.Loc.Longitude,
TableTicket.LATITUDE to ticket.Loc.Latitude,
TableTicket.NOTE to ticket.Note,
TableTicket.SALE_PERSON_PHONE to ticket.SalePersonPhone,
TableTicket.UPDATE_INTENT to ticket.UpdateIntent)
.whereSimple("ID=?", ticket.Id.toString()).exec()
}
}
ticket.Phones.forEach { phone -> updatePhones(ticket.Id, phone) }
}

View File

@ -12,4 +12,8 @@ class RouteDto {
var Plate = ""
var Agency = ""
var Driver = ""
var kmStart = ""
var kmEnd = ""
var dStart = ""
var dEnd = ""
}

View File

@ -19,5 +19,7 @@ class TicketDto {
var Phones = listOf<String>()
var Location = LocationDto()
var Signed = 0
var Longitude = 0.0
var Latitude = 0.0
}

View File

@ -9,15 +9,15 @@ class Host {
companion object{
private val TESTHOST = "http://172.16.119.95:8080/"
private val TESTHOST = "http://172.16.198.221:8080/"
private val RELEASEHOST = "https://app.verdnatura.es/"
fun getHost(): String{
if(Build.FINGERPRINT.startsWith("generic"))
return RELEASEHOST
return RELEASEHOST
return TESTHOST
return TESTHOST
}
}

View File

@ -4,7 +4,9 @@ import es.verdnatura.data.entity.RouteDto
import io.reactivex.Observable
import okhttp3.ResponseBody
import retrofit2.Response
import retrofit2.http.Field
import retrofit2.http.POST
import retrofit2.http.Query
/**
* Created by nelo on 5/7/17.
@ -20,4 +22,6 @@ interface RouteApi {
@POST("bin/vndelivery.apk")
fun getApk(): Observable<Response<ResponseBody>>
}

View File

@ -21,6 +21,8 @@ import javax.inject.Singleton
*/
@Singleton
class RouteApiImpl: RouteRepository {
val routeDb: RouteDb
val serializer: Serializer
val routeApi: RouteApi

View File

@ -54,7 +54,7 @@ class TicketApiImpl: TicketRepository {
override fun getTickets(route: Int): Observable<List<Ticket>> {
var tickets = listOf<Ticket>()
return ticketApi.getTickets(route)
var result = ticketApi.getTickets(route)
.map { tickets -> serializer.serialize(tickets, List::class.java) }
.map { json -> serializer.deserializeList(json, Ticket::class.java) }
.map { ts -> tickets = ts }
@ -65,6 +65,7 @@ class TicketApiImpl: TicketRepository {
.map { tt -> markUploadedTicket(tickets, tt)}
.map { tt -> tt }
.doOnError { t -> generateError(t, R.string.error_tickets) }
return result
}
fun markSigndedTicket(tickets: List<Ticket>, ids: List<Int>): List<Ticket>{

Binary file not shown.

View File

@ -53,27 +53,27 @@
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="rxjava-2.0.6" level="project" />
<orderEntry type="library" exported="" name="javax.inject-1" level="project" />
<orderEntry type="library" exported="" name="kotlin-stdlib-1.1.0" level="project" />
<orderEntry type="library" exported="" name="okio-1.11.0" level="project" />
<orderEntry type="library" exported="" name="reactive-streams-1.0.0" level="project" />
<orderEntry type="library" exported="" name="annotations-13.0" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="junit-4.12" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="kotlin-test-junit-1.1.0" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="mockito-kotlin-1.1.0" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="kluent-1.14" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="assertj-core-1.7.1" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="hamcrest-core-1.3" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="kotlin-test-1.1.0" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="kotlin-reflect-1.0.6" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="mockito-core-2.4.5" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="byte-buddy-1.5.12" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="byte-buddy-agent-1.5.12" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="objenesis-2.4" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="junixsocket-native-common-2.0.4" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="junixsocket-common-2.0.4" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="native-lib-loader-2.0.2" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="log4j-1.2.17" level="project" />
<orderEntry type="library" exported="" name="Gradle: rxjava-2.0.6" level="project" />
<orderEntry type="library" exported="" name="Gradle: javax.inject-1" level="project" />
<orderEntry type="library" exported="" name="Gradle: kotlin-stdlib-1.1.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: okio-1.11.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: reactive-streams-1.0.0" level="project" />
<orderEntry type="library" exported="" name="Gradle: annotations-13.0" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="Gradle: junit-4.12" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="Gradle: kotlin-test-junit-1.1.0" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="Gradle: mockito-kotlin-1.1.0" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="Gradle: kluent-1.14" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="Gradle: assertj-core-1.7.1" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="Gradle: hamcrest-core-1.3" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="Gradle: kotlin-test-1.1.0" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="Gradle: kotlin-reflect-1.0.6" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="Gradle: mockito-core-2.4.5" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="Gradle: byte-buddy-1.5.12" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="Gradle: byte-buddy-agent-1.5.12" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="Gradle: objenesis-2.4" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="Gradle: junixsocket-native-common-2.0.4" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="Gradle: junixsocket-common-2.0.4" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="Gradle: native-lib-loader-2.0.2" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="Gradle: log4j-1.2.17" level="project" />
</component>
</module>

View File

@ -1,13 +1,14 @@
package es.verdnatura.domain.entity
import java.io.Serializable
import javax.inject.Named
/**
* Created by nelo on 5/7/17.
*/
class Route() {
class Route():Serializable {
constructor(id: Int, hour: String, date: String, m3: Double, plate: String, agency: String, driver: String): this(){
constructor(id: Int, hour: String, date: String, m3: Double, plate: String, agency: String, driver: String,kmStart:String,kmEnd:String,dStart:String,dEnd:String): this(){
this.Id = id
this.Hour = hour
this.Date = date
@ -15,6 +16,11 @@ class Route() {
this.Plate = plate
this.Agency = agency
this.Driver = driver
this.kmStart = kmStart
this.kmEnd = kmEnd
this.dStart = dStart
this.dEnd = dEnd
}
@Named("Id")
@ -38,4 +44,17 @@ class Route() {
@Named("Driver")
var Driver = ""
@Named("kmStart")
var kmStart = ""
@Named("kmEnd")
var kmEnd = ""
@Named("dStart")
var dStart = ""
@Named("dEnd")
var dEnd = ""
}

View File

@ -26,7 +26,10 @@ class Ticket() {
this.Signed = signed
this.Uploaded = uploaded
this.UpdateIntent = update_intent
if(latitude != "null" && longitude != "null") {
this.Longitude = longitude.toDouble()
this.Latitude = latitude.toDouble()
val loc = Location()
loc.Longitude = longitude.toDouble()
loc.Latitude = latitude.toDouble()
@ -70,7 +73,7 @@ class Ticket() {
@Named("Phones")
var Phones = listOf<String>()
@Named("LocationDto")
@Named("Location")
var Loc = Location()
@Named("Signed")
@ -81,4 +84,10 @@ class Ticket() {
@Named("UpdateIntent")
var UpdateIntent = 0
@Named("Longitude")
var Longitude = 0.0
@Named("Latitude")
var Latitude = 0.0
}

View File

@ -0,0 +1,22 @@
package es.verdnatura.domain.interactor.route
import es.verdnatura.domain.entity.Route
import es.verdnatura.domain.repository.RouteRepository
import es.verdnatura.vndelivery.domain.interactor.UseCase
import io.reactivex.Observable
import io.reactivex.Scheduler
import javax.inject.Inject
class UpdateRoutesUseCase: UseCase<List<Route>, Boolean> {
val repository: RouteRepository
@Inject
constructor(repository: RouteRepository, uiThread: Scheduler, thread: Scheduler): super(uiThread, thread){
this.repository = repository
}
override fun buildUseCaseObservable(params: Boolean): Observable<List<Route>> {
return repository.getRoutes()
}
}

View File

@ -103,6 +103,9 @@ dependencies {
//compile developmentDependencies.leakCanary
compile fileTree(dir: 'libs', include: '*.jar')
compile 'com.android.support.constraint:constraint-layout:1.1.3'
compile 'com.android.volley:volley:1.1.0'
}
repositories {

View File

@ -41,6 +41,9 @@
<activity android:name=".view.activity.SignDataActivity"
android:label="@string/activity_tickets"/>
<activity android:name=".view.activity.ConfigActivity"
android:label="@string/activity_config"/>
<activity android:name=".view.activity.SignActivity"
android:label="@string/activity_tickets"
android:configChanges="keyboardHidden|orientation"/>

View File

@ -0,0 +1,157 @@
package es.verdnatura.presentation
import android.content.Context
import android.content.SharedPreferences
import android.preference.PreferenceManager
import android.view.View
import android.view.animation.AnimationUtils
import android.widget.ImageView
import android.widget.TextView
import com.android.volley.VolleyError
import es.verdnatura.vndelivery.data.rest.Host
import org.json.JSONException
import org.json.JSONObject
class Utils(context: Context) {
private var json:String? = null
private val sharedPref = PreferenceManager.getDefaultSharedPreferences(context)
private var host: String = Host.getHost()
fun parseNetworkError( volleyError: VolleyError): String? {
if(volleyError.networkResponse != null && volleyError.networkResponse.data != null){
json = String(volleyError.networkResponse.data,Charsets.UTF_8)
json = trimMessage(json!!,"message")
return json
}
return json
}
private fun trimMessage(json: String, key: String): String? {
var trimmedString: String? = null
try {
val obj = JSONObject(json)
trimmedString = obj.getString(key)
} catch (e: JSONException) {
e.printStackTrace()
return null
}
return trimmedString
}
fun getHeadersForRequest(): Map<String,String> {
val valuesMap = mutableMapOf<String, String>()
valuesMap["version"] = "1"
valuesMap["aplicacion"] = "json"
valuesMap["user"] = "quique"
valuesMap["pass"] = "blasco.14255"
valuesMap["Content-Type"] = "application/json"
return valuesMap.toMap()
}
fun saveUserAndPass(user:String,pass:String,id:String){
val edit: SharedPreferences.Editor = sharedPref.edit()
edit.putString("user",user)
edit.putString("pass",pass)
edit.putString("id",id)
edit.commit()
}
fun logOut(){
/*val pin = sharedPref.getInt("pin",-1)
val edit:SharedPreferences.Editor = sharedPref.edit()
edit.remove("warehouse")
edit.remove("empresa")
edit.commit()
setPin(pin)*/
}
fun animateImage(context: Context, image: ImageView, textView: TextView) {
/*var rotation = AnimationUtils.loadAnimation(context, R.anim.rotate)
rotation.fillAfter = true
image.startAnimation(rotation)
textView.visibility = View.VISIBLE*/
}
fun stopAnimateImage(image: ImageView, textView: TextView) {
image.clearAnimation()
textView.visibility = View.GONE
}
fun getHost():String{
return sharedPref.getString("host",host)
}
fun setHost(host:String){
val edit: SharedPreferences.Editor = sharedPref.edit()
edit.putString("host",host)
edit.commit()
}
fun checkWarehouseState():Boolean{
return sharedPref.contains("warehouse")
}
fun setWareHouse(w:Int){
val edit: SharedPreferences.Editor = sharedPref.edit()
edit.putInt("warehouse",w)
edit.commit()
}
fun getWareHouse():Int{
return sharedPref.getInt("warehouse",0)
}
fun checkEmpresaState():Boolean{
return sharedPref.contains("empresa")
}
fun setEmpresa(e:Int){
val edit: SharedPreferences.Editor = sharedPref.edit()
edit.putInt("empresa",e)
edit.commit()
}
fun getEmpresa():Int{
return sharedPref.getInt("empresa",0)
}
fun setHistorico(h:Int){
val edit: SharedPreferences.Editor = sharedPref.edit()
edit.putInt("historico",h)
edit.commit()
}
fun getHistorico():Int{
return sharedPref.getInt("historico",0)
}
fun setPin(pin:Int){
val edit: SharedPreferences.Editor = sharedPref.edit()
edit.putInt("pin",pin)
edit.commit()
}
fun getPin():Int{
return sharedPref.getInt("pin",-1)
}
fun deletePin(){
val edit: SharedPreferences.Editor = sharedPref.edit()
edit.remove("pin")
edit.commit()
}
fun intOrString(str: String) = try { // returns Any
str.toInt()
} catch(e: NumberFormatException) {
-1
}
}

View File

@ -0,0 +1,7 @@
package es.verdnatura.presentation.navigation
import java.io.File
interface ConfiNavigator {
fun editRoute()
}

View File

@ -1,10 +1,12 @@
package es.verdnatura.presentation.navigation
import es.verdnatura.domain.entity.Location
/**
* Created by nelo on 10/7/17.
*/
interface NavigateToSign {
fun navigateToSign(tickets: List<Int>, packages: Int)
fun navigateToSign(tickets: List<Int>, packages: Int,location:es.verdnatura.domain.entity.Location)
}

View File

@ -2,6 +2,9 @@ package es.verdnatura.vndelivery.presentation.navigation
import android.content.Intent
import es.verdnatura.core.activity.BaseActivity
import es.verdnatura.domain.entity.Location
import es.verdnatura.domain.entity.Route
import es.verdnatura.vndelivery.presentation.view.activity.*
import javax.inject.Inject
import javax.inject.Singleton
@ -26,10 +29,12 @@ class Navigator @Inject constructor(){
activity.startActivity(intent)
}
fun navigateToSign(activity: BaseActivity, tickets: List<Int>, packages: Int){
fun navigateToSign(activity: BaseActivity, tickets: List<Int>, packages: Int,location:Location){
val intent = Intent(activity, SignActivity::class.java)
intent.putExtra(SignActivity.TICKETS, tickets.toIntArray())
intent.putExtra(SignActivity.PACKAGES, packages)
intent.putExtra("lat",location.Latitude)
intent.putExtra("long",location.Longitude)
activity.startActivity(intent)
}
@ -37,4 +42,10 @@ class Navigator @Inject constructor(){
activity.startActivity(Intent(activity, SignDataActivity::class.java))
}
fun navigateToConfig(activity: BaseActivity,route: Route){
val intent = Intent(activity, ConfigActivity::class.java)
intent.putExtra(TicketActivity.ROUTE, route)
activity.startActivity(intent)
}
}

View File

@ -1,6 +1,7 @@
package es.verdnatura.presentation.presenter
import android.util.Log
import android.widget.Toast
import es.verdnatura.domain.interactor.ticket.SignTicketsUseCase
import es.verdnatura.domain.interactor.ticket.UploadSignsUseCase
import es.verdnatura.presentation.observer.UploadObserver
@ -40,6 +41,7 @@ class SignPresenter: BasePresenter {
}
fun uploadSign(fileName: String){
view.showToast()
uploadSignUseCase.execute(SignObserverFinish(this), UploadSignsUseCase.Params.forUploadSign(fileName))
}

View File

@ -1,6 +1,7 @@
package es.verdnatura.presentation.presenter
import android.util.Log
import android.widget.Toast
import es.verdnatura.domain.entity.Ticket
import es.verdnatura.domain.interactor.ticket.FilterTicketsUseCase
import es.verdnatura.domain.interactor.ticket.GetTicketsUseCase
@ -22,6 +23,7 @@ class TicketPresenter: BasePresenter {
private val selectTicketUseCase: SelectTicketUseCase
private val filterTicketUSeCase: FilterTicketsUseCase
private var filter:Boolean = false
public var listOnline:List<List<Ticket>>? = null
@Inject
@ -51,10 +53,33 @@ class TicketPresenter: BasePresenter {
}
fun onDownloadTickets(tickets: List<List<Ticket>>){
this.tickets = tickets
var cont = 0
var cont2 = 0
if (listOnline != null) {
for (list in tickets) {
if (listOnline!!.size > cont) {
for (ticket in list) {
if (listOnline!![cont].size > cont2) {
if (ticket.Signed == 1) {
listOnline!![cont][cont2].Signed = 1
}
}
cont2+=1
}
}
cont+=1
cont2 = 0
}
this.tickets = listOnline!!
}else{
this.tickets = tickets
}
filterTickets(filter)
}
fun onFilterTickets(tickets: List<List<Ticket>>){
createAdapter(tickets)
}
@ -72,6 +97,10 @@ class TicketPresenter: BasePresenter {
selectTicketUseCase.execute(TicketDbObserver(this), SelectTicketUseCase.Params.forSelectTickets(route))
}
fun onCompareDbTickets(route: Int){
selectTicketUseCase.execute(TicketDbCompare(this), SelectTicketUseCase.Params.forSelectTickets(route))
}
fun filterTickets(signed: Boolean){
if (signed != filter) {
filter = signed
@ -82,10 +111,13 @@ class TicketPresenter: BasePresenter {
class TicketObserver(val presenter: TicketPresenter, val route: Int): DisposableObserver<List<List<Ticket>>>(){
override fun onNext(t: List<List<Ticket>>?) {
presenter.onDownloadTickets(t!!)
presenter.listOnline = t!!
presenter.onCompareDbTickets(route)
}
override fun onError(e: Throwable?) {
presenter.listOnline = null
presenter.getTicketsDb(route)
}
@ -111,6 +143,22 @@ class TicketPresenter: BasePresenter {
}
class TicketDbCompare(val presenter: TicketPresenter): DisposableObserver<List<List<Ticket>>>(){
override fun onNext(t: List<List<Ticket>>?) {
presenter.onDownloadTickets(t!!)
}
override fun onError(e: Throwable?) {
presenter.onErrorDownloadTickets(e?.message.toString())
}
override fun onComplete() {
presenter.onCopleteDownloadTickets()
}
}
class TicketFilterObserver(val presenter: TicketPresenter): DisposableObserver<List<List<Ticket>>> () {
override fun onNext(t: List<List<Ticket>>?) {
presenter.onFilterTickets(t!!)

View File

@ -0,0 +1,236 @@
package es.verdnatura.vndelivery.presentation.view.activity
import android.app.TimePickerDialog
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.util.Log
import android.view.KeyEvent
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import com.android.volley.Request
import com.android.volley.RequestQueue
import com.android.volley.Response
import com.android.volley.VolleyError
import com.android.volley.toolbox.StringRequest
import com.android.volley.toolbox.Volley
import com.google.gson.internal.LinkedTreeMap
import es.verdnatura.domain.entity.Route
import es.verdnatura.domain.interactor.route.UpdateRoutesUseCase
import es.verdnatura.presentation.Utils
import es.verdnatura.presentation.di.components.RouteComponent
import es.verdnatura.presentation.di.modules.RouteModule
import es.verdnatura.presentation.navigation.ConfiNavigator
import es.verdnatura.presentation.navigation.RouterNavigator
import es.verdnatura.presentation.presenter.RoutePresenter
import es.verdnatura.presentation.view.fragment.DataFragment
import es.verdnatura.presentation.view.fragment.RouteFragment
import es.verdnatura.presentation.view.view.UpdateView
import es.verdnatura.vndelivery.presentation.R
import es.verdnatura.vndelivery.presentation.di.HasComponent
import es.verdnatura.vndelivery.presentation.presenter.BasePresenter
import es.verdnatura.vndelivery.presentation.view.activity.BaseActivity
import es.verdnatura.vndelivery.presentation.view.view.BaseView
import io.reactivex.observers.DisposableObserver
import org.json.JSONObject
import java.io.File
import java.text.DecimalFormat
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
class ConfigActivity : BaseActivity(), HasComponent<RouteComponent>, ConfiNavigator {
private var route:Route? = null
private var txtKmStart:EditText? = null
private var txtKmEnd:EditText? = null
private var txtDStart:EditText? = null
private var txtDFin:EditText? = null
private var txtRuta:TextView? = null
private var utils: Utils? = null
private var queue: RequestQueue? = null
private var btnGuardar:Button? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.config_activity)
route = intent.extras.getSerializable(TicketActivity.ROUTE) as Route
setViews()
setEvents()
}
fun setViews() {
txtKmStart = findViewById(R.id.txtKmStart) as EditText
txtKmEnd = findViewById(R.id.txtKmEnd) as EditText
txtDStart = findViewById(R.id.txtDStart) as EditText
txtDFin = findViewById(R.id.txtDFin) as EditText
txtRuta = findViewById(R.id.txtRuta) as TextView
btnGuardar = findViewById(R.id.btnGuardar) as Button
txtKmStart!!.setText(route!!.kmStart)
txtKmEnd!!.setText(route!!.kmEnd)
txtDStart!!.setText(getHour(route!!.dStart))
txtDFin!!.setText(getHour(route!!.dEnd))
txtRuta!!.setText(route!!.Id.toString()+" "+route!!.Driver)
utils = Utils(applicationContext)
queue = Volley.newRequestQueue(this)
}
fun setEvents(){
txtDStart!!.setOnClickListener(View.OnClickListener {
val cal = Calendar.getInstance()
val timeSetListener = TimePickerDialog.OnTimeSetListener { timePicker, hour, minute ->
cal.set(Calendar.HOUR_OF_DAY, hour)
cal.set(Calendar.MINUTE, minute)
txtDStart!!.setText(getHour("0000-00-00 "+hour+":"+minute+":00"))
}
TimePickerDialog(this, timeSetListener, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), true).show()
})
txtDFin!!.setOnClickListener(View.OnClickListener {
val cal = Calendar.getInstance()
val timeSetListener = TimePickerDialog.OnTimeSetListener { timePicker, hour, minute ->
cal.set(Calendar.HOUR_OF_DAY, hour)
cal.set(Calendar.MINUTE, minute)
val f = DecimalFormat("00")
if ((txtDStart!!.text.toString()).replace(":","").toInt() < (""+f.format(hour)+f.format(minute)).toInt())
txtDFin!!.setText(getHour("0000-00-00 $hour:$minute:00"))
else Toast.makeText(this,"La hora fin no puede ser menor que la de inicio", Toast.LENGTH_LONG).show()
}
TimePickerDialog(this, timeSetListener, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), true).show()
})
/* txtKmStart!!.setOnEditorActionListener(TextView.OnEditorActionListener { v, actionId, event ->
if (event == null || event.action != KeyEvent.ACTION_DOWN) {
updateRoute()
}
true
})
txtKmEnd!!.setOnEditorActionListener(TextView.OnEditorActionListener { v, actionId, event ->
if (event == null || event.action != KeyEvent.ACTION_DOWN) {
updateRoute()
}
true
})
txtDStart!!.setOnEditorActionListener(TextView.OnEditorActionListener { v, actionId, event ->
if (event == null || event.action != KeyEvent.ACTION_DOWN) {
updateRoute()
}
true
})
txtDFin!!.setOnEditorActionListener(TextView.OnEditorActionListener { v, actionId, event ->
if (event == null || event.action != KeyEvent.ACTION_DOWN) {
updateRoute()
}
true
})*/
}
override fun getSubComponent(): RouteComponent {
return app.component.plus(RouteModule())
}
override fun editRoute(){
}
fun getHour(dtStart:String):String{
val format = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
try {
var cal = Calendar.getInstance()
cal.time = format.parse(dtStart)
val f = DecimalFormat("00")
return ""+f.format(cal.get(Calendar.HOUR_OF_DAY))+":"+f.format(cal.get(Calendar.MINUTE))
} catch (e: ParseException) {
e.printStackTrace()
return "";
}
}
fun updateRoute(v:View){
if (txtKmStart!!.text.trim().length > 0) {
route!!.kmStart = txtKmStart!!.text.trim().toString()
}
if (txtKmEnd!!.text.trim().length > 0) {
route!!.kmEnd = txtKmEnd!!.text.trim().toString()
}
if (txtDStart!!.text.trim().length > 0) {
route!!.dStart = txtDStart!!.text.trim().toString()
}
if (txtDFin!!.text.trim().length > 0) {
route!!.dEnd = txtDFin!!.text.trim().toString()
}
btnGuardar!!.text = "Cargando..."
val jsonObjectRequest = object : StringRequest(Request.Method.POST, utils!!.getHost() + "delivery/update_routes",
Response.Listener { response ->
Toast.makeText(this,"Datos actualizados", Toast.LENGTH_SHORT).show()
btnGuardar!!.text = "GUARDAR"
},
Response.ErrorListener { error ->
Log.i("RESPUESTA", "Error peticion " + utils!!.parseNetworkError(error))
onError(error)
btnGuardar!!.text = "GUARDAR"
}
) {
override fun getHeaders(): Map<String, String> {
return utils!!.getHeadersForRequest()
}
override fun getBody(): ByteArray {
val body: String = "[\"" + route!!.Id + "\",\"" + route!!.kmStart + "\",\"" + route!!.kmEnd + "\",\"" + route!!.dStart + "\",\"" + route!!.dEnd + "\"]"
return body.toByteArray(Charsets.UTF_8)
}
}
queue!!.add(jsonObjectRequest)
}
fun onError(error: VolleyError){
if (error.networkResponse != null){
Toast.makeText(this,"Error de servidor", Toast.LENGTH_SHORT).show()
}else{
Toast.makeText(this,"Error de conexión", Toast.LENGTH_SHORT).show()
}
}
fun cancelConf(v:View){
finish()
}
}

View File

@ -3,6 +3,8 @@ package es.verdnatura.vndelivery.presentation.view.activity
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.View
import es.verdnatura.domain.entity.Route
import es.verdnatura.presentation.di.components.RouteComponent
import es.verdnatura.presentation.di.modules.RouteModule
import es.verdnatura.presentation.navigation.RouterNavigator
@ -50,4 +52,8 @@ class RouteActivity: BaseActivity(), HasComponent<RouteComponent>, RouterNavigat
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(intent)
}
fun navigateToConfig(route: Route){
navigator.navigateToConfig(this,route)
}
}

View File

@ -22,7 +22,9 @@ class SignActivity: BaseActivity(), HasComponent<SignComponent> {
super.onCreate(savedInstanceState)
val tickets = intent.extras.getIntArray(TICKETS).toList()
val packages = intent.extras.getInt(PACKAGES)
addFragment(R.id.fragmentContainer, SignFragment(tickets, packages))
val lat = intent.extras.getDouble("lat")
val long = intent.extras.getDouble("long")
addFragment(R.id.fragmentContainer, SignFragment(tickets, packages,lat,long))
}
override fun getSubComponent(): SignComponent {

View File

@ -1,5 +1,6 @@
package es.verdnatura.vndelivery.presentation.view.activity
import android.location.Location
import android.os.Bundle
import es.verdnatura.presentation.di.components.TicketComponent
import es.verdnatura.presentation.di.modules.TicketModule
@ -28,8 +29,8 @@ class TicketActivity: BaseActivity(), HasComponent<TicketComponent>, NavigateToS
return app.component.plus(TicketModule())
}
override fun navigateToSign(tickets: List<Int>, packages: Int) {
navigator.navigateToSign(this, tickets, packages)
override fun navigateToSign(tickets: List<Int>, packages: Int,location:es.verdnatura.domain.entity.Location) {
navigator.navigateToSign(this, tickets, packages,location)
}
}

View File

@ -6,6 +6,7 @@ import android.view.View
import android.view.ViewGroup
import es.verdnatura.domain.entity.Route
import es.verdnatura.vndelivery.presentation.R
import es.verdnatura.vndelivery.presentation.view.activity.RouteActivity
import kotlinx.android.synthetic.main.item_route.view.*
/**
@ -40,6 +41,16 @@ class RouteAdapter(var items: MutableList<Route>, val listener: (Route) -> Unit)
setOnClickListener { listener(item) }
btnConfig.setOnClickListener(View.OnClickListener {
if (context is RouteActivity) {
(context as RouteActivity).navigateToConfig(item)
}
})
btnEntrar.setOnClickListener(View.OnClickListener {
listener(item)
})
}
}

View File

@ -1,6 +1,9 @@
package es.verdnatura.presentation.view.adapter
import android.app.AlertDialog
import android.content.DialogInterface
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
@ -8,6 +11,7 @@ import android.view.View
import android.view.ViewGroup
import es.verdnatura.core.components.dialogs.options.DialogOptions
import es.verdnatura.core.components.dialogs.options.DialogOptionsItem
import es.verdnatura.domain.entity.Location
import es.verdnatura.domain.entity.Ticket
import es.verdnatura.presentation.view.component.ticket.TicketData
import es.verdnatura.presentation.view.dialog.DialogNotes
@ -18,7 +22,7 @@ import java.util.*
/**
* Created by nelo on 7/7/17.
*/
class TicketAdapter(var items: MutableList<List<Ticket>>, val signAction: (List<Int>, Int) -> Unit) : RecyclerView.Adapter<TicketAdapter.ViewHolder>() {
class TicketAdapter(var items: MutableList<List<Ticket>>, val signAction: (List<Int>, Int,Location) -> Unit) : RecyclerView.Adapter<TicketAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_ticket, parent, false)
@ -30,7 +34,7 @@ class TicketAdapter(var items: MutableList<List<Ticket>>, val signAction: (List<
override fun getItemCount() = items.size
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(item: List<Ticket>, signAction: (List<Int>, Int) -> Unit) = with(itemView) {
fun bind(item: List<Ticket>, signAction: (List<Int>, Int,Location) -> Unit) = with(itemView) {
val ticket = item[0]
textClientValue.text = "${ticket.Client} ${ticket.ClientName}"
textConsigneValue.text = ticket.Address.toString()
@ -52,7 +56,14 @@ class TicketAdapter(var items: MutableList<List<Ticket>>, val signAction: (List<
maps.setOnClickListener { goToMaps(ticket) }
sign.setOnClickListener { signAction(item.map { t -> t.Id }, getPackagesNumber(item)) }
var items = item.map { t -> t.Id }
var latLong =
sign.setOnClickListener {
var loc:Location = Location()
loc.Latitude = ticket.Latitude
loc.Longitude = ticket.Longitude
signAction(item.map { t -> t.Id }, getPackagesNumber(item),loc)
}
ticketGrouped.removeAllViews()
item.forEach { t -> ticketGrouped.addView(getTicketData(t)) }
@ -77,10 +88,37 @@ class TicketAdapter(var items: MutableList<List<Ticket>>, val signAction: (List<
}
fun goToMaps(ticket: Ticket){
var uri = "geo:0,0?q=${ticket.ClientName}"
if(ticket.Loc.Longitude != 0.0 && ticket.Loc.Latitude != 0.0)
uri = String.format(Locale.ENGLISH, "geo:0,0?q=%f,%f", ticket.Loc.Latitude, ticket.Loc.Longitude)
itemView.context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(uri)))
var uri = "geo:0,0?q=${ticket.ClientName} ${ticket.AddressName} ${ticket.City}"
if(ticket.Longitude != 0.0 && ticket.Latitude != 0.0)
uri = String.format(Locale.ENGLISH, "geo:0,0?q=%f,%f", ticket.Latitude, ticket.Longitude)
if (isGoogleMapsInstalled()) {
itemView.context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(uri)))
} else {
val builder = AlertDialog.Builder(itemView.context)
builder.setMessage("Install Google Maps")
builder.setCancelable(true)
builder.setPositiveButton("Install", getGoogleMapsListener())
val dialog = builder.create()
dialog.show()
}
}
fun isGoogleMapsInstalled(): Boolean {
try {
val info = itemView.context.getPackageManager().getApplicationInfo("com.google.android.apps.maps", 0)
return true
} catch (e: PackageManager.NameNotFoundException) {
return false
}
}
fun getGoogleMapsListener(): DialogInterface.OnClickListener {
return object : DialogInterface.OnClickListener{
override fun onClick(dialog: DialogInterface, which: Int) {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.google.android.apps.maps"))
itemView.context.startActivity(intent)
}
}
}
fun getPackagesNumber(tickets: List<Ticket>): Int{

View File

@ -45,13 +45,14 @@ class RouteFragment: ListFragment(), UpdateView {
super.onViewCreated(view, savedInstanceState)
getComponent(RouteComponent::class.java).inject(this)
presenter.setView(this)
presenter.listRoutes()
presenter.getVersion(getVersionApp())
}
override fun onResume() {
super.onResume()
location.createLocationManager(activity)
presenter.listRoutes()
presenter.getVersion(getVersionApp())
}
override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {

View File

@ -1,24 +1,30 @@
package es.verdnatura.vndelivery.presentation.view.fragment
import android.app.AlertDialog
import android.app.DialogFragment
import android.os.Build
import android.os.Bundle
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.widget.Toast
import es.verdnatura.core.UtilsResources
import es.verdnatura.data.image.ImageConverter
import es.verdnatura.presentation.di.components.SignComponent
import es.verdnatura.presentation.location.LocationProvider
import es.verdnatura.presentation.presenter.SignPresenter
import es.verdnatura.presentation.view.dialog.DialogLocation
import es.verdnatura.presentation.view.view.SignView
import es.verdnatura.vndelivery.presentation.R
import kotlinx.android.synthetic.main.fragment_sign.*
import org.jetbrains.anko.alert
import javax.inject.Inject
/**
* Created by nelo on 10/7/17.
*/
class SignFragment(val tickets: List<Int>, val packages: Int): BaseFragment(R.layout.fragment_sign), SignView {
class SignFragment(val tickets: List<Int>, val packages: Int,val lat:Double,val long:Double): BaseFragment(R.layout.fragment_sign), SignView {
@Inject lateinit var presenter: SignPresenter
@Inject lateinit var location: LocationProvider
@ -50,10 +56,60 @@ class SignFragment(val tickets: List<Int>, val packages: Int): BaseFragment(R.la
fun signTickets(){
val loc = location.getLastKnowLocation(activity)
//COMMPBORAR DISTANCIA ENTRE UNO Y OTRO
val isLong = checkMeters(loc)
val sign = ink.bitmap
val signString = imageConverter.imageToString(sign)
if(loc != null) presenter.signTicket(signString, tickets, loc.longitude, loc.latitude)
else presenter.signTicket(signString, tickets, null, null)
if (isLong){
alert(R.string.long_location_message) {
title("Alert")
yesButton {
if(loc != null) presenter.signTicket(signString, tickets, loc.longitude, loc.latitude)
else presenter.signTicket(signString, tickets, null, null)
}
noButton {
presenter.signTicket(signString, tickets, null, null)
}
}.show()
}else{
if(loc != null) presenter.signTicket(signString, tickets, loc.longitude, loc.latitude)
else presenter.signTicket(signString, tickets, null, null)
}
}
fun checkMeters(locStart: android.location.Location?):Boolean{
if (locStart!=null){
var dist = meterDistanceBetweenPoints(locStart.latitude!!,locStart.longitude!!,lat,long)
if(dist>30.0)return true
}else return false
return false
}
private fun meterDistanceBetweenPoints(lat_a: Double, lng_a: Double, lat_b: Double, lng_b: Double): Double {
val pk = (180f / Math.PI).toDouble()
val a1 = lat_a / pk
val a2 = lng_a / pk
val b1 = lat_b / pk
val b2 = lng_b / pk
val t1 = Math.cos(a1.toDouble()) * Math.cos(a2.toDouble()) * Math.cos(b1.toDouble()) * Math.cos(b2.toDouble())
val t2 = Math.cos(a1.toDouble()) * Math.sin(a2.toDouble()) * Math.cos(b1.toDouble()) * Math.sin(b2.toDouble())
val t3 = Math.sin(a1.toDouble()) * Math.sin(b1.toDouble())
val tt = Math.acos(t1 + t2 + t3)
return 6366000 * tt
}
override fun showToast(){
val toast = Toast.makeText(this.activity.baseContext,"Guardando firma...", Toast.LENGTH_SHORT);
toast.show()
}
}

View File

@ -8,6 +8,7 @@ import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import es.verdnatura.core.UtilsResources
import es.verdnatura.domain.entity.Location
import es.verdnatura.domain.entity.Ticket
import es.verdnatura.presentation.di.components.TicketComponent
import es.verdnatura.presentation.navigation.NavigateToSign
@ -61,7 +62,7 @@ class TicketFragment(val route: Int): ListFragment() {
}
override fun <T> generateAdapter(elements: List<T>): RecyclerView.Adapter<*> {
return TicketAdapter(elements as MutableList<List<Ticket>>, { it, p -> sign(it, p) })
return TicketAdapter(elements as MutableList<List<Ticket>>, { it,p,l -> sign(it,p,l) })
}
override fun <T> changeItems(elements: List<T>) {
@ -76,8 +77,8 @@ class TicketFragment(val route: Int): ListFragment() {
presenter.downloadTickets(route)
}
fun sign(tickets: List<Int>, packages: Int){
navigator.navigateToSign(tickets, packages)
fun sign(tickets: List<Int>, packages: Int,location: Location){
navigator.navigateToSign(tickets, packages,location)
}
fun changeMenuTitle(item: MenuItem?) {

View File

@ -8,5 +8,7 @@ import es.verdnatura.vndelivery.presentation.view.view.BaseView
interface SignView: BaseView {
fun close()
fun showToast()
}

View File

@ -0,0 +1,233 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/grisclarogoogle">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/green"
android:orientation="vertical"
android:padding="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/txtRuta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ruta 45643"
android:textColor="@color/grisclarogoogle"
android:textSize="18dp"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:id="@+id/lkm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout"
android:background="@color/txtreservado"
android:padding="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Kilometros"
android:textColor="@color/green"
android:textSize="18dp"
android:layout_marginBottom="2dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="@color/green"
android:orientation="horizontal"
android:layout_marginBottom="8dp"></LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="8dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Km de inicio:"
android:textColor="@color/negrogoogle"
android:textSize="16dp"
android:layout_marginBottom="2dp"
android:layout_marginRight="8dp"
android:layout_weight="1"
android:imeOptions="actionDone"
android:inputType="text"
android:maxLines="1"/>
<EditText
android:id="@+id/txtKmStart"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/grisclarogoogle"
android:padding="8dp"
android:text="124567"
android:layout_weight="1"
android:imeOptions="actionDone"
android:inputType="number"
android:maxLines="1"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Km fin:"
android:textColor="@color/negrogoogle"
android:textSize="16dp"
android:layout_marginBottom="2dp"
android:layout_marginRight="8dp"
android:layout_weight="1"/>
<EditText
android:id="@+id/txtKmEnd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/grisclarogoogle"
android:padding="8dp"
android:text="124567"
android:layout_weight="1"
android:imeOptions="actionDone"
android:inputType="number"
android:maxLines="1"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/lkm"
android:background="@color/txtreservado"
android:padding="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Horas"
android:textColor="@color/green"
android:textSize="18dp"
android:layout_marginBottom="2dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="@color/green"
android:orientation="horizontal"
android:layout_marginBottom="8dp"></LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="8dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hora de inicio:"
android:textColor="@color/negrogoogle"
android:textSize="16dp"
android:layout_marginBottom="2dp"
android:layout_marginRight="8dp"
android:layout_weight="1"/>
<EditText
android:id="@+id/txtDStart"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/grisclarogoogle"
android:padding="8dp"
android:text="124567"
android:layout_weight="1"
android:focusable="false"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hora fin:"
android:textColor="@color/negrogoogle"
android:textSize="16dp"
android:layout_marginBottom="2dp"
android:layout_marginRight="8dp"
android:layout_weight="1"
android:imeOptions="actionDone"
android:inputType="text"
android:maxLines="1"/>
<EditText
android:id="@+id/txtDFin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/grisclarogoogle"
android:padding="8dp"
android:text="124567"
android:layout_weight="1"
android:imeOptions="actionDone"
android:inputType="text"
android:maxLines="1"
android:focusable="false"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<Button
android:id="@+id/btnCancelar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="cancelar"
android:background="@color/grisgoogle"
android:textColor="@color/grisclarogoogle"
android:onClick="cancelConf"
android:layout_weight="1"/>
<Button
android:id="@+id/btnGuardar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="guardar"
android:background="@color/green"
android:textColor="@color/grisclarogoogle"
android:onClick="updateRoute"
android:layout_weight="1"/>
</LinearLayout>
</android.support.constraint.ConstraintLayout>

View File

@ -2,7 +2,7 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/containerList"
style="@style/WidhtMatchHeightMatch"
android:background="@color/background_grey"
android:background="@color/grisclarogoogle"
android:padding="@dimen/padding_large">
<es.verdnatura.core.components.swiperefreshlayout.VnSwipeRefreshLayout

View File

@ -2,7 +2,7 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary">
android:background="@color/grisclarogoogle">
<es.verdnatura.core.components.login.Vnlogin
android:id="@+id/vnLogin"

View File

@ -89,5 +89,39 @@
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="20dp">
<Button
android:id="@+id/btnConfig"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Configurar"
android:background="@color/grisgoogle"
android:textColor="@color/grisclarogoogle"
android:layout_marginRight="4dp"/>
<Button
android:id="@+id/btnEntrar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Entrar"
android:background="@color/green"
android:textColor="@color/grisclarogoogle"
android:layout_marginLeft="4dp"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>

View File

@ -34,5 +34,12 @@
<string name="menu_logout">Salir</string>
<string name="location_message">Encienda la localización para continuar</string>
<string name="activity_config">Configurar</string>
<string name="kminicio">KM Inicio</string>
<string name="kmfin">KM Fin</string>
<string name="horaInicio">Hora Inicio</string>
<string name="horaFin">Hora FIN</string>
<string name="long_location_message">La localización supera en 30 metros respecto a la almacenada. ¿Quieres modificar la localización?</string>
</resources>

Some files were not shown because too many files have changed in this diff Show More