unit paiement;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, EditBtn, DBGrids, mainDataModule, LR_Class, LR_DBSet;
type
{ TPaiementForm }
TPaiementForm = class(TForm)
AjouterButton: TButton;
AnnulerButton: TButton;
AppercuButton: TButton;
ComboBox1: TComboBox;
DateEdit1: TDateEdit;
DBGrid1: TDBGrid;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
frDBDataSet1: TfrDBDataSet;
frReport1: TfrReport;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
ModifierButton: TButton;
SupprimerButton: TButton;
ValiderButton: TButton;
procedure AjouterButtonClick(Sender: TObject);
procedure AnnulerButtonClick(Sender: TObject);
procedure AppercuButtonClick(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
procedure Edit1Change(Sender: TObject);
procedure ModifierButtonClick(Sender: TObject);
procedure SupprimerButtonClick(Sender: TObject);
procedure ValiderButtonClick(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
implementation
{ TPaiementForm }
uses main;
var Sql: String;
ClickedButton: Char;
function convert(N:Integer):String;
Const
Unite:Array[1..12] of String=('واحد','إثنان','ثلاثة','أربعة','خمسة','ستة',
'سبعة','ثمانية','تسعة','عشرة','احدى عشر','اثنتا عشر');
Dizaine:Array[1..9]of String=('عشر','عشرون','ثلاثون','أربعون',
'خمسون','ستون','سبعون','ثمانون','تسعون');
Ordre1:Array[0..3]of String=('مائة','ألف','مليون','مليار');
Ordre2:Array[0..3]of String=('مئتان','ألفان','مليونان','ملياران');
Ordre3:Array[1..3]of String=('آلاف','ملايين','ملايير');
Var
T:Array[1..4] of Integer;
Temp : String;
C,D,U : Byte;
I : Word;fait:boolean;
Begin
If N=0 then
Begin
Result:=' صفر';
Exit;
End;
Result:='';
For i:=4 downto 1 do
Begin
T[i]:=N mod 1000;
N:=N div 1000;
End;
for i:=4 downto 2 do
begin
if i <> 4 then
begin
if T[i]=1 then Result:=Ordre1[4-i]+' '+Result
Else If T[i]=2 then Result:=Ordre2[4-i]+' '+Result
Else
Begin
If (T[i] mod 100 <11)and (T[i] mod 100 >2) then Result:=Ordre3[4-i]+' '+Result
Else If T[i] mod 100 =2 then Result:=Ordre2[4-i]+' '+Result
Else If (T[i] mod 100 <>0) then Result:=Ordre1[4-i]+' '+Result
else if (T[i] mod 100 =0) and(T[i]<>0) then Result:=Ordre1[4-i]+' '+Result;
end;
end;
If T[i]>0 then
Begin
fait:=false; Temp:='';
U:=T[i] mod 10; //T[4]:=T[4] div 10;
D:=(T[i]div 10) mod 10; //T[4]:=T[4] div 10;
If i=4 then If (D=0)and (U>1)then Temp:=' '+Unite[U]
else If (D=0)and (U>2)then Temp:=' '+Unite[U];
If (D=1) and (U<3) then
Begin
Dec(D);
Inc(U,10);
Temp:=' '+Unite[U];
End
Else
If (D=1) and (U>2)then
Begin
Temp:=' '+Unite[U]+' '+Dizaine[D];
fait:=true;
End;
If not fait then
begin
If i<>4 then
begin
If (U>0)and(T[i]mod 100>2) then Temp:=' '+Unite[U];
end
else If (U>0) then Temp:=' '+Unite[U];
If (D>1) and (U>0) then Temp:=Temp+' و';
If (D>=1) then Temp:=Temp+' '+Dizaine[D];
end;
If Temp <>'' then Result:=' '+Temp+' '+Result;
C:=(T[i] div 100) mod 10; //T[4]:=T[4] div 10;
If C>0 then
Begin
Temp:='';
If C=2 then Temp:=Temp+' '+Ordre2[0]
Else
Begin
If C>2 then Temp:=' '+Unite[C]+Temp;
Temp:=Temp+' '+Ordre1[0];
End;
If (Result<>'') and (T[i] mod 100 <> 0) then Result:=' و'+Result;
Result:=Temp+' '+Result;
End;
Case i of
4:If (T[3]>0)or(T[2]>0)or(T[1]>0) then Result:='و'+Result;
3:If (T[2]>0)or(T[1]>0) then Result:='و'+Result;
2:If (T[1]>0) then Result:='و'+Result;
End;
End;
End;
If T[1]>0 then
Begin
Result:=Ordre1[3]+' '+Result;
end;
end;
procedure TPaiementForm.DBGrid1CellClick(Column: TColumn);
begin
Edit1.OnChange:=nil;
Edit1.Text:=DataModule1.PaiementQuery.FieldByName('nu_paiement').Text;
Edit1.OnChange:=@Edit1Change;
Edit2.Text:=DataModule1.PaiementQuery.FieldByName('client').Text;
Edit3.Text:=DataModule1.PaiementQuery.FieldByName('montant').Text;
Edit4.Text:=DataModule1.PaiementQuery.FieldByName('ref_commande').Text;
Edit5.Text:=DataModule1.PaiementQuery.FieldByName('mode_paiement').Text;
Edit6.Text:=DataModule1.PaiementQuery.FieldByName('note').AsString;
DateEdit1.Text:=DataModule1.PaiementQuery.FieldByName('date_paiement').Text;
ComboBox1.ItemIndex:=DataModule1.PaiementQuery.FieldByName('type').AsInteger;
end;
procedure TPaiementForm.Edit1Change(Sender: TObject);
begin
DateEdit1.Clear;
Edit2.Clear;
Edit3.Clear;
Edit4.Clear;
Edit5.Clear;
Edit6.Clear;
ComboBox1.ClearSelection;
DataModule1.PaiementQuery.Active:=False;
DataModule1.PaiementQuery.Active:=True;
if DataModule1.PaiementQuery.Locate('nu_paiement',Edit1.Text,[]) then
begin
DateEdit1.Text:=DataModule1.PaiementQuery.FieldByName('date_paiement').Text;
Edit2.Text:=DataModule1.PaiementQuery.FieldByName('client').Text;
Edit3.Text:=DataModule1.PaiementQuery.FieldByName('montant').Text;
ComboBox1.ItemIndex:=DataModule1.PaiementQuery.FieldByName('type').AsInteger;
Edit4.Text:=DataModule1.PaiementQuery.FieldByName('ref_commande').Text;
Edit5.Text:=DataModule1.PaiementQuery.FieldByName('mode_paiement').Text;
Edit6.Text:=DataModule1.PaiementQuery.FieldByName('note').AsString;
end;
end;
procedure TPaiementForm.AjouterButtonClick(Sender: TObject);
begin
Self.Edit1.OnChange:=nil;
Self.DbGrid1.OnCellClick:=nil;
ClickedButton:='N';
Edit1.ReadOnly:=True;
Edit2.ReadOnly:=False;
DateEdit1.Enabled:=True;
Edit3.ReadOnly:=False;
Edit4.ReadOnly:=False;
Edit5.ReadOnly:=False;
Edit6.ReadOnly:=False;
ComboBox1.Enabled:=True;
AjouterButton.Enabled:=false;
ModifierButton.Enabled:=false;
SupprimerButton.Enabled:=false;
AnnulerButton.Enabled:=true;
ValiderButton.Enabled:=true;
end;
procedure TPaiementForm.ModifierButtonClick(Sender: TObject);
begin
Self.Edit1.OnChange:=nil;
Self.DbGrid1.OnCellClick:=nil;
ClickedButton:='M';
Edit1.ReadOnly:=True;
Edit2.ReadOnly:=False;
DateEdit1.Enabled:=True;
Edit3.ReadOnly:=False;
Edit4.ReadOnly:=False;
Edit5.ReadOnly:=False;
Edit6.ReadOnly:=False;
ComboBox1.Enabled:=True;
AjouterButton.Enabled:=false;
ModifierButton.Enabled:=false;
SupprimerButton.Enabled:=false;
AnnulerButton.Enabled:=true;
ValiderButton.Enabled:=true;
end;
procedure TPaiementForm.SupprimerButtonClick(Sender: TObject);
begin
DataModule1.NombreLettreQuery.Active:=False;
DataModule1.NombreLettreQuery.SQL.Text:='SELECT "Max_Facture"()::integer as max_facture;';
DataModule1.NombreLettreQuery.Active:=True;
if StrToInt(Edit1.Text)+1=DataModule1.NombreLettreQuery.FieldByName('max_facture').AsInteger then
begin
Self.Edit1.OnChange:=nil;
Self.DbGrid1.OnCellClick:=nil;
Edit1.ReadOnly:=True;
ClickedButton:='S';
AjouterButton.Enabled:=false;
ModifierButton.Enabled:=false;
SupprimerButton.Enabled:=false;
AnnulerButton.Enabled:=true;
ValiderButton.Enabled:=true;
end
else ShowMessage('impossible de supprimer : ceci n''est pas le dernier numéro de facture');
end;
procedure TPaiementForm.ValiderButtonClick(Sender: TObject);
begin
Self.Edit1.OnChange:=@Self.Edit1Change;
Self.DbGrid1.OnCellClick:=@Self.DbGrid1CellClick;
if DateEdit1.Text=DateToStr(DateEdit1.Date) then
begin
Case ClickedButton of
'N' : Sql:='INSERT INTO "Paiement" (nu_paiement,client,montant,date_paiement,type,ref_commande,mode_paiement,note) VALUES ("Max_Facture"(),'''+Edit2.text+''','''+Edit3.Text+''','''+DateToStr(DateEdit1.Date)+''','+IntToStr(ComboBox1.ItemIndex)+','''+Edit4.Text+''','''+Edit5.Text+''','''+Edit6.Text+''');';
'M' : Sql:='UPDATE "Paiement" SET date_paiement='''+DateToStr(DateEdit1.Date)+''',client='''+Edit2.Text+''',montant='+Edit3.Text+',type='+ IntToStr(ComboBox1.ItemIndex)+',ref_commande='''+Edit4.Text+''',mode_paiement='''+Edit5.Text+''',note='''+Edit6.Text+''' WHERE nu_paiement='''+Edit1.Text+''';';
'S' : Sql:='DELETE FROM "Paiement" WHERE nu_paiement='''+Edit1.Text+''';';
end;
ClickedButton:='V';
Try
DataModule1.PQConnection1.ExecuteDirect('Begin Work;');
DataModule1.PQConnection1.ExecuteDirect(Sql);
DataModule1.PQConnection1.ExecuteDirect('Commit Work;');
Except on E : Exception do
begin
DataModule1.PQConnection1.ExecuteDirect('Rollback Work;');
ShowMessage(E.Message);
end;
end;
end
else
ShowMessage('la date n''est pas valide');
Edit1.ReadOnly:=False;
Edit2.ReadOnly:=True;
DateEdit1.Enabled:=False;
Edit3.ReadOnly:=True;
Edit4.ReadOnly:=True;
Edit5.ReadOnly:=True;
Edit6.ReadOnly:=True;
ComboBox1.Enabled:=False;
AjouterButton.Enabled:=True;
ModifierButton.Enabled:=True;
SupprimerButton.Enabled:=True;
ValiderButton.Enabled:=False;
AnnulerButton.Enabled:=False;
DataModule1.PaiementQuery.Active:=False;
DataModule1.PaiementQuery.Active:=True;
end;
procedure TPaiementForm.AnnulerButtonClick(Sender: TObject);
begin
Self.Edit1.OnChange:=@Self.Edit1Change;
Self.DbGrid1.OnCellClick:=@Self.DbGrid1CellClick;
Edit1.ReadOnly:=False;
Edit2.ReadOnly:=True;
DateEdit1.Enabled:=False;
Edit3.ReadOnly:=True;
Edit4.ReadOnly:=True;
Edit5.ReadOnly:=True;
Edit6.ReadOnly:=True;
ComboBox1.Enabled:=False;
AjouterButton.Enabled:=True;
ModifierButton.Enabled:=True;
SupprimerButton.Enabled:=True;
ValiderButton.Enabled:=False;
AnnulerButton.Enabled:=False;
DataModule1.PaiementQuery.Active:=False;
DataModule1.PaiementQuery.Active:=True;
end;
procedure TPaiementForm.AppercuButtonClick(Sender: TObject);
var reference : String;
begin
if DataModule1.PaiementQuery.Locate('nu_paiement',Edit1.Text,[]) then
begin
DataModule1.ClientQuery.Locate('code_client',DataModule1.PaiementQuery.FieldByName('client').Text,[]);
if DataModule1.PaiementQuery.FieldByName('ref_commande').Text <> '' then
reference:=DataModule1.PaiementQuery.FieldByName('ref_commande').Text
else reference:='B.C du: '+DataModule1.PaiementQuery.FieldByName('date_paiement').Text ;
DataModule1.NombreLettreQuery.Active:=False;
DataModule1.NombreLettreQuery.SQL.Text:='SELECT '''+ Convert(Trunc(DataModule1.PaiementQuery.FieldByName('montant').AsFloat)) +'دينار و '+Convert(StrToInt(FloatToStr(Round(Frac(DataModule1.PaiementQuery.FieldByName('montant').AsFloat)*100))))+'سنتيم'+' بدون رسوم'+''+'''::text as lettre,'''+reference+'''::text as reference;';
DataModule1.NombreLettreQuery.Active:=True;
if DataModule1.PaiementQuery.FieldByName('type').AsInteger=0 then
frReport1.LoadFromFile('data/fichePaiementAvance.lrf')
else frReport1.LoadFromFile('data/fichePaiementGarantie.lrf');
frReport1.ShowReport;
end;
end;
initialization
{$I paiement.lrs}
end.