Inhalt

Aktueller Ordner: duesseldorfer-schuelerinventar-freepascal-client
⬅ Übergeordnet

u_groups.pas

unit u_groups;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Grids,
  fpjson, u_api;

type

  { TGroupManagerForm }

  TGroupManagerForm = class(TForm)
    btnAdd: TButton;
    btnClose: TButton;
    btnDelete: TButton;
    edtNewGroup: TEdit;
    Label1: TLabel;
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    FUserID: string;
    FSession: string;
    FGroups: TJSONArray;
    procedure LoadGroups;
    procedure UpdateGrid;
    procedure OnAddClick(Sender: TObject);
    procedure OnDeleteClick(Sender: TObject);
    procedure OnCloseClick(Sender: TObject);
  public
    constructor Create(AOwner: TComponent; const UserID, Session: string); reintroduce;
  end;

implementation

{$R *.lfm}

{ TGroupManagerForm }

constructor TGroupManagerForm.Create(AOwner: TComponent; const UserID, Session: string);
begin
  inherited Create(AOwner);
  FUserID := UserID;
  FSession := Session;
  Caption := 'Gruppenverwaltung';
  Width := 500;
  Height := 400;
  Position := poScreenCenter;
end;

procedure TGroupManagerForm.FormCreate(Sender: TObject);
begin
  StringGrid1.ColCount := 2;
  StringGrid1.RowCount := 1;
  StringGrid1.FixedCols := 0;
  StringGrid1.Cells[0, 0] := 'Gruppenname';
  StringGrid1.Cells[1, 0] := '';
  StringGrid1.ColWidths[0] := 380;
  StringGrid1.ColWidths[1] := 50;
  
  // Buttons manuell verbinden
  btnAdd.OnClick := @OnAddClick;
  btnDelete.OnClick := @OnDeleteClick;
  btnClose.OnClick := @OnCloseClick;
end;

procedure TGroupManagerForm.FormShow(Sender: TObject);
begin
  LoadGroups;
end;

procedure TGroupManagerForm.LoadGroups;
begin
  if Assigned(FGroups) then
    FGroups.Free;
  FGroups := GetGroups(FUserID, FSession);
  UpdateGrid;
end;

procedure TGroupManagerForm.UpdateGrid;
var
  i: Integer;
  Group: TJSONObject;
begin
  if not Assigned(FGroups) then
  begin
    StringGrid1.RowCount := 1;
    Exit;
  end;
  
  StringGrid1.RowCount := FGroups.Count + 1;
  for i := 0 to FGroups.Count - 1 do
  begin
    Group := TJSONObject(FGroups.Objects[i]);
    StringGrid1.Cells[0, i + 1] := Group.Get('name', '');
  end;
end;

procedure TGroupManagerForm.OnAddClick(Sender: TObject);
var
  GroupName: string;
begin
  GroupName := Trim(edtNewGroup.Text);
  if GroupName = '' then
  begin
    ShowMessage('Bitte Gruppennamen eingeben');
    Exit;
  end;
  
  if CreateGroup(FUserID, FSession, GroupName) then
  begin
    edtNewGroup.Text := '';
    LoadGroups;
  end
  else
    ShowMessage('Fehler beim Erstellen der Gruppe');
end;

procedure TGroupManagerForm.OnDeleteClick(Sender: TObject);
var
  Row: Integer;
  GroupName: string;
  GroupID: Integer;
begin
  Row := StringGrid1.Row;
  if Row < 1 then
    Exit;
    
  GroupName := StringGrid1.Cells[0, Row];
  GroupID := 0;
  if Assigned(FGroups) and (Row - 1 < FGroups.Count) then
    GroupID := TJSONObject(FGroups.Objects[Row-1]).Get('gruppeID', 0);
  
  if GroupID = 0 then
  begin
    ShowMessage('Gruppe nicht gefunden');
    Exit;
  end;
  
  if MessageDlg('Gruppe löschen', Format('Möchten Sie "%s" wirklich löschen?', [GroupName]),
    mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
    if DeleteGroup(FUserID, FSession, GroupID) then
      LoadGroups
    else
      ShowMessage('Fehler beim Löschen der Gruppe');
  end;
end;

procedure TGroupManagerForm.OnCloseClick(Sender: TObject);
begin
  Close;
end;

end.