Estudiantes (Students)


Routes

Method URI Action
GET /students index
GET /students/{id} show
PATCH /students/{id} update
DELETE /students/{id} soft delete
POST /students/{id}/re-inscription custom
POST /students/{id}/change-section custom
POST /students/{id}/specialization-history custom
GET /students/{id}/courses/next-semester custom
POST /students/{id}/approves-current-semester custom
GET /students/{id}/absences index
GET /students/{id}/reports/courses-notes download
GET /students/{id}/reports/courses-final-notes download
GET /students/{id}/reports/courses/lessons-notes-history download
GET /students/{id}/reports/general-notes-history download
GET /students/{id}/reports/profile-info download

Model Attributes

{
  "id": 1,
  "email": "blake03@stanton.net", // mismo email que el user relacionado
  "id_document": "29788338",
  "first_name": "Janis Howell",
  "last_name": "Schneider",
  "gender": "female",
  "schedule_shift": "afternoon",
  "address": "432 Roslyn Inlet Suite 382\nPort Lynn, HI 22962-1350",
  "birth_place": "432 Roslyn Inlet Suite 382\nPort Lynn, HI 22962-1350",
  "birth_date": "2002-04-03",
  "phone": "+2454506365354",
  "mobile_phone": "+2454506365354",
  "profile_picture": null, // copia del profile_picture del usuario relacionado  

  "educational_background": "superior",
  "educational_title": "Prof.",
  "educational_institution_name": "Eliseo Braun",
  "educational_graduation_date": "2019-04-03",
  "educational_current_activity": "trabajando?",

  "representative_email": "ggusikowski@gmail.com",
  "representative_name": "Kiera Bauch",
  "representative_profession": "Audio and Video Equipment Technician",
  "representative_address": "432 Roslyn Inlet Suite 382\nPort Lynn, HI 22962-1350",

  "user_id": 1,
  "pensum_id": 1,
  "preregister_specialization_id": 2,

  "updated_at": "2020-04-03 14:11:11",
  "created_at": "2020-04-03 14:11:11",

  "institution_email": "micorreodeinstitucion@disegno.com"
}

Relations

  • Tiene muchos pagos HasMany payments
  • Referenciado en bitacoras HasMany binnacles
  • Tiene muchas inscripciones HasMany inscriptions
  • Tiene inasisencias por retraso HasMany absencesByDelay (Cuando tiene una clase con retraso, se coloca en inasistencias por que 2 retrasos es 1 inasistencia)
  • Tiene inasisencias por asistencia HasMany absencesByAttendance (Cuando tiene una clase con asistencia=false)
  • Inscripcion mas reciente HasOne latestInscription
  • Pertenece a un pensum BelongsTo pensum
  • Pertenece a muchas clases BelongsToMany lessons
  • Pertenece a muchas materia/seccion BelongsToMany courseSections

{primary} Al obtener un modelo con el metodo show o index se puede utilizar un query string para cargar las relaciones ?with=relation o ?with=relationA,relationB


Index

Route GET /students

Policies

  • admins
  • coordinadores

Filters extends Query Filters

Filter Description
search=value Busca a traves de email, id_document, first_name, last_name
gender=string Filtra por genero del estudiante. string === male o female
birth_date=Y-m-d Filtra por fecha de nacimiento. Soporta operadores de busqueda >, <, >=, <= (se debe colocar al inicio del value)
period=id Obtiene los estudiantes de un periodo
specialization=id Obtiene los estudiantes de una especialidad
semester=id Obtiene los estudiantes de un semestre
section=id Obtiene los estudiantes de una seccion
pensum=id Obtiene los estudiantes de un pensum
deleted Incluye a los estudiantes con soft-delete
only_deleted Obtiene solo los estudiantes con soft-delete

Store

{primary} No soporta store


Update

Route PATCH /students/{id}

Policies

  • admins
  • estudiante relacionado

Request Body

{
  // actualizable por el estudiante
  "first_name": "string",
  "last_name": "string",
  "address": "string",
  "phone": "string",
  "mobile_phone": "string",

  // solo cuando el usuario logeado es admin
  "id_document": "string",
  "schedule_shift": "string|in:morning,afternoon,mixed",
  "birth_place": "string",
  "birth_date": "date_format:Y-m-d|before:today",

  "educational_background": "string|in:medium,superior",
  "educational_title": "string",
  "educational_institution_name": "string",
  "educational_graduation_date": "date_format:Y-m-d",
  "educational_current_activity": "string",

  "representative_email": "email",
  "representative_name": "string",
  "representative_profession": "string",
  "representative_address": "string",

  "social_networks.instagram": "nullable|string|max:128", 
  "social_networks.facebook": "nullable|string|max:128", 
  "social_networks.twitter": "nullable|string|max:128",
  "institution_email": "email"
}

Soft Delete

Route DELETE /students/{id}

Policies

  • admins

Re Inscribirse

{warning} Aun no se toma en cuenta las prelaciones ni promedios

Caso 1 Estudiante en el primer semestre de básico

Cuando se re-inscriba el estudiante sera pasado automaticamente a segundo de semestre de básico en el nuevo periodo.

Caso 2 Estudiante en el segundo semestre de básico

Se realizara el cambio de básico a la especialidad cambiando de 2do Semestre al 3er Semestre de la especialidad que se solicitara en el request.

{primary} Caso 2 El pensum que se utilizara al momento de re-inscribirse sera el más actualizado que se encuentre por periodo y por especialidad.

Caso 3 Estudiante en el 3,4,5 semestre de la especialidad

Sera pasado automaticamente al siguiente semestre de la especialidad en el nuevo periodo

Que acciones se realiza para re-inscribirse?

  1. Se obtiene el periodo actual habilitado, si este no tiene habilitado inscripciones se busca el proximo periodo, si existe y tiene inscripciones habilitadas (el periodo no tiene por que estar habilitado) se utilizara este periodo para la inscripción
  2. Tomando la ultima inscripción del estudiante se determinara el ultimo semetre y pensum
  3. Se verifica si se esta pasando de basico semestre 2 a especialidad semestre 3, de ser asi se tomara el pensum mas actualizado de esa especialidad en ese periodo.
  4. Se busca el siguiente semestre del mismo pensum de la ultima inscripción (para el caso 2 seria un nuevo pensum)
  5. Se asigna la sección al estudiante con el nuevo periodo, nuevo semestre y misma especialidad (para el caso 2, sera una nueva especialidad)
  6. Se actualiza los datos del estudiante (en el caso de cambio de especialidad se actualiza el pensum asociado).
  7. Se crea un nuevo registro de inscripción que representa la inscripcion actual.

Route POST /students/{id}/re-inscription

Policies

  • admins
  • estudiante relacionado a ese estudiante

Request Body

Todos los atributos opcionales pero cuando se este pasado del semestre 2 de basico al 3 de la especialidad specialization_id sera requerido.


Si se actualiza email, se deshabilitara el usuario hasta se confirme el nuevo correo, para confirmarlo se utiliza el metodo de Confirmar Correo

{
  "phone": "string",
  "mobile_phone": "string",
  "schedule_shift": "string",
  "email": "string|email|unique:students|unique:users",
  "payment_date": "required|date_format:Y-m-d",
  "payment_receipt_number": "required|string",
  "payment_amount": "required|integer",
  "payment_type": "required|integer|in:1,2,3,4,5" // Tipo de pagos
}

Cambiar de Seccion

  • Siempre se usa como objetivo el periodo actual HABILITADO.
  • Requiere que un estudiante este asignado a una seccion
  • Requiere que la nueva seccion sea de la misma especialidad/periodo/semestre que el actual
  • Requiere que la nueva seccion no este llena

Route POST /students/{id}/change-section

Policies

  • admins

Request Body

{
  "new_section_id": "required|integer|exists"
}

Historico de especialidad

Route POST /students/{id}/specialization-history

Policies

  • admins
  • estudiante relacionado

Response 200

{ // grouped by {period->year}{period->numer}{semester->number}
  "202021": [ // CourseSections
    {
      "id": 10,
      "final_delivery": true,
      "final_delivery_value_percent": 30,
      "final_delivery_merged_sections": false,
      "course_id": 1,
      "section_id": 2,
      "teacher_id": null,
      "period_id": 1,
      "specialization_id": 1,
      "semester_id": 1,
      "created_at": "2020-08-19T00:47:17.000000Z",
      "updated_at": "2020-08-19T00:47:17.000000Z",
      "pivot": { // CourseSectionStudent
        "student_id": 1,
        "course_section_id": 10,
        "created_at": "2020-08-19T03:28:39.000000Z",
        "updated_at": "2020-08-20T22:37:32.000000Z",
        "first_cut_note": 16,
        "second_cut_note": 17,
        "final_delivery_note": null,
        "overwritten_final_note": null,
        "cut_average_note": 16.5,
        "cut_weight_note": null,
        "final_delivery_weight_note": null,
        "final_note": 16.5
      },
      "period": {
        "id": 1,
        "year": 2020,
        "number": 2
      },
      "semester": {
        "id": 1,
        "number": 1
      },
      "course": {
        // Course
      },
      "section": {
        // Section
      }
    }
  ]
}

Cursos del proximo semestre

Lista los cursos del proximo semestre del estudiante.

Route GET /students/{id}/courses/next-semester

Policies

  • admins
  • estudiante relacionado

Request Body

{
  // Solo requerido si se esta pasando de basico 2 a specializad 3 (semestres)
  "specialization_id": "nullable|integer|exists"
}

Response 200

// Semester + Courses

Aprueba el actual semestre

Route GET /students/{id}/approves-current-semester

Policies

  • admins
  • estudiante relacionado

Response 200

{
  "current_period": {
    // Period
  },
  "current_specialization": {
    // Specialization
  },
  "current_semester": {
    // Semester
  },
  "passed": true,
  "is_basic": true,
  "message": "", // for basic if failed
//  "message": "basic_avg_lt_approval_minimum_avg", // for basic if failed
//  "message": "student_has_failed_courses", // for specialization if failed
  "details": [] // extra data to handle better the response
}

Inasistencias

Inasistencias de un estudiante Update Pendiente

Route GET /students/{id}/absences

Policies

  • admins
  • coordinador
  • estudiante relacionado

Filters extends QueryFilters

Filter Description
period=id Por periodo (si no se especifica por defecto se utiliza el habilitado actual)
lesson=id Por clase
course=id Por materia
section=id Por sección
by_delay Por los que sean por retraso
by_attendance Por los que sean por asistencia

Response 200

[
  {
    // Absence
  }
]

Reportes

Notas de materias por periodo

Reporte de notas de las MateriaSeccion de un periodo, se debe especificar un corte

Route GET /students/{id}/reports/courses-notes

Policies

  • admins
  • coordinador
  • profesor
  • estudiante relacionado

Request Body (o por donde sea)

{
  "period_id": "integer|exists", // Por defecto el actual
  "cut": "integer|in:1,2"        // Por defecto 1
}

Notas finales de materias por periodo

Reporte de notas finales de las MateriaSeccion de un periodo, con promedio de materias

Route GET /students/{id}/reports/courses-final-notes

Policies

Igual al anterior

Request Body (o por donde sea)

{
  "period_id": "integer|exists" // Por defecto el actual
}

Notas de materias con historico de clases evaluadas

Reporte de notas finales de las MateriaSeccion de un periodo, con historico de clases evaluadas

Route GET /students/{id}/reports/courses/lessons-notes-history

Policies

Igual al anterior

Request Body (o por donde sea)

{
  "period_id": "integer|exists" // Por defecto el actual
}

Historico de notas

Reporte de notas generales de todos los periodos del estudiante, con promedio general

Route GET /students/{id}/reports/general-notes-history

Policies

Igual al anterior


Ficha de Estudiante

Reporte de fecha de estudiante

Route GET /students/{id}/reports/profile-info

Policies

Igual al anterior