diff --git a/db/StoredProcedures.sql b/db/StoredProcedures.sql index d89f60957ef79bee4fac85d477e02474e6b412ef..eaaadbc164fe5b3f79a7041e336a37ef34f0f8fe 100644 --- a/db/StoredProcedures.sql +++ b/db/StoredProcedures.sql @@ -1810,7 +1810,7 @@ BEGIN teachers.FirstName AS 'First', teachers.SecondName AS 'Second', GetRateForDisc(StudentID, disciplines.ID ) AS 'Rate', - GetMaxRateForDisc(StudentID, disciplines.ID ) AS 'MaxCurrentRate', + GetMaxRateForDisc(disciplines.ID ) AS 'MaxCurrentRate', InternalIsMapCreated(disciplines.ID) AS 'isMapCreated', rating_table.Rate AS 'ExamRate' FROM `disciplines` @@ -1819,7 +1819,7 @@ BEGIN LEFT JOIN `modules` ON disciplines.ID = modules.DisciplineID AND modules.Type = 2 LEFT JOIN `submodules` ON modules.ID = submodules.ModuleID - LEFT JOIN `rating_table` ON submodules.ID = rating_table.SubModuleID AND + LEFT JOIN `rating_table` ON submodules.ID = rating_table.SubmoduleID AND rating_table.StudentID = StudentID WHERE GetCurSemesterID() = disciplines.SemesterID AND InternalIsStudentAttached(StudentID, disciplines.ID) @@ -1847,7 +1847,7 @@ BEGIN FROM `submodules` INNER JOIN `modules` ON submodules.ModuleID = modules.ID AND DisciplineID = modules.DisciplineID - LEFT JOIN `rating_table` ON submodules.ID = rating_table.SubModuleID AND + LEFT JOIN `rating_table` ON submodules.ID = rating_table.SubmoduleID AND StudentID = rating_table.StudentID ORDER BY modules.OrderNum ASC, submodules.OrderNum ASC; @@ -3240,17 +3240,15 @@ END // DROP FUNCTION IF EXISTS GetMaxRateForDisc// -CREATE FUNCTION `GetMaxRateForDisc` ( `StudentID` INT, - `DisciplineID` INT +CREATE FUNCTION `GetMaxRateForDisc` ( `DisciplineID` INT ) RETURNS int(11) NO SQL BEGIN RETURN ( SELECT SUM(submodules.MaxRate) - FROM `rating_table` - INNER JOIN `submodules` ON rating_table.SubmoduleID = submodules.ID - INNER JOIN `modules` ON submodules.ModuleID = modules.ID AND - DisciplineID = modules.DisciplineID - WHERE rating_table.StudentID = StudentID + FROM `modules` + LEFT JOIN `submodules` ON submodules.ModuleID = modules.ID + WHERE modules.DisciplineID = DisciplineID AND + submodules.isUsed != 0 LIMIT 1 ); END // @@ -3266,7 +3264,7 @@ CREATE FUNCTION `SetStudentRate`( `TeacherID` INT, NO SQL BEGIN DECLARE checker, DisciplineID, groupID, rateID INT; - DECLARE isLocked tinyint; + DECLARE isLocked, isUsed tinyint; SET groupID = -1; SELECT students.StudyGroupID @@ -3280,8 +3278,8 @@ BEGIN SET isLocked = 0; SET DisciplineID = -1; - SELECT modules.DisciplineID, disciplines.isLocked, rating_table.StudentID - INTO DisciplineID, isLocked, rateID + SELECT modules.DisciplineID, disciplines.isLocked, rating_table.ID, submodules.isUsed + INTO DisciplineID, isLocked, rateID, isUsed FROM `submodules` INNER JOIN `modules` ON submodules.ModuleID = modules.ID INNER JOIN `disciplines` ON modules.DisciplineID = disciplines.ID @@ -3292,7 +3290,7 @@ BEGIN LEFT JOIN `disciplines_students` ON disciplines.ID = disciplines_students.DisciplineID AND StudentID = disciplines_students.StudentID AND 1 = disciplines_students.Type - LEFT JOIN `rating_table` ON SubModuleID = rating_table.SubModuleID AND + LEFT JOIN `rating_table` ON SubModuleID = rating_table.SubmoduleID AND StudentID = rating_table.StudentID WHERE submodules.ID = SubModuleID AND ( disciplines_students.ID IS NOT NULL OR @@ -3337,6 +3335,13 @@ BEGIN rating_table.Date ) VALUES ( StudentID, TeacherID, SubmoduleID, Rate, CURDATE() ); + + IF NOT isUsed THEN + UPDATE `submodules` + SET submodules.isUsed = 1 + WHERE submodules.ID = SubModuleID + LIMIT 1; + END IF; END IF; RETURN 0; END // diff --git a/db/fix.sql b/db/fix.sql index e6e9c4ee054a090ee7f5195efaa6e09b88d55bdb..bf157872da9283eee97f406ceead280f7cbaae55 100644 --- a/db/fix.sql +++ b/db/fix.sql @@ -16,71 +16,19 @@ ALTER TABLE `recovery_tokens` ADD CONSTRAINT `recovery_tokens_ibfk_1` FOREIGN KEY (`AccountID`) REFERENCES `accounts` (`ID`)// - DROP FUNCTION IF EXISTS CreateRecoveryToken// -CREATE FUNCTION `CreateRecoveryToken` ( `AccountID` INT, - `Token` VARCHAR(100) charset utf8 - ) RETURNS int(11) - NO SQL -BEGIN - DECLARE checker INT; - SET checker = -1; - SELECT recovery_tokens.ID - INTO checker - FROM `recovery_tokens` - WHERE recovery_tokens.Token = Token - LIMIT 1; - IF checker <= 0 THEN - RETURN -1; - END IF; - INSERT INTO `recovery_tokens` - (recovery_tokens.AccountID, recovery_tokens.Token ) - VALUES (AccountID, Token); - RETURN LAST_INSERT_ID(); -END// - - -DROP FUNCTION IF EXISTS UseRecoveryToken// -CREATE FUNCTION `UseRecoveryToken` ( `Token` VARCHAR(100) charset utf8 - ) RETURNS int(11) - NO SQL -BEGIN - DECLARE checker INT; - - SET checker = -1; - SELECT recovery_tokens.ID - INTO checker - FROM `recovery_tokens` - WHERE recovery_tokens.Token = Token - LIMIT 1; - IF checker <= 0 THEN - RETURN -1; - END IF; - - UPDATE `recovery_tokens` - SET recovery_tokens.isUsed = 1 - WHERE recovery_tokens.Token = Token - LIMIT 1; -END// - - - -DROP PROCEDURE IF EXISTS GetRecoveryInfoByToken// -CREATE PROCEDURE `GetRecoveryInfoByToken` ( IN `Token` VARCHAR(100) charset utf8 - ) - NO SQL -BEGIN - SELECT recovery_tokens.ID, - recovery_tokens.AccountID, - recovery_tokens.Date, - recovery_tokens.Token, - recovery_tokens.isUsed - FROM `recovery_tokens` - WHERE recovery_tokens.Token = Token - LIMIT 1; -END // +ALTER TABLE `submodules` +ADD `isUsed` tinyint(1) NOT NULL DEFAULT '0'// + +UPDATE `submodules` +SET submodules.isUsed = 1 +WHERE submodules.ID IN + ( + SELECT DISTINCT rating_table.SubmoduleID + FROM `rating_table` + )// DELIMITER ; \ No newline at end of file