📄 orderitem.pas
字号:
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 + -