LMS-2_ReportAPI/reports/applicantlist.pas
Алексей Заблоцкий c7a88f0d6c log+
2023-11-15 14:22:32 +03:00

159 lines
5.5 KiB
ObjectPascal
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

unit applicantlist;
{$mode ObjFPC}{$H+}
interface
uses
Classes, SysUtils, cgiReport,xpMemParamManagerUnit;
type
{ TRepApplicantList }
TRepApplicantList=class(TReportCommand)
private
edtMode: integer;
cbStream: integer;
idYear: integer;
public
class function CommandSubClass: string; override;
procedure Prepare; override;
procedure OnFillVariables(AVariables: TxpMemParamManager); override;
end;
implementation
uses
cgiDM,dateutils,commandcol;
{ TRepApplicantList }
class function TRepApplicantList.CommandSubClass: string;
begin
Result:='applicant_list';
end;
procedure TRepApplicantList.Prepare;
var
SQL: string;
filter: string;
DateFilter: string;
begin
inherited prepare;
edtMode := strtointdef(self.Arguments.Keys.Values['mode'],0);
cbStream := strtointdef(self.Arguments.Keys.Values['stream'],0);
idyear := strtointdef(self.Arguments.Keys.Values['year'],0);
case edtMode of
0: filter := ' AND a1.testready<>0 ';
1: filter := ' AND (a1.testready=0) ';
end;
if cbStream = 1 then //Донабор
begin
DateFilter := Format(' AND cast(date as DATE) BETWEEN %0:s AND %1:s ',
[TNIDBDM.StringAsSQL(Arguments.Keys.Values['fromdate']), TNIDBDM.StringAsSQL(Arguments.Keys.Values['todate'])]);
end;
SQL := format(
'DROP TABLE IF EXISTS tmp_applicant; '+
'CREATE TEMPORARY TABLE tmp_applicant AS '+
'SELECT '+
' a.xp_key, '+
' subj.Subject, '+
' CONCAT_WS('' '',UPPER(a.Child_LastName),a.Child_FirstName,a.Child_MidName) AS FIO, '+
' a.Child_Birth, '+
' a.Child_Class, '+
' CASE WHEN a.testready<>0 THEN ''годен'' ELSE ''не годен'' END AS isready, '+
' COALESCE(a.coeff,1) as coeff, '+
' a.sex, '+
' a.child_mark, '+
' a.Child_Mark_Russ, '+
' a.Child_Mark_Math, '+
' a.Child_Mark_Lang, '+
' a.Child_Mark_Phys, '+
' a.Child_Mark_Info, '+
' COALESCE(NULLIF(a2.Privilege,''''),''нет'') as Privilege, '+
' (SELECT GROUP_CONCAT(l.course_name SEPARATOR '', '') FROM xp_applicant_file_lang l WHERE l.mid=a.xp_key ) as languages, '+
// ' %1:s as status, ' +
' a.CauseFailure '+
'FROM ( '+
' SELECT a1.xp_key, '+
' GROUP_CONCAT(distinct ' +
' CASE WHEN np.code = ''Л'' THEN ''Указ Президента РФ от 09.05.2022 г. №268 п.3/ч.1.'' '+
' WHEN np.code = ''Л1'' THEN ''Указ Президента РФ от 09.05.2022 г. №268 п.3/ч.2.'' '+
' WHEN np.code = ''М'' THEN ''Федеральный закон от 29 декабря 2022 года «641-ФЗ, статья 86, часть 6.1»'' '+
' WHEN np.code IS NOT NULL THEN priv.PrivilegeCode ' +
' ELSE priv.PrivilegeName END order by priv.PrivilegeCode SEPARATOR '', '') AS Privilege '+
' FROM xp_applicant a1 '+
' LEFT JOIN xp_applicant_file_privilege priv ON priv.mid=a1.xp_key AND priv.PrivilegeCode <> ''-'' '+
' LEFT JOIN c_privilege np ON np.code=priv.PrivilegeCode ' +
' WHERE a1.s_year_id=%0:d AND applicant_status_id <> 4'+
' AND (%1:d=COALESCE(a1.stream,0)) '+
filter+
DateFilter+
' GROUP BY a1.xp_key '+
') a2 '+
' JOIN xp_applicant a ON a.xp_key = a2.xp_key '+
' LEFT JOIN xp_subjects subj ON subj.Subject = a.Subject; ',
[idyear,cbStream]);
Processor.ExecuteSQL(SQL);
SQL :=
'DROP TABLE IF EXISTS tmp_app_sex; '+
'CREATE TEMPORARY TABLE tmp_app_sex AS '+
'SELECT child_class, count(*) as sex_count FROM '+
'(SELECT child_class,sex FROM tmp_applicant WHERE sex IS NOT NULL GROUP BY child_class,sex) t '+
'GROUP BY Child_class; ';
Processor.ExecuteSQL(SQL);
SQL := format(
'DROP TABLE IF EXISTS tmp_members; '+
'CREATE TEMPORARY TABLE tmp_members AS '+
' SELECT xp_f_get_mid_fio(m.mid,0) as member FROM enroll_comitet c '+
' JOIN enroll_comitet_members m ON m.enroll_comitet = c.id '+
'WHERE c.school_year=%0:d AND coalesce(c.stream,0)=%1:d ORDER BY 1' ,
[idYear,cbStream]);
Processor.ExecuteSQL(SQL);
end;
procedure TRepApplicantList.OnFillVariables(AVariables: TxpMemParamManager);
var
SQL: string;
Z2: string;
begin
case edtMode of
0: AVariables['mode'] := '';
1: AVariables['mode'] := '';
end;
AVariables['mode_id'] := edtMode;
AVariables['Year'] := YearOf(Date);
SQL := format(
'SELECT xp_f_get_mid_fio(c.chairman,0) as chairman , xp_f_get_mid_fio(c.deputy,0) as deputy, xp_f_get_mid_fio(c.deputy2,0) as deputy2, xp_f_get_mid_fio(c.secretary,0) as secretary '+
'FROM enroll_comitet c WHERE c.school_year = %0:d AND coalesce(c.stream,0)=%1:d; ',
[idYear,cbStream]);
with Processor.getData(SQL) do
try
if Not eof then
begin
AVariables['Председатель'] := (FieldByName('Chairman').AsString);
AVariables['Заместитель'] := (FieldByName('Deputy').AsString);
Z2 := (FieldByName('Deputy2').AsString);
AVariables['Секретарь'] := (FieldByName('Secretary').AsString);
end
else
begin
AVariables['Председатель'] := ('');
AVariables['Заместитель'] := ('');
AVariables['Секретарь'] := ('');
Z2 := '';
end;
AVariables['Заместитель2'] := (Z2);
if Z2<>'' then AVariables['zam2'] := 1 else AVariables['zam2'] := 0;
finally
Free;
end;
end;
Initialization
TCommandCollection.Register(TRepApplicantList);
end.