unit uartikelgruppe;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LazLoggerBase, DBCtrls, Contnrs, fgl, dtm_basis;

type

  { TArtikelgruppe }

  TArtikelgruppe = class(TObject)
  private
    fIsChanged: boolean;
    fID: integer;
    fIDColor: integer;
    fArtikelgruppe: string;
  public
    constructor Create;
    destructor Destroy;

    procedure SetIDColor(const aValue: integer);
    procedure SetArtikelgruppe(const aValue: string);

    procedure Init;
    procedure ReadByID(ID: integer);
    procedure WriteData;
    procedure ReadData(Query: string);
  published
    // idartikelgruppe, artikelgruppe, fk_color
    property IsChanged: boolean read fIsChanged write fIsChanged default False;
    property ID: integer read fID write fID default -1;
    property IDColor: integer read fIDColor write SetIDcolor default 0;
    property Artikelgruppe: string read fArtikelgruppe write SetArtikelgruppe;
  end;

  { TArtikelgruppenListe }

  TArtikelgruppenListe = class(specialize TFPGObjectList<TArtikelgruppe>)
  private

  public
    function Add(Obj: TArtikelgruppe): integer;// override;
    procedure ReadAllData;
    procedure ReadListData(Query: string);
  published

  end;

implementation

{ TArtikelgruppenListe }

function TArtikelgruppenListe.Add(Obj: TArtikelgruppe): integer;
begin
  inherited Add(Obj);
end;

procedure TArtikelgruppenListe.ReadAllData;
begin
  ReadListData('Select * from ArtikelGruppen');
end;

procedure TArtikelgruppenListe.ReadListData(Query: string);
var
  TempObj: TArtikelGruppe;
begin
  debugln('TArtikelgruppenListe.ReadListData:');
  debugln('  ' + Query);
  with dtmBasis.qrySQL do
  begin
    try
      SQL.Text := Query;
      Open;
      if RecordCount > 0 then
      begin
        First;
        while not EOF do
        begin
          TempObj := TArtikelgruppe.Create;

          TempObj.ID := FieldByName('idartikelgruppe').AsInteger;
          TempObj.IDColor := FieldByName('fk_color').AsInteger;
          TempObj.Artikelgruppe := FieldByName('artikelgruppe').AsString;

          Self.Add(TempObj);

          //TempObj.Free;
          Next;
        end;
      end;
      Close;
    except
      On E: Exception do
        debugln(' ' + E.Message)
    end;
  end;
end;

{ TArtikelgruppe }

procedure TArtikelgruppe.SetIDColor(const aValue: integer);
begin
  if fIDColor = aValue then
    exit;
  fIDColor := aValue;
  IsChanged := True;
end;

procedure TArtikelgruppe.SetArtikelgruppe(const aValue: string);
begin
  if fArtikelgruppe = aValue then
    exit;
  fArtikelgruppe := aValue;
  IsChanged := True;
end;


constructor TArtikelgruppe.Create;
begin
  inherited Create;
  Init;
end;

procedure TArtikelgruppe.Init;
begin
  fID := -1;
  fIDColor := 0;
  fArtikelgruppe := '';
end;

procedure TArtikelgruppe.ReadByID(ID: integer);
begin
  ReadData('Select * from ArtikelGruppen where idartikelgruppe = ' + IntToStr(ID));
end;

procedure TArtikelgruppe.WriteData;
begin
  debugln('TArtikelgruppe.WriteData: ');
  if fIsChanged then
  begin
    fIsChanged := False;
    with dtmBasis.qrySQL do
    begin
      if fID < 0 then
      begin
        SQL.Clear;
        SQL.Add('Insert Into ArtikelGruppen');
        SQL.Add('(fk_color, artikelgruppe)');
        SQL.ADD('VALUES');
        SQL.ADD('(:fk_color, :artikelgruppe);');
        Prepare;
      end
      else
      begin  //Update
        DebugLn('  Datensatz ' + IntToStr(fid) + ' wird aktualisiert');
        SQL.Clear;
        SQL.ADD('UPDATE ArtikelGruppen SET');
        SQL.ADD('fk_color = :fk_color,');
        SQL.ADD('artikelgruppe = :artikelgruppe');
        SQL.ADD('WHERE idartikelgruppe = :idartikelgruppe;');
        Params.ParamByName('idartikelgruppe').AsInteger := fID;
      end;
      Params.ParamByName('fk_color').AsInteger := fIDColor;
      Params.ParamByName('artikelgruppe').AsString := fArtikelgruppe;
      try
        ExecSQL;
        DebugLn('  Gespeichert!');
        if fID = -1 then
        begin
          SQL.Text := 'SELECT * FROM view_lastid';
          Open;
          fID := FieldByName('LastID').AsInteger;
          debugLn('  Neue ID ist: ' + IntToStr(fID));
          Close;
        end;
      except
        On E: Exception do
          debugln(' ' + E.Message);
      end;
    end;
  end
  else
    DebugLn('  Nicht gespeichert: Datensatz aktuell');
end;

procedure TArtikelgruppe.ReadData(Query: string);
begin
  debugln('TArtikelgruppe.ReadData:');
  debugln('  ' + Query);
  with dtmBasis.qrySQL do
  begin
    try
      SQL.Text := Query;
      Open;
      debugln(IntToStr(RecordCount));
      if RecordCount > 0 then
      begin
        fID := FieldByName('idartikelgruppe').AsInteger;
        fIDColor := FieldByName('fk_color').AsInteger;
        fArtikelgruppe := FieldByName('artikelgruppe').AsString;
      end
      else
        fID := -1;
       Close;
    except
      On E: Exception do
        debugln(' ' + E.Message)
    end;
  end;
end;

destructor TArtikelgruppe.Destroy;
begin
  inherited Destroy;
end;


end.
