procedure TfrmMain.grdKundenClick(Sender: TObject);
var intZaehler,intZaehlerZwei,intAnzahlGueltig, intAnzahlHauptkundeE,intAnzahlHauptkundeK,intAnzahlE,intAnzahlK,intAnzahlHauptkundeUngueltig,intAnzahlUngueltig:integer;
strSpalte,strInhalt,strKundennummer,strAbfrage,strGueltigAb,strGueltigBis,strBescheidArt:
string;
objFeldDefinitionen:TMysql_FieldDef;
ex:boolean;
datDatum:TDateTime;
fltUmsatz,fltZahlung,fltKundenSaldo:real;
begin
// Verbindung prüfen
if FMySQL.Connected = false
then begin
LogHinzufuegen('
grdKundenClick: Keine SQL-Verbindung');
messagedlg(strMySqlKeineVerbindung,mterror,[mbok],0 );
end;
// Fenster rücksetzen
FelderLeeren();
// Kundennummer im Grid suchen
strKundennummer := FeldAusGridLesen(frmmain.grdKunden, '
Kd.-Nr.');
if strKundennummer = '
'
then begin
LogHinzufuegen('
grdKundenClick: Kundennummer konnte nicht aus Grid gelesen werden');
// messagedlg('Ein interner Fehler ist beim Abrufen der Kundendaten aufgetreten.' + #10#13 + 'Prüfen Sie die Datenbankverbindung und versuchen Sie es erneut.',mterror,[mbok],0 );
Exit;
end;
// Fortschritt zeigen
frmmain.lblKunden.Caption := '
Lese Kundendaten...';
frmmain.lblKunden.Refresh;
// Felder rücksetzen
intAnzahlE := 0;
intAnzahlK := 0;
intAnzahlUngueltig := 0;
intAnzahlHauptkundeE := 0;
intAnzahlHauptkundeK := 0;
// Kundenstammdaten lesen
fltKundenSaldo := 0;
strAbfrage := '
select Kundennummer,Nachname,Vorname,Strasse as Straße,Hausnummer,Postleitzahl,Ort as Wohnort,Geburtsdatum,Kunde_seit as "Kunde seit",Bezeichnung as Verteilstelle,Bemerkungen,Fruehere_Kundennummer as "Orts Kundennumer",Kundenkonto_Saldo from ' + strEinstellungenSQLTabellenKundenstamm + '
INNER JOIN ' + strEinstellungenSQLTabellenPLZ + '
ON ('+ strEinstellungenSQLTabellenKundenstamm +'
.Postleitzahl_id = '+ strEinstellungenSQLTabellenPLZ +'
.Postleitzahl_id) INNER JOIN ' + strEinstellungenSQLTabellenVerteilstellen +'
ON (' + strEinstellungenSQLTabellenKundenstamm + '
.Verteilstellen_Nr =' + strEinstellungenSQLTabellenVerteilstellen + '
.Verteilstellen_Nr) where (';
strAbfrage := strAbfrage + '
Kundennummer="' + strKundennummer + '
")';
LogHinzufuegen('
grdKundenClick: SQL-Abfrage: ' + strabfrage);
FResult := fmysql.query(strabfrage, True, ex);
if (ex = True)
and (fresult.rowscount > 0)
then begin
LogHinzufuegen('
grdKundenClick: Resultat: OK, Kunden ' + inttostr(FResult.RowsCount) + '
Mal gefunden');
for intZaehler := 0
to fresult.FieldsCount - 1
do begin
objFeldDefinitionen := fresult.FieldDef(intZaehler)^;
strspalte := objFeldDefinitionen.
name;
strInhalt := fresult.FieldValue(intzaehler);
loghinzufuegen('
grdKundenClick: Verarbeite Kunden-Stammdaten ' + strspalte + '
/ ' + strinhalt);
try
if strspalte = '
Vorname'
then edtVorname.text := strinhalt;
if strspalte = '
Nachname'
then edtName.text := strinhalt;
if strspalte = '
Postleitzahl'
then edtPLZ.text := strinhalt;
if strspalte = '
Wohnort'
then edtWohnort.text := strinhalt;
if strspalte = '
Straße'
then edtStrasse.text := strinhalt;
if strspalte = '
Hausnummer'
then edtHausnr.text := strinhalt;
if strspalte = '
Geburtsdatum'
then begin
edtGeburtsdatum.text := Transformdate(strinhalt,MysqlDateToDate);
try
strInhalt := Transformdate(strinhalt,MysqlDateToDate);
// ############### DEBUG ####################
// Datum vor 18 Jahren errechnen
if FormatDateTime('
dd.mm.', frmMain.dteDatum.date) = '
29.02.'
then begin // Schaltjahr
datDatum := strtodate('
28.02.' + inttostr(strtoint(FormatDateTime('
yyyy', frmMain.dteDatum.date)) - 18));
end else begin
datDatum := strtodate(FormatDateTime('
dd.mm.yyyy', strtodate(FormatDateTime('
dd.mm.', frmMain.dteDatum.date) + inttostr(strtoint(FormatDateTime('
yyyy', frmMain.dteDatum.date)) - 18))));
end;
// Datum vergleichen
if isDatePlus(strInhalt) = True
then begin // Datum prüfen
if strtodate(strInhalt) > datDatum
then begin // Kind/Jugendlicher unter 18
intAnzahlHauptkundeK := intAnzahlHauptkundeK + 1;
LogHinzufuegen('
grdKundenClick: Hauptkunde Kind/Jugendlicher');
end else begin // Erwachsener
intAnzahlHauptkundeE := intAnzahlHauptkundeE + 1;
LogHinzufuegen('
grdKundenClick: Hauptkunde Erwachsener');
end;
end else begin
LogHinzufuegen('
grdKundenClick: Hauptkunde - Datum ungültig');
intAnzahlHauptkundeUngueltig := intAnzahlHauptkundeUngueltig + 1;
end;
except
LogHinzufuegen('
grdKundenClick: Fehler beim Verarbeiten von Kunden-Daten');
end;
end;
if strspalte = '
Kundennummer'
then edtKdnNr.text := strinhalt;
if strspalte = '
Kunde seit'
then edtKundeSeit.text := Transformdate(strinhalt,MysqlDateToDate);
if strspalte = '
Verteilstelle'
then edtVerteilstelle.text := strinhalt;
if strspalte = '
Orts Kundennumer'
then edtOertlKdnr.text := strinhalt;
if strspalte = '
Bemerkungen'
then begin
mmoBemerkung.Lines.Clear;
mmoBemerkung.Lines.text := BermerkungenDeKodieren(strInhalt);
end;
if strSpalte = '
Kundenkonto_Saldo'
then fltKundenSaldo := StrToFloat(StringReplace(strinhalt, '
.', '
,', []));
except
LogHinzufuegen('
grdKundenClick: Fehler beim Verarbeiten von Kunden-Stammdaten');
end;
end;
end else begin
LogHinzufuegen('
grdKundenClick: Resultat: Fehler oder 0 Resultate - ' + fmysql.LastError);
messagedlg('
Ein Fehler ist beim Abrufen der Kundendaten aufgetreten.' + #10#13 + '
Prüfen Sie die Datenbankverbindung und versuchen Sie es erneut.',mterror,[mbok],0 );
end;
mmoBemerkung.Perform(EM_LineScroll, 0 , 0);
// Scrollbar nach oben rollen
// Bescheid-Daten lesen
frmmain.mmoBescheid.Clear;
strAbfrage := '
select Bescheid_Art, Gueltig_Ab, Gueltig_Bis from ' + strEinstellungenSQLTabellenBescheide + '
where (';
strAbfrage := strAbfrage + '
Kundennummer="' + strKundennummer + '
")';
LogHinzufuegen('
grdKundenClick: SQL-Abfrage: ' + strabfrage);
FResult := fmysql.query(strabfrage, True, ex);
if (ex = True)
and (fresult.rowscount > 0)
then begin
LogHinzufuegen('
grdKundenClick: Resultat: OK, ' + inttostr(FResult.RowsCount) + '
Bescheide gefunden');
intAnzahlGueltig := 0;
for intZaehler := 0
to fresult.RowsCount - 1
do begin
fresult.RecNo := intZaehler;
strGueltigAb := '
';
strGueltigBis := '
';
strBescheidArt := '
';
for intZaehlerZwei := 0
to fresult.FieldsCount -1
do begin
objFeldDefinitionen := fresult.FieldDef(intZaehlerZwei)^;
strSpalte := objFeldDefinitionen.
name;
strInhalt := fresult.FieldValue(intZaehlerZwei);
LogHinzufuegen('
grdKundenClick: Verarbeiten Daten für Bescheid ' + IntToStr(intZaehler) + '
' + strspalte + '
/ ' + strinhalt);
try
if strspalte = '
Gueltig_Ab'
then begin
strInhalt := Transformdate(strinhalt,MysqlDateToDate);
if isDatePlus(strInhalt) = true
then begin
strGueltigAb := strInhalt;
end else begin
LogHinzufuegen('
grdKundenClick: Datum ungültig');
strGueltigAb := '
';
end;
end;
if strspalte = '
Gueltig_Bis'
then begin
strInhalt := Transformdate(strinhalt,MysqlDateToDate);
if isDatePlus(strInhalt) = true
then begin
strGueltigBis := strInhalt;
end else begin
LogHinzufuegen('
grdKundenClick: Datum ungültig');
strGueltigBis := '
';
end;
end;
if strspalte = '
Bescheid_Art'
then strBescheidArt := strinhalt;
except
LogHinzufuegen('
grdKundenClick: Fehler beim Verarbeiten von Bescheid-Daten');
end;
end;
strInhalt := inttostr(intZaehler + 1) + '
: ' + strBescheidArt;
if (isDatePlus(strGueltigAb) = True)
then begin
if strGueltigBis = '
'
then strGueltigBis := DateToStr(frmMain.dteDatum.date);
if (StrToDate(strGueltigAb) <= frmMain.dteDatum.date)
and (StrToDate(strGueltigBis) >= StrToDate(DateToStr(frmMain.dteDatum.date))
{frmMain.dteDatum.date})
then begin
strInhalt := strInhalt + '
(gültig)';
intAnzahlGueltig := intAnzahlGueltig + 1;
end else if (StrToDate(strGueltigAb) >= frmMain.dteDatum.date)
and ((StrToDate(strGueltigBis) >= StrToDate(strGueltigAb))
or (StrToDate(strGueltigBis) = StrToDate(DateToStr(frmMain.dteDatum.date))))
then begin
strInhalt := strInhalt + '
(noch nicht gültig)';
end else begin
strInhalt := strInhalt + '
(abgelaufen)';
end;
end else begin
strInhalt := strInhalt + '
(Daten ungültig)';
LogHinzufuegen('
grdKundenClick: Bescheid-Daten ungültig');
end;
frmmain.mmoBescheid.Lines.Add(strInhalt);
end;
if intAnzahlGueltig = 0
then frmmain.mmoBescheid.Lines.Add('
Fazit: Keine gültigen Bescheide gefunden.')
else if intAnzahlGueltig = 1
then frmmain.mmoBescheid.Lines.Add('
Fazit: ' + inttostr(intAnzahlGueltig) + '
gültiger Bescheid')
else if intAnzahlGueltig > 1
then frmmain.mmoBescheid.Lines.Add('
Fazit: ' + inttostr(intAnzahlGueltig) + '
gültige Bescheid');
end else begin
LogHinzufuegen('
grdKundenClick: Resultat: Fehler oder 0 Resultate - ' + fmysql.LastError);
frmmain.mmoBescheid.Lines.Add('
(keine Bescheide erfasst)');
// messagedlg('Ein Fehler ist beim Abrufen der Bescheide aufgetreten.' + #10#13 + 'Prüfen Sie die Datenbankverbindung und versuchen Sie es erneut.',mterror,[mbok],0 );
end;
mmoBescheid.Perform(EM_LineScroll, 0 , mmoBescheid.Lines.Count-1);
// Scrollbar nach oben rollen
// Weitere-Personen-Daten lesen
frmmain.edtAnzErw.text := '
0';
frmmain.edtAnzKinder.text := '
0';
strAbfrage := '
select Geburtsdatum from ' + strEinstellungenSQLTabellenFamilienmitglieder + '
where (';
strAbfrage := strAbfrage + '
Kundennummer="' + strKundennummer + '
")';
LogHinzufuegen('
grdKundenClick: SQL-Abfrage: ' + strabfrage);
FResult := fmysql.query(strabfrage, True, ex);
if (ex = True)
and (fresult.rowscount > 0)
then begin
LogHinzufuegen('
grdKundenClick: Resultat: OK, ' + inttostr(FResult.RowsCount) + '
weitere Personen gefunden');
for intZaehler := 0
to fresult.RowsCount - 1
do begin
fresult.RecNo := intZaehler;
for intZaehlerZwei := 0
to fresult.FieldsCount -1
do begin
objFeldDefinitionen := fresult.FieldDef(intZaehlerZwei)^;
strSpalte := objFeldDefinitionen.
name;
strInhalt := fresult.FieldValue(intZaehlerZwei);
LogHinzufuegen('
grdKundenClick: Verarbeite Daten für weitere Person ' + IntToStr(intZaehler) + '
' + strspalte + '
/ ' + strinhalt);
if strspalte = '
Geburtsdatum'
then begin
try
strInhalt := Transformdate(strinhalt,MysqlDateToDate);
// Datum vor 18 Jahren errechnen
if FormatDateTime('
dd.mm.', frmMain.dteDatum.date) = '
29.02.'
then begin // Schaltjahr
datDatum := strtodate('
28.02.' + inttostr(strtoint(FormatDateTime('
yyyy', frmMain.dteDatum.date)) - 18));
end else begin
datDatum := strtodate(FormatDateTime('
dd.mm.yyyy', strtodate(FormatDateTime('
dd.mm.', frmMain.dteDatum.date) + inttostr(strtoint(FormatDateTime('
yyyy', frmMain.dteDatum.date)) - 18))));
end;
// Datum vergleichen
if isDatePlus(strInhalt) = True
then begin // Datum prüfen
if strtodate(strInhalt) > datDatum
then begin // Kind/Jugendlicher unter 18
intAnzahlK := intAnzahlK + 1;
LogHinzufuegen('
grdKundenClick: Kind/Jugendlicher');
end else begin // Erwachsener
intAnzahlE := intAnzahlE + 1;
LogHinzufuegen('
grdKundenClick: Erwachsener');
end;
end else begin
LogHinzufuegen('
grdKundenClick: Datum ungültig');
intAnzahlUngueltig := intAnzahlUngueltig + 1;
end;
except
LogHinzufuegen('
grdKundenClick: Fehler beim Verarbeiten von Weitere-Kunden-Daten');
end;
end;
end;
end;
end else begin
LogHinzufuegen('
grdKundenClick: Resultat: Fehler oder 0 Resultate - ' + fmysql.LastError);
// messagedlg('Ein Fehler ist beim Abrufen der weiteren Personen aufgetreten.' + #10#13 + 'Prüfen Sie die Datenbankverbindung und versuchen Sie es erneut.',mterror,[mbok],0 );
end;
// Personen-Daten eintragen (inkl. ungültigen Hauptkunden- und Nebenkunden-Geburtstage)
frmmain.edtAnzErw.text := inttostr(intAnzahlE + intAnzahlHauptkundeE);
if (intAnzahlUngueltig > 0)
or (intAnzahlHauptkundeUngueltig > 0)
then
frmmain.edtAnzErw.text := frmmain.edtAnzErw.text + '
(+' + inttostr(intAnzahlUngueltig + intAnzahlHauptkundeUngueltig) + '
?)';
frmmain.edtAnzKinder.text := inttostr(intAnzahlK + intAnzahlHauptkundeK);
// Umsatz-Daten eintragen
frmmain.edtZuZahlen.text := Format('
%f',[reaEinstellungenGebuehrErwachsener * (intAnzahlE + intAnzahlHauptkundeE + intAnzahlUngueltig + intAnzahlHauptkundeUngueltig) + reaEinstellungenGebuehrKind * (intAnzahlK + intAnzahlHauptkundeK)]);
frmmain.edtHeuteKassiert.text := frmmain.edtZuZahlen.text;
frmmain.edtNochOffen.text := Format('
%f',[fltKundenSaldo]);
// Fortschritt zeigen
frmmain.lblKunden.Caption := '
Gefundene Kunden: ' + IntToStr(frmmain.grdKunden.RowCount - 1);
// Fokus auf das Umsatz-Feld setzen
try
frmmain.edtHeuteKassiert.SetFocus;
except
end;
end;