⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 orderitem.pas

📁 某大型医院护士站
💻 PAS
📖 第 1 页 / 共 4 页
字号:

procedure TfrmOrderItem.dbvn_BedNOClick(Sender: TObject;
  Button: TNavigateBtn);
begin
  lookupbedno.Text   := DM.qryPatientBedNobed.Value;
  LookupSubName.Text := DM.tblPatientSubPatDesc.Value;
  AltBedNO;
end;

// When bedno altelated, something should reset...
procedure TfrmOrderItem.AltBedNO;
var
  strprepay : string;
  strcost   : string;
  WarningStr: string;
begin
  DM.FStartTime := Now;
  DM.FKindId := 0;

  if DM.qryOtherBill.Active and DM.qryOtherBill.UpdatesPending then
     DM.qryOtherBill.ApplyUpdates;

  if DM.OrderItem.State in [dsInsert,dsEdit] then
     DM.OrderItem.Cancel;
{  if DM.OrderItem.UpdatesPending then
     DM.OrderItem.ApplyUpdates;
}
  if not btnPartLong.Down then
  begin
    btnPartLong.Down := True;
    NSLongOrderExecute(nil);
  end;

  if btnRowSelect.Down then
  begin
     btnRowSelect.Down := False;
     btnRowSelectClick(nil);
  end;

 dm.maxamt := 0.0;
 DM.qryPatientBedNo.Locate('bed' ,frmorderitem.lookupbedno.Text, []);
 with DM.qryPreTotal do
  begin
    close;
    Params[0].AsInteger  := DM.qryPatientBedNoInid.AsInteger;
    Params[1].AsSmallInt := DM.qryPatientBedNoTimes.Value;
    Open;
    strPrepay := format('%.2f',[DM.qryPreTotalPrepayTotal.Value]);
    Close;
  end;

  with DM.qryFeeTotal do
  begin
    close;
    Params[0].AsInteger  := DM.qryPatientBedNoInid.AsInteger;
    Params[1].AsSmallInt := DM.qryPatientBedNoTimes.Value;
    Open;
    strCost := format('%.2f',[DM.qryFeeTotalFeeTotal.Value]);
    Close;
  end;

  if StrtoFloat(strPrepay) < StrtoFloat(strCost) then
  begin
    lbprepay.font.color := clred;
    lbcost.font.color := clred;
  end else
  begin
    lbprepay.font.color := clblue;
    lbcost.font.color := clblue;
  end;

    lbprepay.Caption := strPrepay;
    lbcost.Caption   := strCost;

  if ( (strtofloat(strPrepay)- strtofloat(strCost))
      < DM.tblPatientSubFEELOWLEVEL.Value ) then
  begin
    WarningStr :=   Trim(DM.tblPatientSubPatDesc.Value)
                  + '(' + DM.tblPatientSubBedID.Value + ')'
                  + '剩余的押金已经低于'
                  +  floattostr(DM.tblPatientSubFEELOWLEVEL.Value) + '元' + #13
                  + '请提醒医生或护士长做好催款工作!';
    hisWarningPrompt(Pchar(WarningStr));
  end;

  frmOrderItem.gridOrderItem.ReadOnly :=
                 (DM.tblPatientSubInState.Value > 1)
              OR (DM.tblPatientSubEnabled.Value = 0);

  frmOrderItem.gdPayBill.ReadOnly := frmOrderitem.gridOrderItem.ReadOnly;
  {
  if (dm.spPrepayTotal.Params[2].asfloat > dm.spFeeTotal.Params[2].asfloat) and (dm.QRYPATIENTBEDNOPATIENTDATA.Value = 1) then
  begin
   frmorderitem.spgreenpassend.close;
   frmorderitem.spgreenpassend.params[0].asinteger := dm.qryPatientBedNoinid.AsInteger;
   frmorderitem.spgreenpassend.params[1].assmallint := dm.qryPatientBedNotimes.Value;
   frmorderitem.spgreenpassend.execproc;
   cwlinfoprompt('已交足押金,恢复正常医疗状态。');
  end; //end if

  if (dm.spPrepayTotal.Params[2].asfloat <= dm.spFeeTotal.Params[2].asfloat) and (dm.qrypatientbednonmnt.value = 1) then
    begin
    if cwlisyesquery('该病人剩余押金少于0,要继续录入医嘱吗?') then
    begin

    try
    if dm.ProjHisadt.InTransaction then
    dm.ProjHisadt.Commit;
    dm.ProjHisadt.StartTransaction;

    with frmorderitem do
    begin
    spgreenpass.close;
    spgreenpass.Params[0].asinteger := dm.qryPatientBedNoinid.AsInteger;
    spgreenpass.Params[1].asstring := dm.currWardid;
    spgreenpass.Params[2].asstring := lookupbedno.Text;
    spgreenpass.Params[3].asstring := dm.currOperatorno;
    if frac(now)<strtotime('12:00:00') then
       endtime := int(now)+strtotime('11:59:00')
     else
       endtime := (int(now)+1)+strtotime('11:59:00');
    spgreenpass.Params[4].asdatetime := endtime;
    spgreenpass.Params[5].assmallint := dm.qryPatientBedNotimes.Value;
    spgreenpass.ExecProc;
    dm.maxamt := spgreenpass.Params[6].asfloat;
    dm.maxendtime := spgreenpass.Params[7].asdatetime;
    end; //end with
    dm.ProjHisadt.Commit;
     if dm.maxamt = 100.0 then
    cwlinfoprompt('该病人处于基本医疗状态,只能录入临嘱且费用不超过100元。');
    if dm.maxamt = 3000.0 then
    cwlinfoprompt('该病人处于急救通道状态,只能录入临嘱且费用不超过3000元。');
    if dm.maxamt = 500.0 then
    cwlinfoprompt('该病人处于出院通道状态,录入费用不能超过500元。');

   except
    dm.ProjHisadt.Rollback;
    sysutils.Abort;
    end; //end except
    end
    else
    frmorderitem.Close;
    end;
}
end;

procedure TfrmOrderItem.btnRowSelectClick(Sender: TObject);
begin
  if pcFeeSelected.ActivePageIndex <> 0 then
     SysUtils.Abort;

  if DM.OrderItem.State in [dsInsert,dsEdit] then
     DM.OrderItem.Cancel;

  if btnRowSelect.Down then
  begin
    gridOrderItem.Options   := gridOrderItem.Options + [dgRowSelect,dgMultiSelect];
    gridExOrderItem.Options := gridExOrderItem.Options + [dgRowSelect];
    miOrderItemRowSelect.Checked := True;
  end
  else begin
    gridOrderItem.Options   := gridOrderItem.Options - [dgRowSelect,dgMultiSelect];
    gridOrderItem.SelectedList.Clear;
    gridExOrderItem.Options := gridExOrderItem.Options - [dgRowSelect];
    gridExOrderItem.SelectedList.Clear;
    miOrderItemRowSelect.Checked := False;
  end;
end;

procedure TfrmOrderItem.miOrderItemRowSelectClick(Sender: TObject);
begin
  miOrderItemRowSelect.Checked := not miOrderItemRowSelect.Checked;
  btnRowSelect.Down := miOrderItemRowSelect.Checked;
  btnRowSelectClick(Nil);
end;

procedure TfrmOrderItem.miOrderItemSelectAllClick(Sender: TObject);
begin
  if btnRowSelect.Down and (DM.OrderItem.RecordCount > 0) then
     gridOrderItem.SelectAll;
end;

procedure TfrmOrderItem.StopOrderActiveExecute(Sender: TObject);
var
  i, SelectCount ,stopResult: Integer;
  StopTime ,StdEndTime : TDateTime;
  StopType : SmallInt;
begin
  if pcFeeSelected.ActivePageIndex <> 0 then
     SysUtils.Abort;

  if DM.OrderItem.State in [dsInsert,dsEdit] then
     DM.OrderItem.Cancel;

  if ( (DM.OrderItem.IsEmpty) or (DM.OrderItemOrderKind.Value = 1) ) then
     SysUtils.Abort
  else
  begin
    if not GetStopOrderParams( StopTime, StopType ) then
      SysUtils.Abort;
  end;

  //标准化停止时间
  DM.spSdtime.Active := false;
  DM.spSdtime.Params[0].AsDateTime := StopTime;
  DM.spSdtime.ExecProc;
  StdEndTime := DM.spsdtime.Params[1].AsDateTime;

  SelectCount := gridOrderitem.SelectedList.Count;
  if ( SelectCount = 0 ) or ( Selectcount = 1 ) then
  begin
    // check if stopped already
    if (not DM.OrderItemEndTime.isnull) then SysUtils.Abort
    else
      if not HisIsYesQuery('是否确定停止医嘱?') then SysUtils.Abort;

    if ( DM.SIsStopConfirm =  1 ) then
    begin
      DM.OrderItem.Edit;
      DM.OrderItemSTOPTYPE.Value   := - StopType;
      DM.OrderItemENDTIME.Value    := StopTime;
      DM.OrderItemSTDENDTIME.Value := StdEndTime;
      DM.OrderItemHandle.Value     := DM.currOperatorno;
      DM.OrderItem.Post;
    end else
    begin
      try
        if DM.ProjHisadt.InTransaction then
          DM.ProjHisadt.Commit;
        DM.ProjHisadt.StartTransaction;
        DM.spStopMulti.Params[0].AsString  :=
                       DM.OrderItemSerialId.AsString;
        DM.spStopMulti.Params[1].AsDateTime := StopTime;
        DM.spStopMulti.Params[2].AsDateTime := StdEndTime;
        DM.spStopMulti.Params[3].AsSmallInt := StopType;
        DM.spStopMulti.Params[4].AsString   := DM.currOperatorno;
        DM.spStopMulti.ExecProc;  //执行停止医嘱
        DM.ProjHisAdt.Commit;

        stopResult := DM.spStopMulti.Params[5].AsInteger;
        if ( stopResult < 0 ) then
           HisErrorPrompt('当前医嘱内容有误,停止失败!');

    except
      DM.ProjHisadt.Rollback;
      HisErrorPrompt('当前医嘱内容有误,停止失败!');
    end;
   end;

   gridOrderItem.SelectedList.Clear;
   DM.OrderItem.Refresh;
  end
  else
  if ( SelectCount > 1 ) then
  begin
    try
      DM.OrderItem.DisableControls;
      for i := 0 to SelectCount - 1 do
      begin
        DM.OrderItem.GotoBookmark(gridOrderItem.SelectedList.items[i]);
        DM.OrderItem.Freebookmark(gridOrderItem.SelectedList.items[i]);

        if DM.OrderItemEndTime.IsNull then
        begin
          if ( DM.SIsStopConfirm =  1 ) then
          begin
            DM.OrderItem.Edit;
            DM.OrderItemSTOPTYPE.Value   := - StopType;
            DM.OrderItemENDTIME.Value    := StopTime;
            DM.OrderItemSTDENDTIME.Value := StdEndTime;
            DM.OrderItemHandle.Value     := DM.currOperatorno;
            DM.OrderItem.Post;
          end else
          begin
            try
              if DM.ProjHisadt.InTransaction then
                 DM.ProjHisadt.Commit;
              DM.ProjHisadt.StartTransaction;
              DM.spStopMulti.Params[0].AsString  :=
                     DM.OrderItemSerialId.AsString;
              DM.spStopMulti.Params[1].AsDateTime := StopTime;
              DM.spStopMulti.Params[2].AsDateTime := StdEndTime;
              DM.spStopMulti.Params[3].AsSmallInt := StopType;
              DM.spStopMulti.Params[4].AsString   := DM.currOperatorno;
              DM.spStopMulti.ExecProc;  //执行停止医嘱
              DM.ProjHisAdt.Commit;
            except
              DM.ProjHisadt.Rollback;
              gridOrderItem.SelectedList.Clear;
              HisErrorPrompt('当前医嘱内容有误,停止失败!');
            end ;
          end;
        end;
      end;
      gridOrderItem.SelectedList.Clear;
      DM.OrderItem.Refresh;
    finally
      DM.OrderItem.EnableControls;
    end;
  end;
end;

procedure TfrmOrderItem.EmergencyActionExecute(Sender: TObject);
begin
  if pcFeeSelected.ActivePageIndex <> 0 then
     SysUtils.Abort;

  if DM.OrderItem.State in [dsInsert,dsEdit] then
     DM.OrderItem.Cancel;

  DM.SetSystemTime;    //下载服务器时间,以防用户修改本地时间
  
  if ( (Time > DM.SEMStrTime) or (Time < DM.SEMEndTime) ) then
  begin
    HisErrorprompt(PChar('紧急发送应该在' + TimetoStr(DM.SEMStrTime) +
                                     '至' + TimetoStr(DM.SEMEndTime) + '之间' 
                          + #13 + '现在请使用指示发送功能发送医嘱!') );
    SysUtils.Abort;
  end;

  with DM.qryChkConfirm do
  begin
    Active := False;
    SQL.Clear;
    SQL.ADD('SELECT COUNT(*) AS NO_CONFIRMNUM FROM ORDERITEM ');
    SQL.ADD('WHERE INID  = :P_INID ');
    SQL.ADD('AND TIMES   = :P_TIMES ');
    SQL.ADD('AND SQID    = :P_SQID ');
    SQL.ADD('AND WARDID  = :P_WARDID ');
    SQL.ADD('AND ( CONFIRM = 0  OR STOPTYPE < 0 )');
    Params[0].AsInteger := DM.tblPatientSubInid.Value;
    Params[1].AsInteger := DM.tblPatientSubTimes.Value;
    Params[2].AsInteger := DM.tblPatientSubSqid.Value;
    Params[3].AsString  := DM.currWardid;
    Active := True;

    if DM.qryChkConfirmNO_CONFIRMNUM.Value > 0 then
    begin
       Hiserrorprompt('该病人还有医嘱没有确认,不能作紧急发送!');
       Active := False;
       SysUtils.Abort;
    end else
    Active := False;
  end;

  Screen.Cursor := crSQLWait;
  with DM.qryPatientAtOnce do
  begin
    Active := False;
    Params[0].AsInteger := DM.tblPatientSubInid.Value;
    Params[1].AsInteger := DM.tblPatientSubTimes.Value;
    Params[2].AsInteger := DM.tblPatientSubSqid.Value;
    Params[3].AsString  := DM.currWardid;
    Active := True;
  end;
  Screen.Cursor := crDefault;

  try
    frmpatientAtOnce := TfrmpatientAtOnce.Create(self);
    frmpatientAtOnce.Caption :=  '选择 ' +
                                 DM.tblPatientSubPatDesc.Value +
                                 ' ('+DM.currBedNo + ') 紧急发送的医嘱';
    frmpatientAtOnce.ShowModal;
  finally
    DM.OrderItem.DisableControls;
    DM.OrderItem.Refresh;
    DM.OrderItem.EnableControls;
    frmpatientAtOnce.free;
  end;
end;

procedure TfrmOrderItem.gridOrderItemCalcCellColors(Sender: TObject;
  Field: TField; State: TGridDrawState; Highlight: Boolean; AFont: TFont;
  ABrush: TBrush);
begin
  if (DM.OrderItemConfirm.AsInteger = 1) then  //已确认医嘱用蓝字
  begin
     AFont.Color  := clBlue;
     ABrush.Color := clWhite;
  end
  else begin
     AFont.Color  := clBlack;
     ABrush.Color := clWhite;
  end;

  if (DM.OrderItemSTOPTYPE.AsInteger < 0) then //停止医嘱没有确认用红字
  begin
    AFont.Color  := clRed;
    ABrush.Color := clWhite;
  end;

  if (DM.OrderitemSendmsg.Value = 1) OR
     (DM.OrderitemAtonce.Value  = 1) OR
     (DM.OrderitemAtonce.Value  = 2) then
     ABrush.Color  := $00D0FFFF;

  if Highlight then
  begin
    AFont.Color := clWhite;
    ABrush.Color := clHighlight;
  end;
end;

procedure TfrmOrderItem.btnRecallClick(Sender: TObject);
var
 i ,SelectCount ,spResult: Integer;
begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -