Periodos (Periods)

Numero de periodos.

Durante un año solo se podrá crear 2 periodos cada uno tendrá su fecha de inicio y de fin asi como también sus fechas de entrega final.

La creation de periodos está limitado por year y number. Durante el año actual solo se podra crear los periodos 2020-1 y 2020-2 debido a esto no se permitirá crear un nuevo periodo existente o con el número 3

Fechas de entrega final por definir?

Se utiliza para indicar los días que el sistema debe esperar para reflejar a los alumnos las notas de las entregas finales, dando tiempo a que todos los jurados registren sus evaluaciones.

También influye en que los profesores no podrán registrar notas llegadas estas fechas.

Habilitación de un periodo

Cuando se crea un nuevo periodo el admin debe seleccionar si el periodo esta habilitado o no, cuando un periodo es habilitado, este que todos los periodos anteriores esten deshabilitados.


Routes

Method URI Action
GET /periods index
GET /periods/{id} show
POST /periods store
PATCH /periods/{id} update
DELETE /periods/{id} delete
PATCH /periods/{id}/open-inscriptions update inscriptions
GET /periods/{id}/pensums get relation
PUT /periods/{id}/pensums/{pensum} attach

Model Attributes

{
  "id": 1,

  "year": 2020, // unico dependiendo del `number`
  "number": 1, // unico dependiendo del `year`, limitado a `1` y `2`
  "weeks_length": 17,

  "start_date": "2020-09-15",
  "end_date": "2021-02-15",
  "first_half_end_date": "2020-11-15",
  "second_half_end_date": "2021-02-15",

  "approval_minimum_note": 10,
  "high_performance_note": 18,
  "low_performance_note": 12,
  "max_note": 20, // Nota maxima asignable en las clases evaludas y entregas finales
  "approval_minimum_avg": 20, // Promedio de aprobación minimo para especialidad basica 

  "responsible_principal": "Dr. Sylvester Stanton",
  "responsible_vice_principal": "Macie Keeling",
  "responsible_of_study_control": "Miss Alexandrine Beer",
  "responsible_manager": "Ms. Theresa Lesch",
  "responsible_signer": "Prof. Adaline Erdman Sr.",

  "enable": true, // solo puede haber un periodo activo
  "enabled_inscriptions": false,  // si tiene inscripciones de regulares
  "enabled_preregisters": false,  // si tiene pre-registros
  "polls": false,
  "final_delivery": true,  // Si es falso al crear/actualizar los dias se colocan como nulos.
  "final_delivery_days": [ // nullable
    "2020-02-15"
  ],

  "created_at": "2020-03-31 17:46:59",
  "updated_at": "2020-03-31 17:46:59",

  "settings": {            // Configuraciones del periodo
    "schedule_shifts": [   // turnos que deberian manejarse al registrar un estudiante
      "morning",
      "afternoon",
      "mixed"
    ]
  },
 "staff": {                               // Configuracion de personal
    "director": "Nombre",                 // Director
    "vice_director": "Nombre",            // Sub director
    "executive_director": "Nombre",       // Director executivo
    "administrative_director": "Nombre",  // Director administrativo
    "study_control": "Nombre",            // Responsable de control de estudio
    "reports_signer": "Nombre"           // Firmante de reportes/documentos
  },
  "semester_cost_bs": 12300,     // Format E2 -> returned as 123,00
  "semester_cost_dollar": 12300, // Format E2 -> returned as 123,00
}

Relations

  • Tiene muchas secciones HasMany sections
  • Tiene muchos pensums BelongsToMany pensums

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


Index

Route GET /periods

Policies

  • admin
  • low admin

Filters extends Query Filters

Filter Description
search=string Busca a traves de los atributos responsible_*
number=int Filtra a traves de number, valores permitidos: 1 y 2
year=int Filtra a traves de year. Soporta operadores de busqueda >, <, >=, <= (se debe colocar al inicio del value)
year_number={year}-{number} Filtra a traves del formato 2020-1 correspondiente a año y numero.
enabled=bool Obtiene solo los habilitados
polls=bool Obtiene solo los que soporten encuentas
final_delivery=bool Obtiene solo los que soporten entrega final

Response 200

[
  {
    // Period
  }
]

Store

{info} Cuando se crea un nuevo periodo se buscan los pensums más actualizados por especialidad y se agregan como parte de el

Route POST /periods

Policies

  • admin
  • low admin

Request Body

{
  "year": "required|date_format:Y",
  "number": "required|integer|min:1|max:2",
  "weeks_length": "required|integer|min:0",
  "start_date": "required|date_format:Y-m-d|before:end_date",
  "end_date": "required|date_format:Y-m-d|after:start_date",
  "first_half_end_date": "required|date_format:Y-m-d|before:second_half_end_date",
  "second_half_end_date": "required|date_format:Y-m-d|after:first_half_end_date",
  "approval_minimum_note": "required|integer|min:0",
  "high_performance_note": "required|integer|min:0|gt:low_performance_note",
  "low_performance_note": "required|integer|min:0|lt:high_performance_note",
  "max_note": "required|integer|min:1|max:100",
  "polls": "required|boolean",
  "final_delivery": "required|boolean",
  "final_delivery_days": "array|min:1|date_format:Y-m-d", // only required if final_delivery === true
  "enabled_preregisters": "boolean", // optional
  "enabled_inscriptions": "boolean",  // optional

  "settings.schedule_shifts": "array",
  "settings.schedule_shifts.*": "string|in:morning,afternoon,mixed",

  "staff.director": "required|string",
  "staff.vice_director": "required|string",
  "staff.executive_director": "required|string",
  "staff.administrative_director": "required|string",
  "staff.study_control": "required|string",
  "staff.reports_signer": "required|string",

  "semester_cost_bs": "nullable|integer|min:100",     // Format E2 
  "semester_cost_dollar": "nullable|integer|min:100", // Format E2
}

Response 201

{
  // Model Attributes
}

Update

Casi todos los atributos son actualizables mientras el periodo aun no este activo, exceptuando year y number por ser una combinación única.


Si se habilita un periodo, se deshabilitaran todos los demas (por si a caso).

{info} No actualiza enabled_inscriptions ni enabled_preregisters

Route PATCH /periods/{id}

Policies

  • admin
  • low admin

Request Body

{
  "weeks_length": "integer|min:0",
  "start_date": "date_format:Y-m-d|before:end_date",
  "end_date": "date_format:Y-m-d|after:start_date",
  "first_half_end_date": "date_format:Y-m-d|before:second_half_end_date",
  "second_half_end_date": "date_format:Y-m-d|after:first_half_end_date",
  "approval_minimum_note": "integer|min:0",
  "high_performance_note": "integer|min:0|gt:low_performance_note",
  "low_performance_note": "integer|min:0|lt:high_performance_note",
  "max_note": "integer|min:1|max:100",
  "enabled": "boolean",
  "polls": "boolean",
  "final_delivery": "boolean",
  "final_delivery_days": "array|min:1|date_format:Y-m-d", // only required if final_delivery === true and current days are empty

  "settings.schedule_shifts": "array",
  "settings.schedule_shifts.*": "string|in:morning,afternoon,mixed",

  "staff.director": "string",
  "staff.vice_director": "string",
  "staff.executive_director": "string",
  "staff.administrative_director": "string",
  "staff.study_control": "string",
  "staff.reports_signer": "string",

  "semester_cost_bs": "nullable|integer|min:100",     // Format E2 
  "semester_cost_dollar": "nullable|integer|min:100", // Format E2
}

Response 200

{
  // Model Attributes
}

Delete

Un periodo como tal no deberia de poder eliminarse, pero, se da la opcion de eliminar si:

  • El periodo no esta habilitado.
  • El periodo no tiene secciones

Route DELETE /periods/{id}

Policies

  • admin
  • low admin

Response 204 No Content


Abrir o Cerrar Inscripciones

{primary} Solo se permite al periodo habilitado y al periodo proximo al habilitado actualizar estos atributos

Route PATCH /periods/{id}/open-inscriptions

Policies

  • admin
  • low admin

Request Body

{
  "enabled_inscriptions": "boolean", // abre o cierra las inscripciones de los regulares
  "enabled_preregisters": "boolean" // abre o cierra los preregistros de primer semestre
}

Response 200

{
  // Model Attributes
}

Listar Pensums

Route GET /periods/{id}/pensums

Policies

  • admin
  • low admin

Response 200

[
  // pensums
]

Obtener el Periodo Habilitado

Util para obtener el periodo actual del instituto

Route GET /periods/enabled

Policies

  • public

Response 200

{
  // Period
}

Relacionar un pensum

El pensum debe

  1. No estar ya relacionado
  2. Estar versionado (tener version)
  3. Tener semestres
  4. Los semestres deben tener secciones y materias

Route PUT /periods/{id}/pensums/{pensum}

Policies

  • admin