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,baseconnection; { 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.