VistA-cprs/CPRS-Chart/rDCSumm.pas

692 lines
23 KiB
Plaintext

unit rDCSumm;
interface
uses SysUtils, Classes, ORNet, ORFn, rCore, uCore, TRPCB, rTIU, uConst, uTIU, uDCSumm;
{ Discharge Summary Titles }
procedure ResetDCSummTitles;
function DfltDCSummTitle: Integer;
function DfltDCSummTitleName: string;
procedure ListDCSummTitlesShort(Dest: TStrings);
function SubSetOfDCSummTitles(const StartFrom: string; Direction: Integer; IDNoteTitlesOnly: boolean): TStrings;
{ TIU Preferences }
procedure ResetDCSummPreferences;
function ReturnMaxDCSumms: Integer;
function SortDCSummsAscending: Boolean;
function GetCurrentDCSummContext: TTIUContext;
procedure SaveCurrentDCSummContext(AContext: TTIUContext) ;
{ Data Retrieval }
procedure ActOnDCDocument(var AuthSts: TActionRec; IEN: Integer; const ActionName: string);
(*procedure ListDischargeSummaries(Dest: TStrings; Context: Integer; Early, Late: TFMDateTime;
Person: int64; OccLim: Integer; SortAscending: Boolean);*)
procedure ListSummsForTree(Dest: TStrings; Context: Integer; Early, Late: TFMDateTime;
Person: int64; OccLim: Integer; SortAscending: Boolean);
procedure GetDCSummForEdit(var EditRec: TEditDCSummRec; IEN: Integer);
function LoadDCUrgencies: TStrings;
function GetAttending(const DFN: string): string; //*DFN*
function GetDischargeDate(const DFN: string; AdmitDateTime: string): string; //*DFN*
function RequireRelease(ANote, AType: Integer): Boolean;
function RequireMASVerification(ANote, AType: Integer): Boolean;
function AllowMultipleSummsPerAdmission(ANote, AType: Integer): Boolean;
{ Data Storage }
procedure DeleteDCDocument(var DeleteSts: TActionRec; IEN: Integer; const Reason: string);
procedure SignDCDocument(var SignSts: TActionRec; IEN: Integer; const ESCode: string);
procedure PutNewDCSumm(var CreatedDoc: TCreatedDoc; const DCSummRec: TDCSummRec);
procedure PutDCAddendum(var CreatedDoc: TCreatedDoc; const DCSummRec: TDCSummRec; AddendumTo:
Integer);
procedure PutEditedDCSumm(var UpdatedDoc: TCreatedDoc; const DCSummRec: TDCSummRec; NoteIEN:
Integer);
procedure ChangeAttending(IEN: integer; AnAttending: int64);
const
CLS_DC_SUMM = 244;
FN_HOSPITAL_LOCATION = 44;
FN_NEW_PERSON = 200;
TIU_ST_UNREL = 3;
TIU_ST_UNVER = 4;
TIU_ST_UNSIG = 5;
implementation
var
uDCSummTitles: TDCSummTitles;
uDCSummPrefs: TDCSummPrefs;
{ Discharge Summary Titles -------------------------------------------------------------------- }
procedure LoadDCSummTitles;
{ private - called one time to set up the uNoteTitles object }
var
x: string;
begin
if uDCSummTitles <> nil then Exit;
CallV('TIU PERSONAL TITLE LIST', [User.DUZ, CLS_DC_SUMM]);
RPCBrokerV.Results.Insert(0, '~SHORT LIST'); // insert so can call ExtractItems
uDCSummTitles := TDCSummTitles.Create;
ExtractItems(uDCSummTitles.ShortList, RPCBrokerV.Results, 'SHORT LIST');
x := ExtractDefault(RPCBrokerV.Results, 'SHORT LIST');
uDCSummTitles.DfltTitle := StrToIntDef(Piece(x, U, 1), 0);
uDCSummTitles.DfltTitleName := Piece(x, U, 2);
end;
procedure ResetDCSummTitles;
begin
if uDCSummTitles <> nil then
begin
uDCSummTitles.Free;
uDCSummTitles := nil;
LoadDCSummTitles;
end;
end;
function DfltDCSummTitle: Integer;
{ returns the IEN of the user defined default Discharge Summary title (if any) }
begin
if uDCSummTitles = nil then LoadDCSummTitles;
Result := uDCSummTitles.DfltTitle;
end;
function DfltDCSummTitleName: string;
{ returns the name of the user defined default Discharge Summary title (if any) }
begin
if uDCSummTitles = nil then LoadDCSummTitles;
Result := uDCSummTitles.DfltTitleName;
end;
procedure ListDCSummTitlesShort(Dest: TStrings);
{ returns the user defined list (short list) of Discharge Summary titles }
begin
if uDCSummTitles = nil then LoadDCSummTitles;
FastAddStrings(uDCSummTitles.ShortList, Dest);
if uDCSummTitles.ShortList.Count > 0 then
begin
Dest.Add('0^________________________________________________________________________');
Dest.Add('0^ ');
end;
end;
function SubSetOfDCSummTitles(const StartFrom: string; Direction: Integer; IDNoteTitlesOnly: boolean): TStrings;
{ returns a pointer to a list of Discharge Summary titles (for use in a long list box) -
The return value is a pointer to RPCBrokerV.Results, so the data must be used BEFORE
the next broker call! }
begin
if IDNoteTitlesOnly then
CallV('TIU LONG LIST OF TITLES', [CLS_DC_SUMM, StartFrom, Direction, IDNoteTitlesOnly])
else
CallV('TIU LONG LIST OF TITLES', [CLS_DC_SUMM, StartFrom, Direction]);
//MixedCaseList(RPCBrokerV.Results);
Result := RPCBrokerV.Results;
end;
{ TIU Preferences ------------------------------------------------------------------------- }
procedure LoadDCSummPrefs;
{ private - creates DCSummPrefs object for reference throughout the session }
var
x: string;
begin
uDCSummPrefs := TDCSummPrefs.Create;
with uDCSummPrefs do
begin
x := sCallV('TIU GET PERSONAL PREFERENCES', [User.DUZ]);
DfltLoc := StrToIntDef(Piece(x, U, 2), 0);
DfltLocName := ExternalName(DfltLoc, FN_HOSPITAL_LOCATION);
SortAscending := Piece(x, U, 4) = 'A';
MaxSumms := StrToIntDef(Piece(x, U, 10), 0);
x := GetAttending(Patient.DFN);
DfltCosigner := StrToInt64Def(Piece(x, U, 1), 0);
DfltCosignerName := ExternalName(DfltCosigner, FN_NEW_PERSON);
AskCosigner := User.DUZ <> DfltCosigner;
end;
end;
procedure ResetDCSummPreferences;
begin
if uDCSummPrefs <> nil then
begin
uDCSummPrefs.Free;
uDCSummPrefs := nil;
LoadDCSummPrefs;
end;
end;
function ReturnMaxDCSumms: Integer;
begin
if uDCSummPrefs = nil then LoadDCSummPrefs;
Result := uDCSummPrefs.MaxSumms;
if Result = 0 then Result := 100;
end;
function SortDCSummsAscending: Boolean;
{ returns true if Discharge Summarys should be sorted from oldest to newest (chronological) }
begin
if uDCSummPrefs = nil then LoadDCSummPrefs;
Result := uDCSummPrefs.SortAscending;
end;
{ Data Retrieval --------------------------------------------------------------------------- }
procedure ActOnDCDocument(var AuthSts: TActionRec; IEN: Integer; const ActionName: string);
var
x: string;
begin
if not (IEN > 0) then
begin
AuthSts.Success := True;
AuthSts.Reason := '';
Exit;
end;
x := sCallV('TIU AUTHORIZATION', [IEN, ActionName]);
AuthSts.Success := Piece(x, U, 1) = '1';
AuthSts.Reason := Piece(x, U, 2);
end;
(*procedure ListDischargeSummaries(Dest: TStrings; Context: Integer; Early, Late: TFMDateTime;
Person: int64; OccLim: Integer; SortAscending: Boolean);
{ retrieves existing progress notes for a patient according to the parameters passed in
Pieces: IEN^Title^FMDateOfNote^Patient^Author^Location^Status^Visit
Return: IEN^ExDateOfNote^Title, Location, Author }
var
i: Integer;
x: string;
SortSeq: Char;
begin
if SortAscending then SortSeq := 'A' else SortSeq := 'D';
//if OccLim = 0 then OccLim := MaxSummsReturned;
CallV('TIU DOCUMENTS BY CONTEXT',
[CLS_DC_SUMM, Context, Patient.DFN, Early, Late, Person, OccLim, SortSeq]);
with RPCBrokerV do
begin
for i := 0 to Results.Count - 1 do
begin
x := Results[i];
if Copy(Piece(x, U, 9), 1, 4) = ' ' then SetPiece(x, U, 9, 'Dis: ');
x := Piece(x, U, 1) + U + FormatFMDateTime('mmm dd,yy', MakeFMDateTime(Piece(x, U, 3)))
+ U + Piece(x, U, 2) + ', ' + Piece(x, U, 6) + ', ' + Piece(Piece(x, U, 5), ';', 2) +
' (' + Piece(x,U,7) + '), ' + Piece(x, U, 8) + ', ' + Piece(x, U, 9) +
U + Piece(x, U, 3) + U + Piece(x, U, 11);
Results[i] := x;
end; {for}
FastAssign(RPCBrokerV.Results, Dest);
end; {with}
end;*)
procedure ListSummsForTree(Dest: TStrings; Context: Integer; Early, Late: TFMDateTime;
Person: int64; OccLim: Integer; SortAscending: Boolean);
{ retrieves existing discharge summaries for a patient according to the parameters passed in}
var
SortSeq: Char;
const
SHOW_ADDENDA = True;
begin
if SortAscending then SortSeq := 'A' else SortSeq := 'D';
if Context > 0 then
begin
CallV('TIU DOCUMENTS BY CONTEXT', [CLS_DC_SUMM, Context, Patient.DFN, Early, Late, Person, OccLim, SortSeq, SHOW_ADDENDA]);
FastAssign(RPCBrokerV.Results, Dest);
end;
end;
procedure GetDCSummForEdit(var EditRec: TEditDCSummRec; IEN: Integer);
{ retrieves internal/external values for Discharge Summary fields & loads them into EditRec
Fields: Title:.01, RefDate:1301, Author:1204, Cosigner:1208, Subject:1701, Location:1205 }
var
i, j: Integer;
function FindDT(const FieldID: string): TFMDateTime;
var
i: Integer;
begin
Result := 0;
with RPCBrokerV do for i := 0 to Results.Count - 1 do
if Piece(Results[i], U, 1) = FieldID then
begin
Result := MakeFMDateTime(Piece(Results[i], U, 2));
Break;
end;
end;
function FindExt(const FieldID: string): string;
var
i: Integer;
begin
Result := '';
with RPCBrokerV do for i := 0 to Results.Count - 1 do
if Piece(Results[i], U, 1) = FieldID then
begin
Result := Piece(Results[i], U, 3);
Break;
end;
end;
function FindInt(const FieldID: string): Integer;
var
i: Integer;
begin
Result := 0;
with RPCBrokerV do for i := 0 to Results.Count - 1 do
if Piece(Results[i], U, 1) = FieldID then
begin
Result := StrToIntDef(Piece(Results[i], U, 2), 0);
Break;
end;
end;
function FindInt64(const FieldID: string): Int64;
var
i: Integer;
begin
Result := 0;
with RPCBrokerV do for i := 0 to Results.Count - 1 do
if Piece(Results[i], U, 1) = FieldID then
begin
Result := StrToInt64Def(Piece(Results[i], U, 2), 0);
Break;
end;
end;
begin
CallV('TIU LOAD RECORD FOR EDIT', [IEN, '.01;.06;.07;.09;1202;1205;1208;1209;1301;1302;1307;1701']);
FillChar(EditRec, SizeOf(EditRec), 0);
with EditRec do
begin
Title := FindInt('.01');
TitleName := FindExt('.01');
AdmitDateTime := FindDT('.07');
DischargeDateTime := FindDT('1301');
UrgencyName := FindExt('.09');
Urgency := Copy(UrgencyName,1,1);
Dictator := FindInt64('1202');
DictatorName := FindExt('1202');
Cosigner := FindInt64('1208');
CosignerName := FindExt('1208');
DictDateTime := FindDT('1307');
Attending := FindInt64('1209');
AttendingName := FindExt('1209');
Transcriptionist := FindInt64('1302');
TranscriptionistName := FindExt('1302');
Location := FindInt('1205');
LocationName := FindExt('1205');
if Title = TYP_ADDENDUM then Addend := FindInt('.06');
with RPCBrokerV do
begin
for i := 0 to Results.Count - 1 do if Results[i] = '$TXT' then break;
for j := i downto 0 do Results.Delete(j);
// -------------------- v19.1 (RV) LOST NOTES?----------------------------
//Lines := Results; 'Lines' is being overwritten by subsequent Broker calls
if not Assigned(Lines) then Lines := TStringList.Create;
FastAssign(RPCBrokerV.Results, Lines);
// -----------------------------------------------------------------------
end;
end;
end;
function LoadDCUrgencies: TStrings;
var
i: integer;
begin
CallV('TIU GET DS URGENCIES',[nil]);
with RPCBrokerV do
for i := 0 to Results.Count-1 do
Results[i] := MixedCase(UpperCase(Results[i]));
Result := RPCBrokerV.Results;
end;
{ Data Updates ----------------------------------------------------------------------------- }
procedure DeleteDCDocument(var DeleteSts: TActionRec; IEN: Integer; const Reason: string);
{ delete a TIU document given the internal entry number, return reason if unable to delete }
var
x: string;
begin
x := sCallV('TIU DELETE RECORD', [IEN, Reason]);
DeleteSts.Success := Piece(x, U, 1) = '0';
DeleteSts.Reason := Piece(x, U, 2);
end;
procedure SignDCDocument(var SignSts: TActionRec; IEN: Integer; const ESCode: string);
{ update signed status of a TIU document, return reason if signature is not accepted }
var
x: string;
begin
(* with RPCBrokerV do // temp - to insure sign doesn't go interactive
begin
ClearParameters := True;
RemoteProcedure := 'TIU UPDATE RECORD';
Param[0].PType := literal;
Param[0].Value := IntToStr(IEN);
Param[1].PType := list;
with Param[1] do Mult['.11'] := '0'; // **** block removed in v19.1 - {RV} ****
CallBroker;
end; // temp - end*)
x := sCallV('TIU SIGN RECORD', [IEN, ESCode]);
SignSts.Success := Piece(x, U, 1) = '0';
SignSts.Reason := Piece(x, U, 2);
end;
procedure PutNewDCSumm(var CreatedDoc: TCreatedDoc; const DCSummRec: TDCSummRec);
{ create a new discharge summary with the data in DCSummRec and return its internal entry number
load broker directly since there isn't a good way to set up multiple subscript arrays }
(*var
i: Integer;*)
var
ErrMsg: string;
begin
with RPCBrokerV do
begin
ClearParameters := True;
RemoteProcedure := 'TIU CREATE RECORD';
Param[0].PType := literal;
Param[0].Value := Patient.DFN; //*DFN*
Param[1].PType := literal;
Param[1].Value := IntToStr(DCSummRec.Title);
Param[2].PType := literal;
Param[2].Value := '';
Param[3].PType := literal;
Param[3].Value := '';
Param[4].PType := literal;
Param[4].Value := '';
Param[5].PType := list;
with Param[5] do
begin
Mult['.07'] := FloatToStr(DCSummRec.AdmitDateTime);
Mult['.09'] := DCSummRec.Urgency;
Mult['1202'] := IntToStr(DCSummRec.Dictator);
Mult['1205'] := IntToStr(Encounter.Location);
Mult['1301'] := FloatToStr(DCSummRec.DischargeDateTime);
Mult['1307'] := FloatToStr(DCSummRec.DictDateTime);
if DCSummRec.Cosigner > 0 then
begin
Mult['1208'] := IntToStr(DCSummRec.Cosigner);
Mult['1506'] := '1';
end
else
begin
Mult['1208'] := '';
Mult['1506'] := '0';
end ;
Mult['1209'] := IntToStr(DCSummRec.Attending);
Mult['1302'] := IntToStr(DCSummRec.Transcriptionist);
if DCSummRec.IDParent > 0 then Mult['2101'] := IntToStr(DCSummRec.IDParent);
(* if DCSummRec.Lines <> nil then
for i := 0 to DCSummRec.Lines.Count - 1 do
Mult['"TEXT",' + IntToStr(i+1) + ',0'] := FilteredString(DCSummRec.Lines[i]);*)
end;
Param[6].PType := literal;
Param[6].Value := DCSummRec.VisitStr;
Param[7].PType := literal;
Param[7].Value := '1'; // suppress commit logic
CallBroker;
CreatedDoc.IEN := StrToIntDef(Piece(Results[0], U, 1), 0);
CreatedDoc.ErrorText := Piece(Results[0], U, 2);
end;
if ( DCSummRec.Lines <> nil ) and ( CreatedDoc.IEN <> 0 ) then
begin
SetText(ErrMsg, DCSummRec.Lines, CreatedDoc.IEN, 1);
if ErrMsg <> '' then
begin
CreatedDoc.IEN := 0;
CreatedDoc.ErrorText := ErrMsg;
end;
end;
end;
procedure PutDCAddendum(var CreatedDoc: TCreatedDoc; const DCSummRec: TDCSummRec; AddendumTo:
Integer);
{ create a new addendum for note identified in AddendumTo, returns IEN of new document
load broker directly since there isn't a good way to set up multiple subscript arrays }
(*var
i: Integer;*)
var
ErrMsg: string;
begin
with RPCBrokerV do
begin
ClearParameters := True;
RemoteProcedure := 'TIU CREATE ADDENDUM RECORD';
Param[0].PType := literal;
Param[0].Value := IntToStr(AddendumTo);
Param[1].PType := list;
with Param[1] do
begin
Mult['.09'] := DCSummRec.Urgency;
Mult['1202'] := IntToStr(DCSummRec.Dictator);
Mult['1301'] := FloatToStr(DCSummRec.DischargeDateTime);
Mult['1307'] := FloatToStr(DCSummRec.DictDateTime);
if DCSummRec.Cosigner > 0 then
begin
Mult['1208'] := IntToStr(DCSummRec.Cosigner);
Mult['1506'] := '1';
end
else
begin
Mult['1208'] := '';
Mult['1506'] := '0';
end ;
(* if DCSummRec.Lines <> nil then
for i := 0 to DCSummRec.Lines.Count - 1 do
Mult['"TEXT",' + IntToStr(i+1) + ',0'] := FilteredString(DCSummRec.Lines[i]);*)
end;
Param[2].PType := literal;
Param[2].Value := '1'; // suppress commit logic
CallBroker;
CreatedDoc.IEN := StrToIntDef(Piece(Results[0], U, 1), 0);
CreatedDoc.ErrorText := Piece(Results[0], U, 2);
end;
if ( DCSummRec.Lines <> nil ) and ( CreatedDoc.IEN <> 0 ) then
begin
SetText(ErrMsg, DCSummRec.Lines, CreatedDoc.IEN, 1);
if ErrMsg <> '' then
begin
CreatedDoc.IEN := 0;
CreatedDoc.ErrorText := ErrMsg;
end;
end;
end;
procedure PutEditedDCSumm(var UpdatedDoc: TCreatedDoc; const DCSummRec: TDCSummRec; NoteIEN:
Integer);
{ update the fields and content of the note identified in NoteIEN, returns 1 if successful
load broker directly since there isn't a good way to set up mutilple subscript arrays }
(*var
i: Integer;*)
var
ErrMsg: string;
begin
// First, file field data
with RPCBrokerV do
begin
ClearParameters := True;
RemoteProcedure := 'TIU UPDATE RECORD';
Param[0].PType := literal;
Param[0].Value := IntToStr(NoteIEN);
Param[1].PType := list;
with Param[1] do
begin
if DCSummRec.Addend = 0 then
begin
Mult['.01'] := IntToStr(DCSummRec.Title);
//Mult['.11'] := BOOLCHAR[DCSummRec.NeedCPT]; // **** removed in v19.1 {RV} ****
end;
if (DCSummRec.Status in [TIU_ST_UNREL(*, TIU_ST_UNVER*)]) then Mult['.05'] := IntToStr(DCSummRec.Status);
Mult['1202'] := IntToStr(DCSummRec.Dictator);
Mult['1209'] := IntToStr(DCSummRec.Attending);
Mult['1301'] := FloatToStr(DCSummRec.DischargeDateTime);
if DCSummRec.Cosigner > 0 then
begin
Mult['1208'] := IntToStr(DCSummRec.Cosigner);
Mult['1506'] := '1';
end
else
begin
Mult['1208'] := '';
Mult['1506'] := '0';
end ;
(* for i := 0 to DCSummRec.Lines.Count - 1 do
Mult['"TEXT",' + IntToStr(i+1) + ',0'] := FilteredString(DCSummRec.Lines[i]);*)
end;
CallBroker;
UpdatedDoc.IEN := StrToIntDef(Piece(Results[0], U, 1), 0);
UpdatedDoc.ErrorText := Piece(Results[0], U, 2);
end;
if UpdatedDoc.IEN <= 0 then //v22.12 - RV
//if UpdatedDoc.ErrorText <> '' then //v22.5 - RV
begin
UpdatedDoc.ErrorText := UpdatedDoc.ErrorText + #13#10 + #13#10 + 'Document #: ' + IntToStr(NoteIEN);
exit;
end;
// next, if no error, file document body
SetText(ErrMsg, DCSummRec.Lines, NoteIEN, 0);
if ErrMsg <> '' then
begin
UpdatedDoc.IEN := 0;
UpdatedDoc.ErrorText := ErrMsg;
end;
end;
function GetAttending(const DFN: string): string; //*DFN*
begin
CallV('ORQPT ATTENDING/PRIMARY',[DFN]);
Result := Piece(RPCBrokerV.Results[0],';',1);
end;
function GetDischargeDate(const DFN: string; AdmitDateTime: string): string; //*DFN*
begin
CallV('ORWPT DISCHARGE',[DFN, AdmitDateTime]);
Result := RPCBrokerV.Results[0];
end;
function RequireRelease(ANote, AType: Integer): Boolean;
{ returns true if a discharge summary must be released }
begin
if ANote > 0 then
Result := Piece(sCallV('TIU GET DOCUMENT PARAMETERS', [ANote]), U, 2) = '1'
else
Result := Piece(sCallV('TIU GET DOCUMENT PARAMETERS', [0, AType]), U, 2) = '1';
end;
function RequireMASVerification(ANote, AType: Integer): Boolean;
{ returns true if a discharge summary must be verified }
var
AValue: integer;
begin
Result := False;
if ANote > 0 then
AValue := StrToIntDef(Piece(sCallV('TIU GET DOCUMENT PARAMETERS', [ANote]), U, 3), 0)
else
AValue := StrToIntDef(Piece(sCallV('TIU GET DOCUMENT PARAMETERS', [0, AType]), U, 3), 0);
case AValue of
0: Result := False; // NO
1: Result := True; // ALWAYS
2: Result := False; // UPLOAD ONLY
3: Result := True; // DIRECT ENTRY ONLY
end;
end;
function AllowMultipleSummsPerAdmission(ANote, AType: Integer): Boolean;
{ returns true if a discharge summary must be released }
begin
if ANote > 0 then
Result := Piece(sCallV('TIU GET DOCUMENT PARAMETERS', [ANote]), U, 10) = '1'
else
Result := Piece(sCallV('TIU GET DOCUMENT PARAMETERS', [0, AType]), U, 10) = '1';
end;
procedure ChangeAttending(IEN: integer; AnAttending: int64);
var
AttendingIsNotCurrentUser: boolean;
begin
AttendingIsNotCurrentUser := (AnAttending <> User.DUZ);
with RPCBrokerV do
begin
ClearParameters := True;
RemoteProcedure := 'TIU UPDATE RECORD';
Param[0].PType := literal;
Param[0].Value := IntToStr(IEN);
Param[1].PType := list;
with Param[1] do
begin
Mult['1209'] := IntToStr(AnAttending);
if AttendingIsNotCurrentUser then
begin
Mult['1208'] := IntToStr(AnAttending);
Mult['1506'] := '1';
end
else
begin
Mult['1208'] := '';
Mult['1506'] := '0';
end ;
end;
CallBroker;
end;
end;
function GetCurrentDCSummContext: TTIUContext;
var
x: string;
AContext: TTIUContext;
begin
x := sCallV('ORWTIU GET DCSUMM CONTEXT', [User.DUZ]) ;
with AContext do
begin
Changed := True;
BeginDate := Piece(x, ';', 1);
EndDate := Piece(x, ';', 2);
Status := Piece(x, ';', 3);
if (StrToIntDef(Status, 0) < 1) or (StrToIntDef(Status, 0) > 5) then Status := '1';
Author := StrToInt64Def(Piece(x, ';', 4), 0);
MaxDocs := StrToIntDef(Piece(x, ';', 5), 0);
ShowSubject := StrToIntDef(Piece(x, ';', 6), 0) > 0; //TIU PREFERENCE??
SortBy := Piece(x, ';', 7); //TIU PREFERENCE??
ListAscending := StrToIntDef(Piece(x, ';', 8), 0) > 0;
TreeAscending := StrToIntDef(Piece(x, ';', 9), 0) > 0; //TIU PREFERENCE??
GroupBy := Piece(x, ';', 10);
SearchField := Piece(x, ';', 11);
KeyWord := Piece(x, ';', 12);
Filtered := (Keyword <> '');
end;
Result := AContext;
end;
procedure SaveCurrentDCSummContext(AContext: TTIUContext) ;
var
x: string;
begin
with AContext do
begin
SetPiece(x, ';', 1, BeginDate);
SetPiece(x, ';', 2, EndDate);
SetPiece(x, ';', 3, Status);
if Author > 0 then
SetPiece(x, ';', 4, IntToStr(Author))
else
SetPiece(x, ';', 4, '');
SetPiece(x, ';', 5, IntToStr(MaxDocs));
SetPiece(x, ';', 6, BOOLCHAR[ShowSubject]); //TIU PREFERENCE??
SetPiece(x, ';', 7, SortBy); //TIU PREFERENCE??
SetPiece(x, ';', 8, BOOLCHAR[ListAscending]);
SetPiece(x, ';', 9, BOOLCHAR[TreeAscending]); //TIU PREFERENCE??
SetPiece(x, ';', 10, GroupBy);
SetPiece(x, ';', 11, SearchField);
SetPiece(x, ';', 12, KeyWord);
end;
CallV('ORWTIU SAVE DCSUMM CONTEXT', [x]);
end;
initialization
// nothing for now
finalization
if uDCSummTitles <> nil then uDCSummTitles.Free;
if uDCSummPrefs <> nil then uDCSummPrefs.Free;
end.