Materias (Courses)


Routes

Method URI Action
GET /courses index
GET /courses/{id} show
POST /courses store
PATCH /courses/{id} update
DELETE /courses/{id} delete
GET /courses/{id}/semestres index
GET /periods/{id}/courses-by-specialization custom index

Model

{
  "id": 1,
  "code": "Código de Curso",
  "title": "Titulo de Curso",
  "credits": 10,                          // Creditos del curso
  "hours": 20,                            // Horas de duracion del curso
  "scheduled_content": "Contenido programático de la materia en forma de descripción",
  "scheduled_content_resource": null,     // Contenido programatico (archivo)
  "analytic_content_resource": null,      // Contenido analicito (archivo)
  "synoptic_content_resource": null,      // Contenido sinoptico (archivo)
  "calculate_avg": false,                 // Si calcula promedio
  "elective": false,                      // si es de electiva o no
  "enabled": true,
  "final_delivery": false,                 // Si tiene entrega final
  "final_delivery_value_percent": null,    // (int) Si tiene entrega final, cuanto de la nota en porcentaje equivale
  "final_delivery_merged_sections": false, // Si soporta que dos secciones tengan una entrega final junta el mismo dia/hora
  "updated_at": "2020-03-06 18:31:36",
  "created_at": "2020-03-06 18:31:36"
}

Relations

  • Pertenece a muchos semestres BelongsToMany semesters
  • Pertenece a muchas secciones BelongsToMany sections
  • Pertenece muchos profesores asignados a traves de materia_seccionBelongsToMany teachers

Index

Route GET /courses

Policies

  • admin

Filters extends QueryFilters

Filter Description
search=string Busca a traves de code, title y scheduled_content
credits=int Por los creditos. Soporta operadores de busqueda >, <, >=, <= (se debe colocar al inicio del value)
hours=int Por las horas. Soporta operadores de busqueda >, <, >=, <= (se debe colocar al inicio del value)
enabled=bool Obtiene las habilitadas
elective=bool Obtiene las que sean de electivas
final_delivery=bool Obtiene las que soporten entregas finales

Store

Route POST /courses

Policies

  • admin

Request Body

{
  "code": "required|string",
  "title": "required|string",
  "scheduled_content": "required|string",
  "scheduled_content_resource": "nullable|file", // optional
  "analytic_content_resource": "nullable|file", // optional
  "synoptic_content_resource": "nullable|file", // optional
  "credits": "required|integer|min:0",
  "hours": "required|integer|min:0",
  "calculate_avg": "boolean",           // default false
  "enabled": "boolean",                 // default false
  "elective": "boolean",                // default false
  "final_delivery": "boolean",          // default false 
  "final_delivery_value_percent": "required|integer|min:0|max:100" // Solo requerido cuando final_delivery es true
  "final_delivery_merged_sections": "required|boolean"             // Solo requerido cuando final_delivery es true
}

Update

Aún se necesita definir que puede ser actualizado y sus limites

Route PATCH /courses/{id}

Policies

  • admin

Request Body

{
  "code": "required|string",
  "title": "required|string",
  "scheduled_content": "required|string",
  "credits": "required|integer|min:0",
  "hours": "required|integer|min:0",
  "elective": "boolean", 
  "enabled": "boolean",
  "final_delivery": "boolean",

  // Solo requerido cuando `final_delivery` es true
  // Toma por prioridad el `final_delivery` enviado en el request
  // pero si no se encuentra, utilizara el valor
  // que tenga la materia (course) en ese momento  
  "final_delivery_value_percent": "integer|min:0|max:100", 
  "final_delivery_merged_sections": "boolean",

  // Solo si el request POST (multipart) y se envia "_method": "PATCH"
  "scheduled_content_resource": "nullable|file",
  "analytic_content_resource": "nullable|file", 
  "synoptic_content_resource": "nullable|file"
}

Delete

Route DELETE /courses/{id}

Policies

  • admin

Listar Semestres

Route GET /courses/{id}/semesters

Policies

  • admin

Obtener materias desde un periodo

Obtiene las materias de todos los semestres de los pensums asociados al periodo, siempre y cuando el pensums tenga semestres y sus semestres tengan materias. Y pensum tenga version

Viene agrupado por especialidad

Route GET /periods/{id}/courses-by-specialization

Policies

  • admin

Response 200

{
  "specializations": [
    {
      "id": 1,
      "code": "dise\u00f1o_industrial-253",
      "title": "Dise\u00f1o Industrial",
      "color": "\#bf60c6",
      "text_color": "\#0eb70e",
      "enabled": true,
      "created_at": "2020-04-29 19:13:25",
      "updated_at": "2020-04-29 19:13:25",
      "courses": [
        {
          "id": 1,
          "code": "MATERIA 1",
          "title": "title",
          "scheduled_content": "Test description",
          "scheduled_content_resource": null,
          "credits": 10,
          "hours": 20,
          "calculate_avg": false,
          "elective": false,
          "enabled": true,
          "final_delivery": false,
          "final_delivery_value_percent": null,
          "created_at": "2020-04-29 19:13:25",
          "updated_at": "2020-04-29 19:13:25",
          "pivot": {
            "semester_id": "1",
            "course_id": "1"
          }
        }
      ]
    }
  ]
}