TvPlanIt: Deletion of a resource deletes also the associated events, contacts and tasks. Tested with all database datastores. Update datastore sample projects.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8947 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2023-10-10 22:24:46 +00:00
parent f54a1641df
commit f0d8344fee
19 changed files with 611 additions and 692 deletions

View File

@ -64,6 +64,10 @@ type
procedure SetReadOnly(const Value: boolean);
{ internal methods }
procedure InternalPurgeContacts(Res: TVpResource); override;
procedure InternalPurgeEvents(Res: TVpResource); override;
procedure InternalPurgeTasks(Res: TVpResource); override;
procedure LoadContact(AContact: TVpContact); virtual;
procedure LoadTask(ATask: TVpTask); virtual;
procedure SetFilterCriteria(ATable: TDataset; AUseDateTime: Boolean;
@ -96,9 +100,6 @@ type
procedure PostResources; override;
procedure PurgeResource(Res: TVpResource); override;
procedure PurgeEvents(Res: TVpResource); override;
procedure PurgeContacts(Res: TVpResource); override;
procedure PurgeTasks(Res: TVpResource); override;
procedure SetResourceByName(Value: string); override;
procedure CreateFieldDefs(const TableName: string; FieldDefs: TFieldDefs); virtual;
@ -1879,7 +1880,6 @@ begin
end;
end;
{ - Added}
procedure TVpCustomDBDataStore.PurgeResource(Res: TVpResource);
begin
Res.Deleted := true;
@ -1887,27 +1887,64 @@ begin
Load;
end;
procedure TVpCustomDBDataStore.PurgeEvents(Res: TVpResource);
{ Deletes all events from the database which are assigned to the specified
resource. Does this by iterating over the dataset.
Override if the descendant class provides a more efficient method. }
procedure TVpCustomDBDataStore.InternalPurgeEvents(Res: TVpResource);
var
resIDField: TField;
begin
{ Purging the events from the database is done by the descendant !!.01}
{ classes !!.01}
inherited;
Assert(Res <> nil);
EventsTable.Open;
EventsTable.First;
resIDField := EventsTable.FieldByName('ResourceID');
while not EventsTable.EOF do
begin
if resIDField.AsInteger = Res.ResourceID then
EventsTable.Delete
else
EventsTable.Next;
end;
end;
procedure TVpCustomDBDataStore.PurgeContacts(Res: TVpResource);
{ Deletes all contacts from the database which are assigned to the specified
resource. Does this by iterating over the dataset. Override if the descendant
class provides a more efficient method. }
procedure TVpCustomDBDataStore.InternalPurgeContacts(Res: TVpResource);
var
resIDField: TField;
begin
{ Purging the contacts from the database is done by the descendant !!.01}
{ classes !!.01}
inherited;
ContactsTable.Open;
ContactsTable.First;
resIDField := ContactsTable.FieldByName('ResourceID');
while not ContactsTable.EOF do
begin
if resIDField.AsInteger = Res.ResourceID then
ContactsTable.Delete
else
ContactsTable.Next;
end;
end;
procedure TVpCustomDBDataStore.PurgeTasks(Res: TVpResource);
{ Deletes all tasks from the database which are assigned to the specified
resource. Does this by iterating over the dataset. Override if the descendant
class provides a more efficient method. }
procedure TVpCustomDBDataStore.InternalPurgeTasks(Res: TVpResource);
var
resIDField: TField;
begin
{ Purging the tasks from the database is done by the descendant !!.01}
{ classes !!.01}
inherited;
TasksTable.Open;
TasksTable.First;
resIDField := TasksTable.FieldByName('ResourceID');
while not TasksTable.EOF do
begin
if resIDField.AsInteger = Res.ResourceID then
TasksTable.Delete
else
TasksTable.Next;
end;
end;
{ - End}
procedure TVpCustomDBDataStore.SetResourceByName(Value: string);
var