| 1 | unit uProbs;
 | 
|---|
| 2 | 
 | 
|---|
| 3 | interface
 | 
|---|
| 4 | 
 | 
|---|
| 5 | uses
 | 
|---|
| 6 |     SysUtils, Windows, Messages, Controls, Classes, StdCtrls, ORfn,
 | 
|---|
| 7 |     ORCtrls, Dialogs, Forms, Grids, graphics, ORNet, uConst, Vawrgrid;
 | 
|---|
| 8 | 
 | 
|---|
| 9 | const
 | 
|---|
| 10 |   fComStart=4;
 | 
|---|
| 11 |   v:char = #254;
 | 
|---|
| 12 |   PL_OP_VIEW:char = 'C';
 | 
|---|
| 13 |   PL_IP_VIEW:char = 'S';
 | 
|---|
| 14 |   PL_UF_VIEW:char = 'U';
 | 
|---|
| 15 |   PL_CLINIC:char ='C';
 | 
|---|
| 16 |   PL_WARD:char='W';
 | 
|---|
| 17 |   ACTIVE_LIST_CAP='Active Problems';
 | 
|---|
| 18 |   INACTIVE_LIST_CAP='Inactive Problems';
 | 
|---|
| 19 |   BOTH_LIST_CAP= 'Active and Inactive Problems';
 | 
|---|
| 20 |   REMOVED_LIST_CAP='Removed Problems';
 | 
|---|
| 21 | 
 | 
|---|
| 22 | type
 | 
|---|
| 23 | 
 | 
|---|
| 24 | {Key/value -internal/external pairs}
 | 
|---|
| 25 |  TKeyVal=class(TObject)
 | 
|---|
| 26 |    Id:string;
 | 
|---|
| 27 |    name:string; {may want to use instead of id sometime}
 | 
|---|
| 28 |    intern:string;
 | 
|---|
| 29 |    extern:string;
 | 
|---|
| 30 |    internOrig:string;
 | 
|---|
| 31 |    externOrig:string;
 | 
|---|
| 32 |    function GetDHCPField:string;
 | 
|---|
| 33 |  public
 | 
|---|
| 34 |    procedure DHCPtoKeyVal(DHCPFld:String);
 | 
|---|
| 35 |    property DHCPField:string read GetDHCPField;
 | 
|---|
| 36 |  end;
 | 
|---|
| 37 | 
 | 
|---|
| 38 |  TComment=class(TObject)
 | 
|---|
| 39 |    IFN:string;
 | 
|---|
| 40 |    Facility:string;
 | 
|---|
| 41 |    Narrative:string;
 | 
|---|
| 42 |    Status:String;
 | 
|---|
| 43 |    DateAdd:string;
 | 
|---|
| 44 |    AuthorID:string;
 | 
|---|
| 45 |    AuthorName:String;
 | 
|---|
| 46 |    StatusFlag:string; {used for processing adds/deletes}
 | 
|---|
| 47 |    function GetExtDateAdd:string;
 | 
|---|
| 48 |    function GetAge:boolean;
 | 
|---|
| 49 |    constructor Create(dhcpcom:string);
 | 
|---|
| 50 |    destructor Destroy; override;
 | 
|---|
| 51 |    function TComtoDHCPCom:string;
 | 
|---|
| 52 |    property ExtDateAdd:string read GetExtDateAdd;
 | 
|---|
| 53 |    property IsNew:boolean read GetAge;
 | 
|---|
| 54 |  end;
 | 
|---|
| 55 | 
 | 
|---|
| 56 |   {patient qualifiers}
 | 
|---|
| 57 |  TPLPt=class(TObject)
 | 
|---|
| 58 |    PtVAMC:string;
 | 
|---|
| 59 |    PtDead:string;
 | 
|---|
| 60 |    PtBid:string;
 | 
|---|
| 61 |    PtServiceConnected:boolean;
 | 
|---|
| 62 |    PtAgentOrange:boolean;
 | 
|---|
| 63 |    PtRadiation:boolean;
 | 
|---|
| 64 |    PtEnvironmental:boolean;
 | 
|---|
| 65 |    PtHNC:boolean;
 | 
|---|
| 66 |    PtMST:boolean;
 | 
|---|
| 67 |    constructor Create(Alist:TStringList);
 | 
|---|
| 68 |    function GetGMPDFN(dfn:string;name:String):string;
 | 
|---|
| 69 |    function Today:string;
 | 
|---|
| 70 |  end;
 | 
|---|
| 71 | 
 | 
|---|
| 72 |  { User params}
 | 
|---|
| 73 |  TPLUserParams=class(TObject)
 | 
|---|
| 74 |    usPrimeUser:Boolean; {GMPLUSER true if clinical entry, false if clerical}
 | 
|---|
| 75 |    usDefaultView:String;
 | 
|---|
| 76 |    usCurrentView:String; {what view does user currently have? (OP,IP,Preferred,Unfilterred)}
 | 
|---|
| 77 |    usVerifyTranscribed:Boolean; {authority to verify transcribed problems}
 | 
|---|
| 78 |    usPromptforCopy:boolean;
 | 
|---|
| 79 |    usUseLexicon:boolean; {user will be using Lexicon}
 | 
|---|
| 80 |    usReverseChronDisplay:Boolean;
 | 
|---|
| 81 |    usViewAct:String; {viewing A)ctive, I)nactive, B)oth, R)emoved problems}
 | 
|---|
| 82 |    usViewProv:String; {prov (ptr #200) of  displayed list or 0 for all}
 | 
|---|
| 83 |    usService:String; {user's service/section}
 | 
|---|
| 84 |    {I can't see where either of the ViewClin or ViewServ vals are setup in the
 | 
|---|
| 85 |     M application. They are documented in the PL V2.0 tech manual though}
 | 
|---|
| 86 |    usViewServ:string; {should be a list of ptr to file 49, format ptr/ptr/...}
 | 
|---|
| 87 |    usViewClin:string; {should be a list of ptr to file 44, format ptr/ptr/...}
 | 
|---|
| 88 |    usViewComments: string;
 | 
|---|
| 89 |    usDefaultContext: string;
 | 
|---|
| 90 |    usTesting:boolean; {used for test purposes only}
 | 
|---|
| 91 |    usClinList:TstringList;
 | 
|---|
| 92 |    usServList:TstringList;
 | 
|---|
| 93 |    constructor Create(alist:TstringList);
 | 
|---|
| 94 |    destructor Destroy; override;
 | 
|---|
| 95 |  end;
 | 
|---|
| 96 | 
 | 
|---|
| 97 |  {filter lists}
 | 
|---|
| 98 |  TPLFilters = class(TObject)
 | 
|---|
| 99 |    ProviderList:TstringList;
 | 
|---|
| 100 |    ClinicList:TstringList;
 | 
|---|
| 101 |    ServiceList:TStringList;
 | 
|---|
| 102 |    constructor create;
 | 
|---|
| 103 |    destructor destroy; override;
 | 
|---|
| 104 |  end;
 | 
|---|
| 105 | 
 | 
|---|
| 106 | {problem record}
 | 
|---|
| 107 |  TProbRec = class(TObject)
 | 
|---|
| 108 |  private
 | 
|---|
| 109 |    fNewrec:Tstringlist;
 | 
|---|
| 110 |    fOrigRec:TStringList;
 | 
|---|
| 111 |    fPIFN:String;
 | 
|---|
| 112 |    fDiagnosis:Tkeyval; {.01}
 | 
|---|
| 113 |    fModDate:TKeyVal;   {.03}
 | 
|---|
| 114 |    fNarrative:TKeyVal; {.05}
 | 
|---|
| 115 |    fEntDate:TKeyVal; { .08}
 | 
|---|
| 116 |    fStatus:TKeyVal;    {.12}
 | 
|---|
| 117 |    fOnsetDate:TKeyVal; {.13}
 | 
|---|
| 118 |    fProblem:TKeyVal;   {1.01}
 | 
|---|
| 119 |    fCondition:TKeyVal;  {1.02}
 | 
|---|
| 120 |    fEntBy:TKeyVal;         {1.03}
 | 
|---|
| 121 |    fRecBy:TKeyVal;         {1.04}
 | 
|---|
| 122 |    fRespProv:TKeyVal;   {1.05}
 | 
|---|
| 123 |    fService:TKeyVal;     {1.06}
 | 
|---|
| 124 |    fResolveDate:TKeyVal; {1.07}
 | 
|---|
| 125 |    fClinic:TKeyVal;      {1.08}
 | 
|---|
| 126 |    fRecordDate:TKeyVal;  {1.09}
 | 
|---|
| 127 |    fServCon:TKeyVal;     {1.1}
 | 
|---|
| 128 |    fAOExposure:TKeyVal;  {1.11}
 | 
|---|
| 129 |    fRadExposure:TKeyVal; {1.12}
 | 
|---|
| 130 |    fGulfExposure:TKeyVal; {1.13}
 | 
|---|
| 131 |    fPriority:TKeyVal;     {1.14}
 | 
|---|
| 132 |    fHNC:TKeyVal;          {1.15}
 | 
|---|
| 133 |    fMST:TKeyVal;          {1.16}
 | 
|---|
| 134 |    fFieldList:TstringList; {list of fields by name and class (TKeyVal or TComment)}
 | 
|---|
| 135 |    fFilerObj:TstringList;
 | 
|---|
| 136 |    fCmtIsXHTML: boolean;
 | 
|---|
| 137 |    fCmtNoEditReason: string;
 | 
|---|
| 138 |    Procedure LoadField(Fldrec:TKeyVal;Id:String;name:string);
 | 
|---|
| 139 |    Procedure CreateFields;
 | 
|---|
| 140 |    procedure LoadComments;
 | 
|---|
| 141 |    procedure SetDate(datefld:TKeyVal;dt:TDateTime);
 | 
|---|
| 142 |    function GetModDate:TDateTime;
 | 
|---|
| 143 |    procedure SetModDate(value:TDateTime);
 | 
|---|
| 144 |    function GetEntDate:TDateTime;
 | 
|---|
| 145 |    procedure SetEntDate(value:TDateTime);
 | 
|---|
| 146 |    procedure SetOnsetDate(value:TDateTime);
 | 
|---|
| 147 |    function GetOnsetDate:TDateTime;
 | 
|---|
| 148 |    Function GetSCProblem:Boolean;
 | 
|---|
| 149 |    Procedure SetSCProblem(value:Boolean);
 | 
|---|
| 150 |    Function GetAOProblem:Boolean;
 | 
|---|
| 151 |    Procedure SetAOProblem(value:Boolean);
 | 
|---|
| 152 |    Function GetRADProblem:Boolean;
 | 
|---|
| 153 |    Procedure SetRADProblem(value:Boolean);
 | 
|---|
| 154 |    Function GetENVProblem:Boolean;
 | 
|---|
| 155 |    Procedure SetENVProblem(value:Boolean);
 | 
|---|
| 156 |    Function GetHNCProblem:Boolean;
 | 
|---|
| 157 |    Procedure SetHNCProblem(value:Boolean);
 | 
|---|
| 158 |    Function GetMSTProblem:Boolean;
 | 
|---|
| 159 |    Procedure SetMSTProblem(value:Boolean);
 | 
|---|
| 160 |    function GetStatus:String;
 | 
|---|
| 161 |    procedure SetStatus(value:String);
 | 
|---|
| 162 |    function GetPriority:String;
 | 
|---|
| 163 |    procedure SetPriority(value:String);
 | 
|---|
| 164 |    function GetRESDate:TDateTime;
 | 
|---|
| 165 |    procedure SetRESDate(value:TDateTime);
 | 
|---|
| 166 |    function GetRECDate:TDateTime;
 | 
|---|
| 167 |    procedure SetRECDate(value:TDateTime);
 | 
|---|
| 168 |    procedure SetNarrative(value:TKeyVal);
 | 
|---|
| 169 |    function GetTDateTime(dt:string):TDateTime;
 | 
|---|
| 170 |    function GetFilerObject:TstringList;
 | 
|---|
| 171 |    function GetAltFilerObject:TstringList;
 | 
|---|
| 172 |    function GetCommentCount:integer;
 | 
|---|
| 173 |    Procedure EraseComments(clist:TList);
 | 
|---|
| 174 |    function GetModDatstr:string;
 | 
|---|
| 175 |    procedure SetModDatStr(value:string);
 | 
|---|
| 176 |    function GetEntDatstr:string;
 | 
|---|
| 177 |    procedure SetEntDatStr(value:string);
 | 
|---|
| 178 |    function GetOnsetDatstr:string;
 | 
|---|
| 179 |    procedure SetOnsetDatStr(value:string);
 | 
|---|
| 180 |    function GetResDatstr:string;
 | 
|---|
| 181 |    procedure SetResDatStr(value:string);
 | 
|---|
| 182 |    function GetRecDatstr:string;
 | 
|---|
| 183 |    procedure SetRecDatStr(value:string);
 | 
|---|
| 184 |    procedure SetDateString(df:TKeyVal;value:string);
 | 
|---|
| 185 |    function GetCondition:string;
 | 
|---|
| 186 |    procedure SetCondition(value:String);
 | 
|---|
| 187 |  public
 | 
|---|
| 188 |    fComments:TList; {comments}
 | 
|---|
| 189 |    procedure AddNewComment(Txt:string);
 | 
|---|
| 190 |    function FieldChanged(fldName:string):Boolean;
 | 
|---|
| 191 |    constructor Create(AList:TstringList);
 | 
|---|
| 192 |    destructor Destroy;override;
 | 
|---|
| 193 |    property RawNewRec:TstringList read fNewRec;
 | 
|---|
| 194 |    property RawOrigRec:TStringList read fOrigRec;
 | 
|---|
| 195 |    property DateModified:TDateTime read GetModDate write SetModDate;
 | 
|---|
| 196 |    property DateModStr:string read GetModDatStr write SetModDatStr;
 | 
|---|
| 197 |    property DateEntered:TDateTime read GetEntDate write SetEntDate;
 | 
|---|
| 198 |    property DateEntStr:string read GetEntDatStr write SetEntDatStr;
 | 
|---|
| 199 |    property DateOnset:TDateTime read GetOnsetDate write SetOnsetDate;
 | 
|---|
| 200 |    property DateOnsetStr:string read GetOnsetDatStr write SetOnsetDatStr;
 | 
|---|
| 201 |    property SCProblem:Boolean read GetSCProblem write SetSCProblem;
 | 
|---|
| 202 |    property AOProblem:Boolean read GetAOProblem write SetAOProblem;
 | 
|---|
| 203 |    property RADProblem:Boolean read GetRadProblem write SetRADProblem;
 | 
|---|
| 204 |    property ENVProblem:Boolean read GetENVProblem write SetENVProblem;
 | 
|---|
| 205 |    property HNCProblem:Boolean read GetHNCProblem write SetHNCProblem;
 | 
|---|
| 206 |    property MSTProblem:Boolean read GetMSTProblem write SetMSTProblem;
 | 
|---|
| 207 |    property Status:String read GetStatus write SetStatus;
 | 
|---|
| 208 |    property Narrative:TKeyVal read fNarrative write SetNarrative;
 | 
|---|
| 209 |    property Diagnosis:TKeyVal read fDiagnosis write fDiagnosis;
 | 
|---|
| 210 |    property Problem:TKeyVal read fProblem write fProblem;
 | 
|---|
| 211 |    property RespProvider:TKeyVal read fRespProv write fRespProv;
 | 
|---|
| 212 |    property EnteredBy:TKeyVal read fEntBy write fEntBy;
 | 
|---|
| 213 |    property RecordedBy:TKeyVal read fRecBy write fRecBy;
 | 
|---|
| 214 |    property Service:TKeyVal read fService write fService;
 | 
|---|
| 215 |    property Clinic:TKeyVal read fClinic write fClinic;
 | 
|---|
| 216 |    property DateResolved:TDateTime read GetResDate write SetResdate;
 | 
|---|
| 217 |    property DateResStr:string read GetResDatStr write SetResDatStr;
 | 
|---|
| 218 |    property DateRecorded:TDateTime read GetRecDate write SetRecdate;
 | 
|---|
| 219 |    property DateRecStr:string read GetRecDatStr write SetRecDatStr;
 | 
|---|
| 220 |    property Priority:string read GetPriority write SetPriority;
 | 
|---|
| 221 |    property Comments:TList read fComments write fComments;
 | 
|---|
| 222 |    property Condition:string read GetCondition write SetCondition;
 | 
|---|
| 223 |    property CommentCount:integer read GetCommentCount;
 | 
|---|
| 224 |    property FilerObject:TstringList read GetFilerObject;
 | 
|---|
| 225 |    property AltFilerObject:TstringList read GetAltFilerObject;
 | 
|---|
| 226 |    property PIFN:string read fPIFN write fPIFN;
 | 
|---|
| 227 |    property CmtIsXHTML: boolean read fCmtIsXHTML;
 | 
|---|
| 228 |    property CmtNoEditReason: string read fCmtNoEditReason;
 | 
|---|
| 229 |  end;
 | 
|---|
| 230 | 
 | 
|---|
| 231 | var
 | 
|---|
| 232 |   ProbRec       :TProbRec;
 | 
|---|
| 233 |   PLPt          :TPLPt;
 | 
|---|
| 234 |   PLUser        :TPLUserParams;
 | 
|---|
| 235 |   pProviderID   :int64; {this is provider reviewing record, not resp provider}
 | 
|---|
| 236 |   pProviderName :string; {ditto}
 | 
|---|
| 237 |   PLFilters     :TPLFilters;
 | 
|---|
| 238 |   PLProblem     :string; {this is problem selected from lexicon lookup form}
 | 
|---|
| 239 | 
 | 
|---|
| 240 | procedure GetListforIP(Alist:TstringList; AGrid: TCaptionListBox);
 | 
|---|
| 241 | procedure GetListforOP(Alist:TstringList; AGrid: TCaptionListBox);
 | 
|---|
| 242 | procedure LoadFilterList(Alist:TstringList;DestList:TstringList);
 | 
|---|
| 243 | procedure ShowFilterStatus(s: string);
 | 
|---|
| 244 | procedure InitViewFilters(Alist:TstringList);
 | 
|---|
| 245 | procedure SetViewFilters(Alist:TStringList);
 | 
|---|
| 246 | Function DateStringOK(ds:string):string;
 | 
|---|
| 247 | Function StripSpace(str:string):string;
 | 
|---|
| 248 | function ByProvider:String;
 | 
|---|
| 249 | function ForChars(Num, FontWidth: Integer): Integer;
 | 
|---|
| 250 | procedure GetFontInfo(AHandle: THandle; var FontWidth, FontHeight: Integer);
 | 
|---|
| 251 | function ShortDateStrToDate(shortdate: string): string ;
 | 
|---|
| 252 | //function NewComment: string    ;
 | 
|---|
| 253 | //function EditComment(OldValue: string): string ;
 | 
|---|
| 254 | function FixQuotes(Instring: string): string;
 | 
|---|
| 255 | 
 | 
|---|
| 256 | implementation
 | 
|---|
| 257 | 
 | 
|---|
| 258 | uses
 | 
|---|
| 259 |   rCore, uCore;//, fProbCmt;
 | 
|---|
| 260 | 
 | 
|---|
| 261 | const
 | 
|---|
| 262 |   Months: array[1..12] of string[3] = ('JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC');
 | 
|---|
| 263 | 
 | 
|---|
| 264 | {------------------- TKeyVal Class -----------------}
 | 
|---|
| 265 | function TKeyVal.GetDHCPField:string;
 | 
|---|
| 266 | begin
 | 
|---|
| 267 |   result := intern + u + extern;
 | 
|---|
| 268 | end;
 | 
|---|
| 269 | 
 | 
|---|
| 270 | procedure TKeyVal.DHCPtoKeyVal(DHCPFld:String);
 | 
|---|
| 271 | begin
 | 
|---|
| 272 |   intern := Piece(DHCPFld,u,1);
 | 
|---|
| 273 |   extern := Piece(DHCPFLd,u,2);
 | 
|---|
| 274 | end;
 | 
|---|
| 275 | 
 | 
|---|
| 276 | {------------------- TComment Class ----------------}
 | 
|---|
| 277 | constructor TComment.Create(dhcpcom:string);
 | 
|---|
| 278 | begin
 | 
|---|
| 279 |   {create and instantiate a Tcomment object}
 | 
|---|
| 280 |   IFN:=Piece(dhcpcom,u,1);
 | 
|---|
| 281 |   Facility:=Piece(dhcpcom,u,2);
 | 
|---|
| 282 |   Narrative:=Piece(dhcpcom,u,3);
 | 
|---|
| 283 |   Status:=Piece(dhcpcom,u,4);
 | 
|---|
| 284 |   DateAdd:=Piece(dhcpcom,u,5);
 | 
|---|
| 285 |   AuthorID:=Piece(dhcpcom,u,6);
 | 
|---|
| 286 |   AuthorName:=Piece(dhcpcom,u,7);
 | 
|---|
| 287 |   StatusFlag:='';
 | 
|---|
| 288 | end;
 | 
|---|
| 289 | 
 | 
|---|
| 290 | destructor TComment.Destroy;
 | 
|---|
| 291 | begin
 | 
|---|
| 292 |   inherited destroy;
 | 
|---|
| 293 | end;
 | 
|---|
| 294 | 
 | 
|---|
| 295 | function TComment.TComtoDHCPCom:string;
 | 
|---|
| 296 | begin
 | 
|---|
| 297 |   Narrative := FixQuotes(Narrative);
 | 
|---|
| 298 |   if uppercase(IFN)='NEW' then {new note}
 | 
|---|
| 299 |     result := Narrative
 | 
|---|
| 300 |   else {potential edit of existing note}
 | 
|---|
| 301 |     result := IFN + u + Facility + u + Narrative + u +
 | 
|---|
| 302 |             Status + u + DateAdd + u + AuthorID; {leave off author name}
 | 
|---|
| 303 | end;
 | 
|---|
| 304 | 
 | 
|---|
| 305 | function TComment.GetExtDateAdd:String;
 | 
|---|
| 306 | begin
 | 
|---|
| 307 |   result := FormatFMDateTime('mmm dd yyyy',StrToFloat(DateAdd)) ;
 | 
|---|
| 308 | end;
 | 
|---|
| 309 | 
 | 
|---|
| 310 | function TComment.Getage:boolean;
 | 
|---|
| 311 | begin
 | 
|---|
| 312 |   result := uppercase(IFN)='NEW';
 | 
|---|
| 313 | end;
 | 
|---|
| 314 | 
 | 
|---|
| 315 | {-------------------------- TPLPt Class ----------------------}
 | 
|---|
| 316 | constructor TPLPt.Create(Alist:TStringList);
 | 
|---|
| 317 | var
 | 
|---|
| 318 |   i: integer;
 | 
|---|
| 319 | begin
 | 
|---|
| 320 |   for i := 0 to AList.Count - 1 do
 | 
|---|
| 321 |     case i of
 | 
|---|
| 322 |       0: PtVAMC             := copy(Alist[i],1,999);
 | 
|---|
| 323 |       1: PtDead             := AList[i];
 | 
|---|
| 324 |       2: PtServiceConnected := (AList[i] = '1');
 | 
|---|
| 325 |       3: PtAgentOrange      := (AList[i] = '1');
 | 
|---|
| 326 |       4: PtRadiation        := (AList[i] = '1');
 | 
|---|
| 327 |       5: PtEnvironmental    := (AList[i] = '1');
 | 
|---|
| 328 |       6: PtBID              := Alist[i];
 | 
|---|
| 329 |       7: PtHNC              := (AList[i] = '1');
 | 
|---|
| 330 |       8: PtMST              := (AList[i] = '1');
 | 
|---|
| 331 |     end;
 | 
|---|
| 332 | end;
 | 
|---|
| 333 | 
 | 
|---|
| 334 | function TPLPt.GetGMPDFN(dfn:string;name:string):string;
 | 
|---|
| 335 | begin
 | 
|---|
| 336 |   result := dfn + u + name + u + PtBID + u + PtDead
 | 
|---|
| 337 | end;
 | 
|---|
| 338 | 
 | 
|---|
| 339 | function TPLPt.Today:string;
 | 
|---|
| 340 | {returns string in DHCP^mmm dd yyyy format}
 | 
|---|
| 341 | begin
 | 
|---|
| 342 |   result := Piece(FloatToStr(FMToday),'.',1) + u + FormatFMDateTime('mmm dd yyyy',FMToday) ;
 | 
|---|
| 343 | end;
 | 
|---|
| 344 | 
 | 
|---|
| 345 | {-------------------- TUserParams -------------------------------}
 | 
|---|
| 346 | constructor TPLUserParams.create(alist:TstringList);
 | 
|---|
| 347 | var
 | 
|---|
| 348 |   p:string;
 | 
|---|
| 349 |   i:integer;
 | 
|---|
| 350 | begin
 | 
|---|
| 351 |   usPrimeUser           := false;
 | 
|---|
| 352 |   usDefaultView         := '';
 | 
|---|
| 353 |   usVerifyTranscribed   := True;   // SHOULD DEFAULT BE FALSE???
 | 
|---|
| 354 |   usPromptforCopy       := false;
 | 
|---|
| 355 |   usUseLexicon          := false;
 | 
|---|
| 356 |   usReverseChronDisplay := true;
 | 
|---|
| 357 |   usViewAct             := 'A';
 | 
|---|
| 358 |   usViewProv            := '0^All';
 | 
|---|
| 359 |   usService             := '';
 | 
|---|
| 360 |   usViewcomments        := '0';
 | 
|---|
| 361 |   usClinList            := TstringList.create;
 | 
|---|
| 362 |   usServList            := TstringList.create;
 | 
|---|
| 363 |   if alist.count=0 then exit;  {BAIL OUT IF LIST EMPTY}
 | 
|---|
| 364 |   //usPrimeUser           := False;  {for testing}
 | 
|---|
| 365 |   usPrimeUser           := (alist[0]='1');
 | 
|---|
| 366 |   usDefaultView         := alist[1];
 | 
|---|
| 367 |   if usDefaultView = '' then
 | 
|---|
| 368 |     begin
 | 
|---|
| 369 |       if Patient.Inpatient then usDefaultView := PL_IP_VIEW
 | 
|---|
| 370 |       else usDefaultView := PL_OP_VIEW;
 | 
|---|
| 371 |     end;
 | 
|---|
| 372 |   usVerifyTranscribed   := (alist[2]='1');
 | 
|---|
| 373 |   usPromptforCopy       := (alist[3]='1');
 | 
|---|
| 374 |   //usUseLexicon          := False;  {for testing}
 | 
|---|
| 375 |   usUseLexicon          := (alist[4]='1');
 | 
|---|
| 376 |   usReverseChronDisplay := (alist[5]='1');
 | 
|---|
| 377 |   usViewAct             := alist[6];
 | 
|---|
| 378 |   usViewProv            := alist[7];
 | 
|---|
| 379 |   usService             := alist[8];
 | 
|---|
| 380 |   usViewServ            := alist[9];
 | 
|---|
| 381 |   usViewClin            := alist[10];
 | 
|---|
| 382 |   usTesting             := (alist[11]<>'');
 | 
|---|
| 383 |   usViewComments        := AList[12];
 | 
|---|
| 384 |   usCurrentView         := usDefaultView;
 | 
|---|
| 385 |   usDefaultContext      := ';;' + usViewAct + ';' + usViewComments + ';' + Piece(usViewProv, U, 1);
 | 
|---|
| 386 |   if usViewClin <> '' then
 | 
|---|
| 387 |     begin
 | 
|---|
| 388 |       i := 1;
 | 
|---|
| 389 |       repeat
 | 
|---|
| 390 |         begin
 | 
|---|
| 391 |           p := Piece(usViewClin,'/',i);
 | 
|---|
| 392 |           inc(i);
 | 
|---|
| 393 |           if p <> '' then usClinList.add(p);
 | 
|---|
| 394 |         end;
 | 
|---|
| 395 |       until p = '';
 | 
|---|
| 396 |     end;
 | 
|---|
| 397 |   if usViewServ <> '' then
 | 
|---|
| 398 |     begin
 | 
|---|
| 399 |       i := 1;
 | 
|---|
| 400 |       repeat
 | 
|---|
| 401 |         begin
 | 
|---|
| 402 |           p := Piece(usViewServ,'/',i);
 | 
|---|
| 403 |           inc(i);
 | 
|---|
| 404 |           if p <> '' then usServList.add(p);
 | 
|---|
| 405 |         end;
 | 
|---|
| 406 |       until p = '';
 | 
|---|
| 407 |     end;
 | 
|---|
| 408 | end;
 | 
|---|
| 409 | 
 | 
|---|
| 410 | destructor TPLUserParams.Destroy;
 | 
|---|
| 411 | begin
 | 
|---|
| 412 |   usClinList.free;
 | 
|---|
| 413 |   usServList.free;
 | 
|---|
| 414 |   inherited destroy;
 | 
|---|
| 415 | end;
 | 
|---|
| 416 | 
 | 
|---|
| 417 | {-------------------- TPLFilters -------------------}
 | 
|---|
| 418 | constructor TPLFilters.Create;
 | 
|---|
| 419 | begin
 | 
|---|
| 420 |   ProviderList := TstringList.create;
 | 
|---|
| 421 |   ClinicList   := TstringList.create;
 | 
|---|
| 422 |   ServiceList  := TStringList.create;
 | 
|---|
| 423 | end;
 | 
|---|
| 424 | 
 | 
|---|
| 425 | destructor  TPLFilters.destroy;
 | 
|---|
| 426 | begin
 | 
|---|
| 427 |   ProviderList.free;
 | 
|---|
| 428 |   ClinicList.Free;
 | 
|---|
| 429 |   ServiceList.Free;
 | 
|---|
| 430 |   inherited destroy;
 | 
|---|
| 431 | end;
 | 
|---|
| 432 | 
 | 
|---|
| 433 | {------------------ TProbRec -----------------------}
 | 
|---|
| 434 | constructor TProbRec.create(AList:TstringList);
 | 
|---|
| 435 | var
 | 
|---|
| 436 |   i: integer;
 | 
|---|
| 437 | begin
 | 
|---|
| 438 |   fFieldList := TstringList.create;
 | 
|---|
| 439 |   fFilerObj := TStringList.Create;
 | 
|---|
| 440 |   fNewRec := TstringList.create;
 | 
|---|
| 441 |   for i := 0 to Pred(Alist.count) do
 | 
|---|
| 442 |     if copy(Alist[i],1,3) = 'NEW' then fNewRec.add(Alist[i]);
 | 
|---|
| 443 |   fOrigRec := TStringList.Create;
 | 
|---|
| 444 |   for i := 0 to pred(Alist.count) do
 | 
|---|
| 445 |     if copy(Alist[i],1,3) = 'ORG' then fOrigRec.add(Alist[i]);
 | 
|---|
| 446 |   CreateFields;
 | 
|---|
| 447 |   {names selected to agree with subscripts of argument array to callable
 | 
|---|
| 448 |    entrypoints in ^GMPUTL where possible.}
 | 
|---|
| 449 |   LoadField(fDiagnosis,'.01','DIAGNOSIS');
 | 
|---|
| 450 |   LoadField(fModDate,'.03','MODIFIED');
 | 
|---|
| 451 |   LoadField(fNarrative,'.05','NARRATIVE');
 | 
|---|
| 452 |   LoadField(fEntDate,'.08','ENTERED');
 | 
|---|
| 453 |   LoadField(fStatus,'.12','STATUS');
 | 
|---|
| 454 |   LoadField(fOnsetDate,'.13','ONSET');
 | 
|---|
| 455 |   LoadField(fProblem,'1.01','LEXICON');
 | 
|---|
| 456 |   LoadField(fCondition,'1.02','CONDITION');
 | 
|---|
| 457 |   LoadField(fEntBy,'1.03','ENTERER');
 | 
|---|
| 458 |   LoadField(fRecBy,'1.04','RECORDER');
 | 
|---|
| 459 |   LoadField(fRespProv,'1.05','PROVIDER');
 | 
|---|
| 460 |   LoadField(fService,'1.06','SERVICE');
 | 
|---|
| 461 |   LoadField(fResolveDate,'1.07','RESOLVED');
 | 
|---|
| 462 |   LoadField(fClinic,'1.08','LOCATION');
 | 
|---|
| 463 |   LoadField(fRecordDate,'1.09','RECORDED');
 | 
|---|
| 464 |   LoadField(fServCon,'1.1','SC');
 | 
|---|
| 465 |   LoadField(fAOExposure,'1.11','AO');
 | 
|---|
| 466 |   LoadField(fRadExposure,'1.12','IR');
 | 
|---|
| 467 |   LoadField(fGulfExposure,'1.13','EC');
 | 
|---|
| 468 |   LoadField(fPriority,'1.14','PRIORITY');
 | 
|---|
| 469 |   LoadField(fHNC,'1.15','HNC');
 | 
|---|
| 470 |   LoadField(fMST,'1.16','MST');
 | 
|---|
| 471 |   LoadComments;
 | 
|---|
| 472 | end;
 | 
|---|
| 473 | 
 | 
|---|
| 474 | destructor TProbRec.destroy;
 | 
|---|
| 475 | begin
 | 
|---|
| 476 |   fOrigRec.free;
 | 
|---|
| 477 |   fNewrec.free;
 | 
|---|
| 478 |   fDiagnosis.free;
 | 
|---|
| 479 |   fModDate.free;
 | 
|---|
| 480 |   fNarrative.free;
 | 
|---|
| 481 |   fEntDate.free;
 | 
|---|
| 482 |   fStatus.free;
 | 
|---|
| 483 |   fOnsetDate.free;
 | 
|---|
| 484 |   fProblem.free;
 | 
|---|
| 485 |   fCondition.free;
 | 
|---|
| 486 |   fRespProv.free;
 | 
|---|
| 487 |   fEntBy.free;
 | 
|---|
| 488 |   fRecBy.Free;
 | 
|---|
| 489 |   fService.free;
 | 
|---|
| 490 |   fResolveDate.free;
 | 
|---|
| 491 |   fClinic.free;
 | 
|---|
| 492 |   fRecordDate.free;
 | 
|---|
| 493 |   fServCon.free;
 | 
|---|
| 494 |   fAOExposure.free;
 | 
|---|
| 495 |   fRadExposure.free;
 | 
|---|
| 496 |   fGulfExposure.free;
 | 
|---|
| 497 |   fPriority.free;
 | 
|---|
| 498 |   fHNC.free;
 | 
|---|
| 499 |   fMST.free;
 | 
|---|
| 500 |   fFieldList.free;
 | 
|---|
| 501 |   fFilerObj.free;
 | 
|---|
| 502 |   EraseComments(fComments);
 | 
|---|
| 503 |   fComments.free;
 | 
|---|
| 504 |   inherited Destroy;
 | 
|---|
| 505 | end;
 | 
|---|
| 506 | 
 | 
|---|
| 507 | procedure TProbRec.EraseComments(clist:TList);
 | 
|---|
| 508 | var
 | 
|---|
| 509 |   i:integer;
 | 
|---|
| 510 | begin
 | 
|---|
| 511 |   if clist.count>0 then
 | 
|---|
| 512 |     begin
 | 
|---|
| 513 |       for i:=0 to pred(clist.count) do
 | 
|---|
| 514 |         TComment(clist[i]).free;
 | 
|---|
| 515 |     end;
 | 
|---|
| 516 | end;
 | 
|---|
| 517 | 
 | 
|---|
| 518 | procedure TProbRec.CreateFields;
 | 
|---|
| 519 | begin
 | 
|---|
| 520 |   fDiagnosis:=TKeyVal.create;
 | 
|---|
| 521 |   fModDate:=TKeyVal.create;
 | 
|---|
| 522 |   fNarrative:=TKeyVal.create;
 | 
|---|
| 523 |   fEntDate:=TKeyVal.create;
 | 
|---|
| 524 |   fStatus:=TKeyVal.create;
 | 
|---|
| 525 |   fOnsetDate:=TKeyVal.create;
 | 
|---|
| 526 |   fProblem:=TKeyVal.create;
 | 
|---|
| 527 |   fCondition:=TKeyVal.create;
 | 
|---|
| 528 |   fEntBy:=TKeyVal.create;
 | 
|---|
| 529 |   fRecBy:=TKeyVal.create;
 | 
|---|
| 530 |   fRespProv:=TKeyVal.create;
 | 
|---|
| 531 |   fService:=TKeyVal.create;
 | 
|---|
| 532 |   fResolveDate:=TKeyVal.create;
 | 
|---|
| 533 |   fClinic:=TKeyVal.create;
 | 
|---|
| 534 |   fRecordDate:=TKeyVal.create;
 | 
|---|
| 535 |   fServCon:=TKeyVal.create;
 | 
|---|
| 536 |   fAOExposure:=TKeyVal.create;
 | 
|---|
| 537 |   fRadExposure:=TKeyVal.create;
 | 
|---|
| 538 |   fGulfExposure:=TKeyVal.create;
 | 
|---|
| 539 |   fPriority:=TKeyVal.create;
 | 
|---|
| 540 |   fHNC:=TKeyVal.create;
 | 
|---|
| 541 |   fMST:=TKeyVal.create;
 | 
|---|
| 542 |   fComments:=TList.create;
 | 
|---|
| 543 | end;
 | 
|---|
| 544 | 
 | 
|---|
| 545 | procedure TProbRec.LoadField(Fldrec:TKeyVal;Id:String;name:string);
 | 
|---|
| 546 | var
 | 
|---|
| 547 |   i:integer;
 | 
|---|
| 548 |   fldval:string;
 | 
|---|
| 549 | 
 | 
|---|
| 550 |   function GetOrigVal(id:string):string;
 | 
|---|
| 551 |   var
 | 
|---|
| 552 |     i:integer;
 | 
|---|
| 553 |   begin
 | 
|---|
| 554 |     i := 0;
 | 
|---|
| 555 |     Result := '^';
 | 
|---|
| 556 |     if fOrigRec.count = 0 then exit;
 | 
|---|
| 557 |     while (i < fOrigRec.Count) and (Piece(fOrigRec[i],v,2)<>id) do inc(i);
 | 
|---|
| 558 |     if i = fOrigRec.Count then exit;
 | 
|---|
| 559 |     if Piece(fOrigRec[i],v,2) = id then Result := Piece(fOrigRec[i],v,3)
 | 
|---|
| 560 |   end;
 | 
|---|
| 561 | 
 | 
|---|
| 562 | begin
 | 
|---|
| 563 |   i := -1;
 | 
|---|
| 564 |   repeat
 | 
|---|
| 565 |    inc(i);
 | 
|---|
| 566 |   until (Piece(fNewRec[i],v,2) = id) or (i = Pred(fNewRec.count));
 | 
|---|
| 567 |   if Piece(fNewrec[i],v,2) = id then
 | 
|---|
| 568 |     fldVal := Piece(fNewrec[i],v,3)
 | 
|---|
| 569 |   else
 | 
|---|
| 570 |     fldVal := '^';
 | 
|---|
| 571 |   fldRec.id := id;
 | 
|---|
| 572 |   fldrec.name := name;
 | 
|---|
| 573 |   fldRec.intern := Piece(fldVal,'^',1);
 | 
|---|
| 574 |   fldRec.extern := Piece(fldval,'^',2);
 | 
|---|
| 575 |   {get the original values for later comparison}
 | 
|---|
| 576 |   fldVal := GetOrigVal(id);
 | 
|---|
| 577 |   fldRec.internOrig := Piece(fldVal,'^',1);
 | 
|---|
| 578 |   fldRec.internOrig := Piece(fldVal,'^',2);
 | 
|---|
| 579 |   {add this field to list}
 | 
|---|
| 580 |   fFieldList.addobject(id,fldrec);
 | 
|---|
| 581 | end;
 | 
|---|
| 582 | 
 | 
|---|
| 583 | procedure TProbrec.LoadComments;
 | 
|---|
| 584 | var
 | 
|---|
| 585 |   i,j:integer;
 | 
|---|
| 586 |   cv, noedit:string;
 | 
|---|
| 587 |   co:TComment;
 | 
|---|
| 588 |   first:boolean;
 | 
|---|
| 589 | begin
 | 
|---|
| 590 |   j := 1; {first comment must be 1 or greater}
 | 
|---|
| 591 |   first := true;
 | 
|---|
| 592 |   for i := 0 to Pred(fNewRec.count) do
 | 
|---|
| 593 |     begin
 | 
|---|
| 594 |       if Piece(Piece(fNewRec[i],v,2),',',1) = '10' then
 | 
|---|
| 595 |         begin
 | 
|---|
| 596 |           if first then {the first line is just a counter}
 | 
|---|
| 597 |             begin
 | 
|---|
| 598 |               first := false;
 | 
|---|
| 599 |               // 'NEWþ10,0þ-1^These notes are now in XHTML format and must be modified via CPRS-R.'
 | 
|---|
| 600 |               noedit := Piece(fNewRec[i], v, 3);
 | 
|---|
| 601 |               if Piece(noedit, U, 1) = '-1' then
 | 
|---|
| 602 |                 begin
 | 
|---|
| 603 |                   fCmtIsXHTML := TRUE;
 | 
|---|
| 604 |                   fCmtNoEditReason := Piece(noedit, U, 2);
 | 
|---|
| 605 |                 end
 | 
|---|
| 606 |               else
 | 
|---|
| 607 |                 begin
 | 
|---|
| 608 |                   fCmtIsXHTML := FALSE;
 | 
|---|
| 609 |                   fCmtNoEditReason := '';
 | 
|---|
| 610 |                 end;
 | 
|---|
| 611 |             end
 | 
|---|
| 612 |           else
 | 
|---|
| 613 |             begin
 | 
|---|
| 614 |               cv := Piece(fNewRec[i],v,3);
 | 
|---|
| 615 |               co := TComment.Create(cv);
 | 
|---|
| 616 |               fComments.add(co); {put object in list}
 | 
|---|
| 617 |               fFieldList.addObject('10,' + inttostr(j),co);
 | 
|---|
| 618 |               inc(j);
 | 
|---|
| 619 |             end;
 | 
|---|
| 620 |         end;
 | 
|---|
| 621 |     end;
 | 
|---|
| 622 | end;
 | 
|---|
| 623 | 
 | 
|---|
| 624 | function TProbRec.GetCommentCount:integer;
 | 
|---|
| 625 | begin
 | 
|---|
| 626 |   result := fComments.count;
 | 
|---|
| 627 | end;
 | 
|---|
| 628 | 
 | 
|---|
| 629 | procedure TProbRec.AddNewComment(Txt:string);
 | 
|---|
| 630 | var
 | 
|---|
| 631 |   cor:TComment;
 | 
|---|
| 632 | begin
 | 
|---|
| 633 |   cor := TComment.create('NEW^^' + txt + '^A^' + FloatToStr(FMToday) + '^' + IntToStr(User.DUZ));
 | 
|---|
| 634 |   fComments.add(cor);
 | 
|---|
| 635 |   fFieldList.addObject('10,"NEW",' + inttostr(fComments.count),cor);
 | 
|---|
| 636 | end;
 | 
|---|
| 637 | 
 | 
|---|
| 638 | function TProbrec.GetModDate:TDateTime;
 | 
|---|
| 639 | var
 | 
|---|
| 640 |   dt:string;
 | 
|---|
| 641 | begin
 | 
|---|
| 642 |   dt := fModDate.extern;
 | 
|---|
| 643 |   result := GetTDateTime(dt);
 | 
|---|
| 644 | end;
 | 
|---|
| 645 | 
 | 
|---|
| 646 | procedure TProbrec.SetModDate(value:TDateTime);
 | 
|---|
| 647 | begin
 | 
|---|
| 648 |   SetDate(fModDate,value);
 | 
|---|
| 649 | end;
 | 
|---|
| 650 | 
 | 
|---|
| 651 | function TProbRec.GetModDatstr:string;
 | 
|---|
| 652 | begin
 | 
|---|
| 653 |   result := fModdate.extern;
 | 
|---|
| 654 | end;
 | 
|---|
| 655 | 
 | 
|---|
| 656 | procedure TProbRec.SetModDatStr(value:String);
 | 
|---|
| 657 | begin
 | 
|---|
| 658 |   SetDateString(fModDate,value);
 | 
|---|
| 659 | end;
 | 
|---|
| 660 | 
 | 
|---|
| 661 | procedure TProbRec.SetDateString(df:TKeyVal;value:string);
 | 
|---|
| 662 | var
 | 
|---|
| 663 |   {c:char;
 | 
|---|
| 664 |   days:longint;}
 | 
|---|
| 665 |   fmresult: double ;
 | 
|---|
| 666 | begin
 | 
|---|
| 667 |   {try  }
 | 
|---|
| 668 |   if (value = '') then
 | 
|---|
| 669 |     begin
 | 
|---|
| 670 |       df.Intern := '';
 | 
|---|
| 671 |       df.Extern := '';
 | 
|---|
| 672 |     end
 | 
|---|
| 673 |   else
 | 
|---|
| 674 |     begin
 | 
|---|
| 675 |       fmresult := StrToFMDateTime(value) ;
 | 
|---|
| 676 |       if fmresult = -1 then
 | 
|---|
| 677 |         begin
 | 
|---|
| 678 |           df.intern := '0';
 | 
|---|
| 679 |           df.extern := '';
 | 
|---|
| 680 |         end
 | 
|---|
| 681 |       else
 | 
|---|
| 682 |         begin
 | 
|---|
| 683 |           df.intern := Piece(FloatToStr(fmresult),'.',1);
 | 
|---|
| 684 |           df.extern := FormatFMDateTime('mmm dd yyyy',fmresult);
 | 
|---|
| 685 |         end ;
 | 
|---|
| 686 |     end;
 | 
|---|
| 687 | end;
 | 
|---|
| 688 | 
 | 
|---|
| 689 | function  TProbrec.GetEntDate:TDateTime;
 | 
|---|
| 690 | var
 | 
|---|
| 691 |   dt:string;
 | 
|---|
| 692 | begin
 | 
|---|
| 693 |   dt := fEntDate.extern;
 | 
|---|
| 694 |   result := GetTDateTime(dt);
 | 
|---|
| 695 | end;
 | 
|---|
| 696 | 
 | 
|---|
| 697 | procedure TProbrec.SetEntDate(value:TDateTime);
 | 
|---|
| 698 | begin
 | 
|---|
| 699 |   SetDate(fEntDate,value);
 | 
|---|
| 700 | end;
 | 
|---|
| 701 | 
 | 
|---|
| 702 | function TProbRec.GetEntDatstr:string;
 | 
|---|
| 703 | begin
 | 
|---|
| 704 |   result:=fEntdate.extern;
 | 
|---|
| 705 | end;
 | 
|---|
| 706 | 
 | 
|---|
| 707 | procedure TProbRec.SetEntDatStr(value:String);
 | 
|---|
| 708 | begin
 | 
|---|
| 709 |   SetDateString(fEntDate,value);
 | 
|---|
| 710 | end;
 | 
|---|
| 711 | 
 | 
|---|
| 712 | function  TProbrec.GetOnsetDate:TDateTime;
 | 
|---|
| 713 | var
 | 
|---|
| 714 |   dt:string;
 | 
|---|
| 715 | begin
 | 
|---|
| 716 |   dt := fOnsetDate.extern;
 | 
|---|
| 717 |   result := GetTDateTime(dt);
 | 
|---|
| 718 | end;
 | 
|---|
| 719 | 
 | 
|---|
| 720 | procedure TProbrec.SetOnsetDate(value:TDateTime);
 | 
|---|
| 721 | begin
 | 
|---|
| 722 |   SetDate(fOnsetDate,value);
 | 
|---|
| 723 | end;
 | 
|---|
| 724 | 
 | 
|---|
| 725 | function TProbRec.GetOnsetDatstr:string;
 | 
|---|
| 726 | begin
 | 
|---|
| 727 |   result := fOnsetdate.extern;
 | 
|---|
| 728 | end;
 | 
|---|
| 729 | 
 | 
|---|
| 730 | procedure TProbRec.SetOnsetDatStr(value:String);
 | 
|---|
| 731 | begin
 | 
|---|
| 732 |   SetDateString(fOnsetDate,value);
 | 
|---|
| 733 | end;
 | 
|---|
| 734 | 
 | 
|---|
| 735 | procedure TProbrec.SetDate(datefld:TKeyVal;dt:TDateTime);
 | 
|---|
| 736 | begin
 | 
|---|
| 737 |   datefld.extern := DatetoStr(dt);
 | 
|---|
| 738 |   datefld.intern := FloatToStr(DateTimetoFMDateTime(dt));
 | 
|---|
| 739 | end;
 | 
|---|
| 740 | 
 | 
|---|
| 741 | function TProbrec.GetSCProblem:Boolean;
 | 
|---|
| 742 | begin
 | 
|---|
| 743 |   result := (fServCon.Intern='1');
 | 
|---|
| 744 | end;
 | 
|---|
| 745 | 
 | 
|---|
| 746 | function TProbRec.GetCondition:string;
 | 
|---|
| 747 | begin
 | 
|---|
| 748 |   result := fCondition.Intern;
 | 
|---|
| 749 | end;
 | 
|---|
| 750 | 
 | 
|---|
| 751 | procedure TProbRec.SetCondition(value:string);
 | 
|---|
| 752 | begin
 | 
|---|
| 753 |   if (uppercase(value[1])='T') or (value='1') then
 | 
|---|
| 754 |     begin
 | 
|---|
| 755 |       fCondition.intern := 'T';
 | 
|---|
| 756 |       fCondition.extern := 'Transcribed';
 | 
|---|
| 757 |     end
 | 
|---|
| 758 |   else if (uppercase(value[1]) = 'P') or (value = '0') then
 | 
|---|
| 759 |     begin
 | 
|---|
| 760 |       fCondition.intern := 'P';
 | 
|---|
| 761 |       fCondition.extern := 'Permanent';
 | 
|---|
| 762 |     end
 | 
|---|
| 763 |   else if uppercase(value[1]) = 'H' then
 | 
|---|
| 764 |     begin
 | 
|---|
| 765 |       fCondition.intern := 'H';
 | 
|---|
| 766 |       fCondition.extern := 'Hidden';
 | 
|---|
| 767 |     end;
 | 
|---|
| 768 | end;
 | 
|---|
| 769 | 
 | 
|---|
| 770 | procedure TProbRec.SetSCProblem(value:Boolean);
 | 
|---|
| 771 | begin
 | 
|---|
| 772 |   if value = true then
 | 
|---|
| 773 |     begin
 | 
|---|
| 774 |       fServCon.intern := '1';
 | 
|---|
| 775 |       fServCon.Extern := 'YES';
 | 
|---|
| 776 |     end
 | 
|---|
| 777 |   else
 | 
|---|
| 778 |     begin
 | 
|---|
| 779 |       fServCon.intern := '0';
 | 
|---|
| 780 |       fServCon.Extern := 'NO';
 | 
|---|
| 781 |     end;
 | 
|---|
| 782 | end;
 | 
|---|
| 783 | 
 | 
|---|
| 784 | function  TProbrec.GetAOProblem:Boolean;
 | 
|---|
| 785 | begin
 | 
|---|
| 786 |   result := (fAOExposure.Intern='1');
 | 
|---|
| 787 | end;
 | 
|---|
| 788 | 
 | 
|---|
| 789 | procedure TProbRec.SetAOProblem(value:Boolean);
 | 
|---|
| 790 | begin
 | 
|---|
| 791 |   if value = true then
 | 
|---|
| 792 |     begin
 | 
|---|
| 793 |       fAOExposure.intern := '1';
 | 
|---|
| 794 |       fAOExposure.extern := 'Yes';
 | 
|---|
| 795 |     end
 | 
|---|
| 796 |   else
 | 
|---|
| 797 |     begin
 | 
|---|
| 798 |       fAOExposure.intern := '0';
 | 
|---|
| 799 |       fAOExposure.extern := 'No';
 | 
|---|
| 800 |     end;
 | 
|---|
| 801 | end;
 | 
|---|
| 802 | 
 | 
|---|
| 803 | function  TProbrec.GetRADProblem:Boolean;
 | 
|---|
| 804 | begin
 | 
|---|
| 805 |   result := (fRADExposure.Intern = '1');
 | 
|---|
| 806 | end;
 | 
|---|
| 807 | 
 | 
|---|
| 808 | procedure TProbRec.SetRADProblem(value:Boolean);
 | 
|---|
| 809 | begin
 | 
|---|
| 810 |   if value = true then
 | 
|---|
| 811 |     begin
 | 
|---|
| 812 |       fRADExposure.intern := '1';
 | 
|---|
| 813 |       fRADExposure.extern := 'Yes';
 | 
|---|
| 814 |     end
 | 
|---|
| 815 |   else
 | 
|---|
| 816 |     begin
 | 
|---|
| 817 |       fRADExposure.intern := '0';
 | 
|---|
| 818 |       fRADExposure.extern := 'No';
 | 
|---|
| 819 |     end;
 | 
|---|
| 820 |  end;
 | 
|---|
| 821 | 
 | 
|---|
| 822 | function TProbrec.GetENVProblem:Boolean;
 | 
|---|
| 823 | begin
 | 
|---|
| 824 |   result := (fGulfExposure.Intern = '1');
 | 
|---|
| 825 | end;
 | 
|---|
| 826 | 
 | 
|---|
| 827 | procedure TProbRec.SetENVProblem(value:Boolean);
 | 
|---|
| 828 | begin
 | 
|---|
| 829 |   if value = true then
 | 
|---|
| 830 |     begin
 | 
|---|
| 831 |       fGulfExposure.intern := '1';
 | 
|---|
| 832 |       fGulfExposure.extern := 'Yes';
 | 
|---|
| 833 |     end
 | 
|---|
| 834 |   else
 | 
|---|
| 835 |     begin
 | 
|---|
| 836 |       fGulfExposure.intern := '0';
 | 
|---|
| 837 |       fGulfExposure.extern := 'No';
 | 
|---|
| 838 |     end;
 | 
|---|
| 839 |  end;
 | 
|---|
| 840 | 
 | 
|---|
| 841 | function TProbrec.GetHNCProblem:Boolean;
 | 
|---|
| 842 | begin
 | 
|---|
| 843 |   result := (fHNC.Intern = '1');
 | 
|---|
| 844 | end;
 | 
|---|
| 845 | 
 | 
|---|
| 846 | procedure TProbRec.SetHNCProblem(value:Boolean);
 | 
|---|
| 847 | begin
 | 
|---|
| 848 |   if value = true then
 | 
|---|
| 849 |     begin
 | 
|---|
| 850 |       fHNC.intern := '1';
 | 
|---|
| 851 |       fHNC.extern := 'Yes';
 | 
|---|
| 852 |     end
 | 
|---|
| 853 |   else
 | 
|---|
| 854 |     begin
 | 
|---|
| 855 |       fHNC.intern := '0';
 | 
|---|
| 856 |       fHNC.extern := 'No';
 | 
|---|
| 857 |     end;
 | 
|---|
| 858 |  end;
 | 
|---|
| 859 | 
 | 
|---|
| 860 | function TProbrec.GetMSTProblem:Boolean;
 | 
|---|
| 861 | begin
 | 
|---|
| 862 |   result := (fMST.Intern = '1');
 | 
|---|
| 863 | end;
 | 
|---|
| 864 | 
 | 
|---|
| 865 | procedure TProbRec.SetMSTProblem(value:Boolean);
 | 
|---|
| 866 | begin
 | 
|---|
| 867 |   if value = true then
 | 
|---|
| 868 |     begin
 | 
|---|
| 869 |       fMST.intern := '1';
 | 
|---|
| 870 |       fMST.extern := 'Yes';
 | 
|---|
| 871 |     end
 | 
|---|
| 872 |   else
 | 
|---|
| 873 |     begin
 | 
|---|
| 874 |       fMST.intern := '0';
 | 
|---|
| 875 |       fMST.extern := 'No';
 | 
|---|
| 876 |     end;
 | 
|---|
| 877 |  end;
 | 
|---|
| 878 | 
 | 
|---|
| 879 | function TProbRec.GetStatus:String;
 | 
|---|
| 880 | begin
 | 
|---|
| 881 |   result := Uppercase(fStatus.intern);
 | 
|---|
| 882 | end;
 | 
|---|
| 883 | 
 | 
|---|
| 884 | procedure TProbRec.SetStatus(value:String);
 | 
|---|
| 885 | begin
 | 
|---|
| 886 |   if (UpperCase(Value) = 'ACTIVE') or (Uppercase(value) = 'A') then
 | 
|---|
| 887 |     begin
 | 
|---|
| 888 |       fStatus.intern := 'A';
 | 
|---|
| 889 |       fStatus.extern := 'ACTIVE';
 | 
|---|
| 890 |     end
 | 
|---|
| 891 |   else
 | 
|---|
| 892 |     begin
 | 
|---|
| 893 |       fStatus.intern := 'I';
 | 
|---|
| 894 |       fStatus.extern := 'INACTIVE';
 | 
|---|
| 895 |     end;
 | 
|---|
| 896 | end;
 | 
|---|
| 897 | 
 | 
|---|
| 898 | function TProbRec.GetPriority:String;
 | 
|---|
| 899 | begin
 | 
|---|
| 900 |   result := Uppercase(fPriority.intern);
 | 
|---|
| 901 | end;
 | 
|---|
| 902 | 
 | 
|---|
| 903 | procedure TProbRec.SetPriority(value:String);
 | 
|---|
| 904 | begin
 | 
|---|
| 905 |   if (UpperCase(Value) = 'ACUTE') or (Uppercase(value) = 'A') then
 | 
|---|
| 906 |     begin
 | 
|---|
| 907 |       fPriority.intern := 'A';
 | 
|---|
| 908 |       fPriority.extern := 'ACUTE';
 | 
|---|
| 909 |     end
 | 
|---|
| 910 |   else
 | 
|---|
| 911 |     begin
 | 
|---|
| 912 |       fPriority.intern := 'C';
 | 
|---|
| 913 |       fPriority.extern := 'CHRONIC';
 | 
|---|
| 914 |     end;
 | 
|---|
| 915 | end;
 | 
|---|
| 916 | 
 | 
|---|
| 917 | function  TProbrec.GetResDate:TDateTime;
 | 
|---|
| 918 | var
 | 
|---|
| 919 |   dt:string;
 | 
|---|
| 920 | begin
 | 
|---|
| 921 |   dt := fResolveDate.extern;
 | 
|---|
| 922 |   result := GetTDateTime(dt);
 | 
|---|
| 923 | end;
 | 
|---|
| 924 | 
 | 
|---|
| 925 | procedure TProbrec.SetResDate(value:TDateTime);
 | 
|---|
| 926 | begin
 | 
|---|
| 927 |   SetDate(fResolveDate,value);
 | 
|---|
| 928 | end;
 | 
|---|
| 929 | 
 | 
|---|
| 930 | function TProbRec.GetResDatstr:string;
 | 
|---|
| 931 | begin
 | 
|---|
| 932 |   result := fResolvedate.extern;
 | 
|---|
| 933 | end;
 | 
|---|
| 934 | 
 | 
|---|
| 935 | procedure TProbRec.SetResDatStr(value:String);
 | 
|---|
| 936 | begin
 | 
|---|
| 937 |   SetDateString(fResolveDate,value);
 | 
|---|
| 938 | end;
 | 
|---|
| 939 | 
 | 
|---|
| 940 | function TProbrec.GetRecDate:TDateTime;
 | 
|---|
| 941 | var
 | 
|---|
| 942 |   dt:string;
 | 
|---|
| 943 | begin
 | 
|---|
| 944 |   dt := fRecordDate.extern;
 | 
|---|
| 945 |   result := GetTDateTime(dt);
 | 
|---|
| 946 | end;
 | 
|---|
| 947 | 
 | 
|---|
| 948 | procedure TProbrec.SetRecDate(value:TDateTime);
 | 
|---|
| 949 | begin
 | 
|---|
| 950 |   SetDate(fRecordDate,value);
 | 
|---|
| 951 | end;
 | 
|---|
| 952 | 
 | 
|---|
| 953 | function TProbRec.GetRecDatstr:string;
 | 
|---|
| 954 | begin
 | 
|---|
| 955 |   result := fRecordDate.extern;
 | 
|---|
| 956 | end;
 | 
|---|
| 957 | 
 | 
|---|
| 958 | procedure TProbRec.SetRecDatStr(value:String);
 | 
|---|
| 959 | begin
 | 
|---|
| 960 |   SetDateString(fRecordDate,value);
 | 
|---|
| 961 | end;
 | 
|---|
| 962 | 
 | 
|---|
| 963 | procedure TProbRec.SetNarrative(value:TKeyVal);
 | 
|---|
| 964 | begin
 | 
|---|
| 965 |   if (value.intern = '') or (value.extern = '') then
 | 
|---|
| 966 |     begin
 | 
|---|
| 967 |       InfoBox('Both internal and external values required', 'Error', MB_OK or MB_ICONERROR);
 | 
|---|
| 968 |       exit;
 | 
|---|
| 969 |     end;
 | 
|---|
| 970 |   fNarrative.intern := value.intern;
 | 
|---|
| 971 |   fNarrative.extern := value.extern;
 | 
|---|
| 972 | end;
 | 
|---|
| 973 | 
 | 
|---|
| 974 | function TProbRec.GetTDateTime(dt:string):TDateTime;
 | 
|---|
| 975 | begin
 | 
|---|
| 976 |   try
 | 
|---|
| 977 |     if dt = '' then result := 0 else result := StrtoDate(dt);
 | 
|---|
| 978 |   except on exception do
 | 
|---|
| 979 |     result := 0;
 | 
|---|
| 980 |   end;
 | 
|---|
| 981 | end;
 | 
|---|
| 982 | 
 | 
|---|
| 983 | {--------------------------------- Filer Objects -------------------------}
 | 
|---|
| 984 | 
 | 
|---|
| 985 | function TProbRec.GetFilerObject:TstringList;
 | 
|---|
| 986 | {return array for filing in dhcp}
 | 
|---|
| 987 | var
 | 
|---|
| 988 |   i:integer;
 | 
|---|
| 989 |   fldID,fldVal: string;
 | 
|---|
| 990 | begin
 | 
|---|
| 991 |   fFilerObj.clear;
 | 
|---|
| 992 |   for i := 0 to pred(fFieldList.count) do
 | 
|---|
| 993 |     begin
 | 
|---|
| 994 |       fldID := fFieldList[i];
 | 
|---|
| 995 |       if pos(',',fldID)>0 then {is a comment field}
 | 
|---|
| 996 |         fldVal := TComment(fFieldList.objects[i]).TComtoDHCPCom
 | 
|---|
| 997 |       else {is a regular field}
 | 
|---|
| 998 |         begin
 | 
|---|
| 999 |           if fldID = '1.02' then {have to make exception for CONDITION field}
 | 
|---|
| 1000 |             fldVal := TKeyVal(fFieldList.objects[i]).intern
 | 
|---|
| 1001 |           else
 | 
|---|
| 1002 |             fldVal := FixQuotes(TKeyVal(fFieldList.objects[i]).DHCPField);
 | 
|---|
| 1003 |         end;
 | 
|---|
| 1004 |       fFilerObj.add('GMPFLD(' + fldID + ')="' + fldVal + '"');
 | 
|---|
| 1005 |     end;
 | 
|---|
| 1006 |   fFilerObj.add('GMPFLD(10,0)="' + inttostr(fComments.count) + '"');
 | 
|---|
| 1007 |    {now get original fields}
 | 
|---|
| 1008 |   for i := 0 to pred(fOrigRec.count) do
 | 
|---|
| 1009 |     begin
 | 
|---|
| 1010 |       fldVal  := fOrigRec[i];
 | 
|---|
| 1011 |       fldID   := Piece(fldVal,v,2);
 | 
|---|
| 1012 |       fldVal  := FixQuotes(Piece(fldVal,v,3));
 | 
|---|
| 1013 |       fFilerObj.add('GMPORIG(' + fldID + ')="' + fldVal + '"');
 | 
|---|
| 1014 |     end;
 | 
|---|
| 1015 |   result := fFilerObj;
 | 
|---|
| 1016 | end;
 | 
|---|
| 1017 | 
 | 
|---|
| 1018 | function TProbRec.GetAltFilerObject:TstringList;
 | 
|---|
| 1019 | {return array for filing in dhcp via UPDATE^GMPLUTL}
 | 
|---|
| 1020 | {NOTES:
 | 
|---|
| 1021 |   - leave narrative out, looks like inclusion causes new entry
 | 
|---|
| 1022 |   - Date recorded (1.09) is non-editable, causes error if present}
 | 
|---|
| 1023 | var
 | 
|---|
| 1024 |   i: integer;
 | 
|---|
| 1025 |   fldID,fldVal: string;
 | 
|---|
| 1026 | begin
 | 
|---|
| 1027 |   fFilerObj.Clear;
 | 
|---|
| 1028 |   for i := 0 to pred(fFieldList.count) do
 | 
|---|
| 1029 |     begin
 | 
|---|
| 1030 |       fldID := fFieldList[i];                      
 | 
|---|
| 1031 |       if pos(u + fldID + u, '^.01^.12^.13^1.01^1.05^1.07^1.08^1.1^1.11^1.12^1.13^1.15^1.16') > 0 then
 | 
|---|
| 1032 |         {is a field eligible for update}
 | 
|---|
| 1033 |         begin
 | 
|---|
| 1034 |           fldVal := TKeyVal(fFieldList.objects[i]).intern;
 | 
|---|
| 1035 |           fFilerObj.add('ORARRAY("' + TkeyVal(fFieldList.objects[i]).Name + '")="' + fldVal + '"');
 | 
|---|
| 1036 |         end;
 | 
|---|
| 1037 |     end;
 | 
|---|
| 1038 |   fFilerObj.add('ORARRAY("PROBLEM")="' + fPIFN + '"');
 | 
|---|
| 1039 |   result := fFilerObj;
 | 
|---|
| 1040 | end;
 | 
|---|
| 1041 | 
 | 
|---|
| 1042 | function TProbRec.FieldChanged(fldName:string):boolean;
 | 
|---|
| 1043 | var
 | 
|---|
| 1044 |   i: integer;
 | 
|---|
| 1045 | begin
 | 
|---|
| 1046 |   i := -1;
 | 
|---|
| 1047 |   repeat
 | 
|---|
| 1048 |     inc(i);
 | 
|---|
| 1049 |   until (TKeyVal(fFieldList.objects[i]).name = fldName) or
 | 
|---|
| 1050 |         (i=Pred(fFieldList.count));
 | 
|---|
| 1051 |   if (TKeyVal(fFieldList.objects[i]).name = fldName) and
 | 
|---|
| 1052 |      (TKeyVal(fFieldList.objects[i]).intern = TKeyVal(fFieldList.objects[i]).internOrig) then
 | 
|---|
| 1053 |     Result := false
 | 
|---|
| 1054 |   else
 | 
|---|
| 1055 |     Result := true;
 | 
|---|
| 1056 | end;
 | 
|---|
| 1057 | 
 | 
|---|
| 1058 | {----------------------------------- Check Date -------------------------------}
 | 
|---|
| 1059 | 
 | 
|---|
| 1060 | function DateStringOK(ds: string): string;
 | 
|---|
| 1061 | var
 | 
|---|
| 1062 |   fmresult: double ;
 | 
|---|
| 1063 | begin
 | 
|---|
| 1064 |   ds := StripSpace(ds);
 | 
|---|
| 1065 |   result := ds;
 | 
|---|
| 1066 |   if ds = '' then exit;
 | 
|---|
| 1067 |   if Copy(ds,1,1) = ',' then ds := Copy(ds, 2, 99) ;
 | 
|---|
| 1068 |   fmresult := StrToFMDateTime(ds) ;
 | 
|---|
| 1069 |   if fmresult = -1 then
 | 
|---|
| 1070 |     result := 'ERROR'
 | 
|---|
| 1071 |   else
 | 
|---|
| 1072 |     result := FormatFMDateTime('mmm dd yyyy',fmresult) ;
 | 
|---|
| 1073 | end;
 | 
|---|
| 1074 | 
 | 
|---|
| 1075 | function StripSpace(str: string): string;
 | 
|---|
| 1076 | var
 | 
|---|
| 1077 |   i,j: integer;
 | 
|---|
| 1078 | begin
 | 
|---|
| 1079 |   i := 1;
 | 
|---|
| 1080 |   j := length(str);
 | 
|---|
| 1081 |   while str[i] = #32 do inc(i);
 | 
|---|
| 1082 |   while str[j] = #32 do dec(j);
 | 
|---|
| 1083 |   result := copy(str, i, j-i+1);
 | 
|---|
| 1084 | end;
 | 
|---|
| 1085 | 
 | 
|---|
| 1086 | {-------------------- procedures used in View Filters ----------------------}
 | 
|---|
| 1087 | 
 | 
|---|
| 1088 | procedure GetListforIP(Alist:TstringList; AGrid: TCaptionListBox);
 | 
|---|
| 1089 | var
 | 
|---|
| 1090 |   i:integer;
 | 
|---|
| 1091 |   sv:string;
 | 
|---|
| 1092 |   anon:boolean;
 | 
|---|
| 1093 | begin
 | 
|---|
| 1094 |   anon:=false;
 | 
|---|
| 1095 |   with AGrid do
 | 
|---|
| 1096 |     for i := 0 to pred(items.count) do
 | 
|---|
| 1097 |       begin
 | 
|---|
| 1098 |         //pt := cells[12,i];
 | 
|---|
| 1099 |           {location type is ward, or no clinic and service is non nil}
 | 
|---|
| 1100 |         {if (pt = PL_WARD) or ((cells[10,i] = '') and (cells[11,i] <> '')) then
 | 
|---|
| 1101 |           begin }
 | 
|---|
| 1102 |             sv := Piece( items[i], U, 12);
 | 
|---|
| 1103 |             if sv <> '' then
 | 
|---|
| 1104 |               begin
 | 
|---|
| 1105 |                 if Alist.indexof(sv) < 0 then Alist.add(sv);
 | 
|---|
| 1106 |               end
 | 
|---|
| 1107 |             else if (sv = '')  and (not anon) then
 | 
|---|
| 1108 |               begin
 | 
|---|
| 1109 |                 Alist.add('-1^<None recorded>');
 | 
|---|
| 1110 |                 anon := true;
 | 
|---|
| 1111 |               end;
 | 
|---|
| 1112 |           //end;
 | 
|---|
| 1113 |       end;
 | 
|---|
| 1114 | end;
 | 
|---|
| 1115 | 
 | 
|---|
| 1116 | Procedure GetListforOP(Alist:TstringList; AGrid: TCaptionListBox);
 | 
|---|
| 1117 | var {get list of extant clinics from patient's problem list}
 | 
|---|
| 1118 |   i: integer;
 | 
|---|
| 1119 |   clin: string;
 | 
|---|
| 1120 |   anon: boolean;
 | 
|---|
| 1121 | begin
 | 
|---|
| 1122 |   anon := false;
 | 
|---|
| 1123 |   with AGrid do
 | 
|---|
| 1124 |     for i := 0 to pred(items.count) do
 | 
|---|
| 1125 |       {begin
 | 
|---|
| 1126 |         pt := cells[12,i];
 | 
|---|
| 1127 |         if pt <> PL_WARD then}
 | 
|---|
| 1128 |           begin
 | 
|---|
| 1129 |             clin := Piece( items[i], U, 11);
 | 
|---|
| 1130 |             if ((clin = '') or (clin = '0')) and (not anon) then
 | 
|---|
| 1131 |               begin
 | 
|---|
| 1132 |                 AList.add('-1^<None recorded>'); {add a holder for "no clinic"}
 | 
|---|
| 1133 |                 anon := true;
 | 
|---|
| 1134 |               end
 | 
|---|
| 1135 |             else if (clin<>'') and (Alist.indexof(clin)<0) then
 | 
|---|
| 1136 |               Alist.add(clin);
 | 
|---|
| 1137 |           end;
 | 
|---|
| 1138 |        //end;
 | 
|---|
| 1139 | end;
 | 
|---|
| 1140 | 
 | 
|---|
| 1141 | procedure LoadFilterList(Alist: TstringList; DestList: TstringList);
 | 
|---|
| 1142 | var
 | 
|---|
| 1143 |   i:integer;
 | 
|---|
| 1144 | begin
 | 
|---|
| 1145 |   for i := 0 to pred(Alist.count) do DestList.add(Piece(Alist[i],u,1));
 | 
|---|
| 1146 | end;
 | 
|---|
| 1147 | 
 | 
|---|
| 1148 | procedure ShowFilterStatus(s: string);
 | 
|---|
| 1149 | var
 | 
|---|
| 1150 |   lin:string;
 | 
|---|
| 1151 | begin
 | 
|---|
| 1152 |   if      s = PL_OP_VIEW then lin := 'View clinics'
 | 
|---|
| 1153 |   else if s = PL_IP_VIEW then lin := 'View services'
 | 
|---|
| 1154 |   else                        lin := 'View all problems';
 | 
|---|
| 1155 |   Application.ProcessMessages;
 | 
|---|
| 1156 | end;
 | 
|---|
| 1157 | 
 | 
|---|
| 1158 | function ByProvider: string;
 | 
|---|
| 1159 | begin
 | 
|---|
| 1160 |   result := '';
 | 
|---|
| 1161 |   if PLFilters.ProviderList.count > 0 then
 | 
|---|
| 1162 |     if PLFilters.ProviderList[0] <> '0' then result := 'by Provider';
 | 
|---|
| 1163 | end;
 | 
|---|
| 1164 | 
 | 
|---|
| 1165 | procedure SetViewFilters(Alist:TStringList);
 | 
|---|
| 1166 | begin
 | 
|---|
| 1167 |   if PLFilters.ProviderList.count = 0 then
 | 
|---|
| 1168 |     PLFilters.ProviderList.add('0'); {default to all provides if none selected}
 | 
|---|
| 1169 |   if PLUser.usCurrentView = PL_OP_VIEW then
 | 
|---|
| 1170 |     begin
 | 
|---|
| 1171 |       if PLFilters.ClinicList.count = 0 then
 | 
|---|
| 1172 |         begin
 | 
|---|
| 1173 |           //GetListforOP(Alist);
 | 
|---|
| 1174 |           LoadFilterList(Alist,PLFilters.ClinicList);
 | 
|---|
| 1175 |         end;
 | 
|---|
| 1176 |       //PostMessage(frmProblems.Handle, UM_PLFILTER,0,0);
 | 
|---|
| 1177 |     end
 | 
|---|
| 1178 |   else if PLUser.usCurrentView = PL_IP_VIEW then
 | 
|---|
| 1179 |     begin
 | 
|---|
| 1180 |       if PLFilters.ServiceList.count=0 then
 | 
|---|
| 1181 |         begin
 | 
|---|
| 1182 |           //GetListforIP(Alist);
 | 
|---|
| 1183 |           LoadFilterList(Alist,PLFilters.ServiceList);
 | 
|---|
| 1184 |         end;
 | 
|---|
| 1185 |       //PostMessage(frmProblems.Handle, UM_PLFILTER,0,0);
 | 
|---|
| 1186 |     end
 | 
|---|
| 1187 |   else {if no default view specified, assumed to be unfiltered}
 | 
|---|
| 1188 |     PlUser.usCurrentView := PL_UF_VIEW;
 | 
|---|
| 1189 |   ShowFilterStatus(PlUser.usCurrentView);
 | 
|---|
| 1190 | end;
 | 
|---|
| 1191 | 
 | 
|---|
| 1192 | procedure InitViewFilters(Alist: TstringList);
 | 
|---|
| 1193 | var
 | 
|---|
| 1194 |   i:integer;
 | 
|---|
| 1195 | begin
 | 
|---|
| 1196 |   if PLUser.usCurrentView = '' then PLUser.usCurrentView := PL_UF_VIEW;
 | 
|---|
| 1197 | 
 | 
|---|
| 1198 |   if (PLUser.usViewProv = '') or (Piece(PLUser.usViewProv, U, 1) = '0') then
 | 
|---|
| 1199 |     begin
 | 
|---|
| 1200 |       PLFilters.ProviderList.clear;
 | 
|---|
| 1201 |       PLFilters.Providerlist.add('0');
 | 
|---|
| 1202 |     end
 | 
|---|
| 1203 |   else {conserve user preferred provider}
 | 
|---|
| 1204 |     PLFilters.ProviderList.Add(Piece(PLUser.usViewProv, U, 1));
 | 
|---|
| 1205 | 
 | 
|---|
| 1206 |   if PLUser.usCurrentView = PL_UF_VIEW then
 | 
|---|
| 1207 |     begin {no filter on patient type, so do routine filter on provider and bail}
 | 
|---|
| 1208 |       SetViewFilters(Alist);
 | 
|---|
| 1209 |       //exit;
 | 
|---|
| 1210 |     end;
 | 
|---|
| 1211 | 
 | 
|---|
| 1212 |   if (PLUser.usCurrentView = PL_OP_VIEW) and (PLUser.usViewClin = '') then
 | 
|---|
| 1213 |     begin {no user preferred list of clinics, so get standard list and bail}
 | 
|---|
| 1214 |       SetViewFilters(Alist);
 | 
|---|
| 1215 |       //exit;
 | 
|---|
| 1216 |     end;
 | 
|---|
| 1217 | 
 | 
|---|
| 1218 |   if (PLUser.usCurrentView = PL_IP_VIEW) and (PLUser.usViewServ = '') then
 | 
|---|
| 1219 |     begin {no user preferred list of services, so get standard list  and bail}
 | 
|---|
| 1220 |       SetViewFilters(Alist);
 | 
|---|
| 1221 |       //exit;
 | 
|---|
| 1222 |     end;
 | 
|---|
| 1223 | 
 | 
|---|
| 1224 |   if (PLUser.usCurrentView = PL_OP_VIEW) and (PLUser.usClinList.Count > 0) then
 | 
|---|
| 1225 |     begin {conserve user preferred clinic list}
 | 
|---|
| 1226 |       for i := 0 to pred(PLUser.usClinList.Count) do
 | 
|---|
| 1227 |         PLFilters.ClinicList.add(PLUser.usClinList[i]);
 | 
|---|
| 1228 |     end;
 | 
|---|
| 1229 | 
 | 
|---|
| 1230 |   if PLUser.usCurrentView = PL_IP_VIEW then
 | 
|---|
| 1231 |     begin {conserve user preferred service list}
 | 
|---|
| 1232 |       for i := 0 to pred(PLUser.usServList.Count) do
 | 
|---|
| 1233 |         PLFilters.ServiceList.add(PLUser.usServList[i]);
 | 
|---|
| 1234 |     end;
 | 
|---|
| 1235 | 
 | 
|---|
| 1236 | //  ShowFilterStatus(PlUser.usCurrentView);
 | 
|---|
| 1237 | //  PostMessage(frmProblems.Handle, UM_PLFILTER,0,0);
 | 
|---|
| 1238 | end;
 | 
|---|
| 1239 | 
 | 
|---|
| 1240 | function ForChars(Num, FontWidth: Integer): Integer;
 | 
|---|
| 1241 | begin
 | 
|---|
| 1242 |   Result := Num * FontWidth;
 | 
|---|
| 1243 | end;
 | 
|---|
| 1244 | 
 | 
|---|
| 1245 | procedure GetFontInfo(AHandle: THandle; var FontWidth, FontHeight: Integer);
 | 
|---|
| 1246 | { pass in a FONT HANDLE & return character width & height }
 | 
|---|
| 1247 | var
 | 
|---|
| 1248 |   DC: HDC;
 | 
|---|
| 1249 |   SaveFont: HFont;
 | 
|---|
| 1250 |   FontMetrics: TTextMetric;
 | 
|---|
| 1251 |   size: TSize ;
 | 
|---|
| 1252 | begin
 | 
|---|
| 1253 |   DC := GetDC(0);
 | 
|---|
| 1254 |   SaveFont := SelectObject(DC, AHandle);
 | 
|---|
| 1255 |   GetTextExtentPoint32(DC, UpperCaseLetters + LowerCaseLetters, 52, size);
 | 
|---|
| 1256 |   FontWidth := size.cx div 52;
 | 
|---|
| 1257 |   GetTextMetrics(DC, FontMetrics);
 | 
|---|
| 1258 |   FontHeight := FontMetrics.tmHeight;
 | 
|---|
| 1259 |   SelectObject(DC, SaveFont);
 | 
|---|
| 1260 |   ReleaseDC(0, DC);
 | 
|---|
| 1261 | end;
 | 
|---|
| 1262 | 
 | 
|---|
| 1263 | function ShortDateStrToDate(shortdate: string): string ;
 | 
|---|
| 1264 | {Converts date in format 'mmm dd,yy' or 'mmm dd,yyyy' to standard 'mm/dd/yy'}
 | 
|---|
| 1265 | var
 | 
|---|
| 1266 |   month,day,year: string ;
 | 
|---|
| 1267 |   i: integer ;
 | 
|---|
| 1268 | begin
 | 
|---|
| 1269 |   result := 'ERROR' ;
 | 
|---|
| 1270 |   if ((Pos(' ',shortdate) <> 4) or (Pos(',',shortdate) <> 7)) then exit ;  {no spaces or comma}
 | 
|---|
| 1271 |   for i := 1 to 12 do
 | 
|---|
| 1272 |     if Months[i] = UpperCase(Copy(shortdate,1,3)) then month := IntToStr(i);
 | 
|---|
| 1273 |   if month = '' then exit ;    {invalid month name}
 | 
|---|
| 1274 |   day  := IntToStr(StrToInt(Copy(shortdate,5,2))) ;
 | 
|---|
| 1275 |   year := IntToStr(StrToInt(Copy(shortdate,8,99))) ;
 | 
|---|
| 1276 |   result := month+'/'+day+'/'+year ;
 | 
|---|
| 1277 | end ;
 | 
|---|
| 1278 | 
 | 
|---|
| 1279 | (*function NewComment: string ;
 | 
|---|
| 1280 | var
 | 
|---|
| 1281 |   frmProbCmt: TfrmProbCmt ;
 | 
|---|
| 1282 | begin
 | 
|---|
| 1283 |   frmProbCmt := TfrmProbCmt.Create(Application) ;
 | 
|---|
| 1284 |   try
 | 
|---|
| 1285 |     frmProbCmt.Execute;
 | 
|---|
| 1286 |     result := frmProbCmt.CmtResult ;
 | 
|---|
| 1287 |   finally
 | 
|---|
| 1288 |     frmProbCmt.Free ;
 | 
|---|
| 1289 |   end ;
 | 
|---|
| 1290 | end ;
 | 
|---|
| 1291 | 
 | 
|---|
| 1292 | function EditComment(OldValue: string): string ;
 | 
|---|
| 1293 | var
 | 
|---|
| 1294 |   frmProbCmt: TfrmProbCmt ;
 | 
|---|
| 1295 | begin
 | 
|---|
| 1296 |   frmProbCmt := TfrmProbCmt.Create(Application) ;
 | 
|---|
| 1297 |   try
 | 
|---|
| 1298 |     frmProbCmt.edComment.Text := Piece(OldValue, U, 2);
 | 
|---|
| 1299 |     frmProbCmt.Execute;
 | 
|---|
| 1300 |     result := frmProbCmt.CmtResult ;
 | 
|---|
| 1301 |   finally
 | 
|---|
| 1302 |     frmProbCmt.Free ;
 | 
|---|
| 1303 |   end ;
 | 
|---|
| 1304 | end ;*)
 | 
|---|
| 1305 | 
 | 
|---|
| 1306 | function FixQuotes(InString: string): string;
 | 
|---|
| 1307 | var
 | 
|---|
| 1308 |   i: integer;
 | 
|---|
| 1309 |   OutString: string;
 | 
|---|
| 1310 | begin
 | 
|---|
| 1311 |   OutString := '';
 | 
|---|
| 1312 |   for i := 1 to Length(InString) do
 | 
|---|
| 1313 |     if CharAt(InString, i) = '"' then
 | 
|---|
| 1314 |       OutString := OutString + '""'
 | 
|---|
| 1315 |     else
 | 
|---|
| 1316 |       OutString := OutString + CharAt(InString, i);
 | 
|---|
| 1317 |   Result := OutString;
 | 
|---|
| 1318 | end;
 | 
|---|
| 1319 | 
 | 
|---|
| 1320 | end.
 | 
|---|