From 2899adfc3efc725d34dfd72096adcd13fc5dfa5e Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sat, 10 Sep 2016 12:32:15 +0000 Subject: [PATCH] tvplanit: Refactor datastore's LoadEvents (new method LoadEventsOfResource) git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5141 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/tvplanit/source/vpbaseds.pas | 1 + components/tvplanit/source/vpdbds.pas | 35 +++--- components/tvplanit/source/vpflxds.pas | 148 +++++++++++++++++++++++- 3 files changed, 167 insertions(+), 17 deletions(-) diff --git a/components/tvplanit/source/vpbaseds.pas b/components/tvplanit/source/vpbaseds.pas index f6a198f45..65ed81bf9 100644 --- a/components/tvplanit/source/vpbaseds.pas +++ b/components/tvplanit/source/vpbaseds.pas @@ -264,6 +264,7 @@ type procedure Load; virtual; procedure LoadEvents; virtual; abstract; + procedure LoadEventsOfResource(AResID: Integer); virtual; abstract; procedure LoadContacts; virtual; abstract; procedure LoadTasks; virtual; abstract; diff --git a/components/tvplanit/source/vpdbds.pas b/components/tvplanit/source/vpdbds.pas index 225fcc953..120a9f364 100644 --- a/components/tvplanit/source/vpdbds.pas +++ b/components/tvplanit/source/vpdbds.pas @@ -79,22 +79,25 @@ type procedure Load; override; procedure LoadEvents; override; + procedure LoadEventsOfResource(AResID: integer); override; procedure LoadContacts; override; procedure LoadTasks; override; + procedure RefreshEvents; override; procedure RefreshContacts; override; procedure RefreshTasks; override; procedure RefreshResource; override; + procedure PostEvents; override; procedure PostContacts; override; procedure PostTasks; override; procedure PostResources; override; -{ - Added} + procedure PurgeResource(Res: TVpResource); override; procedure PurgeEvents(Res: TVpResource); override; procedure PurgeContacts(Res: TVpResource); override; procedure PurgeTasks(Res: TVpResource); override; -{ - End} + procedure SetResourceByName(Value: string); override; procedure CreateFieldDefs(const TableName : string; FieldDefs : TFieldDefs); virtual; @@ -1028,24 +1031,28 @@ begin end; {=====} +{ Load this resource's events into memory } procedure TVpCustomDBDataStore.LoadEvents; +begin + if Resource <> nil then + LoadEventsOfResource(Resource.ResourceID); +end; + +{ Load the events of the specified resource into memory } +procedure TVpCustomDBDataStore.LoadEventsOfResource(AResID: Integer); var + res: TVpResource; Event: TVpEvent; F: TField; begin - if Resource <> nil then - { Load this resource's events into memory } + // Find the resource belonging to the specified ID. + res := Resources.GetResource(AResID); + if res <> nil then with EventsTable do begin - SetFilterCriteria( - EventsTable, - True, - ResourceTable.FieldByName('ResourceID').AsInteger, - TimeRange.StartTime, - TimeRange.EndTime - ); + SetFilterCriteria(EventsTable, true, AResID, TimeRange.StartTime, TimeRange.EndTime); First; while not EventsTable.EOF do begin - Event := Resource.Schedule.AddEvent( + Event := res.Schedule.AddEvent( FieldByName('RecordID').AsInteger, FieldByName('StartTime').AsDateTime, FieldByName('EndTime').AsDateTime @@ -1053,7 +1060,7 @@ begin if Event <> nil then begin Event.Loading := true; Event.Description := FieldByName('Description').AsString; - F := FieldByName('Location'); // new + F := FieldByName('Location'); if F <> nil then Event.Location := F.AsString; Event.Notes := FieldByName('Notes').AsString; Event.Category := FieldByName('Category').AsInteger; @@ -1086,12 +1093,10 @@ begin if F <> nil then Event.UserField8 := F.AsString; F := FindField('UserField9'); if F <> nil then Event.UserField9 := F.AsString; - Event.Loading := false; end; Next; end; {while} - end; {with EventsTable} end; {=====} diff --git a/components/tvplanit/source/vpflxds.pas b/components/tvplanit/source/vpflxds.pas index c535eb047..c874801e8 100644 --- a/components/tvplanit/source/vpflxds.pas +++ b/components/tvplanit/source/vpflxds.pas @@ -144,7 +144,7 @@ type destructor Destroy; override; procedure Load; override; - procedure LoadEvents; override; + procedure LoadEventsOfResource(AResID: Integer); override; procedure LoadContacts; override; procedure LoadTasks; override; procedure RefreshEvents; override; @@ -540,6 +540,150 @@ begin end; {=====} +procedure TVpFlexDataStore.LoadEventsOfResource(AResID: Integer); +var + res: TVpResource; + Event: TVpEvent; + {Field Name} + FN1, FN2, FN3: string; +begin + res := Resources.GetResource(AResID); + if (FEventsDataSrc = nil) or (FEventsDataSrc.DataSet = nil) then + Exit; + + if (res <> nil) then begin + SetFilterCriteria(FEventsDataSrc.DataSet, True, AResID, + TimeRange.StartTime, TimeRange.EndTime); + + if (FEventsDataSrc = nil) or + (FEventsDataSrc.DataSet = nil) or (not FEventsDataSrc.DataSet.Active) + then + Exit; + + with FEventsDataSrc.Dataset do begin + First; + + while not EOF do begin + FN1 := GetFieldName(FEventMappings, 'RecordID'); + FN2 := GetFieldName(FEventMappings, 'StartTime'); + FN3 := GetFieldName(FEventMappings, 'EndTime'); + if (FN1 <> '') and (FN2 <> '') and (FN3 <> '') then begin + Event := res.Schedule.AddEvent(FieldByName(FN1).AsInteger, + FieldByName(FN2).AsDateTime, FieldByName(FN3).AsDateTime); + + if Event <> nil then begin + Event.Loading := true; + + FN1 := GetFieldName(FEventMappings, 'Description'); + if (FN1 <> '') then + Event.Description := FieldByName(FN1).AsString; + + FN1 := GetFieldName(FEventMappings, 'Location'); // new + if (FN1 <> '') then + Event.Location := FieldByName(FN1).AsString; + + FN1 := GetFieldName(FEventMappings, 'Notes'); + if (FN1 = '') then FN1 := GetFieldName(FEventMappings, 'Note'); // deprecated + if (FN1 <> '') then + Event.Notes := FieldByName(FN1).AsString; + + FN1 := GetFieldName(FEventMappings, 'Category'); + if (FN1 <> '') then + Event.Category := FieldByName(FN1).AsInteger; + + FN1 := GetFieldName(FEventMappings, 'DingPath'); + if FN1 = '' then + FN1 := GetFieldName(FEventMappings, 'AlarmWavPath'); // deprectated + if (FN1 <> '') then + Event.DingPath := FieldByName(FN1).AsString; + + FN1 := GetFieldName(FEventMappings, 'AllDayEvent'); + if (FN1 <> '') then + Event.AllDayEvent := FieldByName(FN1).AsBoolean; + + FN1 := GetFieldName(FEventMappings, 'AlarmSet'); + if (FN1 <> '') then + Event.AlarmSet := FieldByName(FN1).AsBoolean; + + FN1 := GetFieldName(FEventMappings, 'AlarmAdvance'); + if FN1 = '' then + FN1 := GetFieldName(FEventMappings, 'AlarmAdv'); // deprecated + if (FN1 <> '') then + Event.AlarmAdvance := FieldByName(FN1).AsInteger; + + FN1 := GetFieldName(FEventMappings, 'AlarmAdvanceType'); + if FN1 = '' then + FN1 := GetFieldName(FEventMappings, 'AlarmAdvType'); // deprecated + if (FN1 <> '') then + Event.AlarmAdvanceType := TVpAlarmAdvType(FieldByName(FN1).AsInteger); + + FN1 := GetFieldName(FEventMappings, 'SnoozeTime'); + if (FN1 <> '') then + Event.SnoozeTime := FieldByName(FN1).AsDateTime; + + FN1 := GetFieldName(FEventMappings, 'RepeatCode'); + if (FN1 <> '') then + Event.RepeatCode := TVpRepeatType(FieldByName(FN1).AsInteger); + + FN1 := GetFieldName(FEventMappings, 'RepeatRangeEnd'); + if (FN1 <> '') then + Event.RepeatRangeEnd := FieldByName(FN1).AsDateTime; + + FN1 := GetfieldName(FEventMappings, 'CustomInterval'); + if FN1 = '' then + FN1 := GetFieldName(FEventMappings, 'CustInterval'); + if (FN1 <> '') then + Event.CustomInterval := FieldByName(FN1).AsInteger; + + FN1 := GetFieldName(FEventMappings, 'UserField0'); + if (FN1 <> '') then + Event.UserField0 := FieldByName(FN1).AsString; + + FN1 := GetFieldName(FEventMappings, 'UserField1'); + if (FN1 <> '') then + Event.UserField1 := FieldByName(FN1).AsString; + + FN1 := GetFieldName(FEventMappings, 'UserField2'); + if (FN1 <> '') then + Event.UserField2 := FieldByName(FN1).AsString; + + FN1 := GetFieldName(FEventMappings, 'UserField3'); + if (FN1 <> '') then + Event.UserField3 := FieldByName(FN1).AsString; + + FN1 := GetFieldName(FEventMappings, 'UserField4'); + if (FN1 <> '') then + Event.UserField4 := FieldByName(FN1).AsString; + + FN1 := GetFieldName(FEventMappings, 'UserField5'); + if (FN1 <> '') then + Event.UserField5 := FieldByName(FN1).AsString; + + FN1 := GetFieldName(FEventMappings, 'UserField6'); + if (FN1 <> '') then + Event.UserField6 := FieldByName(FN1).AsString; + + FN1 := GetFieldName(FEventMappings, 'UserField7'); + if (FN1 <> '') then + Event.UserField7 := FieldByName(FN1).AsString; + + FN1 := GetFieldName(FEventMappings, 'UserField8'); + if (FN1 <> '') then + Event.UserField8 := FieldByName(FN1).AsString; + + FN1 := GetFieldName(FEventMappings, 'UserField9'); + if (FN1 <> '') then + Event.UserField9 := FieldByName(FN1).AsString; + + Event.Loading := false; + end; {if Event <> nil} + end; {if (FN1 <> '') and (FN2 <> '') and (FN3 <> '')} + Next; + end; {while} + end; {with FEventsDataSrc.Dataset} + end; {if resource <> nil} +end; + (* procedure TVpFlexDataStore.LoadEvents; var Event: TVpEvent; @@ -681,7 +825,7 @@ begin end; {while} end; {with FEventsDataSrc.Dataset} end; {if resource <> nil} -end; +end;*) {=====} procedure TVpFlexDataStore.LoadContacts;