periodos.ts 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. import { createApp, reactive } from 'https://unpkg.com/petite-vue?module'
  2. interface Periodo {
  3. created_at: Date;
  4. estado_id: number;
  5. id_periodo_sgu: number;
  6. nivel: string;
  7. nivel_id: number | '';
  8. periodo_clave: string;
  9. periodo_fecha_fin: Date;
  10. periodo_fecha_inicio: Date;
  11. periodo_id: number;
  12. periodo_nombre: string;
  13. }
  14. interface Nivel {
  15. nivel_id: number;
  16. nivel_nombre: string;
  17. }
  18. const app = createApp({
  19. periodos: [] as Array<Periodo>,
  20. niveles: [] as Array<Nivel>,
  21. messages: [] as Array<{ title: string, text: string, type: string, timestamp: string }>,
  22. addMessage(title: string, text: string, type: string) {
  23. this.messages.push({ title, text, type, timestamp: new Date() });
  24. },
  25. async sendRequest(action: string, periodo_id: number, data: any) {
  26. const response = await fetch('action/periodos.php', {
  27. method: 'PUT',
  28. headers: {
  29. 'Content-Type': 'application/json'
  30. },
  31. body: JSON.stringify({
  32. action: action,
  33. periodo_id: periodo_id,
  34. ...data
  35. })
  36. })
  37. return await response.json()
  38. },
  39. async changeNivel(periodo: Periodo, nivel_id: number) {
  40. if (periodo.nivel_id === nivel_id) return
  41. const result = await this.sendRequest('changeNivel', periodo.periodo_id, { nivel_id: nivel_id })
  42. if (result.success) {
  43. this.addMessage('Nivel cambiado', `El nivel del periodo ${periodo.periodo_nombre} ha sido cambiado a ${this.niveles.find((nivel: Nivel) => nivel.nivel_id === nivel_id)?.nivel_nombre}`, 'success')
  44. periodo.nivel_id = nivel_id
  45. periodo.nivel = this.niveles.find((nivel: Nivel) => nivel.nivel_id === nivel_id)?.nivel_nombre || ''
  46. } else {
  47. this.addMessage('Error al cambiar nivel', `No se pudo cambiar el nivel del periodo ${periodo.periodo_nombre}`, 'danger')
  48. }
  49. },
  50. async changeFechaInicio(periodo: Periodo, fecha_inicio: Date) {
  51. const result = await this.sendRequest('changeFechaInicio', periodo.periodo_id, { periodo_fecha_inicio: fecha_inicio })
  52. if (result.success) {
  53. this.addMessage('Fecha de inicio cambiada', `La fecha de inicio del periodo ${periodo.periodo_nombre} ha sido cambiada a ${fecha_inicio}`, 'success')
  54. periodo.periodo_fecha_inicio = fecha_inicio
  55. } else {
  56. this.addMessage('Error al cambiar fecha de inicio', `No se pudo cambiar la fecha de inicio del periodo ${periodo.periodo_nombre}`, 'danger')
  57. }
  58. },
  59. async changeFechaFin(periodo: Periodo, fecha_fin: Date) {
  60. const result = await this.sendRequest('changeFechaFin', periodo.periodo_id, { periodo_fecha_fin: fecha_fin })
  61. if (result.success) {
  62. this.addMessage('Fecha de fin cambiada', `La fecha de fin del periodo ${periodo.periodo_nombre} ha sido cambiada a ${fecha_fin}`, 'success')
  63. periodo.periodo_fecha_fin = fecha_fin
  64. } else {
  65. this.addMessage('Error al cambiar fecha de fin', `No se pudo cambiar la fecha de fin del periodo ${periodo.periodo_nombre}`, 'danger')
  66. }
  67. },
  68. async updatePeriodo(periodo: Periodo) {
  69. const result = await this.sendRequest('updatePeriodo', periodo.periodo_id, {
  70. periodo_nombre: periodo.periodo_nombre,
  71. id_periodo_sgu: periodo.id_periodo_sgu,
  72. periodo_clave: periodo.periodo_clave,
  73. })
  74. if (result.success) {
  75. this.addMessage('Periodo actualizado', `El periodo ${periodo.periodo_nombre} ha sido actualizado`, 'success')
  76. } else {
  77. this.addMessage('Error al actualizar periodo', `No se pudo actualizar el periodo ${periodo.periodo_nombre}`, 'danger')
  78. }
  79. },
  80. async createPeriodo(newPeriodo: Periodo) {
  81. if (newPeriodo.periodo_nombre === null || newPeriodo.nivel_id === null || newPeriodo.periodo_fecha_inicio === null || newPeriodo.periodo_fecha_fin === null) {
  82. this.addMessage('Error al crear periodo', `No se pudo crear el periodo ${newPeriodo.periodo_nombre}`, 'danger')
  83. return
  84. }
  85. const result = await fetch('action/periodos.php', {
  86. method: 'POST',
  87. headers: {
  88. 'Content-Type': 'application/json'
  89. },
  90. body: JSON.stringify(newPeriodo)
  91. }).then(res => res.json())
  92. if (result.success) {
  93. this.addMessage('Periodo creado', `El periodo ${newPeriodo.periodo_nombre} ha sido creado`, 'success')
  94. this.periodos
  95. Object.keys(newPeriodo).forEach(key => newPeriodo[key] = null);
  96. newPeriodo.nivel_id = '';
  97. this.periodos = await fetch('action/periodos.php').then(res => res.json())
  98. } else {
  99. this.addMessage('Error al crear periodo', `No se pudo crear el periodo ${newPeriodo.periodo_nombre}`, 'danger')
  100. }
  101. },
  102. async deletePeriodo(periodo: Periodo) {
  103. const response = await fetch('action/periodos.php', {
  104. method: 'DELETE',
  105. headers: {
  106. 'Content-Type': 'application/json'
  107. },
  108. body: JSON.stringify({
  109. periodo_id: periodo.periodo_id,
  110. })
  111. })
  112. const result = await response.json()
  113. if (result.success) {
  114. this.addMessage('Periodo eliminado', `El periodo ${periodo.periodo_nombre} ha sido eliminado`, 'success')
  115. this.periodos = this.periodos.filter((p: Periodo) => p.periodo_id !== periodo.periodo_id)
  116. } else {
  117. this.addMessage('Error al eliminar periodo', `No se pudo eliminar el periodo ${periodo.periodo_nombre}`, 'danger')
  118. }
  119. },
  120. async mounted() {
  121. this.periodos = await fetch('action/periodos.php').then(res => res.json())
  122. this.niveles = await fetch('action/nivel.php').then(res => res.json())
  123. }
  124. }).mount('#app')