121 lines
3.9 KiB
JavaScript
121 lines
3.9 KiB
JavaScript
// @ts-ignore Import module
|
|
import { createApp, reactive } from 'https://unpkg.com/petite-vue?module';
|
|
const webServices = {
|
|
getPeriodosV1: async () => {
|
|
try {
|
|
const response = await fetch('periodos.v1.php');
|
|
return await response.json();
|
|
}
|
|
catch (error) {
|
|
console.log(error);
|
|
return [];
|
|
}
|
|
},
|
|
getPeriodosV2: async () => {
|
|
try {
|
|
const response = await fetch('periodos.v2.php');
|
|
return await response.json();
|
|
}
|
|
catch (error) {
|
|
console.log(error);
|
|
return [];
|
|
}
|
|
}
|
|
};
|
|
const store = reactive({
|
|
periodosV1: [],
|
|
periodosV2: [],
|
|
errors: [],
|
|
fechas(idPeriodo) {
|
|
const periodo = this.periodosV2.find((periodo) => periodo.IdPeriodo === idPeriodo);
|
|
return {
|
|
inicio: periodo ? periodo.FechaInicio : '',
|
|
fin: periodo ? periodo.FechaFin : ''
|
|
};
|
|
},
|
|
periodov1(idPeriodo) {
|
|
return this.periodosV1.find((periodo) => periodo.IdPeriodo === idPeriodo);
|
|
},
|
|
periodov2(idPeriodo) {
|
|
return this.periodosV2.filter((periodo) => periodo.IdPeriodo === idPeriodo);
|
|
},
|
|
async addPeriodo(periodo) {
|
|
try {
|
|
const result = await fetch('backend/periodos.php', {
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
...periodo,
|
|
...this.fechas(periodo.IdPeriodo)
|
|
}),
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
}
|
|
}).then((response) => response.json());
|
|
if (result.success) {
|
|
this.periodosV1 = this.periodosV1.map((periodoV1) => {
|
|
if (periodoV1.IdPeriodo === periodo.IdPeriodo) {
|
|
periodoV1.in_db = true;
|
|
}
|
|
return periodoV1;
|
|
});
|
|
return result;
|
|
}
|
|
else {
|
|
this.errors.push(result.message);
|
|
}
|
|
}
|
|
catch (error) {
|
|
this.errors.push(error);
|
|
}
|
|
},
|
|
async addCarreras(idPeriodo) {
|
|
try {
|
|
const periodoV1 = this.periodov1(idPeriodo);
|
|
const periodoV2 = this.periodov2(idPeriodo);
|
|
const data = periodoV2.map(({ ClaveCarrera, NombreCarrera }) => ({
|
|
ClaveCarrera: ClaveCarrera,
|
|
NombreCarrera: NombreCarrera,
|
|
IdNivel: periodoV1.IdNivel,
|
|
}));
|
|
const result = await fetch('backend/carreras.php', {
|
|
method: 'POST',
|
|
body: JSON.stringify(data),
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
}
|
|
}).then((response) => response.json());
|
|
if (result.success) {
|
|
await webServices.getPeriodosV1().then((periodosV1) => {
|
|
this.periodosV1 = periodosV1;
|
|
});
|
|
await webServices.getPeriodosV2().then((periodosV2) => {
|
|
this.periodosV2 = periodosV2;
|
|
});
|
|
}
|
|
}
|
|
catch (error) {
|
|
this.errors.push(error);
|
|
}
|
|
}
|
|
});
|
|
createApp({
|
|
store,
|
|
info(IdPeriodo) {
|
|
const periodo = store.periodosV2.find((periodo) => periodo.IdPeriodo === IdPeriodo &&
|
|
periodo.FechaInicio != '' && periodo.FechaFin != '');
|
|
return periodo;
|
|
},
|
|
complete(IdPeriodo) {
|
|
const info = this.info(IdPeriodo);
|
|
return info !== undefined;
|
|
},
|
|
mounted: async () => {
|
|
await webServices.getPeriodosV1().then((periodosV1) => {
|
|
store.periodosV1 = periodosV1;
|
|
});
|
|
await webServices.getPeriodosV2().then((periodosV2) => {
|
|
store.periodosV2 = periodosV2;
|
|
});
|
|
}
|
|
}).mount();
|