diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..603b140 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..2ca1d34 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +DeboInventarioV2020 \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..72b5bb5 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,147 @@ + + + + + + + + + + + +
+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+
+
+
+ + +
+
\ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..43a7fbc --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,22 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..2cba1e2 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..a5f05cd --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..b9e49da --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/Logica carga articulos con CB.docx b/Logica carga articulos con CB.docx new file mode 100644 index 0000000000000000000000000000000000000000..90f5a3d6775be7c1697ef94ba11f268d2162abe3 GIT binary patch literal 36870 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

p?oxxg6y$lv;~{q)}TOzU!b8gbR?7SR_DP=as- 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 literal 0 HcmV?d00001 diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..226a62c --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,73 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' +apply plugin: 'kotlin-kapt' + +android { + compileSdkVersion 30 + buildToolsVersion "29.0.3" + + defaultConfig { + applicationId "com.focasoftware.deboinventariov20" + minSdkVersion 26 + targetSdkVersion 30 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = '1.8' + } +} + +dependencies { + implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation 'androidx.core:core-ktx:1.3.1' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'com.google.android.material:material:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.navigation:navigation-fragment:2.3.0' + implementation 'androidx.navigation:navigation-ui:2.3.0' + implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' + implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0' + implementation 'androidx.navigation:navigation-ui-ktx:2.3.0' + implementation 'androidx.recyclerview:recyclerview:1.1.0' + testImplementation 'junit:junit:4.13' + androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + + + //Room + implementation 'androidx.room:room-ktx:2.2.5' + implementation "androidx.room:room-runtime:2.2.5" + kapt "androidx.room:room-compiler:2.2.5" + + //Retrofit + implementation 'com.squareup.retrofit2:retrofit:2.9.0' + implementation 'com.google.code.gson:gson:2.8.6' + implementation 'com.squareup.retrofit2:converter-gson:2.9.0' + implementation 'com.squareup.okhttp3:logging-interceptor:4.8.1' + + //Gson library + implementation "com.google.code.gson:gson:2.8.6" + annotationProcessor 'androidx.room:room-compiler:2.2.5' + + + + implementation 'com.afollestad.material-dialogs:core:3.3.0' + implementation 'com.afollestad.material-dialogs:input:3.3.0' +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/androidTest/java/com/focasoftware/deboinventariov20/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/focasoftware/deboinventariov20/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..a941e1e --- /dev/null +++ b/app/src/androidTest/java/com/focasoftware/deboinventariov20/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.focasoftware.deboinventariov20 + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.focasoftware.deboinventariov20", appContext.packageName) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..ec5722d --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/DB/Constans/Constans.kt b/app/src/main/java/com/focasoftware/deboinventariov20/DB/Constans/Constans.kt new file mode 100644 index 0000000..9ca1715 --- /dev/null +++ b/app/src/main/java/com/focasoftware/deboinventariov20/DB/Constans/Constans.kt @@ -0,0 +1,13 @@ +package com.focasoftware.deboinventario.ui.actualizacionMaestros + +class Constans { + + companion object { + const val DB_NAME="DebInv" + const val TABLA_ART="Articles" + const val TABLA_INV_H="InvHead" + const val TABLA_INV_B="InvBody" + const val TABLA_SERV_INV="ServeInv" + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt b/app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt new file mode 100644 index 0000000..919ef63 --- /dev/null +++ b/app/src/main/java/com/focasoftware/deboinventariov20/DB/DAO/ArticulosDAO.kt @@ -0,0 +1,71 @@ +package com.focasoftware.deboinventariov20.DB.DAO + +import androidx.room.* +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_ART +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_INV_B +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_INV_H +import com.focasoftware.deboinventariov20.Model.* + +@Dao +interface ArticulosDAO { + + // TABLA ARTICULOS + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun insertArticulos(articulos: Articles?) + + @Query("SELECT * FROM $TABLA_ART ORDER BY DES DESC") + suspend fun findAllArticulos(): List + + @Query("SELECT * FROM $TABLA_ART WHERE DEPSN=:dep AND DES LIKE '%' || :description || '%'") + suspend fun findArticuloByDesc(description: String?, dep: Int): List + + @Query("SELECT * FROM $TABLA_ART WHERE DEPSN=:dep AND CB LIKE :codBarra") + suspend fun findArticuloByCodBar(codBarra: String?, dep: Int): Articles? + + @Query("DELETE FROM $TABLA_ART") + suspend fun deleteAllArticulos() +} + +@Dao +interface InvHeadDAO { + @Insert() + suspend fun insertInvHead(invHead: InvHead?) + + @Query("SELECT INV_NUM FROM $TABLA_INV_H ORDER BY INV_NUM DESC") + suspend fun findLastInv(): Int + + @Query("DELETE FROM $TABLA_INV_H") + suspend fun deleteAllArticulos() + + @Query("DELETE FROM $TABLA_INV_H WHERE INV_NUM=:inven") + suspend fun deleteinvHead(inven: Int) + + @Query("SELECT * FROM $TABLA_INV_H ORDER BY INV_FEI") + suspend fun fetchAllInvHead(): List +} + +@Dao +interface InvBodyDAO { + @Insert() + suspend fun insertInvBody(invBody: InvBody?) + + @Query("DELETE FROM $TABLA_INV_B") + suspend fun deleteAllInvBody() + + @Query("DELETE FROM $TABLA_INV_B WHERE INV_NUM =:inven") + suspend fun deleteInvBody(inven: Int) + + @Query("UPDATE $TABLA_INV_B SET CANT=:cant WHERE SEC=:sec AND COD=:cod") + suspend fun UpdateInvBody(cant: Float, sec: String, cod: String) + + @Query("SELECT * FROM $TABLA_INV_B WHERE INV_NUM =:inven ORDER BY INV_FEI DESC") + suspend fun fetchAllInvBody(inven:Int): List +} +@Dao +interface ServeInvDao { + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertServer(servidor: ServeInv) + + @Query("SELECT SER_NUM,SER_DESC, SER_DIR FROM ServeInv") + suspend fun findAllServers(): List +} \ No newline at end of file diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/DB/DataBase/AppDb.kt b/app/src/main/java/com/focasoftware/deboinventariov20/DB/DataBase/AppDb.kt new file mode 100644 index 0000000..aea9fdf --- /dev/null +++ b/app/src/main/java/com/focasoftware/deboinventariov20/DB/DataBase/AppDb.kt @@ -0,0 +1,42 @@ +package com.focasoftware.deboinventariov20.DB.DataBase + +import android.content.Context +import androidx.room.Database +import androidx.room.Room +import androidx.room.RoomDatabase +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_ART +import com.focasoftware.deboinventariov20.DB.DAO.* +import com.focasoftware.deboinventariov20.Model.Articles +import com.focasoftware.deboinventariov20.Model.InvBody +import com.focasoftware.deboinventariov20.Model.InvHead +import com.focasoftware.deboinventariov20.Model.ServeInv + + +@Database(entities = [Articles::class, InvHead::class, InvBody::class, ServeInv::class], version = 1, exportSchema = false) +abstract class AppDb : RoomDatabase() { + abstract fun ArticulosDAO(): ArticulosDAO? + abstract fun InvHeadDAO(): InvHeadDAO? + abstract fun InvBodyDAO(): InvBodyDAO? + abstract fun ServeInvDao(): ServeInvDao? + + companion object { + private var INSTANCE: AppDb? = null + fun getAppDb(context: Context): AppDb? { + if (INSTANCE == null) { + INSTANCE = Room.databaseBuilder( + context.applicationContext, + AppDb::class.java, + Constans.DB_NAME + ) + .allowMainThreadQueries() + .build() + } + return INSTANCE + } + + fun destroyInstance() { + INSTANCE = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/MainActivity.kt b/app/src/main/java/com/focasoftware/deboinventariov20/MainActivity.kt new file mode 100644 index 0000000..4e66919 --- /dev/null +++ b/app/src/main/java/com/focasoftware/deboinventariov20/MainActivity.kt @@ -0,0 +1,48 @@ +package com.focasoftware.deboinventariov20 + +import android.os.Bundle +import android.view.Menu +import com.google.android.material.floatingactionbutton.FloatingActionButton +import com.google.android.material.snackbar.Snackbar +import com.google.android.material.navigation.NavigationView +import androidx.navigation.findNavController +import androidx.navigation.ui.AppBarConfiguration +import androidx.navigation.ui.navigateUp +import androidx.navigation.ui.setupActionBarWithNavController +import androidx.navigation.ui.setupWithNavController +import androidx.drawerlayout.widget.DrawerLayout +import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.widget.Toolbar + +class MainActivity : AppCompatActivity() { + + private lateinit var appBarConfiguration: AppBarConfiguration + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + val toolbar: Toolbar = findViewById(R.id.toolbar) + setSupportActionBar(toolbar) + + + val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout) + val navView: NavigationView = findViewById(R.id.nav_view) + val navController = findNavController(R.id.nav_host_fragment) + + appBarConfiguration = AppBarConfiguration(setOf( + R.id.mainFragment2,R.id.inventarioFragment, R.id.actuaMaestrosFragment, R.id.configuracionFragment), drawerLayout) + setupActionBarWithNavController(navController, appBarConfiguration) + navView.setupWithNavController(navController) + } + + override fun onCreateOptionsMenu(menu: Menu): Boolean { + // Inflate the menu; this adds items to the action bar if it is present. + menuInflater.inflate(R.menu.main, menu) + return true + } + + override fun onSupportNavigateUp(): Boolean { + val navController = findNavController(R.id.nav_host_fragment) + return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosApi.kt b/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosApi.kt new file mode 100644 index 0000000..24ba60f --- /dev/null +++ b/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosApi.kt @@ -0,0 +1,11 @@ +package com.focasoftware.deboinventariov20.Model + +import retrofit2.Response +import retrofit2.http.GET + +interface ProductosApi { + + @GET("api/articulos") + suspend fun getProductos(): Response> + +} \ No newline at end of file diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt b/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt new file mode 100644 index 0000000..3957eab --- /dev/null +++ b/app/src/main/java/com/focasoftware/deboinventariov20/Model/ProductosService.kt @@ -0,0 +1,18 @@ +package com.focasoftware.deboinventariov20.Model + +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +object ProductosService { + private val BASE_URL ="http://10.0.2.2:3000/" + //"http://10.231.45.83:3000/" + + + fun getProductosService(): ProductosApi { + return Retrofit.Builder() + .baseUrl(BASE_URL) + .addConverterFactory(GsonConverterFactory.create()) + .build() + .create(ProductosApi::class.java) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/Model/Tablas.kt b/app/src/main/java/com/focasoftware/deboinventariov20/Model/Tablas.kt new file mode 100644 index 0000000..1a5aef8 --- /dev/null +++ b/app/src/main/java/com/focasoftware/deboinventariov20/Model/Tablas.kt @@ -0,0 +1,83 @@ +package com.focasoftware.deboinventariov20.Model + +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.PrimaryKey +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_ART +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_INV_B +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_INV_H +import com.focasoftware.deboinventario.ui.actualizacionMaestros.Constans.Companion.TABLA_SERV_INV +import com.google.gson.annotations.SerializedName +import java.io.Serializable + +data class Productos( + @SerializedName("SEC")var sector: String?, + @SerializedName("COD") var codigo: String?, + @SerializedName("DESC") var descripcion: String?, + @SerializedName("CB") var codBar: String?, + @SerializedName("CBC") var codOrigen: String?, + @SerializedName("PRE_VTA") var precio: String?, + @SerializedName("PRE_COS") var costo: String?, + @SerializedName("BAL") var balanza: Int?, + @SerializedName("DEPSN") var depSn: Int?, + @SerializedName("FOTO") var imagen: String?) + +@Entity(tableName = TABLA_ART) +data class Articles( + @ColumnInfo(name = "SEC") var sector: String?, + @ColumnInfo(name = "COD") var codigo: String?, + @ColumnInfo(name = "DES") var descripcion: String?, + @ColumnInfo(name = "CB") var codBar: String?, + @ColumnInfo(name = "CBC") var codOrigen: String?, + @ColumnInfo(name = "PRE_VTA") var precio: String?, + @ColumnInfo(name = "PRE_COS") var costo: String?, + @ColumnInfo(name = "BAL") var balanza: Int?, + @ColumnInfo(name = "DEPSN") var depSn: Int?, + @ColumnInfo(name = "FOTO") var imagen: String?) : Serializable { + @PrimaryKey(autoGenerate = true) + @ColumnInfo(name = "id") var id: Long = 0 +} + + +@Entity(tableName = TABLA_INV_H) +data class InvHead(@PrimaryKey(autoGenerate = true) @ColumnInfo(name = "INV_NUM") var invNum: Int, + @ColumnInfo(name = "INV_DESC") var descripcion: String?, + @ColumnInfo(name = "ESTADO") var estado: Int?, + @ColumnInfo(name = "INV_FEI") var fechaInicio: String?, + @ColumnInfo(name = "INV_FEF") var fechaFinal: String?, +// productos contados en el inventario + @ColumnInfo(name = "INV_PRODCONT") var prodContados: Long?, + @ColumnInfo(name = "INV_LUG") var lugar: Int?, +// Solo se ajustan los productos incluidos en el conteo=0 +// Ajusta productos no incluidos en el conteo con stock en cero=1 + @ColumnInfo(name = "PRO_NO_CONTA") var stDesc: Int?, +// Mostror stock en el sistema al momento de la descarga del maestro. + @ColumnInfo(name = "MOSTRAR_STOCK") var proNoCont: Int?) + + +@Entity(tableName = TABLA_INV_B) +data class InvBody( + @ColumnInfo(name = "INV_NUM") var invNum: Int, + @ColumnInfo(name = "SEC") var sector: String?, + @ColumnInfo(name = "COD") var codigo: String?, + @ColumnInfo(name = "DES") var descripcion: String?, + @ColumnInfo(name = "CANT") var cantTomada: String?, + @ColumnInfo(name = "CB") var codBar: String?, + @ColumnInfo(name = "CBC") var codOrigen: String?, + @ColumnInfo(name = "PRE_VTA") var precio: String?, + @ColumnInfo(name = "PRE_COS") var costo: String?, + @ColumnInfo(name = "BAL") var balanza: Int?, + @ColumnInfo(name = "DSN") var depSn: Int?, + @ColumnInfo(name = "INV_FEI") var fechaInicio: String?, + @ColumnInfo(name = "INV_FEF") var fechaFinal: String?):Serializable{ + @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id") var id: Long = 0 +} + +@Entity(tableName = TABLA_SERV_INV) +data class ServeInv( + + @ColumnInfo(name = "SER_DESC") var descripcion: String?, @ColumnInfo(name = "SER_DIR") var direccion: String?, @ColumnInfo(name = "SER_PRE") var predeterminado: String?) : Serializable { + @PrimaryKey(autoGenerate = true) + @ColumnInfo(name = "SER_NUM") + var ID: Int = 0 +} diff --git a/app/src/main/java/com/focasoftware/deboinventariov20/ui/actualizacionMaestros/ActuaMaestrosFragment.kt b/app/src/main/java/com/focasoftware/deboinventariov20/ui/actualizacionMaestros/ActuaMaestrosFragment.kt new file mode 100644 index 0000000..c82a3bf --- /dev/null +++ b/app/src/main/java/com/focasoftware/deboinventariov20/ui/actualizacionMaestros/ActuaMaestrosFragment.kt @@ -0,0 +1,205 @@ +package com.focasoftware.deboinventariov20.ui.actualizacionMaestros + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import androidx.fragment.app.Fragment +import com.focasoftware.deboinventariov20.DB.DataBase.AppDb +import com.focasoftware.deboinventariov20.Model.Articles +import com.focasoftware.deboinventariov20.Model.Productos +import com.focasoftware.deboinventariov20.Model.ProductosService +import com.focasoftware.deboinventariov20.R +import kotlinx.android.synthetic.main.fragment_actua_maestros.* +import kotlinx.coroutines.* + +class ActuaMaestrosFragment : Fragment() { + + var job: Job? = null + + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + + //mostrarArticulos() + } + + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + val v = inflater.inflate(R.layout.fragment_actua_maestros, container, false) + val bConfirmarAct = v.findViewById