Skip to content
Snippets Groups Projects
Commit f0496e5a authored by Anton Bagliy's avatar Anton Bagliy
Browse files

ADD: discipline active/inactive switches in dean discipline list and filters #487

parent 0d07033b
Branches
No related merge requests found
ALTER TABLE disciplines
ADD COLUMN isinactive bool;
ALTER TABLE disciplines
ALTER COLUMN isinactive set default FALSE;
CREATE OR REPLACE FUNCTION public.discipline_setinactive(pdisciplneid integer)
RETURNS integer
LANGUAGE plpgsql
AS $function$
BEGIN
UPDATE disciplines SET isinactive=TRUE
WHERE disciplines.id = pdisciplneid;
RETURN 0;
EXCEPTION
when others
then RETURN -1;
end
$function$;
CREATE OR REPLACE FUNCTION public.discipline_setactive(pdisciplneid integer)
RETURNS integer
LANGUAGE plpgsql
AS $function$
BEGIN
UPDATE disciplines SET isinactive=FALSE
WHERE disciplines.id = pdisciplneid;
RETURN 0;
EXCEPTION
when others
then RETURN -1;
end
$function$;
drop view if exists public.view_disciplines_stat;
DROP FUNCTION IF EXISTS public.disciplinecollection_get(psemesterid integer, pfacultyid integer);
CREATE OR REPLACE FUNCTION public.disciplinecollection_get(psemesterid integer, pfacultyid integer)
RETURNS TABLE("ID" integer, "SubjectName" character varying, "AuthorID" integer, "State" text, "IsInactive" bool)
LANGUAGE plpgsql
AS $function$
-- select public.discipline_getwithfullness(
-- :psemesterid, -- put the psemesterid parameter value instead of 'psemesterid' (int4)
-- :pfacultyid -- put the pfacultyid parameter value instead of 'pfacultyid' (int4)
-- );
BEGIN
return query
SELECT view_disciplines.DisciplineID AS ID,
view_disciplines.SubjectName As SubjectName,
view_disciplines.AuthorID As AuthorID,
CASE
WHEN (view_disciplines.MaxRate < 100 AND view_disciplines.IsLocked = 0) THEN 'no_map'
WHEN (view_disciplines.MaxRate = 100 AND view_disciplines.IsLocked = 0) THEN 'no_rates'
WHEN (view_disciplines.MaxRate = 100 AND view_disciplines.IsLocked = 1) THEN 'in_progress'
ELSE 'other'
END AS State,
disciplines.IsInactive as IsInactive
FROM view_disciplines
JOIN disciplines ON view_disciplines.disciplineid = disciplines.id
WHERE view_disciplines.SemesterID = pSemesterID AND
view_disciplines.FacultyID = pFacultyID;
END
$function$;
CREATE OR REPLACE VIEW public.view_disciplines_stat
AS SELECT ff.name,
( SELECT count(*) AS count
FROM disciplinecollection_get(11, ff.id) disciplinecollection_get("ID", "SubjectName", "AuthorID", "State")) AS "Всего дисциплин",
( SELECT count(*) AS count
FROM disciplinecollection_get(11, ff.id) t("ID", "SubjectName", "AuthorID", "State", "IsInactive")
WHERE t."State" = 'no_map'::text AND t."IsInactive" = false) AS "Без УКД"
FROM faculties ff;
\ No newline at end of file
......@@ -63,4 +63,34 @@ $(() => {
}
});
$('.disciplineInactiveSwitch').click(function () {
let idString = $(this).attr('id');
let disciplineID = parseInt(idString.substr(18, idString.length));
let isInactive = $(this).hasClass('disciplineInactive')
let path = 'handler/discipline/';
if (isInactive) {
path = path + 'setActive';
} else {
path = path + 'setInactive';
}
$.post(g_URLdir + path, {id: disciplineID}).done(_ => {
Popup.success('Изменения сохранены');
if (isInactive) {
$(this).removeClass('disciplineInactive');
$(this).addClass('disciplineActive');
$(this).text('включена');
} else {
$(this).removeClass('disciplineActive');
$(this).addClass('disciplineInactive');
$(this).text('выключена');
}
}).fail(_ => {
Popup.error('Произошла ошибка');
}).always(_ => {
});
});
});
\ No newline at end of file
......@@ -24,6 +24,14 @@
background-color: @ColorBaseWhite;
white-space: nowrap;
.disciplineInactive {
color: #6b829e;
}
.disciplineInactive {
color: #00b33c;
}
tr {
&:hover,
&.focus {
......
......@@ -146,6 +146,20 @@ class Controller_Handler_Discipline extends Controller_Handler_Api
return json_encode($code);
}
public function action_setInactive() {
$discipline = $this->loadDisciplineAndAuthorCheck();
$code = $discipline->setInactive();
$code = $code.'';
return json_encode($code);
}
public function action_setActive() {
$discipline = $this->loadDisciplineAndAuthorCheck();
$code = $discipline->setActive();
$code = $code.'';
return json_encode($code);
}
public function action_getSimilarDisciplines() {
$discipline = $this->loadDisciplineAndAuthorCheck();
$teacherID = (int) $this->user->TeacherID;
......
......@@ -31,10 +31,12 @@ class Controller_Office_Disciplines extends Controller_Environment_Office {
$teachers[$discipline['ID']] = Model_Teacher::with($discipline['AuthorID']);
}
$inMainList = $state === null;
$this->twig->set_filename(self::OFFICE . 'disciplines/index')
->set([
'Disciplines' => $disciplines,
'Teachers' => $teachers
'Teachers' => $teachers,
'InMainList' => $inMainList
]);
}
......
......@@ -294,6 +294,24 @@ class Model_Discipline extends Model_Container
return $res;
}
public function setInactive() {
$sql = 'SELECT * FROM Discipline_setInactive(:discipline) as "Num"';
$res = DB::query(Database::SELECT, $sql)
->parameters([
':discipline' => $this->ID
])->execute()->get("Num");
return $res;
}
public function setActive() {
$sql = 'SELECT * FROM Discipline_setActive(:discipline) as "Num"';
$res = DB::query(Database::SELECT, $sql)
->parameters([
':discipline' => $this->ID
])->execute()->get("Num");
return $res;
}
public function copyDisciplineMapFrom($disciplineToID, $disciplineFromID)
{
$sql = 'SELECT * FROM copy_map(:from, :to) as "Num"';
......
......@@ -17,7 +17,11 @@ class Model_Disciplines extends Model_Collection
// filtering
return array_filter($this->data,
function($record) use ($state) {
return $record['State'] == $state;
if ($state === null) {
return $record['State'] == $state;
} else {
return $record['State'] == $state && $record['IsInactive'] == false;
}
});
}
......
......@@ -23,6 +23,9 @@
<td style="width: 70px;"></td>
<td>Название</td>
<td style="width: 250px;">Автор</td>
{% if InMainList %}
<td style="width: 100px;">Сделать неактивной</td>
{% endif %}
</tr>
</thead>
<tbody>
......@@ -31,6 +34,19 @@
<td style="text-align: center;">{{ discipline.ID }}</td>
<td style="white-space: normal;"><a href="{{ URL.site("discipline/") }}/{{ discipline.ID }}/structure">{{ discipline.SubjectName }}</a></td>
<td><a href="{{ URL.site("office/teachers/profile/") }}/{{ Teachers[discipline.ID].ID }}">{{ Text.abbreviateName(Teachers[discipline.ID]) }}</a></td>
{% if InMainList %}
<td>
{% if discipline.IsInactive %}
<a id="discipline_switch_{{ discipline.ID }}" class="disciplineInactiveSwitch disciplineInactive" href="#">
выключена
</a>
{% else %}
<a id="discipline_switch_{{ discipline.ID }}" class="disciplineInactiveSwitch disciplineActive" href="#">
включена
</a>
{% endif %}
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
......
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