diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index 6fd26cd..5219fd1 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -13,6 +13,9 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/projetosaveit/adapter/AdapterProduto.kt b/app/src/main/java/com/example/projetosaveit/adapter/AdapterProduto.kt
index d37ad6e..6d7afcc 100644
--- a/app/src/main/java/com/example/projetosaveit/adapter/AdapterProduto.kt
+++ b/app/src/main/java/com/example/projetosaveit/adapter/AdapterProduto.kt
@@ -19,6 +19,7 @@ import com.example.projetosaveit.R
import com.example.projetosaveit.adapter.recycleView.Produto
import com.example.projetosaveit.api.repository.EstoqueRepository
import com.example.projetosaveit.api.repository.LoteRepository
+import com.example.projetosaveit.api.repository.ProdutoRepository
import com.example.projetosaveit.api.repository.VitrineRepository
import com.example.projetosaveit.model.EstoqueDTO
import com.example.projetosaveit.model.ProdutoInfoDTO
@@ -37,7 +38,7 @@ class AdapterProduto : RecyclerView.Adapter() {
var listProdutos = listOf()
var repository : LoteRepository = LoteRepository()
var repositoryVitrine : VitrineRepository = VitrineRepository()
- var repositoryEstoque : EstoqueRepository = EstoqueRepository()
+ var produtoRepository : ProdutoRepository = ProdutoRepository()
override fun onCreateViewHolder(
parent: ViewGroup,
@@ -101,7 +102,7 @@ class AdapterProduto : RecyclerView.Adapter() {
) {
if (response.isSuccessful) {
var estoque : EstoqueDTO = EstoqueDTO(0, 0, produto.quantity.toInt() - quantidade, produto.batchId, produto.id, 0, "", LocalDateTime.now())
- repositoryEstoque.postEstoque(estoque).enqueue(object : retrofit2.Callback {
+ produtoRepository.postProduto(estoque).enqueue(object : retrofit2.Callback {
override fun onResponse(
call: retrofit2.Call,
response: retrofit2.Response
diff --git a/app/src/main/java/com/example/projetosaveit/api/network/ApiService.kt b/app/src/main/java/com/example/projetosaveit/api/network/ApiService.kt
index 9308291..f5e9561 100644
--- a/app/src/main/java/com/example/projetosaveit/api/network/ApiService.kt
+++ b/app/src/main/java/com/example/projetosaveit/api/network/ApiService.kt
@@ -6,11 +6,14 @@ import com.example.projetosaveit.model.ChatDTO
import com.example.projetosaveit.model.EmpresaDTO
import com.example.projetosaveit.model.EmpresaInsertDTO
import com.example.projetosaveit.model.EstoqueDTO
+import com.example.projetosaveit.model.EstoqueInsertDTO
import com.example.projetosaveit.model.FuncionarioDTO
import com.example.projetosaveit.model.FuncionarioInsertDTO
import com.example.projetosaveit.model.ImagemDTO
+import com.example.projetosaveit.model.LoteDTO
import com.example.projetosaveit.model.LoteInsertDTO
import com.example.projetosaveit.model.ProdutoInfoDTO
+import com.example.projetosaveit.model.RelatorioDTO
import com.example.projetosaveit.model.VitrineDTO
import com.example.projetosaveit.model.VitrineInsertDTO
import okhttp3.ResponseBody
@@ -27,8 +30,8 @@ interface ApiService {
// API de SQL
- @POST("/api/product/inserir")
- fun postEstoque(@Body estoque : EstoqueDTO) : Call
+ @POST("api/product/inserir")
+ fun postProduto(@Body estoque : EstoqueDTO) : Call
@GET("api/batch/listarProdutosLote/{enterpriseId}")
fun getProdutos(@Path("enterpriseId") idEmpresa : Long): Call>
@@ -78,6 +81,15 @@ interface ApiService {
@GET("api/employee/buscarPorEmail/{email}")
fun getFuncionarioEmail(@Path("email") email : String): Call
+ @GET("api/stock/relatorioProduto/{enterpriseId}")
+ fun getRelatorioProdutos(@Path("enterpriseId") idEmpresa : Long): Call>
+
+ @GET("api/batch/selecionarSku/{sku}")
+ fun getBatchSku(@Path("sku") sku : String): Call
+
+ @POST("api/stock/inserir")
+ fun postEstoque(@Body estoque : EstoqueInsertDTO) : Call
+
// API de Mongo
@GET("chats/enterprise/{enterpriseId}")
diff --git a/app/src/main/java/com/example/projetosaveit/api/repository/EstoqueRepository.kt b/app/src/main/java/com/example/projetosaveit/api/repository/EstoqueRepository.kt
index a3c005c..49b9a19 100644
--- a/app/src/main/java/com/example/projetosaveit/api/repository/EstoqueRepository.kt
+++ b/app/src/main/java/com/example/projetosaveit/api/repository/EstoqueRepository.kt
@@ -3,12 +3,19 @@ package com.example.projetosaveit.api.repository
import com.example.projetosaveit.api.network.ApiService
import com.example.projetosaveit.api.network.RetrofitClientSql
import com.example.projetosaveit.model.EstoqueDTO
+import com.example.projetosaveit.model.EstoqueInsertDTO
+import com.example.projetosaveit.model.RelatorioDTO
import okhttp3.Response
import okhttp3.ResponseBody
import retrofit2.Call
class EstoqueRepository {
- fun postEstoque(estoque : EstoqueDTO) : Call {
+
+ fun getRelatorioMensal(enterpriseId: Long): Call> {
+ return RetrofitClientSql.instance.getRelatorioProdutos(enterpriseId)
+ }
+
+ fun postEstoque(estoque: EstoqueInsertDTO) : Call {
return RetrofitClientSql.instance.postEstoque(estoque)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/projetosaveit/api/repository/LoteRepository.kt b/app/src/main/java/com/example/projetosaveit/api/repository/LoteRepository.kt
index 7144840..5c28e64 100644
--- a/app/src/main/java/com/example/projetosaveit/api/repository/LoteRepository.kt
+++ b/app/src/main/java/com/example/projetosaveit/api/repository/LoteRepository.kt
@@ -2,6 +2,7 @@ package com.example.projetosaveit.api.repository
import com.example.projetosaveit.adapter.recycleView.Produto
import com.example.projetosaveit.api.network.RetrofitClientSql
+import com.example.projetosaveit.model.LoteDTO
import com.example.projetosaveit.model.LoteInsertDTO
import com.example.projetosaveit.model.ProdutoDTO
import com.example.projetosaveit.model.ProdutoInfoDTO
@@ -24,4 +25,8 @@ class LoteRepository {
fun patchProdutoId(id : Long, updates : Map): Call {
return RetrofitClientSql.instance.patchProdutoId(id, updates)
}
+
+ fun getLoteSku(sku: String) : Call {
+ return RetrofitClientSql.instance.getBatchSku(sku)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/projetosaveit/api/repository/ProdutoRepository.kt b/app/src/main/java/com/example/projetosaveit/api/repository/ProdutoRepository.kt
index 155d45e..1be77e1 100644
--- a/app/src/main/java/com/example/projetosaveit/api/repository/ProdutoRepository.kt
+++ b/app/src/main/java/com/example/projetosaveit/api/repository/ProdutoRepository.kt
@@ -1,6 +1,8 @@
package com.example.projetosaveit.api.repository
import com.example.projetosaveit.api.network.ApiService
+import com.example.projetosaveit.api.network.RetrofitClientSql
+import com.example.projetosaveit.model.EstoqueDTO
import com.example.projetosaveit.model.ProdutoDTO
import okhttp3.ResponseBody
import retrofit2.Call
@@ -8,5 +10,7 @@ import retrofit2.Response
class ProdutoRepository {
- // Por enquanto nada...
+ fun postProduto(estoque : EstoqueDTO) : Call {
+ return RetrofitClientSql.instance.postProduto(estoque)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/projetosaveit/model/EstoqueInsertDTO.kt b/app/src/main/java/com/example/projetosaveit/model/EstoqueInsertDTO.kt
new file mode 100644
index 0000000..a40ab02
--- /dev/null
+++ b/app/src/main/java/com/example/projetosaveit/model/EstoqueInsertDTO.kt
@@ -0,0 +1,13 @@
+package com.example.projetosaveit.model
+
+import java.time.LocalDateTime
+
+class EstoqueInsertDTO(
+ var quantityInput : Int,
+ var quantityOutput : Int,
+ var batchId : Long,
+ var productId : Long,
+ var discardQuantity : Int,
+ var discardReason : String,
+ var createdAt : String
+)
diff --git a/app/src/main/java/com/example/projetosaveit/model/RelatorioDTO.kt b/app/src/main/java/com/example/projetosaveit/model/RelatorioDTO.kt
new file mode 100644
index 0000000..f207cdf
--- /dev/null
+++ b/app/src/main/java/com/example/projetosaveit/model/RelatorioDTO.kt
@@ -0,0 +1,8 @@
+package com.example.projetosaveit.model
+
+data class RelatorioDTO(
+ val totalInput: Int,
+ val totalOutput: Int,
+ val totalDiscard: Int,
+ val monthOutput: Int
+)
diff --git a/app/src/main/java/com/example/projetosaveit/ui/CadastroEndereco.kt b/app/src/main/java/com/example/projetosaveit/ui/CadastroEndereco.kt
index d53e7ca..33ce84e 100644
--- a/app/src/main/java/com/example/projetosaveit/ui/CadastroEndereco.kt
+++ b/app/src/main/java/com/example/projetosaveit/ui/CadastroEndereco.kt
@@ -99,7 +99,7 @@ class CadastroEndereco : AppCompatActivity() {
).show()
val intent = Intent(this, MainActivity::class.java)
intent.putExtra("plano", 0)
- intent.putExtra("tipoFunc", true)
+ intent.putExtra("tipoFunc", false)
startActivity(intent)
finish()
}
diff --git a/app/src/main/java/com/example/projetosaveit/ui/Chatbot.kt b/app/src/main/java/com/example/projetosaveit/ui/Chatbot.kt
new file mode 100644
index 0000000..e0f7179
--- /dev/null
+++ b/app/src/main/java/com/example/projetosaveit/ui/Chatbot.kt
@@ -0,0 +1,41 @@
+package com.example.projetosaveit.ui
+
+import android.os.Bundle
+import android.widget.ImageButton
+import androidx.activity.enableEdgeToEdge
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.GravityCompat
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
+import androidx.drawerlayout.widget.DrawerLayout
+import com.example.projetosaveit.R
+
+class Chatbot : AppCompatActivity() {
+ private lateinit var drawerLayout: DrawerLayout
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ setContentView(R.layout.activity_chatbot)
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
+ val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
+ insets
+ }
+
+ drawerLayout = findViewById(R.id.drawerLayout)
+
+ val btMenu = findViewById(R.id.btMenu)
+ btMenu.setOnClickListener {
+ drawerLayout.openDrawer(GravityCompat.START)
+ }
+ }
+
+ override fun onBackPressed() {
+ if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
+ drawerLayout.closeDrawer(GravityCompat.START)
+ } else {
+ super.onBackPressed()
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/projetosaveit/ui/InserirFuncionario.kt b/app/src/main/java/com/example/projetosaveit/ui/InserirFuncionario.kt
index 242f071..0ea5aa3 100644
--- a/app/src/main/java/com/example/projetosaveit/ui/InserirFuncionario.kt
+++ b/app/src/main/java/com/example/projetosaveit/ui/InserirFuncionario.kt
@@ -77,7 +77,7 @@ class InserirFuncionario : AppCompatActivity() {
}
}
- fun postFuncionario(id: Long) {
+ private fun postFuncionario(id: Long) {
val nome = findViewById(R.id.nomeFunc).text.toString()
val email = findViewById(R.id.emailFunc).text.toString()
val senha = findViewById(R.id.senhaFunc).text.toString()
diff --git a/app/src/main/java/com/example/projetosaveit/ui/TelaCadastro2Comercio.kt b/app/src/main/java/com/example/projetosaveit/ui/TelaCadastro2Comercio.kt
index 16a7e19..184e1b2 100644
--- a/app/src/main/java/com/example/projetosaveit/ui/TelaCadastro2Comercio.kt
+++ b/app/src/main/java/com/example/projetosaveit/ui/TelaCadastro2Comercio.kt
@@ -70,6 +70,7 @@ class TelaCadastro2Comercio : AppCompatActivity() {
findViewById(R.id.btnLogin).setOnClickListener {
val intent = Intent(this, Login::class.java)
startActivity(intent)
+ finish()
}
}
}
diff --git a/app/src/main/java/com/example/projetosaveit/ui/cadastrarRelatorio/CadastrarRelatorio.kt b/app/src/main/java/com/example/projetosaveit/ui/cadastrarRelatorio/CadastrarRelatorio.kt
index a51a790..ba68949 100644
--- a/app/src/main/java/com/example/projetosaveit/ui/cadastrarRelatorio/CadastrarRelatorio.kt
+++ b/app/src/main/java/com/example/projetosaveit/ui/cadastrarRelatorio/CadastrarRelatorio.kt
@@ -4,46 +4,97 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.Toast
import androidx.fragment.app.Fragment
-import com.example.projetosaveit.R
+import com.example.projetosaveit.api.repository.EstoqueRepository
+import com.example.projetosaveit.api.repository.LoteRepository
+import com.example.projetosaveit.databinding.FragmentCadastrarRelatorioBinding
+import com.example.projetosaveit.model.EstoqueInsertDTO
+import com.example.projetosaveit.model.LoteDTO
+import com.google.firebase.auth.FirebaseAuth
+import okhttp3.ResponseBody
+import retrofit2.Call
+import retrofit2.Response
+import java.time.LocalDateTime
-/**
- * A simple [androidx.fragment.app.Fragment] subclass.
- * Use the [CadastrarRelatorio.newInstance] factory method to
- * create an instance of this fragment.
- */
class CadastrarRelatorio : Fragment() {
- // TODO: Rename and change types of parameters
- private var param1: String? = null
- private var param2: String? = null
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
-
- }
+ private var binding: FragmentCadastrarRelatorioBinding? = null
+ private val loteRepository = LoteRepository()
+ private val estoqueRepository = EstoqueRepository()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
- ): View? {
- // Inflate the layout for this fragment
- return inflater.inflate(R.layout.fragment_cadastrar_relatorio, container, false)
- }
+ ): View {
+ binding = FragmentCadastrarRelatorioBinding.inflate(inflater, container, false)
- companion object {
- /**
- * Use this factory method to create a new instance of
- * this fragment using the provided parameters.
- *
- * @param param1 Parameter 1.
- * @param param2 Parameter 2.
- * @return A new instance of fragment CadastrarRelatorio.
- */
- // TODO: Rename and change types and number of parameters
- @JvmStatic
- fun newInstance(param1: String, param2: String) =
- CadastrarRelatorio().apply {
+ binding?.btnCadastrarEstoque?.setOnClickListener {
+ val sku = binding?.sku?.text.toString()
+ val qntdProd = binding?.qntdProd?.text.toString()
+ val qntdSaida = binding?.qntdSaida?.text.toString()
+ val motivoDescarte = binding?.motivoDescarte?.text.toString()
+ val qntdDescarte = binding?.qntdDescarte?.text.toString()
+
+ if (sku.isBlank() || qntdProd.isBlank() || qntdSaida.isBlank() || qntdDescarte.isBlank()) {
+ Toast.makeText(requireContext(), "Preencha todos os campos obrigatórios.", Toast.LENGTH_SHORT).show()
+ return@setOnClickListener
}
+
+ val createdAt = LocalDateTime.now()
+
+ loteRepository.getLoteSku(sku).enqueue(object : retrofit2.Callback {
+ override fun onResponse(call: Call, response: Response) {
+ if (response.isSuccessful) {
+ val lote = response.body()
+ if (lote != null) {
+ val estoqueDto = EstoqueInsertDTO(
+ quantityInput = qntdProd.toInt(),
+ quantityOutput = qntdSaida.toInt(),
+ createdAt = createdAt.toString(),
+ productId = lote.productId,
+ batchId = lote.id,
+ discardReason = motivoDescarte,
+ discardQuantity = qntdDescarte.toInt()
+ )
+
+ estoqueRepository.postEstoque(estoqueDto)
+ .enqueue(object : retrofit2.Callback {
+ override fun onResponse(
+ call: Call,
+ response: Response
+ ) {
+ if (response.isSuccessful) {
+ Toast.makeText(requireContext(), "Estoque cadastrado com sucesso", Toast.LENGTH_SHORT).show()
+ } else {
+ Toast.makeText(requireContext(), "Erro ao cadastrar estoque", Toast.LENGTH_SHORT).show()
+ }
+ }
+
+ override fun onFailure(call: Call, t: Throwable) {
+ Toast.makeText(requireContext(), "Erro ao cadastrar estoque: ${t.message}", Toast.LENGTH_SHORT).show()
+ }
+ })
+ } else {
+ Toast.makeText(requireContext(), "Lote não encontrado", Toast.LENGTH_SHORT).show()
+ }
+ } else {
+ Toast.makeText(requireContext(), "Erro ao buscar lote", Toast.LENGTH_SHORT).show()
+ }
+ }
+
+ override fun onFailure(call: Call, t: Throwable) {
+ Toast.makeText(requireContext(), "Erro ao buscar lote: ${t.message}", Toast.LENGTH_SHORT).show()
+ }
+ })
+ }
+
+ return binding!!.root
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ binding = null
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/projetosaveit/ui/dashboard/VitrineViewModel.kt~ b/app/src/main/java/com/example/projetosaveit/ui/dashboard/VitrineViewModel.kt~
deleted file mode 100644
index d4a0185..0000000
--- a/app/src/main/java/com/example/projetosaveit/ui/dashboard/VitrineViewModel.kt~
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.example.projetosaveit.ui.dashboard
-
-import androidx.lifecycle.LiveData
-import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.ViewModel
-
-class VitrineViewModel : ViewModel() {
- private val mText = MutableLiveData()
-
- init {
- mText.value = "This is dashboard fragment"
- }
-
- val text: LiveData
- get() = mText
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/projetosaveit/ui/relatorioMensal/Relatorio.kt b/app/src/main/java/com/example/projetosaveit/ui/relatorioMensal/Relatorio.kt
index e33657f..eb240b0 100644
--- a/app/src/main/java/com/example/projetosaveit/ui/relatorioMensal/Relatorio.kt
+++ b/app/src/main/java/com/example/projetosaveit/ui/relatorioMensal/Relatorio.kt
@@ -1,60 +1,114 @@
package com.example.projetosaveit.ui.relatorioMensal
import android.os.Bundle
+import android.util.Log
+import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.TableRow
+import android.widget.TextView
import androidx.fragment.app.Fragment
import com.example.projetosaveit.R
+import com.example.projetosaveit.api.repository.EstoqueRepository
+import com.example.projetosaveit.databinding.FragmentRelatorioBinding
+import com.example.projetosaveit.model.RelatorioDTO
+import com.example.projetosaveit.util.GetEmpresa
+import com.example.projetosaveit.util.GetFuncionario
+import com.google.firebase.auth.FirebaseAuth
+import androidx.core.content.ContextCompat
+import androidx.core.content.res.ResourcesCompat
-/**
- * A simple [androidx.fragment.app.Fragment] subclass.
- * Use the [Relatorio.newInstance] factory method to
- * create an instance of this fragment.
- */
class Relatorio : Fragment() {
- // TODO: Rename and change types of parameters
- private var mParam1: String? = null
- private var mParam2: String? = null
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- if (arguments != null) {
- mParam1 = arguments!!.getString(ARG_PARAM1)
- mParam2 = arguments!!.getString(ARG_PARAM2)
- }
- }
+ private val objAutenticar: FirebaseAuth = FirebaseAuth.getInstance()
+ private var binding: FragmentRelatorioBinding? = null
+ private val estoqueRepository = EstoqueRepository()
+ private var idEmpresa = 1L
override fun onCreateView(
- inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?
- ): View? {
- // Inflate the layout for this fragment
- return inflater.inflate(R.layout.fragment_relatorio, container, false)
+ inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+ ): View {
+ binding = FragmentRelatorioBinding.inflate(inflater, container, false)
+ return binding!!.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ val email = objAutenticar.currentUser?.email
+ if (email == null) {
+ Log.e("Relatório", "Usuário não autenticado")
+ return
+ }
+
+ GetFuncionario.pegarEmailFunc(email) { func ->
+ if (func != null) {
+ val enterpriseId = func.enterpriseId
+ GetEmpresa.pegarIdEmpresa(enterpriseId) { empresa ->
+ if (empresa != null) {
+ idEmpresa = empresa.id
+ estoqueRepository.getRelatorioMensal(idEmpresa)
+ .enqueue(object : retrofit2.Callback> {
+ override fun onResponse(
+ call: retrofit2.Call>,
+ response: retrofit2.Response>
+ ) {
+ if (response.isSuccessful)
+ fillTable(response.body() ?: emptyList())
+ }
+
+ override fun onFailure(
+ call: retrofit2.Call>,
+ t: Throwable
+ ) {
+ Log.e("Relatório", "Falha: ${t.message}", t)
+ }
+ })
+ } else {
+ Log.e("Relatório", "Empresa não encontrada para o ID: $enterpriseId")
+ }
+ }
+ } else {
+ Log.e("Relatório", "Funcionário não encontrado para o email: $email")
+ }
+ }
}
- companion object {
- // TODO: Rename parameter arguments, choose names that match
- // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
- private const val ARG_PARAM1 = "param1"
- private const val ARG_PARAM2 = "param2"
-
- /**
- * Use this factory method to create a new instance of
- * this fragment using the provided parameters.
- *
- * @param param1 Parameter 1.
- * @param param2 Parameter 2.
- * @return A new instance of fragment Relatorio.
- */
- // TODO: Rename and change types and number of parameters
- fun newInstance(param1: String?, param2: String?): Relatorio {
- val fragment = Relatorio()
- val args = Bundle()
- args.putString(ARG_PARAM1, param1)
- args.putString(ARG_PARAM2, param2)
- fragment.arguments = args
- return fragment
+ private fun fillTable(data: List) {
+ val table = binding?.tableLayout ?: return
+ table.removeAllViews()
+
+ val months = listOf(
+ "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho",
+ "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"
+ )
+
+ val monthMap = data.associateBy { it.monthOutput - 1 }
+
+ months.forEachIndexed { index, month ->
+ val row = TableRow(requireContext())
+
+ val totals = monthMap[index]
+ row.addView(createCell(month))
+ row.addView(createCell((totals?.totalInput ?: 0).toString()))
+ row.addView(createCell((totals?.totalOutput ?: 0).toString()))
+ row.addView(createCell((totals?.totalDiscard ?: 0).toString()))
+
+ table.addView(row)
}
}
+
+ private fun createCell(text: String) = TextView(requireContext()).apply {
+ this.text = text
+ setPadding(8, 8, 8, 8)
+ setTextColor(ContextCompat.getColor(requireContext(), R.color.PretoNaoPuro))
+ gravity = Gravity.CENTER
+ setBackgroundResource(R.drawable.borda_cell)
+ typeface = ResourcesCompat.getFont(requireContext(), R.font.inclusive_sans)
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ binding = null
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/projetosaveit/ui/toolbar/ToolbarFactory.kt b/app/src/main/java/com/example/projetosaveit/ui/toolbar/ToolbarFactory.kt
index 4765e40..001850c 100644
--- a/app/src/main/java/com/example/projetosaveit/ui/toolbar/ToolbarFactory.kt
+++ b/app/src/main/java/com/example/projetosaveit/ui/toolbar/ToolbarFactory.kt
@@ -3,10 +3,10 @@ package com.example.projetosaveit.ui.toolbar
object ToolbarFactory {
fun criarToolbar(plano: Int?, tipoFunc: Boolean?): ToolbarProvider {
return when {
- tipoFunc != null && tipoFunc -> AdminToolbar()
+ tipoFunc != null && tipoFunc && plano == 1 -> AdminToolbar()
+ tipoFunc != null && !tipoFunc && plano == 1 -> FuncionarioToolbar()
plano != null && plano == 0 -> SemPlanoToolbar()
plano != null && plano == 1 -> AdminToolbar()
- tipoFunc != null && !tipoFunc -> FuncionarioToolbar()
else -> SemPlanoToolbar()
}
}
diff --git a/app/src/main/res/drawable/icon_menu.png b/app/src/main/res/drawable/icon_menu.png
new file mode 100644
index 0000000..00eedaa
Binary files /dev/null and b/app/src/main/res/drawable/icon_menu.png differ
diff --git a/app/src/main/res/drawable/icon_menu_2x.png b/app/src/main/res/drawable/icon_menu_2x.png
new file mode 100644
index 0000000..d57baa6
Binary files /dev/null and b/app/src/main/res/drawable/icon_menu_2x.png differ
diff --git a/app/src/main/res/layout-sw600dp/activity_tela_cadastro2_comercio.xml b/app/src/main/res/layout-sw600dp/activity_tela_cadastro2_comercio.xml
index c306fbb..6378bbc 100644
--- a/app/src/main/res/layout-sw600dp/activity_tela_cadastro2_comercio.xml
+++ b/app/src/main/res/layout-sw600dp/activity_tela_cadastro2_comercio.xml
@@ -51,7 +51,7 @@
android:background="@drawable/caixa_texto"
android:fontFamily="@font/inclusive_sans"
android:gravity="center_vertical"
- android:hint="Digite seu numero de telefone (xx xxxxx-xxxx)"
+ android:hint="Digite seu número de telefone (xx xxxxx-xxxx)"
android:paddingLeft="10dp"
android:textColor="@color/PretoNaoPuro"
android:textColorHint="@color/PlaceHolderColor"
@@ -108,7 +108,7 @@
android:background="@drawable/caixa_texto"
android:fontFamily="@font/inclusive_sans"
android:gravity="center_vertical"
- android:hint="Digite seu email"
+ android:hint="Digite seu e-mail"
android:paddingLeft="10dp"
android:textColor="@color/PretoNaoPuro"
android:textColorHint="@color/PlaceHolderColor"
diff --git a/app/src/main/res/layout-sw600dp/fragment_cadastrar_relatorio.xml b/app/src/main/res/layout-sw600dp/fragment_cadastrar_relatorio.xml
index a3ae309..979dd12 100644
--- a/app/src/main/res/layout-sw600dp/fragment_cadastrar_relatorio.xml
+++ b/app/src/main/res/layout-sw600dp/fragment_cadastrar_relatorio.xml
@@ -8,10 +8,11 @@
tools:context=".ui.cadastrarRelatorio.CadastrarRelatorio">
+ app:layout_constraintTop_toBottomOf="@+id/motivoDescarte"
+ app:layout_constraintVertical_bias="0.0" />
+ app:layout_constraintTop_toBottomOf="@+id/sku"
+ app:layout_constraintVertical_bias="0.0" />
+
+
+ app:layout_constraintTop_toBottomOf="@+id/qntdProd"
+ app:layout_constraintVertical_bias="0.0" />
+ app:layout_constraintTop_toBottomOf="@+id/qntdSaida" />
+ app:layout_constraintTop_toBottomOf="@+id/textView3"
+ app:layout_constraintVertical_bias="0.0" />
+ app:srcCompat="@drawable/onda_verde_escuraeclara_onze" />
+ app:layout_constraintVertical_bias="0.08" />
\ No newline at end of file
diff --git a/app/src/main/res/layout-sw600dp/fragment_relatorio.xml b/app/src/main/res/layout-sw600dp/fragment_relatorio.xml
index 71d717c..881d3c6 100644
--- a/app/src/main/res/layout-sw600dp/fragment_relatorio.xml
+++ b/app/src/main/res/layout-sw600dp/fragment_relatorio.xml
@@ -55,7 +55,7 @@
android:fontFamily="@font/inclusive_sans"
android:text="Mês"
android:textColor="@color/BrancoNaoPuro"
- android:textSize="20sp"
+ android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -64,15 +64,15 @@
android:id="@+id/textView43"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginStart="64dp"
+ android:layout_marginStart="52dp"
android:fontFamily="@font/inclusive_sans"
android:text="Entrada"
android:textColor="@color/BrancoNaoPuro"
- android:textSize="20sp"
+ android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/textView42"
app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintVertical_bias="0.52" />
+ app:layout_constraintVertical_bias="0.523" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:padding="8dp"
+ android:stretchColumns="1,2,3,4">
+
diff --git a/app/src/main/res/layout/activity_chatbot.xml b/app/src/main/res/layout/activity_chatbot.xml
new file mode 100644
index 0000000..55bb4d2
--- /dev/null
+++ b/app/src/main/res/layout/activity_chatbot.xml
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_tela_cadastro2_comercio.xml b/app/src/main/res/layout/activity_tela_cadastro2_comercio.xml
index e31ffe2..988e994 100644
--- a/app/src/main/res/layout/activity_tela_cadastro2_comercio.xml
+++ b/app/src/main/res/layout/activity_tela_cadastro2_comercio.xml
@@ -51,7 +51,7 @@
android:background="@drawable/caixa_texto"
android:fontFamily="@font/inclusive_sans"
android:gravity="center_vertical"
- android:hint="digite seu numero de telefone (xx xxxxx-xxxx)"
+ android:hint="Digite seu número de telefone (xx xxxxx-xxxx)"
android:paddingLeft="10dp"
android:textColor="@color/PretoNaoPuro"
android:textColorHint="@color/PlaceHolderColor"
@@ -108,7 +108,7 @@
android:background="@drawable/caixa_texto"
android:fontFamily="@font/inclusive_sans"
android:gravity="center_vertical"
- android:hint="Digite seu email"
+ android:hint="Digite seu e-mail"
android:paddingLeft="10dp"
android:textColor="@color/PretoNaoPuro"
android:textColorHint="@color/PlaceHolderColor"
diff --git a/app/src/main/res/layout/fragment_cadastrar_relatorio.xml b/app/src/main/res/layout/fragment_cadastrar_relatorio.xml
index 4cc06a1..2c743de 100644
--- a/app/src/main/res/layout/fragment_cadastrar_relatorio.xml
+++ b/app/src/main/res/layout/fragment_cadastrar_relatorio.xml
@@ -8,10 +8,11 @@
tools:context=".ui.cadastrarRelatorio.CadastrarRelatorio">
+ app:layout_constraintTop_toBottomOf="@+id/motivoDescarte"
+ app:layout_constraintVertical_bias="0.0" />
+ app:layout_constraintTop_toBottomOf="@+id/sku"
+ app:layout_constraintVertical_bias="0.0" />
+ app:layout_constraintTop_toBottomOf="@+id/qntdDescarte" />
+ app:layout_constraintTop_toBottomOf="@+id/qntdProd"
+ app:layout_constraintVertical_bias="0.0" />
+
+
+ app:layout_constraintTop_toBottomOf="@+id/textView3"
+ app:layout_constraintVertical_bias="0.0" />
+ app:srcCompat="@drawable/onda_verde_escuraeclara_oito" />
+ app:layout_constraintTop_toBottomOf="@+id/imageView9" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_relatorio.xml b/app/src/main/res/layout/fragment_relatorio.xml
index aa2b132..19ce1cb 100644
--- a/app/src/main/res/layout/fragment_relatorio.xml
+++ b/app/src/main/res/layout/fragment_relatorio.xml
@@ -9,8 +9,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:stretchColumns="1,2,3,4">
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index f41ae8b..bf8d587 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -15,7 +15,7 @@ activity = "1.10.1"
googleGmsGoogleServices = "4.4.3"
firebaseFirestore = "26.0.0"
firebaseAuth = "24.0.1"
-kotlin = "2.0.21"
+kotlin = "1.9.25"
coreKtx = "1.17.0"
[libraries]