Ignore:
Timestamp:
May 7, 2015, 12:34:29 PM (9 years ago)
Author:
healthsevak
Message:

Updating the working copy to CPRS version 28

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cprs/trunk/CPRS-Chart/Consults/fODConsult.pas

    r829 r1679  
    99  fODBase, StdCtrls, ORCtrls, ExtCtrls, ComCtrls, ORfn, uConst, Buttons,
    1010  Menus, UBAGlobals, rOrders, fBALocalDiagnoses, UBAConst, UBACore, ORNet,
    11   VA508AccessibilityManager ;
     11  ORDtTm, VA508AccessibilityManager ;
    1212
    1313type
    1414  TfrmODCslt = class(TfrmODBase)
     15    pnlMain: TPanel;
     16    lblService: TLabel;
     17    lblProvDiag: TLabel;
     18    lblUrgency: TLabel;
     19    lblPlace: TLabel;
     20    lblAttn: TLabel;
     21    lblLatest: TStaticText;
     22    lblEarliest: TStaticText;
     23    pnlReason: TPanel;
     24    lblReason: TLabel;
     25    memReason: TRichEdit;
    1526    cboService: TORComboBox;
    1627    cboUrgency: TORComboBox;
     
    1829    txtProvDiag: TCaptionEdit;
    1930    txtAttn: TORComboBox;
    20     lblService: TLabel;
    21     lblUrgency: TLabel;
    22     lblPlace: TLabel;
    23     lblAttn: TLabel;
    24     lblProvDiag: TLabel;
    2531    treService: TORTreeView;
    2632    cboCategory: TORComboBox;
    2733    pnlServiceTreeButton: TKeyClickPanel;
    2834    btnServiceTree: TSpeedButton;
     35    gbInptOpt: TGroupBox;
     36    radInpatient: TRadioButton;
     37    radOutpatient: TRadioButton;
     38    btnDiagnosis: TButton;
     39    cmdLexSearch: TButton;
     40    calEarliest: TORDateBox;
     41    calLatest: TORDateBox;
    2942    mnuPopProvDx: TPopupMenu;
    3043    mnuPopProvDxDelete: TMenuItem;
    31     cmdLexSearch: TButton;
    3244    popReason: TPopupMenu;
    3345    popReasonCut: TMenuItem;
     
    3648    popReasonPaste2: TMenuItem;
    3749    popReasonReformat: TMenuItem;
    38     gbInptOpt: TGroupBox;
    39     radInpatient: TRadioButton;
    40     radOutpatient: TRadioButton;
    41     pnlReason: TPanel;
    42     lblReason: TLabel;
    43     memReason: TRichEdit;
    44     btnDiagnosis: TButton;
     50    pnlCombatVet: TPanel;
     51    txtCombatVet: TVA508StaticText;
     52    servicelbl508: TVA508StaticText;
    4553    procedure FormCreate(Sender: TObject);
    4654    procedure txtAttnNeedData(Sender: TObject; const StartFrom: String;
     
    96104    FEditCtrl: TCustomEdit;
    97105    FNavigatingTab: boolean;
     106    LLS_LINE_INDEX: integer;
    98107    procedure BuildQuickTree(QuickList: TStrings; const Parent: string; Node: TTreeNode);
    99108    procedure ReadServerVariables;
     
    107116    procedure SetUpCopyConsultDiagnoses(pOrderID:string);
    108117    procedure AdjustMemReasonSize;
     118    function NotinIndex(AList: TStringList; i: integer): boolean;
     119    function GetItemIndex(Service: String; Index: integer): integer;
     120    procedure SetUpCombatVet;
     121    procedure SetUpEarliestDate; //wat v28
     122    procedure setup508Label(lbl: TVA508StaticText; ctrl: TORComboBox);
    109123  protected
    110124    procedure InitDialog; override;
     
    123137
    124138
     139function CanFreeConsultDialog(dialog : TfrmODBase) : boolean;
     140
    125141implementation
    126142
     
    129145uses
    130146    rODBase, rConsults, uCore, uConsults, rCore, fConsults, fPCELex, rPCE, fPreReq,
    131     ORClasses, clipbrd, uTemplates, fFrame, uODBase, uVA508CPRSCompatibility;
     147    ORClasses, clipbrd, uTemplates, fFrame, uODBase, uVA508CPRSCompatibility,
     148    VA508AccessibilityRouter;
    132149
    133150var
     
    137154  BADxUpdated: boolean;
    138155  quickCode: string;
    139 
     156  AreGlobalsFree: boolean;
    140157
    141158
     
    156173  TX_INACTIVE_CODE_REQD     = 'Another code must be selected before the order can be saved.';
    157174  TX_INACTIVE_CODE_OPTIONAL = 'If another code is not selected, no code will be saved.';
     175  TX_PAST_DATE       = 'Earliest appropriate date must be today or later.';
     176  TX_BAD_DATES       = 'Latest appropriate date must be equal to or later than earliest date.';
    158177
    159178  TX_SVC_HRCHY = 'services/specialties hierarchy';
    160179  TX_VIEW_SVC_HRCHY = 'View services/specialties hierarchically';
    161180  TX_CLOSE_SVC_HRCHY = 'Close services/specialties hierarchy tree view';
     181
     182
     183{************** Static Unit Methods ***************}
     184
     185function CanFreeConsultDialog(dialog : TfrmODBase) : boolean;
     186begin
     187  Result := true;
     188  if (dialog is TfrmODCslt) then
     189    Result := AreGlobalsFree;
     190end;
     191
     192procedure InitializeGlobalLists;
     193begin
     194  Defaults := TStringList.Create;
     195  SvcList := TStringList.Create;
     196  QuickList := TStringList.Create;
     197  AreGlobalsFree := false;
     198end;
     199
     200function FreeGlobalLists : Boolean;
     201begin
     202  Result := false;
     203  if AreGlobalsFree then
     204    Exit;
     205  Defaults.Free;
     206  SvcList.Free;
     207  QuickList.Free;
     208  AreGlobalsFree := true;
     209  Result := true;
     210end;
     211
     212{*************** TfrmODCslt Methods ***********}
    162213
    163214procedure TfrmODCslt.FormCreate(Sender: TObject);
     
    176227     cmdLexSearch.Visible := True;
    177228  end;
    178   Defaults  := TStringList.Create ;
    179   SvcList   := TStringList.Create ;
    180   QuickList := TStringList.Create ;
     229  InitializeGlobalLists;
    181230  AllowQuickOrder := True;
    182231  LastNode := 0;
     
    190239  FastAssign(ODForConsults, Defaults);  // ODForConsults returns TStrings with defaults
    191240  CtrlInits.LoadDefaults(Defaults);
     241  calEarliest.Text := 'TODAY';
     242  //calLatest.Text := 'TODAY+30';
    192243  txtAttn.InitLongList('') ;
    193244  PreserveControl(txtAttn);
     245  PreserveControl(calEarliest);
     246  //PreserveControl(calLatest);
     247    if (patient.CombatVet.IsEligible = True) then
     248   begin
     249     SetUpCombatVet;
     250   end
     251   else
     252    begin
     253      txtCombatVet.Enabled := False;
     254      pnlCombatVet.SendToBack;
     255    end;
    194256  InitDialog;
    195257  //Calling virtual SetFontSize in constructor is a bad idea!
     
    197259  FcboServiceKeyDownStopClick := false;
    198260  consultQuickOrder := false;
    199 
    200 
    201261end;
    202262
     
    233293  memReason.Clear;
    234294  cboService.Enabled := True;
     295  setup508Label(servicelbl508, cboService);
    235296  cboService.Font.Color := clWindowText;
    236   cboService.Height := 25 + (7 * cboService.ItemHeight);
     297  cboService.Height := 25 + (11 * cboService.ItemHeight);
    237298  btnServiceTree.Enabled := True;
    238299  pnlServiceTreeButton.Enabled := True;
    239300  SetProvDiagPromptingMode;
    240   ActiveControl := cboService; // set after call to SetProvDiagPromptingMode
     301  ActiveControl := cboService;
     302
    241303  Changing := False;
    242304  StatusText('');
     
    258320begin
    259321  inherited;
     322  LLS_LINE_INDEX := -1;
    260323  ReadServerVariables;
    261324  AList := TStringList.Create;
     
    281344          Exit;
    282345        end;
     346
    283347      cboService.Items.Add(SvcIEN + U + tmpResp.EValue + '^^^^' + tmpResp.IValue);
    284348      cboService.SelectByID(SvcIEN);
     
    289353      else
    290354        radOutpatient.Checked := True ;
    291       SetControl(cboUrgency,    'URGENCY',     1);
     355      SetUpEarliestDate;   //wat v28
     356      SetControl(cboUrgency,    'URGENCY',   1);
    292357      SetControl(cboPlace,      'PLACE',     1);
    293358      SetControl(txtAttn,       'PROVIDER',  1);
     359      SetControl(calEarliest,   'EARLIEST',  1);
     360      //SetControl(calLatest,     'LATEST',    1);
    294361      cboService.Enabled := False;
     362      setup508Label(servicelbl508, cboService);
    295363      cboService.Font.Color := clGrayText;
    296364      btnServiceTree.Enabled := False;
     
    308376      begin
    309377        AbortOrder := True;
     378                SetTemplateDialogCanceled(FALSE);
    310379        Close;
    311380        Exit;
     
    316385      begin
    317386        AbortOrder := True;
     387                SetTemplateDialogCanceled(FALSE);
    318388        Close;
    319389        Exit;
     
    343413          FastAssign(QuickList, cboService.Items);
    344414          Items.Add(LLS_LINE);
     415          LLS_LINE_INDEX := Items.IndexOf(Trim(Piece(LLS_LINE, U, 2))); {TP - HDS00015782: Used to determine if QO}
    345416          Items.Add(LLS_SPACE);
    346417        end;
    347418      Changing := True;
    348419      for i := 0 to AList.Count - 1 do
    349         if (cboService.Items.IndexOf(Trim(Piece(AList.Strings[i], U, 2))) = -1) and   {RV}
     420        //if (cboService.Items.IndexOf(Trim(Piece(AList.Strings[i], U, 2))) = -1) and   {RV}
     421        if (NotinIndex(AList,i)) and   {TP - HDS00015782: Check if service is already in index (not including QO)}
    350422        //if (cboService.SelectByID(Piece(AList.Strings[i], U, 1)) = -1) and
    351423           (Piece(AList.Strings[i], U, 5) <> '1') then
     
    410482        SetError(TX_SELECT_DIAG);
    411483    end;
     484  if (lblEarliest.Enabled) and (calEarliest.FMDateTime < FMToday) then SetError(TX_PAST_DATE);
     485  //if calLatest.FMDateTime < FMToday then SetError(TX_PAST_DATE);
     486  //if calLatest.FMDateTime < calEarliest.FMDateTime then SetError(TX_BAD_DATES);
    412487end;
    413488
     
    548623        FLastServiceID := ItemID;
    549624        cboService.Enabled := False;
     625        setup508Label(servicelbl508, cboService);
    550626        cboService.Font.Color := clGrayText;
    551627        btnServiceTree.Enabled := False;
     
    588664      SetControl(cboPlace,      'PLACE',     1);
    589665      SetControl(txtAttn,       'PROVIDER',  1);
     666      SetControl(calEarliest,   'EARLIEST',  1);
     667      //SetControl(calLatest,     'LATEST',    1);
    590668      SetTemplateDialogCanceled(FALSE);
    591669      SetControl(memReason,     'COMMENT',   1);
     
    593671      begin
    594672        AbortOrder := TRUE;
     673                SetTemplateDialogCanceled(FALSE);
    595674        Close;
    596675        Exit;
     
    616695    end;
    617696  SetProvDiagPromptingMode;
     697  SetUpEarliestDate; //wat v28
    618698  tmpSvc := Piece(cboService.Items[cboService.ItemIndex], U, 6);
    619699  pnlMessage.TabOrder := treService.TabOrder + 1;
     
    646726      else Responses.Update('ORDERABLE', 1, '', '');
    647727    end;
    648   with memReason     do if GetTextLen   > 0 then Responses.Update('COMMENT',   1, TX_WPTYPE, Text);
    649   with cboCategory   do if ItemID     <> '' then Responses.Update('CLASS',     1, ItemID, Text);
    650   with cboUrgency    do if ItemIEN      > 0 then Responses.Update('URGENCY',   1, ItemID, Text);
    651   with cboPlace      do if ItemID     <> '' then Responses.Update('PLACE',     1, ItemID, Text);
    652   with txtAttn       do if ItemIEN      > 0 then Responses.Update('PROVIDER',  1, ItemID, Text);
     728  with memReason     do  Responses.Update('COMMENT',   1, TX_WPTYPE, Text);
     729  with cboCategory   do  Responses.Update('CLASS',     1, ItemID, Text);
     730  with cboUrgency    do  Responses.Update('URGENCY',   1, ItemID, Text);
     731  with cboPlace      do  Responses.Update('PLACE',     1, ItemID, Text);
     732  with txtAttn       do  Responses.Update('PROVIDER',  1, ItemID, Text);
     733  with calEarliest   do if Length(Text) > 0 then Responses.Update('EARLIEST',  1, Text,   Text);
     734  //with calLatest     do if Length(Text) > 0 then Responses.Update('LATEST',    1, Text,   Text);
    653735  //with txtProvDiag   do if Length(Text) > 0 then Responses.Update('MISC',      1, Text,   Text);
    654736  if Length(ProvDx.Text)                > 0 then Responses.Update('MISC',      1, ProvDx.Text,   ProvDx.Text)
     
    758840  with cboService do
    759841    begin
     842      setup508Label(servicelbl508, cboService);
    760843      if (ItemIndex < 0) or (ItemID = '') then
    761844        begin
     
    779862          Changing := True;
    780863          Responses.QuickOrder := ExtractInteger(ItemID);
    781           consultQuickOrder := True;   
     864          consultQuickOrder := True;
    782865          tmpSvc := TResponse(Responses.FindResponseByName('ORDERABLE',1)).EValue;
    783866          ItemIndex := Items.IndexOf(Trim(tmpSvc));
     867          If ItemIndex < LLS_LINE_INDEX then       {TP - HDS00015782: Check if index is of a QO}
     868            ItemIndex := GetItemIndex(tmpSvc,ItemIndex);
    784869(*          tmpSvc := TResponse(Responses.FindResponseByName('ORDERABLE',1)).IValue;
    785870          for i := 0 to Items.Count-1 do
     
    793878          FLastServiceID := ItemID;
    794879          Enabled := False;
     880          setup508Label(servicelbl508, cboService);
    795881          Font.Color := clGrayText;
    796882          btnServiceTree.Enabled := False;
     
    811897              SetControl(cboPlace,      'PLACE',     1);
    812898              SetControl(txtAttn,       'PROVIDER',  1);
     899              SetControl(calEarliest,   'EARLIEST',  1);
     900              //SetControl(calLatest,     'LATEST',    1);
    813901              SetTemplateDialogCanceled(FALSE);
    814902              SetControl(memReason,     'COMMENT',   1);
     
    816904              begin
    817905                AbortOrder := TRUE;
     906                                SetTemplateDialogCanceled(FALSE);
    818907                Close;
    819908                Exit;
     
    861950  //OrderMessage(ConsultMessage(cboService.ItemIEN));
    862951  ControlChange(Self) ;
     952  SetUpEarliestDate;    //wat v28
     953  setup508Label(servicelbl508, cboService);
    863954end;
    864955
    865956procedure TfrmODCslt.FormDestroy(Sender: TObject);
    866957begin
    867   Defaults.Free;
    868   SvcList.Free ;
    869   QuickList.Free;
     958  if not FreeGlobalLists then
     959    Exit;
    870960  inherited;
    871961end;
     
    9861076 ProvDx.Text := Copy(ProvDx.Text, 1, i - 1);
    9871077 txtProvDiag.Text := ProvDx.Text + ' (' + ProvDx.Code + ')';
    988 
    9891078 ProvDx.CodeInactive := False;
    9901079end;
     
    10571146
    10581147
     1148procedure TfrmODCslt.setup508Label(lbl: TVA508StaticText; ctrl: TORComboBox);
     1149begin
     1150  if ScreenReaderSystemActive and not ctrl.Enabled then begin
     1151    lbl.Enabled := True;
     1152    lbl.Visible := True;
     1153    lbl.Caption := lblService.Caption + ', ' + ctrl.Text;
     1154    lbl.Width := (ctrl.Left + ctrl.Width) - lbl.Left;
     1155  end else
     1156    lbl.Visible := false;
     1157end;
     1158
    10591159procedure TfrmODCslt.mnuPopProvDxDeleteClick(Sender: TObject);
    10601160begin
     
    14931593  pnlReason.Top := cboService.Top + cboService.Height + PIXEL_SPACE;
    14941594  pnlReason.Height := memOrder.Top - pnlReason.Top - PIXEL_SPACE;
     1595  if patient.CombatVet.IsEligible then pnlReason.Height := pnlReason.Height - PIXEL_SPACE*20;
     1596end;
     1597
     1598function TfrmODCslt.NotinIndex(AList: TStringList; i: integer): Boolean;   {TP - HDS00015782:}
     1599{This function determines if a Consult Service will be added to the cboService
     1600component.  If name does not exist or if name does not exist below the Quick
     1601Order listing, then it is added.}
     1602var
     1603  x: Integer;
     1604  y: String;
     1605begin
     1606  Result := False;
     1607  x := cboService.Items.IndexOf(Trim(Piece(AList.Strings[i], U, 2)));
     1608  if (x = -1) then
     1609    Result := True;
     1610  if (x <> -1) and (x < LLS_LINE_INDEX) then
     1611  begin
     1612    y := cboService.Items[x];
     1613    cboService.Items.Delete(x);
     1614    if (cboService.Items.IndexOf(Trim(Piece(AList.Strings[i], U, 2))) = -1) then
     1615      Result := True;
     1616    cboService.Items.Insert(x,y);
     1617  end;
     1618
     1619end;
     1620
     1621function TfrmODCslt.GetItemIndex(Service: String; Index: integer): integer;     {TP - HDS00015782:}
     1622{This function returns ItemIndexOf value for Service Consult when a Quick Order
     1623has the exact same name}
     1624var
     1625  y: String;
     1626
     1627begin
     1628  y := cboService.Items[Index];
     1629  cboService.Items.Delete(Index);
     1630  Result := (cboService.Items.IndexOf(Trim(Service)) + 1);
     1631  cboService.Items.Insert(Index,y);
     1632end;
     1633
     1634procedure TfrmODCslt.SetUpCombatVet;
     1635begin
     1636     pnlCombatVet.BringToFront;
     1637     txtCombatVet.Enabled := True;
     1638     txtCombatVet.Caption := 'Combat Veteran Eligibility Expires on ' + patient.CombatVet.ExpirationDate;
     1639     pnlMain.Top := pnlMain.Top + pnlCombatVet.Height;
     1640     pnlMain.Anchors := [akLeft,akTop,akRight];
     1641     treService.Anchors := [akLeft,akTop,akRight];
     1642     self.Height := self.Height + pnlCombatVet.Height;
     1643     treService.Anchors := [akLeft,akTop,akRight,akBottom];
     1644     pnlMain.Anchors := [akLeft,akTop,akRight,akBottom];
     1645end;
     1646
     1647procedure TfrmODCslt.SetUpEarliestDate;  //wat v28
     1648begin
     1649  if IsProstheticsService(cboService.ItemIEN) = '1' then
     1650    begin
     1651      lblEarliest.Enabled := False;
     1652      calEarliest.Enabled := False;
     1653      calEarliest.Text := '';
     1654      Responses.Update('EARLIEST',1,'','');
     1655    end
     1656  else
     1657    begin
     1658      lblEarliest.Enabled := True;
     1659      calEarliest.Enabled := True;
     1660      calEarliest.Text := 'TODAY';
     1661    end;
    14951662end;
    14961663
Note: See TracChangeset for help on using the changeset viewer.