unit mdlingave; {$mode objfpc} interface uses Classes, SysUtils; Const MaxCol = 15; // 3*5 Type { TArtikelData } TArtikelData = Class(TObject) private FCode: String; FMaxCount: Integer; FOmschrijving: string; Public Property Code : String Read FCode Write FCode; Property Omschrijving : string Read FOmschrijving Write FOmschrijving; Property MaxCount : Integer Read FMaxCount write FMaxCount; end; { TIngaveKolom } TIngaveKolom = Class(TCollectionItem) private FArtikelID: Integer; FCode: String; FDatum: TDateTime; FDetailBoekID: Integer; FMaxCount: Integer; FOmschrijving: string; Public Function Match(AArtikel : Integer; ADatum : TDateTime) : Boolean; Property ArtikelID : Integer Read FArtikelID Write FArtikelID; Property DetailBoekID : Integer Read FDetailBoekID Write FDetailBoekID; Property Code : String Read FCode Write FCode; Property Omschrijving : string Read FOmschrijving Write FOmschrijving; Property MaxCount : Integer Read FMaxCount Write FMaxCount; Property Datum : TDateTime Read FDatum Write FDatum; end; { TIngaveKolommen } TIngaveKolommen = Class(TCollection) private function GetK(AIndex : Integer): TIngaveKolom; procedure SetK(AIndex : Integer; const AValue: TIngaveKolom); Public Function IndexOfKolom(AArtikelID: Integer; ADatum : TDateTime) : Integer; Function FindKolom(AArtikelID: Integer; ADatum : TDateTime) : TIngaveKolom; Function AddKolom(AArtikelID: Integer; ADatum : TDateTime) : TIngaveKolom; Property Kolom[AIndex : Integer] : TIngaveKolom Read GetK Write SetK; default; end; { TKolomData } TKolomData = Class(TObject) private FAantal: Integer; FCB: Integer; FID: Integer; Public Property DYID : Integer Read FID Write FID; Property CreatedBy : Integer Read FCB Write FCB; Property Aantal : Integer Read FAantal Write FAantal; end; { TIngaveLijn } TIngaveLijn = Class(TCollectionItem) private Fkolom : Array[1..MaxCol] of TKolomData; FklantID: Integer; FNaam: String; FVoornaam: String; function GetK(AIndex : Integer): TKolomData; Public Constructor Create(ACollection : TCollection); override; Destructor Destroy; override; Property KlantID : Integer Read FklantID Write FklantID; Property Naam : String Read FNaam Write FNaam; Property Voornaam : String Read FVoornaam Write FVoorNaam; Property Kolom[AIndex : Integer] : TKolomData Read GetK; default; end; { TIngaveLijnen } TIngaveLijnen = Class(TCollection) private function GetL(AIndex : Integer): TIngaveLijn; procedure SetL(AIndex : Integer; const AValue: TIngaveLijn); Public Function IndexOfLijn(Const AKlantID: Integer) : Integer; Function FindLijn(Const AKlantID: Integer) : TIngaveLijn; Property Lijnen[AIndex : Integer] : TIngaveLijn Read GetL Write SetL; default; end; implementation { TIngaveKolom } function TIngaveKolom.Match(AArtikel: Integer; ADatum: TDateTime): Boolean; begin Result:=(AArtikel=ArtikelID) and (Round(FDatum)=Round(ADatum)); end; { TIngaveKolommen } function TIngaveKolommen.GetK(AIndex : Integer): TIngaveKolom; begin Result:=TIngaveKolom(Items[AIndex]); end; procedure TIngaveKolommen.SetK(AIndex : Integer; const AValue: TIngaveKolom); begin Items[AIndex]:=AValue; end; function TIngaveKolommen.IndexOfKolom(AArtikelID: Integer; ADatum: TDateTime): Integer; begin Result:=Count-1; While (Result>=0) and Not Getk(Result).Match(AArtikelID,ADatum) do Dec(Result); end; function TIngaveKolommen.FindKolom(AArtikelID: Integer; ADatum: TDateTime): TIngaveKolom; Var I : Integer; begin I:=IndexOfKolom(AArtikelID,ADatum); If (I=-1) then Result:=Nil else Result:=GetK(I); end; function TIngaveKolommen.AddKolom(AArtikelID: Integer; ADatum: TDateTime ): TIngaveKolom; begin Result:=FindKolom(AArtikelID,ADatum); If (Result=Nil) then begin Result:=Add as TIngaveKolom; Result.ArtikelID:=AArtikelID; Result.Datum:=ADatum; end; end; { TIngaveLijn } function TIngaveLijn.GetK(AIndex : Integer): TKolomData; begin If (AIndex>=1) and (AIndex<=MaxCol) then Result:=FKolom[AIndex] else Raise Exception.CreateFmt('Ongeldige kolom-index: %d. Index moet tussen 1 en %d liggen',[AIndex,MaxCol]); end; constructor TIngaveLijn.Create(ACollection: TCollection); Var I : Integer; begin inherited Create(ACollection); For I:=1 to maxCol do FKolom[i]:=TKolomData.Create; end; destructor TIngaveLijn.Destroy; Var I : Integer; begin For I:=1 to maxCol do FreeAndNil(FKolom[i]); inherited Destroy; end; { TIngaveLijnen } function TIngaveLijnen.GetL(AIndex : Integer): TIngaveLijn; begin Result:=TIngaveLijn(Items[AIndex]); end; procedure TIngaveLijnen.SetL(AIndex : Integer; const AValue: TIngaveLijn); begin Items[AIndex]:=AValue; end; function TIngaveLijnen.IndexOfLijn(const AKlantID: Integer): Integer; begin Result:=Count-1; While (Result>=0) and (GetL(Result).KlantID<>AKlantID) do Dec(Result); end; function TIngaveLijnen.FindLijn(const AKlantID: Integer): TIngaveLijn; Var I : Integer; begin I:=IndexOfLijn(AKlantID); If (I=-1) then Result:=Nil else Result:=GetL(i); end; end.