457 lines
13 KiB
Plaintext
457 lines
13 KiB
Plaintext
unit rTemplates;
|
|
|
|
interface
|
|
|
|
uses SysUtils, Classes, ORNet, ORFn, rCore, uCore, uConst, TRPCB, uTIU;
|
|
|
|
{ Templates }
|
|
procedure GetTemplateRoots;
|
|
function IsUserTemplateEditor(TemplateID: string; UserID :Int64): boolean;
|
|
procedure GetTemplateChildren(ID: string);
|
|
procedure GetTemplateBoilerplate(ID: string);
|
|
procedure GetTemplateText(BoilerPlate: TStrings);
|
|
function IsTemplateEditor(ID: string): boolean;
|
|
//function SubSetOfTemplateOwners(const StartFrom: string; Direction: Integer): TStrings;
|
|
function UpdateTemplate(ID: string; Fields: TStrings): string;
|
|
procedure UpdateChildren(ID: string; Children: TStrings);
|
|
procedure DeleteTemplates(DelList: TStrings);
|
|
procedure GetObjectList;
|
|
procedure GetAllowedPersonalObjects;
|
|
procedure TestBoilerplate(BoilerPlate: TStrings);
|
|
function GetTemplateAccess(ID: string): integer;
|
|
function SubSetOfBoilerplatedTitles(const StartFrom: string; Direction: Integer): TStrings;
|
|
function GetTitleBoilerplate(TitleIEN: string): string;
|
|
function GetUserTemplateDefaults(LoadFromServer: boolean = FALSE): string;
|
|
procedure SetUserTemplateDefaults(Value: string; PieceNum: integer);
|
|
procedure SaveUserTemplateDefaults;
|
|
procedure LoadTemplateDescription(TemplateIEN: string);
|
|
function GetTemplateAllowedReminderDialogs: TStrings;
|
|
function IsRemDlgAllowed(RemDlgIEN: string): integer;
|
|
function LockTemplate(const ID: string): boolean; // returns true if successful
|
|
procedure UnlockTemplate(const ID: string);
|
|
function GetLinkedTemplateData(const Link: string): string;
|
|
function SubSetOfAllTitles(const StartFrom: string; Direction: Integer): TStrings;
|
|
|
|
{ Template Fields }
|
|
function SubSetOfTemplateFields(const StartFrom: string; Direction: Integer): TStrings;
|
|
function LoadTemplateField(const DlgFld: string): TStrings;
|
|
function LoadTemplateFieldByIEN(const DlgFld: string): TStrings;
|
|
function CanEditTemplateFields: boolean;
|
|
function UpdateTemplateField(const ID: string; Fields: TStrings): string;
|
|
function LockTemplateField(const ID: string): boolean;
|
|
procedure UnlockTemplateField(const ID: string);
|
|
procedure DeleteTemplateField(const ID: string);
|
|
function ExportTemplateFields(FldList: TStrings): TStrings;
|
|
function ImportTemplateFields(FldList: TStrings): TStrings;
|
|
function IsTemplateFieldNameUnique(const FldName, IEN: string): boolean;
|
|
procedure Convert2LMText(Text: TStringList);
|
|
procedure CheckTemplateFields(ResultString: TStrings);
|
|
function BuildTemplateFields(XMLString: TStrings): boolean;
|
|
function ImportLoadedFields(ResultSet: TStrings): boolean;
|
|
|
|
implementation
|
|
var
|
|
uUserTemplateDefaults: string = '';
|
|
uCanEditDlgFldChecked: boolean = FALSE;
|
|
uCanEditDlgFlds: boolean;
|
|
|
|
{ Template RPCs -------------------------------------------------------------- }
|
|
|
|
procedure GetTemplateRoots;
|
|
begin
|
|
CallV('TIU TEMPLATE GETROOTS', [User.DUZ]);
|
|
end;
|
|
|
|
function IsUserTemplateEditor(TemplateID: string; UserID :Int64): boolean;
|
|
begin
|
|
if StrToIntDef(TemplateID,0) > 0 then
|
|
Result := (Piece(sCallV('TIU TEMPLATE ISEDITOR', [TemplateID, UserID]),U,1) = '1')
|
|
else
|
|
Result := FALSE;
|
|
end;
|
|
|
|
procedure GetTemplateChildren(ID: string);
|
|
begin
|
|
if(ID = '') or (ID = '0') then
|
|
RPCBrokerV.Results.Clear
|
|
else
|
|
CallV('TIU TEMPLATE GETITEMS', [ID]);
|
|
end;
|
|
|
|
procedure GetTemplateBoilerplate(ID: string);
|
|
begin
|
|
if(ID = '') or (ID = '0') then
|
|
RPCBrokerV.Results.Clear
|
|
else
|
|
CallV('TIU TEMPLATE GETBOIL', [ID]);
|
|
end;
|
|
|
|
procedure GetTemplateText(BoilerPlate: TStrings);
|
|
var
|
|
i: integer;
|
|
|
|
begin
|
|
with RPCBrokerV do
|
|
begin
|
|
ClearParameters := True;
|
|
RemoteProcedure := 'TIU TEMPLATE GETTEXT';
|
|
Param[0].PType := literal;
|
|
Param[0].Value := Patient.DFN;
|
|
Param[1].PType := literal;
|
|
Param[1].Value := Encounter.VisitStr;
|
|
Param[2].PType := list;
|
|
for i := 0 to BoilerPlate.Count-1 do
|
|
Param[2].Mult[IntToStr(i+1)+',0'] := BoilerPlate[i];
|
|
CallBroker;
|
|
RPCBrokerV.Results.Delete(0);
|
|
FastAssign(RPCBrokerV.Results, BoilerPlate);
|
|
RPCBrokerV.Results.Clear;
|
|
end;
|
|
end;
|
|
|
|
function IsTemplateEditor(ID: string): boolean;
|
|
begin
|
|
Result := (sCallV('TIU TEMPLATE ISEDITOR', [ID, User.DUZ]) = '1');
|
|
end;
|
|
|
|
//function SubSetOfTemplateOwners(const StartFrom: string; Direction: Integer): TStrings;
|
|
//begin
|
|
// CallV('TIU TEMPLATE LISTOWNR', [StartFrom, Direction]);
|
|
// MixedCaseList(RPCBrokerV.Results);
|
|
// Result := RPCBrokerV.Results;
|
|
//end;
|
|
|
|
function UpdateTIURec(RPC, ID: string; Fields: TStrings): string;
|
|
var
|
|
i, j: integer;
|
|
|
|
begin
|
|
with RPCBrokerV do
|
|
begin
|
|
ClearParameters := True;
|
|
RemoteProcedure := RPC;
|
|
Param[0].PType := literal;
|
|
Param[0].Value := ID;
|
|
Param[1].PType := list;
|
|
for i := 0 to Fields.Count-1 do
|
|
begin
|
|
j := pos('=',Fields[i]);
|
|
if(j > 0) then
|
|
Param[1].Mult[Fields.Names[i]] := copy(Fields[i],j+1,MaxInt);
|
|
end;
|
|
CallBroker;
|
|
Result := RPCBrokerV.Results[0];
|
|
end;
|
|
end;
|
|
|
|
function UpdateTemplate(ID: string; Fields: TStrings): string;
|
|
begin
|
|
Result := UpdateTIURec('TIU TEMPLATE CREATE/MODIFY', ID, Fields);
|
|
end;
|
|
|
|
procedure UpdateChildren(ID: string; Children: TStrings);
|
|
var
|
|
i: integer;
|
|
|
|
begin
|
|
with RPCBrokerV do
|
|
begin
|
|
ClearParameters := True;
|
|
RemoteProcedure := 'TIU TEMPLATE SET ITEMS';
|
|
Param[0].PType := literal;
|
|
Param[0].Value := ID;
|
|
Param[1].PType := list;
|
|
for i := 0 to Children.Count-1 do
|
|
Param[1].Mult[IntToStr(i+1)] := Children[i];
|
|
CallBroker;
|
|
end;
|
|
end;
|
|
|
|
procedure DeleteTemplates(DelList: TStrings);
|
|
var
|
|
i: integer;
|
|
|
|
begin
|
|
if(DelList.Count > 0) then
|
|
begin
|
|
with RPCBrokerV do
|
|
begin
|
|
ClearParameters := True;
|
|
RemoteProcedure := 'TIU TEMPLATE DELETE';
|
|
Param[0].PType := list;
|
|
for i := 0 to DelList.Count-1 do
|
|
Param[0].Mult[IntToStr(i+1)] := DelList[i];
|
|
CallBroker;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure GetObjectList;
|
|
begin
|
|
CallV('TIU GET LIST OF OBJECTS', []);
|
|
end;
|
|
|
|
procedure GetAllowedPersonalObjects;
|
|
begin
|
|
CallV('TIU TEMPLATE PERSONAL OBJECTS', []);
|
|
end;
|
|
|
|
procedure TestBoilerplate(BoilerPlate: TStrings);
|
|
var
|
|
i: integer;
|
|
|
|
begin
|
|
with RPCBrokerV do
|
|
begin
|
|
ClearParameters := True;
|
|
RemoteProcedure := 'TIU TEMPLATE CHECK BOILERPLATE';
|
|
Param[0].PType := list;
|
|
for i := 0 to BoilerPlate.Count-1 do
|
|
Param[0].Mult['2,'+IntToStr(i+1)+',0'] := BoilerPlate[i];
|
|
CallBroker;
|
|
end;
|
|
end;
|
|
|
|
function GetTemplateAccess(ID: string): integer;
|
|
begin
|
|
Result := StrToIntDef(sCallV('TIU TEMPLATE ACCESS LEVEL', [ID, User.DUZ, Encounter.Location]), 0);
|
|
end;
|
|
|
|
function SubSetOfBoilerplatedTitles(const StartFrom: string; Direction: Integer): TStrings;
|
|
begin
|
|
CallV('TIU LONG LIST BOILERPLATED', [StartFrom, Direction]);
|
|
Result := RPCBrokerV.Results;
|
|
end;
|
|
|
|
function GetTitleBoilerplate(TitleIEN: string): string;
|
|
begin
|
|
CallV('TIU GET BOILERPLATE', [TitleIEN]);
|
|
Result := RPCBrokerV.Results.Text;
|
|
end;
|
|
|
|
function GetUserTemplateDefaults(LoadFromServer: boolean = FALSE): string;
|
|
begin
|
|
if(LoadFromServer) then
|
|
uUserTemplateDefaults := sCallV('TIU TEMPLATE GET DEFAULTS', []);
|
|
Result := uUserTemplateDefaults;
|
|
end;
|
|
|
|
procedure SetUserTemplateDefaults(Value: string; PieceNum: integer);
|
|
begin
|
|
SetPiece(uUserTemplateDefaults, '/', PieceNum, Value);
|
|
end;
|
|
|
|
procedure SaveUserTemplateDefaults;
|
|
begin
|
|
CallV('TIU TEMPLATE SET DEFAULTS', [uUserTemplateDefaults]);
|
|
end;
|
|
|
|
procedure LoadTemplateDescription(TemplateIEN: string);
|
|
begin
|
|
CallV('TIU TEMPLATE GET DESCRIPTION', [TemplateIEN]);
|
|
end;
|
|
|
|
function GetTemplateAllowedReminderDialogs: TStrings;
|
|
var
|
|
TmpList: TStringList;
|
|
|
|
begin
|
|
CallV('TIU REMINDER DIALOGS', []);
|
|
TmpList := TStringList.Create;
|
|
try
|
|
FastAssign(RPCBrokerV.Results, TmpList);
|
|
SortByPiece(TmpList, U, 2);
|
|
MixedCaseList(TmpList);
|
|
FastAssign(TmpList, RPCBrokerV.Results);
|
|
finally
|
|
TmpList.Free;
|
|
end;
|
|
Result := RPCBrokerV.Results;
|
|
end;
|
|
|
|
function IsRemDlgAllowed(RemDlgIEN: string): integer;
|
|
// -1 = inactive or deleted, 0 = not in Param, 1 = allowed
|
|
begin
|
|
Result := StrToIntDef(sCallV('TIU REM DLG OK AS TEMPLATE', [RemDlgIEN]),-1);
|
|
end;
|
|
|
|
function LockTemplate(const ID: string): boolean; // returns true if successful
|
|
begin
|
|
Result := (sCallV('TIU TEMPLATE LOCK', [ID]) = '1')
|
|
end;
|
|
|
|
procedure UnlockTemplate(const ID: string);
|
|
begin
|
|
CallV('TIU TEMPLATE UNLOCK', [ID]);
|
|
end;
|
|
|
|
function GetLinkedTemplateData(const Link: string): string;
|
|
begin
|
|
Result := sCallV('TIU TEMPLATE GETLINK', [Link]);
|
|
end;
|
|
|
|
function SubSetOfAllTitles(const StartFrom: string; Direction: Integer): TStrings;
|
|
begin
|
|
CallV('TIU TEMPLATE ALL TITLES', [StartFrom, Direction]);
|
|
Result := RPCBrokerV.Results;
|
|
end;
|
|
|
|
{ Template Fields }
|
|
|
|
function SubSetOfTemplateFields(const StartFrom: string; Direction: Integer): TStrings;
|
|
begin
|
|
CallV('TIU FIELD LIST', [StartFrom, Direction]);
|
|
Result := RPCBrokerV.Results;
|
|
end;
|
|
|
|
function LoadTemplateField(const DlgFld: string): TStrings;
|
|
begin
|
|
CallV('TIU FIELD LOAD', [DlgFld]);
|
|
Result := RPCBrokerV.Results;
|
|
end;
|
|
|
|
function LoadTemplateFieldByIEN(const DlgFld: string): TStrings;
|
|
begin
|
|
CallV('TIU FIELD LOAD BY IEN', [DlgFld]);
|
|
Result := RPCBrokerV.Results;
|
|
end;
|
|
|
|
function CanEditTemplateFields: boolean;
|
|
begin
|
|
if(not uCanEditDlgFldChecked) then
|
|
begin
|
|
uCanEditDlgFldChecked := TRUE;
|
|
uCanEditDlgFlds := sCallV('TIU FIELD CAN EDIT', []) = '1';
|
|
end;
|
|
Result := uCanEditDlgFlds;
|
|
end;
|
|
|
|
function UpdateTemplateField(const ID: string; Fields: TStrings): string;
|
|
begin
|
|
Result := UpdateTIURec('TIU FIELD SAVE', ID, Fields);
|
|
end;
|
|
|
|
function LockTemplateField(const ID: string): boolean; // returns true if successful
|
|
begin
|
|
Result := (sCallV('TIU FIELD LOCK', [ID]) = '1')
|
|
end;
|
|
|
|
procedure UnlockTemplateField(const ID: string);
|
|
begin
|
|
CallV('TIU FIELD UNLOCK', [ID]);
|
|
end;
|
|
|
|
procedure DeleteTemplateField(const ID: string);
|
|
begin
|
|
CallV('TIU FIELD DELETE', [ID]);
|
|
end;
|
|
|
|
function CallImportExportTemplateFields(FldList: TStrings; RPCName: string): TStrings;
|
|
var
|
|
i: integer;
|
|
|
|
begin
|
|
with RPCBrokerV do
|
|
begin
|
|
ClearParameters := True;
|
|
RemoteProcedure := RPCName;
|
|
Param[0].PType := list;
|
|
for i := 0 to FldList.Count-1 do
|
|
Param[0].Mult[IntToStr(i+1)] := FldList[i];
|
|
CallBroker;
|
|
end;
|
|
Result := RPCBrokerV.Results;
|
|
end;
|
|
|
|
function ExportTemplateFields(FldList: TStrings): TStrings;
|
|
begin
|
|
Result := CallImportExportTemplateFields(FldList, 'TIU FIELD EXPORT');
|
|
end;
|
|
|
|
function ImportTemplateFields(FldList: TStrings): TStrings;
|
|
begin
|
|
Result := CallImportExportTemplateFields(FldList, 'TIU FIELD IMPORT');
|
|
end;
|
|
|
|
procedure CheckTemplateFields(ResultString: TStrings);
|
|
begin
|
|
CallV('TIU FIELD CHECK',[nil]);
|
|
FastAssign(RPCBrokerV.Results, ResultString);
|
|
end;
|
|
|
|
function IsTemplateFieldNameUnique(const FldName, IEN: string): boolean;
|
|
begin
|
|
Result := sCallV('TIU FIELD NAME IS UNIQUE', [FldName, IEN]) = '1';
|
|
end;
|
|
|
|
procedure Convert2LMText(Text: TStringList);
|
|
var
|
|
i: integer;
|
|
begin
|
|
with RPCBrokerV do
|
|
begin
|
|
ClearParameters := True;
|
|
RemoteProcedure := 'TIU FIELD DOLMTEXT';
|
|
Param[0].PType := list;
|
|
for i := 0 to Text.Count-1 do
|
|
Param[0].Mult[IntToStr(i+1)+',0'] := Text[i];
|
|
CallBroker;
|
|
end;
|
|
FastAssign(RPCBrokerV.Results, Text);
|
|
end;
|
|
|
|
function BuildTemplateFields(XMLString: TStrings): boolean; //Simply builds XML fields on the server
|
|
var //in chunks.
|
|
i,j,p1: integer;
|
|
ok: boolean;
|
|
|
|
procedure reset_broker;
|
|
begin
|
|
with RPCBrokerV do begin
|
|
ClearParameters := True;
|
|
RemoteProcedure := 'TIU FIELD LIST ADD';
|
|
Param[0].PType := list;
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
ok := TRUE;
|
|
with RPCBrokerV do
|
|
begin
|
|
reset_broker;
|
|
j := 1;
|
|
for i := 0 to XMLString.Count-1 do begin
|
|
p1 := pos('<FIELD NAME="',XMLString[i]);
|
|
if (p1 > 0) and (pos('">',copy(XMLString[i],p1+13,maxint)) > 0) then begin
|
|
j := j + 1;
|
|
if (j > 50) then begin
|
|
j := 1;
|
|
CallBroker;
|
|
if pos('1',Results[0]) = 0 then begin
|
|
ok := FALSE;
|
|
break;
|
|
end;//if
|
|
reset_broker;
|
|
end;//if
|
|
end;//if
|
|
Param[0].Mult[IntToStr(i+1)] := XMLString[i];
|
|
end;//for
|
|
if ok then begin
|
|
CallBroker;
|
|
if pos('1',Results[0]) = 0 then ok := FALSE;
|
|
end;//if
|
|
end;
|
|
Result := ok;
|
|
end;
|
|
|
|
function ImportLoadedFields(ResultSet: TStrings): boolean;
|
|
begin
|
|
Result := TRUE;
|
|
CallV('TIU FIELD LIST IMPORT',[nil]);
|
|
FastAssign(RPCBrokerV.Results, ResultSet);
|
|
if ResultSet.Count < 1 then
|
|
Result := FALSE;
|
|
end;
|
|
|
|
end.
|