Subversion Repositories delphiutils

Compare Revisions

No changes between revisions

Regard whitespace Rev 77 → Rev 78

/trunk/Zeiterfassung/SQL/REGELARBEITSZEIT.sql
0,0 → 1,21
USE [ZEITERFASSUNG]
GO
 
/****** Object: Table [dbo].[REGELARBEITSZEIT] Script Date: 15.02.2019 15:15:56 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
CREATE TABLE [dbo].[REGELARBEITSZEIT](
[USERNAME] [varchar](100) NOT NULL,
[MINUTEN] [int] NOT NULL,
CONSTRAINT [PK_REGELARBEITSZEIT] PRIMARY KEY CLUSTERED
(
[USERNAME] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
 
 
/trunk/Zeiterfassung/SQL/TAGE.sql
0,0 → 1,31
USE [ZEITERFASSUNG]
GO
 
/****** Object: Table [dbo].[TAGE] Script Date: 15.02.2019 15:16:14 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
CREATE TABLE [dbo].[TAGE](
[TAG] [date] NOT NULL,
[USERNAME] [varchar](100) NOT NULL,
[FREIER_TAG] [bit] NULL,
[KOMMEN] [time](0) NULL,
[PAUSE_START] [time](0) NULL,
[PAUSE_ENDE] [time](0) NULL,
[GEHEN] [time](0) NULL,
[SONSTIGER_ABZUG] [time](0) NULL,
[ZUHAUSE] [time](0) NULL,
[ÜBERSTUNDEN] [int] NULL,
[ÜBERSTUNDEN_SALDO] [int] NULL,
CONSTRAINT [PK_KOPF] PRIMARY KEY CLUSTERED
(
[TAG] ASC,
[USERNAME] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
 
 
/trunk/Zeiterfassung/Zeiterfassung.dpr
0,0 → 1,14
program Zeiterfassung;
 
uses
Forms,
ZeiterfassungMain in 'ZeiterfassungMain.pas' {Form1};
 
{$R *.res}
 
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
/trunk/Zeiterfassung/Zeiterfassung.dproj
0,0 → 1,40
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{cdf6e7f7-676e-4dd8-87ec-38892e7e53fb}</ProjectGuid>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
<DCC_DependencyCheckOutputName>Zeiterfassung.exe</DCC_DependencyCheckOutputName>
<MainSource>Zeiterfassung.dpr</MainSource>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Version>7.0</Version>
<DCC_DebugInformation>False</DCC_DebugInformation>
<DCC_LocalDebugSymbols>False</DCC_LocalDebugSymbols>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_Define>RELEASE</DCC_Define>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<Version>7.0</Version>
<DCC_Define>DEBUG</DCC_Define>
<DCC_UnitSearchPath>C:\Program Files (x86)\Woll2Woll\ipstudio2007\source;C:\Program Files (x86)\Woll2Woll\fcstudio2007\source;C:\Program Files (x86)\Woll2Woll\ipstudio2007\source\windows</DCC_UnitSearchPath>
<DCC_ResourcePath>C:\Program Files (x86)\Woll2Woll\ipstudio2007\source;C:\Program Files (x86)\Woll2Woll\fcstudio2007\source;C:\Program Files (x86)\Woll2Woll\ipstudio2007\source\windows</DCC_ResourcePath>
<DCC_ObjPath>C:\Program Files (x86)\Woll2Woll\ipstudio2007\source;C:\Program Files (x86)\Woll2Woll\fcstudio2007\source;C:\Program Files (x86)\Woll2Woll\ipstudio2007\source\windows</DCC_ObjPath>
<DCC_IncludePath>C:\Program Files (x86)\Woll2Woll\ipstudio2007\source;C:\Program Files (x86)\Woll2Woll\fcstudio2007\source;C:\Program Files (x86)\Woll2Woll\ipstudio2007\source\windows</DCC_IncludePath>
</PropertyGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality</Borland.Personality>
<Borland.ProjectType />
<BorlandProject>
<BorlandProject><Delphi.Personality><Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><VersionInfo><VersionInfo Name="IncludeVerInfo">True</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">1031</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName">ViaThinkSoft</VersionInfoKeys><VersionInfoKeys Name="FileDescription">Digitale Zeiterfassung</VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright">(C) 2019 ViaThinkSoft, Daniel Marschall</VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename">Zeiterfassung.exe</VersionInfoKeys><VersionInfoKeys Name="ProductName">ViaThinkSoft Digitale Zeiterfassung</VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Source><Source Name="MainSource">Zeiterfassung.dpr</Source></Source></Delphi.Personality></BorlandProject></BorlandProject>
</ProjectExtensions>
<Import Project="$(MSBuildBinPath)\Borland.Delphi.Targets" />
<ItemGroup>
<DelphiCompile Include="Zeiterfassung.dpr">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="ZeiterfassungMain.pas">
<Form>Form1</Form>
</DCCReference>
</ItemGroup>
</Project>
/trunk/Zeiterfassung/Zeiterfassung.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/Zeiterfassung/Zeiterfassung.ini
0,0 → 1,2
[Connection]
ConnectionString="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Zeiterfassung;Data Source=SHS\FiVe,49007;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=MARSCHALL;Use Encryption for Data=False;Tag with column collation when possible=False;"
/trunk/Zeiterfassung/Zeiterfassung.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/Zeiterfassung/ZeiterfassungMain.dfm
0,0 → 1,225
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Digitale Zeiterfassung'
ClientHeight = 485
ClientWidth = 852
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poScreenCenter
OnClose = FormClose
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object wwDBGrid1: TwwDBGrid
Left = 0
Top = 50
Width = 852
Height = 435
ControlType.Strings = (
'FREIER_TAG;CheckBox;Wahr;Falsch')
Selected.Strings = (
'WOCHENTAG'#9'2'#9' '
'TAG'#9'10'#9'TAG'
'FREIER_TAG'#9'6'#9'Frei'
'KOMMEN'#9'8'#9'Kommen'
'PAUSE_START'#9'8'#9'Pause'
'PAUSE_ENDE'#9'8'#9'Ende'
'GEHEN'#9'9'#9'Gehen'
'SONSTIGER_ABZUG'#9'10'#9'Sonst. Abzug'
'ZUHAUSE'#9'11'#9'Arb. zuhause'
#220'BERSTUNDEN'#9'15'#9#220'berstunden heute'
#220'BERSTUNDEN_SALDO'#9'16'#9#220'berstunden ges.')
IniAttributes.Delimiter = ';;'
TitleColor = clBtnFace
FixedCols = 0
ShowHorzScrollBar = True
Align = alClient
DataSource = DataSource1
KeyOptions = [dgEnterToTab, dgAllowDelete, dgAllowInsert]
TabOrder = 0
TitleAlignment = taLeftJustify
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
TitleLines = 1
TitleButtons = False
OnCalcCellColors = wwDBGrid1CalcCellColors
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 852
Height = 50
Align = alTop
TabOrder = 1
ExplicitWidth = 827
DesignSize = (
852
50)
object Label1: TLabel
Left = 208
Top = 12
Width = 81
Height = 13
Caption = 'Regelarbeitszeit:'
end
object Label2: TLabel
Left = 208
Top = 27
Width = 12
Height = 13
Caption = '...'
end
object Button1: TButton
Left = 610
Top = 12
Width = 53
Height = 24
Anchors = [akTop, akRight]
Caption = 'Reorg'
TabOrder = 0
TabStop = False
OnClick = Button1Click
ExplicitLeft = 585
end
object DBNavigator1: TDBNavigator
Left = 669
Top = 12
Width = 168
Height = 25
DataSource = DataSource1
VisibleButtons = [nbFirst, nbLast, nbInsert, nbDelete, nbPost, nbCancel]
Anchors = [akTop, akRight]
TabOrder = 1
ExplicitLeft = 644
end
object ComboBox1: TComboBox
Left = 24
Top = 16
Width = 169
Height = 21
Style = csDropDownList
ItemHeight = 13
TabOrder = 2
OnChange = ComboBox1Change
end
end
object ADOConnection1: TADOConnection
LoginPrompt = False
Provider = 'SQLOLEDB.1'
Left = 280
Top = 16
end
object ADOTable1: TADOTable
Connection = ADOConnection1
CursorType = ctStatic
BeforePost = ADOTable1BeforePost
AfterPost = ADOTable1AfterPost
AfterDelete = ADOTable1AfterDelete
OnNewRecord = ADOTable1NewRecord
TableName = 'TAGE'
Left = 312
Top = 16
object ADOTable1WOCHENTAG: TStringField
DisplayLabel = ' '
DisplayWidth = 2
FieldKind = fkCalculated
FieldName = 'WOCHENTAG'
ReadOnly = True
OnGetText = ADOTable1WOCHENTAGGetText
Size = 2
Calculated = True
end
object ADOTable1TAG: TWideStringField
DisplayWidth = 10
FieldName = 'TAG'
OnChange = ADOTable1TAGChange
OnGetText = ADOTable1TAGGetText
OnSetText = ADOTable1TAGSetText
Size = 10
end
object ADOTable1FREIER_TAG: TBooleanField
DisplayLabel = 'Frei'
DisplayWidth = 6
FieldName = 'FREIER_TAG'
end
object ADOTable1KOMMEN: TWideStringField
DisplayLabel = 'Kommen'
DisplayWidth = 8
FieldName = 'KOMMEN'
OnGetText = ADOTable1KOMMENGetText
OnSetText = ADOTable1KOMMENSetText
Size = 8
end
object ADOTable1PAUSE_START: TWideStringField
DisplayLabel = 'Pause'
DisplayWidth = 8
FieldName = 'PAUSE_START'
OnGetText = ADOTable1PAUSE_STARTGetText
OnSetText = ADOTable1PAUSE_STARTSetText
Size = 8
end
object ADOTable1PAUSE_ENDE: TWideStringField
DisplayLabel = 'Ende'
DisplayWidth = 8
FieldName = 'PAUSE_ENDE'
OnGetText = ADOTable1PAUSE_ENDEGetText
OnSetText = ADOTable1PAUSE_ENDESetText
Size = 8
end
object ADOTable1GEHEN: TWideStringField
DisplayLabel = 'Gehen'
DisplayWidth = 9
FieldName = 'GEHEN'
OnGetText = ADOTable1GEHENGetText
OnSetText = ADOTable1GEHENSetText
Size = 8
end
object ADOTable1SONSTIGER_ABZUG: TWideStringField
DisplayLabel = 'Sonst. Abzug'
DisplayWidth = 10
FieldName = 'SONSTIGER_ABZUG'
OnGetText = ADOTable1SONSTIGER_ABZUGGetText
OnSetText = ADOTable1SONSTIGER_ABZUGSetText
Size = 8
end
object ADOTable1ZUHAUSE: TWideStringField
DisplayLabel = 'Arb. zuhause'
DisplayWidth = 11
FieldName = 'ZUHAUSE'
OnGetText = ADOTable1ZUHAUSEGetText
OnSetText = ADOTable1ZUHAUSESetText
Size = 8
end
object ADOTable1BERSTUNDEN: TIntegerField
DisplayLabel = #220'berstunden heute'
DisplayWidth = 15
FieldName = #220'BERSTUNDEN'
OnGetText = ADOTable1BERSTUNDENGetText
end
object ADOTable1BERSTUNDEN_SALDO: TIntegerField
DisplayLabel = #220'berstunden ges.'
DisplayWidth = 16
FieldName = #220'BERSTUNDEN_SALDO'
OnGetText = ADOTable1BERSTUNDEN_SALDOGetText
end
object ADOTable1USERNAME: TStringField
FieldName = 'USERNAME'
Visible = False
Size = 100
end
end
object DataSource1: TDataSource
DataSet = ADOTable1
Left = 344
Top = 16
end
end
/trunk/Zeiterfassung/ZeiterfassungMain.pas
0,0 → 1,612
unit ZeiterfassungMain;
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, Wwdbigrd, Wwdbgrid, ExtCtrls, DBCtrls, StdCtrls;
 
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
wwDBGrid1: TwwDBGrid;
ADOTable1: TADOTable;
DataSource1: TDataSource;
ADOTable1TAG: TWideStringField;
ADOTable1KOMMEN: TWideStringField;
ADOTable1PAUSE_START: TWideStringField;
ADOTable1PAUSE_ENDE: TWideStringField;
ADOTable1GEHEN: TWideStringField;
ADOTable1SONSTIGER_ABZUG: TWideStringField;
ADOTable1ZUHAUSE: TWideStringField;
ADOTable1BERSTUNDEN_SALDO: TIntegerField;
ADOTable1BERSTUNDEN: TIntegerField;
ADOTable1FREIER_TAG: TBooleanField;
Panel1: TPanel;
Button1: TButton;
DBNavigator1: TDBNavigator;
ADOTable1WOCHENTAG: TStringField;
ADOTable1USERNAME: TStringField;
ComboBox1: TComboBox;
Label1: TLabel;
Label2: TLabel;
procedure ADOTable1NewRecord(DataSet: TDataSet);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ADOTable1BeforePost(DataSet: TDataSet);
procedure ADOTable1BERSTUNDEN_SALDOGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
procedure ADOTable1BERSTUNDENGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
procedure wwDBGrid1CalcCellColors(Sender: TObject; Field: TField;
State: TGridDrawState; Highlight: Boolean; AFont: TFont; ABrush: TBrush);
procedure ADOTable1AfterPost(DataSet: TDataSet);
procedure Button1Click(Sender: TObject);
procedure ADOTable1TAGChange(Sender: TField);
procedure ADOTable1SONSTIGER_ABZUGSetText(Sender: TField;
const Text: string);
procedure ADOTable1ZUHAUSESetText(Sender: TField; const Text: string);
procedure ADOTable1GEHENSetText(Sender: TField; const Text: string);
procedure ADOTable1PAUSE_ENDESetText(Sender: TField; const Text: string);
procedure ADOTable1PAUSE_STARTSetText(Sender: TField; const Text: string);
procedure ADOTable1KOMMENSetText(Sender: TField; const Text: string);
procedure FormShow(Sender: TObject);
procedure ADOTable1WOCHENTAGGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
procedure ComboBox1Change(Sender: TObject);
procedure ADOTable1TAGSetText(Sender: TField; const Text: string);
procedure ADOTable1AfterDelete(DataSet: TDataSet);
procedure ADOTable1TAGGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
procedure ADOTable1KOMMENGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
procedure ADOTable1PAUSE_STARTGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
procedure ADOTable1PAUSE_ENDEGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
procedure ADOTable1GEHENGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
procedure ADOTable1SONSTIGER_ABZUGGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
procedure ADOTable1ZUHAUSEGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
private
function GueltigeZeile: boolean;
protected
procedure ReorgDataSet;
procedure ReorgAll;
function RegelArbeitszeit: integer;
end;
 
var
Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
// TODO: Trennstriche zwischen Wochen oder zwischen Urlauben
// TODO: Anmerkungen
 
uses
DateUtils, StrUtils, IniFiles;
 
{$REGION 'Hilfsfunktionen'}
 
function SQL_Escape(const s: string): string;
begin
result := StringReplace(s, '''', '\''', [rfReplaceAll]);
end;
 
function IstLeer(f: TField): boolean;
begin
result := f.IsNull or (f.AsString = '') or (f.AsString = '00:00:00');
end;
 
function Minuten(f: TField): integer;
begin
if IstLeer(f) then
begin
result := 0;
end
else
begin
result := MinuteOfTheDay(f.AsDateTime);
end;
end;
 
function MinutenZuHF(f: TField): string;
var
d: integer;
begin
if IstLeer(f) then
begin
result := '';
end
else
begin
d := f.AsInteger;
if d < 0 then
begin
result := '-';
d := -d;
end
else
begin
result := '';
end;
result := result + Format('%.2d:%.2d', [d div 60, d mod 60]);
end;
end;
 
function EchtesDatum(f: TField): TDate;
begin
if Copy(f.AsString, 5, 1) = '-' then
begin
result := EncodeDate(
StrtoInt(Copy(f.AsString, 1, 4)),
StrtoInt(Copy(f.AsString, 6, 2)),
StrtoInt(Copy(f.AsString, 9, 2))
);
end
else
result := StrToDate(f.AsString);
end;
 
function WUserName: String;
var
nSize: DWord;
begin
nSize := 1024;
SetLength(Result, nSize);
if GetUserName(PChar(Result), nSize) then
SetLength(Result, nSize-1)
else
RaiseLastOSError;
end;
 
{$ENDREGION}
 
function TForm1.RegelArbeitszeit: integer;
var
test: TADOQuery;
begin
test := TADOQuery.Create(nil);
try
test.Connection := ADOConnection1;
test.Close;
test.SQL.Text := 'select MINUTEN from REGELARBEITSZEIT where USERNAME = ''' + SQL_Escape(ComboBox1.Text) + '''';
test.Open;
if test.RecordCount = 0 then
begin
result := 8 * 60;
end
else
begin
result := test.FieldByName('MINUTEN').AsInteger;
end;
finally
test.Free;
end;
end;
 
procedure TForm1.ReorgAll;
var
saldo: integer;
baks: string;
bakEv: TDataSetNotifyEvent;
dead: boolean;
begin
if ADOTable1.ReadOnly then exit;
 
if ADOTable1TAG.IsNull then
begin
baks := '';
end
else
begin
if Copy(ADOTable1TAG.AsString, 5, 1) = '-' then
baks := ADOTable1TAG.AsString
else
DateTimeToString(baks, 'YYYY-MM-DD', ADOTable1TAG.AsDateTime);
end;
bakEv := ADOTable1.AfterPost;
ADOTable1.AfterPost := nil;
ADOTable1.Requery();
try
ADOTable1.First;
saldo := 0;
dead := false;
while not ADOTable1.Eof do
begin
ADOTable1.Edit;
if not dead then ReorgDataSet;
dead := dead or ADOTable1BERSTUNDEN.IsNull;
if dead then
begin
ADOTable1BERSTUNDEN_SALDO.Clear;
end
else
begin
saldo := saldo + ADOTable1BERSTUNDEN.AsInteger;
ADOTable1BERSTUNDEN_SALDO.AsInteger := saldo;
saldo := ADOTable1BERSTUNDEN_SALDO.AsInteger;
end;
ADOTable1.Post;
ADOTable1.Next;
end;
finally
if baks <> '' then ADOTable1.Locate('USERNAME;TAG', VarArrayOf([WUserName, baks]), []);
ADOTable1.AfterPost := bakEv;
end;
end;
 
procedure TForm1.ADOTable1AfterDelete(DataSet: TDataSet);
begin
ReorgAll;
end;
 
procedure TForm1.ADOTable1AfterPost(DataSet: TDataSet);
begin
ReorgAll;
end;
 
function TForm1.GueltigeZeile: boolean;
begin
result := false;
 
if IstLeer(ADOTable1KOMMEN) <> IstLeer(ADOTable1GEHEN) then exit;
if IstLeer(ADOTable1PAUSE_START) <> IstLeer(ADOTable1PAUSE_ENDE) then exit;
if not IstLeer(ADOTable1PAUSE_START) and (ADOTable1PAUSE_START.AsDateTime < ADOTable1KOMMEN.AsDateTime) then exit;
if not IstLeer(ADOTable1PAUSE_ENDE) and (ADOTable1PAUSE_ENDE.AsDateTime < ADOTable1PAUSE_START.AsDateTime) then exit;
if not IstLeer(ADOTable1GEHEN) and (ADOTable1GEHEN.AsDateTime < ADOTable1KOMMEN.AsDateTime) then exit;
if not IstLeer(ADOTable1GEHEN) and not IstLeer(ADOTable1PAUSE_START) and (ADOTable1GEHEN.AsDateTime < ADOTable1PAUSE_START.AsDateTime) then exit;
if not IstLeer(ADOTable1GEHEN) and not IstLeer(ADOTable1PAUSE_ENDE) and (ADOTable1GEHEN.AsDateTime < ADOTable1PAUSE_ENDE.AsDateTime) then exit;
 
result := true;
end;
 
procedure TForm1.ReorgDataSet;
var
m: integer;
begin
if GueltigeZeile then
begin
m := (Minuten(ADOTable1GEHEN) - Minuten(ADOTable1KOMMEN))
- (Minuten(ADOTable1PAUSE_ENDE) - Minuten(ADOTable1PAUSE_START))
- Minuten(ADOTable1SONSTIGER_ABZUG)
+ Minuten(ADOTable1ZUHAUSE);
 
if not ADOTable1FREIER_TAG.AsBoolean then
begin
m := m - RegelArbeitszeit;
end;
 
ADOTable1BERSTUNDEN.AsInteger := m;
end
else
begin
ADOTable1BERSTUNDEN.Clear;
end;
end;
 
procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
begin
if (ADOTable1.State = dsInsert) and ADOTable1TAG.IsNull then
begin
AdoTable1.Cancel;
Abort;
end;
 
ReorgDataSet;
end;
 
procedure TForm1.ADOTable1BERSTUNDENGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
Text := MinutenZuHF(ADOTable1BERSTUNDEN);
end;
 
procedure TForm1.ADOTable1BERSTUNDEN_SALDOGetText(Sender: TField;
var Text: string; DisplayText: Boolean);
begin
Text := MinutenZuHF(ADOTable1BERSTUNDEN_SALDO);
end;
 
procedure TForm1.ADOTable1GEHENGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
Text := Copy(Sender.AsString, 1, 5);
end;
 
procedure TForm1.ADOTable1GEHENSetText(Sender: TField; const Text: string);
begin
if Text = '' then
begin
ADOTable1GEHEN.Clear;
end
else
begin
ADOTable1GEHEN.AsString := Text;
end;
end;
 
procedure TForm1.ADOTable1KOMMENGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
Text := Copy(Sender.AsString, 1, 5);
end;
 
procedure TForm1.ADOTable1KOMMENSetText(Sender: TField; const Text: string);
begin
if Text = '' then
begin
ADOTable1KOMMEN.Clear;
end
else
begin
ADOTable1KOMMEN.AsString := Text;
end;
end;
 
procedure TForm1.ADOTable1NewRecord(DataSet: TDataSet);
var
test: TADOQuery;
begin
ADOTable1FREIER_TAG.AsBoolean := false;
ADOTable1USERNAME.AsString := WUserName;
test := TADOQuery.Create(nil);
try
test.Connection := ADOConnection1;
test.Close;
test.SQL.Text := 'select * from TAGE where TAG = ''' + DateToStr(Date) + '''';
test.Open;
if test.RecordCount = 0 then
begin
ADOTable1TAG.AsDateTime := Date;
ADOTable1KOMMEN.AsString := TimeToStr(Time);
ADOTable1FREIER_TAG.AsBoolean := (DayOfWeek(Date) = 1{Sunday}) or
(DayOfWeek(Date) = 7{Saturday});
end;
finally
test.Free;
end;
 
wwDBGrid1.SelectedField := ADOTable1TAG;
end;
 
procedure TForm1.ADOTable1PAUSE_ENDEGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
Text := Copy(Sender.AsString, 1, 5);
end;
 
procedure TForm1.ADOTable1PAUSE_ENDESetText(Sender: TField; const Text: string);
begin
if Text = '' then
begin
ADOTable1PAUSE_ENDE.Clear;
end
else
begin
ADOTable1PAUSE_ENDE.AsString := Text;
end;
end;
 
procedure TForm1.ADOTable1PAUSE_STARTGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
Text := Copy(Sender.AsString, 1, 5);
end;
 
procedure TForm1.ADOTable1PAUSE_STARTSetText(Sender: TField;
const Text: string);
begin
if Text = '' then
begin
ADOTable1PAUSE_START.Clear;
end
else
begin
ADOTable1PAUSE_START.AsString := Text;
end;
end;
 
procedure TForm1.ADOTable1SONSTIGER_ABZUGGetText(Sender: TField;
var Text: string; DisplayText: Boolean);
begin
Text := Copy(Sender.AsString, 1, 5);
end;
 
procedure TForm1.ADOTable1SONSTIGER_ABZUGSetText(Sender: TField;
const Text: string);
begin
if Text = '' then
begin
ADOTable1SONSTIGER_ABZUG.Clear;
end
else
begin
ADOTable1SONSTIGER_ABZUG.AsString := Text;
end;
end;
 
procedure TForm1.ADOTable1TAGChange(Sender: TField);
begin
ADOTable1FREIER_TAG.AsBoolean := (DayOfWeek(ADOTable1TAG.AsDateTime) = 1{Sunday}) or
(DayOfWeek(ADOTable1TAG.AsDateTime) = 7{Saturday});
// TODO: "Wochentag" Feld aktualisieren
end;
 
procedure TForm1.ADOTable1TAGGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
Text := DateToStr(EchtesDatum(Sender));
end;
 
procedure TForm1.ADOTable1TAGSetText(Sender: TField; const Text: string);
var
i, punktCount: integer;
begin
punktCount := 0;
for i := 1 to Length(Text) do
begin
if Text[i] = '.' then inc(punktCount);
end;
 
if punktCount = 1 then
begin
ADOTable1TAG.AsString := Text + '.' + IntToStr(CurrentYear);
end
else if (PunktCount = 2) and EndsStr('.',Text) then
begin
ADOTable1TAG.AsString := Text + IntToStr(CurrentYear);
end
else
begin
ADOTable1TAG.AsString := Text;
end;
end;
 
procedure TForm1.ADOTable1WOCHENTAGGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
try
if ADOTable1TAG.AsString <> '' then
Text := ShortDayNames[DayOfWeek(EchtesDatum(ADOTable1TAG))]
else
Text := '';
except
Text := '??';
end;
end;
 
procedure TForm1.ADOTable1ZUHAUSEGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
Text := Copy(Sender.AsString, 1, 5);
end;
 
procedure TForm1.ADOTable1ZUHAUSESetText(Sender: TField; const Text: string);
begin
if Text = '' then
begin
ADOTable1ZUHAUSE.Clear;
end
else
begin
ADOTable1ZUHAUSE.AsString := Text;
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
ReorgAll;
end;
 
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
ADOTable1.Active := false;
ADOTable1.ReadOnly := ComboBox1.Text <> WUserName;
ADOTable1.Filter := 'USERNAME = ''' + SQL_Escape(ComboBox1.Text) + '''';
ADOTable1.Filtered := true;
ADOTable1.Active := true;
ADOTable1.Last;
 
Button1.Enabled := not ADOTable1.ReadOnly;
 
Label2.Caption := IntToStr(RegelArbeitszeit);
 
ReorgAll;
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if ADOTable1.State in [dsEdit, dsInsert] then
begin
try
ADOTable1.Post;
except
on E: EAbort do
begin
exit;
end;
end;
end;
end;
 
procedure TForm1.FormShow(Sender: TObject);
var
test: TADOQuery;
ini: TMemIniFile;
resourcestring
DefaultConnectionString = 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Zeiterfassung;' +
'Data Source=SHS\FiVe,49007;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=MARSCHALL;Use Encryption for Data=False;Tag with column collation when possible=False;';
begin
ini := TMemIniFile.Create(IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + ChangeFileExt(ExtractFileName(ParamStr(0)), '.ini'));
try
ADOConnection1.ConnectionString := ini.ReadString('Connection', 'ConnectionString', DefaultConnectionString);
finally
ini.Free;
end;
ADOConnection1.Connected := true;
 
{$REGION 'Username Combobox füllen'}
test := TADOQuery.Create(nil);
try
test.Connection := ADOConnection1;
test.Close;
test.SQL.Text := 'select distinct USERNAME from TAGE';
test.Open;
ComboBox1.Items.Clear;
while not test.EOF do
begin
ComboBox1.Items.Add(test.FieldByName('USERNAME').AsString);
test.Next;
end;
finally
test.Free;
end;
 
if ComboBox1.Items.IndexOf(WUserName) = -1 then
ComboBox1.Items.Add(WUserName);
 
ComboBox1.Sorted := true;
 
ComboBox1.ItemIndex := ComboBox1.Items.IndexOf(WUserName);
 
ComboBox1Change(ComboBox1);
{$ENDREGION}
 
if wwDBGrid1.CanFocus then wwDBGrid1.SetFocus;
wwDBGrid1.SelectedField := ADOTable1TAG;
end;
 
procedure TForm1.wwDBGrid1CalcCellColors(Sender: TObject; Field: TField;
State: TGridDrawState; Highlight: Boolean; AFont: TFont; ABrush: TBrush);
begin
if Highlight then exit;
if (Field.FieldName = ADOTable1BERSTUNDEN.FieldName) or
(Field.FieldName = ADOTable1BERSTUNDEN_SALDO.FieldName) then
begin
ABrush.Color := clBtnFace;
end;
 
if (Field.FieldName = ADOTable1BERSTUNDEN.FieldName) then
begin
if ADOTable1BERSTUNDEN.AsInteger < 0 then
begin
AFont.Color := clRed;
end;
end;
 
if (Field.FieldName = ADOTable1BERSTUNDEN_SALDO.FieldName) then
begin
if ADOTable1BERSTUNDEN_SALDO.AsInteger < 0 then
begin
AFont.Color := clRed;
end;
end;
end;
 
end.
/trunk/Zeiterfassung/clock.ico
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/Zeiterfassung/delwaste.bat
0,0 → 1,13
@echo off
if exist *.dcu del *.dcu
if exist *.~* del *.~*
if exist *.obj del *.obj
if exist *.dsm del *.dsm
if exist *.lib del *.lib
if exist *.lck del *.lck
if exist _QSQ*.* del _QSQ*.*
if exist ModelSupport rmdir Modelsupport
attrib __history -h
if exist __history rmdir __history
del *.local
del *.identcache