Commit c8fab9ae774769deecb37266b87776de9f9e5058
0 parents
Exists in
master
first commit
Showing
109 changed files
with
5780 additions
and
0 deletions
Show diff stats
.gitignore
.idea/.name
.idea/codeStyles/Project.xml
... | ... | @@ -0,0 +1,147 @@ |
1 | +<component name="ProjectCodeStyleConfiguration"> | |
2 | + <code_scheme name="Project" version="173"> | |
3 | + <JetCodeStyleSettings> | |
4 | + <option name="PACKAGES_TO_USE_STAR_IMPORTS"> | |
5 | + <value> | |
6 | + <package name="java.util" alias="false" withSubpackages="false" /> | |
7 | + <package name="kotlinx.android.synthetic" alias="false" withSubpackages="true" /> | |
8 | + <package name="io.ktor" alias="false" withSubpackages="true" /> | |
9 | + </value> | |
10 | + </option> | |
11 | + <option name="PACKAGES_IMPORT_LAYOUT"> | |
12 | + <value> | |
13 | + <package name="" alias="false" withSubpackages="true" /> | |
14 | + <package name="java" alias="false" withSubpackages="true" /> | |
15 | + <package name="javax" alias="false" withSubpackages="true" /> | |
16 | + <package name="kotlin" alias="false" withSubpackages="true" /> | |
17 | + <package name="" alias="true" withSubpackages="true" /> | |
18 | + </value> | |
19 | + </option> | |
20 | + <option name="IF_RPAREN_ON_NEW_LINE" value="false" /> | |
21 | + <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> | |
22 | + </JetCodeStyleSettings> | |
23 | + <codeStyleSettings language="XML"> | |
24 | + <indentOptions> | |
25 | + <option name="CONTINUATION_INDENT_SIZE" value="4" /> | |
26 | + </indentOptions> | |
27 | + <arrangement> | |
28 | + <rules> | |
29 | + <section> | |
30 | + <rule> | |
31 | + <match> | |
32 | + <AND> | |
33 | + <NAME>xmlns:android</NAME> | |
34 | + <XML_ATTRIBUTE /> | |
35 | + <XML_NAMESPACE>^$</XML_NAMESPACE> | |
36 | + </AND> | |
37 | + </match> | |
38 | + </rule> | |
39 | + </section> | |
40 | + <section> | |
41 | + <rule> | |
42 | + <match> | |
43 | + <AND> | |
44 | + <NAME>xmlns:.*</NAME> | |
45 | + <XML_ATTRIBUTE /> | |
46 | + <XML_NAMESPACE>^$</XML_NAMESPACE> | |
47 | + </AND> | |
48 | + </match> | |
49 | + <order>BY_NAME</order> | |
50 | + </rule> | |
51 | + </section> | |
52 | + <section> | |
53 | + <rule> | |
54 | + <match> | |
55 | + <AND> | |
56 | + <NAME>.*:id</NAME> | |
57 | + <XML_ATTRIBUTE /> | |
58 | + <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> | |
59 | + </AND> | |
60 | + </match> | |
61 | + </rule> | |
62 | + </section> | |
63 | + <section> | |
64 | + <rule> | |
65 | + <match> | |
66 | + <AND> | |
67 | + <NAME>.*:name</NAME> | |
68 | + <XML_ATTRIBUTE /> | |
69 | + <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> | |
70 | + </AND> | |
71 | + </match> | |
72 | + </rule> | |
73 | + </section> | |
74 | + <section> | |
75 | + <rule> | |
76 | + <match> | |
77 | + <AND> | |
78 | + <NAME>name</NAME> | |
79 | + <XML_ATTRIBUTE /> | |
80 | + <XML_NAMESPACE>^$</XML_NAMESPACE> | |
81 | + </AND> | |
82 | + </match> | |
83 | + </rule> | |
84 | + </section> | |
85 | + <section> | |
86 | + <rule> | |
87 | + <match> | |
88 | + <AND> | |
89 | + <NAME>style</NAME> | |
90 | + <XML_ATTRIBUTE /> | |
91 | + <XML_NAMESPACE>^$</XML_NAMESPACE> | |
92 | + </AND> | |
93 | + </match> | |
94 | + </rule> | |
95 | + </section> | |
96 | + <section> | |
97 | + <rule> | |
98 | + <match> | |
99 | + <AND> | |
100 | + <NAME>.*</NAME> | |
101 | + <XML_ATTRIBUTE /> | |
102 | + <XML_NAMESPACE>^$</XML_NAMESPACE> | |
103 | + </AND> | |
104 | + </match> | |
105 | + <order>BY_NAME</order> | |
106 | + </rule> | |
107 | + </section> | |
108 | + <section> | |
109 | + <rule> | |
110 | + <match> | |
111 | + <AND> | |
112 | + <NAME>.*</NAME> | |
113 | + <XML_ATTRIBUTE /> | |
114 | + <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> | |
115 | + </AND> | |
116 | + </match> | |
117 | + <order>ANDROID_ATTRIBUTE_ORDER</order> | |
118 | + </rule> | |
119 | + </section> | |
120 | + <section> | |
121 | + <rule> | |
122 | + <match> | |
123 | + <AND> | |
124 | + <NAME>.*</NAME> | |
125 | + <XML_ATTRIBUTE /> | |
126 | + <XML_NAMESPACE>.*</XML_NAMESPACE> | |
127 | + </AND> | |
128 | + </match> | |
129 | + <order>BY_NAME</order> | |
130 | + </rule> | |
131 | + </section> | |
132 | + </rules> | |
133 | + </arrangement> | |
134 | + </codeStyleSettings> | |
135 | + <codeStyleSettings language="kotlin"> | |
136 | + <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> | |
137 | + <option name="RIGHT_MARGIN" value="200" /> | |
138 | + <option name="KEEP_LINE_BREAKS" value="false" /> | |
139 | + <option name="ALIGN_MULTILINE_PARAMETERS" value="false" /> | |
140 | + <option name="CALL_PARAMETERS_LPAREN_ON_NEXT_LINE" value="false" /> | |
141 | + <option name="CALL_PARAMETERS_RPAREN_ON_NEXT_LINE" value="false" /> | |
142 | + <option name="METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE" value="false" /> | |
143 | + <option name="METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE" value="false" /> | |
144 | + <option name="WRAP_ON_TYPING" value="1" /> | |
145 | + </codeStyleSettings> | |
146 | + </code_scheme> | |
147 | +</component> | |
0 | 148 | \ No newline at end of file |
.idea/codeStyles/codeStyleConfig.xml
.idea/gradle.xml
... | ... | @@ -0,0 +1,22 @@ |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<project version="4"> | |
3 | + <component name="GradleMigrationSettings" migrationVersion="1" /> | |
4 | + <component name="GradleSettings"> | |
5 | + <option name="linkedExternalProjectsSettings"> | |
6 | + <GradleProjectSettings> | |
7 | + <option name="testRunner" value="PLATFORM" /> | |
8 | + <option name="distributionType" value="DEFAULT_WRAPPED" /> | |
9 | + <option name="externalProjectPath" value="$PROJECT_DIR$" /> | |
10 | + <option name="gradleHome" value="C:/Gradle" /> | |
11 | + <option name="gradleJvm" value="11" /> | |
12 | + <option name="modules"> | |
13 | + <set> | |
14 | + <option value="$PROJECT_DIR$" /> | |
15 | + <option value="$PROJECT_DIR$/app" /> | |
16 | + </set> | |
17 | + </option> | |
18 | + <option name="resolveModulePerSourceSet" value="false" /> | |
19 | + </GradleProjectSettings> | |
20 | + </option> | |
21 | + </component> | |
22 | +</project> | |
0 | 23 | \ No newline at end of file |
.idea/inspectionProfiles/Project_Default.xml
... | ... | @@ -0,0 +1,6 @@ |
1 | +<component name="InspectionProjectProfileManager"> | |
2 | + <profile version="1.0"> | |
3 | + <option name="myName" value="Project Default" /> | |
4 | + <inspection_tool class="AndroidUnresolvedRoomSqlReference" enabled="false" level="ERROR" enabled_by_default="false" /> | |
5 | + </profile> | |
6 | +</component> | |
0 | 7 | \ No newline at end of file |
.idea/jarRepositories.xml
... | ... | @@ -0,0 +1,25 @@ |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<project version="4"> | |
3 | + <component name="RemoteRepositoriesConfiguration"> | |
4 | + <remote-repository> | |
5 | + <option name="id" value="central" /> | |
6 | + <option name="name" value="Maven Central repository" /> | |
7 | + <option name="url" value="https://repo1.maven.org/maven2" /> | |
8 | + </remote-repository> | |
9 | + <remote-repository> | |
10 | + <option name="id" value="jboss.community" /> | |
11 | + <option name="name" value="JBoss Community repository" /> | |
12 | + <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> | |
13 | + </remote-repository> | |
14 | + <remote-repository> | |
15 | + <option name="id" value="BintrayJCenter" /> | |
16 | + <option name="name" value="BintrayJCenter" /> | |
17 | + <option name="url" value="https://jcenter.bintray.com/" /> | |
18 | + </remote-repository> | |
19 | + <remote-repository> | |
20 | + <option name="id" value="Google" /> | |
21 | + <option name="name" value="Google" /> | |
22 | + <option name="url" value="https://dl.google.com/dl/android/maven2/" /> | |
23 | + </remote-repository> | |
24 | + </component> | |
25 | +</project> | |
0 | 26 | \ No newline at end of file |
.idea/misc.xml
... | ... | @@ -0,0 +1,9 @@ |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<project version="4"> | |
3 | + <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="11" project-jdk-type="JavaSDK"> | |
4 | + <output url="file://$PROJECT_DIR$/build/classes" /> | |
5 | + </component> | |
6 | + <component name="ProjectType"> | |
7 | + <option name="id" value="Android" /> | |
8 | + </component> | |
9 | +</project> | |
0 | 10 | \ No newline at end of file |
.idea/runConfigurations.xml
... | ... | @@ -0,0 +1,12 @@ |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<project version="4"> | |
3 | + <component name="RunConfigurationProducerService"> | |
4 | + <option name="ignoredProducers"> | |
5 | + <set> | |
6 | + <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" /> | |
7 | + <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" /> | |
8 | + <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" /> | |
9 | + </set> | |
10 | + </option> | |
11 | + </component> | |
12 | +</project> | |
0 | 13 | \ No newline at end of file |
Logica carga articulos con CB.docx
No preview for this file type
app/.gitignore
app/build.gradle
... | ... | @@ -0,0 +1,73 @@ |
1 | +apply plugin: 'com.android.application' | |
2 | +apply plugin: 'kotlin-android' | |
3 | +apply plugin: 'kotlin-android-extensions' | |
4 | +apply plugin: 'kotlin-kapt' | |
5 | + | |
6 | +android { | |
7 | + compileSdkVersion 30 | |
8 | + buildToolsVersion "29.0.3" | |
9 | + | |
10 | + defaultConfig { | |
11 | + applicationId "com.focasoftware.deboinventariov20" | |
12 | + minSdkVersion 26 | |
13 | + targetSdkVersion 30 | |
14 | + versionCode 1 | |
15 | + versionName "1.0" | |
16 | + | |
17 | + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | |
18 | + } | |
19 | + | |
20 | + buildTypes { | |
21 | + release { | |
22 | + minifyEnabled false | |
23 | + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' | |
24 | + } | |
25 | + } | |
26 | + compileOptions { | |
27 | + sourceCompatibility JavaVersion.VERSION_1_8 | |
28 | + targetCompatibility JavaVersion.VERSION_1_8 | |
29 | + } | |
30 | + kotlinOptions { | |
31 | + jvmTarget = '1.8' | |
32 | + } | |
33 | +} | |
34 | + | |
35 | +dependencies { | |
36 | + implementation fileTree(dir: "libs", include: ["*.jar"]) | |
37 | + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" | |
38 | + implementation 'androidx.core:core-ktx:1.3.1' | |
39 | + implementation 'androidx.appcompat:appcompat:1.2.0' | |
40 | + implementation 'androidx.legacy:legacy-support-v4:1.0.0' | |
41 | + implementation 'com.google.android.material:material:1.2.0' | |
42 | + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' | |
43 | + implementation 'androidx.navigation:navigation-fragment:2.3.0' | |
44 | + implementation 'androidx.navigation:navigation-ui:2.3.0' | |
45 | + implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' | |
46 | + implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0' | |
47 | + implementation 'androidx.navigation:navigation-ui-ktx:2.3.0' | |
48 | + implementation 'androidx.recyclerview:recyclerview:1.1.0' | |
49 | + testImplementation 'junit:junit:4.13' | |
50 | + androidTestImplementation 'androidx.test.ext:junit:1.1.1' | |
51 | + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' | |
52 | + | |
53 | + | |
54 | + //Room | |
55 | + implementation 'androidx.room:room-ktx:2.2.5' | |
56 | + implementation "androidx.room:room-runtime:2.2.5" | |
57 | + kapt "androidx.room:room-compiler:2.2.5" | |
58 | + | |
59 | + //Retrofit | |
60 | + implementation 'com.squareup.retrofit2:retrofit:2.9.0' | |
61 | + implementation 'com.google.code.gson:gson:2.8.6' | |
62 | + implementation 'com.squareup.retrofit2:converter-gson:2.9.0' | |
63 | + implementation 'com.squareup.okhttp3:logging-interceptor:4.8.1' | |
64 | + | |
65 | + //Gson library | |
66 | + implementation "com.google.code.gson:gson:2.8.6" | |
67 | + annotationProcessor 'androidx.room:room-compiler:2.2.5' | |
68 | + | |
69 | + | |
70 | + | |
71 | + implementation 'com.afollestad.material-dialogs:core:3.3.0' | |
72 | + implementation 'com.afollestad.material-dialogs:input:3.3.0' | |
73 | +} | |
0 | 74 | \ No newline at end of file |
app/proguard-rules.pro
... | ... | @@ -0,0 +1,21 @@ |
1 | +# Add project specific ProGuard rules here. | |
2 | +# You can control the set of applied configuration files using the | |
3 | +# proguardFiles setting in build.gradle. | |
4 | +# | |
5 | +# For more details, see | |
6 | +# http://developer.android.com/guide/developing/tools/proguard.html | |
7 | + | |
8 | +# If your project uses WebView with JS, uncomment the following | |
9 | +# and specify the fully qualified class name to the JavaScript interface | |
10 | +# class: | |
11 | +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { | |
12 | +# public *; | |
13 | +#} | |
14 | + | |
15 | +# Uncomment this to preserve the line number information for | |
16 | +# debugging stack traces. | |
17 | +#-keepattributes SourceFile,LineNumberTable | |
18 | + | |
19 | +# If you keep the line number information, uncomment this to | |
20 | +# hide the original source file name. | |
21 | +#-renamesourcefileattribute SourceFile | |
0 | 22 | \ No newline at end of file |
app/src/androidTest/java/com/focasoftware/deboinventariov20/ExampleInstrumentedTest.kt
... | ... | @@ -0,0 +1,24 @@ |
1 | +package com.focasoftware.deboinventariov20 | |
2 | + | |
3 | +import androidx.test.platform.app.InstrumentationRegistry | |
4 | +import androidx.test.ext.junit.runners.AndroidJUnit4 | |
5 | + | |
6 | +import org.junit.Test | |
7 | +import org.junit.runner.RunWith | |
8 | + | |
9 | +import org.junit.Assert.* | |
10 | + | |
11 | +/** | |
12 | + * Instrumented test, which will execute on an Android device. | |
13 | + * | |
14 | + * See [testing documentation](http://d.android.com/tools/testing). | |
15 | + */ | |
16 | +@RunWith(AndroidJUnit4::class) | |
17 | +class ExampleInstrumentedTest { | |
18 | + @Test | |
19 | + fun useAppContext() { | |
20 | + // Context of the app under test. | |
21 | + val appContext = InstrumentationRegistry.getInstrumentation().targetContext | |
22 | + assertEquals("com.focasoftware.deboinventariov20", appContext.packageName) | |
23 | + } | |
24 | +} | |
0 | 25 | \ No newline at end of file |
app/src/main/AndroidManifest.xml
... | ... | @@ -0,0 +1,28 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<manifest xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + package="com.focasoftware.deboinventariov20"> | |
4 | + | |
5 | + <uses-permission android:name="android.permission.VIBRATE" /> | |
6 | + <uses-permission android:name="android.permission.INTERNET" /> | |
7 | + | |
8 | + <application | |
9 | + android:allowBackup="true" | |
10 | + android:icon="@mipmap/ic_launcher" | |
11 | + android:label="@string/app_name" | |
12 | + android:roundIcon="@mipmap/ic_launcher_round" | |
13 | + android:supportsRtl="true" | |
14 | + android:theme="@style/AppTheme" | |
15 | + android:usesCleartextTraffic="true"> | |
16 | + <activity | |
17 | + android:name=".MainActivity" | |
18 | + android:label="@string/app_name" | |
19 | + android:theme="@style/AppTheme.NoActionBar"> | |
20 | + <intent-filter> | |
21 | + <action android:name="android.intent.action.MAIN" /> | |
22 | + | |
23 | + <category android:name="android.intent.category.LAUNCHER" /> | |
24 | + </intent-filter> | |
25 | + </activity> | |
26 | + </application> | |
27 | + | |
28 | +</manifest> | |
0 | 29 | \ No newline at end of file |
app/src/main/java/com/focasoftware/deboinventariov20/DB/Constans/Constans.kt
... | ... | @@ -0,0 +1,13 @@ |
1 | +package com.focasoftware.deboinventario.ui.actualizacionMaestros | |
2 | + | |
3 | +class Constans { | |
4 | + | |
5 | + companion object { | |
6 | + const val DB_NAME="DebInv" | |
7 | + const val TABLA_ART="Articles" | |
8 | + const val TABLA_INV_H="InvHead" | |
9 | + const val TABLA_INV_B="InvBody" | |
10 | + const val TABLA_SERV_INV="ServeInv" | |
11 | + } | |
12 | + | |
13 | +} | |
0 | 14 | \ No newline at end of file |
app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt
... | ... | @@ -0,0 +1,71 @@ |
1 | +package com.focasoftware.deboinventariov20.DB.DAO | |
2 | + | |
3 | +import androidx.room.* | |
4 | +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_ART | |
5 | +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_INV_B | |
6 | +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_INV_H | |
7 | +import com.focasoftware.deboinventariov20.Model.* | |
8 | + | |
9 | +@Dao | |
10 | +interface ArticulosDAO { | |
11 | + | |
12 | + // TABLA ARTICULOS | |
13 | + @Insert(onConflict = OnConflictStrategy.REPLACE) | |
14 | + suspend fun insertArticulos(articulos: Articles?) | |
15 | + | |
16 | + @Query("SELECT * FROM $TABLA_ART ORDER BY DES DESC") | |
17 | + suspend fun findAllArticulos(): List<Articles> | |
18 | + | |
19 | + @Query("SELECT * FROM $TABLA_ART WHERE DEPSN=:dep AND DES LIKE '%' || :description || '%'") | |
20 | + suspend fun findArticuloByDesc(description: String?, dep: Int): List<Articles> | |
21 | + | |
22 | + @Query("SELECT * FROM $TABLA_ART WHERE DEPSN=:dep AND CB LIKE :codBarra") | |
23 | + suspend fun findArticuloByCodBar(codBarra: String?, dep: Int): Articles? | |
24 | + | |
25 | + @Query("DELETE FROM $TABLA_ART") | |
26 | + suspend fun deleteAllArticulos() | |
27 | +} | |
28 | + | |
29 | +@Dao | |
30 | +interface InvHeadDAO { | |
31 | + @Insert() | |
32 | + suspend fun insertInvHead(invHead: InvHead?) | |
33 | + | |
34 | + @Query("SELECT INV_NUM FROM $TABLA_INV_H ORDER BY INV_NUM DESC") | |
35 | + suspend fun findLastInv(): Int | |
36 | + | |
37 | + @Query("DELETE FROM $TABLA_INV_H") | |
38 | + suspend fun deleteAllArticulos() | |
39 | + | |
40 | + @Query("DELETE FROM $TABLA_INV_H WHERE INV_NUM=:inven") | |
41 | + suspend fun deleteinvHead(inven: Int) | |
42 | + | |
43 | + @Query("SELECT * FROM $TABLA_INV_H ORDER BY INV_FEI") | |
44 | + suspend fun fetchAllInvHead(): List<InvHead> | |
45 | +} | |
46 | + | |
47 | +@Dao | |
48 | +interface InvBodyDAO { | |
49 | + @Insert() | |
50 | + suspend fun insertInvBody(invBody: InvBody?) | |
51 | + | |
52 | + @Query("DELETE FROM $TABLA_INV_B") | |
53 | + suspend fun deleteAllInvBody() | |
54 | + | |
55 | + @Query("DELETE FROM $TABLA_INV_B WHERE INV_NUM =:inven") | |
56 | + suspend fun deleteInvBody(inven: Int) | |
57 | + | |
58 | + @Query("UPDATE $TABLA_INV_B SET CANT=:cant WHERE SEC=:sec AND COD=:cod") | |
59 | + suspend fun UpdateInvBody(cant: Float, sec: String, cod: String) | |
60 | + | |
61 | + @Query("SELECT * FROM $TABLA_INV_B WHERE INV_NUM =:inven ORDER BY INV_FEI DESC") | |
62 | + suspend fun fetchAllInvBody(inven:Int): List<InvBody> | |
63 | +} | |
64 | +@Dao | |
65 | +interface ServeInvDao { | |
66 | + @Insert(onConflict = OnConflictStrategy.REPLACE) | |
67 | + fun insertServer(servidor: ServeInv) | |
68 | + | |
69 | + @Query("SELECT SER_NUM,SER_DESC, SER_DIR FROM ServeInv") | |
70 | + suspend fun findAllServers(): List<ServeInv> | |
71 | +} | |
0 | 72 | \ No newline at end of file |
app/src/main/java/com/focasoftware/deboinventariov20/DB/DataBase/AppDb.kt
... | ... | @@ -0,0 +1,42 @@ |
1 | +package com.focasoftware.deboinventariov20.DB.DataBase | |
2 | + | |
3 | +import android.content.Context | |
4 | +import androidx.room.Database | |
5 | +import androidx.room.Room | |
6 | +import androidx.room.RoomDatabase | |
7 | +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans | |
8 | +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_ART | |
9 | +import com.focasoftware.deboinventariov20.DB.DAO.* | |
10 | +import com.focasoftware.deboinventariov20.Model.Articles | |
11 | +import com.focasoftware.deboinventariov20.Model.InvBody | |
12 | +import com.focasoftware.deboinventariov20.Model.InvHead | |
13 | +import com.focasoftware.deboinventariov20.Model.ServeInv | |
14 | + | |
15 | + | |
16 | +@Database(entities = [Articles::class, InvHead::class, InvBody::class, ServeInv::class], version = 1, exportSchema = false) | |
17 | +abstract class AppDb : RoomDatabase() { | |
18 | + abstract fun ArticulosDAO(): ArticulosDAO? | |
19 | + abstract fun InvHeadDAO(): InvHeadDAO? | |
20 | + abstract fun InvBodyDAO(): InvBodyDAO? | |
21 | + abstract fun ServeInvDao(): ServeInvDao? | |
22 | + | |
23 | + companion object { | |
24 | + private var INSTANCE: AppDb? = null | |
25 | + fun getAppDb(context: Context): AppDb? { | |
26 | + if (INSTANCE == null) { | |
27 | + INSTANCE = Room.databaseBuilder( | |
28 | + context.applicationContext, | |
29 | + AppDb::class.java, | |
30 | + Constans.DB_NAME | |
31 | + ) | |
32 | + .allowMainThreadQueries() | |
33 | + .build() | |
34 | + } | |
35 | + return INSTANCE | |
36 | + } | |
37 | + | |
38 | + fun destroyInstance() { | |
39 | + INSTANCE = null | |
40 | + } | |
41 | + } | |
42 | +} | |
0 | 43 | \ No newline at end of file |
app/src/main/java/com/focasoftware/deboinventariov20/MainActivity.kt
... | ... | @@ -0,0 +1,48 @@ |
1 | +package com.focasoftware.deboinventariov20 | |
2 | + | |
3 | +import android.os.Bundle | |
4 | +import android.view.Menu | |
5 | +import com.google.android.material.floatingactionbutton.FloatingActionButton | |
6 | +import com.google.android.material.snackbar.Snackbar | |
7 | +import com.google.android.material.navigation.NavigationView | |
8 | +import androidx.navigation.findNavController | |
9 | +import androidx.navigation.ui.AppBarConfiguration | |
10 | +import androidx.navigation.ui.navigateUp | |
11 | +import androidx.navigation.ui.setupActionBarWithNavController | |
12 | +import androidx.navigation.ui.setupWithNavController | |
13 | +import androidx.drawerlayout.widget.DrawerLayout | |
14 | +import androidx.appcompat.app.AppCompatActivity | |
15 | +import androidx.appcompat.widget.Toolbar | |
16 | + | |
17 | +class MainActivity : AppCompatActivity() { | |
18 | + | |
19 | + private lateinit var appBarConfiguration: AppBarConfiguration | |
20 | + | |
21 | + override fun onCreate(savedInstanceState: Bundle?) { | |
22 | + super.onCreate(savedInstanceState) | |
23 | + setContentView(R.layout.activity_main) | |
24 | + val toolbar: Toolbar = findViewById(R.id.toolbar) | |
25 | + setSupportActionBar(toolbar) | |
26 | + | |
27 | + | |
28 | + val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout) | |
29 | + val navView: NavigationView = findViewById(R.id.nav_view) | |
30 | + val navController = findNavController(R.id.nav_host_fragment) | |
31 | + | |
32 | + appBarConfiguration = AppBarConfiguration(setOf( | |
33 | + R.id.mainFragment2,R.id.inventarioFragment, R.id.actuaMaestrosFragment, R.id.configuracionFragment), drawerLayout) | |
34 | + setupActionBarWithNavController(navController, appBarConfiguration) | |
35 | + navView.setupWithNavController(navController) | |
36 | + } | |
37 | + | |
38 | + override fun onCreateOptionsMenu(menu: Menu): Boolean { | |
39 | + // Inflate the menu; this adds items to the action bar if it is present. | |
40 | + menuInflater.inflate(R.menu.main, menu) | |
41 | + return true | |
42 | + } | |
43 | + | |
44 | + override fun onSupportNavigateUp(): Boolean { | |
45 | + val navController = findNavController(R.id.nav_host_fragment) | |
46 | + return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp() | |
47 | + } | |
48 | +} | |
0 | 49 | \ No newline at end of file |
app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosApi.kt
... | ... | @@ -0,0 +1,11 @@ |
1 | +package com.focasoftware.deboinventariov20.Model | |
2 | + | |
3 | +import retrofit2.Response | |
4 | +import retrofit2.http.GET | |
5 | + | |
6 | +interface ProductosApi { | |
7 | + | |
8 | + @GET("api/articulos") | |
9 | + suspend fun getProductos(): Response<List<Productos>> | |
10 | + | |
11 | +} | |
0 | 12 | \ No newline at end of file |
app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt
... | ... | @@ -0,0 +1,18 @@ |
1 | +package com.focasoftware.deboinventariov20.Model | |
2 | + | |
3 | +import retrofit2.Retrofit | |
4 | +import retrofit2.converter.gson.GsonConverterFactory | |
5 | + | |
6 | +object ProductosService { | |
7 | + private val BASE_URL ="http://10.0.2.2:3000/" | |
8 | + //"http://10.231.45.83:3000/" | |
9 | + | |
10 | + | |
11 | + fun getProductosService(): ProductosApi { | |
12 | + return Retrofit.Builder() | |
13 | + .baseUrl(BASE_URL) | |
14 | + .addConverterFactory(GsonConverterFactory.create()) | |
15 | + .build() | |
16 | + .create(ProductosApi::class.java) | |
17 | + } | |
18 | +} | |
0 | 19 | \ No newline at end of file |
app/src/main/java/com/focasoftware/deboinventariov20/Model/Tablas.kt
... | ... | @@ -0,0 +1,83 @@ |
1 | +package com.focasoftware.deboinventariov20.Model | |
2 | + | |
3 | +import androidx.room.ColumnInfo | |
4 | +import androidx.room.Entity | |
5 | +import androidx.room.PrimaryKey | |
6 | +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_ART | |
7 | +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_INV_B | |
8 | +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_INV_H | |
9 | +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_SERV_INV | |
10 | +import com.google.gson.annotations.SerializedName | |
11 | +import java.io.Serializable | |
12 | + | |
13 | +data class Productos( | |
14 | + @SerializedName("SEC")var sector: String?, | |
15 | + @SerializedName("COD") var codigo: String?, | |
16 | + @SerializedName("DESC") var descripcion: String?, | |
17 | + @SerializedName("CB") var codBar: String?, | |
18 | + @SerializedName("CBC") var codOrigen: String?, | |
19 | + @SerializedName("PRE_VTA") var precio: String?, | |
20 | + @SerializedName("PRE_COS") var costo: String?, | |
21 | + @SerializedName("BAL") var balanza: Int?, | |
22 | + @SerializedName("DEPSN") var depSn: Int?, | |
23 | + @SerializedName("FOTO") var imagen: String?) | |
24 | + | |
25 | +@Entity(tableName = TABLA_ART) | |
26 | +data class Articles( | |
27 | + @ColumnInfo(name = "SEC") var sector: String?, | |
28 | + @ColumnInfo(name = "COD") var codigo: String?, | |
29 | + @ColumnInfo(name = "DES") var descripcion: String?, | |
30 | + @ColumnInfo(name = "CB") var codBar: String?, | |
31 | + @ColumnInfo(name = "CBC") var codOrigen: String?, | |
32 | + @ColumnInfo(name = "PRE_VTA") var precio: String?, | |
33 | + @ColumnInfo(name = "PRE_COS") var costo: String?, | |
34 | + @ColumnInfo(name = "BAL") var balanza: Int?, | |
35 | + @ColumnInfo(name = "DEPSN") var depSn: Int?, | |
36 | + @ColumnInfo(name = "FOTO") var imagen: String?) : Serializable { | |
37 | + @PrimaryKey(autoGenerate = true) | |
38 | + @ColumnInfo(name = "id") var id: Long = 0 | |
39 | +} | |
40 | + | |
41 | + | |
42 | +@Entity(tableName = TABLA_INV_H) | |
43 | +data class InvHead(@PrimaryKey(autoGenerate = true) @ColumnInfo(name = "INV_NUM") var invNum: Int, | |
44 | + @ColumnInfo(name = "INV_DESC") var descripcion: String?, | |
45 | + @ColumnInfo(name = "ESTADO") var estado: Int?, | |
46 | + @ColumnInfo(name = "INV_FEI") var fechaInicio: String?, | |
47 | + @ColumnInfo(name = "INV_FEF") var fechaFinal: String?, | |
48 | +// productos contados en el inventario | |
49 | + @ColumnInfo(name = "INV_PRODCONT") var prodContados: Long?, | |
50 | + @ColumnInfo(name = "INV_LUG") var lugar: Int?, | |
51 | +// Solo se ajustan los productos incluidos en el conteo=0 | |
52 | +// Ajusta productos no incluidos en el conteo con stock en cero=1 | |
53 | + @ColumnInfo(name = "PRO_NO_CONTA") var stDesc: Int?, | |
54 | +// Mostror stock en el sistema al momento de la descarga del maestro. | |
55 | + @ColumnInfo(name = "MOSTRAR_STOCK") var proNoCont: Int?) | |
56 | + | |
57 | + | |
58 | +@Entity(tableName = TABLA_INV_B) | |
59 | +data class InvBody( | |
60 | + @ColumnInfo(name = "INV_NUM") var invNum: Int, | |
61 | + @ColumnInfo(name = "SEC") var sector: String?, | |
62 | + @ColumnInfo(name = "COD") var codigo: String?, | |
63 | + @ColumnInfo(name = "DES") var descripcion: String?, | |
64 | + @ColumnInfo(name = "CANT") var cantTomada: String?, | |
65 | + @ColumnInfo(name = "CB") var codBar: String?, | |
66 | + @ColumnInfo(name = "CBC") var codOrigen: String?, | |
67 | + @ColumnInfo(name = "PRE_VTA") var precio: String?, | |
68 | + @ColumnInfo(name = "PRE_COS") var costo: String?, | |
69 | + @ColumnInfo(name = "BAL") var balanza: Int?, | |
70 | + @ColumnInfo(name = "DSN") var depSn: Int?, | |
71 | + @ColumnInfo(name = "INV_FEI") var fechaInicio: String?, | |
72 | + @ColumnInfo(name = "INV_FEF") var fechaFinal: String?):Serializable{ | |
73 | + @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id") var id: Long = 0 | |
74 | +} | |
75 | + | |
76 | +@Entity(tableName = TABLA_SERV_INV) | |
77 | +data class ServeInv( | |
78 | + | |
79 | + @ColumnInfo(name = "SER_DESC") var descripcion: String?, @ColumnInfo(name = "SER_DIR") var direccion: String?, @ColumnInfo(name = "SER_PRE") var predeterminado: String?) : Serializable { | |
80 | + @PrimaryKey(autoGenerate = true) | |
81 | + @ColumnInfo(name = "SER_NUM") | |
82 | + var ID: Int = 0 | |
83 | +} |
app/src/main/java/com/focasoftware/deboinventariov20/ui/actualizacionMaestros/ActuaMaestrosFragment.kt
... | ... | @@ -0,0 +1,205 @@ |
1 | +package com.focasoftware.deboinventariov20.ui.actualizacionMaestros | |
2 | + | |
3 | +import android.os.Bundle | |
4 | +import android.view.LayoutInflater | |
5 | +import android.view.View | |
6 | +import android.view.ViewGroup | |
7 | +import android.widget.Button | |
8 | +import androidx.fragment.app.Fragment | |
9 | +import com.focasoftware.deboinventariov20.DB.DataBase.AppDb | |
10 | +import com.focasoftware.deboinventariov20.Model.Articles | |
11 | +import com.focasoftware.deboinventariov20.Model.Productos | |
12 | +import com.focasoftware.deboinventariov20.Model.ProductosService | |
13 | +import com.focasoftware.deboinventariov20.R | |
14 | +import kotlinx.android.synthetic.main.fragment_actua_maestros.* | |
15 | +import kotlinx.coroutines.* | |
16 | + | |
17 | +class ActuaMaestrosFragment : Fragment() { | |
18 | + | |
19 | + var job: Job? = null | |
20 | + | |
21 | + | |
22 | + override fun onCreate(savedInstanceState: Bundle?) { | |
23 | + super.onCreate(savedInstanceState) | |
24 | + | |
25 | + | |
26 | + //mostrarArticulos() | |
27 | + } | |
28 | + | |
29 | + | |
30 | + override fun onCreateView( | |
31 | + inflater: LayoutInflater, container: ViewGroup?, | |
32 | + savedInstanceState: Bundle? | |
33 | + ): View? { | |
34 | + // Inflate the layout for this fragment | |
35 | + val v = inflater.inflate(R.layout.fragment_actua_maestros, container, false) | |
36 | + val bConfirmarAct = v.findViewById<Button>(R.id.btnConfirmarAct) | |
37 | + bConfirmarAct.setOnClickListener { | |
38 | + loading_view.visibility = View.VISIBLE | |
39 | + countriesList.text = "Obteniendo Maestros Aguarde,por favor." | |
40 | + obtenerArticulos() | |
41 | + } | |
42 | + return v | |
43 | + } | |
44 | + | |
45 | + | |
46 | + private fun obtenerArticulos() { | |
47 | + | |
48 | + val productosService = ProductosService.getProductosService() | |
49 | + var index: Long = 1 | |
50 | + job = CoroutineScope(Dispatchers.IO).launch { | |
51 | + AppDb.getAppDb(requireActivity())!!.ArticulosDAO()!! | |
52 | + .deleteAllArticulos() | |
53 | + val response = productosService.getProductos() | |
54 | + if (response.isSuccessful) { | |
55 | + for (pro in response.body()!!) { | |
56 | + val artiAcargar = Articles( | |
57 | + pro.sector, | |
58 | + pro.codigo, | |
59 | + pro.descripcion, | |
60 | + pro.codBar, | |
61 | + pro.codOrigen, | |
62 | + pro.precio, | |
63 | + pro.costo, | |
64 | + pro.balanza, | |
65 | + pro.depSn, | |
66 | + pro.imagen | |
67 | + ) | |
68 | + index += index | |
69 | + | |
70 | + AppDb.getAppDb(requireActivity())!!.ArticulosDAO()!! | |
71 | + .insertArticulos(artiAcargar) | |
72 | + } | |
73 | + withContext(Dispatchers.Main) { | |
74 | + countriesList.visibility = View.VISIBLE | |
75 | + countriesList.text = "ยกDatos Importados Correctamente!" | |
76 | + loading_view.visibility = View.GONE | |
77 | + } | |
78 | +// | |
79 | + } else { | |
80 | + countriesList.text = "Error: ${response.message()}" | |
81 | + } | |
82 | + } | |
83 | + | |
84 | +// withContext(Dispatchers.Main) { | |
85 | +// if (response.isSuccessful) { | |
86 | +// val call = WebService | |
87 | +// .instance | |
88 | +// ?.createService(WebServiceApi::class.java) | |
89 | +// ?.articulos | |
90 | +// call?.enqueue(object : Callback<List<productos?>?> { | |
91 | +// override fun onResponse( | |
92 | +// call: Call<List<productos?>?>, | |
93 | +// response: Response<List<productos?>?> | |
94 | +// ) { | |
95 | +// if (response.code() == 200) { | |
96 | +// for (i in response.body()!!.indices) { | |
97 | +// //AppDb.getAppDb(requireActivity())!!.ArticulosDAO()?.insertArticulos(response.body()!![i]) | |
98 | +// cargarArticulos(2, 500, "sfas", "66666","2,2", "2,2", false, false, "") | |
99 | +//// Log.d( | |
100 | +//// "TAG1", "Nombre Curso: " + response.body()!![i]?.sector | |
101 | +//// + "Codigo Profesor: " + response.body()!![i]?.descripcion | |
102 | +//// ) | |
103 | +// mostrarArticulos() | |
104 | +// } | |
105 | +// } else if (response.code() == 404) { | |
106 | +// Log.d("TAG1", "No hay cursos") | |
107 | +// } | |
108 | +// | |
109 | +// } | |
110 | +// | |
111 | +// override fun onFailure(call: Call<List<productos?>?>, t: Throwable) {} | |
112 | +// }) | |
113 | + } | |
114 | + | |
115 | + fun mostrarArticulos() { | |
116 | + val Job = GlobalScope.launch { | |
117 | + var listArticulos: List<Articles>? = null | |
118 | + var temp: String = "" | |
119 | + listArticulos = | |
120 | + AppDb.getAppDb(requireActivity())?.ArticulosDAO()?.findAllArticulos() | |
121 | + if (listArticulos != null) { | |
122 | + | |
123 | + for (i in listArticulos.indices) | |
124 | + temp += listArticulos[i].codigo.toString() | |
125 | + } | |
126 | + withContext(Dispatchers.Main) { | |
127 | + countriesList.visibility = View.VISIBLE | |
128 | + loading_view.visibility = View.GONE | |
129 | + countriesList?.text = temp | |
130 | + } | |
131 | + } | |
132 | +// for (professor in listArticulos!!) { | |
133 | +// editT.text= professor.id.toString() | |
134 | +// } | |
135 | + } | |
136 | + | |
137 | + | |
138 | +// fun observeViewModel() { | |
139 | +// | |
140 | +// val productosService = ProductosService.getProductosService() | |
141 | +// var job: Job? = null | |
142 | +// | |
143 | +// | |
144 | +// //countriesList.text="Procesando..." | |
145 | +// //countriesList.visibility = View.VISIBLE | |
146 | +// // GlobalScope1.launch(Dispatchers.IO) { | |
147 | +// val response = productosService.getProductos() | |
148 | +// if (response.isSuccessful) { | |
149 | +//// countriesList.layoutManager = LinearLayoutManager(context) | |
150 | +//// countriesList.itemAnimator = DefaultItemAnimator() | |
151 | +// | |
152 | +//// ProductAdapter.updateCountries(it) | |
153 | +// // cargarArticulos(response.body()) | |
154 | +// | |
155 | +// | |
156 | +// val artiAcargar: Articulos? = null | |
157 | +// var index: Long = 1 | |
158 | +// | |
159 | +// for (pro in response.body()!!) { | |
160 | +// //artiAcargar.id =index+1 | |
161 | +// artiAcargar!!.sector = pro.sector | |
162 | +// artiAcargar.codigo = pro.codigo | |
163 | +// artiAcargar.descripcion = pro.descripcion | |
164 | +// artiAcargar.codBar = pro.codBar | |
165 | +// artiAcargar.precio = pro.precio | |
166 | +// artiAcargar.costo = pro.costo | |
167 | +// artiAcargar.balanza = pro.balanza | |
168 | +// artiAcargar.depSn = pro.depSn | |
169 | +// artiAcargar.imagen = pro.imagen | |
170 | +// index += index | |
171 | +// | |
172 | +// AppDb.getAppDb(requireActivity())!!.ArticulosDAO()!! | |
173 | +// .insertArticulos(artiAcargar) | |
174 | +// } | |
175 | +// } | |
176 | +// // } | |
177 | +// | |
178 | +// //job.cancel() | |
179 | +// | |
180 | +// | |
181 | +// } | |
182 | + | |
183 | +// fun cargarArticulos(Productos: List<Productos>?) { | |
184 | +// val artiAcargar: Articulos? = null | |
185 | +// var index: Long = 1 | |
186 | +// //val job4 = CoroutineScope(Dispatchers.Default).launch { | |
187 | +// for (pro in Productos!!) { | |
188 | +// //artiAcargar.id =index+1 | |
189 | +// artiAcargar!!.sector = pro.sector | |
190 | +// artiAcargar.codigo = pro.codigo | |
191 | +// artiAcargar.descripcion = pro.descripcion | |
192 | +// artiAcargar.codBar = pro.codBar | |
193 | +// artiAcargar.precio = pro.precio | |
194 | +// artiAcargar.costo = pro.costo | |
195 | +// artiAcargar.balanza = pro.balanza | |
196 | +// artiAcargar.depSn = pro.depSn | |
197 | +// artiAcargar.imagen = pro.imagen | |
198 | +// index += index | |
199 | +// | |
200 | +// AppDb.getAppDb(requireActivity())!!.ArticulosDAO()!! | |
201 | +// .insertArticulos(artiAcargar) | |
202 | +// } | |
203 | +// } | |
204 | + } | |
205 | + |
app/src/main/java/com/focasoftware/deboinventariov20/ui/configuracion/ConfiguracionFragment.kt
... | ... | @@ -0,0 +1,211 @@ |
1 | +package com.focasoftware.deboinventariov20.ui.configuracion | |
2 | + | |
3 | +import android.content.Context | |
4 | +import android.content.SharedPreferences | |
5 | +import android.os.Bundle | |
6 | +import androidx.fragment.app.Fragment | |
7 | +import android.view.LayoutInflater | |
8 | +import android.view.View | |
9 | +import android.view.ViewGroup | |
10 | +import android.widget.* | |
11 | +import androidx.navigation.fragment.findNavController | |
12 | +import com.focasoftware.deboinventariov20.R | |
13 | +import kotlinx.android.synthetic.main.fragment_configuracion.* | |
14 | + | |
15 | +class ConfiguracionFragment : Fragment() { | |
16 | + | |
17 | + lateinit var sharedPreferences: SharedPreferences | |
18 | + | |
19 | + override fun onCreate(savedInstanceState: Bundle?) { | |
20 | + super.onCreate(savedInstanceState) | |
21 | + sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE) | |
22 | + } | |
23 | + | |
24 | + override fun onCreateView( | |
25 | + inflater: LayoutInflater, container: ViewGroup?, | |
26 | + savedInstanceState: Bundle? | |
27 | + ): View? { | |
28 | + val v = inflater.inflate(R.layout.fragment_configuracion, container, false) | |
29 | + | |
30 | + val etRuta = v.findViewById<EditText>(R.id.etRuta) | |
31 | + val btnGuardar = v.findViewById<Button>(R.id.btnGuardar) | |
32 | + val rbProInclu = v.findViewById<RadioButton>(R.id.rbProInclu) | |
33 | + val rbProNoInclu = v.findViewById<RadioButton>(R.id.rbProNoInclu) | |
34 | + val cbHabiLectura = v.findViewById<CheckBox>(R.id.cbHabiLectura) | |
35 | + val cbMostrarStock = v.findViewById<CheckBox>(R.id.cbMostrarStock) | |
36 | + val rbCodigoBarras = v.findViewById<RadioButton>(R.id.rbCodigoBarras) | |
37 | + val rbCodigoDebo = v.findViewById<RadioButton>(R.id.rbCodigoDebo) | |
38 | + val rbCodigoOrigen = v.findViewById<RadioButton>(R.id.rbCodigoOrigen) | |
39 | + val rbDeposito = v.findViewById<RadioButton>(R.id.rbDeposito) | |
40 | + val rbVentas = v.findViewById<RadioButton>(R.id.rbVentas) | |
41 | + val cbMostrarExistencia = v.findViewById<CheckBox>(R.id.cbMostrarExistencia) | |
42 | + val cbMostrarPrecio = v.findViewById<CheckBox>(R.id.cbMostrarPrecio) | |
43 | + val btnAgregarServidor = v.findViewById<Button>(R.id.btnAgregarServidor) | |
44 | + | |
45 | + if (sharedPreferences.contains("etRuta")) etRuta.setText( | |
46 | + sharedPreferences.getString("etRuta", "").toString() | |
47 | + ) | |
48 | + | |
49 | + if (sharedPreferences.contains("rbProInclu")) { | |
50 | + if (sharedPreferences.getString("rbProInclu", "").toString() == "0") { | |
51 | + rbProInclu.isChecked=false | |
52 | + rbProNoInclu.isChecked = true | |
53 | + } else if (sharedPreferences.getString("rbProInclu", "").toString() == "1") { | |
54 | + rbProInclu.isChecked = true | |
55 | + rbProNoInclu.isChecked = false | |
56 | + } | |
57 | + } else (sharedPreferences.getString("rbProInclu", "").toString() == "") | |
58 | + | |
59 | + if (sharedPreferences.contains("rbProNoInclu")) { | |
60 | + if (sharedPreferences.getString("rbProNoInclu", "").toString() == "0") { | |
61 | + rbProNoInclu.isChecked = false | |
62 | + rbProInclu.isChecked = true | |
63 | + } else if (sharedPreferences.getString("rbProNoInclu", "").toString() == "1") { | |
64 | + rbProNoInclu.isChecked = true | |
65 | + rbProInclu.isChecked=false | |
66 | + } | |
67 | + } else (sharedPreferences.getString("rbProNoInclu", "").toString() == "") | |
68 | + | |
69 | + | |
70 | + if (sharedPreferences.contains("cbHabiLectura")) { | |
71 | + if (sharedPreferences.getString("cbHabiLectura", "").toString() == "0") { | |
72 | + cbHabiLectura.isChecked=false | |
73 | + } else if (sharedPreferences.getString("cbHabiLectura", "").toString() == "1") { | |
74 | + cbHabiLectura.isChecked = true | |
75 | + } | |
76 | + } else (sharedPreferences.getString("cbHabiLectura", "").toString() == "") | |
77 | + | |
78 | + | |
79 | + if (sharedPreferences.contains("cbMostrarStock")) { | |
80 | + if (sharedPreferences.getString("cbMostrarStock", "").toString() == "0") { | |
81 | + cbMostrarStock.isChecked = false | |
82 | + } else if (sharedPreferences.getString("cbMostrarStock", "").toString() == "1") { | |
83 | + cbMostrarStock.isChecked = true | |
84 | + } | |
85 | + } else (sharedPreferences.getString("cbMostrarStock", "").toString() == "") | |
86 | + | |
87 | + | |
88 | + if (sharedPreferences.contains("rbVentas")) { | |
89 | + if (sharedPreferences.getString("rbVentas", "").toString() == "0") { | |
90 | + rbVentas.isChecked=false | |
91 | + rbDeposito.isChecked = true | |
92 | + } else if (sharedPreferences.getString("rbVentas", "").toString() == "1") { | |
93 | + rbVentas.isChecked = true | |
94 | + rbDeposito.isChecked = false | |
95 | + } | |
96 | + } else (sharedPreferences.getString("rbVentas", "").toString() == "") | |
97 | + | |
98 | + if (sharedPreferences.contains("rbDeposito")) { | |
99 | + if (sharedPreferences.getString("rbDeposito", "").toString() == "0") { | |
100 | + rbDeposito.isChecked = false | |
101 | + rbVentas.isChecked = true | |
102 | + } else if (sharedPreferences.getString("rbDeposito", "").toString() == "1") { | |
103 | + rbDeposito.isChecked = true | |
104 | + rbVentas.isChecked=false | |
105 | + } | |
106 | + } else (sharedPreferences.getString("rbDeposito", "").toString() == "") | |
107 | + | |
108 | + | |
109 | + | |
110 | + if (sharedPreferences.contains("rbCodigoDebo")) { | |
111 | + if (sharedPreferences.getString("rbCodigoDebo", "").toString() == "0") { | |
112 | + rbCodigoDebo.isChecked=false | |
113 | + rbCodigoOrigen.isChecked = false | |
114 | + rbCodigoBarras.isChecked = false | |
115 | + } else if (sharedPreferences.getString("rbCodigoDebo", "").toString() == "1") { | |
116 | + rbCodigoDebo.isChecked = true | |
117 | + rbCodigoOrigen.isChecked = false | |
118 | + rbCodigoBarras.isChecked = false | |
119 | + } | |
120 | + } else (sharedPreferences.getString("rbCodigoDebo", "").toString() == "") | |
121 | + | |
122 | + if (sharedPreferences.contains("rbCodigoOrigen")) { | |
123 | + if (sharedPreferences.getString("rbCodigoOrigen", "").toString() == "0") { | |
124 | + rbCodigoOrigen.isChecked = false | |
125 | + } else if (sharedPreferences.getString("rbCodigoOrigen", "").toString() == "1") { | |
126 | + rbCodigoOrigen.isChecked = true | |
127 | + } | |
128 | + } else (sharedPreferences.getString("rbCodigoOrigen", "").toString() == "") | |
129 | + if (sharedPreferences.contains("rbCodigoBarras")) { | |
130 | + if (sharedPreferences.getString("rbCodigoBarras", "").toString() == "0") { | |
131 | + rbCodigoBarras.isChecked = false | |
132 | + } else if (sharedPreferences.getString("rbCodigoBarras", "").toString() == "1") { | |
133 | + rbCodigoBarras.isChecked = true | |
134 | + } | |
135 | + } else (sharedPreferences.getString("rbCodigoBarras", "").toString() == "") | |
136 | + | |
137 | + | |
138 | + if (sharedPreferences.contains("cbMostrarExistencia")) { | |
139 | + if (sharedPreferences.getString("cbMostrarExistencia", "").toString() == "0") { | |
140 | + cbMostrarExistencia.isChecked=false | |
141 | + } else if (sharedPreferences.getString("cbMostrarExistencia", "").toString() == "1") { | |
142 | + cbMostrarExistencia.isChecked = true | |
143 | + } | |
144 | + } else (sharedPreferences.getString("cbMostrarExistencia", "").toString() == "") | |
145 | + | |
146 | + | |
147 | + if (sharedPreferences.contains("cbMostrarPrecio")) { | |
148 | + if (sharedPreferences.getString("cbMostrarPrecio", "").toString() == "0") { | |
149 | + cbMostrarPrecio.isChecked = false | |
150 | + } else if (sharedPreferences.getString("cbMostrarPrecio", "").toString() == "1") { | |
151 | + cbMostrarPrecio.isChecked = true | |
152 | + } | |
153 | + } else (sharedPreferences.getString("cbMostrarPrecio", "").toString() == "") | |
154 | + | |
155 | + btnGuardar.setOnClickListener { | |
156 | + guardarPreferencias() | |
157 | + Toast.makeText(v.context, "Los Datos se guardaron correctamente", Toast.LENGTH_LONG) | |
158 | + .show() | |
159 | + } | |
160 | + btnAgregarServidor.setOnClickListener { | |
161 | + | |
162 | + findNavController().navigate(R.id.servidoresFragment) | |
163 | + } | |
164 | + | |
165 | + return v | |
166 | + } | |
167 | + | |
168 | + fun guardarPreferencias() { | |
169 | + try { | |
170 | + val editor = sharedPreferences.edit() | |
171 | + | |
172 | + if (etRuta.text.isNotEmpty()) editor?.putString("etRuta", etRuta.text.toString()) | |
173 | + | |
174 | + if (rbProInclu.isChecked) editor?.putString("rbProInclu", "1") else editor?.putString("rbProInclu", "0") | |
175 | + if (rbProNoInclu.isChecked) editor?.putString("rbProNoInclu", "1") else editor?.putString("rbProNoInclu", "0") | |
176 | + | |
177 | + if (cbHabiLectura.isChecked) editor?.putString( | |
178 | + "cbHabiLectura", "1" | |
179 | + ) else editor?.putString("cbHabiLectura", "0") | |
180 | + if (cbMostrarStock.isChecked) editor?.putString( | |
181 | + "cbMostrarStock", "1" | |
182 | + ) else editor?.putString("cbMostrarStock", "0") | |
183 | + if (rbVentas.isChecked) editor?.putString( | |
184 | + "rbVentas", "1" | |
185 | + ) else editor?.putString("rbVentas", "0") | |
186 | + if (rbDeposito.isChecked) editor?.putString( | |
187 | + "rbDeposito", "1" | |
188 | + ) else editor?.putString("rbDeposito", "0") | |
189 | + if (rbCodigoDebo.isChecked) editor?.putString( | |
190 | + "rbCodigoDebo", "1" | |
191 | + ) else editor?.putString("rbCodigoDebo", "0") | |
192 | + if (rbCodigoOrigen.isChecked) editor?.putString( | |
193 | + "rbCodigoOrigen", "1" | |
194 | + ) else editor?.putString("rbCodigoOrigen", "0") | |
195 | + if (rbCodigoBarras.isChecked) editor?.putString( | |
196 | + "rbCodigoBarras", "1" | |
197 | + ) else editor?.putString("rbCodigoBarras", "0") | |
198 | + if (cbMostrarExistencia.isChecked) editor?.putString( | |
199 | + "cbMostrarExistencia", "1" | |
200 | + ) else editor?.putString("cbMostrarExistencia", "0") | |
201 | + if (cbMostrarPrecio.isChecked) editor?.putString( | |
202 | + "cbMostrarPrecio", "1" | |
203 | + ) else editor?.putString("cbMostrarPrecio", "0") | |
204 | + | |
205 | + editor?.apply() | |
206 | + editor.commit() | |
207 | + } catch (e: Exception) { | |
208 | + e.printStackTrace() | |
209 | + } | |
210 | + } | |
211 | +} | |
0 | 212 | \ No newline at end of file |
app/src/main/java/com/focasoftware/deboinventariov20/ui/dialogos/SingleChoiceAlertDialog.kt
... | ... | @@ -0,0 +1,53 @@ |
1 | +package com.focasoftware.deboinventariov20.ui.dialogos | |
2 | + | |
3 | +import android.app.AlertDialog | |
4 | +import android.app.Dialog | |
5 | +import android.os.Bundle | |
6 | +import androidx.fragment.app.DialogFragment | |
7 | + | |
8 | +class SingleChoiceAlertDialog : DialogFragment() { | |
9 | + | |
10 | + interface OnDialogSelectorListener { | |
11 | + fun onSelectedOption(dialogId: Int) | |
12 | + } | |
13 | + | |
14 | + | |
15 | + var mDialogSelectorCallback: OnDialogSelectorListener? = null | |
16 | + | |
17 | + fun newInstance(title: String, values: Array<String>, selected: Int = -1): SingleChoiceAlertDialog? { | |
18 | + val dialog = SingleChoiceAlertDialog() | |
19 | + | |
20 | + val args = Bundle() | |
21 | + args.putString("title", title) | |
22 | + args.putStringArray("values", values) | |
23 | + args.putInt("selected", selected) | |
24 | + dialog.arguments = args | |
25 | + | |
26 | + return dialog | |
27 | + | |
28 | + } | |
29 | + | |
30 | + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { | |
31 | + | |
32 | + return activity?.let { | |
33 | + | |
34 | + val args = requireArguments() | |
35 | + val title = args.getString("title") | |
36 | + val values = args.getStringArray("values") | |
37 | + val selectedIndex = args.getInt("selected") | |
38 | + | |
39 | + val builder: AlertDialog.Builder = AlertDialog.Builder(requireActivity()) | |
40 | + | |
41 | + builder.setSingleChoiceItems(values, selectedIndex) { _, which -> | |
42 | + //val item = values?.get(which) | |
43 | + mDialogSelectorCallback?.onSelectedOption(which) | |
44 | + dialog?.dismiss() | |
45 | + } | |
46 | + builder.setTitle(title) | |
47 | + | |
48 | + return builder.create() | |
49 | + } ?: throw IllegalStateException("Activity cannot be null") | |
50 | + } | |
51 | + | |
52 | + | |
53 | +} | |
0 | 54 | \ No newline at end of file |
app/src/main/java/com/focasoftware/deboinventariov20/ui/dialogos/dialogoLogin.kt
... | ... | @@ -0,0 +1,71 @@ |
1 | +package com.focasoftware.deboinventariov20.ui.dialogos | |
2 | + | |
3 | +import android.app.AlertDialog | |
4 | +import android.app.Dialog | |
5 | +import android.content.Context | |
6 | +import android.content.DialogInterface | |
7 | +import android.content.SharedPreferences | |
8 | +import android.os.Bundle | |
9 | +import androidx.fragment.app.DialogFragment | |
10 | +import com.focasoftware.deboinventariov20.R | |
11 | + | |
12 | +class dialogoLogin() : DialogFragment() { | |
13 | + private lateinit var sharedPreferences: SharedPreferences | |
14 | + interface OnContinueCancelClickListener { | |
15 | + fun onPositiveClick() | |
16 | + fun onCancelClick() | |
17 | + } | |
18 | +// interface onDialogPositiveClick { | |
19 | +// abstract fun onDialogPositiveClick() | |
20 | +// | |
21 | +//// fun onDialogNegativeClick(dialog: DialogFragment) | |
22 | +// } | |
23 | + // var mDialogSelectorCallback: dialogoLogin.onDialogPositiveClick? = null | |
24 | + fun newInstance(s: String): dialogoLogin? { | |
25 | + val dialog = dialogoLogin() | |
26 | + | |
27 | + val args = Bundle() | |
28 | + args.putString("title", s) | |
29 | + dialog.arguments = args | |
30 | + | |
31 | + return dialog | |
32 | + } | |
33 | + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { | |
34 | + return activity?.let { | |
35 | + val builder = AlertDialog.Builder(it) | |
36 | +// val args = requireArguments() | |
37 | +// val title = args.getString("title") | |
38 | + val inflater = requireActivity().layoutInflater; | |
39 | + | |
40 | + builder.setView(inflater.inflate(R.layout.dialog_signin, null)) | |
41 | + .setTitle("El producto ya fue escaneado") | |
42 | +// .setMessage("La cantidad cargada es $title") | |
43 | + .setPositiveButton(android.R.string.ok) { _, _ -> | |
44 | + val listener = activity as OnContinueCancelClickListener? | |
45 | + listener!!.onPositiveClick() | |
46 | + } | |
47 | + .setNegativeButton(android.R.string.cancel) { _, _ -> | |
48 | + val listener = activity as OnContinueCancelClickListener? | |
49 | + listener!!.onCancelClick() | |
50 | + } | |
51 | +// builder.setPositiveButton(android.R.string.ok) { _, _ -> | |
52 | +// mDialogSelectorCallback!!.onDialogPositiveClick() | |
53 | +// } | |
54 | +// .setPositiveButton(R.string.btnOk, | |
55 | +// DialogInterface.OnClickListener { dialog, id -> | |
56 | +// mDialogSelectorCallback!!.onDialogPositiveClick() | |
57 | +// sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE) | |
58 | +// val editor = sharedPreferences.edit() | |
59 | +// editor?.putString("cantArtIng", R.id.username.toString()) | |
60 | +//// editor?.putString("TitArtIng", "") | |
61 | +// editor?.apply() | |
62 | +// editor.commit() | |
63 | +// }) | |
64 | +// .setNegativeButton(R.string.btnCancela, | |
65 | +// DialogInterface.OnClickListener { dialog, id -> | |
66 | +// getDialog()!!.cancel() | |
67 | +// }) | |
68 | + builder.create() | |
69 | + } ?: throw IllegalStateException("Activity cannot be null") | |
70 | + } | |
71 | +} | |
0 | 72 | \ No newline at end of file |
app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/BaseFragment.kt
... | ... | @@ -0,0 +1,29 @@ |
1 | +package com.focasoftware.deboinventariov20.ui.inventario | |
2 | + | |
3 | +import android.os.Bundle | |
4 | +import androidx.fragment.app.Fragment | |
5 | +import kotlinx.coroutines.CoroutineScope | |
6 | +import kotlinx.coroutines.Dispatchers | |
7 | +import kotlinx.coroutines.Job | |
8 | +import kotlin.coroutines.CoroutineContext | |
9 | + | |
10 | +abstract class BaseFragment : Fragment(), CoroutineScope { | |
11 | + | |
12 | + | |
13 | + lateinit var job: Job | |
14 | + | |
15 | + override val coroutineContext: CoroutineContext | |
16 | + get() = job + Dispatchers.Main | |
17 | + | |
18 | + override fun onCreate(savedInstanceState: Bundle?) { | |
19 | + super.onCreate(savedInstanceState) | |
20 | + job = Job() | |
21 | + } | |
22 | + | |
23 | + override fun onDestroy() { | |
24 | + super.onDestroy() | |
25 | + job.cancel() | |
26 | + } | |
27 | + | |
28 | + | |
29 | +} | |
0 | 30 | \ No newline at end of file |
app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/DescripcionFragment.kt
... | ... | @@ -0,0 +1,152 @@ |
1 | +package com.focasoftware.deboinventariov20.ui.inventario | |
2 | + | |
3 | +import android.content.Context | |
4 | +import android.content.SharedPreferences | |
5 | +import android.graphics.Canvas | |
6 | +import android.graphics.Color | |
7 | +import android.graphics.drawable.ColorDrawable | |
8 | +import android.os.Bundle | |
9 | +import android.view.LayoutInflater | |
10 | +import android.view.View | |
11 | +import android.view.ViewGroup | |
12 | +import android.widget.Button | |
13 | +import androidx.fragment.app.Fragment | |
14 | +import androidx.lifecycle.lifecycleScope | |
15 | +import androidx.navigation.NavController | |
16 | +import androidx.navigation.Navigation | |
17 | +import androidx.recyclerview.widget.ItemTouchHelper | |
18 | +import androidx.recyclerview.widget.LinearLayoutManager | |
19 | +import androidx.recyclerview.widget.RecyclerView | |
20 | +import com.afollestad.materialdialogs.MaterialDialog | |
21 | +import com.afollestad.materialdialogs.input.input | |
22 | +import com.focasoftware.deboinventariov20.DB.DataBase.AppDb | |
23 | +import com.focasoftware.deboinventariov20.Model.Articles | |
24 | +import com.focasoftware.deboinventariov20.Model.InvBody | |
25 | +import com.focasoftware.deboinventariov20.R | |
26 | +import kotlinx.coroutines.Dispatchers | |
27 | +import kotlinx.coroutines.launch | |
28 | +import kotlinx.coroutines.withContext | |
29 | + | |
30 | +class DescripcionFragment : Fragment() { | |
31 | + private var artAcargar2: List<Articles>? = null | |
32 | + private var listArticulos2: List<Articles>? = null | |
33 | + lateinit var viewAdapter2: RecyclerView.Adapter<*> | |
34 | + private lateinit var viewManager2: RecyclerView.LayoutManager | |
35 | + private lateinit var rcDescripcion: RecyclerView | |
36 | + private var swipeBackground: ColorDrawable = ColorDrawable(Color.YELLOW) | |
37 | + private var cantidad = 0F | |
38 | + private var numeroInventario = 0 | |
39 | + lateinit var navController: NavController | |
40 | + lateinit var sharedPreferences: SharedPreferences | |
41 | + | |
42 | + override fun onCreate(savedInstanceState: Bundle?) { | |
43 | + super.onCreate(savedInstanceState) | |
44 | + sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE) | |
45 | + arguments.apply { | |
46 | + artAcargar2 = requireArguments().getSerializable("ArrayDesc") as List<Articles> | |
47 | + numeroInventario = requireArguments().getInt("numeroInv") | |
48 | + } | |
49 | + } | |
50 | + | |
51 | + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { | |
52 | + super.onViewCreated(view, savedInstanceState) | |
53 | + navController = Navigation.findNavController(view) | |
54 | + } | |
55 | + | |
56 | + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { | |
57 | + // Inflate the layout for this fragment | |
58 | + val v = inflater.inflate(R.layout.fragment_descripcion, container, false) | |
59 | + rcDescripcion = v.findViewById(R.id.rcDescripcion) | |
60 | + val btnSalir = v.findViewById<Button>(R.id.btnSalir) | |
61 | + | |
62 | + IngresarRecicler(artAcargar2) | |
63 | + | |
64 | + btnSalir.setOnClickListener { | |
65 | + requireActivity().onBackPressed() | |
66 | + } | |
67 | + return v | |
68 | + } | |
69 | + | |
70 | + fun IngresarRecicler(articulos: List<Articles>?) { | |
71 | + | |
72 | + viewAdapter2 = DescripcionListAdapter(articulos) | |
73 | + viewManager2 = LinearLayoutManager(requireContext()) | |
74 | + | |
75 | + rcDescripcion.apply { | |
76 | + adapter = viewAdapter2 | |
77 | + layoutManager = viewManager2 | |
78 | + } | |
79 | + val itemTouchHelperCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT) { | |
80 | + override fun onMove(p0: RecyclerView, p1: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean { | |
81 | + return false | |
82 | + } | |
83 | + | |
84 | + override fun onSwiped(viewHolder: RecyclerView.ViewHolder, position: Int) { | |
85 | + MaterialDialog(requireContext()).show { | |
86 | + title(R.string.sTitulo) | |
87 | + message(R.string.sMensajeEncontrado) | |
88 | + input { materialDialog, charSequence -> | |
89 | + cantidad = 0F | |
90 | + cantidad = charSequence.toString().toFloat() | |
91 | + } | |
92 | +// .input("Cantidad",1,,1,0,InputType.TYPE_CLASS_NUMBER,0,waitForPositiveButton = true,false,positiveButton ()) | |
93 | + positiveButton(R.string.btnOk) { | |
94 | + dismiss() | |
95 | + var indice = 0 | |
96 | + indice=viewHolder.layoutPosition | |
97 | + | |
98 | + val body = InvBody(numeroInventario, | |
99 | + (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.sector, | |
100 | + // TODO PREPARO PARA MANDAR A CARGAR EN LA BD | |
101 | + (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codigo, | |
102 | + (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.descripcion, | |
103 | + cantidad.toString(), | |
104 | + (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codBar, | |
105 | + (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.codOrigen, | |
106 | + (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.precio, | |
107 | + (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.precio, | |
108 | + (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.balanza, | |
109 | + (viewAdapter2 as DescripcionListAdapter).items2?.get(indice)!!.depSn, | |
110 | + InventarioFragment().ObtenerFechaActual(), | |
111 | + InventarioFragment().ObtenerFechaActual()) | |
112 | + InsertarArtEnDB(body)// TODO: MANDO A CARGAR A LA BASE DE DATOS | |
113 | + val editor = sharedPreferences.edit() | |
114 | + editor?.putString("Inventario", numeroInventario.toString()) | |
115 | + editor?.apply() | |
116 | + editor.commit() | |
117 | + navController.navigate(R.id.action_descripcionFragment_to_inventarioFragment) | |
118 | + } | |
119 | + }.cancelOnTouchOutside(false).cornerRadius(10F) | |
120 | + } | |
121 | + | |
122 | + override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) { | |
123 | + super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive) | |
124 | + val itemView = viewHolder.itemView | |
125 | + | |
126 | + c.clipRect(0f, itemView.top.toFloat(), dX, itemView.bottom.toFloat()) | |
127 | + | |
128 | + if (dX > 0) { | |
129 | + | |
130 | + c.drawColor(Color.RED) | |
131 | + } else if (dX < 0) { | |
132 | + // swipeBackground.setBounds(itemView.right+dX.toInt(),itemView.top,itemView.right,itemView.bottom) | |
133 | + c.drawColor(Color.YELLOW) | |
134 | + } | |
135 | + swipeBackground.draw(c) | |
136 | + super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive) | |
137 | + } | |
138 | + } | |
139 | + val itemTouchHelper2 = ItemTouchHelper(itemTouchHelperCallback) | |
140 | + itemTouchHelper2.attachToRecyclerView(rcDescripcion) | |
141 | + | |
142 | + } | |
143 | + | |
144 | + fun InsertarArtEnDB(cuarpoInventario: InvBody) { | |
145 | + lifecycleScope.launch { | |
146 | + withContext(Dispatchers.IO) { | |
147 | + AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.insertInvBody(cuarpoInventario) | |
148 | + } | |
149 | + } | |
150 | + } | |
151 | +} | |
152 | + |
app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/DescripcionListAdapter.kt
... | ... | @@ -0,0 +1,48 @@ |
1 | +package com.focasoftware.deboinventariov20.ui.inventario | |
2 | + | |
3 | +import android.view.LayoutInflater | |
4 | +import android.view.View | |
5 | +import android.view.ViewGroup | |
6 | +import androidx.recyclerview.widget.RecyclerView | |
7 | +import com.focasoftware.deboinventariov20.Model.Articles | |
8 | +import com.focasoftware.deboinventariov20.R | |
9 | +import kotlinx.android.synthetic.main.item.view.* | |
10 | + | |
11 | +class DescripcionListAdapter(private val productos: List<Articles>?) : | |
12 | + RecyclerView.Adapter<DescripcionListAdapter.ItemsViewHolder>() { | |
13 | + internal var items2: List<Articles>? = null | |
14 | + | |
15 | + init { | |
16 | + this.items2 = productos | |
17 | + } | |
18 | + | |
19 | + override fun onCreateViewHolder(parent: ViewGroup, p1: Int) = ItemsViewHolder( | |
20 | + LayoutInflater.from(parent.context).inflate(R.layout.item_descripcion, parent, false) | |
21 | + ) | |
22 | + | |
23 | + override fun getItemCount() = productos!!.size | |
24 | + | |
25 | + override fun onBindViewHolder(holder: ItemsViewHolder, position: Int) { | |
26 | + when (holder) { | |
27 | + is ItemsViewHolder -> { | |
28 | + holder.bind(items2!![position]) | |
29 | + } | |
30 | + } | |
31 | + } | |
32 | + | |
33 | + | |
34 | + class ItemsViewHolder constructor(view: View) : RecyclerView.ViewHolder(view) { | |
35 | + | |
36 | + val sector = view.tvSector | |
37 | + val codigo = view.tvCodigo | |
38 | + val descripcion = view.tvDescripcion | |
39 | + val codigoBarras = view.tvCodigoBarras | |
40 | + | |
41 | + fun bind(pro: Articles) { | |
42 | + sector.text = pro.sector | |
43 | + codigo.text = pro.codigo | |
44 | + descripcion.text = pro.descripcion | |
45 | + codigoBarras.text = pro.codBar | |
46 | + } | |
47 | + } | |
48 | +} | |
0 | 49 | \ No newline at end of file |
app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/DialogPersoComplexCantidadModificacion.kt
... | ... | @@ -0,0 +1,153 @@ |
1 | +package com.focasoftware.deboinventariov20.ui.inventario | |
2 | + | |
3 | +import android.app.AlertDialog | |
4 | +import android.app.Dialog | |
5 | +import android.content.Context | |
6 | +import android.text.Editable | |
7 | +import android.text.TextWatcher | |
8 | +import android.view.View | |
9 | +import android.view.View.OnFocusChangeListener | |
10 | +import android.widget.Button | |
11 | +import android.widget.EditText | |
12 | +import android.widget.ImageView | |
13 | +import android.widget.TextView | |
14 | +import com.focasoftware.deboinventariov20.R | |
15 | + | |
16 | +/** | |
17 | + * Dialogo que permite mostrar una UI para modificar la cantidad de un articulo | |
18 | + * en las BD | |
19 | + * @author GuillermoR | |
20 | + */ | |
21 | +class DialogPersoComplexCantidadModificacion(context: Context?, | |
22 | + tipo_operacion: Int, | |
23 | + valor_inicial: Float, | |
24 | + listenerValidar: View.OnClickListener?, | |
25 | + listenerCancelar: View.OnClickListener?, | |
26 | + listenerReset: View.OnClickListener?) : Dialog(context!!), GestionarioTecladoVirtual { | |
27 | + /** | |
28 | + * TextView para mostrar el valor incical | |
29 | + */ | |
30 | + private val textV_valor_inicial: TextView | |
31 | + | |
32 | + /** | |
33 | + * Text view para mostrar el valor previsional luego de modificar su cantidad | |
34 | + */ | |
35 | + private val textV_valor_previsional: TextView | |
36 | + | |
37 | + /** | |
38 | + * EditText para almacenar el nuevo valor a ingresar | |
39 | + */ | |
40 | + private val editT_nuevo_valor: EditText | |
41 | + | |
42 | + /** | |
43 | + * Boton para resetear la cantidad | |
44 | + */ | |
45 | + private val boton_reset: Button? = null | |
46 | + | |
47 | + /** | |
48 | + * Variables accesorias | |
49 | + */ | |
50 | + private var VALOR_INICIO = 0f | |
51 | + private var TIPO_OPERACION = -1 | |
52 | + | |
53 | + /** | |
54 | + * Devuleve el nuevo valor | |
55 | + * | |
56 | + * 1 Test para ver si el valor tiene formato a nombre, sino 0 | |
57 | + * | |
58 | + * 2 Para provocar la excepcion si s no es del tipo Integer | |
59 | + * | |
60 | + * 3 En caso de error, devolvemos 0 si se trata de "sumar" o "restar". | |
61 | + * En el caso del "modificar", devolvemos "" para poder | |
62 | + * restablecer un "No Tomado", o valor inicial sino | |
63 | + * | |
64 | + * @return | |
65 | + */ | |
66 | + fun get_nuevo_valor(): String { | |
67 | + //1 Test para ver si el valor tiene formato a nombre, sino 0: | |
68 | + val s = editT_nuevo_valor.text.toString() | |
69 | + return try { | |
70 | + //2 Para provocar la excepcion si s no es del tipo Integer | |
71 | + s.toFloat() | |
72 | + s | |
73 | + } catch (ex: Exception) { | |
74 | + VALOR_INICIO.toString() | |
75 | + } | |
76 | + } | |
77 | + | |
78 | + fun valor_incorrecto(context: Context?) { | |
79 | + val show = AlertDialog.Builder(context).setTitle("Debo Inventario").setMessage("Valor ingresado incorrecto").show() | |
80 | + } | |
81 | + | |
82 | + override fun showKeyboard(edit_text: EditText?) { | |
83 | + // TODO Auto-generated method stub | |
84 | + } | |
85 | + | |
86 | + override fun hideKeyboard(edit_text: EditText?) { | |
87 | + // TODO Auto-generated method stub | |
88 | + } | |
89 | + | |
90 | + /** | |
91 | + * Constructor completo, setea las UI y carga los handlers | |
92 | + * | |
93 | + * 1 Construccin del ttulo | |
94 | + * | |
95 | + * 2 Cargamos el layout y main layout | |
96 | + * | |
97 | + * 3 Actualizacin de los textos | |
98 | + * | |
99 | + * 4 Si estamos en el modo "MODIFICAR", | |
100 | + * se habilita la posibilidad de reestablecer el valor a No Tomado | |
101 | + * | |
102 | + * 5 EditTexts y handlers de los mismos | |
103 | + * | |
104 | + * 6 Botones y sus handlers | |
105 | + * | |
106 | + * @param context | |
107 | + * @param tipo_operacion | |
108 | + * @param valor_inicial | |
109 | + * @param listenerValidar | |
110 | + * @param listenerCancelar | |
111 | + * @param listenerReset | |
112 | + */ | |
113 | + init { | |
114 | + super.setTitle("Nuevo valor") | |
115 | + | |
116 | + | |
117 | + // System.out.println("::: DialogComple modificacion antes del switch"); | |
118 | + super.setContentView(R.layout.z_dialogpersocomplexcantidad_modificacion) | |
119 | + | |
120 | + //3 Actualizacin de los textos: | |
121 | + textV_valor_inicial = super.findViewById<View>(R.id.Z_DIALOG_cantidad_actual) as TextView | |
122 | + textV_valor_inicial.text = valor_inicial.toString() | |
123 | + VALOR_INICIO = valor_inicial | |
124 | + TIPO_OPERACION = tipo_operacion | |
125 | + textV_valor_previsional = super.findViewById<View>(R.id.Z_DIALOG_cantidad_final) as TextView | |
126 | + textV_valor_previsional.text = valor_inicial.toString() | |
127 | + | |
128 | + | |
129 | + //5 EditTexts y handlers de los mismos | |
130 | + editT_nuevo_valor = super.findViewById<View>(R.id.Z_DIALOG_cantidad_nueva) as EditText | |
131 | + editT_nuevo_valor.onFocusChangeListener = OnFocusChangeListener { v, hasFocus -> showKeyboard(editT_nuevo_valor) } | |
132 | + editT_nuevo_valor.addTextChangedListener(object : TextWatcher { | |
133 | + override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {} | |
134 | + override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} | |
135 | + override fun afterTextChanged(s: Editable) { | |
136 | + val new_val = 0f | |
137 | + var val_temp = 0f | |
138 | + val_temp = s.toString().toFloat() | |
139 | + textV_valor_previsional.text = val_temp.toString() | |
140 | + } | |
141 | + }) | |
142 | + val textV_operacion = super.findViewById<View>(R.id.Z_DIALOG_tipo_operacion) as TextView | |
143 | + var miTexto = "" | |
144 | + miTexto = "NUEVO VALOR: " | |
145 | + textV_operacion.text = miTexto | |
146 | + | |
147 | + //6 Botones y sus handlers: | |
148 | + val boton_validar = super.findViewById<View>(R.id.Z_DIALOG_validar) as ImageView | |
149 | + val boton_cancelar = super.findViewById<View>(R.id.Z_DIALOG_cancelar) as ImageView | |
150 | + boton_validar.setOnClickListener(listenerValidar) | |
151 | + boton_cancelar.setOnClickListener(listenerCancelar) | |
152 | + } | |
153 | +} | |
0 | 154 | \ No newline at end of file |
app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/GestionarioTecladoVirtual.kt
... | ... | @@ -0,0 +1,22 @@ |
1 | +package com.focasoftware.deboinventariov20.ui.inventario | |
2 | + | |
3 | +import android.widget.EditText | |
4 | + | |
5 | +/** | |
6 | + * Interface que representa metodos para administrar (Mostrar u ocultar) el teclado | |
7 | + * virtual | |
8 | + * @author GuillermoR | |
9 | + */ | |
10 | +interface GestionarioTecladoVirtual { | |
11 | + /** | |
12 | + * Funcion a implementar para mostrar el teclado virtual sobre el editText parametro | |
13 | + * @param edit_text | |
14 | + */ | |
15 | + fun showKeyboard(edit_text: EditText?) | |
16 | + | |
17 | + /** | |
18 | + * Funcion a implementar para ocultar el teclado virtual sobre el editText parametro | |
19 | + * @param edit_text | |
20 | + */ | |
21 | + fun hideKeyboard(edit_text: EditText?) | |
22 | +} | |
0 | 23 | \ No newline at end of file |
app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/InsertCant.kt
... | ... | @@ -0,0 +1,19 @@ |
1 | +package com.focasoftware.deboinventariov20.ui.inventario | |
2 | + | |
3 | +import android.app.Dialog | |
4 | +import android.content.Context | |
5 | +import android.view.View | |
6 | +import android.widget.EditText | |
7 | +import com.focasoftware.deboinventariov20.R | |
8 | + | |
9 | +class InsertCant(ctxt: Context) : Dialog(ctxt) { | |
10 | + | |
11 | + private val editT: EditText | |
12 | + fun get_text(): String { | |
13 | + return editT.text.toString() | |
14 | + } | |
15 | + init { | |
16 | + super.setContentView(R.layout.ingresar_cantidad) | |
17 | + editT = super.findViewById<View>(R.id.etCantidad) as EditText | |
18 | + } | |
19 | +} | |
0 | 20 | \ No newline at end of file |
app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/InventarioFragment.kt
... | ... | @@ -0,0 +1,561 @@ |
1 | +package com.focasoftware.deboinventariov20.ui.inventario | |
2 | + | |
3 | +import android.content.Context | |
4 | +import android.content.SharedPreferences | |
5 | +import android.graphics.Canvas | |
6 | +import android.graphics.Color | |
7 | +import android.graphics.drawable.Drawable | |
8 | +import android.os.Bundle | |
9 | +import android.view.KeyEvent | |
10 | +import android.view.LayoutInflater | |
11 | +import android.view.View | |
12 | +import android.view.ViewGroup | |
13 | +import android.widget.* | |
14 | +import androidx.core.content.ContextCompat | |
15 | +import androidx.core.os.bundleOf | |
16 | +import androidx.fragment.app.Fragment | |
17 | +import androidx.lifecycle.lifecycleScope | |
18 | +import androidx.navigation.NavController | |
19 | +import androidx.navigation.Navigation | |
20 | +import androidx.recyclerview.widget.ItemTouchHelper | |
21 | +import androidx.recyclerview.widget.LinearLayoutManager | |
22 | +import androidx.recyclerview.widget.RecyclerView | |
23 | +import com.afollestad.materialdialogs.MaterialDialog | |
24 | +import com.afollestad.materialdialogs.input.input | |
25 | +import com.focasoftware.deboinventariov20.DB.DataBase.AppDb | |
26 | +import com.focasoftware.deboinventariov20.Model.Articles | |
27 | +import com.focasoftware.deboinventariov20.Model.InvBody | |
28 | +import com.focasoftware.deboinventariov20.Model.InvHead | |
29 | +import com.focasoftware.deboinventariov20.R | |
30 | +import kotlinx.android.synthetic.main.fragment_inventario.* | |
31 | +import kotlinx.coroutines.* | |
32 | +import java.time.LocalDateTime | |
33 | +import java.time.format.DateTimeFormatter | |
34 | +import java.util.* | |
35 | + | |
36 | + | |
37 | +class InventarioFragment : Fragment() { | |
38 | + | |
39 | + private lateinit var sharedPreferences: SharedPreferences | |
40 | + private var iArea: Int = 0 | |
41 | + private lateinit var invHead: InvHead | |
42 | + private lateinit var rcInventarios: RecyclerView | |
43 | + lateinit var viewAdapter: RecyclerView.Adapter<*> | |
44 | + private lateinit var viewManager: RecyclerView.LayoutManager | |
45 | + private lateinit var sChangeUpper: String | |
46 | + private var listArticulos = ArrayList<ItemsRecycler>() | |
47 | + lateinit var navController: NavController | |
48 | + var InventarioNuevo: Int = 0 | |
49 | + var fCant = 0F | |
50 | + private lateinit var deleteIcon: Drawable | |
51 | +// private var editTT: EditText? = null | |
52 | +// private var dialogoModificacion: DialogPersoComplexCantidadModificacion? = null | |
53 | + | |
54 | + override fun onCreate(savedInstanceState: Bundle?) { | |
55 | + super.onCreate(savedInstanceState) | |
56 | + | |
57 | + sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE) | |
58 | + if (sharedPreferences.contains("Inventario")) if (sharedPreferences.getString("Inventario", "").toString() != "-1") { | |
59 | + InventarioNuevo = sharedPreferences.getString("Inventario", "").toString().toInt() | |
60 | + val editor = sharedPreferences.edit() | |
61 | + editor?.putString("Inventario", "-1") | |
62 | + editor?.apply() | |
63 | + editor.commit() | |
64 | + } | |
65 | + } | |
66 | + | |
67 | + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { | |
68 | + val v = inflater.inflate(R.layout.fragment_inventario, container, false) | |
69 | + sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE) | |
70 | + val tCodigoBarras = v.findViewById<EditText>(R.id.etCodigoBarras) | |
71 | + rcInventarios = v.findViewById(R.id.rcInventarios) | |
72 | + val tvTitulo = v.findViewById<TextView>(R.id.tvTitulo) | |
73 | + val toggleButton = v.findViewById<ToggleButton>(R.id.toggleButton) | |
74 | + | |
75 | + | |
76 | + if (InventarioNuevo == 0) {// TODO: SI INVETNARIO NUEVO | |
77 | + GlobalScope.launch(Dispatchers.Main) { | |
78 | + //TODO: BUSCO EL ULTIMO INVENTARIO EN LA BD PARA PODER CREAR EL PROXIMO | |
79 | + InventarioNuevo = AppDb.getAppDb(requireActivity())!!.InvHeadDAO()!!.findLastInv() + 1 | |
80 | + SerchArea() | |
81 | + val descripInv: String = if (iArea == 0) "Inventario Ventas" else "Inventario Deposito" | |
82 | + //TODO: CREAMOS EL INVENTARIO EN LA CABECERA DEL INVENTARIO | |
83 | + invHead = InvHead(InventarioNuevo, descripInv, 1, ObtenerFechaActual(), ObtenerFechaActual(), 0L, iArea, AjusteProductos(), ProdNoCont()) | |
84 | + AppDb.getAppDb(requireActivity())!!.InvHeadDAO()!!.insertInvHead(invHead) | |
85 | + tvTitulo.text = "Inventario Dinamico" + " Nยฐ $InventarioNuevo" | |
86 | + } | |
87 | + } else {// TODO: SI VENGO DE FRAGMENT DESCRIPCION | |
88 | + CargarDeBdInventario(InventarioNuevo) | |
89 | + tvTitulo.text = "Inventario Dinamico" + " Nยฐ $InventarioNuevo" | |
90 | + } | |
91 | + | |
92 | + tCodigoBarras.setOnKeyListener { _, keyCode, keyEvent -> | |
93 | + if (keyCode == KeyEvent.KEYCODE_ENTER && keyEvent.action == KeyEvent.ACTION_UP) { | |
94 | + sChangeUpper = tCodigoBarras.text.toString() | |
95 | + | |
96 | + var indiceDelArtEncontrado = 0 | |
97 | + | |
98 | + //TODO COMIENZA LA BUSQUEDA POR CODIGO DE BARRAS | |
99 | + if (toggleButton.isChecked) { | |
100 | + indiceDelArtEncontrado = buscoArtEnRv(sChangeUpper.toUpperCase(Locale.ROOT), 0)//TODO Si encuentra el articulo en el RV devuelve el indice | |
101 | + //TODO Si no lo encuentra devuelve -1 | |
102 | + if (indiceDelArtEncontrado != -1) { | |
103 | + if (swSumaUno!!.isChecked) { | |
104 | + fCant = 0F | |
105 | + fCant = listArticulos[indiceDelArtEncontrado].cantTomada | |
106 | + fCant += 1F | |
107 | + //TODO ACTUALIZO LA CANTIDAD EN LA BD | |
108 | + updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant) | |
109 | + //TODO ACTUALIZO LA CANTIDAD EN EL RV | |
110 | + listArticulos[indiceDelArtEncontrado].cantTomada = fCant | |
111 | + viewAdapter.notifyDataSetChanged() | |
112 | + } else { | |
113 | +// val mDialogView = LayoutInflater.from(context).inflate(R.layout.login_dialog, null) | |
114 | +// val mBuilder = AlertDialog.Builder(context).setView(mDialogView).setTitle("Login Form").setCancelable(false) | |
115 | +// val mAlertDialog = mBuilder.show() | |
116 | +// mDialogView.dialogLoginBtn.setOnClickListener { | |
117 | +// mAlertDialog.dismiss() | |
118 | +// //get text from EditTexts of custom layout | |
119 | +// val name = mDialogView.dialogNameEt.text.toString() | |
120 | +// val email = mDialogView.dialogEmailEt.text.toString() | |
121 | +// val password = mDialogView.dialogPasswEt.text.toString() | |
122 | +// fCant = 0F | |
123 | +// fCant = name.toFloat() | |
124 | +// } | |
125 | +// mDialogView.dialogCancelBtn.setOnClickListener { | |
126 | +// mAlertDialog.dismiss() | |
127 | +// } | |
128 | + fCant = listArticulos[indiceDelArtEncontrado].cantTomada | |
129 | + MaterialDialog(requireContext()).show { | |
130 | + title(R.string.sTituloNueva) | |
131 | + message(R.string.sCantidadNueva) | |
132 | + input { materialDialog, charSequence -> | |
133 | + fCant = 0F | |
134 | + fCant = charSequence.toString().toFloat() | |
135 | + } | |
136 | + positiveButton(R.string.btnOk) { | |
137 | + //TODO ACTUALIZO CANTIADAD EN BD | |
138 | + updateCantidad(listArticulos[indiceDelArtEncontrado].sector.toString(), listArticulos[indiceDelArtEncontrado].codigo.toString(), fCant) | |
139 | + //TODO ACTUALIZO CANTIDAD EN RV | |
140 | + listArticulos[indiceDelArtEncontrado].cantTomada = fCant | |
141 | + viewAdapter.notifyDataSetChanged() | |
142 | + dismiss() | |
143 | + } | |
144 | + }.cancelOnTouchOutside(false).cornerRadius(10F) | |
145 | + } | |
146 | + | |
147 | + } else if (indiceDelArtEncontrado == -1) {// no lo encontro en el RV, lo va a buscar en al BD | |
148 | + | |
149 | + GlobalScope.launch(Dispatchers.Main) { | |
150 | + //TODO BUSCO EN BASE DE DATOS | |
151 | + val artEncontrado = buscarCBEnBD(sChangeUpper.toUpperCase(Locale.ROOT)) | |
152 | + ContinuarCargaCB(artEncontrado) | |
153 | + } | |
154 | + } | |
155 | + | |
156 | + tCodigoBarras.focusable = View.FOCUSABLE | |
157 | + tCodigoBarras.setText("") | |
158 | + tCodigoBarras.selectAll() | |
159 | + return@setOnKeyListener true | |
160 | + | |
161 | + | |
162 | + } else {//TODO BUSQUEDA POR DESCRIPCION************************************************************************** | |
163 | + | |
164 | + indiceDelArtEncontrado = buscoArtEnRv(sChangeUpper.toUpperCase(Locale.ROOT), 1) //TODO :Si encuentra el articulo en el RV devuelve el indice | |
165 | + //TODO Si no lo encuentra devuelve -1 | |
166 | + if (indiceDelArtEncontrado != -1) { | |
167 | +// if (swSumaUno!!.isChecked) { | |
168 | +// fCant = 0F | |
169 | +// fCant = listArticulos[indiceDelArtEncontrado].cantTomada | |
170 | +// fCant += 1F | |
171 | +// listArticulos[indiceDelArtEncontrado].cantTomada = fCant | |
172 | +// viewAdapter.notifyDataSetChanged() | |
173 | +// } else { | |
174 | + fCant = listArticulos[indiceDelArtEncontrado].cantTomada | |
175 | + MaterialDialog(requireContext()).show { | |
176 | + title(R.string.sTituloNueva) | |
177 | + message(R.string.sCantidadNueva) | |
178 | + input { materialDialog, charSequence -> | |
179 | + fCant = 0F | |
180 | + fCant = charSequence.toString().toFloat() | |
181 | + } | |
182 | + positiveButton(R.string.btnOk) { | |
183 | + listArticulos[indiceDelArtEncontrado].cantTomada = fCant | |
184 | + viewAdapter.notifyDataSetChanged() | |
185 | + dismiss() | |
186 | + } | |
187 | + }.cancelOnTouchOutside(false).cornerRadius(10F) | |
188 | +// } | |
189 | + | |
190 | + } else if (indiceDelArtEncontrado == -1) {// TODO: no lo encontro en el RV, lo va a buscar en al BD | |
191 | + GlobalScope.launch(Dispatchers.Main) { | |
192 | + val artEncontrado = buscarDescEnBD(sChangeUpper.toUpperCase(Locale.ROOT)) | |
193 | + ContinuarCargaDesc(artEncontrado as ArrayList<Articles>) | |
194 | + } | |
195 | + } | |
196 | + tCodigoBarras.focusable = View.FOCUSABLE | |
197 | + tCodigoBarras.setText("") | |
198 | + tCodigoBarras.selectAll() | |
199 | + return@setOnKeyListener true | |
200 | + } | |
201 | + } | |
202 | + return@setOnKeyListener false | |
203 | + } | |
204 | + return v | |
205 | + } | |
206 | + | |
207 | + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { | |
208 | + super.onViewCreated(view, savedInstanceState) | |
209 | + navController = Navigation.findNavController(view) | |
210 | + etCodigoBarras.requestFocus() | |
211 | + | |
212 | + btnBorrarInv.setOnClickListener { | |
213 | + MaterialDialog(requireContext()).show { | |
214 | + title(R.string.sTituloBorrarInv) | |
215 | + message(R.string.sMensajeBorrarInv) | |
216 | + positiveButton(R.string.btnOk) { | |
217 | + BorrarInvActual() | |
218 | + Toast.makeText(requireContext(), "El inventario $InventarioNuevo fue Borrado", Toast.LENGTH_LONG).show() | |
219 | + navController.navigate(R.id.action_inventarioFragment_to_mainFragment2) | |
220 | + InventarioNuevo = 0 | |
221 | + dismiss() | |
222 | + } | |
223 | + negativeButton { | |
224 | + dismiss() | |
225 | + } | |
226 | + }.cancelOnTouchOutside(false).cornerRadius(10F) | |
227 | + } | |
228 | + | |
229 | + btnExportarInv.setOnClickListener { | |
230 | + MaterialDialog(requireContext()).show { | |
231 | + title(R.string.sTituloExportar) | |
232 | + message(R.string.sMensajeExportar) | |
233 | + positiveButton(R.string.btnOk) { | |
234 | + BorrarInvActual() | |
235 | + Toast.makeText(requireContext(), "El inventario $InventarioNuevo fue Exportado al Servidor", Toast.LENGTH_LONG).show() | |
236 | + navController.navigate(R.id.action_inventarioFragment_to_mainFragment2) | |
237 | + InventarioNuevo = 0 | |
238 | + dismiss() | |
239 | + } | |
240 | + negativeButton { | |
241 | + dismiss() | |
242 | + } | |
243 | + }.cancelOnTouchOutside(false).cornerRadius(10F) | |
244 | + } | |
245 | + } | |
246 | + | |
247 | + private fun BorrarInvActual() { | |
248 | + lifecycleScope.launch { | |
249 | + withContext(Dispatchers.IO) { | |
250 | + AppDb.getAppDb(requireActivity())!!.InvHeadDAO()!!.deleteinvHead(InventarioNuevo) | |
251 | + AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.deleteInvBody(InventarioNuevo) | |
252 | + } | |
253 | + } | |
254 | + } | |
255 | + | |
256 | + private fun CargarDeBdInventario(ultimoInv: Int) { | |
257 | + GlobalScope.launch(Dispatchers.Main) { | |
258 | + val invbody = cargarInventario(ultimoInv) | |
259 | + for ((i, item) in invbody!!.withIndex()) { | |
260 | + val art = Articles(invbody[i].sector, | |
261 | + invbody[i].codigo, | |
262 | + invbody[i].descripcion, | |
263 | + invbody[i].codBar, | |
264 | + invbody[i].codOrigen, | |
265 | + invbody[i].precio, | |
266 | + invbody[i].costo, | |
267 | + invbody[i].balanza, | |
268 | + invbody[i].depSn, | |
269 | + invbody[i].costo) | |
270 | + cargarRecicler(art, invbody[i].cantTomada!!.toFloat()) | |
271 | + } | |
272 | + } | |
273 | + | |
274 | + } | |
275 | + | |
276 | + private fun ContinuarCargaDesc(artAcargar: ArrayList<Articles>) { | |
277 | + //TODO DESPUES DE INGRESAR LA DESCRIPCION Y DE BUSCAR LOS CAINCIDENCIAS EN LA BASE SE VA A MOSTRAR LAS MISMAS | |
278 | + //TODO SI LA CANTIDAD ENCONTRADA ES UNO, LO CARGO DIRECTAMENTE EN EL RV | |
279 | + | |
280 | + if (artAcargar.isNotEmpty() || !artAcargar.isNullOrEmpty()) {// TODO: Si lo encuentra en la BD | |
281 | +// if (swSumaUno!!.isChecked) {// TODO: SI ESTA +1, PONE CANTIDAD 1 | |
282 | + if (artAcargar.size == 1) { // TODO: SI EN EL ARRAY SOLO HAY UN ITEM LO METE DIRECTAMENTE AL RV | |
283 | + fCant = 0F | |
284 | + fCant += 1F | |
285 | + // TODO PASO DEL ARRAY A UN ITEM PARA QUE LO CARGUE EN EL RV | |
286 | + val acargarPorDesc = Articles(artAcargar[0].sector, | |
287 | + artAcargar[0].codigo, | |
288 | + artAcargar[0].descripcion, | |
289 | + artAcargar[0].codBar, | |
290 | + artAcargar[0].codOrigen, | |
291 | + artAcargar[0].precio, | |
292 | + artAcargar[0].costo, | |
293 | + artAcargar[0].balanza, | |
294 | + artAcargar[0].depSn, | |
295 | + "") | |
296 | + // TODO LO ENVIO A CARGAR EN EL RV Y EN LA BD | |
297 | + cargarArtEnBd(acargarPorDesc, fCant) | |
298 | + cargarRecicler(acargarPorDesc, fCant) | |
299 | + } else { | |
300 | + var bundle = Bundle() | |
301 | + bundle = bundleOf("ArrayDesc" to artAcargar) | |
302 | + bundle.putInt("numeroInv", InventarioNuevo) | |
303 | + navController.navigate(R.id.action_inventarioFragment_to_descripcionFragment, bundle) | |
304 | + } | |
305 | +// } else {//SI NO ESTA +1 | |
306 | +// if (artAcargar.size == 1) { // TODO: SI EN EL ARRAY SOLO HAY UN ITEM LO METE DIRECTAMENTE AL RV | |
307 | +// fCant = listArticulos[0].cantTomada | |
308 | +// MaterialDialog(requireContext()).show { | |
309 | +// title(R.string.sTituloNueva) | |
310 | +// message(R.string.sCantidadNueva) | |
311 | +// input { materialDialog, charSequence -> | |
312 | +// fCant = 0F | |
313 | +// fCant = charSequence.toString().toFloat() | |
314 | +// } | |
315 | +// positiveButton(R.string.btnOk) { | |
316 | +// listArticulos[0].cantTomada = fCant | |
317 | +// viewAdapter.notifyDataSetChanged() | |
318 | +// dismiss() | |
319 | +// } | |
320 | +// }.cancelOnTouchOutside(false).cornerRadius(10F) | |
321 | +// // TODO PASO DEL ARRAY A UN ITEM PARA QUE LO CARGUE EN EL RV | |
322 | +// val acargarPorDesc = Articles(artAcargar[0].sector, | |
323 | +// artAcargar[0].codigo, | |
324 | +// artAcargar[0].descripcion, | |
325 | +// artAcargar[0].codBar, | |
326 | +// artAcargar[0].codOrigen, | |
327 | +// artAcargar[0].precio, | |
328 | +// artAcargar[0].costo, | |
329 | +// artAcargar[0].balanza, | |
330 | +// artAcargar[0].depSn, | |
331 | +// "") | |
332 | +// // TODO LO ENVIO A CARGAR EN EL RV Y EN LA BD | |
333 | +// cargarArtEnBd(acargarPorDesc, fCant) | |
334 | +// cargarRecicler(acargarPorDesc, fCant) | |
335 | +// } else { | |
336 | +// var bundle = Bundle() | |
337 | +// bundle = bundleOf("ArrayDesc" to artAcargar) | |
338 | +// bundle.putInt("numeroInv", InventarioNuevo) | |
339 | +// navController.navigate(R.id.action_inventarioFragment_to_descripcionFragment, bundle) | |
340 | +// } | |
341 | +// } | |
342 | + } else {//TODO si no lo encuentra en la BD | |
343 | + MaterialDialog(requireContext()).show { | |
344 | + title(R.string.sTitulo) | |
345 | + message(R.string.sMensaje) | |
346 | + positiveButton(R.string.btnOk) { | |
347 | + dismiss() | |
348 | + } | |
349 | + }.cancelOnTouchOutside(false).cornerRadius(10F) | |
350 | + } | |
351 | + | |
352 | + } | |
353 | + | |
354 | + private fun ContinuarCargaCB(artAcargar: Articles?) { | |
355 | + | |
356 | + if (artAcargar != null) {//Si lo encuentra en la BD | |
357 | + | |
358 | + if (swSumaUno!!.isChecked) {// SI ESTA +1, PONE CANTIDAD 1 | |
359 | + fCant = 0F | |
360 | + fCant += 1F | |
361 | + cargarArtEnBd(artAcargar, fCant) | |
362 | + cargarRecicler(artAcargar, fCant) | |
363 | + } else {//SI NO ESTA +1 PREGUNTA CANTIDAD | |
364 | + MaterialDialog(requireContext()).show { | |
365 | + title(R.string.sTitulo) | |
366 | + message(R.string.sMensajeEncontrado) | |
367 | + input { materialDialog, charSequence -> | |
368 | + fCant = 0F | |
369 | + fCant = charSequence.toString().toFloat() | |
370 | + } | |
371 | +// .input("Cantidad",1,,1,0,InputType.TYPE_CLASS_NUMBER,0,waitForPositiveButton = true,false,positiveButton ()) | |
372 | + positiveButton(R.string.btnOk) { | |
373 | + dismiss() | |
374 | + cargarArtEnBd(artAcargar, fCant) | |
375 | + cargarRecicler(artAcargar, fCant) | |
376 | + | |
377 | + } | |
378 | + }.cancelOnTouchOutside(false).cornerRadius(10F) | |
379 | + } | |
380 | + } else {// TODO si no lo encuentra en la BD | |
381 | + MaterialDialog(requireContext()).show { | |
382 | + title(R.string.sTitulo) | |
383 | + message(R.string.sMensaje) | |
384 | + positiveButton(R.string.btnOk) { | |
385 | +// if (this.swSumaUno.isChecked) { | |
386 | +// swSumaUno.isChecked=false | |
387 | +// } | |
388 | + dismiss() | |
389 | + } | |
390 | + }.cancelOnTouchOutside(false).cornerRadius(10F) | |
391 | + } | |
392 | + } | |
393 | + | |
394 | + suspend fun buscarCBEnBD(CodigoBarras: String): Articles? { | |
395 | + //TODO BUSQUEDA POR CODIGO DE BARRAS | |
396 | + var busqueda: Articles? = null | |
397 | + return GlobalScope.async(Dispatchers.IO) { | |
398 | + busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByCodBar(CodigoBarras, iArea) | |
399 | + return@async busqueda | |
400 | + }.await() | |
401 | + } | |
402 | + | |
403 | + suspend fun buscarDescEnBD(descripcion: String): List<Articles>? { | |
404 | + //TODO BUSQUEDA POR DESCRIPCION | |
405 | + var busqueda: List<Articles>? = null | |
406 | + return GlobalScope.async(Dispatchers.IO) { | |
407 | + busqueda = AppDb.getAppDb(requireContext())!!.ArticulosDAO()!!.findArticuloByDesc(descripcion, iArea) | |
408 | + return@async busqueda | |
409 | + }.await() | |
410 | + } | |
411 | + | |
412 | + private fun buscoArtEnRv(codigoBarras: String, sTipoBusqueda: Int): Int { | |
413 | + var indice = 0 | |
414 | + var bEncontrado = false | |
415 | + if (sTipoBusqueda == 0) {//TODO BUSQUEDA POR CODIGO DE BARRAS | |
416 | + for (item in listArticulos) { | |
417 | + if (item.codigoBarras!!.toUpperCase(Locale.ROOT).contains(codigoBarras)) { | |
418 | + bEncontrado = true | |
419 | + break | |
420 | + } | |
421 | + indice += 1 | |
422 | + } | |
423 | + } else {//TODO BUSQUEDA POR DESCRIPCION | |
424 | + for (item in listArticulos) { | |
425 | + if (item.descripcion!!.toUpperCase(Locale.ROOT).contains(codigoBarras)) { | |
426 | + bEncontrado = true | |
427 | + break | |
428 | + } | |
429 | + indice += 1 | |
430 | + } | |
431 | + } | |
432 | + return if (bEncontrado) indice | |
433 | + else -1 | |
434 | + } | |
435 | + | |
436 | + private fun cargarArtEnBd(articulos: Articles, cant: Float) { | |
437 | + val body = InvBody(InventarioNuevo,// TODO PREPARO PARA MANDAR A CARGAR EN LA BD | |
438 | + articulos.sector, | |
439 | + articulos.codigo, | |
440 | + articulos.descripcion, | |
441 | + cant.toString(), | |
442 | + articulos.codBar, | |
443 | + articulos.codOrigen, | |
444 | + articulos.precio, | |
445 | + articulos.precio, | |
446 | + articulos.balanza, | |
447 | + articulos.depSn, | |
448 | + ObtenerFechaActual(), | |
449 | + ObtenerFechaActual()) | |
450 | + InsertarArtEnDB(body)// TODO MANDO A CARGAR A LA BASE DE DATOS | |
451 | + } | |
452 | + | |
453 | + fun cargarRecicler(articulos: Articles, cant: Float) { | |
454 | + | |
455 | + //TODO CARGO EN LE RV | |
456 | + val item = ItemsRecycler(articulos.sector, articulos.codigo, articulos.descripcion, cant, articulos.codBar) | |
457 | + listArticulos.add(item) | |
458 | + | |
459 | + viewAdapter = ProductosListAdapter(listArticulos) | |
460 | + viewManager =LinearLayoutManager(requireContext()) | |
461 | + deleteIcon = ContextCompat.getDrawable(requireContext(), R.drawable.borrar)!! | |
462 | + rcInventarios.apply { | |
463 | + adapter = viewAdapter | |
464 | + layoutManager = viewManager | |
465 | + } | |
466 | + val itemTouchHelperCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) { | |
467 | + override fun onMove(p0: RecyclerView, p1: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean { | |
468 | + return false | |
469 | + } | |
470 | + | |
471 | + override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { | |
472 | + (viewAdapter as ProductosListAdapter).removeItem(viewHolder) | |
473 | + viewAdapter.notifyDataSetChanged() | |
474 | + } | |
475 | + | |
476 | + override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) { | |
477 | + val itemView = viewHolder.itemView | |
478 | + val iconMargin = (itemView.height - deleteIcon.intrinsicHeight) / 2 | |
479 | + c.clipRect(0f, itemView.top.toFloat(), dX, itemView.bottom.toFloat()) | |
480 | + | |
481 | + if (dX > 0) { | |
482 | + | |
483 | + if (dX < c.width / 2) c.drawColor(Color.GREEN) | |
484 | + else c.drawColor(Color.RED) | |
485 | + deleteIcon.setBounds(itemView.left + iconMargin, itemView.top + iconMargin, itemView.left + iconMargin + deleteIcon.intrinsicWidth, itemView.bottom-iconMargin) | |
486 | + } else { | |
487 | + | |
488 | + } | |
489 | + | |
490 | + super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive) | |
491 | + deleteIcon.draw(c) | |
492 | + } | |
493 | + } | |
494 | + | |
495 | + val itemTouchHelper = ItemTouchHelper(itemTouchHelperCallback) | |
496 | + itemTouchHelper.attachToRecyclerView(rcInventarios) | |
497 | + } | |
498 | + | |
499 | + private fun ProdNoCont(): Int? { | |
500 | + var mostrarStock = 0 | |
501 | + if (sharedPreferences.contains("cbMostrarStock")) if (sharedPreferences.getString("cbMostrarStock", "").toString() == "1") mostrarStock = 1 | |
502 | + return mostrarStock | |
503 | + } | |
504 | + | |
505 | + private fun AjusteProductos(): Int? { | |
506 | + var prodInclu = 0 | |
507 | + if (sharedPreferences.contains("rbProInclu")) if (sharedPreferences.getString("rbProInclu", "").toString() == "1") prodInclu = 1 | |
508 | + | |
509 | + if (sharedPreferences.contains("rbProNoInclu")) if (sharedPreferences.getString("rbProNoInclu", "").toString() == "0") prodInclu = 0 | |
510 | + return prodInclu | |
511 | + } | |
512 | + | |
513 | + private fun SerchArea() { | |
514 | + | |
515 | + if (sharedPreferences.contains("rbVentas")) if (sharedPreferences.getString("rbVentas", "").toString() == "1") iArea = 0 | |
516 | + if (sharedPreferences.contains("rbDeposito")) if (sharedPreferences.getString("rbDeposito", "").toString() == "1") iArea = 1 | |
517 | + } | |
518 | + | |
519 | + fun ObtenerFechaActual(): String? { | |
520 | + //TODO OBTENGO FECHA Y HORA ACTUAL PARA LA CABECERA DEL INVENTARIO Y PARA CADA ITEM QUE SE INSERTA EN LA BD | |
521 | + val current = LocalDateTime.now() | |
522 | + val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") | |
523 | + val dFechaHora = current.format(formatter) | |
524 | + return dFechaHora.toString() | |
525 | + } | |
526 | + | |
527 | + fun InsertarArtEnDB(cuarpoInventario: InvBody) { | |
528 | + lifecycleScope.launch { | |
529 | + withContext(Dispatchers.IO) { | |
530 | + AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.insertInvBody(cuarpoInventario) | |
531 | + } | |
532 | + } | |
533 | + } | |
534 | + | |
535 | + fun updateCantidad(sector: String, codigo: String, cantidad: Float) { | |
536 | + lifecycleScope.launch { | |
537 | + withContext(Dispatchers.IO) { | |
538 | + AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.UpdateInvBody(cantidad, sector, codigo) | |
539 | + } | |
540 | + } | |
541 | + } | |
542 | + | |
543 | + suspend fun cargarInventario(inventario: Int): List<InvBody>? { | |
544 | +// var inventarios: List<InvBody>? = null | |
545 | + return GlobalScope.async(Dispatchers.IO) { | |
546 | + return@async AppDb.getAppDb(requireActivity())!!.InvBodyDAO()!!.fetchAllInvBody(inventario) | |
547 | + }.await() | |
548 | + } | |
549 | +} | |
550 | + | |
551 | + | |
552 | + | |
553 | + | |
554 | + | |
555 | + | |
556 | + | |
557 | + | |
558 | + | |
559 | + | |
560 | + | |
561 | + |
app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/ItemDescripcion.kt
app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/ItemsRecycler.kt
app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/ProductosListAdapter.kt
... | ... | @@ -0,0 +1,66 @@ |
1 | +package com.focasoftware.deboinventariov20.ui.inventario | |
2 | + | |
3 | +import android.view.LayoutInflater | |
4 | +import android.view.View | |
5 | +import android.view.ViewGroup | |
6 | +import androidx.recyclerview.widget.RecyclerView | |
7 | +import com.focasoftware.deboinventariov20.R | |
8 | +import com.google.android.material.snackbar.Snackbar | |
9 | +import kotlinx.android.synthetic.main.item.view.* | |
10 | + | |
11 | + | |
12 | +class ProductosListAdapter(private val productos: ArrayList<ItemsRecycler>) : RecyclerView.Adapter<ProductosListAdapter.ItemsViewHolder>() { | |
13 | + private var removePosition: Int = 0 | |
14 | + private var removedItem: ItemsRecycler? = null | |
15 | + internal var items2: ArrayList<ItemsRecycler>? = null | |
16 | + | |
17 | + init { | |
18 | + this.items2 = productos | |
19 | + } | |
20 | + | |
21 | + override fun onCreateViewHolder(parent: ViewGroup, p1: Int) = ItemsViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item, parent, false)) | |
22 | + | |
23 | + override fun getItemCount() = productos.size | |
24 | + | |
25 | + override fun onBindViewHolder(holder: ItemsViewHolder, position: Int) { | |
26 | + when (holder) { | |
27 | + is ItemsViewHolder -> { | |
28 | + holder.bind(items2!![position]) | |
29 | + } | |
30 | + } | |
31 | + } | |
32 | + | |
33 | + | |
34 | + class ItemsViewHolder constructor(view: View) : RecyclerView.ViewHolder(view) { | |
35 | + | |
36 | + val sector = view.tvSector | |
37 | + val codigo = view.tvCodigo | |
38 | + val descripcion = view.tvDescripcion | |
39 | + val cantCont = view.tvCantidad | |
40 | + val codigoBarras = view.tvCodigoBarras | |
41 | + | |
42 | + fun bind(pro: ItemsRecycler) { | |
43 | + sector.text = pro.sector | |
44 | + codigo.text = pro.codigo | |
45 | + descripcion.text = pro.descripcion | |
46 | + cantCont.text = pro.cantTomada.toString() | |
47 | + codigoBarras.text = pro.codigoBarras | |
48 | + } | |
49 | + } | |
50 | + | |
51 | + fun removeItem(viewHolder: RecyclerView.ViewHolder) { | |
52 | + removePosition = viewHolder.adapterPosition | |
53 | + removedItem = productos[viewHolder.adapterPosition] | |
54 | + | |
55 | + productos.removeAt(viewHolder.adapterPosition) | |
56 | + notifyItemRemoved(viewHolder.adapterPosition) | |
57 | + | |
58 | + Snackbar.make(viewHolder.itemView, "El articulo fue ${removedItem!!.descripcion} eliminado", Snackbar.LENGTH_LONG).setAction("Rehacer") { | |
59 | + productos.add(removePosition, removedItem!!) | |
60 | + notifyItemInserted(removePosition) | |
61 | + }.show() | |
62 | + } | |
63 | +// interface OnItemClickListener{ | |
64 | +// fun OnImageClick(position: Int) | |
65 | +// } | |
66 | +} | |
0 | 67 | \ No newline at end of file |
app/src/main/java/com/focasoftware/deboinventariov20/ui/main/InventarioListAdapter.kt
... | ... | @@ -0,0 +1,50 @@ |
1 | +package com.focasoftware.deboinventariov20.ui.main | |
2 | + | |
3 | +import android.view.LayoutInflater | |
4 | +import android.view.View | |
5 | +import android.view.ViewGroup | |
6 | +import androidx.recyclerview.widget.RecyclerView | |
7 | +import com.focasoftware.deboinventariov20.R | |
8 | +import com.google.android.material.snackbar.Snackbar | |
9 | +import kotlinx.android.synthetic.main.item.view.* | |
10 | +import kotlinx.android.synthetic.main.item_principal.view.* | |
11 | +import javax.sql.ConnectionEventListener | |
12 | + | |
13 | + | |
14 | +class InventarioListAdapter(private val productos: ArrayList<ItemInventario>, private val listener: OnItemClickListener) : RecyclerView.Adapter<InventarioListAdapter.ItemsViewHolder>() { | |
15 | + | |
16 | + internal var items2: ArrayList<ItemInventario>? = null | |
17 | + | |
18 | + init { | |
19 | + this.items2 = productos | |
20 | + } | |
21 | + | |
22 | + override fun onCreateViewHolder(parent: ViewGroup, p1: Int) = ItemsViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_principal, parent, false)) | |
23 | + | |
24 | + override fun getItemCount() = productos.size | |
25 | + | |
26 | + override fun onBindViewHolder(holder: ItemsViewHolder, position: Int) { | |
27 | + val currentItem=productos[position] | |
28 | + holder.inventario.text=currentItem.inventario | |
29 | + } | |
30 | + | |
31 | + inner class ItemsViewHolder constructor(view: View) : RecyclerView.ViewHolder(view),View.OnClickListener { | |
32 | + | |
33 | + | |
34 | + val inventario = view.inventario | |
35 | + init { | |
36 | + itemView.setOnClickListener(this) | |
37 | + } | |
38 | + override fun onClick(p0: View?) { | |
39 | + val position=adapterPosition | |
40 | + if (position!=RecyclerView.NO_POSITION) { | |
41 | + listener.OnItemClick(position) | |
42 | + } | |
43 | + } | |
44 | + } | |
45 | + | |
46 | + interface OnItemClickListener{ | |
47 | + fun OnItemClick(position: Int) | |
48 | + } | |
49 | +} | |
50 | + |
app/src/main/java/com/focasoftware/deboinventariov20/ui/main/ItemPrincipal.kt
app/src/main/java/com/focasoftware/deboinventariov20/ui/main/MainFragment.kt
... | ... | @@ -0,0 +1,103 @@ |
1 | +package com.focasoftware.deboinventariov20.ui.main | |
2 | + | |
3 | +import android.content.Context | |
4 | +import android.content.SharedPreferences | |
5 | +import android.os.Bundle | |
6 | +import android.view.LayoutInflater | |
7 | +import android.view.View | |
8 | +import android.view.ViewGroup | |
9 | +import androidx.core.view.get | |
10 | +import androidx.fragment.app.Fragment | |
11 | +import androidx.navigation.NavController | |
12 | +import androidx.navigation.Navigation | |
13 | +import androidx.recyclerview.widget.LinearLayoutManager | |
14 | +import androidx.recyclerview.widget.RecyclerView | |
15 | +import com.focasoftware.deboinventariov20.DB.DataBase.AppDb | |
16 | +import com.focasoftware.deboinventariov20.Model.InvHead | |
17 | +import com.focasoftware.deboinventariov20.R | |
18 | +import kotlinx.coroutines.Dispatchers | |
19 | +import kotlinx.coroutines.GlobalScope | |
20 | +import kotlinx.coroutines.async | |
21 | +import kotlinx.coroutines.launch | |
22 | +import java.util.* | |
23 | + | |
24 | +class MainFragment : Fragment(), InventarioListAdapter.OnItemClickListener { | |
25 | + private lateinit var inventarios: List<InvHead> | |
26 | + private lateinit var rcInventario: RecyclerView | |
27 | + private lateinit var viewAdapter: RecyclerView.Adapter<*> | |
28 | + private lateinit var viewManager: RecyclerView.LayoutManager | |
29 | + private var listIvn = ArrayList<ItemInventario>() | |
30 | + private lateinit var navController: NavController | |
31 | + private lateinit var sharedPreferences: SharedPreferences | |
32 | + | |
33 | + override fun onCreate(savedInstanceState: Bundle?) { | |
34 | + super.onCreate(savedInstanceState) | |
35 | + sharedPreferences = requireActivity().getSharedPreferences("SP_INFO", Context.MODE_PRIVATE) | |
36 | + | |
37 | + | |
38 | + } | |
39 | + | |
40 | + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { | |
41 | + val v = inflater.inflate(R.layout.fragment_main, container, false) | |
42 | + GlobalScope.launch(Dispatchers.Main) { | |
43 | + inventarios = buscarEnBDInvHead() | |
44 | + for ((i, item) in inventarios.withIndex()) { | |
45 | + val inv = InvHead(inventarios[i].invNum, | |
46 | + inventarios[i].descripcion, | |
47 | + inventarios[i].estado, | |
48 | + inventarios[i].fechaInicio, | |
49 | + inventarios[i].fechaFinal, | |
50 | + inventarios[i].prodContados, | |
51 | + inventarios[i].lugar, | |
52 | + inventarios[i].stDesc, | |
53 | + inventarios[i].proNoCont) | |
54 | + cargarRecicler(inv) | |
55 | + } | |
56 | + } | |
57 | + rcInventario = v.findViewById(R.id.rcInventario) | |
58 | + return v | |
59 | + } | |
60 | + | |
61 | + suspend fun buscarEnBDInvHead(): List<InvHead> { | |
62 | + //TODO BUSQUEDA POR DESCRIPCION | |
63 | + var busqueda: List<InvHead> | |
64 | + return GlobalScope.async(Dispatchers.IO) { | |
65 | + busqueda = AppDb.getAppDb(requireContext())!!.InvHeadDAO()!!.fetchAllInvHead() | |
66 | + return@async busqueda | |
67 | + }.await() | |
68 | + } | |
69 | + | |
70 | + fun cargarRecicler(inv: InvHead) { | |
71 | + var numero="" | |
72 | + //TODO CARGO EN LE RV | |
73 | + if (inv.invNum.toLong()<10) numero="0${inv.invNum.toLong()}" else numero=inv.invNum.toString() | |
74 | + val item = ItemInventario("Inventeario: ${numero} ${inv.descripcion} Fecha:${inv.fechaFinal} ") | |
75 | + //(articulos.sector, articulos.codigo, articulos.descripcion, cant, articulos.codBar) | |
76 | + listIvn.add(item) | |
77 | + | |
78 | + viewAdapter = InventarioListAdapter(listIvn, this) | |
79 | + viewManager = LinearLayoutManager(requireContext()) | |
80 | + | |
81 | + rcInventario.apply { | |
82 | + adapter = viewAdapter | |
83 | + layoutManager = viewManager | |
84 | + } | |
85 | + } | |
86 | + | |
87 | + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { | |
88 | + super.onViewCreated(view, savedInstanceState) | |
89 | + navController = Navigation.findNavController(view) | |
90 | + } | |
91 | + | |
92 | + override fun OnItemClick(position: Int) { | |
93 | + val editor = sharedPreferences.edit() | |
94 | + var invSel:String = listIvn[position].inventario.toString() | |
95 | + invSel=invSel.substring(13, 15) | |
96 | + editor?.putString("Inventario", invSel) | |
97 | + editor?.apply() | |
98 | + editor.commit() | |
99 | + navController.navigate(R.id.action_mainFragment2_to_inventarioFragment) | |
100 | + | |
101 | + } | |
102 | +} | |
103 | + |
app/src/main/java/com/focasoftware/deboinventariov20/ui/servidores/AdapterServidores.kt
... | ... | @@ -0,0 +1,40 @@ |
1 | +package com.focasoftware.deboinventariov20.ui.servidores | |
2 | + | |
3 | +import android.content.Context | |
4 | +import android.view.LayoutInflater | |
5 | +import android.view.View | |
6 | +import android.view.ViewGroup | |
7 | +import androidx.recyclerview.widget.RecyclerView | |
8 | +import com.focasoftware.deboinventariov20.R | |
9 | +import kotlinx.android.synthetic.main.item_servidores.view.* | |
10 | + | |
11 | +class AdapterServidores( | |
12 | + private val servidor: ArrayList<ItemsServidores>, | |
13 | + private var contexto: Context | |
14 | +) : | |
15 | + RecyclerView.Adapter<AdapterServidores.ViewHolder>() { | |
16 | + | |
17 | + | |
18 | + class ViewHolder(var vista: View) : RecyclerView.ViewHolder(vista) { | |
19 | + fun bind(itemsServidores: ItemsServidores) { | |
20 | + vista.tvDescServidor.text = itemsServidores.descripcion | |
21 | + vista.tvDireccionServidor.text = itemsServidores.direccion | |
22 | + | |
23 | + } | |
24 | + } | |
25 | + | |
26 | + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { | |
27 | + return ViewHolder( | |
28 | + LayoutInflater.from(parent.context).inflate(R.layout.item_servidores, parent, false) | |
29 | + ) | |
30 | + } | |
31 | + | |
32 | + override fun getItemCount(): Int { | |
33 | + return servidor.size | |
34 | + } | |
35 | + | |
36 | + override fun onBindViewHolder(holder: ViewHolder, position: Int) { | |
37 | + holder.bind(servidor[position]) | |
38 | + } | |
39 | + | |
40 | +} | |
0 | 41 | \ No newline at end of file |
app/src/main/java/com/focasoftware/deboinventariov20/ui/servidores/ItemsServidores.kt
app/src/main/java/com/focasoftware/deboinventariov20/ui/servidores/ServidoresFragment.kt
... | ... | @@ -0,0 +1,58 @@ |
1 | +package com.focasoftware.deboinventariov20.ui.servidores | |
2 | + | |
3 | +import android.os.Bundle | |
4 | +import androidx.fragment.app.Fragment | |
5 | +import android.view.LayoutInflater | |
6 | +import android.view.View | |
7 | +import android.view.ViewGroup | |
8 | +import android.widget.Button | |
9 | +import androidx.recyclerview.widget.DefaultItemAnimator | |
10 | +import androidx.recyclerview.widget.LinearLayoutManager | |
11 | +import androidx.recyclerview.widget.RecyclerView | |
12 | +import com.focasoftware.deboinventariov20.DB.DataBase.AppDb | |
13 | +import com.focasoftware.deboinventariov20.Model.ServeInv | |
14 | +import com.focasoftware.deboinventariov20.R | |
15 | +import kotlinx.android.synthetic.main.fragment_servidores.* | |
16 | +import kotlinx.coroutines.GlobalScope | |
17 | +import kotlinx.coroutines.launch | |
18 | + | |
19 | +class ServidoresFragment : Fragment() { | |
20 | + val servidorNuevo = ArrayList<ItemsServidores>() | |
21 | + var index=0 | |
22 | + | |
23 | + override fun onCreateView( | |
24 | + inflater: LayoutInflater, | |
25 | + container: ViewGroup?, | |
26 | + savedInstanceState: Bundle? | |
27 | + ): View? { | |
28 | + val v = inflater.inflate(R.layout.fragment_servidores, container, false) | |
29 | + | |
30 | + val btnGuardarServidores = v.findViewById<Button>(R.id.btnGuardarServidores) | |
31 | + val rvServidores = v.findViewById<RecyclerView>(R.id.rvServidores) | |
32 | + | |
33 | + rvServidores.layoutManager = LinearLayoutManager(context) | |
34 | + rvServidores.itemAnimator = DefaultItemAnimator() | |
35 | + | |
36 | + btnGuardarServidores.setOnClickListener { | |
37 | + rvServidores.adapter = AdapterServidores(ingregarDatos(), requireContext()) | |
38 | + } | |
39 | + return v | |
40 | + } | |
41 | + | |
42 | + fun ingregarDatos(): ArrayList<ItemsServidores> { | |
43 | + | |
44 | + val item=ItemsServidores(etNombreServidor.text.toString(),etDireccionServidor.text.toString(),"0") | |
45 | + | |
46 | + val servidor = ServeInv( | |
47 | + etNombreServidor.text.toString(), | |
48 | + etDireccionServidor.text.toString(), | |
49 | + "0") | |
50 | + index+=index | |
51 | + servidorNuevo.add(item) | |
52 | + val Job = GlobalScope.launch { | |
53 | + AppDb.getAppDb(requireActivity())!!.ServeInvDao()!!.insertServer(servidor) | |
54 | + } | |
55 | + | |
56 | + return servidorNuevo | |
57 | + } | |
58 | +} | |
0 | 59 | \ No newline at end of file |
app/src/main/res/anim/slide_in_left.xml
app/src/main/res/anim/slide_in_right.xml
app/src/main/res/anim/slide_out_left.xml
app/src/main/res/anim/slide_out_right.xml
app/src/main/res/drawable-v24/camera.xml
... | ... | @@ -0,0 +1,6 @@ |
1 | +<vector android:height="50dp" android:tint="?attr/colorControlNormal" | |
2 | + android:viewportHeight="24" android:viewportWidth="24" | |
3 | + android:width="50dp" xmlns:android="http://schemas.android.com/apk/res/android"> | |
4 | + <path android:fillColor="@android:color/white" android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0"/> | |
5 | + <path android:fillColor="@android:color/white" android:pathData="M9,2L7.17,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2L9,2zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z"/> | |
6 | +</vector> |
app/src/main/res/drawable-v24/configuracion.xml
... | ... | @@ -0,0 +1,10 @@ |
1 | +<vector xmlns:android="http://schemas.android.com/apk/res/android" | |
2 | + android:width="24dp" | |
3 | + android:height="24dp" | |
4 | + android:viewportWidth="24" | |
5 | + android:viewportHeight="24" | |
6 | + android:tint="?attr/colorControlNormal"> | |
7 | + <path | |
8 | + android:fillColor="@android:color/white" | |
9 | + android:pathData="M10.82,12.49c0.02,-0.16 0.04,-0.32 0.04,-0.49 0,-0.17 -0.02,-0.33 -0.04,-0.49l1.08,-0.82c0.1,-0.07 0.12,-0.21 0.06,-0.32l-1.03,-1.73c-0.06,-0.11 -0.2,-0.15 -0.31,-0.11l-1.28,0.5c-0.27,-0.2 -0.56,-0.36 -0.87,-0.49l-0.2,-1.33c0,-0.12 -0.11,-0.21 -0.24,-0.21H5.98c-0.13,0 -0.24,0.09 -0.26,0.21l-0.2,1.32c-0.31,0.12 -0.6,0.3 -0.87,0.49l-1.28,-0.5c-0.12,-0.05 -0.25,0 -0.31,0.11l-1.03,1.73c-0.06,0.12 -0.03,0.25 0.07,0.33l1.08,0.82c-0.02,0.16 -0.03,0.33 -0.03,0.49 0,0.17 0.02,0.33 0.04,0.49l-1.09,0.83c-0.1,0.07 -0.12,0.21 -0.06,0.32l1.03,1.73c0.06,0.11 0.2,0.15 0.31,0.11l1.28,-0.5c0.27,0.2 0.56,0.36 0.87,0.49l0.2,1.32c0.01,0.12 0.12,0.21 0.25,0.21h2.06c0.13,0 0.24,-0.09 0.25,-0.21l0.2,-1.32c0.31,-0.12 0.6,-0.3 0.87,-0.49l1.28,0.5c0.12,0.05 0.25,0 0.31,-0.11l1.03,-1.73c0.06,-0.11 0.04,-0.24 -0.06,-0.32l-1.1,-0.83zM7,13.75c-0.99,0 -1.8,-0.78 -1.8,-1.75s0.81,-1.75 1.8,-1.75 1.8,0.78 1.8,1.75S8,13.75 7,13.75zM18,1.01L8,1c-1.1,0 -2,0.9 -2,2v3h2V5h10v14H8v-1H6v3c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2V3c0,-1.1 -0.9,-1.99 -2,-1.99z"/> | |
10 | +</vector> |
app/src/main/res/drawable-v24/ic_launcher_foreground.xml
... | ... | @@ -0,0 +1,30 @@ |
1 | +<vector xmlns:android="http://schemas.android.com/apk/res/android" | |
2 | + xmlns:aapt="http://schemas.android.com/aapt" | |
3 | + android:width="108dp" | |
4 | + android:height="108dp" | |
5 | + android:viewportWidth="108" | |
6 | + android:viewportHeight="108"> | |
7 | + <path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z"> | |
8 | + <aapt:attr name="android:fillColor"> | |
9 | + <gradient | |
10 | + android:endX="85.84757" | |
11 | + android:endY="92.4963" | |
12 | + android:startX="42.9492" | |
13 | + android:startY="49.59793" | |
14 | + android:type="linear"> | |
15 | + <item | |
16 | + android:color="#44000000" | |
17 | + android:offset="0.0" /> | |
18 | + <item | |
19 | + android:color="#00000000" | |
20 | + android:offset="1.0" /> | |
21 | + </gradient> | |
22 | + </aapt:attr> | |
23 | + </path> | |
24 | + <path | |
25 | + android:fillColor="#FFFFFF" | |
26 | + android:fillType="nonZero" | |
27 | + android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z" | |
28 | + android:strokeWidth="1" | |
29 | + android:strokeColor="#00000000" /> | |
30 | +</vector> | |
0 | 31 | \ No newline at end of file |
app/src/main/res/drawable-v24/inicio.xml
... | ... | @@ -0,0 +1,10 @@ |
1 | +<vector xmlns:android="http://schemas.android.com/apk/res/android" | |
2 | + android:width="30dp" | |
3 | + android:height="30dp" | |
4 | + android:viewportWidth="30" | |
5 | + android:viewportHeight="30" | |
6 | + android:tint="?attr/colorControlNormal"> | |
7 | + <path | |
8 | + android:fillColor="@android:color/white" | |
9 | + android:pathData="M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z"/> | |
10 | +</vector> |
app/src/main/res/drawable-v24/inventario.xml
... | ... | @@ -0,0 +1,10 @@ |
1 | +<vector xmlns:android="http://schemas.android.com/apk/res/android" | |
2 | + android:width="24dp" | |
3 | + android:height="24dp" | |
4 | + android:viewportWidth="24" | |
5 | + android:viewportHeight="24" | |
6 | + android:tint="?attr/colorControlNormal"> | |
7 | + <path | |
8 | + android:fillColor="@android:color/white" | |
9 | + android:pathData="M11,9h2L13,6h3L16,4h-3L13,1h-2v3L8,4v2h3v3zM7,18c-1.1,0 -1.99,0.9 -1.99,2S5.9,22 7,22s2,-0.9 2,-2 -0.9,-2 -2,-2zM17,18c-1.1,0 -1.99,0.9 -1.99,2s0.89,2 1.99,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM7.17,14.75l0.03,-0.12 0.9,-1.63h7.45c0.75,0 1.41,-0.41 1.75,-1.03l3.86,-7.01L19.42,4h-0.01l-1.1,2 -2.76,5L8.53,11l-0.13,-0.27L6.16,6l-0.95,-2 -0.94,-2L1,2v2h2l3.6,7.59 -1.35,2.45c-0.16,0.28 -0.25,0.61 -0.25,0.96 0,1.1 0.9,2 2,2h12v-2L7.42,15c-0.13,0 -0.25,-0.11 -0.25,-0.25z"/> | |
10 | +</vector> |
app/src/main/res/drawable-v24/logo.png
10.5 KB
app/src/main/res/drawable-v24/maestros.xml
... | ... | @@ -0,0 +1,10 @@ |
1 | +<vector xmlns:android="http://schemas.android.com/apk/res/android" | |
2 | + android:width="24dp" | |
3 | + android:height="24dp" | |
4 | + android:viewportWidth="24" | |
5 | + android:viewportHeight="24" | |
6 | + android:tint="?attr/colorControlNormal"> | |
7 | + <path | |
8 | + android:fillColor="@android:color/white" | |
9 | + android:pathData="M17,1.01L7,1c-1.1,0 -2,0.9 -2,2v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2L19,3c0,-1.1 -0.9,-1.99 -2,-1.99zM17,19L7,19L7,5h10v14zM16,13h-3L13,8h-2v5L8,13l4,4 4,-4z"/> | |
10 | +</vector> |
app/src/main/res/drawable-v24/more.xml
... | ... | @@ -0,0 +1,5 @@ |
1 | +<vector android:height="30dp" android:tint="?attr/colorControlNormal" | |
2 | + android:viewportHeight="24" android:viewportWidth="24" | |
3 | + android:width="30dp" xmlns:android="http://schemas.android.com/apk/res/android"> | |
4 | + <path android:fillColor="@android:color/white" android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/> | |
5 | +</vector> |
app/src/main/res/drawable-v24/search.xml
... | ... | @@ -0,0 +1,10 @@ |
1 | +<vector xmlns:android="http://schemas.android.com/apk/res/android" | |
2 | + android:width="24dp" | |
3 | + android:height="24dp" | |
4 | + android:viewportWidth="24" | |
5 | + android:viewportHeight="24" | |
6 | + android:tint="?attr/colorControlNormal"> | |
7 | + <path | |
8 | + android:fillColor="@android:color/white" | |
9 | + android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/> | |
10 | +</vector> |
app/src/main/res/drawable/borrar.xml
... | ... | @@ -0,0 +1,5 @@ |
1 | +<vector android:height="40dp" android:tint="?attr/colorControlNormal" | |
2 | + android:viewportHeight="24" android:viewportWidth="24" | |
3 | + android:width="40dp" xmlns:android="http://schemas.android.com/apk/res/android"> | |
4 | + <path android:fillColor="@android:color/white" android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/> | |
5 | +</vector> |
app/src/main/res/drawable/ic_launcher_background.xml
... | ... | @@ -0,0 +1,170 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<vector xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + android:width="108dp" | |
4 | + android:height="108dp" | |
5 | + android:viewportWidth="108" | |
6 | + android:viewportHeight="108"> | |
7 | + <path | |
8 | + android:fillColor="#3DDC84" | |
9 | + android:pathData="M0,0h108v108h-108z" /> | |
10 | + <path | |
11 | + android:fillColor="#00000000" | |
12 | + android:pathData="M9,0L9,108" | |
13 | + android:strokeWidth="0.8" | |
14 | + android:strokeColor="#33FFFFFF" /> | |
15 | + <path | |
16 | + android:fillColor="#00000000" | |
17 | + android:pathData="M19,0L19,108" | |
18 | + android:strokeWidth="0.8" | |
19 | + android:strokeColor="#33FFFFFF" /> | |
20 | + <path | |
21 | + android:fillColor="#00000000" | |
22 | + android:pathData="M29,0L29,108" | |
23 | + android:strokeWidth="0.8" | |
24 | + android:strokeColor="#33FFFFFF" /> | |
25 | + <path | |
26 | + android:fillColor="#00000000" | |
27 | + android:pathData="M39,0L39,108" | |
28 | + android:strokeWidth="0.8" | |
29 | + android:strokeColor="#33FFFFFF" /> | |
30 | + <path | |
31 | + android:fillColor="#00000000" | |
32 | + android:pathData="M49,0L49,108" | |
33 | + android:strokeWidth="0.8" | |
34 | + android:strokeColor="#33FFFFFF" /> | |
35 | + <path | |
36 | + android:fillColor="#00000000" | |
37 | + android:pathData="M59,0L59,108" | |
38 | + android:strokeWidth="0.8" | |
39 | + android:strokeColor="#33FFFFFF" /> | |
40 | + <path | |
41 | + android:fillColor="#00000000" | |
42 | + android:pathData="M69,0L69,108" | |
43 | + android:strokeWidth="0.8" | |
44 | + android:strokeColor="#33FFFFFF" /> | |
45 | + <path | |
46 | + android:fillColor="#00000000" | |
47 | + android:pathData="M79,0L79,108" | |
48 | + android:strokeWidth="0.8" | |
49 | + android:strokeColor="#33FFFFFF" /> | |
50 | + <path | |
51 | + android:fillColor="#00000000" | |
52 | + android:pathData="M89,0L89,108" | |
53 | + android:strokeWidth="0.8" | |
54 | + android:strokeColor="#33FFFFFF" /> | |
55 | + <path | |
56 | + android:fillColor="#00000000" | |
57 | + android:pathData="M99,0L99,108" | |
58 | + android:strokeWidth="0.8" | |
59 | + android:strokeColor="#33FFFFFF" /> | |
60 | + <path | |
61 | + android:fillColor="#00000000" | |
62 | + android:pathData="M0,9L108,9" | |
63 | + android:strokeWidth="0.8" | |
64 | + android:strokeColor="#33FFFFFF" /> | |
65 | + <path | |
66 | + android:fillColor="#00000000" | |
67 | + android:pathData="M0,19L108,19" | |
68 | + android:strokeWidth="0.8" | |
69 | + android:strokeColor="#33FFFFFF" /> | |
70 | + <path | |
71 | + android:fillColor="#00000000" | |
72 | + android:pathData="M0,29L108,29" | |
73 | + android:strokeWidth="0.8" | |
74 | + android:strokeColor="#33FFFFFF" /> | |
75 | + <path | |
76 | + android:fillColor="#00000000" | |
77 | + android:pathData="M0,39L108,39" | |
78 | + android:strokeWidth="0.8" | |
79 | + android:strokeColor="#33FFFFFF" /> | |
80 | + <path | |
81 | + android:fillColor="#00000000" | |
82 | + android:pathData="M0,49L108,49" | |
83 | + android:strokeWidth="0.8" | |
84 | + android:strokeColor="#33FFFFFF" /> | |
85 | + <path | |
86 | + android:fillColor="#00000000" | |
87 | + android:pathData="M0,59L108,59" | |
88 | + android:strokeWidth="0.8" | |
89 | + android:strokeColor="#33FFFFFF" /> | |
90 | + <path | |
91 | + android:fillColor="#00000000" | |
92 | + android:pathData="M0,69L108,69" | |
93 | + android:strokeWidth="0.8" | |
94 | + android:strokeColor="#33FFFFFF" /> | |
95 | + <path | |
96 | + android:fillColor="#00000000" | |
97 | + android:pathData="M0,79L108,79" | |
98 | + android:strokeWidth="0.8" | |
99 | + android:strokeColor="#33FFFFFF" /> | |
100 | + <path | |
101 | + android:fillColor="#00000000" | |
102 | + android:pathData="M0,89L108,89" | |
103 | + android:strokeWidth="0.8" | |
104 | + android:strokeColor="#33FFFFFF" /> | |
105 | + <path | |
106 | + android:fillColor="#00000000" | |
107 | + android:pathData="M0,99L108,99" | |
108 | + android:strokeWidth="0.8" | |
109 | + android:strokeColor="#33FFFFFF" /> | |
110 | + <path | |
111 | + android:fillColor="#00000000" | |
112 | + android:pathData="M19,29L89,29" | |
113 | + android:strokeWidth="0.8" | |
114 | + android:strokeColor="#33FFFFFF" /> | |
115 | + <path | |
116 | + android:fillColor="#00000000" | |
117 | + android:pathData="M19,39L89,39" | |
118 | + android:strokeWidth="0.8" | |
119 | + android:strokeColor="#33FFFFFF" /> | |
120 | + <path | |
121 | + android:fillColor="#00000000" | |
122 | + android:pathData="M19,49L89,49" | |
123 | + android:strokeWidth="0.8" | |
124 | + android:strokeColor="#33FFFFFF" /> | |
125 | + <path | |
126 | + android:fillColor="#00000000" | |
127 | + android:pathData="M19,59L89,59" | |
128 | + android:strokeWidth="0.8" | |
129 | + android:strokeColor="#33FFFFFF" /> | |
130 | + <path | |
131 | + android:fillColor="#00000000" | |
132 | + android:pathData="M19,69L89,69" | |
133 | + android:strokeWidth="0.8" | |
134 | + android:strokeColor="#33FFFFFF" /> | |
135 | + <path | |
136 | + android:fillColor="#00000000" | |
137 | + android:pathData="M19,79L89,79" | |
138 | + android:strokeWidth="0.8" | |
139 | + android:strokeColor="#33FFFFFF" /> | |
140 | + <path | |
141 | + android:fillColor="#00000000" | |
142 | + android:pathData="M29,19L29,89" | |
143 | + android:strokeWidth="0.8" | |
144 | + android:strokeColor="#33FFFFFF" /> | |
145 | + <path | |
146 | + android:fillColor="#00000000" | |
147 | + android:pathData="M39,19L39,89" | |
148 | + android:strokeWidth="0.8" | |
149 | + android:strokeColor="#33FFFFFF" /> | |
150 | + <path | |
151 | + android:fillColor="#00000000" | |
152 | + android:pathData="M49,19L49,89" | |
153 | + android:strokeWidth="0.8" | |
154 | + android:strokeColor="#33FFFFFF" /> | |
155 | + <path | |
156 | + android:fillColor="#00000000" | |
157 | + android:pathData="M59,19L59,89" | |
158 | + android:strokeWidth="0.8" | |
159 | + android:strokeColor="#33FFFFFF" /> | |
160 | + <path | |
161 | + android:fillColor="#00000000" | |
162 | + android:pathData="M69,19L69,89" | |
163 | + android:strokeWidth="0.8" | |
164 | + android:strokeColor="#33FFFFFF" /> | |
165 | + <path | |
166 | + android:fillColor="#00000000" | |
167 | + android:pathData="M79,19L79,89" | |
168 | + android:strokeWidth="0.8" | |
169 | + android:strokeColor="#33FFFFFF" /> | |
170 | +</vector> |
app/src/main/res/drawable/ic_menu_camera.xml
... | ... | @@ -0,0 +1,12 @@ |
1 | +<vector xmlns:android="http://schemas.android.com/apk/res/android" | |
2 | + android:width="24dp" | |
3 | + android:height="24dp" | |
4 | + android:viewportWidth="24.0" | |
5 | + android:viewportHeight="24.0"> | |
6 | + <path | |
7 | + android:fillColor="#FF000000" | |
8 | + android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0" /> | |
9 | + <path | |
10 | + android:fillColor="#FF000000" | |
11 | + android:pathData="M9,2L7.17,4H4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2H9zm3,15c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z" /> | |
12 | +</vector> |
app/src/main/res/drawable/ic_menu_gallery.xml
... | ... | @@ -0,0 +1,9 @@ |
1 | +<vector xmlns:android="http://schemas.android.com/apk/res/android" | |
2 | + android:width="24dp" | |
3 | + android:height="24dp" | |
4 | + android:viewportWidth="24.0" | |
5 | + android:viewportHeight="24.0"> | |
6 | + <path | |
7 | + android:fillColor="#FF000000" | |
8 | + android:pathData="M22,16V4c0,-1.1 -0.9,-2 -2,-2H8c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2zm-11,-4l2.03,2.71L16,11l4,5H8l3,-4zM2,6v14c0,1.1 0.9,2 2,2h14v-2H4V6H2z" /> | |
9 | +</vector> |
app/src/main/res/drawable/ic_menu_slideshow.xml
... | ... | @@ -0,0 +1,9 @@ |
1 | +<vector xmlns:android="http://schemas.android.com/apk/res/android" | |
2 | + android:width="24dp" | |
3 | + android:height="24dp" | |
4 | + android:viewportWidth="24.0" | |
5 | + android:viewportHeight="24.0"> | |
6 | + <path | |
7 | + android:fillColor="#FF000000" | |
8 | + android:pathData="M4,6H2v14c0,1.1 0.9,2 2,2h14v-2H4V6zm16,-4H8c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2V4c0,-1.1 -0.9,-2 -2,-2zm-8,12.5v-9l6,4.5 -6,4.5z" /> | |
9 | +</vector> |
app/src/main/res/drawable/side_nav_bar.xml
... | ... | @@ -0,0 +1,9 @@ |
1 | +<shape xmlns:android="http://schemas.android.com/apk/res/android" | |
2 | + android:shape="rectangle"> | |
3 | + <gradient | |
4 | + android:angle="135" | |
5 | + android:centerColor="#009688" | |
6 | + android:endColor="#00695C" | |
7 | + android:startColor="#4DB6AC" | |
8 | + android:type="linear" /> | |
9 | +</shape> | |
0 | 10 | \ No newline at end of file |
app/src/main/res/layout/activity_main.xml
... | ... | @@ -0,0 +1,25 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
4 | + xmlns:tools="http://schemas.android.com/tools" | |
5 | + android:id="@+id/drawer_layout" | |
6 | + android:layout_width="match_parent" | |
7 | + android:layout_height="match_parent" | |
8 | + android:fitsSystemWindows="true" | |
9 | + tools:openDrawer="start"> | |
10 | + | |
11 | + <include | |
12 | + layout="@layout/app_bar_main" | |
13 | + android:layout_width="match_parent" | |
14 | + android:layout_height="match_parent" /> | |
15 | + | |
16 | + <com.google.android.material.navigation.NavigationView | |
17 | + android:id="@+id/nav_view" | |
18 | + android:layout_width="wrap_content" | |
19 | + android:layout_height="match_parent" | |
20 | + android:layout_gravity="start" | |
21 | + android:fitsSystemWindows="true" | |
22 | + app:headerLayout="@layout/nav_header_main" | |
23 | + app:menu="@menu/activity_main_drawer" /> | |
24 | + | |
25 | +</androidx.drawerlayout.widget.DrawerLayout> | |
0 | 26 | \ No newline at end of file |
app/src/main/res/layout/activity_mensaje.xml
... | ... | @@ -0,0 +1,9 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
4 | + xmlns:tools="http://schemas.android.com/tools" | |
5 | + android:layout_width="match_parent" | |
6 | + android:layout_height="match_parent" | |
7 | + tools:context=".ui.MensajeActivity"> | |
8 | + | |
9 | +</androidx.constraintlayout.widget.ConstraintLayout> | |
0 | 10 | \ No newline at end of file |
app/src/main/res/layout/app_bar_main.xml
... | ... | @@ -0,0 +1,26 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
4 | + xmlns:tools="http://schemas.android.com/tools" | |
5 | + android:layout_width="match_parent" | |
6 | + android:layout_height="match_parent" | |
7 | + tools:context=".MainActivity"> | |
8 | + | |
9 | + <com.google.android.material.appbar.AppBarLayout | |
10 | + android:layout_width="match_parent" | |
11 | + android:layout_height="wrap_content" | |
12 | + android:theme="@style/AppTheme.AppBarOverlay"> | |
13 | + | |
14 | + <androidx.appcompat.widget.Toolbar | |
15 | + android:id="@+id/toolbar" | |
16 | + android:layout_width="match_parent" | |
17 | + android:layout_height="?attr/actionBarSize" | |
18 | + android:background="?attr/colorPrimary" | |
19 | + app:popupTheme="@style/AppTheme.PopupOverlay" /> | |
20 | + | |
21 | + </com.google.android.material.appbar.AppBarLayout> | |
22 | + | |
23 | + <include layout="@layout/content_main" /> | |
24 | + | |
25 | + | |
26 | +</androidx.coordinatorlayout.widget.CoordinatorLayout> | |
0 | 27 | \ No newline at end of file |
app/src/main/res/layout/content_main.xml
... | ... | @@ -0,0 +1,32 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
4 | + xmlns:tools="http://schemas.android.com/tools" | |
5 | + android:layout_width="match_parent" | |
6 | + android:layout_height="match_parent" | |
7 | + app:layout_behavior="@string/appbar_scrolling_view_behavior" | |
8 | + tools:showIn="@layout/app_bar_main"> | |
9 | + | |
10 | + <fragment | |
11 | + android:id="@+id/nav_host_fragment" | |
12 | + android:name="androidx.navigation.fragment.NavHostFragment" | |
13 | + android:layout_width="match_parent" | |
14 | + android:layout_height="match_parent" | |
15 | + app:defaultNavHost="true" | |
16 | + app:layout_constraintLeft_toLeftOf="parent" | |
17 | + app:layout_constraintRight_toRightOf="parent" | |
18 | + app:layout_constraintTop_toTopOf="parent" | |
19 | + app:navGraph="@navigation/mobile_navigation" /> | |
20 | + | |
21 | +<!-- <fragment--> | |
22 | +<!-- android:id="@+id/fragmentoSecundario"--> | |
23 | +<!-- android:name="androidx.navigation.fragment.NavHostFragment"--> | |
24 | +<!-- android:layout_width="289dp"--> | |
25 | +<!-- android:layout_height="335dp"--> | |
26 | +<!-- app:layout_constraintBottom_toBottomOf="parent"--> | |
27 | +<!-- app:layout_constraintHorizontal_bias="0.497"--> | |
28 | +<!-- app:layout_constraintLeft_toLeftOf="parent"--> | |
29 | +<!-- app:layout_constraintRight_toRightOf="parent"--> | |
30 | +<!-- app:layout_constraintTop_toTopOf="parent"--> | |
31 | +<!-- app:layout_constraintVertical_bias="0.597" />--> | |
32 | +</androidx.constraintlayout.widget.ConstraintLayout> | |
0 | 33 | \ No newline at end of file |
app/src/main/res/layout/dialog_signin.xml
... | ... | @@ -0,0 +1,27 @@ |
1 | +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
2 | + android:orientation="vertical" | |
3 | + android:layout_width="wrap_content" | |
4 | + android:layout_height="wrap_content"> | |
5 | + | |
6 | + <EditText | |
7 | + android:id="@+id/username" | |
8 | + android:inputType="textEmailAddress" | |
9 | + android:layout_width="match_parent" | |
10 | + android:layout_height="wrap_content" | |
11 | + android:layout_marginTop="16dp" | |
12 | + android:layout_marginLeft="4dp" | |
13 | + android:layout_marginRight="4dp" | |
14 | + android:layout_marginBottom="4dp" | |
15 | + android:hint="" /> | |
16 | + <EditText | |
17 | + android:id="@+id/password" | |
18 | + android:inputType="textPassword" | |
19 | + android:layout_width="match_parent" | |
20 | + android:layout_height="wrap_content" | |
21 | + android:layout_marginTop="4dp" | |
22 | + android:layout_marginLeft="4dp" | |
23 | + android:layout_marginRight="4dp" | |
24 | + android:layout_marginBottom="16dp" | |
25 | + android:fontFamily="sans-serif" | |
26 | + android:hint=""/> | |
27 | +</LinearLayout> | |
0 | 28 | \ No newline at end of file |
app/src/main/res/layout/fragment_actua_maestros.xml
... | ... | @@ -0,0 +1,121 @@ |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
4 | + xmlns:tools="http://schemas.android.com/tools" | |
5 | + android:layout_width="match_parent" | |
6 | + android:layout_height="match_parent" | |
7 | + tools:context=".ui.actualizacionMaestros.ActuaMaestrosFragment"> | |
8 | + | |
9 | + | |
10 | + <androidx.appcompat.widget.AppCompatTextView | |
11 | + android:id="@+id/tvActMaestros" | |
12 | + android:layout_width="match_parent" | |
13 | + android:layout_height="wrap_content" | |
14 | + android:layout_marginTop="@dimen/MarginTopTitulos" | |
15 | + android:gravity="center" | |
16 | + | |
17 | + android:text="@string/tvActMaestros" | |
18 | + android:textColor="@color/colorAccent" | |
19 | + android:textSize="@dimen/Titulos" | |
20 | + app:fontFamily="sans-serif-condensed" | |
21 | + app:layout_constraintBottom_toTopOf="@+id/tvSeleccioneServidor" | |
22 | + app:layout_constraintEnd_toEndOf="parent" | |
23 | + app:layout_constraintStart_toStartOf="parent" | |
24 | + app:layout_constraintTop_toTopOf="parent" /> | |
25 | + | |
26 | + <TextView | |
27 | + android:id="@+id/tvSeleccioneServidor" | |
28 | + android:layout_width="0dp" | |
29 | + android:layout_height="wrap_content" | |
30 | + android:layout_margin="30dp" | |
31 | + android:gravity="center" | |
32 | + android:lines="2" | |
33 | + android:text="@string/tvMedio" | |
34 | + android:textColor="@android:color/black" | |
35 | + android:textSize="@dimen/SubTitulos" | |
36 | + app:fontFamily="sans-serif-condensed" | |
37 | + app:layout_constraintEnd_toEndOf="parent" | |
38 | + app:layout_constraintStart_toStartOf="parent" | |
39 | + app:layout_constraintTop_toBottomOf="@+id/tvActMaestros" /> | |
40 | + | |
41 | + <RadioGroup | |
42 | + android:id="@+id/rgTipoActualizacion" | |
43 | + android:layout_width="0dp" | |
44 | + android:layout_height="wrap_content" | |
45 | + android:layout_margin="25dp" | |
46 | + android:gravity="center" | |
47 | + android:orientation="horizontal" | |
48 | + app:layout_constraintEnd_toEndOf="parent" | |
49 | + app:layout_constraintStart_toStartOf="parent" | |
50 | + app:layout_constraintTop_toBottomOf="@+id/tvSeleccioneServidor"> | |
51 | + | |
52 | + <RadioButton | |
53 | + android:id="@+id/obPorWifi" | |
54 | + android:layout_width="wrap_content" | |
55 | + android:layout_height="wrap_content" | |
56 | + android:layout_margin="5dp" | |
57 | + android:checked="true" | |
58 | + android:padding="5dp" | |
59 | + android:text="@string/obPorWifi" | |
60 | + android:textSize="@dimen/NormalText" /> | |
61 | + | |
62 | + <RadioButton | |
63 | + android:id="@+id/obViaArchivo" | |
64 | + android:layout_width="wrap_content" | |
65 | + android:layout_height="wrap_content" | |
66 | + android:layout_margin="5dp" | |
67 | + android:checked="false" | |
68 | + android:padding="5dp" | |
69 | + android:text="@string/obViaArchivo" | |
70 | + android:textSize="@dimen/NormalText" /> | |
71 | + | |
72 | + | |
73 | + </RadioGroup> | |
74 | + | |
75 | + | |
76 | + <TextView | |
77 | + android:id="@+id/countriesList" | |
78 | + android:layout_width="0dp" | |
79 | + android:layout_height="wrap_content" | |
80 | + android:layout_marginTop="@dimen/MarginTopTitulos" | |
81 | + android:gravity="center" | |
82 | + android:text="" | |
83 | + android:textColor="@android:color/black" | |
84 | + android:textSize="@dimen/SubTitulos" | |
85 | + android:visibility="visible" | |
86 | + app:fontFamily="sans-serif-condensed" | |
87 | + app:layout_constraintBottom_toTopOf="@+id/btnConfirmarAct" | |
88 | + app:layout_constraintEnd_toEndOf="parent" | |
89 | + app:layout_constraintHorizontal_bias="0.0" | |
90 | + app:layout_constraintStart_toStartOf="parent" | |
91 | + app:layout_constraintTop_toBottomOf="@+id/rgTipoActualizacion" | |
92 | + app:layout_constraintVertical_bias="0.0" /> | |
93 | + | |
94 | + <Button | |
95 | + android:id="@+id/btnConfirmarAct" | |
96 | + android:layout_width="0dp" | |
97 | + android:layout_height="wrap_content" | |
98 | + android:layout_margin="20dp" | |
99 | + android:text="@string/btnConfirmarAct" | |
100 | + android:textSize="@dimen/NormalText" | |
101 | + app:layout_constraintBottom_toBottomOf="parent" | |
102 | + app:layout_constraintEnd_toEndOf="parent" | |
103 | + app:layout_constraintStart_toStartOf="parent" /> | |
104 | + | |
105 | + | |
106 | + <ProgressBar | |
107 | + android:id="@+id/loading_view" | |
108 | + android:layout_width="wrap_content" | |
109 | + android:layout_height="wrap_content" | |
110 | + android:layout_marginStart="8dp" | |
111 | + android:layout_marginLeft="8dp" | |
112 | + android:layout_marginTop="8dp" | |
113 | + android:layout_marginEnd="8dp" | |
114 | + android:layout_marginRight="8dp" | |
115 | + android:layout_marginBottom="8dp" | |
116 | + android:visibility="gone" | |
117 | + app:layout_constraintBottom_toBottomOf="parent" | |
118 | + app:layout_constraintEnd_toEndOf="parent" | |
119 | + app:layout_constraintStart_toStartOf="parent" | |
120 | + app:layout_constraintTop_toTopOf="parent" /> | |
121 | +</androidx.constraintlayout.widget.ConstraintLayout> |
app/src/main/res/layout/fragment_configuracion.xml
... | ... | @@ -0,0 +1,358 @@ |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
4 | + xmlns:tools="http://schemas.android.com/tools" | |
5 | + android:layout_width="match_parent" | |
6 | + android:layout_height="wrap_content" | |
7 | + tools:context=".ui.configuracion.ConfiguracionFragment"> | |
8 | + | |
9 | + | |
10 | + <androidx.appcompat.widget.AppCompatTextView | |
11 | + android:id="@+id/textView2" | |
12 | + android:layout_width="match_parent" | |
13 | + android:layout_height="wrap_content" | |
14 | + | |
15 | + android:layout_marginTop="@dimen/MarginTopTitulos" | |
16 | + android:gravity="center" | |
17 | + | |
18 | + android:lines="1" | |
19 | + android:text="@string/tvTituloConf" | |
20 | + android:textColor="@color/colorAccent" | |
21 | + android:textSize="@dimen/Titulos" | |
22 | + app:fontFamily="sans-serif-condensed" | |
23 | + app:layout_constraintBottom_toTopOf="@+id/tvSeleccioneServidor" | |
24 | + app:layout_constraintEnd_toEndOf="parent" | |
25 | + app:layout_constraintStart_toStartOf="parent" | |
26 | + app:layout_constraintTop_toTopOf="parent" /> | |
27 | + | |
28 | + <TextView | |
29 | + android:id="@+id/tvSeleccioneServidor" | |
30 | + android:layout_width="0dp" | |
31 | + android:layout_height="wrap_content" | |
32 | + | |
33 | + android:layout_marginStart="@dimen/MarginBotAgreSer" | |
34 | + android:layout_marginTop="@dimen/MarginTopSubTitulos" | |
35 | + android:gravity="start" | |
36 | + android:lines="1" | |
37 | + android:text="@string/tvSeleccioneServidor" | |
38 | + android:textColor="@android:color/black" | |
39 | + android:textSize="@dimen/SubTitulos" | |
40 | + app:fontFamily="sans-serif-condensed" | |
41 | + app:layout_constraintBottom_toTopOf="@+id/spServidor" | |
42 | + app:layout_constraintEnd_toEndOf="parent" | |
43 | + app:layout_constraintStart_toStartOf="parent" | |
44 | + app:layout_constraintTop_toBottomOf="@+id/textView2" /> | |
45 | + | |
46 | + <Spinner | |
47 | + android:id="@+id/spServidor" | |
48 | + android:layout_width="0dp" | |
49 | + android:layout_height="wrap_content" | |
50 | + android:backgroundTint="@color/LightGray" | |
51 | + android:elevation="5dp" | |
52 | + android:fadeScrollbars="true" | |
53 | + android:foregroundTint="@android:color/holo_orange_dark" | |
54 | + android:soundEffectsEnabled="true" | |
55 | + android:spinnerMode="dialog" | |
56 | + android:splitMotionEvents="false" | |
57 | + android:textAlignment="center" | |
58 | + android:textSize="@dimen/NormalText" | |
59 | + app:layout_constraintBottom_toTopOf="@+id/btnAgregarServidor" | |
60 | + app:layout_constraintEnd_toStartOf="@+id/btnValidarServidor" | |
61 | + app:layout_constraintHorizontal_chainStyle="packed" | |
62 | + app:layout_constraintStart_toStartOf="parent" | |
63 | + app:layout_constraintTop_toBottomOf="@+id/tvSeleccioneServidor" | |
64 | + android:entries="@array/spinnerServidor" | |
65 | + android:prompt="@string/leyendaSpinner"/> | |
66 | + | |
67 | + <Button | |
68 | + android:id="@+id/btnValidarServidor" | |
69 | + android:layout_width="wrap_content" | |
70 | + android:layout_height="wrap_content" | |
71 | + | |
72 | + android:text="@string/btnValidarServidor" | |
73 | + android:textSize="@dimen/NormalText" | |
74 | + app:layout_constraintBottom_toTopOf="@+id/btnAgregarServidor" | |
75 | + app:layout_constraintEnd_toEndOf="parent" | |
76 | + app:layout_constraintHorizontal_chainStyle="packed" | |
77 | + app:layout_constraintStart_toEndOf="@id/spServidor" | |
78 | + app:layout_constraintTop_toBottomOf="@+id/tvSeleccioneServidor" /> | |
79 | + | |
80 | + <Button | |
81 | + android:id="@+id/btnAgregarServidor" | |
82 | + android:layout_width="0dp" | |
83 | + android:layout_height="wrap_content" | |
84 | + android:layout_marginStart="@dimen/MarginBotAgreSer" | |
85 | + android:layout_marginEnd="@dimen/MarginBotAgreSer" | |
86 | + android:text="@string/btnAgregarServidor" | |
87 | + android:textSize="@dimen/NormalText" | |
88 | + app:layout_constraintBottom_toTopOf="@+id/tvUbicacionCarpetas" | |
89 | + app:layout_constraintEnd_toEndOf="parent" | |
90 | + app:layout_constraintStart_toStartOf="parent" | |
91 | + app:layout_constraintTop_toBottomOf="@+id/btnValidarServidor" /> | |
92 | + | |
93 | + | |
94 | + <TextView | |
95 | + android:id="@+id/tvUbicacionCarpetas" | |
96 | + android:layout_width="0dp" | |
97 | + android:layout_height="wrap_content" | |
98 | + | |
99 | + android:layout_marginStart="@dimen/MarginBotAgreSer" | |
100 | + android:layout_marginTop="@dimen/MarginTopSubTitulos" | |
101 | + android:gravity="start" | |
102 | + android:lines="1" | |
103 | + android:text="@string/tvUbicacionCarpetas" | |
104 | + android:textColor="@android:color/black" | |
105 | + android:textSize="@dimen/SubTitulos" | |
106 | + app:fontFamily="sans-serif-condensed" | |
107 | + app:layout_constraintBottom_toTopOf="@+id/ibSearch" | |
108 | + app:layout_constraintEnd_toEndOf="parent" | |
109 | + app:layout_constraintStart_toStartOf="parent" | |
110 | + app:layout_constraintTop_toBottomOf="@+id/btnAgregarServidor" /> | |
111 | + | |
112 | + <ImageButton | |
113 | + android:id="@+id/ibSearch" | |
114 | + android:layout_width="36dp" | |
115 | + android:layout_height="37dp" | |
116 | + android:layout_margin="10dp" | |
117 | + android:src="@drawable/search" | |
118 | + app:layout_constraintEnd_toStartOf="@+id/etRuta" | |
119 | + app:layout_constraintStart_toStartOf="parent" | |
120 | + app:layout_constraintTop_toBottomOf="@+id/tvUbicacionCarpetas" /> | |
121 | + | |
122 | + <EditText | |
123 | + android:id="@+id/etRuta" | |
124 | + android:layout_width="0dp" | |
125 | + android:layout_height="wrap_content" | |
126 | + android:layout_marginTop="10dp" | |
127 | + android:layout_marginEnd="10dp" | |
128 | + android:clickable="true" | |
129 | + android:ems="10" | |
130 | + android:focusable="true" | |
131 | + android:inputType="textPersonName" | |
132 | + android:lines="1" | |
133 | + android:text="" | |
134 | + android:textSize="@dimen/NormalText" | |
135 | + app:layout_constraintEnd_toEndOf="parent" | |
136 | + app:layout_constraintStart_toEndOf="@id/ibSearch" | |
137 | + app:layout_constraintTop_toBottomOf="@+id/tvUbicacionCarpetas" /> | |
138 | + | |
139 | + <TextView | |
140 | + android:id="@+id/tvActuFecha" | |
141 | + android:layout_width="0dp" | |
142 | + android:layout_height="wrap_content" | |
143 | + android:layout_marginStart="@dimen/MarginBotAgreSer" | |
144 | + android:layout_marginTop="@dimen/MarginTopSubTitulos" | |
145 | + android:gravity="start" | |
146 | + android:lines="1" | |
147 | + android:text="@string/tvTituloArea" | |
148 | + android:textColor="@android:color/black" | |
149 | + android:textSize="@dimen/SubTitulos" | |
150 | + app:fontFamily="sans-serif-condensed" | |
151 | + app:layout_constraintEnd_toEndOf="parent" | |
152 | + app:layout_constraintStart_toStartOf="parent" | |
153 | + app:layout_constraintTop_toBottomOf="@+id/etRuta" /> | |
154 | + | |
155 | + <RadioGroup | |
156 | + android:id="@+id/rgFechaHora" | |
157 | + android:layout_width="0dp" | |
158 | + android:layout_height="wrap_content" | |
159 | + | |
160 | + android:gravity="center" | |
161 | + android:orientation="horizontal" | |
162 | + app:layout_constraintEnd_toEndOf="parent" | |
163 | + app:layout_constraintStart_toStartOf="parent" | |
164 | + app:layout_constraintTop_toBottomOf="@+id/tvActuFecha"> | |
165 | + | |
166 | + <RadioButton | |
167 | + android:id="@+id/rbVentas" | |
168 | + android:layout_width="wrap_content" | |
169 | + android:layout_height="wrap_content" | |
170 | + android:layout_margin="5dp" | |
171 | + android:checked="true" | |
172 | + android:padding="5dp" | |
173 | + android:text="@string/rbVentas" | |
174 | + android:textSize="@dimen/NormalText" /> | |
175 | + | |
176 | + <RadioButton | |
177 | + android:id="@+id/rbDeposito" | |
178 | + android:layout_width="wrap_content" | |
179 | + android:layout_height="wrap_content" | |
180 | + android:layout_margin="5dp" | |
181 | + android:checked="false" | |
182 | + android:padding="5dp" | |
183 | + android:text="@string/rbDeposito" | |
184 | + android:textSize="@dimen/NormalText" /> | |
185 | + | |
186 | + </RadioGroup> | |
187 | + | |
188 | + <TextView | |
189 | + android:id="@+id/tvLosProductos" | |
190 | + android:layout_width="0dp" | |
191 | + android:layout_height="wrap_content" | |
192 | + | |
193 | + android:layout_marginStart="@dimen/MarginBotAgreSer" | |
194 | + android:layout_marginEnd="@dimen/MarginTopSubTitulos" | |
195 | + android:gravity="start" | |
196 | + android:lines="1" | |
197 | + android:text="@string/tvLosProductos" | |
198 | + android:textColor="@android:color/black" | |
199 | + android:textSize="@dimen/SubTitulos" | |
200 | + app:fontFamily="sans-serif-condensed" | |
201 | + app:layout_constraintEnd_toEndOf="parent" | |
202 | + app:layout_constraintStart_toStartOf="parent" | |
203 | + app:layout_constraintTop_toBottomOf="@+id/rgFechaHora" /> | |
204 | + | |
205 | + <RadioGroup | |
206 | + android:id="@+id/rgLosProductos" | |
207 | + android:layout_width="0dp" | |
208 | + android:layout_height="wrap_content" | |
209 | + | |
210 | + android:gravity="center" | |
211 | + android:orientation="vertical" | |
212 | + app:layout_constraintEnd_toEndOf="parent" | |
213 | + app:layout_constraintStart_toStartOf="parent" | |
214 | + app:layout_constraintTop_toBottomOf="@+id/tvLosProductos"> | |
215 | + | |
216 | + <RadioButton | |
217 | + android:id="@+id/rbProInclu" | |
218 | + android:layout_width="match_parent" | |
219 | + android:layout_height="wrap_content" | |
220 | + | |
221 | + android:layout_margin="@dimen/PadingCbyRb" | |
222 | + android:checked="true" | |
223 | + android:padding="@dimen/PadingCbyRb" | |
224 | + android:text="@string/rbProInclu" | |
225 | + android:textSize="@dimen/NormalText" /> | |
226 | + | |
227 | + <RadioButton | |
228 | + android:id="@+id/rbProNoInclu" | |
229 | + android:layout_width="match_parent" | |
230 | + android:layout_height="wrap_content" | |
231 | + android:layout_margin="@dimen/PadingCbyRb" | |
232 | + android:checked="false" | |
233 | + android:padding="@dimen/PadingCbyRb" | |
234 | + android:text="@string/rbProNoInclu" | |
235 | + android:textSize="@dimen/NormalText" /> | |
236 | + | |
237 | + </RadioGroup> | |
238 | + | |
239 | + <CheckBox | |
240 | + android:id="@+id/cbHabiLectura" | |
241 | + android:layout_width="0dp" | |
242 | + android:layout_height="wrap_content" | |
243 | + android:layout_margin="@dimen/PadingCbyRb" | |
244 | + android:padding="@dimen/PadingCbyRb" | |
245 | + android:text="@string/cbHabiLectura" | |
246 | + android:textSize="@dimen/NormalText" | |
247 | + app:layout_constraintEnd_toEndOf="parent" | |
248 | + app:layout_constraintStart_toStartOf="parent" | |
249 | + app:layout_constraintTop_toBottomOf="@+id/rgLosProductos" /> | |
250 | + | |
251 | + <CheckBox | |
252 | + android:id="@+id/cbMostrarStock" | |
253 | + android:layout_width="0dp" | |
254 | + android:layout_height="wrap_content" | |
255 | + android:layout_margin="@dimen/PadingCbyRb" | |
256 | + android:padding="@dimen/PadingCbyRb" | |
257 | + android:text="@string/cbMostrarStock" | |
258 | + android:textSize="@dimen/NormalText" | |
259 | + app:layout_constraintEnd_toEndOf="parent" | |
260 | + app:layout_constraintStart_toStartOf="parent" | |
261 | + app:layout_constraintTop_toBottomOf="@+id/cbHabiLectura" /> | |
262 | + | |
263 | + <TextView | |
264 | + android:id="@+id/tvColumMostrar" | |
265 | + android:layout_width="0dp" | |
266 | + android:layout_height="wrap_content" | |
267 | + | |
268 | + android:layout_marginStart="@dimen/MarginBotAgreSer" | |
269 | + android:layout_marginEnd="@dimen/MarginTopSubTitulos" | |
270 | + android:gravity="start" | |
271 | + android:lines="1" | |
272 | + android:text="@string/tvColumMostrar" | |
273 | + android:textColor="@android:color/black" | |
274 | + android:textSize="@dimen/SubTitulos" | |
275 | + app:fontFamily="sans-serif-condensed" | |
276 | + app:layout_constraintEnd_toEndOf="parent" | |
277 | + app:layout_constraintStart_toStartOf="parent" | |
278 | + app:layout_constraintTop_toBottomOf="@+id/cbMostrarStock" /> | |
279 | + | |
280 | + <RadioGroup | |
281 | + android:id="@+id/rgCodigosMostrar" | |
282 | + android:layout_width="0dp" | |
283 | + android:layout_height="wrap_content" | |
284 | + | |
285 | + android:gravity="center" | |
286 | + android:orientation="horizontal" | |
287 | + app:layout_constraintEnd_toEndOf="parent" | |
288 | + app:layout_constraintStart_toStartOf="parent" | |
289 | + app:layout_constraintTop_toBottomOf="@+id/tvColumMostrar"> | |
290 | + | |
291 | + <RadioButton | |
292 | + android:id="@+id/rbCodigoDebo" | |
293 | + android:layout_width="wrap_content" | |
294 | + android:layout_height="wrap_content" | |
295 | + android:layout_margin="5dp" | |
296 | + android:checked="true" | |
297 | + android:padding="5dp" | |
298 | + android:text="@string/rbCodigoDebo" | |
299 | + android:textSize="@dimen/NormalText" /> | |
300 | + | |
301 | + <RadioButton | |
302 | + android:id="@+id/rbCodigoOrigen" | |
303 | + android:layout_width="wrap_content" | |
304 | + android:layout_height="wrap_content" | |
305 | + android:layout_margin="5dp" | |
306 | + android:checked="false" | |
307 | + android:padding="5dp" | |
308 | + android:text="@string/rbCodigoOrigen" | |
309 | + android:textSize="@dimen/NormalText" /> | |
310 | + | |
311 | + <RadioButton | |
312 | + android:id="@+id/rbCodigoBarras" | |
313 | + android:layout_width="wrap_content" | |
314 | + android:layout_height="wrap_content" | |
315 | + android:layout_margin="5dp" | |
316 | + android:padding="5dp" | |
317 | + android:text="@string/rbCodigoBarras" | |
318 | + android:textSize="@dimen/NormalText" /> | |
319 | + </RadioGroup> | |
320 | + | |
321 | + <CheckBox | |
322 | + android:id="@+id/cbMostrarExistencia" | |
323 | + android:layout_width="wrap_content" | |
324 | + android:layout_height="wrap_content" | |
325 | + android:layout_margin="@dimen/PadingCbyRb" | |
326 | + android:padding="@dimen/PadingCbyRb" | |
327 | + android:text="@string/cbMostrarExistencia" | |
328 | + android:textSize="@dimen/NormalText" | |
329 | + android:checked="false" | |
330 | + app:layout_constraintEnd_toStartOf="@+id/cbMostrarPrecio" | |
331 | + app:layout_constraintStart_toStartOf="parent" | |
332 | + app:layout_constraintTop_toBottomOf="@+id/rgCodigosMostrar" /> | |
333 | + | |
334 | + <CheckBox | |
335 | + android:id="@+id/cbMostrarPrecio" | |
336 | + android:layout_width="wrap_content" | |
337 | + android:layout_height="wrap_content" | |
338 | + android:layout_margin="@dimen/PadingCbyRb" | |
339 | + android:padding="@dimen/PadingCbyRb" | |
340 | + android:text="@string/cbMostrarPrecio" | |
341 | + android:textSize="@dimen/NormalText" | |
342 | + android:checked="false" | |
343 | + app:layout_constraintEnd_toEndOf="parent" | |
344 | + app:layout_constraintStart_toEndOf="@+id/cbMostrarExistencia" | |
345 | + app:layout_constraintTop_toBottomOf="@+id/rgCodigosMostrar" /> | |
346 | + | |
347 | + <Button | |
348 | + android:id="@+id/btnGuardar" | |
349 | + android:layout_width="wrap_content" | |
350 | + android:layout_height="wrap_content" | |
351 | + android:text="@string/btnGuardar" | |
352 | + android:textSize="@dimen/NormalText" | |
353 | + app:layout_constraintEnd_toEndOf="parent" | |
354 | + | |
355 | + app:layout_constraintStart_toStartOf="parent" | |
356 | + app:layout_constraintTop_toBottomOf="@+id/cbMostrarPrecio" /> | |
357 | +</androidx.constraintlayout.widget.ConstraintLayout> | |
358 | + |
app/src/main/res/layout/fragment_descripcion.xml
... | ... | @@ -0,0 +1,56 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | + | |
3 | + | |
4 | + <androidx.constraintlayout.widget.ConstraintLayout | |
5 | + xmlns:android="http://schemas.android.com/apk/res/android" | |
6 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
7 | + xmlns:tools="http://schemas.android.com/tools" | |
8 | + android:layout_width="match_parent" | |
9 | + android:layout_height="match_parent" | |
10 | + tools:context=".ui.inventario.DescripcionFragment"> | |
11 | + | |
12 | + | |
13 | + <androidx.recyclerview.widget.RecyclerView | |
14 | + android:id="@+id/rcDescripcion" | |
15 | + android:layout_width="match_parent" | |
16 | + android:layout_height="0dp" | |
17 | + android:background="@android:color/darker_gray" | |
18 | + android:scrollbars="vertical" | |
19 | +app:layout_constraintTop_toBottomOf="@id/guideline4" | |
20 | + app:layout_constraintBottom_toTopOf="@+id/guideline5" | |
21 | + app:layout_constraintEnd_toEndOf="parent" | |
22 | + app:layout_constraintStart_toStartOf="parent" | |
23 | + tools:listitem="@layout/item" /> | |
24 | + | |
25 | + <Button | |
26 | + android:id="@+id/btnSalir" | |
27 | + android:layout_width="0dp" | |
28 | + android:layout_height="wrap_content" | |
29 | + android:text="@string/btnCancelar" | |
30 | + app:layout_constraintBottom_toBottomOf="@+id/guideline6" | |
31 | + app:layout_constraintEnd_toEndOf="parent" | |
32 | + app:layout_constraintHorizontal_chainStyle="spread" | |
33 | + app:layout_constraintStart_toStartOf="parent" | |
34 | + app:layout_constraintTop_toBottomOf="@+id/rcInventarios" /> | |
35 | + | |
36 | + <androidx.constraintlayout.widget.Guideline | |
37 | + android:id="@+id/guideline4" | |
38 | + android:layout_width="wrap_content" | |
39 | + android:layout_height="wrap_content" | |
40 | + android:orientation="horizontal" | |
41 | + app:layout_constraintGuide_percent="0.06" /> | |
42 | + | |
43 | + <androidx.constraintlayout.widget.Guideline | |
44 | + android:id="@+id/guideline5" | |
45 | + android:layout_width="wrap_content" | |
46 | + android:layout_height="wrap_content" | |
47 | + android:orientation="horizontal" | |
48 | + app:layout_constraintGuide_percent="0.88" /> | |
49 | + | |
50 | + <androidx.constraintlayout.widget.Guideline | |
51 | + android:id="@+id/guideline6" | |
52 | + android:layout_width="wrap_content" | |
53 | + android:layout_height="wrap_content" | |
54 | + android:orientation="horizontal" | |
55 | + app:layout_constraintGuide_percent="0.97" /> | |
56 | + </androidx.constraintlayout.widget.ConstraintLayout> |
app/src/main/res/layout/fragment_inventario.xml
... | ... | @@ -0,0 +1,178 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<androidx.constraintlayout.widget.ConstraintLayout | |
3 | + xmlns:android="http://schemas.android.com/apk/res/android" | |
4 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
5 | + xmlns:tools="http://schemas.android.com/tools" | |
6 | + android:id="@+id/frameLayout" | |
7 | + android:layout_width="match_parent" | |
8 | + android:layout_height="match_parent" | |
9 | + tools:context=".ui.inventario.InventarioFragment"> | |
10 | + | |
11 | + | |
12 | + <androidx.appcompat.widget.AppCompatTextView | |
13 | + android:id="@+id/tvTitulo" | |
14 | + android:layout_width="match_parent" | |
15 | + android:layout_height="90dp" | |
16 | + android:layout_marginStart="8dp" | |
17 | + android:layout_marginTop="15dp" | |
18 | + android:layout_marginEnd="8dp" | |
19 | + android:autoSizeMaxTextSize="100sp" | |
20 | + android:autoSizeMinTextSize="20sp" | |
21 | + android:autoSizeStepGranularity="5sp" | |
22 | + android:autoSizeTextType="uniform" | |
23 | + android:gravity="center" | |
24 | + android:lines="1" | |
25 | + android:text="@string/invTitulo" | |
26 | + android:textColor="@color/colorAccent" | |
27 | + app:fontFamily="sans-serif-condensed" | |
28 | + app:layout_constraintBottom_toTopOf="@id/guideline2" | |
29 | + app:layout_constraintEnd_toEndOf="parent" | |
30 | + app:layout_constraintStart_toStartOf="parent" | |
31 | + app:layout_constraintTop_toTopOf="@id/guideline" /> | |
32 | + | |
33 | + | |
34 | + <androidx.appcompat.widget.AppCompatTextView | |
35 | + android:id="@+id/tvCodigoBarras" | |
36 | + android:layout_width="wrap_content" | |
37 | + android:layout_height="wrap_content" | |
38 | + android:layout_marginStart="5dp" | |
39 | + android:text="@string/invCodigoBarras" | |
40 | + android:textColor="@color/colorAccent" | |
41 | + android:textSize="@dimen/subTitulos" | |
42 | + app:fontFamily="sans-serif-condensed" | |
43 | + app:layout_constraintBottom_toTopOf="@+id/guideline3" | |
44 | + app:layout_constraintEnd_toStartOf="@+id/etCodigoBarras" | |
45 | + app:layout_constraintHorizontal_bias="0.0" | |
46 | + app:layout_constraintHorizontal_chainStyle="packed" | |
47 | + app:layout_constraintStart_toStartOf="parent" | |
48 | + app:layout_constraintTop_toTopOf="@id/guideline2" /> | |
49 | + | |
50 | + <EditText | |
51 | + android:id="@+id/etCodigoBarras" | |
52 | + android:layout_width="wrap_content" | |
53 | + android:layout_height="wrap_content" | |
54 | + android:clickable="true" | |
55 | + android:ems="10" | |
56 | + android:focusable="true" | |
57 | + android:textAllCaps="true" | |
58 | + android:inputType="textPersonName" | |
59 | + android:lines="1" | |
60 | + android:text="" | |
61 | + android:textSize="20sp" | |
62 | + app:layout_constraintBaseline_toBaselineOf="@+id/tvCodigoBarras" | |
63 | + app:layout_constraintEnd_toEndOf="parent" | |
64 | + app:layout_constraintHorizontal_chainStyle="packed" | |
65 | + app:layout_constraintStart_toEndOf="@id/tvCodigoBarras" | |
66 | + android:autofillHints="" /> | |
67 | + | |
68 | + <Switch | |
69 | + android:id="@+id/swSumaUno" | |
70 | + android:layout_width="wrap_content" | |
71 | + android:layout_height="wrap_content" | |
72 | + android:layout_marginStart="5dp" | |
73 | + android:text="@string/switch_1" | |
74 | + app:layout_constraintBottom_toTopOf="@+id/guideline3" | |
75 | + app:layout_constraintEnd_toEndOf="parent" | |
76 | + app:layout_constraintStart_toEndOf="@id/etCodigoBarras" | |
77 | + app:layout_constraintTop_toTopOf="@id/guideline2" | |
78 | + tools:ignore="UseSwitchCompatOrMaterialXml" /> | |
79 | + | |
80 | + <ImageButton | |
81 | + android:id="@+id/ivCamara" | |
82 | + android:layout_width="74dp" | |
83 | + android:layout_height="wrap_content" | |
84 | + android:layout_margin="10dp" | |
85 | + android:clickable="true" | |
86 | + android:contentDescription="TODO" | |
87 | + android:src="@drawable/camera" | |
88 | + app:layout_constraintBottom_toTopOf="@+id/guideline4" | |
89 | + app:layout_constraintStart_toStartOf="parent" | |
90 | + app:layout_constraintTop_toTopOf="@id/guideline3" /> | |
91 | + | |
92 | + <androidx.recyclerview.widget.RecyclerView | |
93 | + android:id="@+id/rcInventarios" | |
94 | + android:layout_width="match_parent" | |
95 | + android:layout_height="0dp" | |
96 | + android:background="@android:color/darker_gray" | |
97 | + app:layout_constraintBottom_toBottomOf="@+id/guideline5" | |
98 | + app:layout_constraintEnd_toEndOf="parent" | |
99 | + app:layout_constraintStart_toStartOf="parent" | |
100 | + tools:listitem="@layout/item" | |
101 | + app:layout_constraintTop_toBottomOf="@+id/guideline4" /> | |
102 | + | |
103 | + | |
104 | + <Button | |
105 | + android:id="@+id/btnExportarInv" | |
106 | + android:layout_width="wrap_content" | |
107 | + android:layout_height="wrap_content" | |
108 | + android:text="@string/btnExportarInv" | |
109 | + app:layout_constraintBottom_toBottomOf="@+id/guideline6" | |
110 | + app:layout_constraintEnd_toEndOf="parent" | |
111 | + app:layout_constraintHorizontal_chainStyle="spread" | |
112 | + app:layout_constraintStart_toEndOf="@+id/btnBorrarInv" | |
113 | + app:layout_constraintTop_toBottomOf="@+id/guideline5" /> | |
114 | + | |
115 | + <Button | |
116 | + android:id="@+id/btnBorrarInv" | |
117 | + android:layout_width="wrap_content" | |
118 | + android:layout_height="wrap_content" | |
119 | + android:text="@string/btnBorrarInv" | |
120 | + app:layout_constraintBottom_toBottomOf="@+id/guideline6" | |
121 | + app:layout_constraintEnd_toStartOf="@id/btnExportarInv" | |
122 | + app:layout_constraintHorizontal_chainStyle="spread" | |
123 | + app:layout_constraintStart_toStartOf="parent" | |
124 | + app:layout_constraintTop_toBottomOf="@+id/guideline5" /> | |
125 | + | |
126 | + <androidx.constraintlayout.widget.Guideline | |
127 | + android:id="@+id/guideline" | |
128 | + android:layout_width="wrap_content" | |
129 | + android:layout_height="wrap_content" | |
130 | + android:orientation="horizontal" | |
131 | + app:layout_constraintGuide_percent="0.05" /> | |
132 | + | |
133 | + <androidx.constraintlayout.widget.Guideline | |
134 | + android:id="@+id/guideline2" | |
135 | + android:layout_width="wrap_content" | |
136 | + android:layout_height="wrap_content" | |
137 | + android:orientation="horizontal" | |
138 | + app:layout_constraintGuide_percent="0.15" /> | |
139 | + | |
140 | + <androidx.constraintlayout.widget.Guideline | |
141 | + android:id="@+id/guideline3" | |
142 | + android:layout_width="wrap_content" | |
143 | + android:layout_height="wrap_content" | |
144 | + android:orientation="horizontal" | |
145 | + app:layout_constraintGuide_percent="0.25" /> | |
146 | + | |
147 | + <androidx.constraintlayout.widget.Guideline | |
148 | + android:id="@+id/guideline4" | |
149 | + android:layout_width="wrap_content" | |
150 | + android:layout_height="wrap_content" | |
151 | + android:orientation="horizontal" | |
152 | + app:layout_constraintGuide_percent="0.35" /> | |
153 | + | |
154 | + <androidx.constraintlayout.widget.Guideline | |
155 | + android:id="@+id/guideline5" | |
156 | + android:layout_width="wrap_content" | |
157 | + android:layout_height="wrap_content" | |
158 | + android:orientation="horizontal" | |
159 | + app:layout_constraintGuide_percent="0.88" /> | |
160 | + | |
161 | + <androidx.constraintlayout.widget.Guideline | |
162 | + android:id="@+id/guideline6" | |
163 | + android:layout_width="wrap_content" | |
164 | + android:layout_height="wrap_content" | |
165 | + android:orientation="horizontal" | |
166 | + app:layout_constraintGuide_percent="0.97" /> | |
167 | + | |
168 | + <ToggleButton | |
169 | + android:id="@+id/toggleButton" | |
170 | + android:layout_width="wrap_content" | |
171 | + android:layout_height="wrap_content" | |
172 | + android:text="ToggleButton" | |
173 | + app:layout_constraintBottom_toTopOf="@+id/rcInventarios" | |
174 | + app:layout_constraintEnd_toEndOf="parent" | |
175 | + app:layout_constraintStart_toEndOf="@+id/ivCamara" /> | |
176 | + | |
177 | + | |
178 | +</androidx.constraintlayout.widget.ConstraintLayout> | |
0 | 179 | \ No newline at end of file |
app/src/main/res/layout/fragment_main.xml
... | ... | @@ -0,0 +1,303 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
4 | + xmlns:tools="http://schemas.android.com/tools" | |
5 | + android:layout_width="match_parent" | |
6 | + android:layout_height="match_parent" | |
7 | + tools:context=".ui.main.MainFragment"> | |
8 | + | |
9 | + <androidx.appcompat.widget.AppCompatTextView | |
10 | + android:id="@+id/txtVentas" | |
11 | + android:layout_width="match_parent" | |
12 | + android:layout_height="90dp" | |
13 | + android:autoSizeMaxTextSize="150sp" | |
14 | + android:autoSizeMinTextSize="25sp" | |
15 | + android:autoSizeStepGranularity="5sp" | |
16 | + android:autoSizeTextType="uniform" | |
17 | + android:gravity="center" | |
18 | + android:padding="10dp" | |
19 | + android:text="@string/invDinamicoVenta" | |
20 | + android:textColor="@color/colorAccent" | |
21 | + app:fontFamily="sans-serif" | |
22 | + app:layout_constraintBottom_toTopOf="@+id/guideline" | |
23 | + app:layout_constraintEnd_toEndOf="parent" | |
24 | + app:layout_constraintStart_toStartOf="parent" | |
25 | + app:layout_constraintTop_toTopOf="@+id/guideline0" /> | |
26 | + | |
27 | + <ScrollView | |
28 | + android:id="@+id/scrollView" | |
29 | + android:layout_width="match_parent" | |
30 | + android:layout_height="0dp" | |
31 | + android:layout_margin="10dp" | |
32 | + android:layout_marginTop="4dp" | |
33 | + android:background="@android:color/darker_gray" | |
34 | + android:elevation="10dp" | |
35 | + android:scrollbarStyle="insideOverlay" | |
36 | + app:layout_constraintBottom_toTopOf="@+id/guideline2" | |
37 | + app:layout_constraintCircleRadius="10dp" | |
38 | + app:layout_constraintEnd_toEndOf="parent" | |
39 | + app:layout_constraintStart_toStartOf="parent" | |
40 | + app:layout_constraintTop_toTopOf="@+id/guideline" | |
41 | + app:layout_constraintVertical_bias="0.512"> | |
42 | + | |
43 | + <GridLayout | |
44 | + android:id="@+id/tableLayout" | |
45 | + android:layout_width="match_parent" | |
46 | + android:layout_height="wrap_content" | |
47 | + android:alignmentMode="alignMargins" | |
48 | + android:columnCount="2" | |
49 | + android:padding="15dp" | |
50 | + android:rowCount="2"> | |
51 | + | |
52 | + <androidx.recyclerview.widget.RecyclerView | |
53 | + android:id="@+id/rcInventario" | |
54 | + android:layout_width="match_parent" | |
55 | + android:layout_height="wrap_content" | |
56 | + android:background="@android:color/darker_gray" | |
57 | + android:scrollbars="vertical" | |
58 | + app:layout_constraintTop_toBottomOf="@id/guideline4" | |
59 | + app:layout_constraintBottom_toTopOf="@+id/guideline5" | |
60 | + app:layout_constraintEnd_toEndOf="parent" | |
61 | + app:layout_constraintStart_toStartOf="parent" | |
62 | + tools:listitem="@layout/item_principal" /> | |
63 | + </GridLayout> | |
64 | + </ScrollView> | |
65 | + | |
66 | + <androidx.appcompat.widget.AppCompatTextView | |
67 | + android:id="@+id/txtDeposito" | |
68 | + android:layout_width="419dp" | |
69 | + android:layout_height="90dp" | |
70 | + android:autoSizeMaxTextSize="150sp" | |
71 | + android:autoSizeMinTextSize="25sp" | |
72 | + android:autoSizeStepGranularity="5sp" | |
73 | + android:autoSizeTextType="uniform" | |
74 | + android:gravity="center" | |
75 | + android:lines="1" | |
76 | + android:padding="10dp" | |
77 | + android:text="@string/invDinamicoCompra" | |
78 | + android:textColor="@color/colorAccent" | |
79 | + | |
80 | + app:fontFamily="sans-serif-condensed" | |
81 | + app:layout_constraintBottom_toTopOf="@id/guideline3" | |
82 | + app:layout_constraintEnd_toEndOf="parent" | |
83 | + app:layout_constraintStart_toStartOf="parent" | |
84 | + app:layout_constraintTop_toTopOf="@+id/guideline2" /> | |
85 | + | |
86 | + <ScrollView | |
87 | + android:id="@+id/scrollView2" | |
88 | + android:layout_width="match_parent" | |
89 | + android:layout_height="0dp" | |
90 | + android:layout_margin="10dp" | |
91 | + android:background="@android:color/darker_gray" | |
92 | + android:elevation="10dp" | |
93 | + android:scrollbarStyle="insideOverlay" | |
94 | + app:layout_constraintBottom_toTopOf="@+id/guideline4" | |
95 | + app:layout_constraintCircleRadius="10dp" | |
96 | + app:layout_constraintEnd_toEndOf="parent" | |
97 | + app:layout_constraintStart_toStartOf="parent" | |
98 | + app:layout_constraintTop_toBottomOf="@+id/txtDeposito"> | |
99 | + | |
100 | + <GridLayout | |
101 | + android:id="@+id/tableLayout2" | |
102 | + android:layout_width="match_parent" | |
103 | + android:layout_height="match_parent" | |
104 | + android:alignmentMode="alignMargins" | |
105 | + android:columnCount="2" | |
106 | + android:padding="15dp" | |
107 | + android:rowCount="2"> | |
108 | + | |
109 | + <!-- FILA 1--> | |
110 | + <!-- COLUMNA 1--> | |
111 | + <androidx.cardview.widget.CardView | |
112 | + android:layout_width="0dp" | |
113 | + android:layout_height="match_parent" | |
114 | + android:layout_rowWeight="1" | |
115 | + android:layout_columnWeight="1" | |
116 | + android:layout_margin="15dp" | |
117 | + app:cardCornerRadius="8dp" | |
118 | + app:cardElevation="8dp"> | |
119 | + | |
120 | + <LinearLayout | |
121 | + android:layout_width="wrap_content" | |
122 | + android:layout_height="wrap_content" | |
123 | + android:layout_gravity="center_horizontal|center_vertical" | |
124 | + android:layout_margin="15dp" | |
125 | + android:orientation="vertical"> | |
126 | + | |
127 | + <androidx.appcompat.widget.AppCompatImageView | |
128 | + android:layout_width="wrap_content" | |
129 | + android:layout_height="wrap_content" | |
130 | + android:layout_gravity="center_horizontal" | |
131 | + android:src="@drawable/inventario" /> | |
132 | + | |
133 | + <androidx.appcompat.widget.AppCompatTextView | |
134 | + android:id="@+id/inventario5" | |
135 | + android:layout_width="wrap_content" | |
136 | + android:layout_height="100dp" | |
137 | + | |
138 | + android:autoSizeMaxTextSize="150sp" | |
139 | + android:autoSizeMinTextSize="15sp" | |
140 | + android:autoSizeStepGranularity="5sp" | |
141 | + android:autoSizeTextType="uniform" | |
142 | + android:gravity="center" | |
143 | + android:inputType="textMultiLine" | |
144 | + android:text="Inventeario 1 Articulos 100 12/12/2020 12:00" | |
145 | + android:textColor="@android:color/black" | |
146 | + android:textStyle="bold" /> | |
147 | + </LinearLayout> | |
148 | + </androidx.cardview.widget.CardView> | |
149 | + <!-- COLUMNA 2--> | |
150 | + <androidx.cardview.widget.CardView | |
151 | + android:layout_width="0dp" | |
152 | + android:layout_height="0dp" | |
153 | + android:layout_rowWeight="1" | |
154 | + android:layout_columnWeight="1" | |
155 | + android:layout_margin="15dp" | |
156 | + app:cardCornerRadius="8dp" | |
157 | + app:cardElevation="8dp"> | |
158 | + | |
159 | + <LinearLayout | |
160 | + android:layout_width="wrap_content" | |
161 | + android:layout_height="wrap_content" | |
162 | + android:layout_gravity="center_horizontal|center_vertical" | |
163 | + android:layout_margin="15dp" | |
164 | + android:orientation="vertical"> | |
165 | + | |
166 | + <androidx.appcompat.widget.AppCompatImageView | |
167 | + android:layout_width="wrap_content" | |
168 | + android:layout_height="wrap_content" | |
169 | + android:layout_gravity="center_horizontal" | |
170 | + android:src="@drawable/inventario" /> | |
171 | + | |
172 | + <androidx.appcompat.widget.AppCompatTextView | |
173 | + android:id="@+id/inventario6" | |
174 | + android:layout_width="wrap_content" | |
175 | + android:layout_height="100dp" | |
176 | + | |
177 | + android:autoSizeMaxTextSize="150sp" | |
178 | + android:autoSizeMinTextSize="15sp" | |
179 | + android:autoSizeStepGranularity="5sp" | |
180 | + android:autoSizeTextType="uniform" | |
181 | + android:gravity="center" | |
182 | + android:text="Inventeario 2 Articulos 100 12/12/2020 12:00" | |
183 | + android:textColor="@android:color/black" | |
184 | + android:textStyle="bold" /> | |
185 | + </LinearLayout> | |
186 | + </androidx.cardview.widget.CardView> | |
187 | + | |
188 | + <!-- FILA 2--> | |
189 | + <!-- COLUMNA 1--> | |
190 | + <androidx.cardview.widget.CardView | |
191 | + android:layout_width="0dp" | |
192 | + android:layout_height="match_parent" | |
193 | + android:layout_rowWeight="1" | |
194 | + android:layout_columnWeight="1" | |
195 | + android:layout_margin="15dp" | |
196 | + app:cardCornerRadius="8dp" | |
197 | + app:cardElevation="8dp"> | |
198 | + | |
199 | + <LinearLayout | |
200 | + android:layout_width="wrap_content" | |
201 | + android:layout_height="wrap_content" | |
202 | + android:layout_gravity="center_horizontal|center_vertical" | |
203 | + android:layout_margin="15dp" | |
204 | + android:orientation="vertical"> | |
205 | + | |
206 | + <androidx.appcompat.widget.AppCompatImageView | |
207 | + android:layout_width="wrap_content" | |
208 | + android:layout_height="wrap_content" | |
209 | + android:layout_gravity="center_horizontal" | |
210 | + android:src="@drawable/inventario" /> | |
211 | + | |
212 | + <androidx.appcompat.widget.AppCompatTextView | |
213 | + android:id="@+id/inventario7" | |
214 | + android:layout_width="wrap_content" | |
215 | + android:layout_height="100dp" | |
216 | + | |
217 | + android:autoSizeMaxTextSize="150sp" | |
218 | + android:autoSizeMinTextSize="15sp" | |
219 | + android:autoSizeStepGranularity="5sp" | |
220 | + android:autoSizeTextType="uniform" | |
221 | + android:gravity="center" | |
222 | + android:text="Inventeario 4 Cerrado. Articulos 100 12/12/2020 12:00" | |
223 | + android:textColor="@android:color/black" | |
224 | + android:textStyle="bold" /> | |
225 | + </LinearLayout> | |
226 | + </androidx.cardview.widget.CardView> | |
227 | + <!-- COLUMNA 2--> | |
228 | + <androidx.cardview.widget.CardView | |
229 | + android:layout_width="0dp" | |
230 | + android:layout_height="0dp" | |
231 | + android:layout_rowWeight="1" | |
232 | + android:layout_columnWeight="1" | |
233 | + android:layout_margin="15dp" | |
234 | + app:cardCornerRadius="8dp" | |
235 | + app:cardElevation="8dp"> | |
236 | + | |
237 | + <LinearLayout | |
238 | + android:layout_width="wrap_content" | |
239 | + android:layout_height="wrap_content" | |
240 | + android:layout_gravity="center_horizontal|center_vertical" | |
241 | + android:layout_margin="15dp" | |
242 | + android:orientation="vertical"> | |
243 | + | |
244 | + <androidx.appcompat.widget.AppCompatImageView | |
245 | + android:layout_width="wrap_content" | |
246 | + android:layout_height="wrap_content" | |
247 | + android:layout_gravity="center_horizontal" | |
248 | + android:src="@drawable/inventario" /> | |
249 | + | |
250 | + <androidx.appcompat.widget.AppCompatTextView | |
251 | + android:id="@+id/inventario8" | |
252 | + android:layout_width="wrap_content" | |
253 | + android:layout_height="100dp" | |
254 | + | |
255 | + android:autoSizeMaxTextSize="150sp" | |
256 | + android:autoSizeMinTextSize="15sp" | |
257 | + android:autoSizeStepGranularity="5sp" | |
258 | + android:autoSizeTextType="uniform" | |
259 | + android:gravity="center" | |
260 | + android:text="Inventeario 4 Cerrado. Articulos 100 12/12/2020 12:00" | |
261 | + android:textColor="@android:color/black" | |
262 | + android:textStyle="bold" /> | |
263 | + </LinearLayout> | |
264 | + </androidx.cardview.widget.CardView> | |
265 | + | |
266 | + </GridLayout> | |
267 | + </ScrollView> | |
268 | + | |
269 | + <androidx.constraintlayout.widget.Guideline | |
270 | + android:id="@+id/guideline0" | |
271 | + android:layout_width="wrap_content" | |
272 | + android:layout_height="wrap_content" | |
273 | + android:orientation="horizontal" | |
274 | + app:layout_constraintGuide_percent="0.03" /> | |
275 | + | |
276 | + <androidx.constraintlayout.widget.Guideline | |
277 | + android:id="@+id/guideline" | |
278 | + android:layout_width="wrap_content" | |
279 | + android:layout_height="wrap_content" | |
280 | + android:orientation="horizontal" | |
281 | + app:layout_constraintGuide_percent="0.15"/> | |
282 | + | |
283 | + <androidx.constraintlayout.widget.Guideline | |
284 | + android:id="@+id/guideline2" | |
285 | + android:layout_width="wrap_content" | |
286 | + android:layout_height="wrap_content" | |
287 | + android:orientation="horizontal" | |
288 | + app:layout_constraintGuide_percent="0.55" /> | |
289 | + | |
290 | + <androidx.constraintlayout.widget.Guideline | |
291 | + android:id="@+id/guideline3" | |
292 | + android:layout_width="wrap_content" | |
293 | + android:layout_height="wrap_content" | |
294 | + android:orientation="horizontal" | |
295 | + app:layout_constraintGuide_percent="0.62" /> | |
296 | + | |
297 | + <androidx.constraintlayout.widget.Guideline | |
298 | + android:id="@+id/guideline4" | |
299 | + android:layout_width="wrap_content" | |
300 | + android:layout_height="wrap_content" | |
301 | + android:orientation="horizontal" | |
302 | + app:layout_constraintGuide_percent="0.95" /> | |
303 | +</androidx.constraintlayout.widget.ConstraintLayout> | |
0 | 304 | \ No newline at end of file |
app/src/main/res/layout/fragment_servidores.xml
... | ... | @@ -0,0 +1,160 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
4 | + xmlns:tools="http://schemas.android.com/tools" | |
5 | + android:layout_width="match_parent" | |
6 | + android:layout_height="match_parent" | |
7 | + tools:context=".ui.servidores.ServidoresFragment"> | |
8 | + | |
9 | + | |
10 | + <androidx.appcompat.widget.AppCompatTextView | |
11 | + android:id="@+id/tvTitutloServer" | |
12 | + android:layout_width="match_parent" | |
13 | + android:layout_height="90dp" | |
14 | + android:layout_marginStart="8dp" | |
15 | + android:layout_marginTop="15dp" | |
16 | + android:layout_marginEnd="8dp" | |
17 | + android:autoSizeMaxTextSize="100sp" | |
18 | + android:autoSizeMinTextSize="20sp" | |
19 | + android:autoSizeStepGranularity="5sp" | |
20 | + android:autoSizeTextType="uniform" | |
21 | + android:gravity="center" | |
22 | + android:lines="1" | |
23 | + android:text="@string/tvTitutloServer" | |
24 | + android:textColor="@color/colorAccent" | |
25 | + app:fontFamily="sans-serif-condensed" | |
26 | + app:layout_constraintBottom_toTopOf="@id/guideline2" | |
27 | + app:layout_constraintEnd_toEndOf="parent" | |
28 | + app:layout_constraintStart_toStartOf="parent" | |
29 | + app:layout_constraintTop_toTopOf="parent" /> | |
30 | + | |
31 | + <TextView | |
32 | + android:id="@+id/tvDirServer" | |
33 | + android:layout_width="match_parent" | |
34 | + android:layout_height="wrap_content" | |
35 | + android:layout_marginStart="8dp" | |
36 | + android:layout_marginEnd="8dp" | |
37 | + android:gravity="center" | |
38 | + android:lines="1" | |
39 | + android:text="@string/tvDirServer" | |
40 | + android:textColor="@android:color/black" | |
41 | + android:textSize="@dimen/TitulosMedios" | |
42 | + android:textStyle="bold|italic" | |
43 | + app:fontFamily="sans-serif-condensed" | |
44 | + app:layout_constraintBottom_toTopOf="@+id/etDireccionServidor" | |
45 | + app:layout_constraintEnd_toEndOf="parent" | |
46 | + app:layout_constraintStart_toStartOf="parent" | |
47 | + app:layout_constraintTop_toBottomOf="@id/guideline3" | |
48 | + app:layout_constraintVertical_bias="0.451" /> | |
49 | + | |
50 | + <TextView | |
51 | + android:id="@+id/tvNomServer" | |
52 | + android:layout_width="match_parent" | |
53 | + android:layout_height="wrap_content" | |
54 | + android:layout_marginStart="8dp" | |
55 | + android:layout_marginEnd="8dp" | |
56 | + android:layout_marginTop="15dp" | |
57 | + android:gravity="center" | |
58 | + android:lines="2" | |
59 | + android:text="@string/tvNomServer" | |
60 | + android:textColor="@android:color/black" | |
61 | + android:textSize="@dimen/TitulosMedios" | |
62 | + android:textStyle="bold|italic" | |
63 | + app:fontFamily="sans-serif-condensed" | |
64 | + app:layout_constraintBottom_toTopOf="@+id/etNombreServidor" | |
65 | + app:layout_constraintEnd_toEndOf="parent" | |
66 | + app:layout_constraintStart_toStartOf="parent" | |
67 | + app:layout_constraintTop_toBottomOf="@id/guideline2" /> | |
68 | + | |
69 | + <EditText | |
70 | + android:id="@+id/etNombreServidor" | |
71 | + android:layout_width="match_parent" | |
72 | + android:layout_height="wrap_content" | |
73 | + android:autofillHints="" | |
74 | + android:clickable="true" | |
75 | + android:ems="10" | |
76 | + android:focusable="true" | |
77 | + android:inputType="text" | |
78 | + android:lines="1" | |
79 | + android:text="" | |
80 | + android:textSize="15sp" | |
81 | + app:layout_constraintBottom_toTopOf="@id/guideline3" | |
82 | + app:layout_constraintEnd_toEndOf="parent" | |
83 | + app:layout_constraintHorizontal_bias="0.0" | |
84 | + app:layout_constraintStart_toStartOf="parent" | |
85 | + app:layout_constraintTop_toBottomOf="@+id/tvNomServer" /> | |
86 | + | |
87 | + <EditText | |
88 | + android:id="@+id/etDireccionServidor" | |
89 | + android:layout_width="0dp" | |
90 | + android:layout_height="wrap_content" | |
91 | + android:layout_marginStart="8dp" | |
92 | + android:layout_marginEnd="8dp" | |
93 | + android:clickable="true" | |
94 | + android:ems="10" | |
95 | + android:focusable="true" | |
96 | + android:inputType="text" | |
97 | + android:lines="1" | |
98 | + android:text="" | |
99 | + android:textSize="15sp" | |
100 | + app:layout_constraintBottom_toTopOf="@id/guideline4" | |
101 | + app:layout_constraintEnd_toEndOf="parent" | |
102 | + app:layout_constraintStart_toStartOf="parent" | |
103 | + app:layout_constraintTop_toTopOf="@+id/tvDirServer" /> | |
104 | + | |
105 | + <androidx.recyclerview.widget.RecyclerView | |
106 | + android:id="@+id/rvServidores" | |
107 | + android:layout_width="match_parent" | |
108 | + android:layout_height="0dp" | |
109 | + android:background="@android:color/darker_gray" | |
110 | + app:layout_constraintBottom_toBottomOf="@+id/guideline5" | |
111 | + app:layout_constraintEnd_toEndOf="parent" | |
112 | + app:layout_constraintStart_toStartOf="parent" | |
113 | + app:layout_constraintTop_toBottomOf="@+id/guideline4" | |
114 | + tools:listitem="@layout/item_servidores" /> | |
115 | + | |
116 | + <Button | |
117 | + android:id="@+id/btnGuardarServidores" | |
118 | + android:layout_width="0dp" | |
119 | + android:layout_height="wrap_content" | |
120 | + android:text="@string/btnGuardarServidores" | |
121 | + app:layout_constraintBottom_toBottomOf="@+id/guideline6" | |
122 | + app:layout_constraintEnd_toEndOf="parent" | |
123 | + app:layout_constraintStart_toStartOf="parent" /> | |
124 | + | |
125 | + | |
126 | + <androidx.constraintlayout.widget.Guideline | |
127 | + android:id="@+id/guideline2" | |
128 | + android:layout_width="wrap_content" | |
129 | + android:layout_height="wrap_content" | |
130 | + android:orientation="horizontal" | |
131 | + app:layout_constraintGuide_percent="0.15" /> | |
132 | + | |
133 | + <androidx.constraintlayout.widget.Guideline | |
134 | + android:id="@+id/guideline3" | |
135 | + android:layout_width="wrap_content" | |
136 | + android:layout_height="wrap_content" | |
137 | + android:orientation="horizontal" | |
138 | + app:layout_constraintGuide_percent="0.25" /> | |
139 | + | |
140 | + <androidx.constraintlayout.widget.Guideline | |
141 | + android:id="@+id/guideline4" | |
142 | + android:layout_width="wrap_content" | |
143 | + android:layout_height="wrap_content" | |
144 | + android:orientation="horizontal" | |
145 | + app:layout_constraintGuide_percent="0.5" /> | |
146 | + | |
147 | + <androidx.constraintlayout.widget.Guideline | |
148 | + android:id="@+id/guideline5" | |
149 | + android:layout_width="wrap_content" | |
150 | + android:layout_height="wrap_content" | |
151 | + android:orientation="horizontal" | |
152 | + app:layout_constraintGuide_percent="0.80" /> | |
153 | + | |
154 | + <androidx.constraintlayout.widget.Guideline | |
155 | + android:id="@+id/guideline6" | |
156 | + android:layout_width="wrap_content" | |
157 | + android:layout_height="wrap_content" | |
158 | + android:orientation="horizontal" | |
159 | + app:layout_constraintGuide_percent="0.88" /> | |
160 | +</androidx.constraintlayout.widget.ConstraintLayout> |
app/src/main/res/layout/ingresar_cantidad.xml
... | ... | @@ -0,0 +1,91 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<androidx.cardview.widget.CardView | |
3 | + xmlns:android="http://schemas.android.com/apk/res/android" | |
4 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
5 | + xmlns:tools="http://schemas.android.com/tools" | |
6 | + android:layout_width="match_parent" | |
7 | + android:layout_height="wrap_content" | |
8 | + app:cardCornerRadius="10dp" | |
9 | + app:cardElevation="5dp" | |
10 | + android:background="@drawable/md_transparent" | |
11 | + tools:context=".ui.inventario.InsertCant" | |
12 | + tools:ignore="PrivateResource"> | |
13 | + | |
14 | + | |
15 | + <androidx.constraintlayout.widget.ConstraintLayout | |
16 | + android:layout_width="match_parent" | |
17 | + android:layout_height="match_parent"> | |
18 | + | |
19 | + <LinearLayout | |
20 | + android:id="@+id/barraSuperior" | |
21 | + android:layout_width="0dp" | |
22 | + android:layout_height="wrap_content" | |
23 | + android:background="@color/colorPrimaryDark" | |
24 | + android:orientation="horizontal" | |
25 | + app:layout_constraintLeft_toLeftOf="parent" | |
26 | + app:layout_constraintRight_toRightOf="parent" | |
27 | + app:layout_constraintTop_toTopOf="parent" | |
28 | + app:layout_constraintTop_toBottomOf="@+id/lySegundo"> | |
29 | + | |
30 | + <androidx.appcompat.widget.AppCompatTextView | |
31 | + android:layout_width="0dp" | |
32 | + android:layout_height="wrap_content" | |
33 | + android:layout_margin="10dp" | |
34 | + android:layout_marginStart="5dp" | |
35 | + android:layout_marginTop="10dp" | |
36 | + android:layout_weight="1" | |
37 | + android:text="@string/adv" | |
38 | + android:textAlignment="center" | |
39 | + android:textColor="@android:color/white" | |
40 | + android:textSize="25sp" | |
41 | + android:textStyle="bold" /> | |
42 | + </LinearLayout> | |
43 | + | |
44 | + | |
45 | + <LinearLayout | |
46 | + android:id="@+id/lySegundo" | |
47 | + android:layout_width="match_parent" | |
48 | + android:layout_height="wrap_content" | |
49 | + android:orientation="vertical" | |
50 | + android:padding="12dp" | |
51 | + app:layout_constraintLeft_toLeftOf="parent" | |
52 | + app:layout_constraintRight_toRightOf="parent" | |
53 | + app:layout_constraintTop_toBottomOf="@id/barraSuperior"> | |
54 | + | |
55 | + | |
56 | + | |
57 | + <EditText | |
58 | + android:id="@+id/etCantidad" | |
59 | + android:layout_width="match_parent" | |
60 | + android:layout_height="wrap_content" | |
61 | + android:ems="10" | |
62 | + android:gravity="center" | |
63 | + android:textSize="20sp" | |
64 | + android:focusable="true" | |
65 | + android:clickable="true" | |
66 | + android:inputType="numberDecimal" | |
67 | + android:text="" /> | |
68 | + | |
69 | + | |
70 | + <androidx.appcompat.widget.AppCompatButton | |
71 | + android:id="@+id/btnAceptar" | |
72 | + android:layout_width="match_parent" | |
73 | + android:layout_height="wrap_content" | |
74 | + android:layout_margin="10dp" | |
75 | + android:layout_marginBottom="20dp" | |
76 | + android:clickable="true" | |
77 | + android:focusable="true" | |
78 | + android:text="@string/btnConfirmar" | |
79 | + android:textAlignment="center" | |
80 | + android:textColor="@android:color/black" | |
81 | + android:textSize="20sp" | |
82 | + android:textStyle="bold" | |
83 | + app:cardBackgroundColor="@android:color/darker_gray" | |
84 | + app:cardUseCompatPadding="true" /> | |
85 | + | |
86 | + | |
87 | + </LinearLayout> | |
88 | + | |
89 | + | |
90 | + </androidx.constraintlayout.widget.ConstraintLayout> | |
91 | +</androidx.cardview.widget.CardView> | |
0 | 92 | \ No newline at end of file |
app/src/main/res/layout/item.xml
... | ... | @@ -0,0 +1,151 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
4 | + xmlns:tools="http://schemas.android.com/tools" | |
5 | + android:layout_width="match_parent" | |
6 | + android:layout_height="wrap_content" | |
7 | + android:layout_margin="5dp" | |
8 | + app:cardCornerRadius="2dp" | |
9 | + app:cardElevation="10dp" | |
10 | + app:contentPadding="5dp" | |
11 | + app:cardPreventCornerOverlap="false"> | |
12 | + | |
13 | + <androidx.constraintlayout.widget.ConstraintLayout | |
14 | + android:layout_width="match_parent" | |
15 | + android:layout_height="wrap_content"> | |
16 | + | |
17 | + <TextView | |
18 | + android:id="@+id/textView2" | |
19 | + android:layout_width="wrap_content" | |
20 | + android:layout_height="wrap_content" | |
21 | + android:layout_marginStart="5dp" | |
22 | + android:text="Cรณdigo:" | |
23 | + android:textAppearance="@style/TextAppearance.AppCompat.Widget.PopupMenu.Large" | |
24 | + android:textSize="14sp" | |
25 | + app:layout_constraintEnd_toStartOf="@+id/tvSector" | |
26 | + app:layout_constraintHorizontal_bias="0.01" | |
27 | + app:layout_constraintHorizontal_chainStyle="packed" | |
28 | + app:layout_constraintStart_toStartOf="parent" | |
29 | + app:layout_constraintTop_toTopOf="parent" /> | |
30 | + | |
31 | + | |
32 | + <TextView | |
33 | + android:id="@+id/tvSector" | |
34 | + android:layout_width="wrap_content" | |
35 | + android:layout_height="match_parent" | |
36 | + android:layout_marginStart="8dp" | |
37 | + android:text="9999" | |
38 | + android:textAppearance="@style/TextAppearance.AppCompat.Large" | |
39 | + android:textColorHint="@android:color/black" | |
40 | + android:textSize="14sp" | |
41 | + android:textStyle="bold" | |
42 | + app:layout_constraintHorizontal_chainStyle="packed" | |
43 | + app:layout_constraintBaseline_toBaselineOf="@+id/textView2" | |
44 | + app:layout_constraintEnd_toStartOf="@+id/tvCodigo" | |
45 | + app:layout_constraintStart_toEndOf="@+id/textView2" /> | |
46 | + <TextView | |
47 | + android:id="@+id/tvCodigo" | |
48 | + android:layout_width="wrap_content" | |
49 | + android:layout_height="match_parent" | |
50 | + android:layout_marginStart="8dp" | |
51 | + android:text="99999999" | |
52 | + app:layout_constraintHorizontal_chainStyle="packed" | |
53 | + android:textAppearance="@style/TextAppearance.AppCompat.Large" | |
54 | + android:textColorHint="@android:color/black" | |
55 | + android:textSize="14sp" | |
56 | + android:textStyle="bold" | |
57 | + app:layout_constraintBaseline_toBaselineOf="@+id/tvSector" | |
58 | + app:layout_constraintEnd_toStartOf="@+id/textView5" | |
59 | + app:layout_constraintStart_toEndOf="@+id/tvSector" /> | |
60 | + | |
61 | + <TextView | |
62 | + android:id="@+id/textView5" | |
63 | + android:layout_width="wrap_content" | |
64 | + android:layout_height="wrap_content" | |
65 | + android:layout_marginStart="8dp" | |
66 | + android:text="Cantidad:" | |
67 | + android:textAppearance="@style/TextAppearance.AppCompat.Widget.PopupMenu.Large" | |
68 | + android:textSize="14sp" | |
69 | + app:layout_constraintTop_toTopOf="parent" | |
70 | + app:layout_constraintEnd_toStartOf="@+id/tvCodigoBarras" | |
71 | + app:layout_constraintStart_toEndOf="@+id/tvCodigo" /> | |
72 | + | |
73 | + <TextView | |
74 | + android:id="@+id/tvCantidad" | |
75 | + android:layout_width="wrap_content" | |
76 | + android:layout_height="match_parent" | |
77 | + android:layout_margin="5dp" | |
78 | + android:text="12345.12" | |
79 | + android:textAppearance="@style/TextAppearance.AppCompat.Large" | |
80 | + android:textSize="14sp" | |
81 | + android:textStyle="bold" | |
82 | + app:layout_constraintBaseline_toBaselineOf="@+id/textView5" | |
83 | + app:layout_constraintEnd_toEndOf="parent" | |
84 | + app:layout_constraintHorizontal_bias="0.0" | |
85 | + app:layout_constraintStart_toEndOf="@id/textView5" | |
86 | + app:layout_constraintTop_toTopOf="parent" /> | |
87 | + | |
88 | + <ImageView | |
89 | + android:id="@+id/ivHolder" | |
90 | + android:layout_width="30dp" | |
91 | + android:layout_height="30dp" | |
92 | + android:visibility="visible" | |
93 | + android:src="@drawable/more" | |
94 | + app:layout_constraintBottom_toTopOf="@+id/tvDescripcion" | |
95 | + app:layout_constraintEnd_toEndOf="parent" | |
96 | + app:layout_constraintHorizontal_bias="0.968" | |
97 | + app:layout_constraintStart_toEndOf="@+id/tvCodigoBarras" | |
98 | + app:layout_constraintTop_toTopOf="parent" | |
99 | + app:layout_constraintVertical_bias="0.0" /> | |
100 | + | |
101 | + <TextView | |
102 | + android:id="@+id/textView85" | |
103 | + android:layout_width="wrap_content" | |
104 | + android:layout_height="wrap_content" | |
105 | + android:layout_marginStart="5dp" | |
106 | + android:layout_marginTop="8dp" | |
107 | + android:text="Desc:" | |
108 | + android:textAppearance="@style/TextAppearance.AppCompat.Widget.PopupMenu.Large" | |
109 | + android:textSize="14sp" | |
110 | + app:layout_constraintEnd_toStartOf="@+id/tvDescripcion" | |
111 | + app:layout_constraintHorizontal_bias="0.0" | |
112 | + app:layout_constraintHorizontal_chainStyle="packed" | |
113 | + app:layout_constraintStart_toStartOf="parent" | |
114 | + app:layout_constraintTop_toBottomOf="@id/tvCodigo" /> | |
115 | + | |
116 | + <TextView | |
117 | + android:id="@+id/tvDescripcion" | |
118 | + android:layout_width="0dp" | |
119 | + android:layout_height="wrap_content" | |
120 | + android:layout_marginStart="3dp" | |
121 | + android:layout_marginTop="8dp" | |
122 | + android:maxLines="2" | |
123 | + android:text="abcdefghijklmnรฑopqrstuvwxyz0123456789abcdefghijklmnรฑopqrstuvwxyz" | |
124 | + android:textAppearance="@style/TextAppearance.AppCompat.Large" | |
125 | + android:textSize="14sp" | |
126 | + android:textStyle="bold" | |
127 | + app:layout_constraintBaseline_toBaselineOf="@+id/textView85" | |
128 | + app:layout_constraintEnd_toEndOf="parent" | |
129 | + app:layout_constraintStart_toEndOf="@+id/textView85" | |
130 | + app:layout_constraintTop_toBottomOf="@+id/tvCodigo" /> | |
131 | + | |
132 | + <TextView | |
133 | + android:id="@+id/tvCodigoBarras" | |
134 | + android:layout_width="match_parent" | |
135 | + android:layout_height="wrap_content" | |
136 | + android:layout_marginStart="3dp" | |
137 | + android:layout_marginTop="8dp" | |
138 | + android:maxLines="2" | |
139 | + android:text="" | |
140 | + android:textAppearance="@style/TextAppearance.AppCompat.Large" | |
141 | + android:textSize="14sp" | |
142 | + android:visibility="gone" | |
143 | + android:textStyle="bold" | |
144 | + app:layout_constraintBaseline_toBaselineOf="@+id/textView85" | |
145 | + app:layout_constraintEnd_toEndOf="parent" | |
146 | + app:layout_constraintStart_toEndOf="@+id/textView85" | |
147 | + app:layout_constraintTop_toBottomOf="@+id/tvCodigo" /> | |
148 | + | |
149 | + </androidx.constraintlayout.widget.ConstraintLayout> | |
150 | + | |
151 | +</androidx.cardview.widget.CardView> | |
0 | 152 | \ No newline at end of file |
app/src/main/res/layout/item_descripcion.xml
... | ... | @@ -0,0 +1,149 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
4 | + android:layout_width="match_parent" | |
5 | + android:layout_height="wrap_content" | |
6 | + android:layout_margin="5dp" | |
7 | + app:cardCornerRadius="2dp" | |
8 | + app:cardElevation="10dp" | |
9 | + app:contentPadding="5dp" | |
10 | + app:cardPreventCornerOverlap="false"> | |
11 | + | |
12 | + <androidx.constraintlayout.widget.ConstraintLayout | |
13 | + android:layout_width="match_parent" | |
14 | + android:layout_height="wrap_content"> | |
15 | + | |
16 | + <TextView | |
17 | + android:id="@+id/textView2" | |
18 | + android:layout_width="wrap_content" | |
19 | + android:layout_height="wrap_content" | |
20 | + android:layout_marginStart="5dp" | |
21 | + android:text="Cรณdigo:" | |
22 | + android:textAppearance="@style/TextAppearance.AppCompat.Widget.PopupMenu.Large" | |
23 | + android:textSize="14sp" | |
24 | + app:layout_constraintEnd_toStartOf="@+id/tvSector" | |
25 | + app:layout_constraintHorizontal_bias="0.01" | |
26 | + app:layout_constraintHorizontal_chainStyle="packed" | |
27 | + app:layout_constraintStart_toStartOf="parent" | |
28 | + app:layout_constraintTop_toTopOf="parent" /> | |
29 | + | |
30 | + | |
31 | + <TextView | |
32 | + android:id="@+id/tvSector" | |
33 | + android:layout_width="wrap_content" | |
34 | + android:layout_height="match_parent" | |
35 | + android:layout_marginStart="8dp" | |
36 | + android:text="9999" | |
37 | + android:textAppearance="@style/TextAppearance.AppCompat.Large" | |
38 | + android:textColorHint="@android:color/black" | |
39 | + android:textSize="14sp" | |
40 | + android:textStyle="bold" | |
41 | + app:layout_constraintHorizontal_chainStyle="packed" | |
42 | + app:layout_constraintBaseline_toBaselineOf="@+id/textView2" | |
43 | + app:layout_constraintEnd_toStartOf="@+id/tvCodigo" | |
44 | + app:layout_constraintStart_toEndOf="@+id/textView2" /> | |
45 | + <TextView | |
46 | + android:id="@+id/tvCodigo" | |
47 | + android:layout_width="wrap_content" | |
48 | + android:layout_height="match_parent" | |
49 | + android:layout_marginStart="8dp" | |
50 | + android:text="99999999" | |
51 | + app:layout_constraintHorizontal_chainStyle="packed" | |
52 | + android:textAppearance="@style/TextAppearance.AppCompat.Large" | |
53 | + android:textColorHint="@android:color/black" | |
54 | + android:textSize="14sp" | |
55 | + android:textStyle="bold" | |
56 | + app:layout_constraintBaseline_toBaselineOf="@+id/tvSector" | |
57 | + app:layout_constraintEnd_toStartOf="@+id/textView5" | |
58 | + app:layout_constraintStart_toEndOf="@+id/tvSector" /> | |
59 | + | |
60 | + <TextView | |
61 | + android:id="@+id/textView5" | |
62 | + android:layout_width="wrap_content" | |
63 | + android:layout_height="wrap_content" | |
64 | + android:layout_marginStart="8dp" | |
65 | + android:text="Cantidad:" | |
66 | + android:textAppearance="@style/TextAppearance.AppCompat.Widget.PopupMenu.Large" | |
67 | + android:textSize="14sp" | |
68 | + android:visibility="gone" | |
69 | + app:layout_constraintTop_toTopOf="parent" | |
70 | + app:layout_constraintEnd_toStartOf="@+id/tvCodigoBarras" | |
71 | + app:layout_constraintStart_toEndOf="@+id/tvCodigo" /> | |
72 | + | |
73 | + <TextView | |
74 | + android:id="@+id/tvCantidad" | |
75 | + android:layout_width="wrap_content" | |
76 | + android:layout_height="match_parent" | |
77 | + android:layout_marginStart="8dp" | |
78 | + android:text="Otros Cรณdigos:" | |
79 | + android:textAppearance="@style/TextAppearance.AppCompat.Large" | |
80 | + android:textSize="14sp" | |
81 | + android:textStyle="bold" | |
82 | + android:visibility="visible" | |
83 | + app:layout_constraintEnd_toStartOf="@id/tvCodigoBarras" | |
84 | + app:layout_constraintStart_toEndOf="@id/textView5" | |
85 | + app:layout_constraintTop_toTopOf="parent" /> | |
86 | + | |
87 | + <TextView | |
88 | + android:id="@+id/tvCodigoBarras" | |
89 | + android:layout_width="0dp" | |
90 | + android:layout_height="wrap_content" | |
91 | + android:layout_marginStart="3dp" | |
92 | + android:maxLines="2" | |
93 | + android:text="" | |
94 | + android:textAppearance="@style/TextAppearance.AppCompat.Large" | |
95 | + android:textSize="14sp" | |
96 | + android:visibility="visible" | |
97 | + android:textStyle="bold" | |
98 | + app:layout_constraintEnd_toEndOf="parent" | |
99 | + app:layout_constraintStart_toEndOf="@+id/tvCantidad" | |
100 | + app:layout_constraintTop_toTopOf="parent"/> | |
101 | + | |
102 | + <ImageView | |
103 | + android:id="@+id/ivHolder" | |
104 | + android:layout_width="30dp" | |
105 | + android:layout_height="30dp" | |
106 | + android:visibility="gone" | |
107 | + android:src="@drawable/more" | |
108 | + app:layout_constraintBottom_toTopOf="@+id/tvDescripcion" | |
109 | + app:layout_constraintEnd_toEndOf="parent" | |
110 | + app:layout_constraintHorizontal_bias="0.968" | |
111 | + app:layout_constraintStart_toEndOf="@+id/tvCodigoBarras" | |
112 | + app:layout_constraintTop_toTopOf="parent" | |
113 | + app:layout_constraintVertical_bias="0.0" /> | |
114 | + | |
115 | + <TextView | |
116 | + android:id="@+id/textView85" | |
117 | + android:layout_width="wrap_content" | |
118 | + android:layout_height="wrap_content" | |
119 | + android:layout_marginStart="5dp" | |
120 | + android:layout_marginTop="8dp" | |
121 | + android:text="Desc:" | |
122 | + android:textAppearance="@style/TextAppearance.AppCompat.Widget.PopupMenu.Large" | |
123 | + android:textSize="14sp" | |
124 | + app:layout_constraintEnd_toStartOf="@+id/tvDescripcion" | |
125 | + app:layout_constraintHorizontal_bias="0.0" | |
126 | + app:layout_constraintHorizontal_chainStyle="packed" | |
127 | + app:layout_constraintStart_toStartOf="parent" | |
128 | + app:layout_constraintTop_toBottomOf="@id/tvCodigo" /> | |
129 | + | |
130 | + <TextView | |
131 | + android:id="@+id/tvDescripcion" | |
132 | + android:layout_width="0dp" | |
133 | + android:layout_height="wrap_content" | |
134 | + android:layout_marginStart="3dp" | |
135 | + android:layout_marginTop="8dp" | |
136 | + android:maxLines="2" | |
137 | + android:text="abcdefghijklmnรฑopqrstuvwxyz0123456789abcdefghijklmnรฑopqrstuvwxyz" | |
138 | + android:textAppearance="@style/TextAppearance.AppCompat.Large" | |
139 | + android:textSize="14sp" | |
140 | + android:textStyle="bold" | |
141 | + app:layout_constraintBaseline_toBaselineOf="@+id/textView85" | |
142 | + app:layout_constraintEnd_toEndOf="parent" | |
143 | + app:layout_constraintStart_toEndOf="@+id/textView85" | |
144 | + app:layout_constraintTop_toBottomOf="@+id/tvCodigo" /> | |
145 | + | |
146 | + | |
147 | + </androidx.constraintlayout.widget.ConstraintLayout> | |
148 | + | |
149 | +</androidx.cardview.widget.CardView> | |
0 | 150 | \ No newline at end of file |
app/src/main/res/layout/item_principal.xml
... | ... | @@ -0,0 +1,46 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | + <androidx.cardview.widget.CardView | |
3 | + xmlns:android="http://schemas.android.com/apk/res/android" | |
4 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
5 | + android:id="@+id/cvInventario" | |
6 | + android:layout_width="match_parent" | |
7 | + android:layout_height="wrap_content" | |
8 | + android:layout_rowWeight="1" | |
9 | + android:layout_columnWeight="1" | |
10 | + android:layout_margin="15dp" | |
11 | + app:cardCornerRadius="8dp" | |
12 | + app:cardElevation="8dp" | |
13 | + app:layout_constraintBottom_toBottomOf="parent" | |
14 | + app:layout_constraintEnd_toEndOf="parent" | |
15 | + app:layout_constraintStart_toStartOf="parent" | |
16 | + app:layout_constraintTop_toTopOf="parent"> | |
17 | + | |
18 | + <LinearLayout | |
19 | + android:layout_width="wrap_content" | |
20 | + android:layout_height="wrap_content" | |
21 | + android:layout_gravity="center_horizontal|center_vertical" | |
22 | + android:layout_margin="15dp" | |
23 | + android:orientation="vertical"> | |
24 | + | |
25 | + <androidx.appcompat.widget.AppCompatImageView | |
26 | + android:layout_width="wrap_content" | |
27 | + android:layout_height="wrap_content" | |
28 | + android:layout_gravity="center_horizontal" | |
29 | + android:src="@drawable/inventario" /> | |
30 | + | |
31 | + <androidx.appcompat.widget.AppCompatTextView | |
32 | + android:id="@+id/inventario" | |
33 | + android:layout_width="wrap_content" | |
34 | + android:layout_height="60dp" | |
35 | + android:autoSizeMaxTextSize="50sp" | |
36 | + android:autoSizeMinTextSize="15sp" | |
37 | + android:clickable="true" | |
38 | + android:autoSizeStepGranularity="5sp" | |
39 | + android:autoSizeTextType="uniform" | |
40 | + android:gravity="center" | |
41 | + android:inputType="textMultiLine" | |
42 | + android:text="Inventeario 1 Abierto. Articulos 100 12/12/2020 12:00" | |
43 | + android:textColor="@android:color/black" | |
44 | + android:textStyle="bold" /> | |
45 | + </LinearLayout> | |
46 | + </androidx.cardview.widget.CardView> |
app/src/main/res/layout/item_servidores.xml
... | ... | @@ -0,0 +1,76 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
4 | + xmlns:tools="http://schemas.android.com/tools" | |
5 | + android:layout_width="match_parent" | |
6 | + android:layout_height="wrap_content" | |
7 | + android:layout_margin="5dp" | |
8 | + app:cardCornerRadius="2dp" | |
9 | + app:cardElevation="10dp" | |
10 | + app:contentPadding="5dp" | |
11 | + app:cardPreventCornerOverlap="false"> | |
12 | + | |
13 | + <androidx.constraintlayout.widget.ConstraintLayout | |
14 | + android:layout_width="match_parent" | |
15 | + android:layout_height="wrap_content"> | |
16 | + | |
17 | + <TextView | |
18 | + android:id="@+id/textView2" | |
19 | + android:layout_width="wrap_content" | |
20 | + android:layout_height="wrap_content" | |
21 | + android:layout_marginStart="5dp" | |
22 | + android:text="Descripciรณn:" | |
23 | + android:textAppearance="@style/TextAppearance.AppCompat.Widget.PopupMenu.Large" | |
24 | + android:textSize="14sp" | |
25 | + app:layout_constraintEnd_toStartOf="@+id/tvCodigo" | |
26 | + app:layout_constraintHorizontal_bias="0.01" | |
27 | + app:layout_constraintHorizontal_chainStyle="packed" | |
28 | + app:layout_constraintStart_toStartOf="parent" | |
29 | + app:layout_constraintTop_toTopOf="parent" /> | |
30 | + | |
31 | + | |
32 | + <TextView | |
33 | + android:id="@+id/tvDescServidor" | |
34 | + android:layout_width="0dp" | |
35 | + android:layout_height="match_parent" | |
36 | + android:layout_marginStart="8dp" | |
37 | + android:text="Laboratorio Foca 1" | |
38 | + android:textAppearance="@style/TextAppearance.AppCompat.Large" | |
39 | + android:textColorHint="@android:color/black" | |
40 | + android:textSize="14sp" | |
41 | + android:textStyle="bold" | |
42 | + app:layout_constraintBaseline_toBaselineOf="@+id/textView2" | |
43 | + app:layout_constraintEnd_toEndOf="parent" | |
44 | + app:layout_constraintStart_toEndOf="@+id/textView2" /> | |
45 | + | |
46 | + <TextView | |
47 | + android:id="@+id/textView85" | |
48 | + android:layout_width="wrap_content" | |
49 | + android:layout_height="wrap_content" | |
50 | + android:layout_marginStart="5dp" | |
51 | + android:layout_marginTop="8dp" | |
52 | + android:text="Direcciรณn:" | |
53 | + android:textAppearance="@style/TextAppearance.AppCompat.Widget.PopupMenu.Large" | |
54 | + android:textSize="14sp" | |
55 | + app:layout_constraintHorizontal_chainStyle="packed" | |
56 | + app:layout_constraintStart_toStartOf="parent" | |
57 | + app:layout_constraintEnd_toStartOf="@id/tvDireccionServidor" | |
58 | + app:layout_constraintTop_toBottomOf="@id/tvDescServidor" /> | |
59 | + | |
60 | + <TextView | |
61 | + android:id="@+id/tvDireccionServidor" | |
62 | + android:layout_width="0dp" | |
63 | + android:layout_height="match_parent" | |
64 | + android:layout_marginStart="8dp" | |
65 | + android:text="http://192.168.0.205:3008" | |
66 | + android:textAppearance="@style/TextAppearance.AppCompat.Large" | |
67 | + android:textColorHint="@android:color/black" | |
68 | + android:textSize="14sp" | |
69 | + android:textStyle="bold" | |
70 | + app:layout_constraintBaseline_toBaselineOf="@+id/textView85" | |
71 | + app:layout_constraintEnd_toEndOf="parent" | |
72 | + app:layout_constraintStart_toEndOf="@+id/textView85" /> | |
73 | + | |
74 | + </androidx.constraintlayout.widget.ConstraintLayout> | |
75 | + | |
76 | +</androidx.cardview.widget.CardView> | |
0 | 77 | \ No newline at end of file |
app/src/main/res/layout/login_dialog.xml
... | ... | @@ -0,0 +1,163 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
4 | + android:layout_width="match_parent" | |
5 | + android:layout_height="wrap_content" | |
6 | + android:orientation="vertical" | |
7 | + android:padding="10dp"> | |
8 | + | |
9 | + <TextView | |
10 | + android:id="@+id/dialogNameEt" | |
11 | + android:layout_width="wrap_content" | |
12 | + android:layout_height="wrap_content" | |
13 | + android:layout_margin="5dp" | |
14 | + android:text="La cantidad actual es:" | |
15 | + android:textSize="20sp" | |
16 | + app:layout_constraintEnd_toStartOf="@id/tvCantInicial" | |
17 | + app:layout_constraintHorizontal_bias="0.0" | |
18 | + app:layout_constraintHorizontal_chainStyle="packed" | |
19 | + app:layout_constraintStart_toStartOf="parent" | |
20 | + app:layout_constraintTop_toTopOf="parent" /> | |
21 | + | |
22 | + <TextView | |
23 | + android:id="@+id/tvCantInicial" | |
24 | + android:layout_width="wrap_content" | |
25 | + android:layout_height="wrap_content" | |
26 | + android:layout_margin="5dp" | |
27 | + android:text="20" | |
28 | + android:textSize="20sp" | |
29 | + app:layout_constraintBaseline_toBaselineOf="@+id/dialogNameEt" | |
30 | + app:layout_constraintEnd_toEndOf="parent" | |
31 | + app:layout_constraintHorizontal_chainStyle="packed" | |
32 | + app:layout_constraintStart_toEndOf="@id/dialogNameEt" /> | |
33 | + | |
34 | + <TextView | |
35 | + android:id="@+id/tvgenerico" | |
36 | + android:layout_width="wrap_content" | |
37 | + android:layout_height="wrap_content" | |
38 | + android:layout_margin="5dp" | |
39 | + android:text="Ingrese la nueva cantidad:" | |
40 | + android:textSize="20sp" | |
41 | + app:layout_constraintStart_toStartOf="parent" | |
42 | + app:layout_constraintTop_toBottomOf="@+id/tvCantInicial" /> | |
43 | + | |
44 | + <EditText | |
45 | + android:id="@+id/tvNuevaCantidad" | |
46 | + android:layout_width="0dp" | |
47 | + android:layout_height="wrap_content" | |
48 | + android:hint="Nueva Cacntidad" | |
49 | + android:inputType="numberDecimal" | |
50 | + app:layout_constraintBaseline_toBaselineOf="@+id/tvgenerico" | |
51 | + app:layout_constraintEnd_toEndOf="parent" | |
52 | + app:layout_constraintStart_toEndOf="@id/tvgenerico" /> | |
53 | + | |
54 | + <TextView | |
55 | + android:id="@+id/tvgenerico2" | |
56 | + android:layout_width="wrap_content" | |
57 | + android:layout_height="wrap_content" | |
58 | + android:layout_margin="5dp" | |
59 | + android:gravity="center" | |
60 | + android:text="@string/tvSeleccion" | |
61 | + android:textSize="20sp" | |
62 | + app:layout_constraintStart_toStartOf="parent" | |
63 | + app:layout_constraintTop_toBottomOf="@+id/tvgenerico" /> | |
64 | + | |
65 | + <RadioGroup | |
66 | + android:id="@+id/rgFechaHora" | |
67 | + android:layout_width="wrap_content" | |
68 | + android:layout_height="wrap_content" | |
69 | + android:layout_margin="5dp" | |
70 | + android:gravity="start" | |
71 | + android:orientation="vertical" | |
72 | + app:layout_constraintEnd_toEndOf="parent" | |
73 | + app:layout_constraintHorizontal_bias="0.0" | |
74 | + app:layout_constraintStart_toStartOf="parent" | |
75 | + app:layout_constraintTop_toBottomOf="@+id/tvgenerico2"> | |
76 | + | |
77 | + | |
78 | + <RadioButton | |
79 | + android:id="@+id/rbMdodificar" | |
80 | + android:layout_width="wrap_content" | |
81 | + android:layout_height="wrap_content" | |
82 | + android:layout_margin="5dp" | |
83 | + android:checked="false" | |
84 | + android:padding="5dp" | |
85 | + android:text="@string/rbModificar" | |
86 | + android:textSize="@dimen/text_size2" /> | |
87 | + | |
88 | + <RadioButton | |
89 | + android:id="@+id/rbSumar" | |
90 | + android:layout_width="wrap_content" | |
91 | + android:layout_height="wrap_content" | |
92 | + android:layout_margin="5dp" | |
93 | + android:checked="false" | |
94 | + android:padding="5dp" | |
95 | + android:text="@string/rbSumar" | |
96 | + android:textSize="@dimen/text_size2" /> | |
97 | + | |
98 | + <RadioButton | |
99 | + android:id="@+id/rbRestar" | |
100 | + android:layout_width="wrap_content" | |
101 | + android:layout_height="wrap_content" | |
102 | + android:layout_margin="5dp" | |
103 | + android:checked="false" | |
104 | + android:padding="5dp" | |
105 | + android:text="@string/rbRestar" | |
106 | + android:textSize="@dimen/text_size2" /> | |
107 | + </RadioGroup> | |
108 | + | |
109 | + <TextView | |
110 | + android:id="@+id/tvgenerico3" | |
111 | + android:layout_width="wrap_content" | |
112 | + android:layout_height="wrap_content" | |
113 | + android:layout_margin="5dp" | |
114 | + android:gravity="center" | |
115 | + android:text="@string/tvResultado" | |
116 | + android:textSize="20sp" | |
117 | + app:layout_constraintEnd_toEndOf="parent" | |
118 | + app:layout_constraintHorizontal_bias="0.0" | |
119 | + app:layout_constraintStart_toStartOf="parent" | |
120 | + app:layout_constraintTop_toBottomOf="@+id/rgFechaHora" /> | |
121 | + | |
122 | + <TextView | |
123 | + android:id="@+id/tvgenerico4" | |
124 | + android:layout_width="wrap_content" | |
125 | + android:layout_height="wrap_content" | |
126 | + android:layout_margin="5dp" | |
127 | + android:gravity="center" | |
128 | + android:text="50" | |
129 | + android:textSize="20sp" | |
130 | + app:layout_constraintEnd_toEndOf="parent" | |
131 | + app:layout_constraintHorizontal_bias="0.0" | |
132 | + app:layout_constraintStart_toEndOf="@+id/tvgenerico3" | |
133 | + app:layout_constraintTop_toBottomOf="@+id/rgFechaHora" /> | |
134 | + | |
135 | + <LinearLayout | |
136 | + android:layout_width="match_parent" | |
137 | + android:layout_height="wrap_content" | |
138 | + android:orientation="horizontal" | |
139 | + android:gravity="center" | |
140 | + app:layout_constraintStart_toStartOf="parent" | |
141 | + app:layout_constraintEnd_toEndOf="parent" | |
142 | + app:layout_constraintTop_toBottomOf="@+id/tvgenerico4"> | |
143 | + | |
144 | + <Button | |
145 | + android:id="@+id/dialogLoginBtn" | |
146 | + style="@style/Base.Widget.AppCompat.Button.Colored" | |
147 | + android:layout_width="wrap_content" | |
148 | + android:padding="20dp" | |
149 | + android:layout_margin="5dp" | |
150 | + android:layout_height="wrap_content" | |
151 | + android:text="@string/btnOk" /> | |
152 | + | |
153 | + <Button | |
154 | + android:id="@+id/dialogCancelBtn" | |
155 | + style="@style/Base.Widget.AppCompat.Button.Colored" | |
156 | + android:padding="20dp" | |
157 | + android:layout_margin="5dp" | |
158 | + android:layout_width="wrap_content" | |
159 | + android:layout_height="wrap_content" | |
160 | + android:text="@string/btnCancelar" /> | |
161 | + </LinearLayout> | |
162 | + | |
163 | +</androidx.constraintlayout.widget.ConstraintLayout> | |
0 | 164 | \ No newline at end of file |
app/src/main/res/layout/nav_header_main.xml
... | ... | @@ -0,0 +1,36 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
4 | + android:layout_width="match_parent" | |
5 | + android:layout_height="@dimen/nav_header_height" | |
6 | + android:background="@drawable/side_nav_bar" | |
7 | + android:gravity="bottom" | |
8 | + android:orientation="vertical" | |
9 | + android:paddingLeft="@dimen/activity_horizontal_margin" | |
10 | + android:paddingTop="@dimen/activity_vertical_margin" | |
11 | + android:paddingRight="@dimen/activity_horizontal_margin" | |
12 | + android:paddingBottom="@dimen/activity_vertical_margin" | |
13 | + android:theme="@style/ThemeOverlay.AppCompat.Dark"> | |
14 | + | |
15 | + <ImageView | |
16 | + android:id="@+id/imageView" | |
17 | + android:layout_width="141dp" | |
18 | + android:layout_height="wrap_content" | |
19 | + android:contentDescription=" " | |
20 | + android:paddingTop="@dimen/nav_header_vertical_spacing" | |
21 | + app:srcCompat="@drawable/logo" /> | |
22 | + | |
23 | + <TextView | |
24 | + android:layout_width="match_parent" | |
25 | + android:layout_height="wrap_content" | |
26 | + android:paddingTop="@dimen/nav_header_vertical_spacing" | |
27 | + android:textSize="@dimen/md_message_textsize" | |
28 | + android:text="Debo Inventario" | |
29 | + android:textAppearance="@style/TextAppearance.AppCompat.Body1" /> | |
30 | + | |
31 | + <TextView | |
32 | + android:id="@+id/textView" | |
33 | + android:layout_width="wrap_content" | |
34 | + android:layout_height="wrap_content" | |
35 | + android:text="FocaSoftware SA" /> | |
36 | +</LinearLayout> | |
0 | 37 | \ No newline at end of file |
app/src/main/res/layout/z_dialogpersocomplexcantidad_modificacion.xml
... | ... | @@ -0,0 +1,119 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + android:layout_width="match_parent" | |
4 | + android:layout_height="match_parent" | |
5 | + android:gravity="center_horizontal" | |
6 | + android:orientation="vertical"> | |
7 | + | |
8 | + <TableLayout | |
9 | + android:layout_width="wrap_content" | |
10 | + android:layout_height="wrap_content"> | |
11 | + | |
12 | + <TableRow | |
13 | + android:layout_width="wrap_content" | |
14 | + android:layout_height="wrap_content" | |
15 | + android:gravity="center_vertical"> | |
16 | + | |
17 | + <TextView | |
18 | + android:layout_width="200dp" | |
19 | + android:layout_height="wrap_content" | |
20 | + android:gravity="end" | |
21 | + android:text="Cantidad actual: " | |
22 | + android:textSize="20sp" /> | |
23 | + | |
24 | + <TextView | |
25 | + android:id="@+id/Z_DIALOG_cantidad_actual" | |
26 | + android:layout_width="50dp" | |
27 | + android:layout_height="wrap_content" | |
28 | + android:gravity="center" | |
29 | + android:text="13" | |
30 | + android:textSize="20sp" /> | |
31 | + </TableRow> | |
32 | + | |
33 | + <TableRow | |
34 | + android:layout_width="wrap_content" | |
35 | + android:layout_height="wrap_content" | |
36 | + android:gravity="center_vertical"> | |
37 | + | |
38 | + <TextView | |
39 | + android:layout_width="wrap_content" | |
40 | + android:layout_height="wrap_content" | |
41 | + android:gravity="end" | |
42 | + android:text="Cantidad previsional: " | |
43 | + android:textSize="20sp" /> | |
44 | + | |
45 | + <TextView | |
46 | + android:id="@+id/Z_DIALOG_cantidad_final" | |
47 | + android:layout_width="wrap_content" | |
48 | + android:layout_height="wrap_content" | |
49 | + android:gravity="center" | |
50 | + android:text="24" | |
51 | + android:textSize="20sp" /> | |
52 | + </TableRow> | |
53 | + </TableLayout> | |
54 | + | |
55 | + <LinearLayout | |
56 | + android:layout_width="wrap_content" | |
57 | + android:layout_height="wrap_content" | |
58 | + android:layout_marginTop="10dp" | |
59 | + android:gravity="center_vertical" | |
60 | + android:orientation="horizontal"> | |
61 | + | |
62 | + <TextView | |
63 | + android:id="@+id/Z_DIALOG_tipo_operacion" | |
64 | + android:layout_width="wrap_content" | |
65 | + android:layout_height="wrap_content" | |
66 | + android:gravity="end" | |
67 | + android:text="SUMAR: " | |
68 | + android:textSize="20sp" /> | |
69 | + | |
70 | + <EditText | |
71 | + android:id="@+id/Z_DIALOG_cantidad_nueva" | |
72 | + android:layout_width="120dp" | |
73 | + android:layout_height="50dp" | |
74 | + android:clickable="true" | |
75 | + android:focusable="true" | |
76 | + android:gravity="center" | |
77 | + android:hint="Cantidad" | |
78 | + android:inputType="numberDecimal" | |
79 | + android:maxLength="6" | |
80 | + android:textColor="@android:color/black" | |
81 | + android:textSize="20sp" /> | |
82 | + | |
83 | + <Button | |
84 | + android:id="@+id/Z_DIALOG_boton_reset" | |
85 | + android:layout_width="80dp" | |
86 | + android:layout_height="wrap_content" | |
87 | + android:gravity="center" | |
88 | + android:text="No tomado" | |
89 | + android:visibility="gone" /> | |
90 | + </LinearLayout> | |
91 | + | |
92 | + <LinearLayout | |
93 | + android:layout_width="wrap_content" | |
94 | + android:layout_height="wrap_content" | |
95 | + android:layout_gravity="center_horizontal" | |
96 | + android:layout_marginTop="10dp" | |
97 | + android:orientation="horizontal"> | |
98 | + | |
99 | + <ImageView | |
100 | + android:id="@+id/Z_DIALOG_validar" | |
101 | + android:layout_width="50dp" | |
102 | + android:layout_height="50dp" | |
103 | + android:layout_marginEnd="60dp" | |
104 | + android:contentDescription=" " | |
105 | + android:scaleType="fitXY" | |
106 | + android:src="@drawable/md_transparent" /> | |
107 | + | |
108 | + <ImageView | |
109 | + android:id="@+id/Z_DIALOG_cancelar" | |
110 | + android:layout_width="50dp" | |
111 | + android:layout_height="50dp" | |
112 | + android:contentDescription=" " | |
113 | + android:scaleType="fitXY" | |
114 | + android:src="@drawable/md_btn_selected_dark" /> | |
115 | + | |
116 | + | |
117 | + </LinearLayout> | |
118 | + | |
119 | +</LinearLayout> | |
0 | 120 | \ No newline at end of file |
app/src/main/res/menu/activity_main_drawer.xml
... | ... | @@ -0,0 +1,42 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<menu xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + xmlns:tools="http://schemas.android.com/tools" | |
4 | + tools:showIn="navigation_view"> | |
5 | + | |
6 | + <group android:checkableBehavior="single"> | |
7 | + <item | |
8 | + android:id="@+id/mainFragment2" | |
9 | + android:checkable="true" | |
10 | + android:checked="true" | |
11 | + android:icon="@drawable/inicio" | |
12 | + android:title="@string/menuInicio" /> | |
13 | + <item | |
14 | + android:id="@+id/mnuInicio2" | |
15 | + android:checkable="false" | |
16 | + android:checked="false" | |
17 | + | |
18 | + android:title="" /> | |
19 | + <item | |
20 | + android:id="@+id/inventarioFragment" | |
21 | + android:icon="@drawable/inventario" | |
22 | + android:title="@string/menuNueInv" /> | |
23 | + <item | |
24 | + android:id="@+id/mnuInicio3" | |
25 | + android:checkable="false" | |
26 | + android:checked="false" | |
27 | + android:title="" /> | |
28 | + <item | |
29 | + android:id="@+id/actuaMaestrosFragment" | |
30 | + android:icon="@drawable/maestros" | |
31 | + android:title="@string/menuActMae" /> | |
32 | + <item | |
33 | + android:id="@+id/mnuInicio4" | |
34 | + android:checkable="false" | |
35 | + android:checked="false" | |
36 | + android:title="" /> | |
37 | + <item | |
38 | + android:id="@+id/configuracionFragment" | |
39 | + android:icon="@drawable/configuracion" | |
40 | + android:title="@string/menuConf" /> | |
41 | + </group> | |
42 | +</menu> | |
0 | 43 | \ No newline at end of file |
app/src/main/res/menu/main.xml
... | ... | @@ -0,0 +1,9 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<menu xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + xmlns:app="http://schemas.android.com/apk/res-auto"> | |
4 | + <item | |
5 | + android:id="@+id/action_settings" | |
6 | + android:orderInCategory="100" | |
7 | + android:title="@string/action_settings" | |
8 | + app:showAsAction="never" /> | |
9 | +</menu> | |
0 | 10 | \ No newline at end of file |
app/src/main/res/menu/prueba.xml
... | ... | @@ -0,0 +1,15 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<menu xmlns:android="http://schemas.android.com/apk/res/android"> | |
3 | + <group android:checkableBehavior="single"> | |
4 | + <item | |
5 | + android:id="@+id/mainFragment2" | |
6 | + android:checkable="true" | |
7 | + android:checked="true" | |
8 | + android:icon="@drawable/inicio" | |
9 | + android:title="@string/menuInicio" /> | |
10 | + <item | |
11 | + android:id="@+id/configuracionFragment" | |
12 | + android:icon="@drawable/configuracion" | |
13 | + android:title="@string/menuConf" /> | |
14 | + </group> | |
15 | +</menu> | |
0 | 16 | \ No newline at end of file |
app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
... | ... | @@ -0,0 +1,5 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> | |
3 | + <background android:drawable="@drawable/ic_launcher_background" /> | |
4 | + <foreground android:drawable="@drawable/ic_launcher_foreground" /> | |
5 | +</adaptive-icon> | |
0 | 6 | \ No newline at end of file |
app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
... | ... | @@ -0,0 +1,5 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> | |
3 | + <background android:drawable="@drawable/ic_launcher_background" /> | |
4 | + <foreground android:drawable="@drawable/ic_launcher_foreground" /> | |
5 | +</adaptive-icon> | |
0 | 6 | \ No newline at end of file |
app/src/main/res/mipmap-hdpi/ic_launcher.png
3.51 KB
app/src/main/res/mipmap-hdpi/ic_launcher_round.png
5.21 KB
app/src/main/res/mipmap-mdpi/ic_launcher.png
2.57 KB
app/src/main/res/mipmap-mdpi/ic_launcher_round.png
3.31 KB
app/src/main/res/mipmap-xhdpi/ic_launcher.png
4.81 KB
app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
7.3 KB
app/src/main/res/mipmap-xxhdpi/ic_launcher.png
7.72 KB
app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
11.6 KB
app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
10.4 KB
app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
16.2 KB
app/src/main/res/navigation/mobile_navigation.xml
... | ... | @@ -0,0 +1,107 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<navigation xmlns:android="http://schemas.android.com/apk/res/android" | |
3 | + xmlns:app="http://schemas.android.com/apk/res-auto" | |
4 | + xmlns:tools="http://schemas.android.com/tools" | |
5 | + android:id="@+id/mobile_navigation" | |
6 | + app:startDestination="@id/mainFragment2"> | |
7 | + | |
8 | + <activity | |
9 | + android:id="@+id/mainActivity" | |
10 | + android:name="com.focasoftware.deboinventariov20.MainActivity" | |
11 | + android:label="app_bar_main" | |
12 | + tools:layout="@layout/app_bar_main" /> | |
13 | + <fragment | |
14 | + android:id="@+id/mainFragment2" | |
15 | + android:name="com.focasoftware.deboinventariov20.ui.main.MainFragment" | |
16 | + android:label="Principal" | |
17 | + tools:layout="@layout/fragment_main" > | |
18 | + <action | |
19 | + android:id="@+id/action_mainFragment2_to_configuracionFragment" | |
20 | + app:destination="@id/configuracionFragment" | |
21 | + app:popEnterAnim="@anim/slide_in_left" | |
22 | + app:popExitAnim="@anim/slide_out_right" | |
23 | + app:enterAnim="@anim/slide_in_right" | |
24 | + app:exitAnim="@anim/slide_out_left" /> | |
25 | + <action | |
26 | + android:id="@+id/action_mainFragment2_to_actuaMaestrosFragment" | |
27 | + app:destination="@id/actuaMaestrosFragment" | |
28 | + app:popEnterAnim="@anim/slide_in_left" | |
29 | + app:popExitAnim="@anim/slide_out_right" | |
30 | + app:enterAnim="@anim/slide_in_right" | |
31 | + app:exitAnim="@anim/slide_out_left" /> | |
32 | + <action | |
33 | + android:id="@+id/action_mainFragment2_to_inventarioFragment" | |
34 | + app:destination="@id/inventarioFragment" | |
35 | + app:popEnterAnim="@anim/slide_in_left" | |
36 | + app:popExitAnim="@anim/slide_out_right" | |
37 | + app:enterAnim="@anim/slide_in_right" | |
38 | + app:exitAnim="@anim/slide_out_left" /> | |
39 | + </fragment> | |
40 | + <fragment | |
41 | + android:id="@+id/actuaMaestrosFragment" | |
42 | + android:name="com.focasoftware.deboinventariov20.ui.actualizacionMaestros.ActuaMaestrosFragment" | |
43 | + android:label="Actualizaciรณn de Maestros" | |
44 | + tools:layout="@layout/fragment_actua_maestros" /> | |
45 | + <fragment | |
46 | + android:id="@+id/servidoresFragment" | |
47 | + android:name="com.focasoftware.deboinventariov20.ui.servidores.ServidoresFragment" | |
48 | + android:label="Alta Servidores" | |
49 | + tools:layout="@layout/fragment_servidores"> | |
50 | + <action | |
51 | + android:id="@+id/action_servidoresFragment_to_configuracionFragment" | |
52 | + app:destination="@id/configuracionFragment" | |
53 | + app:enterAnim="@anim/slide_in_right" | |
54 | + app:exitAnim="@anim/slide_out_left" | |
55 | + app:popEnterAnim="@anim/slide_in_left" | |
56 | + app:popExitAnim="@anim/slide_out_right" /> | |
57 | + </fragment> | |
58 | + <fragment | |
59 | + android:id="@+id/inventarioFragment" | |
60 | + android:name="com.focasoftware.deboinventariov20.ui.inventario.InventarioFragment" | |
61 | + android:label="Inventario Dinamico" | |
62 | + tools:layout="@layout/fragment_inventario" > | |
63 | + <action | |
64 | + android:id="@+id/action_inventarioFragment_to_descripcionFragment" | |
65 | + app:destination="@id/descripcionFragment" | |
66 | + app:popEnterAnim="@anim/slide_in_left" | |
67 | + app:popExitAnim="@anim/slide_out_right" | |
68 | + app:enterAnim="@anim/slide_in_right" | |
69 | + app:exitAnim="@anim/slide_out_left" /> | |
70 | + <action | |
71 | + android:id="@+id/action_inventarioFragment_to_mainFragment2" | |
72 | + app:destination="@id/mainFragment2" | |
73 | + app:popEnterAnim="@anim/slide_in_left" | |
74 | + app:popExitAnim="@anim/slide_out_right" | |
75 | + app:enterAnim="@anim/slide_in_right" | |
76 | + app:exitAnim="@anim/slide_out_left"/> | |
77 | + | |
78 | + </fragment> | |
79 | + <fragment | |
80 | + android:id="@+id/configuracionFragment" | |
81 | + android:name="com.focasoftware.deboinventariov20.ui.configuracion.ConfiguracionFragment" | |
82 | + android:label="Configuraciones" | |
83 | + tools:layout="@layout/fragment_configuracion" > | |
84 | + <action | |
85 | + android:id="@+id/action_configuracionFragment_to_servidoresFragment" | |
86 | + app:destination="@id/servidoresFragment" | |
87 | + app:popEnterAnim="@anim/slide_in_left" | |
88 | + app:popExitAnim="@anim/slide_out_right" | |
89 | + app:enterAnim="@anim/slide_in_right" | |
90 | + app:exitAnim="@anim/slide_out_left" /> | |
91 | + </fragment> | |
92 | + <fragment | |
93 | + android:id="@+id/descripcionFragment" | |
94 | + android:name="com.focasoftware.deboinventariov20.ui.inventario.DescripcionFragment" | |
95 | + android:label="Productos Encontrados"> | |
96 | + | |
97 | + <action | |
98 | + android:id="@+id/action_descripcionFragment_to_inventarioFragment" | |
99 | + app:destination="@id/inventarioFragment" | |
100 | + app:popEnterAnim="@anim/slide_in_left" | |
101 | + app:popExitAnim="@anim/slide_out_right" | |
102 | + app:enterAnim="@anim/slide_in_right" | |
103 | + app:exitAnim="@anim/slide_out_left" | |
104 | + app:popUpTo="@+id/descripcionFragment" | |
105 | + app:popUpToInclusive="true"/> | |
106 | + </fragment> | |
107 | +</navigation> | |
0 | 108 | \ No newline at end of file |
app/src/main/res/values/arrays.xml
app/src/main/res/values/colors.xml
... | ... | @@ -0,0 +1,8 @@ |
1 | +<?xml version="1.0" encoding="utf-8"?> | |
2 | +<resources> | |
3 | + <color name="colorPrimaryDark">#3700B3</color> | |
4 | + <color name="colorAccent">#03DAC5</color> | |
5 | + <color name="colorPrimary">#085394</color> | |
6 | + <color name="backMenu">#dddddd</color> | |
7 | + <color name="LightGray">#E0E0E0</color> | |
8 | +</resources> | |
0 | 9 | \ No newline at end of file |
app/src/main/res/values/dimens.xml
... | ... | @@ -0,0 +1,38 @@ |
1 | +<resources> | |
2 | + <!-- Default screen margins, per the Android Design guidelines. --> | |
3 | + <dimen name="activity_horizontal_margin">16dp</dimen> | |
4 | + <dimen name="activity_vertical_margin">16dp</dimen> | |
5 | + <dimen name="nav_header_vertical_spacing">8dp</dimen> | |
6 | + <dimen name="nav_header_height">176dp</dimen> | |
7 | + <dimen name="fab_margin">16dp</dimen> | |
8 | + | |
9 | + <!-- // Tamaรฑo de los iconos--> | |
10 | + <dimen name="icon_dim">80dp</dimen> | |
11 | + <dimen name="icon_top">20dp</dimen> | |
12 | + <dimen name="text_size">12sp</dimen> | |
13 | + | |
14 | + <!-- //fragment inventario--> | |
15 | + <dimen name="subTitulos">20sp</dimen> | |
16 | + | |
17 | + <!-- //Normal Size--> | |
18 | + <dimen name="Titulos">40sp</dimen> | |
19 | + <dimen name="TitulosMedios">25sp</dimen> | |
20 | + <dimen name="SubTitulos">15sp</dimen> | |
21 | + | |
22 | + <dimen name="MarginTopSubTitulos">5dp</dimen> | |
23 | + <dimen name="MarginTopTitulos">30dp</dimen> | |
24 | + | |
25 | + <dimen name="MarginBotAgreSer">10dp</dimen> | |
26 | + <dimen name="NormalText">10sp</dimen> | |
27 | + | |
28 | + <dimen name="PadingCbyRb">5dp</dimen> | |
29 | + | |
30 | + <!-- //fragemnt Actualizacion de Maestros--> | |
31 | + <dimen name="TitulosActMa">20sp</dimen> | |
32 | + | |
33 | + | |
34 | + <dimen name="md_message_textsize">20sp</dimen> | |
35 | + <dimen name="text_size2">16sp</dimen> | |
36 | + <dimen name="list_item_spacing">16dp</dimen> | |
37 | + <dimen name="list_item_spacing_half">8dp</dimen> | |
38 | +</resources> | |
0 | 39 | \ No newline at end of file |
app/src/main/res/values/strings.xml
... | ... | @@ -0,0 +1,222 @@ |
1 | +<resources> | |
2 | + | |
3 | + <string name="nav_header_title">Android Studio</string> | |
4 | + <string name="nav_header_subtitle">android.studio@android.com</string> | |
5 | + <string name="nav_header_desc">Navigation header</string> | |
6 | + <string name="action_settings">Settings</string> | |
7 | + | |
8 | + <string name="menu_home">Home</string> | |
9 | + <string name="menu_gallery">Gallery</string> | |
10 | + <string name="menu_slideshow">Slideshow</string> | |
11 | + | |
12 | + <string name="app_name">Inventario Dinamicos</string> | |
13 | + | |
14 | + <!-- menu--> | |
15 | + <string name="menuInicio">Inicio</string> | |
16 | + <string name="menuNueInv">Nuevo Inventario</string> | |
17 | + <string name="menuActMae">Actualizar Maestros</string> | |
18 | + <string name="menuConf">Configuraciones</string> | |
19 | + <string name="menuSal">Salir</string> | |
20 | + | |
21 | + <!-- Menu header--> | |
22 | + <string name="menuLeyenda">Debo Inventario</string> | |
23 | + | |
24 | + <string name="navigation_drawer_open">Open navigation drawer</string> | |
25 | + <string name="navigation_drawer_close">Close navigation drawer</string> | |
26 | + | |
27 | + <!-- Pantalla de inicio--> | |
28 | + <string name="bien">Bienvenido</string> | |
29 | + <string name="debo">DEBOยฎ</string> | |
30 | + <string name="inventario">Inventario</string> | |
31 | + <string name="todo">TODO</string> | |
32 | + <string name="hello_blank_fragment">Hello blank fragment</string> | |
33 | + | |
34 | + <!-- inventarios dinamicos--> | |
35 | + <string name="invDinamicoVenta">Inventarios Dinamicos</string> | |
36 | + <string name="invDinamicoCompra">Inventarios Sectorizados</string> | |
37 | + | |
38 | + <!-- ventana emergente--> | |
39 | + <string name="adv">Ingrese la cantidad contada</string> | |
40 | + <string name="invVentas">Inventarios Dinamicos de Ventas</string> | |
41 | + <string name="btnConfirmar">Confirmar</string> | |
42 | + <string name="btnCancela">Cancelar</string> | |
43 | + | |
44 | + | |
45 | + <!-- Fragment Inventario--> | |
46 | + <string name="invTitulo">Inventarios Dinamicos</string> | |
47 | + <string name="invTituloV">Inventarios de Ventas</string> | |
48 | + <string name="invTituloD">Inventarios de Depositos</string> | |
49 | + <string name="invCodigoBarras">Cรณdigo Barras:</string> | |
50 | + <string name="btnExportarInv">Exportar Inventario</string> | |
51 | + <string name="btnBorrarInv">Borrar Inventario</string> | |
52 | + <string name="switch_1">+ 1</string> | |
53 | + | |
54 | + <!-- Fragmento Configuraciones--> | |
55 | + <string name="tvTituloConf">Configuraciones</string> | |
56 | + <string name="tvSeleccioneServidor">Seleccione un Servidor</string> | |
57 | + <string name="btnValidarServidor">Validar</string> | |
58 | + <string name="btnAgregarServidor">Agregar un nuevo servidor</string> | |
59 | + <string name="tvUbicacionCarpetas">Ubicaciรณn de las carpetas de uso interno</string> | |
60 | + <string name="tvTituloArea">Area de Invetnario</string> | |
61 | + <string name="rbVentas">Inventarios de Ventas</string> | |
62 | + <string name="rbDeposito">Inventarios de Depositos</string> | |
63 | + <string name="tvLosProductos">Los productos no contabilizados en Inventarios</string> | |
64 | + <string name="tvColumnas">Columnas a Visualizar</string> | |
65 | + | |
66 | + <string name="rbProInclu">Solo se ajustan los productos incluidos en el conteo.</string> | |
67 | + <string name="rbProNoInclu">Ajusta productos no incluidos en el conteo con stock en cero.</string> | |
68 | + | |
69 | + <string name="cbMostrarStock">Mostror stock en el sistema al momento de la descarga del maestro.</string> | |
70 | + <string name="cbHabiLectura">Habilitar Lectura de codigo de barras en balanza.</string> | |
71 | + | |
72 | + <string name="tvColumMostrar">Columnas a mostrar en inventario</string> | |
73 | + | |
74 | + <string name="rbCodigoDebo">Cรณdigo DEBO</string> | |
75 | + <string name="rbCodigoOrigen">Cรณdigo Origen</string> | |
76 | + <string name="rbCodigoBarras">Cรณdigo de Barras</string> | |
77 | + | |
78 | + | |
79 | + <!-- Spinner servidor--> | |
80 | + <string-array name="spinnerServidor"> | |
81 | + <item>Servidor Laboratorio 1</item> | |
82 | + <item>Servidor Laboratorio 2</item> | |
83 | + <item>Servidor Laboratorio 3</item> | |
84 | + </string-array> | |
85 | + <string name="leyendaSpinner">Seleccione Servidor Predeterminado</string> | |
86 | + | |
87 | + <string name="cbMostrarExistencia">Existencia</string> | |
88 | + <string name="cbMostrarPrecio">Precio</string> | |
89 | + | |
90 | + <string name="btnGuardar">Guardar Cambios</string> | |
91 | + | |
92 | + <!-- fragment Actualizacion de Maestros--> | |
93 | + <string name="tvActMaestros">Actualizaciรณn de Maestros</string> | |
94 | + <string name="tvMedio">Seleccione el medio por el cual desea realizar la importaciรณn de maestros</string> | |
95 | + <string name="obPorWifi">Via Wifi</string> | |
96 | + <string name="obViaArchivo">Via Archivos MaeTable</string> | |
97 | + | |
98 | + <string name="btnConfirmarAct">Confirmar Actualizaciรณn</string> | |
99 | + | |
100 | + <!-- Fragment Save--> | |
101 | + <string name="tvConfServi">Configuraciรณn de Servidores</string> | |
102 | + <string name="server">Ingrese la direccion del servidor</string> | |
103 | + <string name="etNomServer">Ingrese una descripciรณn para la conexiรณn</string> | |
104 | + <string name="btnGuardarConfServ">Guardar Conexiรณn</string> | |
105 | + | |
106 | + <!-- Dialog--> | |
107 | + <string name="sTitulo">Producto Buscado</string> | |
108 | + <string name="btnOk">Aceptar</string> | |
109 | + <string name="btnCancelar">Cancelar</string> | |
110 | + <string name="sMensaje">ยกNo se encontro el producto ingresado!</string> | |
111 | + <string name="sMensajeEncontrado">ยกIngrese la cantidad contada!</string> | |
112 | + <string name="sTituloNueva">Producto ingresado esta cargado</string> | |
113 | + <string name="sCantidadNueva">ยกPor favor ingrese la nueva Cantidad!</string> | |
114 | + <string name="sMensajeBorrarInv">ยกSeguro que desea Borrar el inventario!</string> | |
115 | + <string name="sTituloBorrarInv">Borrar Inventario</string> | |
116 | + | |
117 | + <string name="sMensajeExportar">ยกConfirma que exporta el Inventario!</string> | |
118 | + <string name="sTituloExportar">Exportaciรณn de Inventarios</string> | |
119 | + | |
120 | + <!-- FRAGMENT SERVIDOR--> | |
121 | + <string name="tvTitutloServer">Alta de Servidores</string> | |
122 | + <string name="tvNomServer">Ingrese un nombre para identificar al servidor</string> | |
123 | + <string name="tvDirServer">Ingrese la direcciรณn del servidor</string> | |
124 | + <string name="btnGuardarServidores">Guardar Servidor</string> | |
125 | + | |
126 | + <string name="tvSeleccion">Toque sobre la operaciรณn que desea realizar</string> | |
127 | + <string name="rbSumar">Sumar</string> | |
128 | + <string name="rbRestar">Restar</string> | |
129 | + <string name="rbModificar">Reemplazar</string> | |
130 | + <string name="tvTotal">Cantidad Final</string>tvTotal | |
131 | + <string name="tvResultado">La cantidad final es:</string>tvTotal | |
132 | + | |
133 | + <string name="large_text"> | |
134 | + "Material is the metaphor.\n\n" | |
135 | + | |
136 | + "A material metaphor is the unifying theory of a rationalized space and a system of motion." | |
137 | + "The material is grounded in tactile reality, inspired by the study of paper and ink, yet " | |
138 | + "technologically advanced and open to imagination and magic.\n" | |
139 | + "Surfaces and edges of the material provide visual cues that are grounded in reality. The " | |
140 | + "use of familiar tactile attributes helps users quickly understand affordances. Yet the " | |
141 | + "flexibility of the material creates new affordances that supercede those in the physical " | |
142 | + "world, without breaking the rules of physics.\n" | |
143 | + "The fundamentals of light, surface, and movement are key to conveying how objects move, " | |
144 | + "interact, and exist in space and in relation to each other. Realistic lighting shows " | |
145 | + "seams, divides space, and indicates moving parts.\n\n" | |
146 | + | |
147 | + "Bold, graphic, intentional.\n\n" | |
148 | + | |
149 | + "The foundational elements of print based design typography, grids, space, scale, color, " | |
150 | + "and use of imagery guide visual treatments. These elements do far more than please the " | |
151 | + "eye. They create hierarchy, meaning, and focus. Deliberate color choices, edge to edge " | |
152 | + "imagery, large scale typography, and intentional white space create a bold and graphic " | |
153 | + "interface that immerse the user in the experience.\n" | |
154 | + "An emphasis on user actions makes core functionality immediately apparent and provides " | |
155 | + "waypoints for the user.\n\n" | |
156 | + | |
157 | + "Motion provides meaning.\n\n" | |
158 | + | |
159 | + "Motion respects and reinforces the user as the prime mover. Primary user actions are " | |
160 | + "inflection points that initiate motion, transforming the whole design.\n" | |
161 | + "All action takes place in a single environment. Objects are presented to the user without " | |
162 | + "breaking the continuity of experience even as they transform and reorganize.\n" | |
163 | + "Motion is meaningful and appropriate, serving to focus attention and maintain continuity. " | |
164 | + "Feedback is subtle yet clear. Transitions are ef๏ฌcient yet coherent.\n\n" | |
165 | + | |
166 | + "3D world.\n\n" | |
167 | + | |
168 | + "The material environment is a 3D space, which means all objects have x, y, and z " | |
169 | + "dimensions. The z-axis is perpendicularly aligned to the plane of the display, with the " | |
170 | + "positive z-axis extending towards the viewer. Every sheet of material occupies a single " | |
171 | + "position along the z-axis and has a standard 1dp thickness.\n" | |
172 | + "On the web, the z-axis is used for layering and not for perspective. The 3D world is " | |
173 | + "emulated by manipulating the y-axis.\n\n" | |
174 | + | |
175 | + "Light and shadow.\n\n" | |
176 | + | |
177 | + "Within the material environment, virtual lights illuminate the scene. Key lights create " | |
178 | + "directional shadows, while ambient light creates soft shadows from all angles.\n" | |
179 | + "Shadows in the material environment are cast by these two light sources. In Android " | |
180 | + "development, shadows occur when light sources are blocked by sheets of material at " | |
181 | + "various positions along the z-axis. On the web, shadows are depicted by manipulating the " | |
182 | + "y-axis only. The following example shows the card with a height of 6dp.\n\n" | |
183 | + | |
184 | + "Resting elevation.\n\n" | |
185 | + | |
186 | + "All material objects, regardless of size, have a resting elevation, or default elevation " | |
187 | + "that does not change. If an object changes elevation, it should return to its resting " | |
188 | + "elevation as soon as possible.\n\n" | |
189 | + | |
190 | + "Component elevations.\n\n" | |
191 | + | |
192 | + "The resting elevation for a component type is consistent across apps (e.g., FAB elevation " | |
193 | + "does not vary from 6dp in one app to 16dp in another app).\n" | |
194 | + "Components may have different resting elevations across platforms, depending on the depth " | |
195 | + "of the environment (e.g., TV has a greater depth than mobile or desktop).\n\n" | |
196 | + | |
197 | + "Responsive elevation and dynamic elevation offsets.\n\n" | |
198 | + | |
199 | + "Some component types have responsive elevation, meaning they change elevation in response " | |
200 | + "to user input (e.g., normal, focused, and pressed) or system events. These elevation " | |
201 | + "changes are consistently implemented using dynamic elevation offsets.\n" | |
202 | + "Dynamic elevation offsets are the goal elevation that a component moves towards, relative " | |
203 | + "to the componentโs resting state. They ensure that elevation changes are consistent " | |
204 | + "across actions and component types. For example, all components that lift on press have " | |
205 | + "the same elevation change relative to their resting elevation.\n" | |
206 | + "Once the input event is completed or cancelled, the component will return to its resting " | |
207 | + "elevation.\n\n" | |
208 | + | |
209 | + "Avoiding elevation interference.\n\n" | |
210 | + | |
211 | + "Components with responsive elevations may encounter other components as they move between " | |
212 | + "their resting elevations and dynamic elevation offsets. Because material cannot pass " | |
213 | + "through other material, components avoid interfering with one another any number of ways, " | |
214 | + "whether on a per component basis or using the entire app layout.\n" | |
215 | + "On a component level, components can move or be removed before they cause interference. " | |
216 | + "For example, a floating action button (FAB) can disappear or move off screen before a " | |
217 | + "user picks up a card, or it can move if a snackbar appears.\n" | |
218 | + "On the layout level, design your app layout to minimize opportunities for interference. " | |
219 | + "For example, position the FAB to one side of stream of a cards so the FAB wonโt interfere " | |
220 | + "when a user tries to pick up one of cards.\n\n" | |
221 | + </string> | |
222 | +</resources> | |
0 | 223 | \ No newline at end of file |
app/src/main/res/values/styles.xml
... | ... | @@ -0,0 +1,19 @@ |
1 | +<resources> | |
2 | + <!-- Base application theme. --> | |
3 | + <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> | |
4 | + <!-- Customize your theme here. --> | |
5 | + <item name="colorPrimary">@color/colorPrimary</item> | |
6 | + <item name="colorPrimaryDark">@color/colorPrimaryDark</item> | |
7 | + <item name="colorAccent">@color/colorAccent</item> | |
8 | + </style> | |
9 | + | |
10 | + <style name="AppTheme.NoActionBar"> | |
11 | + <item name="windowActionBar">false</item> | |
12 | + <item name="windowNoTitle">true</item> | |
13 | + </style> | |
14 | + | |
15 | + <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> | |
16 | + | |
17 | + <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /> | |
18 | + | |
19 | +</resources> | |
0 | 20 | \ No newline at end of file |
app/src/test/java/com/focasoftware/deboinventariov20/ExampleUnitTest.kt
... | ... | @@ -0,0 +1,17 @@ |
1 | +package com.focasoftware.deboinventariov20 | |
2 | + | |
3 | +import org.junit.Test | |
4 | + | |
5 | +import org.junit.Assert.* | |
6 | + | |
7 | +/** | |
8 | + * Example local unit test, which will execute on the development machine (host). | |
9 | + * | |
10 | + * See [testing documentation](http://d.android.com/tools/testing). | |
11 | + */ | |
12 | +class ExampleUnitTest { | |
13 | + @Test | |
14 | + fun addition_isCorrect() { | |
15 | + assertEquals(4, 2 + 2) | |
16 | + } | |
17 | +} | |
0 | 18 | \ No newline at end of file |
build.gradle
... | ... | @@ -0,0 +1,26 @@ |
1 | +// Top-level build file where you can add configuration options common to all sub-projects/modules. | |
2 | +buildscript { | |
3 | + ext.kotlin_version = '1.4.0' | |
4 | + repositories { | |
5 | + google() | |
6 | + jcenter() | |
7 | + } | |
8 | + dependencies { | |
9 | + classpath "com.android.tools.build:gradle:4.0.1" | |
10 | + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" | |
11 | + | |
12 | + // NOTE: Do not place your application dependencies here; they belong | |
13 | + // in the individual module build.gradle files | |
14 | + } | |
15 | +} | |
16 | + | |
17 | +allprojects { | |
18 | + repositories { | |
19 | + google() | |
20 | + jcenter() | |
21 | + } | |
22 | +} | |
23 | + | |
24 | +task clean(type: Delete) { | |
25 | + delete rootProject.buildDir | |
26 | +} | |
0 | 27 | \ No newline at end of file |
gradle.properties
... | ... | @@ -0,0 +1,21 @@ |
1 | +# Project-wide Gradle settings. | |
2 | +# IDE (e.g. Android Studio) users: | |
3 | +# Gradle settings configured through the IDE *will override* | |
4 | +# any settings specified in this file. | |
5 | +# For more details on how to configure your build environment visit | |
6 | +# http://www.gradle.org/docs/current/userguide/build_environment.html | |
7 | +# Specifies the JVM arguments used for the daemon process. | |
8 | +# The setting is particularly useful for tweaking memory settings. | |
9 | +org.gradle.jvmargs=-Xmx2048m | |
10 | +# When configured, Gradle will run in incubating parallel mode. | |
11 | +# This option should only be used with decoupled projects. More details, visit | |
12 | +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects | |
13 | +# org.gradle.parallel=true | |
14 | +# AndroidX package structure to make it clearer which packages are bundled with the | |
15 | +# Android operating system, and which are packaged with your app"s APK | |
16 | +# https://developer.android.com/topic/libraries/support-library/androidx-rn | |
17 | +android.useAndroidX=true | |
18 | +# Automatically convert third-party libraries to use AndroidX | |
19 | +android.enableJetifier=true | |
20 | +# Kotlin code style for this project: "official" or "obsolete": | |
21 | +kotlin.code.style=official | |
0 | 22 | \ No newline at end of file |
gradle/wrapper/gradle-wrapper.jar
No preview for this file type
gradle/wrapper/gradle-wrapper.properties
gradlew
... | ... | @@ -0,0 +1,172 @@ |
1 | +#!/usr/bin/env sh | |
2 | + | |
3 | +############################################################################## | |
4 | +## | |
5 | +## Gradle start up script for UN*X | |
6 | +## | |
7 | +############################################################################## | |
8 | + | |
9 | +# Attempt to set APP_HOME | |
10 | +# Resolve links: $0 may be a link | |
11 | +PRG="$0" | |
12 | +# Need this for relative symlinks. | |
13 | +while [ -h "$PRG" ] ; do | |
14 | + ls=`ls -ld "$PRG"` | |
15 | + link=`expr "$ls" : '.*-> \(.*\)$'` | |
16 | + if expr "$link" : '/.*' > /dev/null; then | |
17 | + PRG="$link" | |
18 | + else | |
19 | + PRG=`dirname "$PRG"`"/$link" | |
20 | + fi | |
21 | +done | |
22 | +SAVED="`pwd`" | |
23 | +cd "`dirname \"$PRG\"`/" >/dev/null | |
24 | +APP_HOME="`pwd -P`" | |
25 | +cd "$SAVED" >/dev/null | |
26 | + | |
27 | +APP_NAME="Gradle" | |
28 | +APP_BASE_NAME=`basename "$0"` | |
29 | + | |
30 | +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |
31 | +DEFAULT_JVM_OPTS="" | |
32 | + | |
33 | +# Use the maximum available, or set MAX_FD != -1 to use that value. | |
34 | +MAX_FD="maximum" | |
35 | + | |
36 | +warn () { | |
37 | + echo "$*" | |
38 | +} | |
39 | + | |
40 | +die () { | |
41 | + echo | |
42 | + echo "$*" | |
43 | + echo | |
44 | + exit 1 | |
45 | +} | |
46 | + | |
47 | +# OS specific support (must be 'true' or 'false'). | |
48 | +cygwin=false | |
49 | +msys=false | |
50 | +darwin=false | |
51 | +nonstop=false | |
52 | +case "`uname`" in | |
53 | + CYGWIN* ) | |
54 | + cygwin=true | |
55 | + ;; | |
56 | + Darwin* ) | |
57 | + darwin=true | |
58 | + ;; | |
59 | + MINGW* ) | |
60 | + msys=true | |
61 | + ;; | |
62 | + NONSTOP* ) | |
63 | + nonstop=true | |
64 | + ;; | |
65 | +esac | |
66 | + | |
67 | +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar | |
68 | + | |
69 | +# Determine the Java command to use to start the JVM. | |
70 | +if [ -n "$JAVA_HOME" ] ; then | |
71 | + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then | |
72 | + # IBM's JDK on AIX uses strange locations for the executables | |
73 | + JAVACMD="$JAVA_HOME/jre/sh/java" | |
74 | + else | |
75 | + JAVACMD="$JAVA_HOME/bin/java" | |
76 | + fi | |
77 | + if [ ! -x "$JAVACMD" ] ; then | |
78 | + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME | |
79 | + | |
80 | +Please set the JAVA_HOME variable in your environment to match the | |
81 | +location of your Java installation." | |
82 | + fi | |
83 | +else | |
84 | + JAVACMD="java" | |
85 | + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | |
86 | + | |
87 | +Please set the JAVA_HOME variable in your environment to match the | |
88 | +location of your Java installation." | |
89 | +fi | |
90 | + | |
91 | +# Increase the maximum file descriptors if we can. | |
92 | +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then | |
93 | + MAX_FD_LIMIT=`ulimit -H -n` | |
94 | + if [ $? -eq 0 ] ; then | |
95 | + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then | |
96 | + MAX_FD="$MAX_FD_LIMIT" | |
97 | + fi | |
98 | + ulimit -n $MAX_FD | |
99 | + if [ $? -ne 0 ] ; then | |
100 | + warn "Could not set maximum file descriptor limit: $MAX_FD" | |
101 | + fi | |
102 | + else | |
103 | + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" | |
104 | + fi | |
105 | +fi | |
106 | + | |
107 | +# For Darwin, add options to specify how the application appears in the dock | |
108 | +if $darwin; then | |
109 | + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" | |
110 | +fi | |
111 | + | |
112 | +# For Cygwin, switch paths to Windows format before running java | |
113 | +if $cygwin ; then | |
114 | + APP_HOME=`cygpath --path --mixed "$APP_HOME"` | |
115 | + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` | |
116 | + JAVACMD=`cygpath --unix "$JAVACMD"` | |
117 | + | |
118 | + # We build the pattern for arguments to be converted via cygpath | |
119 | + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` | |
120 | + SEP="" | |
121 | + for dir in $ROOTDIRSRAW ; do | |
122 | + ROOTDIRS="$ROOTDIRS$SEP$dir" | |
123 | + SEP="|" | |
124 | + done | |
125 | + OURCYGPATTERN="(^($ROOTDIRS))" | |
126 | + # Add a user-defined pattern to the cygpath arguments | |
127 | + if [ "$GRADLE_CYGPATTERN" != "" ] ; then | |
128 | + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" | |
129 | + fi | |
130 | + # Now convert the arguments - kludge to limit ourselves to /bin/sh | |
131 | + i=0 | |
132 | + for arg in "$@" ; do | |
133 | + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` | |
134 | + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option | |
135 | + | |
136 | + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition | |
137 | + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` | |
138 | + else | |
139 | + eval `echo args$i`="\"$arg\"" | |
140 | + fi | |
141 | + i=$((i+1)) | |
142 | + done | |
143 | + case $i in | |
144 | + (0) set -- ;; | |
145 | + (1) set -- "$args0" ;; | |
146 | + (2) set -- "$args0" "$args1" ;; | |
147 | + (3) set -- "$args0" "$args1" "$args2" ;; | |
148 | + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; | |
149 | + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; | |
150 | + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; | |
151 | + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; | |
152 | + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; | |
153 | + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; | |
154 | + esac | |
155 | +fi | |
156 | + | |
157 | +# Escape application args | |
158 | +save () { | |
159 | + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done | |
160 | + echo " " | |
161 | +} | |
162 | +APP_ARGS=$(save "$@") | |
163 | + | |
164 | +# Collect all arguments for the java command, following the shell quoting and substitution rules | |
165 | +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" | |
166 | + | |
167 | +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong | |
168 | +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then | |
169 | + cd "$(dirname "$0")" | |
170 | +fi | |
171 | + | |
172 | +exec "$JAVACMD" "$@" |
gradlew.bat
... | ... | @@ -0,0 +1,84 @@ |
1 | +@if "%DEBUG%" == "" @echo off | |
2 | +@rem ########################################################################## | |
3 | +@rem | |
4 | +@rem Gradle startup script for Windows | |
5 | +@rem | |
6 | +@rem ########################################################################## | |
7 | + | |
8 | +@rem Set local scope for the variables with windows NT shell | |
9 | +if "%OS%"=="Windows_NT" setlocal | |
10 | + | |
11 | +set DIRNAME=%~dp0 | |
12 | +if "%DIRNAME%" == "" set DIRNAME=. | |
13 | +set APP_BASE_NAME=%~n0 | |
14 | +set APP_HOME=%DIRNAME% | |
15 | + | |
16 | +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. | |
17 | +set DEFAULT_JVM_OPTS= | |
18 | + | |
19 | +@rem Find java.exe | |
20 | +if defined JAVA_HOME goto findJavaFromJavaHome | |
21 | + | |
22 | +set JAVA_EXE=java.exe | |
23 | +%JAVA_EXE% -version >NUL 2>&1 | |
24 | +if "%ERRORLEVEL%" == "0" goto init | |
25 | + | |
26 | +echo. | |
27 | +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. | |
28 | +echo. | |
29 | +echo Please set the JAVA_HOME variable in your environment to match the | |
30 | +echo location of your Java installation. | |
31 | + | |
32 | +goto fail | |
33 | + | |
34 | +:findJavaFromJavaHome | |
35 | +set JAVA_HOME=%JAVA_HOME:"=% | |
36 | +set JAVA_EXE=%JAVA_HOME%/bin/java.exe | |
37 | + | |
38 | +if exist "%JAVA_EXE%" goto init | |
39 | + | |
40 | +echo. | |
41 | +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% | |
42 | +echo. | |
43 | +echo Please set the JAVA_HOME variable in your environment to match the | |
44 | +echo location of your Java installation. | |
45 | + | |
46 | +goto fail | |
47 | + | |
48 | +:init | |
49 | +@rem Get command-line arguments, handling Windows variants | |
50 | + | |
51 | +if not "%OS%" == "Windows_NT" goto win9xME_args | |
52 | + | |
53 | +:win9xME_args | |
54 | +@rem Slurp the command line arguments. | |
55 | +set CMD_LINE_ARGS= | |
56 | +set _SKIP=2 | |
57 | + | |
58 | +:win9xME_args_slurp | |
59 | +if "x%~1" == "x" goto execute | |
60 | + | |
61 | +set CMD_LINE_ARGS=%* | |
62 | + | |
63 | +:execute | |
64 | +@rem Setup the command line | |
65 | + | |
66 | +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar | |
67 | + | |
68 | +@rem Execute Gradle | |
69 | +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% | |
70 | + | |
71 | +:end | |
72 | +@rem End local scope for the variables with windows NT shell | |
73 | +if "%ERRORLEVEL%"=="0" goto mainEnd | |
74 | + | |
75 | +:fail | |
76 | +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of | |
77 | +rem the _cmd.exe /c_ return code! | |
78 | +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 | |
79 | +exit /b 1 | |
80 | + | |
81 | +:mainEnd | |
82 | +if "%OS%"=="Windows_NT" endlocal | |
83 | + | |
84 | +:omega |
settings.gradle