Skip to content
Snippets Groups Projects
FinalReport.php 5.47 KiB
Newer Older
class Controller_Api_V0_FinalReport extends Controller_Handler_Api
{

    /**
     * @api {get} api/v0/final-report Get final form data for export into 1C
     * @apiName Get final report
     * @apiGroup Final report
     * @apiVersion 0.1.0
     * @apiParam {String} token Api key
     * @apiParam {Int} year Год (четырехзначное число)
     * @apiParam {Int} num Номер семестра (1-2)
     * @apiParam {String} plan Код справочника из 1С:Университет соответствующий учебному плану
     * @apiParam {String} discipline Код справочника из 1С:Университет соответствующий учебной дисциплине
     * @apiParam {Int} groupnum Номер группы
     * @apiParam {Int} gradenum Id курса (gradeID)
     * @apiParam {Int} study_form Номер формы обучения (1-3)
     * @apiParam {Int} faculty Id факультета (facultyID)
     * @apiDescription This method returns all grades for particular student group,
     *  study plan, discipline, semester, study form and faculty.
     * @apiExample {curl} Example usage:
     * curl -i http://grade/~dev_rating/api/v0/final-report?token=osw839hfgh9a23hgfh92hasff232f2oasf&year=2018&num=1&plan=000130973&discipline=000026162&groupnum=1&gradenum=6&study_form=1&faculty=1
     * @apiSuccessExample {json} Success-Response:
     * HTTP/1.1 200 OK
     * {
     *      "response": {
     *            "000130973": {
     *                  "000026162": {
     *                       "type": "exam",
     *                       "students": {
     *                            "ММ-18-0263": {
     *                               "semester": 60,
     *                                  "exam": [
     *                                   40,
     *                                   null,
     *                                   null
     *                                 ],
     *                               "extra": [
     *                                   null,
     *                                   null
     *                                   ]
     *                            },
     *                            "ММ-18-0265": {
     *                                  "semester": 56,
     *                                  "exam": [
     *                                      39,
     *                                      null,
     *                                      null
     *                                    ],
     *                                  "extra": [
     *                                     null,
     *                                     null
     *                                   ],
     *                                   "bonus": [null]
     *                            }
     *                       }
     *                  }
     *            }
     *      }
     * }
     *
     */
    public function action_get_index()
    {

        try {
            // Получаем год и номер семестра из query запроса
            $year = $this->request->query('year');
            $num = $this->request->query('num');
            $plan = $this->request->query('plan');
            $discipline = $this->request->query('discipline');
            $groupnum = $this->request->query('groupnum');
            $gradenum = $this->request->query('gradenum');
            $groupid = $this->request->query('groupid');
            $faculty = $this->request->query('faculty');
            $study_form = $this->request->query('study_form');
            $emulate = $this->request->query('emulate');
            // Получаем ведомость из БД
            if (isset($discipline) and !isset($groupnum)) {
                $finalReport = Model_FinalReport::getBySemesterYearNumDiscipline($year, $num, $discipline);
            } elseif (!isset($discipline)) {
                $finalReport = Model_FinalReport::getBySemesterYearNumPlan($year, $num, $plan);
                $finalReport = Model_FinalReport::getBySemesterYearNumDisciplineGroup($year, $num, $discipline, $groupnum, $groupid, $gradenum, $faculty, $study_form);
Vladislav Yakovlev's avatar
Vladislav Yakovlev committed
            $response = [];
            /** @var Model_FinalReportItem $row */
            foreach ($finalReport as $row) {
                $response[$row->PlanExternalID][$row->SubjectExternalID]['type'] = $row->ExamType;
                $response[$row->PlanExternalID][$row->SubjectExternalID]['students'][$row->RecordBookExternalID] = [
                    'semester' => $row->SemesterRate,
                    'exam' => [$row->ExamRate, $row->Exam2Rate, $row->Exam3Rate],
                    'extra' => [$row->ExtraRate, $row->Extra2Rate],
                    'bonus' => [$row->BonusRate]
Vladislav Yakovlev's avatar
Vladislav Yakovlev committed
                ];
            if (!isset($emulate) and isset($groupnum)) {
                //$groupID = Model_Group::find($gradenum, $groupnum, $study_form, $faculty);
                //TODO: поменять логи, не записывать id дисциплины
                Model_Logs::logFormExport($this->user->ID, $discipline, $groupid, $this->user["SemesterID"]);
            // TODO: удалить лишние учебные планы от академиков правильным способом!
            array_splice($response, 1);

Vladislav Yakovlev's avatar
Vladislav Yakovlev committed
            return $response;
        } catch (Exception $e) {
            $this->badRequestError($e->getMessage());
        }

Vladislav Yakovlev's avatar
Vladislav Yakovlev committed
        return null;