Compare commits

..

14 Commits

Author SHA1 Message Date
AngelSuarez03 92de4c6341 Correción funcionalidades recetas Médico y pacientes 2024-06-04 21:25:05 -06:00
AngelSuarez03 828842db37 Correción Logout ambas pantallas principales 2024-06-02 17:39:59 -06:00
angel.nunez 700141d395 Merge pull request 'Luis' (#12) from Luis into master
Reviewed-on: #12
2024-05-27 04:41:56 +00:00
AngelSuarez03 9defb65352 Correcion errores al hacer merge 2024-05-26 22:40:04 -06:00
angel.nunez 177ba9e60e Merge pull request 'Angel' (#10) from Angel into master
Reviewed-on: #10
2024-05-27 04:20:57 +00:00
AngelSuarez03 08ffeac5e4 Correción recycle view pacientes y funcionalidad de descarga de historial en formato csv 2024-05-26 11:32:32 -06:00
AngelSuarez03 33a29c155f Funcionalidad de historial, se anexan logs ("Historial") aca evento de la aplicación 2024-05-25 13:03:45 -06:00
mosterTeco 4c115b3e79 Funcionalidades:Enviar receta por correo, validar cedula,validar campos en pantalla de registro 2024-05-24 11:54:30 -06:00
AngelSuarez03 30a54fe6c6 Widget DatePicker en la actividad para agregar receta 2024-05-22 08:31:35 -06:00
angel.nunez 0ceb8db1a9 Merge pull request 'Angel' (#8) from Angel into master
Reviewed-on: #8
2024-05-13 03:12:28 +00:00
AngelSuarez03 2a21d6b537 Inetgración de todas las funcionalidades y RecycleView pacientes 2024-05-12 21:10:34 -06:00
AngelSuarez03 b6d8a26880 Modificar Receta Funcional 2024-05-12 13:05:35 -06:00
mosterTeco 4f693a95e0 Funcionalidad botones de cancelar 2024-05-11 17:11:06 -06:00
mosterTeco 7edc71a7ff Funcionalidad Eliminar Receta desde el médico y paciente. Funcionalidad de Cerrar Sesión. 2024-05-11 16:39:01 -06:00
56 changed files with 2155 additions and 183 deletions

View File

@ -3,7 +3,20 @@
<component name="deploymentTargetDropDown">
<value>
<entry key="app">
<State />
<State>
<targetSelectedWithDropDown>
<Target>
<type value="QUICK_BOOT_TARGET" />
<deviceKey>
<Key>
<type value="VIRTUAL_DEVICE_PATH" />
<value value="C:\Users\USER\.android\avd\Pixel_3a_API_34_extension_level_7_x86_64.avd" />
</Key>
</deviceKey>
</Target>
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2024-06-02T23:30:13.381406600Z" />
</State>
</entry>
</value>
</component>

View File

@ -15,6 +15,15 @@
android:supportsRtl="true"
android:theme="@style/Theme.MedicalHealth"
tools:targetApi="31">
<activity
android:name=".RecetasActivity"
android:exported="false" />
<activity
android:name=".PacienteActivity"
android:exported="false" />
<activity
android:name=".ModificarRecetaActivity"
android:exported="false" />
<activity
android:name=".PacientePrincipalActivity"
android:exported="false" />
@ -32,7 +41,7 @@
android:name=".RegistrarDActivity"
android:exported="false" />
<activity
android:name="Reports.ConsultarPacientesActivity"
android:name=".reports.ConsultarPacientesActivity"
android:exported="false" />
<activity
android:name=".EliminarActivity"

View File

@ -1,7 +0,0 @@
package Adapters
import Data.Receta
interface CellClickListener {
fun onCellClickListener(position : Int)
}

View File

@ -1,17 +1,28 @@
package com.terratenientes.medicalhealth
import Adapters.DoctorDataBaseHelper
import Data.Paciente
import com.terratenientes.medicalhealth.adapters.DoctorDataBaseHelper
import com.terratenientes.medicalhealth.data.Paciente
import android.R
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.widget.ArrayAdapter
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import com.terratenientes.medicalhealth.adapters.HistorialDataBaseHelper
import com.terratenientes.medicalhealth.data.Historial
import com.terratenientes.medicalhealth.databinding.ActivityAgregarPacienteBinding
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
@RequiresApi(Build.VERSION_CODES.O)
class AgregarActivity : AppCompatActivity() {
private lateinit var dbHistorial: HistorialDataBaseHelper
private lateinit var historial: Historial
private lateinit var binding: ActivityAgregarPacienteBinding
private lateinit var db: DoctorDataBaseHelper
@ -21,17 +32,17 @@ class AgregarActivity : AppCompatActivity() {
val view = binding.root
setContentView(view)
db = DoctorDataBaseHelper(this@AgregarActivity)
dbHistorial = HistorialDataBaseHelper(this@AgregarActivity)
historial = Historial("Doctor", intent.getStringExtra("NombreDoctor"),"Se inicio la actividad alta paciente", obtenerFecha())
añadirHistorial(historial)
val opcionesGenero = arrayOf("Masculino", "Femenino", "Otro")
val adapter = ArrayAdapter(this, R.layout.simple_spinner_item, opcionesGenero)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
binding.edtxSexo.adapter = adapter
binding.btnConfirmar.setOnClickListener {
//db.crearTablaPacientes()
agregarPaciente()
val intent = Intent(this@AgregarActivity, EliminarActivity::class.java)
startActivity(intent)
finish()
}
}
private fun agregarPaciente() {
@ -45,9 +56,32 @@ class AgregarActivity : AppCompatActivity() {
if (nombre.isNotEmpty() && apellidoPaterno.isNotEmpty() && apellidoMaterno.isNotEmpty() && edad != null && sexo.isNotEmpty() && domicilio.isNotEmpty()) {
val paciente = Paciente(0, nombre, apellidoPaterno, apellidoMaterno, edad, sexo, domicilio)
db.agregarPaciente(paciente)
historial.eventoRealizado = "Dio de alta un paciente"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
Toast.makeText(this@AgregarActivity, "Paciente registrado correctamente", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this@AgregarActivity, "Por favor ingrese todos los campos", Toast.LENGTH_SHORT).show()
}
}
private fun obtenerFecha(): String {
val fromTimeZone = ZoneId.of("America/Mexico_City")
val currentTime = ZonedDateTime.now(fromTimeZone)
val dateFormat = "MMM dd yyyy | hh:mm:ss a "
val formatter = DateTimeFormatter.ofPattern(dateFormat)
return formatter.format(currentTime)
}
private fun añadirHistorial(historial: Historial) {
val resultadoInsert = dbHistorial.agregarInformacin(historial)
var msj = ""
if(resultadoInsert > 0)
msj = "Información historica almacenada"
else
msj = "Error al almacenar la información"
Log.i("Historial", msj + " | Información almacenada: " + historial)
}
}

View File

@ -1,9 +1,10 @@
package com.terratenientes.medicalhealth
import Adapters.DoctorDataBaseHelper
import Adapters.PacienteAdapter
import Data.Paciente
import com.terratenientes.medicalhealth.adapters.DoctorDataBaseHelper
import com.terratenientes.medicalhealth.adapters.PacienteAdapter
import com.terratenientes.medicalhealth.data.Paciente
import android.annotation.SuppressLint
import android.content.Intent
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
@ -38,6 +39,12 @@ class EliminarActivity : AppCompatActivity() {
Toast.makeText(this, "Por favor, selecciona un paciente para eliminar.", Toast.LENGTH_SHORT).show()
}
}
binding.btnCancelar.setOnClickListener {
val intent = Intent(this@EliminarActivity, PrincipalActivity::class.java)
startActivity(intent)
finish()
}
}
private fun cargarListaPacientes() {

View File

@ -1,24 +1,21 @@
package com.terratenientes.medicalhealth
import Adapters.RecetaAdapter
import Adapters.RecetaDataBaseHelper
import Data.Receta
import com.terratenientes.medicalhealth.adapters.RecetaAdapter
import com.terratenientes.medicalhealth.adapters.RecetaDataBaseHelper
import android.content.Intent
import com.terratenientes.medicalhealth.data.Receta
import android.os.Bundle
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.terratenientes.medicalhealth.databinding.ActivityEliminarPacienteBinding
import com.terratenientes.medicalhealth.databinding.ActivityEliminarRecetaBinding
import android.widget.ListView
class EliminarRecetaActivity : AppCompatActivity() {
private lateinit var binding: ActivityEliminarRecetaBinding
private lateinit var dbReceta: RecetaDataBaseHelper
private lateinit var recetaAdapter: RecetaAdapter
private var recetaSeleccionada: Receta? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -28,30 +25,41 @@ class EliminarRecetaActivity : AppCompatActivity() {
dbReceta = RecetaDataBaseHelper(this)
// Configurar el ListView y el adaptador
val recetas = obtenerListaRecetas()
recetaAdapter = RecetaAdapter(this, recetas)
binding.listaRecetas.adapter = recetaAdapter
cargarListaRecetas()
binding.listaRecetas.setOnItemClickListener { _, _, position, _ ->
recetaSeleccionada = recetaAdapter.getItem(position)
}
// Manejar el evento de clic en el botón para eliminar receta
binding.btnEliminarReceta.setOnClickListener {
val posicionSeleccionada = binding.listaRecetas.selectedItemPosition
if (posicionSeleccionada != ListView.INVALID_POSITION) {
val recetaSeleccionada = recetas[posicionSeleccionada]
eliminarReceta(recetaSeleccionada)
recetaAdapter.remove(recetaSeleccionada)
if (recetaSeleccionada != null) {
eliminarReceta(recetaSeleccionada!!)
cargarListaRecetas()
Toast.makeText(this, "Receta eliminada correctamente", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "Por favor, seleccione una receta para eliminar", Toast.LENGTH_SHORT).show()
}
}
binding.btnCancelarr.setOnClickListener {
val intent = Intent(this@EliminarRecetaActivity, PrincipalActivity::class.java)
startActivity(intent)
finish()
}
}
private fun cargarListaRecetas() {
val recetas = obtenerListaRecetas()
recetaAdapter = RecetaAdapter(this, recetas)
binding.listaRecetas.adapter = recetaAdapter
}
private fun obtenerListaRecetas(): List<Receta> {
return dbReceta.obtenerTodasRecetas() // Implementa este método en tu RecetaDataBaseHelper para obtener todas las recetas
return dbReceta.obtenerTodasRecetas()
}
private fun eliminarReceta(receta: Receta) {
dbReceta.eliminarReceta(receta) // Implementa este método en tu RecetaDataBaseHelper para eliminar una receta
dbReceta.eliminarReceta(receta)
}
}

View File

@ -1,62 +1,125 @@
package com.terratenientes.medicalhealth
import Adapters.DoctorDataBaseHelper
import Data.Doctor
import android.annotation.SuppressLint
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import com.terratenientes.medicalhealth.adapters.DoctorDataBaseHelper
import com.terratenientes.medicalhealth.adapters.HistorialDataBaseHelper
import com.terratenientes.medicalhealth.adapters.RecetaDataBaseHelper
import com.terratenientes.medicalhealth.data.Doctor
import com.terratenientes.medicalhealth.data.Historial
import com.terratenientes.medicalhealth.databinding.ActivityMainBinding
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
@RequiresApi(Build.VERSION_CODES.O)
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var db: DoctorDataBaseHelper
private lateinit var dbHistorial: HistorialDataBaseHelper
lateinit var dbRecetas: RecetaDataBaseHelper
private lateinit var historial: Historial
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding=ActivityMainBinding.inflate(layoutInflater)
val view=binding.root
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
historial = Historial(null, null, "Se abrio la aplicacion", obtenerFecha())
db = DoctorDataBaseHelper(this@MainActivity)
dbHistorial = HistorialDataBaseHelper(this@MainActivity)
dbRecetas = RecetaDataBaseHelper(this@MainActivity)
añadirHistorial(historial)
//dbRecetas.crearTablaReceta()
//db.createTable()
//dbHistorial.crearTablaHistorial()
//db.crearTablaPacientes()
binding.btnIniciarSesion.setOnClickListener {
var res=db.validarDatos(binding.tvUsuario.text.toString(),binding.tvContrasena.text.toString())
var resPaciente = db.validarDatosPaciente(binding.tvUsuario.text.toString(), binding.tvContrasena.text.toString())
if(res==true){
Toast.makeText(this@MainActivity,"VALIDADO",Toast.LENGTH_LONG).show()
historial.fecha = obtenerFecha()
var res = db.validarDatos(
binding.tvUsuario.text.toString(),
binding.tvContrasena.text.toString()
)
var resPaciente = db.validarDatosPaciente(
binding.tvUsuario.text.toString(),
binding.tvContrasena.text.toString()
)
if (res == true) {
historial.eventoRealizado = "Inicio Sesion Doctor"
historial.tipoUsuario = "Doctor"
añadirHistorial(historial)
Toast.makeText(this@MainActivity, "VALIDADO", Toast.LENGTH_LONG).show()
val intent = Intent(this@MainActivity, PrincipalActivity::class.java)
//intent.putExtra("IDPaciente",binding.tvUsuario.text.toString())
intent.putExtra("Cedula", binding.tvUsuario.text.toString())
startActivity(intent)
}else if(resPaciente==true){
Toast.makeText(this@MainActivity,"VALIDADO",Toast.LENGTH_LONG).show()
} else if (resPaciente == true) {
historial.tipoUsuario = "Paciente"
historial.eventoRealizado = "Inicio Sesion Paciente"
añadirHistorial(historial)
Toast.makeText(this@MainActivity, "VALIDADO", Toast.LENGTH_LONG).show()
val intent = Intent(this@MainActivity, PacientePrincipalActivity::class.java)
intent.putExtra("IDPaciente",binding.tvContrasena.text.toString())
intent.putExtra("IDPaciente", binding.tvContrasena.text.toString())
intent.putExtra("NombrePaciente", binding.tvContrasena.text.toString())
startActivity(intent)
}else{
Toast.makeText(this@MainActivity," NO VALIDADO",Toast.LENGTH_LONG).show()
} else {
Toast.makeText(this@MainActivity, " NO VALIDADO", Toast.LENGTH_LONG).show()
}
}
binding.tvRegistrarme.setOnClickListener{
binding.tvRegistrarme.setOnClickListener {
historial.eventoRealizado = "Acciono el botón para la pantalla de registro"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
val intent = Intent(this@MainActivity, RegistrarDActivity::class.java)
startActivity(intent)
}
}
@SuppressLint("SuspiciousIndentation")
private fun cargarDatos(){
val doctor= Doctor("1236","Sebastian","Cordoba","229330123",1)
db.agregarDoctores(doctor,"prueba")
Toast.makeText(this@MainActivity,"DATOS DEL DOCTOR AGREGADOS",Toast.LENGTH_LONG).show()
private fun cargarDatos() {
val doctor = Doctor("1236", "Sebastian", "Cordoba", "229330123", 1)
db.agregarDoctores(doctor, "prueba")
Toast.makeText(this@MainActivity, "DATOS DEL DOCTOR AGREGADOS", Toast.LENGTH_LONG).show()
}
private fun validaDatos(){
var usuario=binding.tvUsuario.text.toString()
var contrasena=binding.tvContrasena.text.toString()
var res=db.validarDatos(usuario,contrasena)
if(res==true){
Toast.makeText(this@MainActivity,"VALIDADO",Toast.LENGTH_LONG).show()
}else{
Toast.makeText(this@MainActivity," NO VALIDADO",Toast.LENGTH_LONG).show()
private fun validaDatos() {
var usuario = binding.tvUsuario.text.toString()
var contrasena = binding.tvContrasena.text.toString()
var res = db.validarDatos(usuario, contrasena)
if (res == true) {
Toast.makeText(this@MainActivity, "VALIDADO", Toast.LENGTH_LONG).show()
} else {
Toast.makeText(this@MainActivity, " NO VALIDADO", Toast.LENGTH_LONG).show()
}
}
private fun obtenerFecha(): String {
val fromTimeZone = ZoneId.of("America/Mexico_City")
val currentTime = ZonedDateTime.now(fromTimeZone)
val dateFormat = "MMM dd yyyy | hh:mm:ss a "
val formatter = DateTimeFormatter.ofPattern(dateFormat)
return formatter.format(currentTime)
}
private fun añadirHistorial(historial: Historial) {
val resultadoInsert = dbHistorial.agregarInformacin(historial)
var msj = ""
if(resultadoInsert > 0)
msj = "Información historica almacenada"
else
msj = "Error al almacenar la información"
Log.i("Historial", msj + " | Información almacenada: " + historial)
}
}

View File

@ -1,19 +1,30 @@
package com.terratenientes.medicalhealth
import Adapters.DoctorDataBaseHelper
import Data.Paciente
import Reports.ConsultarPacientesActivity
import com.terratenientes.medicalhealth.adapters.DoctorDataBaseHelper
import com.terratenientes.medicalhealth.data.Paciente
import com.terratenientes.medicalhealth.reports.ConsultarPacientesActivity
import android.content.Intent
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.annotation.RequiresApi
import com.terratenientes.medicalhealth.adapters.HistorialDataBaseHelper
import com.terratenientes.medicalhealth.data.Historial
import com.terratenientes.medicalhealth.databinding.ActivityModificarBinding
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
@RequiresApi(Build.VERSION_CODES.O)
class ModificarActivity : AppCompatActivity() {
lateinit var binding : ActivityModificarBinding
private lateinit var paciente : Paciente
private lateinit var db: DoctorDataBaseHelper
private lateinit var dbHistorial: HistorialDataBaseHelper
private lateinit var historial: Historial
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -21,6 +32,9 @@ class ModificarActivity : AppCompatActivity() {
val view = binding.root
setContentView(view)
db = DoctorDataBaseHelper(this@ModificarActivity)
dbHistorial = HistorialDataBaseHelper(this@ModificarActivity)
historial = Historial("Doctor", intent.getStringExtra("NombreDoctor"),"Se inicio la actividad modificar paciente", obtenerFecha())
añadirHistorial(historial)
paciente = Paciente(intent.getIntExtra("Id",2),intent.getStringExtra("Nombre Paciente").toString(),intent.getStringExtra("Apellido Paterno").toString(), intent.getStringExtra("Apellido Materno").toString(), intent.getIntExtra("Edad", 20), intent.getStringExtra("Sexo").toString(), intent.getStringExtra("Domicilio").toString())
llenarCampos()
binding.btnModificar.setOnClickListener {
@ -34,9 +48,10 @@ class ModificarActivity : AppCompatActivity() {
paciente.apellidoMaterno = binding.etApellidoMaterno.text.toString()
paciente.domicilio = binding.etDomicilio.text.toString()
db.modificarPaciente(paciente)
historial.eventoRealizado = "Se modifico la informacion de paciente ${paciente.nombre}"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
finish()
intent = Intent(this@ModificarActivity, ConsultarPacientesActivity::class.java)
startActivity(intent)
Toast.makeText(this@ModificarActivity, "Información Actualizada UwU", Toast.LENGTH_LONG).show()
}
@ -49,4 +64,24 @@ class ModificarActivity : AppCompatActivity() {
binding.tvSexo.setText("Sexo: ${paciente.sexo}")
}
private fun obtenerFecha(): String {
val fromTimeZone = ZoneId.of("America/Mexico_City")
val currentTime = ZonedDateTime.now(fromTimeZone)
val dateFormat = "MMM dd yyyy | hh:mm:ss a "
val formatter = DateTimeFormatter.ofPattern(dateFormat)
return formatter.format(currentTime)
}
private fun añadirHistorial(historial: Historial) {
val resultadoInsert = dbHistorial.agregarInformacin(historial)
var msj = ""
if(resultadoInsert > 0)
msj = "Información historica almacenada"
else
msj = "Error al almacenar la información"
Log.i("Historial", msj + " | Información almacenada: " + historial)
}
}

View File

@ -0,0 +1,85 @@
package com.terratenientes.medicalhealth
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import androidx.annotation.RequiresApi
import com.terratenientes.medicalhealth.adapters.HistorialDataBaseHelper
import com.terratenientes.medicalhealth.adapters.RecetaDataBaseHelper
import com.terratenientes.medicalhealth.data.Historial
import com.terratenientes.medicalhealth.data.Receta
import com.terratenientes.medicalhealth.databinding.ActivityModificarRecetaBinding
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
@RequiresApi(Build.VERSION_CODES.O)
class ModificarRecetaActivity : AppCompatActivity() {
lateinit var binding : ActivityModificarRecetaBinding
lateinit var receta : Receta
lateinit var db : RecetaDataBaseHelper
lateinit var dbHistorial: HistorialDataBaseHelper
lateinit var historial: Historial
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityModificarRecetaBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
db = RecetaDataBaseHelper(this@ModificarRecetaActivity)
dbHistorial = HistorialDataBaseHelper(this@ModificarRecetaActivity)
historial = Historial("Paciente", intent.getStringExtra("NombrePaciente").toString(), "Se inicio la actividad modificar receta del paciente", obtenerFecha())
añadirHistorial(historial)
receta = Receta(intent.getStringExtra("NombrePaciente").toString(),intent.getStringExtra("EdadPaciente").toString().toInt(),intent.getStringExtra("PesoPaciente").toString().toDouble(),intent.getStringExtra("NombreMedicamento").toString(),intent.getStringExtra("Fecha").toString(),intent.getStringExtra("Dosis").toString(), intent.getStringExtra("Duracion").toString())
llenarCampos(receta)
binding.btnModificarReceta.setOnClickListener {
modificarReceta(receta)
}
}
private fun modificarReceta(receta : Receta) : Unit {
Log.i("Info Recibida", receta.toString())
receta.edadPaciente = binding.etEdadPaciente.text.toString().toInt()
receta.pesoPaciente = binding.etPesoPaciente.text.toString().toDouble()
receta.nombreMedicamento = binding.etRecetaMedicamento.text.toString()
receta.fecha = binding.etFecha.text.toString()
receta.dosis = binding.etDosisMedicamento.text.toString()
receta.duracion = binding.etDuracion.text.toString()
db.modificarReceta(receta)
Log.i("Info Actualizada", receta.toString())
historial.eventoRealizado = "Se modificó una receta"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
finish()
}
private fun llenarCampos(receta : Receta) : Unit {
binding.tvNombrePaciente.setText(receta.NombrePaciente)
binding.etEdadPaciente.setText(receta.edadPaciente.toString())
binding.etPesoPaciente.setText(receta.pesoPaciente.toString())
binding.etRecetaMedicamento.setText(receta.nombreMedicamento)
binding.etFecha.setText(receta.fecha)
binding.etDosisMedicamento.setText(receta.dosis)
binding.etDuracion.setText(receta.duracion)
}
private fun obtenerFecha(): String {
val fromTimeZone = ZoneId.of("America/Mexico_City")
val currentTime = ZonedDateTime.now(fromTimeZone)
val dateFormat = "MMM dd yyyy | hh:mm:ss a "
val formatter = DateTimeFormatter.ofPattern(dateFormat)
return formatter.format(currentTime)
}
private fun añadirHistorial(historial: Historial) {
val resultadoInsert = dbHistorial.agregarInformacin(historial)
var msj = ""
if(resultadoInsert > 0)
msj = "Información historica almacenada"
else
msj = "Error al almacenar la información"
Log.i("Historial", msj + " | Información almacenada: " + historial)
}
}

View File

@ -0,0 +1,197 @@
package com.terratenientes.medicalhealth
import android.Manifest
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Environment
import android.util.Log
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.LinearLayoutManager
import com.terratenientes.medicalhealth.adapters.CellClickListener
import com.terratenientes.medicalhealth.adapters.DoctorDataBaseHelper
import com.terratenientes.medicalhealth.adapters.HistorialDataBaseHelper
import com.terratenientes.medicalhealth.adapters.PacienteAdapter
import com.terratenientes.medicalhealth.adapters.PacienteViewAdapter
import com.terratenientes.medicalhealth.adapters.RecetaDataBaseHelper
import com.terratenientes.medicalhealth.adapters.RecetaViewAdapter
import com.terratenientes.medicalhealth.data.Historial
import com.terratenientes.medicalhealth.data.Paciente
import com.terratenientes.medicalhealth.data.Receta
import com.terratenientes.medicalhealth.databinding.ActivityPacienteBinding
import java.io.File
import java.io.FileWriter
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
@RequiresApi(Build.VERSION_CODES.O)
class PacienteActivity : AppCompatActivity(), CellClickListener {
lateinit var binding : ActivityPacienteBinding
private lateinit var db: DoctorDataBaseHelper
private lateinit var pacientesList: MutableList<Paciente>
private lateinit var dbHistorial: HistorialDataBaseHelper
private lateinit var historial: Historial
private lateinit var recycleAdapter : PacienteViewAdapter
private lateinit var pacientes : List<Paciente>
lateinit var nombreDoctor: String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityPacienteBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
db = DoctorDataBaseHelper(this@PacienteActivity)
pacientes = db.obtenerPacientes()
recycleAdapter = PacienteViewAdapter(pacientes, this@PacienteActivity, this@PacienteActivity)
binding.rvPacientes.layoutManager = LinearLayoutManager(this)
binding.rvPacientes.adapter = recycleAdapter
dbHistorial = HistorialDataBaseHelper(this@PacienteActivity)
historial = Historial("Doctor", intent.getStringExtra("NombreDoctor").toString(),"Se inicio la actividad de pacientes", obtenerFecha())
añadirHistorial(historial)
cargarListaPacientes()
nombreDoctor = intent.getStringExtra("NombreDoctor").toString()
Log.i("Pacientes", pacientes.toString())
binding.ivAgregarPaciente.setOnClickListener {
val intent = Intent(this@PacienteActivity, AgregarActivity::class.java)
intent.putExtra("NombreDoctor", nombreDoctor)
startActivity(intent)
historial.eventoRealizado = "Se acciono el boton para inciar la actividad alta paciente"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
}
binding.btnDescargarCsv.setOnClickListener {
historial.eventoRealizado = "Se acciono el botón para descargar la informacion de los pacientes"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
exportarCSV(this@PacienteActivity, pacientesList)
}
}
override fun onResume() {
super.onResume()
recycleAdapter.refreshData(db.obtenerPacientes())
}
override fun onCellClickListener(position: Int) {
}
override fun onEliminarClickListener(position: Int) {
val paciente = pacientes[position]
Log.i("Paciente Elim", paciente.toString())
historial.eventoRealizado = "Se acciono el boton para eliminar al usuario ${paciente.id}"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
db.eliminarPaciente(paciente.id)
recycleAdapter.refreshData(db.obtenerPacientes())
}
override fun onModifyClickListener(position: Int) {
val paciente = pacientes[position]
val intent = Intent(this@PacienteActivity, ModificarActivity::class.java)
intent.putExtra("Id", paciente.id)
intent.putExtra("Nombre Paciente", paciente.nombre)
intent.putExtra("Apellido Paterno", paciente.apellidoPaterno)
intent.putExtra("Apellido Materno", paciente.apellidoMaterno)
intent.putExtra("Domicilio", paciente.domicilio)
intent.putExtra("Edad", paciente.edad)
intent.putExtra("Sexo", paciente.sexo)
intent.putExtra("NombreDoctor",nombreDoctor)
startActivity(intent)
historial.eventoRealizado = "Se acciono el boton para iniciar la actividad modificar paciente con los datos del paciente ${paciente.nombre}"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
}
fun exportarCSV(context: Context, pacienteList: MutableList<Paciente>) {
//Pedir Permisos
ActivityCompat.requestPermissions(this@PacienteActivity, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE),200)
// Verificar si se tienen permisos de escritura externa
if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
try {
// Crear el directorio donde se guardará el archivo CSV
val directorio = File(Environment.getExternalStorageDirectory(), "MiApp")
if (!directorio.exists()) {
directorio.mkdirs()
}
// Crear el archivo CSV
val archivoCSV = File(directorio, "Paciente.csv")
archivoCSV.createNewFile()
// Escribir los datos en el archivo CSV
val writer = FileWriter(archivoCSV)
writer.append("ID, Nombre, Apellido Paterno, Apellido Materno, Edad, Sexo, Domicilio\n")
for (paciente in pacienteList) {
writer.append("${paciente.id},${paciente.nombre},${paciente.apellidoPaterno},${paciente.apellidoMaterno},${paciente.edad},${paciente.sexo},${paciente.domicilio}\n")
}
writer.flush()
writer.close()
Toast.makeText(this@PacienteActivity,getString(R.string.res_csv), Toast.LENGTH_LONG).show()
historial.eventoRealizado = "Se descargo la información de los pacientes"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
} catch (e: Exception) {
e.printStackTrace()
}
}else{
Toast.makeText(this@PacienteActivity,getString(R.string.err_permisos_storage),
Toast.LENGTH_LONG).show()
}
}
private fun obtenerFecha(): String {
val fromTimeZone = ZoneId.of("America/Mexico_City")
val currentTime = ZonedDateTime.now(fromTimeZone)
val dateFormat = "MMM dd yyyy | hh:mm:ss a "
val formatter = DateTimeFormatter.ofPattern(dateFormat)
return formatter.format(currentTime)
}
private fun añadirHistorial(historial: Historial) {
val resultadoInsert = dbHistorial.agregarInformacin(historial)
var msj = ""
if(resultadoInsert > 0)
msj = "Información historica almacenada"
else
msj = "Error al almacenar la información"
Log.i("Historial", msj + " | Información almacenada: " + historial)
}
private fun cargarListaPacientes() {
pacientesList = obtenerPacientes()
}
@SuppressLint("Range")
private fun obtenerPacientes(): MutableList<Paciente> {
val pacientes = mutableListOf<Paciente>()
val db = db.readableDatabase
val cursor = db.rawQuery("SELECT * FROM ${DoctorDataBaseHelper.TABLE_PACIENTES}", null)
while (cursor.moveToNext()) {
val id = cursor.getInt(cursor.getColumnIndex(DoctorDataBaseHelper.COLUMN_ID_PACIENTE))
val nombre = cursor.getString(cursor.getColumnIndex(DoctorDataBaseHelper.COLUMN_NOMBRE_PACIENTE))
val apellidoPaterno = cursor.getString(cursor.getColumnIndex(DoctorDataBaseHelper.COLUMN_APELLIDO_PATERNO_PACIENTE))
val apellidoMaterno = cursor.getString(cursor.getColumnIndex(DoctorDataBaseHelper.COLUMN_APELLIDO_MATERNO_PACIENTE))
val edad = cursor.getInt(cursor.getColumnIndex(DoctorDataBaseHelper.COLUMN_EDAD))
val sexo = cursor.getString(cursor.getColumnIndex(DoctorDataBaseHelper.COLUMN_SEXO))
val domicilio = cursor.getString(cursor.getColumnIndex(DoctorDataBaseHelper.COLUMN_DOMICILIO))
val paciente = Paciente(id, nombre, apellidoPaterno, apellidoMaterno, edad, sexo, domicilio)
pacientes.add(paciente)
}
cursor.close()
return pacientes
}
override fun onEnviarCorreoClickListener(position: Int) {
TODO("Not yet implemented")
}
}

View File

@ -1,47 +1,64 @@
package com.terratenientes.medicalhealth
import Adapters.CellClickListener
import Adapters.RecetaDataBaseHelper
import Adapters.RecetaViewAdapter
import Data.Receta
import com.terratenientes.medicalhealth.adapters.CellClickListener
import com.terratenientes.medicalhealth.adapters.RecetaDataBaseHelper
import com.terratenientes.medicalhealth.adapters.RecetaViewAdapter
import com.terratenientes.medicalhealth.data.Receta
import android.Manifest
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.Typeface
import android.graphics.pdf.PdfDocument
import android.os.Build
import android.os.Bundle
import android.os.Environment
import android.text.TextPaint
import android.util.Log
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.LinearLayoutManager
import com.terratenientes.medicalhealth.adapters.HistorialDataBaseHelper
import com.terratenientes.medicalhealth.data.Historial
import com.terratenientes.medicalhealth.databinding.ActivityPacientePrincipalBinding
import java.io.File
import java.io.FileOutputStream
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
@RequiresApi(Build.VERSION_CODES.O)
class PacientePrincipalActivity : AppCompatActivity(), CellClickListener {
private lateinit var binding: ActivityPacientePrincipalBinding
private var idPaciente : String =""
private lateinit var db: RecetaDataBaseHelper
private lateinit var recycleAdapter : RecetaViewAdapter
private lateinit var recetas : List<Receta>
lateinit var dbHistorial: HistorialDataBaseHelper
lateinit var historial: Historial
lateinit var nombrePaciente: String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityPacientePrincipalBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
idPaciente= intent.getStringExtra("IDPaciente")!!
db= RecetaDataBaseHelper(this)
db= RecetaDataBaseHelper(this@PacientePrincipalActivity)
dbHistorial = HistorialDataBaseHelper(this@PacientePrincipalActivity)
historial = Historial("Paciente", intent.getStringExtra("NombrePaciente").toString(), "Se inicio la actividad menu principal del paciente", obtenerFecha())
añadirHistorial(historial)
recetas=db.obtenerRecetasPaciente(idPaciente)
nombrePaciente = intent.getStringExtra("NombrePaciente").toString()
recycleAdapter = RecetaViewAdapter(db.obtenerRecetasPaciente(idPaciente), this, this@PacientePrincipalActivity)
binding.rvRecetasPaciente.layoutManager=LinearLayoutManager(this)
binding.rvRecetasPaciente.adapter= recycleAdapter
binding.ivLogout.setOnClickListener {
finish()
}
}
override fun onResume() {
@ -72,10 +89,73 @@ class PacientePrincipalActivity : AppCompatActivity(), CellClickListener {
// Toast.makeText(this, "Peso : ${datosPaciente[position].pesoPaciente}+ edad: ${datosPaciente[position].edadPaciente} ", Toast.LENGTH_LONG).show()
//Toast.makeText(this@PacientePrincipalActivity, "PERMISOS CONCEDIDOS", Toast.LENGTH_SHORT).show()
generarPDF(nombrePaciente, descripcionReceta, nombreMeciamento)
historial.eventoRealizado = "Se descargo la receta en formato pdf"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
}else{
pedirPermisosPDF()
}
}
override fun onEliminarClickListener(position: Int) {
val receta = recetas[position]
db.eliminarReceta(receta)
historial.eventoRealizado = "Se acciono el boton de eliminar la receta"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
recycleAdapter.refreshData(db.obtenerRecetasPaciente(idPaciente))
Toast.makeText(this, "Receta eliminada correctamente", Toast.LENGTH_SHORT).show()
}
override fun onModifyClickListener(position: Int) {
val receta = recetas[position]
historial.eventoRealizado = "Se acciono el boton de iniciar la actividad de modificar receta"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
val intent = Intent(this@PacientePrincipalActivity, ModificarRecetaActivity::class.java)
intent.putExtra("NombrePaciente", receta.NombrePaciente)
intent.putExtra("EdadPaciente", receta.edadPaciente.toString())
intent.putExtra("PesoPaciente", receta.pesoPaciente.toString())
intent.putExtra("NombreMedicamento", receta.nombreMedicamento)
intent.putExtra("Fecha", receta.fecha)
intent.putExtra("Dosis", receta.dosis)
intent.putExtra("Duracion", receta.duracion)
intent.putExtra("NombrePaciente", nombrePaciente)
startActivity(intent)
}
override fun onEnviarCorreoClickListener(position: Int) {
val receta = recetas[position]
val nombrePaciente = receta.NombrePaciente
val nombreMedicamento = receta.nombreMedicamento
val dosisMedicamento = receta.dosis
val duracionMedicamento = receta.duracion
val fechaReceta = receta.fecha
val pesoPaciente = receta.pesoPaciente
val edadPaciente = receta.edadPaciente
val descripcionReceta = """
Fecha de Consulta: $fechaReceta
Datos Generales del Paciente:
Peso del Paciente: $pesoPaciente
Edad del Paciente: $edadPaciente
Medicamento a Recetar: $nombreMedicamento
Dosis del Medicamento: $dosisMedicamento
Duración del Tratamiento: $duracionMedicamento
""".trimIndent()
val intent = Intent(Intent.ACTION_SEND).apply {
type = "message/rfc822"
putExtra(Intent.EXTRA_SUBJECT, "Receta Médica de $nombrePaciente")
putExtra(Intent.EXTRA_TEXT, descripcionReceta)
}
try {
startActivity(Intent.createChooser(intent, "Enviar receta a través de:"))
} catch (ex: android.content.ActivityNotFoundException) {
Toast.makeText(this, "No hay clientes de correo instalados.", Toast.LENGTH_SHORT).show()
}
}
// función que valida si los permisos ya estan garantizados por parte del usuario
fun permisosPDF() : Boolean{
val permission1= ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
@ -149,5 +229,25 @@ class PacientePrincipalActivity : AppCompatActivity(), CellClickListener {
}
}
private fun obtenerFecha(): String {
val fromTimeZone = ZoneId.of("America/Mexico_City")
val currentTime = ZonedDateTime.now(fromTimeZone)
val dateFormat = "MMM dd yyyy | hh:mm:ss a "
val formatter = DateTimeFormatter.ofPattern(dateFormat)
return formatter.format(currentTime)
}
private fun añadirHistorial(historial: Historial) {
val resultadoInsert = dbHistorial.agregarInformacin(historial)
var msj = ""
if(resultadoInsert > 0)
msj = "Información historica almacenada"
else
msj = "Error al almacenar la información"
Log.i("Historial", msj + " | Información almacenada: " + historial)
}
}

View File

@ -1,32 +1,170 @@
package com.terratenientes.medicalhealth
import android.Manifest
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Environment
import android.util.Log
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.terratenientes.medicalhealth.adapters.DoctorDataBaseHelper
import com.terratenientes.medicalhealth.adapters.HistorialDataBaseHelper
import com.terratenientes.medicalhealth.data.Doctor
import com.terratenientes.medicalhealth.data.Historial
import com.terratenientes.medicalhealth.databinding.ActivityPrincipalBinding
import com.terratenientes.medicalhealth.reports.ConsultarPacientesActivity
import java.io.File
import java.io.FileWriter
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
@RequiresApi(Build.VERSION_CODES.O)
class PrincipalActivity : AppCompatActivity() {
lateinit var binding : ActivityPrincipalBinding
lateinit var db : DoctorDataBaseHelper
private lateinit var dbHistorial: HistorialDataBaseHelper
private lateinit var historialList: MutableList<Historial>
private lateinit var historial: Historial
lateinit var nombreDoctor : String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityPrincipalBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
binding.btnAgregarPaciente.setOnClickListener {
val intent = Intent(this@PrincipalActivity, AgregarActivity::class.java)
db = DoctorDataBaseHelper(this@PrincipalActivity)
dbHistorial = HistorialDataBaseHelper(this@PrincipalActivity)
Log.i("Datos Doctor", intent.getStringExtra("Cedula").toString())
historial = Historial("Doctor", null,"Se inicio la actividad de menu principal", obtenerFecha())
datosDoctor(intent.getStringExtra("Cedula").toString())
añadirHistorial(historial)
binding.ivLogout.setOnClickListener {
finish()
Toast.makeText(this@PrincipalActivity,"Sesión cerrada", Toast.LENGTH_LONG).show()
}
binding.ivPacientes.setOnClickListener {
val intent = Intent(this@PrincipalActivity, PacienteActivity::class.java)
intent.putExtra("NombreDoctor", nombreDoctor)
startActivity(intent)
historial.eventoRealizado = "Se presiono el boton para iniciar la actividad de pacientes"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
}
binding.btnEliminarPaciente.setOnClickListener {
val intent = Intent(this@PrincipalActivity, EliminarActivity::class.java)
binding.ivRecetas.setOnClickListener {
val intent = Intent(this@PrincipalActivity, RecetasActivity::class.java)
intent.putExtra("NombreDoctor", nombreDoctor)
startActivity(intent)
historial.eventoRealizado = "Se presiono el boton para iniciar la actividad de recetas"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
}
binding.btnAgregarReceta.setOnClickListener {
val intent = Intent(this@PrincipalActivity, RecetaActivity::class.java)
startActivity(intent)
binding.ivHistorial.setOnClickListener {
historial.eventoRealizado = "Se presiono el boton para descargar el historial"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
cargarHistorial()
exportarCSV(this@PrincipalActivity, historialList)
}
}
private fun datosDoctor(cedula : String){
val doctores : List<Doctor> = db.obtenerDoctor(cedula)
val doctor : Doctor = doctores.get(0)
Log.i("Datos Doctor", doctor.toString())
binding.tvNombreDoctor.setText("Nombre: ${doctor.Nombre}")
binding.tvTelefonoDoctor.setText("Telefono: ${doctor.Telefono}")
binding.tvCedulaDoctor.setText("Cédula: ${doctor.Cedula}")
binding.tvConsultorioDoctor.setText("Consultorio: ${doctor.Consultorio}")
historial.nombreUsuario = doctor.Nombre
nombreDoctor = doctor.Nombre
}
private fun obtenerFecha(): String {
val fromTimeZone = ZoneId.of("America/Mexico_City")
val currentTime = ZonedDateTime.now(fromTimeZone)
val dateFormat = "MMM dd yyyy | hh:mm:ss a "
val formatter = DateTimeFormatter.ofPattern(dateFormat)
return formatter.format(currentTime)
}
private fun añadirHistorial(historial: Historial) {
val resultadoInsert = dbHistorial.agregarInformacin(historial)
var msj = ""
if(resultadoInsert > 0)
msj = "Información historica almacenada"
else
msj = "Error al almacenar la información"
Log.i("Historial", msj + " | Información almacenada: " + historial)
}
fun exportarCSV(context: Context, historialList: MutableList<Historial>) {
//Pedir Permisos
ActivityCompat.requestPermissions(this@PrincipalActivity, arrayOf(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE),200)
// Verificar si se tienen permisos de escritura externa
if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
try {
// Crear el directorio donde se guardará el archivo CSV
val directorio = File(Environment.getExternalStorageDirectory(), "MiApp")
if (!directorio.exists()) {
directorio.mkdirs()
}
// Crear el archivo CSV
val archivoCSV = File(directorio, "Historial.csv")
archivoCSV.createNewFile()
// Escribir los datos en el archivo CSV
val writer = FileWriter(archivoCSV)
writer.append("Tipo de Usuario, Usuario, Evento Realizado, Fecha\n")
for (historial in historialList) {
writer.append("${historial.tipoUsuario},${historial.nombreUsuario},${historial.eventoRealizado},${historial.fecha}\n")
}
writer.flush()
writer.close()
Toast.makeText(this@PrincipalActivity,getString(R.string.res_csv), Toast.LENGTH_LONG).show()
historial.eventoRealizado = "Se descargo el historial de la app"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
} catch (e: Exception) {
e.printStackTrace()
}
}else{
Toast.makeText(this@PrincipalActivity,getString(R.string.err_permisos_storage),
Toast.LENGTH_LONG).show()
}
}
private fun cargarHistorial() {
historialList = obtenerHistorial()
}
@SuppressLint("Range")
private fun obtenerHistorial(): MutableList<Historial> {
val historial = mutableListOf<Historial>()
val db = dbHistorial.readableDatabase
val cursor = db.rawQuery("SELECT * FROM ${HistorialDataBaseHelper.TABLE_NAME}", null)
while (cursor.moveToNext()) {
val tipoUsuario = cursor.getString(cursor.getColumnIndex(HistorialDataBaseHelper.COLUMN_TIPO_USUARIO))
val usuario = cursor.getString(cursor.getColumnIndex(HistorialDataBaseHelper.COLUMN_NOMBRE_USUARIO))
val evento = cursor.getString(cursor.getColumnIndex(HistorialDataBaseHelper.COLUMN_EVENTO))
val fecha = cursor.getString(cursor.getColumnIndex(HistorialDataBaseHelper.COLUMN_FECHA))
val hist = Historial(tipoUsuario, usuario,evento,fecha)
historial.add(hist)
}
cursor.close()
return historial
}
}

View File

@ -1,23 +1,36 @@
package com.terratenientes.medicalhealth
import Adapters.DoctorDataBaseHelper
import Adapters.RecetaDataBaseHelper
import Data.Receta
import com.terratenientes.medicalhealth.adapters.RecetaDataBaseHelper
import com.terratenientes.medicalhealth.adapters.DoctorDataBaseHelper
import com.terratenientes.medicalhealth.data.Receta
import android.annotation.SuppressLint
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.AdapterView
import android.widget.AdapterView.OnItemSelectedListener
import android.widget.ArrayAdapter
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import com.terratenientes.medicalhealth.adapters.HistorialDataBaseHelper
import com.terratenientes.medicalhealth.data.Historial
import com.terratenientes.medicalhealth.databinding.ActivityRecetaBinding
import com.terratenientes.medicalhealth.utilidad.DatePickerFragment
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
import java.util.Date
@RequiresApi(Build.VERSION_CODES.O)
class RecetaActivity : AppCompatActivity(), OnItemSelectedListener {
private lateinit var binding : ActivityRecetaBinding
private lateinit var db : RecetaDataBaseHelper
private lateinit var dbPaciente : DoctorDataBaseHelper
private lateinit var dbHistorial: HistorialDataBaseHelper
private lateinit var historial: Historial
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -25,14 +38,22 @@ class RecetaActivity : AppCompatActivity(), OnItemSelectedListener {
val view = binding.root
enableEdgeToEdge()
db= RecetaDataBaseHelper(this@RecetaActivity)
dbHistorial = HistorialDataBaseHelper(this@RecetaActivity)
dbPaciente = DoctorDataBaseHelper(this@RecetaActivity)
setContentView(view)
// db.crearTablaReceta()
//db.crearTablaReceta()
cargarSpinnerPacientes()
historial = Historial("Doctor", intent.getStringExtra("NombreDoctor"),"Se inicio la actividad de añadir receta", obtenerFecha())
añadirHistorial(historial)
binding.spNombrePaciente.onItemSelectedListener=this
binding.btnAgregarReceta.setOnClickListener {
agregarReceta()
}
binding.tvDatepicker.setOnClickListener{
historial.eventoRealizado = "Se dio click en el calendario"
historial.fecha = obtenerFecha()
showPickerDialog()
}
}
@SuppressLint("Range")
private fun obtenerNombrePacientes() : ArrayList<String>{
@ -57,12 +78,15 @@ class RecetaActivity : AppCompatActivity(), OnItemSelectedListener {
val edadPaciente = (binding.etEdadPaciente.text.toString()).toInt()
val pesoPaciente = (binding.etPesoPaciente.text.toString()).toDouble()
val medicamento= binding.etRecetaMedicamento.text.toString()
val fecha=binding.etFecha.text.toString()
val fecha=binding.tvFecha.text.toString()
val dosis = binding.etDosisMedicamento.text.toString()
val duracion= binding.etDuracion.text.toString()
val receta = Receta(nombrePaciente,edadPaciente,pesoPaciente,medicamento,fecha,dosis,duracion)
db.agregarReceta(receta)
historial.eventoRealizado = "Añadio una receta al paciente $nombrePaciente"
historial.fecha = obtenerFecha()
Toast.makeText(this@RecetaActivity , "RECETA AGREGADA CORRECTAMENTE", Toast.LENGTH_LONG).show()
finish()
}
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
@ -74,4 +98,33 @@ class RecetaActivity : AppCompatActivity(), OnItemSelectedListener {
override fun onNothingSelected(p0: AdapterView<*>?) {
}
private fun showPickerDialog() {
val datePicker = DatePickerFragment{day, month, year -> obtenerFechaSeleccionada(day, month, year)}
datePicker.show(supportFragmentManager,"datePicker")
}
private fun obtenerFechaSeleccionada (day: Int, month: Int, year: Int) {
binding.tvFecha.text = "$day/$month/$year"
}
private fun obtenerFecha(): String {
val fromTimeZone = ZoneId.of("America/Mexico_City")
val currentTime = ZonedDateTime.now(fromTimeZone)
val dateFormat = "MMM dd yyyy | hh:mm:ss a "
val formatter = DateTimeFormatter.ofPattern(dateFormat)
return formatter.format(currentTime)
}
private fun añadirHistorial(historial: Historial) {
val resultadoInsert = dbHistorial.agregarInformacin(historial)
var msj = ""
if(resultadoInsert > 0)
msj = "Información historica almacenada"
else
msj = "Error al almacenar la información"
Log.i("Historial", msj + " | Información almacenada: " + historial)
}
}

View File

@ -0,0 +1,139 @@
package com.terratenientes.medicalhealth
import android.content.Intent
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.recyclerview.widget.LinearLayoutManager
import com.terratenientes.medicalhealth.adapters.CellClickListener
import com.terratenientes.medicalhealth.adapters.HistorialDataBaseHelper
import com.terratenientes.medicalhealth.adapters.RecetaDataBaseHelper
import com.terratenientes.medicalhealth.adapters.RecetaDoctorViewAdapter
import com.terratenientes.medicalhealth.adapters.RecetaViewAdapter
import com.terratenientes.medicalhealth.data.Historial
import com.terratenientes.medicalhealth.data.Receta
import com.terratenientes.medicalhealth.databinding.ActivityRecetasBinding
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
@RequiresApi(Build.VERSION_CODES.O)
class RecetasActivity : AppCompatActivity(), CellClickListener {
lateinit var binding: ActivityRecetasBinding
private lateinit var db: RecetaDataBaseHelper
private lateinit var recycleAdapter : RecetaDoctorViewAdapter
private lateinit var recetas : List<Receta>
lateinit var dbHistorial: HistorialDataBaseHelper
lateinit var historial: Historial
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityRecetasBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
db= RecetaDataBaseHelper(this@RecetasActivity)
dbHistorial = HistorialDataBaseHelper(this@RecetasActivity)
historial = Historial("Doctor", intent.getStringExtra("NombreDoctor"),"Se inicio la actividad de recetas", obtenerFecha())
añadirHistorial(historial)
recycleAdapter = RecetaDoctorViewAdapter(db.obtenerRecetas(), this, this@RecetasActivity)
binding.rvRecetas.layoutManager= LinearLayoutManager(this@RecetasActivity)
binding.rvRecetas.adapter= recycleAdapter
binding.ivAgregarReceta.setOnClickListener {
val intent = Intent(this@RecetasActivity, RecetaActivity::class.java)
historial.eventoRealizado = "Se pulso el boton para agregar una receta"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
startActivity(intent)
}
}
override fun onResume() {
super.onResume()
recycleAdapter.refreshData(db.obtenerRecetas())
}
override fun onCellClickListener(position: Int) {
}
override fun onEliminarClickListener(position: Int) {
val receta = recetas[position]
db.eliminarReceta(receta)
historial.eventoRealizado = "Se acciono el boton de eliminar la receta"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
recycleAdapter.refreshData(db.obtenerRecetas())
Toast.makeText(this, "Receta eliminada correctamente", Toast.LENGTH_SHORT).show()
}
override fun onModifyClickListener(position: Int) {
val receta = recetas[position]
historial.eventoRealizado = "Se acciono el boton de iniciar la actividad de modificar receta"
historial.fecha = obtenerFecha()
añadirHistorial(historial)
val intent = Intent(this@RecetasActivity, ModificarRecetaActivity::class.java)
intent.putExtra("NombrePaciente", receta.NombrePaciente)
intent.putExtra("EdadPaciente", receta.edadPaciente.toString())
intent.putExtra("PesoPaciente", receta.pesoPaciente.toString())
intent.putExtra("NombreMedicamento", receta.nombreMedicamento)
intent.putExtra("Fecha", receta.fecha)
intent.putExtra("Dosis", receta.dosis)
intent.putExtra("Duracion", receta.duracion)
startActivity(intent)
}
override fun onEnviarCorreoClickListener(position: Int) {
val receta = recetas[position]
val nombrePaciente = receta.NombrePaciente
val nombreMedicamento = receta.nombreMedicamento
val dosisMedicamento = receta.dosis
val duracionMedicamento = receta.duracion
val fechaReceta = receta.fecha
val pesoPaciente = receta.pesoPaciente
val edadPaciente = receta.edadPaciente
val descripcionReceta = """
Fecha de Consulta: $fechaReceta
Datos Generales del Paciente:
Peso del Paciente: $pesoPaciente
Edad del Paciente: $edadPaciente
Medicamento a Recetar: $nombreMedicamento
Dosis del Medicamento: $dosisMedicamento
Duración del Tratamiento: $duracionMedicamento
""".trimIndent()
val intent = Intent(Intent.ACTION_SEND).apply {
type = "message/rfc822"
putExtra(Intent.EXTRA_SUBJECT, "Receta Médica de $nombrePaciente")
putExtra(Intent.EXTRA_TEXT, descripcionReceta)
}
try {
startActivity(Intent.createChooser(intent, "Enviar receta a través de:"))
} catch (ex: android.content.ActivityNotFoundException) {
Toast.makeText(this, "No hay clientes de correo instalados.", Toast.LENGTH_SHORT).show()
}
}
private fun obtenerFecha(): String {
val fromTimeZone = ZoneId.of("America/Mexico_City")
val currentTime = ZonedDateTime.now(fromTimeZone)
val dateFormat = "MMM dd yyyy | hh:mm:ss a "
val formatter = DateTimeFormatter.ofPattern(dateFormat)
return formatter.format(currentTime)
}
private fun añadirHistorial(historial: Historial) {
val resultadoInsert = dbHistorial.agregarInformacin(historial)
var msj = ""
if(resultadoInsert > 0)
msj = "Información historica almacenada"
else
msj = "Error al almacenar la información"
Log.i("Historial", msj + " | Información almacenada: " + historial)
}
}

View File

@ -1,35 +1,122 @@
package com.terratenientes.medicalhealth
import Adapters.DoctorDataBaseHelper
import Data.Doctor
import android.os.Build
import com.terratenientes.medicalhealth.adapters.DoctorDataBaseHelper
import com.terratenientes.medicalhealth.data.Doctor
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import com.terratenientes.medicalhealth.adapters.HistorialDataBaseHelper
import com.terratenientes.medicalhealth.data.Historial
import com.terratenientes.medicalhealth.databinding.ActivityRegistrarDactivityBinding
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
@RequiresApi(Build.VERSION_CODES.O)
class RegistrarDActivity : AppCompatActivity() {
private lateinit var binding : ActivityRegistrarDactivityBinding
private lateinit var db : DoctorDataBaseHelper
private lateinit var dbHistorial: HistorialDataBaseHelper
private lateinit var historial: Historial
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityRegistrarDactivityBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
db= DoctorDataBaseHelper(this@RegistrarDActivity)
dbHistorial = HistorialDataBaseHelper(this@RegistrarDActivity)
historial = Historial(null, null, "Se abrio la actividad de registro", obtenerFecha())
añadirHistorial(historial)
db = DoctorDataBaseHelper(this@RegistrarDActivity)
binding.btnRegistrar.setOnClickListener {
registrarUsuario()
if (validarCampos()) {
registrarUsuario()
}
}
}
private fun registrarUsuario(){
val cedula=binding.etCedelaRegistro.text.toString()
val nombre=binding.etNombreRegistro.text.toString()
val apellido=binding.etApellidoRegistro.text.toString()
val telefono=binding.etTelefonoRegisto.text.toString()
private fun validarCampos(): Boolean {
val cedula = binding.etCedelaRegistro.text.toString()
val nombre = binding.etNombreRegistro.text.toString()
val apellido = binding.etApellidoRegistro.text.toString()
val telefono = binding.etTelefonoRegisto.text.toString()
val domicilio = binding.etDomicilio.text.toString()
val contrasena= binding.etContrasenaRegistro.text.toString()
val usuario= Doctor(cedula,nombre,apellido,telefono,domicilio.toInt())
db.agregarDoctores(usuario,contrasena)
Toast.makeText(this@RegistrarDActivity,"USUARIO AGREGADO",Toast.LENGTH_LONG).show()
/*db.agregarDoctores(usuario,contrasena)
Toast.makeText(this@RegistrarDActivity,"USUARIO AGREGADO",Toast.LENGTH_LONG).show()*/
if (cedula.isEmpty() || nombre.isEmpty() || apellido.isEmpty() || telefono.isEmpty() || domicilio.isEmpty() || contrasena.isEmpty()) {
Toast.makeText(this, "Todos los campos son obligatorios.", Toast.LENGTH_LONG).show()
return false
}
if (!validarCedula(cedula)) {
Toast.makeText(this, "Cédula profesional no válida.", Toast.LENGTH_LONG).show()
return false
}
if (!validarTelefono(telefono)) {
Toast.makeText(this, "Número de teléfono no válido.", Toast.LENGTH_LONG).show()
return false
}
return true
}
private fun validarCedula(cedula: String): Boolean {
// Expresión regular para validar que la cédula tenga entre 5 y 8 caracteres o exactamente 11 caracteres alfanuméricos
val regex = Regex("^[a-zA-Z0-9]{5,8}$|^[a-zA-Z0-9]{11}$")
return regex.matches(cedula)
}
private fun validarTelefono(telefono: String): Boolean {
// Expresión regular para validar que el número de teléfono tenga 10 digitos
val regex = Regex("^\\d{10}$")
return regex.matches(telefono)
}
private fun registrarUsuario() {
val cedula = binding.etCedelaRegistro.text.toString()
val nombre = binding.etNombreRegistro.text.toString()
val apellido = binding.etApellidoRegistro.text.toString()
val telefono = binding.etTelefonoRegisto.text.toString()
val domicilio = binding.etDomicilio.text.toString()
val contrasena = binding.etContrasenaRegistro.text.toString()
val usuario = Doctor(cedula, nombre, apellido, telefono, domicilio.toInt())
db.agregarDoctores(usuario, contrasena)
historial.eventoRealizado = "Se registraron los datos de un doctor"
historial.fecha = obtenerFecha()
historial.tipoUsuario = "Doctor"
historial.nombreUsuario = nombre
añadirHistorial(historial)
Toast.makeText(this@RegistrarDActivity, "USUARIO AGREGADO", Toast.LENGTH_LONG).show()
finish()
}
private fun obtenerFecha(): String {
val fromTimeZone = ZoneId.of("America/Mexico_City")
val currentTime = ZonedDateTime.now(fromTimeZone)
val dateFormat = "MMM dd yyyy | hh:mm:ss a "
val formatter = DateTimeFormatter.ofPattern(dateFormat)
return formatter.format(currentTime)
}
private fun añadirHistorial(historial: Historial) {
val resultadoInsert = dbHistorial.agregarInformacin(historial)
var msj = ""
if(resultadoInsert > 0)
msj = "Información historica almacenada"
else
msj = "Error al almacenar la información"
Log.i("Historial", msj + " | Información almacenada: " + historial)
}
}

View File

@ -0,0 +1,8 @@
package com.terratenientes.medicalhealth.adapters
interface CellClickListener {
fun onCellClickListener(position : Int)
fun onEliminarClickListener(position: Int)
fun onModifyClickListener(position: Int)
fun onEnviarCorreoClickListener(position: Int)
}

View File

@ -1,14 +1,13 @@
package Adapters
package com.terratenientes.medicalhealth.adapters
import android.annotation.SuppressLint
import android.content.ContentValues
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import Data.Doctor
import Data.Paciente
import android.database.Cursor
import android.widget.Toast
import com.terratenientes.medicalhealth.data.Doctor
import com.terratenientes.medicalhealth.data.Paciente
import com.terratenientes.medicalhealth.data.Receta
class DoctorDataBaseHelper (context: Context) : SQLiteOpenHelper(context, DATABASE_NAME,null,
DATABASE_VERSION
@ -53,6 +52,7 @@ class DoctorDataBaseHelper (context: Context) : SQLiteOpenHelper(context, DATABA
val dropTablePacientes = "DROP TABLE IF EXISTS $TABLE_PACIENTES"
db?.execSQL(dropTablePacientes)
}
fun crearTablaPacientes(){
val db=writableDatabase
val crearTablaPacientes =
@ -75,6 +75,25 @@ class DoctorDataBaseHelper (context: Context) : SQLiteOpenHelper(context, DATABA
db.insert(TABLE_NAME,null, values)
db.close()
}
@SuppressLint("Range")
fun obtenerDoctor(cedula : String): List<Doctor>{
val doctores = mutableListOf<Doctor>()
val db = readableDatabase
var cursor = db.rawQuery("SELECT * FROM $TABLE_NAME WHERE $COLUMN_CEDULA = '${cedula}'", null)
while (cursor.moveToNext()) {
val cedula = cursor.getString(cursor.getColumnIndex(COLUMN_CEDULA))
val nombreDoctor = cursor.getString(cursor.getColumnIndex(COLUMN_NOMBRE))
val apellidoDoctor = cursor.getString(cursor.getColumnIndex(COLUMN_APELLIDO))
val telefonoDoctor = cursor.getString(cursor.getColumnIndex(COLUMN_TELEFONO))
val consultorioDoctor = cursor.getInt(cursor.getColumnIndex(COLUMN_CONSULTORIO))
val doctor = Doctor(cedula,nombreDoctor,apellidoDoctor,telefonoDoctor,consultorioDoctor)
doctores.add(doctor)
}
cursor.close()
return doctores
}
fun agregarPaciente(paciente: Paciente) {
val db = writableDatabase
val values = ContentValues().apply {
@ -86,10 +105,17 @@ class DoctorDataBaseHelper (context: Context) : SQLiteOpenHelper(context, DATABA
put(COLUMN_DOMICILIO, paciente.domicilio)
}
db.insert(TABLE_PACIENTES, null, values)
print("ID DEL PACIENTE AGREGADO: "+COLUMN_ID_PACIENTE)
print("ID DEL PACIENTE AGREGADO: "+ COLUMN_ID_PACIENTE)
db.close()
}
fun eliminarPaciente(id : Int) : Int{
val db = writableDatabase
val resultadoEliminacion = db.delete(TABLE_PACIENTES, "$COLUMN_ID_PACIENTE = ?", arrayOf(id.toString()))
db.close()
return resultadoEliminacion
}
fun modificarPaciente(paciente: Paciente){
val db = writableDatabase
val values = ContentValues().apply {
@ -167,5 +193,24 @@ class DoctorDataBaseHelper (context: Context) : SQLiteOpenHelper(context, DATABA
return edadPaciente
}
@SuppressLint("Range")
fun obtenerPacientes(): List<Paciente>{
val pacientes = mutableListOf<Paciente>()
val db = readableDatabase
val cursor = db.rawQuery("SELECT * FROM ${TABLE_PACIENTES}", null)
while (cursor.moveToNext()) {
val idPaciente = cursor.getInt(cursor.getColumnIndex(COLUMN_ID_PACIENTE))
val nombrePaciente = cursor.getString(cursor.getColumnIndex(COLUMN_NOMBRE_PACIENTE))
val apellidoPaterno = cursor.getString(cursor.getColumnIndex(COLUMN_APELLIDO_PATERNO_PACIENTE))
val apellidoMaterno = cursor.getString(cursor.getColumnIndex(COLUMN_APELLIDO_MATERNO_PACIENTE))
val edadPaciente = cursor.getInt(cursor.getColumnIndex(COLUMN_EDAD))
val sexoPaciente = cursor.getString(cursor.getColumnIndex(COLUMN_SEXO))
val domicilioPaciente = cursor.getString(cursor.getColumnIndex(COLUMN_DOMICILIO))
val paciente = Paciente(idPaciente,nombrePaciente, apellidoPaterno, apellidoMaterno, edadPaciente, sexoPaciente, domicilioPaciente)
pacientes.add(paciente)
}
cursor.close()
return pacientes
}
}

View File

@ -0,0 +1,49 @@
package com.terratenientes.medicalhealth.adapters
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import androidx.core.content.contentValuesOf
import com.terratenientes.medicalhealth.data.Historial
class HistorialDataBaseHelper (context: Context) : SQLiteOpenHelper(context, DATABAENAME, null, DATABASEVERSION){
companion object{
private val DATABAENAME = "MedicalHealth"
private val DATABASEVERSION=1
//PRIMERO VA EL NOMBRE DE LA TABLA
val TABLE_NAME = "Historial"
//LUEGO VAN LAS COLUMNAS DE ESA TABLA
val COLUMN_TIPO_USUARIO = "TipoUsuario"
val COLUMN_NOMBRE_USUARIO = "NombreUsuario"
val COLUMN_EVENTO = "Evento"
val COLUMN_FECHA = "Fecha"
}
override fun onCreate(db: SQLiteDatabase?) {
val crearTabla="CREATE TABLE ${TABLE_NAME} (${COLUMN_TIPO_USUARIO} VARCHAR(30), ${COLUMN_NOMBRE_USUARIO} VARCHAR(30), ${COLUMN_EVENTO} VARCHAR(255), ${COLUMN_FECHA} VARCHAR(70))"
db?.execSQL(crearTabla)
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
val dropTableReceta="DROP TABLE IF EXISTS ${TABLE_NAME}"
db?.execSQL(dropTableReceta)
}
fun crearTablaHistorial(){
val db=writableDatabase
val crearTabla="CREATE TABLE ${TABLE_NAME} (${COLUMN_TIPO_USUARIO} VARCHAR(30), ${COLUMN_NOMBRE_USUARIO} VARCHAR(30), ${COLUMN_EVENTO} VARCHAR(255), ${COLUMN_FECHA} VARCHAR(70))"
db?.execSQL(crearTabla)
}
fun agregarInformacin (historial: Historial) : Long {
val db = writableDatabase
val values = contentValuesOf().apply {
put(COLUMN_TIPO_USUARIO, historial.tipoUsuario)
put(COLUMN_NOMBRE_USUARIO, historial.nombreUsuario)
put(COLUMN_EVENTO, historial.eventoRealizado)
put(COLUMN_FECHA, historial.fecha)
}
val respuestaInsert = db.insert(TABLE_NAME, null, values)
db.close()
return respuestaInsert
}
}

View File

@ -1,6 +1,6 @@
package Adapters
package com.terratenientes.medicalhealth.adapters
import Data.Paciente
import com.terratenientes.medicalhealth.data.Paciente
import android.content.Context
import android.view.LayoutInflater
import android.view.View

View File

@ -0,0 +1,60 @@
package com.terratenientes.medicalhealth.adapters
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.terratenientes.medicalhealth.R
import com.terratenientes.medicalhealth.data.Paciente
class PacienteViewAdapter (private var notes : List<Paciente>, context: Context, val cellClickListener: CellClickListener) :
RecyclerView.Adapter<PacienteViewAdapter.NoteViewHolder>() {
class NoteViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val tvNombre : TextView = itemView.findViewById(R.id.tv_nombre)
val tvApellidoPaterno : TextView = itemView.findViewById(R.id.tv_apellido_paterno)
val tvApellidoMaterno : TextView = itemView.findViewById(R.id.tv_apellido_materno)
val tv_edad : TextView = itemView.findViewById(R.id.tv_edad)
val tv_sexo : TextView = itemView.findViewById(R.id.tv_sexo)
val tv_domicilio : TextView = itemView.findViewById(R.id.tv_domicilio)
val ivModificar : ImageView = itemView.findViewById(R.id.iv_modificar_paciente)
val ivEliminar : ImageView = itemView.findViewById(R.id.iv_eliminar_paciente)
val tvId: TextView = itemView.findViewById(R.id.tv_id_paciente)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NoteViewHolder {
val view =
LayoutInflater.from(parent.context).inflate(R.layout.rc_paciente_item, parent, false)
return NoteViewHolder(view)
}
override fun getItemCount(): Int {
return notes.size
}
override fun onBindViewHolder(holder: NoteViewHolder, position: Int) {
val note = notes[position]
holder.tvNombre.text = "Nombre:\n${note.nombre}"
holder.tvApellidoPaterno.text = "Apellido Paterno:\n${note.apellidoPaterno}"
holder.tvApellidoMaterno.text = "Apellido Materno:\n${note.apellidoMaterno}"
holder.tv_edad.text = "Edad:\n${note.edad}"
holder.tv_sexo.text = "Sexo:\n${note.sexo}"
holder.tv_domicilio.text = "Domicilio:\n${note.domicilio}"
holder.tvId.text = "Id:${note.id}"
holder.ivEliminar.setOnClickListener {
cellClickListener.onEliminarClickListener(position)
}
holder.ivModificar.setOnClickListener {
cellClickListener.onModifyClickListener(position)
}
}
fun refreshData(newNotes: List<Paciente>) {
this.notes = newNotes
notifyDataSetChanged()
}
}

View File

@ -1,6 +1,6 @@
package Adapters
package com.terratenientes.medicalhealth.adapters
import Data.Receta
import com.terratenientes.medicalhealth.data.Receta
import android.content.Context
import android.view.LayoutInflater
import android.view.View

View File

@ -1,12 +1,13 @@
package Adapters
package com.terratenientes.medicalhealth.adapters
import Data.Receta
import com.terratenientes.medicalhealth.data.Receta
import android.annotation.SuppressLint
import android.content.ContentValues
import android.content.Context
import android.database.Cursor
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import android.util.Log
import com.terratenientes.medicalhealth.data.Paciente
class RecetaDataBaseHelper(context: Context) : SQLiteOpenHelper(context, DATABAENAME, null, DATABASEVERSION){
companion object{
@ -92,11 +93,49 @@ class RecetaDataBaseHelper(context: Context) : SQLiteOpenHelper(context, DATABAE
return recetas
}
@SuppressLint("Range")
fun obtenerRecetas(): List<Receta> {
val recetas = mutableListOf<Receta>()
val db = readableDatabase
val cursor = db.rawQuery("SELECT * FROM $TABLE_NAME", null)
while (cursor.moveToNext()) {
val nombrePaciente = cursor.getString(cursor.getColumnIndex(COLUMN_NOMBRE_PACIENTE))
val edadPaciente = cursor.getInt(cursor.getColumnIndex(COLUMN_EDAD_PACIENTE))
val pesoPaciente = cursor.getDouble(cursor.getColumnIndex(COLUMN_PESO_PACIENTE))
val medicamento = cursor.getString(cursor.getColumnIndex(COLUMN_MEDICAMENTO))
val fecha = cursor.getString(cursor.getColumnIndex(COLUMN_FECHA))
val dosis = cursor.getString(cursor.getColumnIndex(COLUMN_DOSIS_PACIENTE))
val duracion = cursor.getString(cursor.getColumnIndex(DURACION_MEDICAMENTO))
val receta = Receta(nombrePaciente, edadPaciente, pesoPaciente, medicamento, fecha, dosis, duracion)
recetas.add(receta)
}
cursor.close()
return recetas
}
fun eliminarReceta(receta: Receta) {
Log.d("RecetaDataBaseHelper", "Eliminando receta: ${receta.NombrePaciente}, ${receta.fecha}")
val db = writableDatabase
db.delete(TABLE_NAME, "$COLUMN_NOMBRE_PACIENTE = ? AND $COLUMN_FECHA = ?", arrayOf(receta.NombrePaciente, receta.fecha))
db.close()
}
fun modificarReceta(receta: Receta){
val db = writableDatabase
val values = ContentValues().apply {
put(COLUMN_EDAD_PACIENTE, receta.edadPaciente)
put(COLUMN_PESO_PACIENTE, receta.pesoPaciente)
put(COLUMN_MEDICAMENTO, receta.nombreMedicamento)
put(COLUMN_FECHA, receta.fecha)
put(COLUMN_DOSIS_PACIENTE, receta.dosis)
put(DURACION_MEDICAMENTO, receta.duracion)
}
val whereClause = "$COLUMN_NOMBRE_PACIENTE = ? and $COLUMN_FECHA = ?"
val whereArgs = arrayOf(receta.NombrePaciente, receta.fecha)
db.update(TABLE_NAME, values, whereClause, whereArgs)
db.close()
}
fun crearTablaReceta(){
val db=writableDatabase
val creatTabla="CREATE TABLE $TABLE_NAME ($COLUMN_NOMBRE_PACIENTE VARCHAR(30), $COLUMN_EDAD_PACIENTE INT, $COLUMN_PESO_PACIENTE INT, $COLUMN_FECHA VARCHAR(30), " +

View File

@ -0,0 +1,62 @@
package com.terratenientes.medicalhealth.adapters
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.terratenientes.medicalhealth.R
import com.terratenientes.medicalhealth.data.Receta
class RecetaDoctorViewAdapter(private var notes : List<Receta>, context: Context, val cellClickListener: CellClickListener) :
RecyclerView.Adapter<RecetaDoctorViewAdapter.NoteViewHolder>() {
class NoteViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
val tituloReceta : TextView = itemView.findViewById(R.id.tv_titulo_receta)
val fechaReceta : TextView = itemView.findViewById(R.id.tv_fecha_receta)
val nombreReceta : TextView = itemView.findViewById(R.id.tv_nombre_paciente)
val btnEliminar: ImageView = itemView.findViewById(R.id.iv_eliminar_receta)
val btnModificar : ImageView = itemView.findViewById(R.id.iv_modificar_receta)
val btnEnviar : ImageView = itemView.findViewById(R.id.iv_correo_receta)
val pesoReceta : TextView = itemView.findViewById(R.id.tv_peso_paciente)
val edadReceta : TextView = itemView.findViewById(R.id.tv_edad_paciente)
val dosisReceta : TextView =itemView.findViewById(R.id.tv_dosis_medicamento)
val duracionReceta : TextView = itemView.findViewById(R.id.tv_duracion_receta)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NoteViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.rc_receta_medico_item, parent, false)
return NoteViewHolder(view)
}
override fun getItemCount(): Int {
return notes.size
}
override fun onBindViewHolder(holder: NoteViewHolder, position: Int) {
val note = notes[position]
holder.tituloReceta.text = note.nombreMedicamento
holder.fechaReceta.text = note.fecha
holder.dosisReceta.text=note.dosis
holder.duracionReceta.text=note.duracion
holder.nombreReceta.text=note.NombrePaciente
holder.pesoReceta.text= note.pesoPaciente.toString()
holder.edadReceta.text=note.edadPaciente.toString()
holder.btnEliminar.setOnClickListener{
cellClickListener.onEliminarClickListener(position)
}
holder.btnModificar.setOnClickListener {
cellClickListener.onModifyClickListener(position)
}
holder.btnEnviar.setOnClickListener{
cellClickListener.onEnviarCorreoClickListener(position)
}
}
fun refreshData( newNotes : List<Receta>){
this.notes=newNotes
notifyDataSetChanged()
}
}

View File

@ -1,24 +1,24 @@
package Adapters
package com.terratenientes.medicalhealth.adapters
import Data.Receta
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.AdapterView.OnItemClickListener
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import com.terratenientes.medicalhealth.R
import com.terratenientes.medicalhealth.data.Receta
class RecetaViewAdapter(private var notes : List<Receta>, context: Context,val cellClickListener: CellClickListener) :
class RecetaViewAdapter(private var notes : List<Receta>, context: Context, val cellClickListener: CellClickListener) :
RecyclerView.Adapter<RecetaViewAdapter.NoteViewHolder>() {
class NoteViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
val tituloReceta : TextView = itemView.findViewById(R.id.tv_titulo_receta)
val fechaReceta : TextView = itemView.findViewById(R.id.tv_fecha_receta)
val nombreReceta : TextView = itemView.findViewById(R.id.tv_nombre_paciente)
val btnDescargar : Button = itemView.findViewById(R.id.btn_descargar_receta)
val btnDescargar : ImageView = itemView.findViewById(R.id.iv_descargar_receta)
val btnEnviar : ImageView = itemView.findViewById(R.id.iv_correo_receta)
val pesoReceta : TextView = itemView.findViewById(R.id.tv_peso_paciente)
val edadReceta : TextView = itemView.findViewById(R.id.tv_edad_paciente)
val dosisReceta : TextView=itemView.findViewById(R.id.tv_dosis_medicamento)
@ -47,6 +47,9 @@ class RecetaViewAdapter(private var notes : List<Receta>, context: Context,val c
holder.btnDescargar.setOnClickListener{
cellClickListener.onCellClickListener(position)
}
holder.btnEnviar.setOnClickListener{
cellClickListener.onEnviarCorreoClickListener(position)
}
}
fun refreshData( newNotes : List<Receta>){

View File

@ -1,3 +1,3 @@
package Data
package com.terratenientes.medicalhealth.data
data class Doctor(var Cedula : String ,var Nombre : String, var Apellido : String, var Telefono : String, var Consultorio : Int)

View File

@ -0,0 +1,8 @@
package com.terratenientes.medicalhealth.data
data class Historial(
var tipoUsuario: String?,
var nombreUsuario: String?,
var eventoRealizado: String?,
var fecha: String?
)

View File

@ -1,4 +1,4 @@
package Data
package com.terratenientes.medicalhealth.data
data class Paciente(
var id: Int, // Este campo representa el ID autoincrementable en la base de datos

View File

@ -1,3 +1,3 @@
package Data
package com.terratenientes.medicalhealth.data
data class Receta(var NombrePaciente : String, var edadPaciente : Int, var pesoPaciente: Double, var nombreMedicamento : String, var fecha : String, var dosis : String, var duracion :String)

View File

@ -1,4 +1,4 @@
package Reports
package com.terratenientes.medicalhealth.reports
import android.Manifest
import android.annotation.SuppressLint
@ -11,10 +11,10 @@ import android.os.Environment
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import Adapters.DoctorDataBaseHelper
import com.terratenientes.medicalhealth.adapters.DoctorDataBaseHelper
import com.terratenientes.medicalhealth.ModificarActivity
import Data.Paciente
import Adapters.PacienteAdapter
import com.terratenientes.medicalhealth.data.Paciente
import com.terratenientes.medicalhealth.adapters.PacienteAdapter
import com.terratenientes.medicalhealth.R
import com.terratenientes.medicalhealth.databinding.ActivityConsultarPacientesBinding
import java.io.File
@ -99,6 +99,7 @@ class ConsultarPacientesActivity : AppCompatActivity() {
// Escribir los datos en el archivo CSV
val writer = FileWriter(archivoCSV)
writer.append("Nombre, Apellido Paterno, Apellido Materno, Edad, Sexo\n")
for (paciente in pacientesList) {
writer.append("${paciente.nombre},${paciente.apellidoPaterno},${paciente.apellidoMaterno},${paciente.edad},${paciente.sexo}\n")
}

View File

@ -0,0 +1,23 @@
package com.terratenientes.medicalhealth.utilidad
import android.app.DatePickerDialog
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.widget.DatePicker
import androidx.fragment.app.DialogFragment
import java.util.Calendar
class DatePickerFragment (val listener: (day: Int, month: Int, year: Int) -> Unit): DialogFragment(), DatePickerDialog.OnDateSetListener {
override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) {
listener(dayOfMonth, month, year)
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val c: Calendar = Calendar.getInstance()
val day: Int = c.get(Calendar.DAY_OF_MONTH)
val month: Int = c.get(Calendar.MONTH)
val year: Int = c.get(Calendar.YEAR)
return DatePickerDialog(activity as Context, this@DatePickerFragment, year, month, day)
}
}

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M12,4A4,4 0,0 1,16 8A4,4 0,0 1,12 12A4,4 0,0 1,8 8A4,4 0,0 1,12 4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M19,4H15.5L14.5,3H9.5L8.5,4H5V6H19M6,19A2,2 0,0 0,8 21H16A2,2 0,0 0,18 19V7H6V19Z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M14.84,16.26C17.86,16.83 20,18.29 20,20V22H4V20C4,18.29 6.14,16.83 9.16,16.26L12,21L14.84,16.26M8,8H16V10A4,4 0,0 1,12 14A4,4 0,0 1,8 10V8M8,7L8.41,2.9C8.46,2.39 8.89,2 9.41,2H14.6C15.11,2 15.54,2.39 15.59,2.9L16,7H8M12,3H11V4H10V5H11V6H12V5H13V4H12V3Z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M5,20H19V18H5M19,9H15V3H9V9H5L12,16L19,9Z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M13,9H18.5L13,3.5V9M6,2H14L20,8V20A2,2 0,0 1,18 22H6C4.89,22 4,21.1 4,20V4C4,2.89 4.89,2 6,2M15,18V16H6V18H15M18,14V12H6V14H18Z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M13.5,8H12V13L16.28,15.54L17,14.33L13.5,12.25V8M13,3A9,9 0,0 0,4 12H1L4.96,16.03L9,12H6A7,7 0,0 1,13 5A7,7 0,0 1,20 12A7,7 0,0 1,13 19C11.07,19 9.32,18.21 8.06,16.94L6.64,18.36C8.27,20 10.5,21 13,21A9,9 0,0 0,22 12A9,9 0,0 0,13 3"/>
</vector>

View File

@ -4,6 +4,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:fillColor="#FFFFFFFF"
android:pathData="M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z" />
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M17,7L15.59,8.41L18.17,11H8V13H18.17L15.59,15.58L17,17L22,12M4,5H12V3H4C2.9,3 2,3.9 2,5V19C2,20.1 2.9,21 4,21H12V19H4V5Z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0,0 0,2 12A10,10 0,0 0,12 22A10,10 0,0 0,22 12A10,10 0,0 0,12 2M13,7H11V11H7V13H11V17H13V13H17V11H13V7Z"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M21,10.12H14.22L16.96,7.3C14.23,4.6 9.81,4.5 7.08,7.2C4.35,9.91 4.35,14.28 7.08,17C9.81,19.7 14.23,19.7 16.96,17C18.32,15.65 19,14.08 19,12.1H21C21,14.08 20.12,16.65 18.36,18.39C14.85,21.87 9.15,21.87 5.64,18.39C2.14,14.92 2.11,9.28 5.62,5.81C9.13,2.34 14.76,2.34 18.27,5.81L21,3V10.12M12.5,8V12.25L16,14.33L15.28,15.54L11,13V8H12.5Z"/>
</vector>

View File

@ -18,13 +18,6 @@
android:gravity="center"
/>
<ImageView
android:layout_width="200dp"
android:layout_height="150dp"
android:layout_marginTop="25dp"
android:layout_gravity="center_horizontal"
android:src="@drawable/image_area"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -121,17 +114,5 @@
android:background="@drawable/radius_btn"
android:text="@string/bt_agregar" />
<Button
android:id="@+id/btn_cancelar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/bt_cancelar"
android:layout_marginTop="2dp"
android:layout_marginStart="50dp"
android:textSize="18sp"
android:textStyle="bold"
android:background="@drawable/radius_btn"
android:layout_marginEnd="50dp"/>
</LinearLayout>

View File

@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="Reports.ConsultarPacientesActivity">
tools:context=".reports.ConsultarPacientesActivity">
<TextView
android:layout_width="match_parent"

View File

@ -40,6 +40,7 @@
android:text="@string/bt_eliminar" />
<Button
android:id="@+id/btn_cancelar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/bt_cancelar"

View File

@ -40,6 +40,7 @@
android:text="@string/bt_eliminar" />
<Button
android:id="@+id/btn_cancelarr"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/bt_cancelar"

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ModificarRecetaActivity">
<TextView
android:layout_marginTop="130dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/receta_activity_title"
android:textSize="32sp"
android:textAlignment="center"
android:textColor="@color/primaryColor"
android:textStyle="bold"
/>
<TextView
android:id="@+id/tv_nombre_paciente"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginStart="2dp"
android:textSize="20dp"/>
<EditText
android:id="@+id/et_edad_paciente"
android:layout_marginTop="10dp"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:hint="@string/receta_edad"
android:layout_gravity="center_horizontal"
/>
<EditText
android:id="@+id/et_peso_paciente"
android:layout_marginTop="10dp"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:hint="@string/receta_peso"
android:layout_gravity="center_horizontal"
android:inputType="number"
/>
<EditText
android:id="@+id/et_receta_medicamento"
android:layout_marginTop="10dp"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:hint="@string/receta_medicamento"
android:layout_gravity="center_horizontal"
/>
<TextView
android:id="@+id/et_fecha"
android:layout_marginTop="10dp"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginStart="2dp"
android:textSize="20dp"
android:hint="@string/receta_fecha_paciente"
android:layout_gravity="center_horizontal"
android:inputType="date"
/>
<EditText
android:id="@+id/et_dosis_medicamento"
android:layout_marginTop="10dp"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:hint="@string/receta_dosis"
android:layout_gravity="center_horizontal"
/>
<EditText
android:id="@+id/et_duracion_"
android:layout_marginTop="10dp"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:hint="@string/receta_duracion"
android:layout_gravity="center_horizontal"
/>
<Button
android:id="@+id/btn_modificar_receta"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="@string/btn_modificar_receta"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>

View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".PacienteActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginBottom="10dp"
android:text="@string/tv_titulo_consultar"
android:textSize="30dp"
android:textColor="@color/primaryColor"
android:gravity="center"/>
<ImageView
android:id="@+id/iv_agregar_paciente"
android:layout_width="100dp"
android:layout_height="30dp"
android:layout_marginTop="15dp"
android:layout_marginStart="10dp"
android:src="@drawable/plus_circle_outline"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_pacientes"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="8dp"/>
<Button
android:id="@+id/btn_descargar_csv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/btn_csv"
android:layout_marginTop="10dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:background="@drawable/radius_btn"/>
</LinearLayout>

View File

@ -7,14 +7,21 @@
android:layout_height="match_parent"
tools:context=".PacientePrincipalActivity">
<ImageView
android:id="@+id/iv_logout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="350dp"
android:src="@drawable/logout"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_recetas_paciente"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
tools:listitem="@layout/rc_receta_item"
/>
android:layout_below="@id/iv_logout"
tools:listitem="@layout/rc_receta_item" />
</RelativeLayout>

View File

@ -7,22 +7,155 @@
android:orientation="vertical"
tools:context="PrincipalActivity">
<Button
android:id="@+id/btn_agregar_paciente"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/tv_agregar_paciente_titulo"/>
<Button
android:id="@+id/btn_eliminar_paciente"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/eliminar_paciente_titulo"/>
<Button
android:id="@+id/btn_agregar_receta"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/btn_agregar_receta"/>
android:layout_height="40dp"
android:orientation="horizontal">
<TextView
android:layout_width="350dp"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:paddingStart="50dp"
android:gravity="center"
android:textColor="@color/primaryColor"
android:textSize="30dp"/>
<ImageView
android:id="@+id/iv_logout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:src="@drawable/logout"
android:layout_gravity="center_vertical"/>
</LinearLayout>
<ImageView
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_margin="20dp"
android:src="@drawable/doctor"/>
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:columnCount="1"
android:rowCount="4">
<TextView
android:id="@+id/tv_nombre_doctor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_column="0"
android:layout_row="0"
android:textSize="25dp"
android:layout_marginTop="15dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:text="Nombre:"/>
<TextView
android:id="@+id/tv_telefono_doctor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_column="0"
android:layout_row="1"
android:textSize="25dp"
android:layout_marginTop="35dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:text="Telefono:"/>
<TextView
android:id="@+id/tv_cedula_doctor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_column="0"
android:layout_row="2"
android:textSize="25dp"
android:layout_marginTop="35dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:text="Cédula:"/>
<TextView
android:id="@+id/tv_consultorio_doctor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_columnWeight="1"
android:layout_column="0"
android:layout_row="3"
android:textSize="25dp"
android:layout_marginTop="35dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:text="Consultorio:"/>
</GridLayout>
<GridLayout
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/radius_tv"
android:backgroundTint="@color/primaryColor"
android:layout_marginTop="130dp"
android:columnCount="3"
android:rowCount="2">
<ImageView
android:id="@+id/iv_pacientes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/account"
android:layout_column="0"
android:layout_columnWeight="1"
android:layout_row="0"/>
<ImageView
android:id="@+id/iv_recetas"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/file_document"
android:layout_column="1"
android:layout_columnWeight="1"
android:layout_row="0"/>
<ImageView
android:id="@+id/iv_historial"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/history"
android:layout_column="2"
android:layout_columnWeight="1"
android:layout_row="0"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Pacientes"
android:textColor="@color/white"
android:layout_columnWeight="1"
android:layout_column="0"
android:gravity="center"
android:layout_row="1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Recetas"
android:textColor="@color/white"
android:layout_columnWeight="1"
android:layout_column="1"
android:gravity="center"
android:layout_row="1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Historial"
android:textColor="@color/white"
android:layout_columnWeight="1"
android:layout_column="2"
android:gravity="center"
android:layout_row="1"/>
</GridLayout>
</LinearLayout>

View File

@ -51,15 +51,36 @@
android:hint="@string/receta_medicamento"
android:layout_gravity="center_horizontal"
/>
<EditText
android:id="@+id/et_fecha"
android:layout_marginTop="10dp"
<GridLayout
android:layout_width="300dp"
android:layout_height="wrap_content"
android:hint="@string/receta_fecha_paciente"
android:layout_gravity="center_horizontal"
android:inputType="date"
/>
android:layout_gravity="center"
android:columnCount="2"
android:rowCount="1">
<TextView
android:id="@+id/tv_fecha"
android:layout_marginTop="10dp"
android:layout_width="200dp"
android:layout_height="match_parent"
android:hint="@string/receta_fecha_paciente"
android:layout_gravity="center_horizontal"
android:textSize="20sp"
android:inputType="date"
android:layout_columnWeight="0"
android:layout_column="0"
android:layout_row="0"/>
<TextView
android:id="@+id/tv_datepicker"
android:layout_height="match_parent"
android:layout_width="100dp"
android:layout_marginTop="10dp"
android:textColor="@color/primaryColor"
android:text="calendario"
android:textSize="20sp"
android:layout_columnWeight="1"
android:layout_column="1"
android:layout_row="0"/>
</GridLayout>
<EditText
android:id="@+id/et_dosis_medicamento"
android:layout_marginTop="10dp"

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".RecetasActivity">
<ImageView
android:id="@+id/iv_agregar_receta"
android:layout_width="45dp"
android:layout_height="35dp"
android:layout_margin="20dp"
android:src="@drawable/plus_circle_outline"
android:layout_gravity="start"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_recetas"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="20dp"/>
</LinearLayout>

View File

@ -42,6 +42,7 @@
android:layout_marginBottom="20dp"
android:background="@drawable/radius_tv"
android:layout_gravity="center_horizontal"
android:inputType="text"
/>
@ -56,6 +57,7 @@
android:layout_marginBottom="20dp"
android:background="@drawable/radius_tv"
android:textColorHint="@color/black"
android:inputType="text"
/>
<EditText
@ -69,6 +71,9 @@
android:layout_marginBottom="20dp"
android:background="@drawable/radius_tv"
android:textColorHint="@color/black"
android:inputType="phone"
android:maxLength="15"
android:digits="0123456789"
/>
<EditText
android:layout_gravity="center_horizontal"
@ -96,6 +101,7 @@
android:background="@drawable/radius_tv"
android:hint="@string/et_contrasena_registrar"
android:textColorHint="@color/black"
android:maxLength="12"
/>
<Button

View File

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_margin="10dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
app:cardCornerRadius="20dp"
app:cardElevation="8dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_nombre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="32dp"
android:text="@string/ht_nombre"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_apellido_paterno"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginTop="32dp"
android:text="@string/ht_apellido_paterno"
app:layout_constraintStart_toEndOf="@id/tv_nombre"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_apellido_materno"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="0"
android:layout_column="2"
android:layout_columnWeight="1"
android:layout_marginStart="16dp"
android:layout_marginTop="32dp"
android:text="@string/ht_apellido_materno"
app:layout_constraintStart_toEndOf="@+id/tv_apellido_paterno"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_edad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="1"
android:layout_column="0"
android:layout_columnWeight="1"
android:layout_marginStart="20dp"
android:text="@string/et_modificar_edad"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/tv_sexo"
app:layout_constraintTop_toBottomOf="@+id/tv_apellido_materno"
app:layout_constraintVertical_bias="0.2" />
<TextView
android:id="@+id/tv_domicilio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="1"
android:layout_column="2"
android:layout_columnWeight="1"
android:layout_marginStart="16dp"
android:text="@string/ht_domicilio"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_nombre"
app:layout_constraintVertical_bias="0.2" />
<TextView
android:id="@+id/tv_sexo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="1"
android:layout_column="1"
android:layout_columnWeight="1"
android:layout_marginStart="8dp"
android:text="@string/et_modificar_sexo"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/tv_domicilio"
app:layout_constraintTop_toBottomOf="@+id/tv_apellido_paterno"
app:layout_constraintVertical_bias="0.2" />
<TextView
android:id="@+id/tv_id_paciente"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:text="Id"
app:layout_constraintBottom_toTopOf="@+id/tv_nombre"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.384" />
<ImageView
android:id="@+id/iv_modificar_paciente"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="2"
android:layout_column="1"
android:layout_columnWeight="1"
android:layout_marginTop="60dp"
android:layout_marginEnd="36dp"
android:src="@drawable/update"
app:layout_constraintEnd_toStartOf="@+id/iv_eliminar_paciente"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toEndOf="@+id/tv_edad"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_eliminar_paciente"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="2"
android:layout_column="2"
android:layout_columnWeight="1"
android:layout_marginTop="60dp"
android:layout_marginEnd="16dp"
android:src="@drawable/delete"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>

View File

@ -63,22 +63,38 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_descargar_receta"
<ImageView
android:id="@+id/iv_descargar_receta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="243dp"
android:layout_marginTop="13dp"
android:layout_marginTop="2dp"
android:layout_marginEnd="24dp"
android:layout_marginBottom="10dp"
android:text="Descargar"
android:textSize="12sp"
android:src="@drawable/download"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.487" />
app:layout_constraintVertical_bias="0.243" />
<ImageView
android:id="@+id/iv_correo_receta"
android:layout_width="14dp"
android:layout_height="14dp"
android:layout_marginStart="100dp"
android:layout_marginTop="2dp"
android:layout_marginEnd="24dp"
android:layout_marginBottom="50dp"
android:background="#3F51B5"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.831"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.522"
app:srcCompat="@android:drawable/ic_dialog_email" />
<TextView
android:id="@+id/tv_peso_paciente"

View File

@ -0,0 +1,165 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="110dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_marginEnd="12dp"
android:layout_marginHorizontal="10dp"
android:layout_marginVertical="10dp"
app:cardCornerRadius="20dp"
app:cardElevation="8dp"
android:layout_marginStart="12dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/tv_nombre_paciente"
android:layout_width="117dp"
android:layout_height="15dp"
android:layout_marginStart="14dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="256dp"
android:layout_marginBottom="75dp"
android:hint="Nombre Paciente"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_titulo_receta"
android:layout_width="117dp"
android:layout_height="15dp"
android:layout_marginStart="14dp"
android:layout_marginTop="50dp"
android:layout_marginEnd="256dp"
android:layout_marginBottom="45dp"
android:hint="Titulo de la Receta"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_fecha_receta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="14dp"
android:layout_marginTop="83dp"
android:layout_marginEnd="255dp"
android:layout_marginBottom="8dp"
android:hint="Fecha de la Receta"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_correo_receta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="243dp"
android:layout_marginTop="2dp"
android:layout_marginEnd="24dp"
android:layout_marginBottom="10dp"
app:srcCompat="@android:drawable/ic_dialog_email"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.243" />
<ImageView
android:id="@+id/iv_modificar_receta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:src="@drawable/update"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.581" />
<ImageView
android:id="@+id/iv_eliminar_receta"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="243dp"
android:layout_marginTop="75dp"
android:layout_marginEnd="24dp"
android:layout_marginBottom="10dp"
android:src="@drawable/delete"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.487" />
<TextView
android:id="@+id/tv_peso_paciente"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_marginStart="141dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="196dp"
android:layout_marginBottom="71dp"
android:hint="Peso"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_duracion_receta"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_marginStart="199dp"
android:layout_marginTop="83dp"
android:layout_marginEnd="128dp"
android:layout_marginBottom="8dp"
android:hint="Duración"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_edad_paciente"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_marginStart="141dp"
android:layout_marginTop="50dp"
android:layout_marginEnd="196dp"
android:layout_marginBottom="41dp"
android:hint="Edad"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_dosis_medicamento"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_marginStart="141dp"
android:layout_marginTop="83dp"
android:layout_marginEnd="196dp"
android:layout_marginBottom="8dp"
android:hint="Dosis"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>

View File

@ -2,13 +2,14 @@
<string name="app_name">MedicalHealth</string>
<!-- Modificar Activity -->
<string name="tv_modificar_titulo">Modificar Paciente</string>
<string name="et_modificar_edad">Edad:</string>
<string name="et_modificar_sexo">Sexo:</string>
<string name="et_modificar_edad">Edad</string>
<string name="et_modificar_sexo">Sexo</string>
<string name="ht_nombre">Nombre</string>
<string name="ht_apellido_paterno">Apellido Paterno</string>
<string name="ht_apellido_materno">Apellido Materno</string>
<string name="ht_domicilio">Domicilio</string>
<string name="bt_modificar">Modificar</string>
<string name="tv_id_paciente">Id</string>
<string name="tv_agregar_paciente_titulo">Agrega un paciente</string>
<string name="bt_agregar">Confirmar</string>
<string name="bt_cancelar">Cancelar</string>
@ -47,6 +48,7 @@
<string name="receta_peso">Peso del paciente KG</string>
<string name="btn_agregar_receta">Agregar Receta</string>
<string name="btn_ayuda_receta">Ayuda</string>
<string name="btn_modificar_receta">Modificar Receta</string>
<string name="title_activity_principal">PrincipalActivity</string>
<string name="title_home">Home</string>
<string name="title_dashboard">Dashboard</string>