159 lines
5.5 KiB
ObjectPascal
159 lines
5.5 KiB
ObjectPascal
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]);
|
||
|
||
Connect.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; ';
|
||
Connect.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]);
|
||
Connect.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 connect.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.
|
||
|