Pensums


Routes

Method URI Action
GET /pensums index
GET /pensums/{id} show
GET /pensums/{id}/pdf download
POST /pensums store
PATCH /pensums/{id} update
DELETE /pensums/{id} delete
GET /pensums/{id}/semesters index
GET /pensums/{id}/courses index

Model Attributes

{
 "id": 1,
 "name": "Nombre del pensum",
 "description": "Descripción del pensum",
 "version": 1, // null by default see Pensum@update
 "credits": null, // (int) esto se se actualiza cuando se le agrega o remueve materias a un semestre de este pensum
 "specialization_id": 1,
 "created_at": "2020-03-10 13:28:15",
 "updated_at": "2020-03-10 13:28:15"
}

Relations

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


Index

Route GET /pensums

Policies

  • admin

Filters extends Query Filters

Filter Description
search=string Busca a traves de name y description
version=int Filtra a traves de version
specialization=id Obtiene los pensums de una especialidad en especifica
period=id Obtiene los pensums que esten asociados a un periodo en especifico
semester_number=int Filtra a traves de number de la relación semesters puede combinarse con with=semesters

Response 200

[
  {
    // Pensum
  }
]

Store

{info} Por defecto el pensum se crea sin una version

Route POST /pensums

Policies

  • admin

Request Body

{primary} Cuando se envia semestres en el request al pensum se le calcula los creditos de una vez

{
  "name": "required|string",
  "description": "required|string",
  "specialization_id":"required|integer|exists",

  // Si se quiere crear semestres y asignarle de una vez materias se debe incluir lo siguiente
  // Si "semester" esta presente es requerido que "number" y "courses_ids" esten presentes tambien

  // Esto creara los semestres y a para cada semestre le asignara las materias (courses) de "courses_ids"
  "semesters": [ // is optional
    { 
      "number": 1,          // int
      "courses_ids": [ 1 ]  // array of ints
    }
  ]
}

Response 201

{
  // Pensum
}

Update

Consideraciones

  • finished no es un atributo de pensum, es utilizado para marcar si este pensum esta listo para ser utilizado. Si se marca como finalizado el sistema le asignara una version por especialidad.
  • La version se determina solo la primera vez. Un pensum sin version se considera que no esta listo para usarse.
  • No se puede asociar un pensum sin version a un periodo.
  • Al enviar finished: false se colocara la version como null de nuevo

{warning} No se puede desmarcar como completado si ya esta asociado a algun periodo.

Route PATCH /pensums/{id}

Policies

  • admin

Request Body

{
  "name": "string",
  "description": "string",
  "finished": "boolean"
}

Response 200

{
  // Pensum
}

Delete

  • No se puede borrar si pensum esta asociado a algun periodo
  • No se puede borrar si los semestres de un pensum esta asociado a alguna sección

{info} Al eliminarse un pensum eliminara todos sus semestres

Route DELETE /pensums/{id}

Policies

  • admin

Response 204 No Content


Listar Semestres

Route GET /pensums/{id}/semesters

Policies

  • admin

Response 200

[
  // Semesters
]

Listar materias

Route GET /pensums/{id}/courses

Policies

  • admin

Request Body

Si se envia period_id se buscara si el pensum tiene un historico de materias creados, si se encuentra se retornara ese, si no, se retornara el por defecto, el estado actual de la base de datos

{
  "period_id": "integer|exists"
}

Response 200

[
  {
    "semester": {
      "id": 1,
      "number": 3,
      "code": "Semester - 1",
      "created_at": "2020-07-09 20:20:09",
      "updated_at": "2020-07-09 20:20:09",
      "pensum_id": 1,
      "specialization_id": 1,
      "courses": [
        {
          "id": 1,
          "code": "MATERIA - 1",
          "title": "Titulo de mi Materia",
          "scheduled_content": "Contenido Programatico",
          "scheduled_content_resource": null,
          "credits": 10,
          "hours": 20,
          "calculate_avg": false,
          "elective": false,
          "enabled": true,
          "final_delivery": false,
          "final_delivery_value_percent": null,
          "final_delivery_merged_sections": false,
          "created_at": "2020-07-09 20:20:42",
          "updated_at": "2020-07-09 20:20:42",
          "pivot": {
            "semester_id": 1,
            "course_id": 1
          }
        }
      ]
    }
  }
]

Descargar PDF

Route GET /pensums/{id}/pdf

Policies

  • admin

Request Body

Como el pensum puede estar en multiple periodos se requiere que se envie de que periodo se quiere ver

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

Response 200