-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCandidateSelectUnit.pas
114 lines (98 loc) · 3.23 KB
/
CandidateSelectUnit.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
Unit CandidateSelectUnit;
Interface
Uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus, Vcl.ComCtrls,
CandidateListUnit, VacancyListUnit;
Type
TCandidateSelectForm = Class(TForm)
LabelVacancy: TLabel;
MainMenu: TMainMenu;
MMFile: TMenuItem;
MMSaveFile: TMenuItem;
ListViewVacancy: TListView;
LabelCandidates: TLabel;
ListViewCandidates: TListView;
SaveDialog: TSaveDialog;
Procedure FormShow(Sender: TObject);
Procedure FormClose(Sender: TObject; Var Action: TCloseAction);
Procedure MMSaveFileClick(Sender: TObject);
Function FormHelp(Command: Word; Data: NativeInt;
Var CallHelp: Boolean): Boolean;
Procedure FormKeyDown(Sender: TObject; Var Key: Word;
Shift: TShiftState);
Private
{ Private declarations }
Public
{ Public declarations }
End;
Var
CandidateSelectForm: TCandidateSelectForm;
Vacancy: TVacancyInfo;
Implementation
{$R *.dfm}
Uses DateUtils, MainUnit;
Var
FoundCandidatesHead: PCandidate = Nil;
Function IsCandidateSuitable(Candidate: TCandidateInfo): Boolean;
Var
CandidateAge: Integer;
Begin
CandidateAge := YearsBetween(Now, Candidate.BirthDate);
IsCandidateSuitable := (AnsiUpperCase(String(Vacancy.Speciality))
= AnsiUpperCase(String(Candidate.Speciality))) And
(AnsiUpperCase(String(Vacancy.Title))
= AnsiUpperCase(String(Candidate.Title))) And
(Vacancy.IsHighEducationRequired And Candidate.HasHighEducation Or
Not Vacancy.IsHighEducationRequired) And
Not(Vacancy.MinAge > CandidateAge) And Not(Vacancy.MaxAge < CandidateAge)
And Not(Vacancy.Salary < Candidate.Salary);
End;
Procedure SelectCandidates();
Var
Temp: PCandidate;
Begin
Temp := CandidateHead;
While Temp <> Nil Do
Begin
If IsCandidateSuitable(Temp^.Info) Then
Begin
AddCandidate(Temp^.Info, FoundCandidatesHead);
AddCandidateToListView(Temp^.Info,
CandidateSelectForm.ListViewCandidates);
End;
Temp := Temp.Next;
End;
End;
Procedure TCandidateSelectForm.FormClose(Sender: TObject;
Var Action: TCloseAction);
Begin
ClearListView(ListViewVacancy);
ClearListView(ListViewCandidates);
DeleteCandidateList(FoundCandidatesHead);
End;
Function TCandidateSelectForm.FormHelp(Command: Word; Data: NativeInt;
Var CallHelp: Boolean): Boolean;
Begin
ShowInstruction();
CallHelp := False;
End;
Procedure TCandidateSelectForm.FormKeyDown(Sender: TObject; Var Key: Word;
Shift: TShiftState);
Begin
If Key = VK_ESCAPE Then
Close;
End;
Procedure TCandidateSelectForm.FormShow(Sender: TObject);
Begin
AddVacancyToListView(Vacancy, ListViewVacancy);
SelectCandidates();
MMSaveFile.Enabled := ListViewCandidates.Items.Count > 0;
End;
Procedure TCandidateSelectForm.MMSaveFileClick(Sender: TObject);
Begin
If SaveDialog.Execute Then
SaveCandidateListToFile(FoundCandidatesHead, SaveDialog.FileName);
End;
End.