Commit c8fab9ae774769deecb37266b87776de9f9e5058

Authored by Mauricio Sanchez
0 parents
Exists in master

first commit

Showing 109 changed files with 5780 additions and 0 deletions   Show diff stats
... ... @@ -0,0 +1,14 @@
  1 +*.iml
  2 +.gradle
  3 +/local.properties
  4 +/.idea/caches
  5 +/.idea/libraries
  6 +/.idea/modules.xml
  7 +/.idea/workspace.xml
  8 +/.idea/navEditor.xml
  9 +/.idea/assetWizardSettings.xml
  10 +.DS_Store
  11 +/build
  12 +/captures
  13 +.externalNativeBuild
  14 +.cxx
... ... @@ -0,0 +1 @@
  1 +DeboInventarioV2020
0 2 \ No newline at end of file
.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
... ... @@ -0,0 +1,5 @@
  1 +<component name="ProjectCodeStyleConfiguration">
  2 + <state>
  3 + <option name="USE_PER_PROJECT_SETTINGS" value="true" />
  4 + </state>
  5 +</component>
0 6 \ No newline at end of file
... ... @@ -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
... ... @@ -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
... ... @@ -0,0 +1 @@
  1 +/build
0 2 \ No newline at end of file
... ... @@ -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
... ... @@ -0,0 +1,3 @@
  1 +package com.focasoftware.deboinventariov20.ui.inventario
  2 +
  3 +data class ItemDescripcion(val sector: String?,val codigo: String?, val descripcion: String?, val codigoBarras: String?)
0 4 \ No newline at end of file
app/src/main/java/com/focasoftware/deboinventariov20/ui/inventario/ItemsRecycler.kt
... ... @@ -0,0 +1,3 @@
  1 +package com.focasoftware.deboinventariov20.ui.inventario
  2 +
  3 +data class ItemsRecycler(val sector: String?,val codigo: String?, val descripcion: String?, var cantTomada: Float, val codigoBarras: String?)
0 4 \ No newline at end of file
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
... ... @@ -0,0 +1,3 @@
  1 +package com.focasoftware.deboinventariov20.ui.main
  2 +
  3 +data class ItemInventario(val inventario: String?)
0 4 \ No newline at end of file
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
... ... @@ -0,0 +1,3 @@
  1 +package com.focasoftware.deboinventariov20.ui.servidores
  2 +
  3 +data class ItemsServidores (val descripcion: String?, var direccion: String?, var predeterminado: String?)
0 4 \ No newline at end of file
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
... ... @@ -0,0 +1,4 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<set xmlns:android="http://schemas.android.com/apk/res/android">
  3 +
  4 +</set>
0 5 \ No newline at end of file
app/src/main/res/anim/slide_in_right.xml
... ... @@ -0,0 +1,4 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<set xmlns:android="http://schemas.android.com/apk/res/android">
  3 +
  4 +</set>
0 5 \ No newline at end of file
app/src/main/res/anim/slide_out_left.xml
... ... @@ -0,0 +1,4 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<set xmlns:android="http://schemas.android.com/apk/res/android">
  3 +
  4 +</set>
0 5 \ No newline at end of file
app/src/main/res/anim/slide_out_right.xml
... ... @@ -0,0 +1,4 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<set xmlns:android="http://schemas.android.com/apk/res/android">
  3 +
  4 +</set>
0 5 \ No newline at end of file
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
... ... @@ -0,0 +1,8 @@
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 + <string-array name="sort_array">
  4 + <item>Suma</item>
  5 + <item>Resta</item>
  6 + <item>Modifica</item>
  7 + </string-array>
  8 +</resources>
0 9 \ No newline at end of file
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
... ... @@ -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
... ... @@ -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
... ... @@ -0,0 +1,6 @@
  1 +#Thu Aug 13 18:28:21 ART 2020
  2 +distributionBase=GRADLE_USER_HOME
  3 +distributionPath=wrapper/dists
  4 +zipStoreBase=GRADLE_USER_HOME
  5 +zipStorePath=wrapper/dists
  6 +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
... ... @@ -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" "$@"
... ... @@ -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
... ... @@ -0,0 +1,2 @@
  1 +include ':app'
  2 +rootProject.name = "DeboInventarioV2020"
0 3 \ No newline at end of file