275 lines
7.3 KiB
ObjectPascal
275 lines
7.3 KiB
ObjectPascal
unit U_SalaryInPut;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
Dialogs, StdCtrls, ExtCtrls, ComCtrls, ToolWin, cxStyles, cxCustomData,
|
|
cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData, ADODB,
|
|
cxGridLevel, cxClasses, cxControls, cxGridCustomView, cxGridCustomTableView,
|
|
cxGridTableView, cxGridDBTableView, cxGrid, DBClient, cxTextEdit, DateUtils,
|
|
cxLookAndFeels, cxLookAndFeelPainters, cxNavigator, dxSkinsCore, dxSkinWXI,
|
|
dxDateRanges, dxScrollbarAnnotations;
|
|
|
|
type
|
|
TfrmSalaryInPut = class(TForm)
|
|
ToolBar1: TToolBar;
|
|
TBSave: TToolButton;
|
|
TBClose: TToolButton;
|
|
Panel1: TPanel;
|
|
Label1: TLabel;
|
|
DayCombo: TComboBox;
|
|
Label2: TLabel;
|
|
YMCaption: TLabel;
|
|
Label3: TLabel;
|
|
HJCaption: TLabel;
|
|
cxGrid1: TcxGrid;
|
|
Tv1: TcxGridDBTableView;
|
|
v1EEName: TcxGridDBColumn;
|
|
v1DVal: TcxGridDBColumn;
|
|
v1Editer: TcxGridDBColumn;
|
|
v1Edittime: TcxGridDBColumn;
|
|
cxGrid1Level1: TcxGridLevel;
|
|
DataSource1: TDataSource;
|
|
Order_Main: TClientDataSet;
|
|
ADOQueryCmd: TADOQuery;
|
|
ADOQueryTemp: TADOQuery;
|
|
procedure FormShow(Sender: TObject);
|
|
procedure TBSaveClick(Sender: TObject);
|
|
procedure TBCloseClick(Sender: TObject);
|
|
procedure DayComboChange(Sender: TObject);
|
|
procedure Order_MainAfterPost(DataSet: TDataSet);
|
|
private
|
|
FDay: Integer; //当前录入日(1-31)
|
|
FDays: Integer; //当月天数
|
|
FSRDate: TDateTime; //当前录入日期
|
|
FInitFlag: Boolean;
|
|
procedure InitDayCombo();
|
|
procedure InitData();
|
|
procedure CalcHJ();
|
|
function SaveData(): Boolean;
|
|
{ Private declarations }
|
|
public
|
|
PState: Integer; //0:新增; 1:修改
|
|
FYMonth: string; //年月(yyyymm)
|
|
FInitDay: Integer;
|
|
{ Public declarations }
|
|
end;
|
|
|
|
var
|
|
frmSalaryInPut: TfrmSalaryInPut;
|
|
|
|
implementation
|
|
|
|
uses
|
|
U_DataLink, U_RTFun;
|
|
|
|
const
|
|
CNDayOfWeek: array[1..7] of string = ('日', '一', '二', '三', '四', '五', '六');
|
|
|
|
{$R *.dfm}
|
|
|
|
procedure TfrmSalaryInPut.FormShow(Sender: TObject);
|
|
begin
|
|
FInitFlag := True;
|
|
YMCaption.Caption := Copy(FYMonth, 1, 4) + '年' + Copy(FYMonth, 5, 2) + '月';
|
|
if PState = 1 then
|
|
Caption := '工资修改'
|
|
else
|
|
Caption := '工资录入';
|
|
InitDayCombo();
|
|
InitData();
|
|
CalcHJ();
|
|
FInitFlag := False;
|
|
end;
|
|
|
|
procedure TfrmSalaryInPut.InitDayCombo();
|
|
var
|
|
i, FY, FM, FDay: Integer;
|
|
begin
|
|
FY := StrToInt(Copy(FYMonth, 1, 4));
|
|
FM := StrToInt(Copy(FYMonth, 5, 2));
|
|
FDays := DaysInMonth(EncodeDate(FY, FM, 1));
|
|
DayCombo.Items.Clear;
|
|
for i := 1 to FDays do
|
|
DayCombo.Items.Add(Format('%d日(%s)', [i, CNDayOfWeek[DayOfWeek(EncodeDate(FY, FM, i))]]));
|
|
//默认当天
|
|
if (FInitDay >= 1) and (FInitDay <= FDays) then
|
|
FDay := FInitDay
|
|
else
|
|
begin
|
|
FDay := DayOf(SGetServerDate(ADOQueryTemp));
|
|
if FDay > FDays then
|
|
FDay := 1;
|
|
end;
|
|
DayCombo.ItemIndex := FDay - 1;
|
|
end;
|
|
|
|
procedure TfrmSalaryInPut.InitData();
|
|
begin
|
|
if DayCombo.ItemIndex < 0 then
|
|
Exit;
|
|
FDay := DayCombo.ItemIndex + 1;
|
|
FSRDate := EncodeDate(StrToInt(Copy(FYMonth, 1, 4)), StrToInt(Copy(FYMonth, 5, 2)), FDay);
|
|
with ADOQueryTemp do
|
|
begin
|
|
Close;
|
|
sql.Clear;
|
|
sql.Add(' select E.EEID,E.EECode,E.EEName ');
|
|
sql.Add(' ,S.GZS as DVal,S.SALID as SALID,S.Editer as Editer,S.Edittime as Edittime ');
|
|
sql.Add(' from SY_Employee E ');
|
|
sql.Add(' left join SY_Salary S on S.EEID=E.EEID and S.GZRQ=' + quotedstr(FormatDateTime('yyyy-mm-dd', FSRDate)));
|
|
sql.Add(' where isnull(E.EEType,''正式'')<>''离职'' or S.EEID is not null ');
|
|
sql.Add(' order by E.EECode ');
|
|
Open;
|
|
end;
|
|
SCreateCDS(ADOQueryTemp, Order_Main);
|
|
SInitCDSData(ADOQueryTemp, Order_Main);
|
|
TDateTimeField(Order_Main.FieldByName('Edittime')).DisplayFormat := 'mm-dd hh:nn';
|
|
Order_Main.MergeChangeLog;
|
|
end;
|
|
|
|
procedure TfrmSalaryInPut.DayComboChange(Sender: TObject);
|
|
begin
|
|
if FInitFlag then
|
|
Exit;
|
|
if DayCombo.ItemIndex < 0 then
|
|
Exit;
|
|
if Order_Main.ChangeCount > 0 then
|
|
if Application.MessageBox('切换日期将放弃未保存的修改,继续吗?', '提示', 32 + 4) <> IDYES then
|
|
begin
|
|
FInitFlag := True;
|
|
DayCombo.ItemIndex := FDay - 1;
|
|
FInitFlag := False;
|
|
Exit;
|
|
end;
|
|
InitData();
|
|
CalcHJ();
|
|
end;
|
|
|
|
procedure TfrmSalaryInPut.Order_MainAfterPost(DataSet: TDataSet);
|
|
begin
|
|
CalcHJ();
|
|
end;
|
|
|
|
procedure TfrmSalaryInPut.CalcHJ();
|
|
var
|
|
FVal, FHJ: Double;
|
|
FBm: TBookmark;
|
|
begin
|
|
FHJ := 0;
|
|
with Order_Main do
|
|
begin
|
|
DisableControls;
|
|
FBm := GetBookmark;
|
|
First;
|
|
while not Eof do
|
|
begin
|
|
if TryStrToFloat(Trim(fieldbyname('DVal').AsString), FVal) then
|
|
FHJ := FHJ + FVal;
|
|
Next;
|
|
end;
|
|
if FBm <> nil then
|
|
begin
|
|
GotoBookmark(FBm);
|
|
FreeBookmark(FBm);
|
|
end;
|
|
EnableControls;
|
|
end;
|
|
HJCaption.Caption := FormatFloat('0.##', FHJ);
|
|
end;
|
|
|
|
function TfrmSalaryInPut.SaveData(): Boolean;
|
|
var
|
|
mval: string;
|
|
begin
|
|
Result := False;
|
|
if Order_Main.IsEmpty then
|
|
Exit;
|
|
if Order_Main.State in [dsEdit, dsInsert] then
|
|
Order_Main.Post;
|
|
try
|
|
ADOQueryCmd.Connection.BeginTrans;
|
|
with Order_Main do
|
|
begin
|
|
DisableControls;
|
|
First;
|
|
while not Eof do
|
|
begin
|
|
mval := Trim(fieldbyname('DVal').AsString);
|
|
if Trim(fieldbyname('SALID').AsString) = '' then
|
|
begin
|
|
//当天无记录且录了值 -> 新增一条
|
|
if mval <> '' then
|
|
with ADOQueryCmd do
|
|
begin
|
|
Close;
|
|
sql.Clear;
|
|
sql.Add('insert into SY_Salary(GZRQ,EEID,GZS,Filler,Filltime) values(');
|
|
sql.Add(quotedstr(FormatDateTime('yyyy-mm-dd', FSRDate)) + ',' + quotedstr(Trim(Order_Main.fieldbyname('EEID').AsString)));
|
|
sql.Add(',' + quotedstr(mval) + ',' + quotedstr(Trim(DName)) + ',getdate())');
|
|
ExecSQL;
|
|
end;
|
|
end
|
|
else
|
|
begin
|
|
// if mval = '' then
|
|
// begin
|
|
// //清空 -> 删除当天记录
|
|
// with ADOQueryCmd do
|
|
// begin
|
|
// Close;
|
|
// sql.Clear;
|
|
// sql.Add('delete SY_Salary where SALID=' + Trim(Order_Main.fieldbyname('SALID').AsString));
|
|
// ExecSQL;
|
|
// end;
|
|
// end
|
|
// else
|
|
// begin
|
|
//修改工时 -> 更新并记录修改人
|
|
with ADOQueryCmd do
|
|
begin
|
|
Close;
|
|
sql.Clear;
|
|
sql.Add('update SY_Salary set GZS=' + quotedstr(mval));
|
|
sql.Add(',Editer=' + quotedstr(Trim(DName)) + ',Edittime=getdate()');
|
|
sql.Add(' where SALID=' + Trim(Order_Main.fieldbyname('SALID').AsString));
|
|
ExecSQL;
|
|
end;
|
|
// end;
|
|
end;
|
|
Next;
|
|
end;
|
|
First;
|
|
EnableControls;
|
|
end;
|
|
ADOQueryCmd.Connection.CommitTrans;
|
|
Order_Main.MergeChangeLog;
|
|
Result := True;
|
|
except
|
|
ADOQueryCmd.Connection.RollbackTrans;
|
|
Order_Main.EnableControls;
|
|
Application.MessageBox('保存失败!', '提示', 0);
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmSalaryInPut.TBSaveClick(Sender: TObject);
|
|
begin
|
|
ToolBar1.SetFocus;
|
|
if SaveData() then
|
|
begin
|
|
Application.MessageBox('保存成功!', '提示', 0);
|
|
ModalResult := 1;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmSalaryInPut.TBCloseClick(Sender: TObject);
|
|
begin
|
|
if Order_Main.ChangeCount > 0 then
|
|
if Application.MessageBox('有未保存的修改,确定关闭吗?', '提示', 32 + 4) <> IDYES then
|
|
Exit;
|
|
Close;
|
|
end;
|
|
|
|
end.
|