Skip to content
Snippets Groups Projects
Commit db7549d6 authored by Роман Штейнберг's avatar Роман Штейнберг
Browse files

ADD: update discipline while synchronization

parent 2562b9a2
Branches
Tags
No related merge requests found
...@@ -991,6 +991,48 @@ READS SQL DATA ...@@ -991,6 +991,48 @@ READS SQL DATA
RETURN pID; RETURN pID;
END // END //
-- Обновление данных дисциплины при синхронизации
DROP FUNCTION IF EXISTS Discipline_Update//
CREATE FUNCTION Discipline_Update (
pDisciplineID INT,
pTeacherID INT,
pGradeID INT,
pSubjectID INT,
pExamType enum('exam', 'credit', 'grading_credit'),
pLectureCount INT,
pPracticeCount INT,
pLabCount INT,
pFacultyID INT,
pSemesterID INT,
pSubtype enum('scientific_coursework', 'disciplinary_coursework')
) RETURNS int(11)
NO SQL
BEGIN
DECLARE vDisciplineID INT DEFAULT -1;
DECLARE EXIT HANDLER FOR SQLEXCEPTION RETURN -1;
IF pSubtype IS NOT NULL THEN
SET pSubjectID = 346;
END IF;
# create discipline
UPDATE `disciplines`
SET disciplines.AuthorID = COALESCE(pTeacherID, disciplines.AuthorID),
disciplines.GradeID = COALESCE(pGradeID, disciplines.GradeID),
disciplines.SubjectID = COALESCE(pSubjectID, disciplines.SubjectID),
disciplines.ExamType = COALESCE(pExamType, disciplines.ExamType),
disciplines.LectureCount = COALESCE(pLectureCount, disciplines.LectureCount),
disciplines.PracticeCount = COALESCE(pPracticeCount, disciplines.PracticeCount),
disciplines.LabCount = COALESCE(pLabCount, disciplines.LabCount),
disciplines.SemesterID = COALESCE(pSemesterID, disciplines.SemesterID),
disciplines.FacultyID = COALESCE(pFacultyID, disciplines.FacultyID),
disciplines.Subtype = COALESCE(pSubtype, disciplines.Subtype)
WHERE disciplines.ID = pDisciplineID;
RETURN 0;
END //
DROP FUNCTION IF EXISTS ChangeDisciplineSubjectUnsafe// DROP FUNCTION IF EXISTS ChangeDisciplineSubjectUnsafe//
CREATE FUNCTION ChangeDisciplineSubjectUnsafe ( CREATE FUNCTION ChangeDisciplineSubjectUnsafe (
pDisciplineID INT, pDisciplineID INT,
......
...@@ -800,6 +800,24 @@ BEGIN ...@@ -800,6 +800,24 @@ BEGIN
view_disciplines_recordbooks.Type <=> 'attach'; view_disciplines_recordbooks.Type <=> 'attach';
END // END //
DELIMITER //
DROP PROCEDURE IF EXISTS Discipline_Find//
CREATE PROCEDURE Discipline_Find (
IN pFacultyID INT,
IN pSemesterID INT,
IN pSubjectID INT,
IN pExamType enum('exam', 'credit', 'grading_credit')
)
READS SQL DATA
BEGIN
SELECT disciplines.ID
FROM `disciplines`
WHERE disciplines.FacultyID = pFacultyID AND
disciplines.SemesterID = pSemesterID AND
disciplines.SubjectID = pSubjectID AND
disciplines.ExamType = pExamType;
END //
# ------------------------------------------------------------------------------------------- # -------------------------------------------------------------------------------------------
# Label: rating # Label: rating
# ------------------------------------------------------------------------------------------- # -------------------------------------------------------------------------------------------
......
...@@ -69,28 +69,28 @@ class Controller_Api_V0_StudyPlan extends Controller_Handler_Api ...@@ -69,28 +69,28 @@ class Controller_Api_V0_StudyPlan extends Controller_Handler_Api
private function processDisciplines($data, $semesterID, $facultyID) { private function processDisciplines($data, $semesterID, $facultyID) {
$res = []; $res = [];
try { try {
// echo Debug::vars($data->disciplines);
foreach ($data->disciplines as $discipline) { foreach ($data->disciplines as $discipline) {
if ($discipline == null) if ($discipline == null)
continue; continue;
if (isset($discipline->id)) { $disciplineModel = null;
// ToDo: update discipline if (isset($discipline->subjectID)) {
} else { $disciplineModel = Model_Discipline::find($facultyID, $semesterID,
print_r($discipline); $discipline->subjectID, $discipline->type);
}
$plan = Model_Plan::load($data->id); if ($disciplineModel !== null) {
$gradeID = $plan->GradeID; $disciplineModel->update();
$newDiscipline = Model_Discipline::make() } else {
$disciplineModel = Model_Discipline::make()
->author($discipline->teacherIDs[0]) ->author($discipline->teacherIDs[0])
->subject($discipline->SubjectID) ->subject($discipline->subjectID)
->semester($semesterID) ->semester($semesterID)
->type($discipline->type) ->type($discipline->type)
->faculty($facultyID) ->faculty($facultyID)
->grade($gradeID)
->create(); ->create();
$res[] = $newDiscipline->ID;
} }
$res[] = $disciplineModel->ID;
} }
} catch (InvalidArgumentException $e) { } catch (InvalidArgumentException $e) {
$this->badRequestError($this->makeErrorMsg($data, $e->getMessage())); $this->badRequestError($this->makeErrorMsg($data, $e->getMessage()));
...@@ -114,6 +114,7 @@ class Controller_Api_V0_StudyPlan extends Controller_Handler_Api ...@@ -114,6 +114,7 @@ class Controller_Api_V0_StudyPlan extends Controller_Handler_Api
* @apiParam {Array} disciplines * @apiParam {Array} disciplines
*/ */
public function action_put_index() { public function action_put_index() {
$res = [];
try { try {
if ($this->request->query('batch') !== NULL) { if ($this->request->query('batch') !== NULL) {
$data = json_decode($this->request->body()); $data = json_decode($this->request->body());
...@@ -123,23 +124,16 @@ class Controller_Api_V0_StudyPlan extends Controller_Handler_Api ...@@ -123,23 +124,16 @@ class Controller_Api_V0_StudyPlan extends Controller_Handler_Api
$requestInfo = array( $requestInfo = array(
'Year' => $data->year, 'Year' => $data->year,
'SemesterID' => Model_Semesters::find($data->year, $data->semester), 'SemesterID' => (int)Model_Semesters::find($data->year, $data->semester)->ID,
'FacultyID' => Model_Faculties::getIdByExternalID($data->faculty), 'FacultyID' => Model_Faculties::getIdByExternalID($data->faculty),
); );
$res = [];
foreach ($data->plans as $item) { foreach ($data->plans as $item) {
$res[] = $this->processData($item, $requestInfo); $res[] = $this->processData($item, $requestInfo);
if (count($res) > 10) {
echo Debug::vars($res); exit;
}
// return $res;
} }
} else { } else {
throw new InvalidArgumentException('No batch data received!'); throw new InvalidArgumentException('No batch data received!');
// $data = $this->request->query();
// $res[] = $this->processData($data);
} }
} catch (Exception $e) { } catch (Exception $e) {
$this->badRequestError($e->getMessage()); $this->badRequestError($e->getMessage());
......
...@@ -195,4 +195,32 @@ class Model_Discipline extends Model_Container ...@@ -195,4 +195,32 @@ class Model_Discipline extends Model_Container
])->execute(); ])->execute();
} }
public static function find($facultyID, $semesterID, $subjectID, $type) {
$sql = 'CALL `Discipline_Find`(:facultyID, :semesterID, :subjectID, :type)';
$data = DB::query(Database::SELECT, $sql)
->parameters([
':facultyID' => $facultyID,
':semesterID' => $semesterID,
':subjectID' => $subjectID,
':type' => $type,
])->execute();
$cnt = count($data);
if ($cnt > 1) {
throw new Database_Exception('There are '.$cnt.' disciplines were found, but only one was expected!');
}
elseif ($cnt == 1) {
return Model_Discipline::load($data[0]['ID']);
}
return null;
}
public function update() {
$sql = 'SELECT `Discipline_Update` (ID, AuthorID, GradeID, SubjectID, Type, Lectures, Practice,
Labs, FacultyID, SemesterID, Subtype) AS `Success`';
$res = DB::query(Database::SELECT, $sql)
->parameters($this->getRawData($this->ID))
->execute();
return $res['Success'];
}
} }
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment