📄 c_zd.pas
字号:
{立方酒店管理系统 v1.0
Copyright by CubicSoft
program by ls.
Date:20020301-20020601
20020627 加入注释
}
unit C_Zd;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, C_StdJd, DosMove, StdCtrls, Buttons, ExtCtrls, C_Define, Grids,
DBGrids, DBTables, DB;
type
TZdForm = class(TStdJdForm)
Label1: TLabel;
lblXfje: TLabel;
Label3: TLabel;
lblJsje: TLabel;
Label5: TLabel;
lblYjje: TLabel;
Label7: TLabel;
lblTfje: TLabel;
Label9: TLabel;
lblYfje: TLabel;
Label11: TLabel;
lblYhje: TLabel;
dbgZd: TDBGrid;
qryZd: TQuery;
dsKrjz: TDataSource;
Label2: TLabel;
edtSjje: TEdit;
tblKrjz: TTable;
tblKrjzD_XFXM: TStringField;
Label4: TLabel;
lblJzfs: TLabel;
Label8: TLabel;
Label10: TLabel;
lblJzrq: TLabel;
lblJzsj: TLabel;
Label6: TLabel;
Bevel2: TBevel;
qryKrzd: TQuery;
qryGz: TQuery;
tblKryj: TTable;
tblYsk: TTable;
btnPrint: TBitBtn;
lblJzfh: TLabel;
tblKrjzD_JZBH: TStringField;
tblKrjzD_HH: TIntegerField;
tblKrjzD_XMBH: TStringField;
tblKrjzD_XFDJ: TFloatField;
tblKrjzD_XFSL: TFloatField;
tblKrjzD_XFGG: TStringField;
tblKrjzD_XFJE: TFloatField;
tblKrjzD_YJJE: TFloatField;
tblKrjzD_YHJE: TFloatField;
tblKrjzD_JZFS: TStringField;
tblKrjzD_JZLX: TStringField;
tblKrjzD_KHBH: TStringField;
tblKrjzD_XYKBH: TStringField;
tblKrjzD_JZRQ: TDateTimeField;
tblKrjzD_JZSJ: TDateTimeField;
tblKrjzD_CZYXM: TStringField;
tblKrjzD_BZ: TStringField;
tblKrjzD_YSRQ: TStringField;
qryKrzdD_ZDBH: TStringField;
qryKrzdD_HH: TIntegerField;
qryKrzdD_ZDLB: TStringField;
qryKrzdD_KRBH: TStringField;
qryKrzdD_YJBH: TStringField;
qryKrzdD_KFBH: TStringField;
qryKrzdD_SJFJ: TFloatField;
qryKrzdD_XMBH: TStringField;
qryKrzdD_XFDJ: TFloatField;
qryKrzdD_XFSL: TFloatField;
qryKrzdD_XFJE: TFloatField;
qryKrzdD_XFRQ: TDateTimeField;
qryKrzdD_XFSJ: TDateTimeField;
qryKrzdD_YHJE: TFloatField;
qryKrzdD_JZRQ: TDateTimeField;
qryKrzdD_JZSJ: TDateTimeField;
qryKrzdD_JZBZ: TStringField;
qryKrzdD_JSBZ: TStringField;
qryKrzdD_DLR1: TStringField;
qryKrzdD_DLR2: TStringField;
qryKrzdD_DLR3: TStringField;
qryKrzdD_DLR4: TStringField;
qryKrzdD_CZYXM: TStringField;
qryKrzdD_JZYXM: TStringField;
qryKrzdD_TYR: TStringField;
qryKrzdD_BZ: TStringField;
qryKrzdD_YSRQ: TStringField;
qryKrzdD_JZBH: TStringField;
tblKrjzD_BMBH: TStringField;
qryKrzdD_BMBH: TStringField;
qryYsk: TQuery;
procedure tblKrjzNewRecord(DataSet: TDataSet);
procedure tblKrjzAfterPost(DataSet: TDataSet);
procedure tblKrjzBeforeInsert(DataSet: TDataSet);
procedure tblKrjzBeforeDelete(DataSet: TDataSet);
procedure tblKrjzD_YHJEValidate(Sender: TField);
procedure btnCancClick(Sender: TObject);
procedure btnOKClick(Sender: TObject);
procedure edtSjjeExit(Sender: TObject);
procedure btnPrintClick(Sender: TObject);
private
{ Private declarations }
FBmbh: string;
FJzxx: TJZXX;
FKfxx: TKfxxArray;
FGzxx: TKFXX;
FItemNo: Integer;
FYfje: Currency;
FXfje: Currency;
FYjje: Currency;
FYhje: Currency;
FJsje: Currency;
FTfje: Currency;
FSjje: Currency;
FDtfj: Currency;
FDhf : Currency;
FEwf : Currency;
FJzbh: string;
FHh: Integer;
IsAppend: Boolean;
FJzfhs: string;
procedure GetKfxx;
procedure GetKfxxWjz;
procedure ShowJzxx;
procedure UpdateKrzd(const ABz: string);
procedure UpdateKfzt;
procedure UpdateKrxx;
procedure UpdateEwf;
procedure UpdateBqj;
procedure AddKrzd(AHh: Integer;const AXmbh: string;AXfje: Currency;AKfxx: TKFXX);
procedure AddKrjz;
procedure UpdateKrjz;
procedure AddDtfj;
procedure AddDhf;
procedure AddEwf;
procedure ShowJzfs;
function SumYfje: Currency;
function SumXfje: Currency;
function SumYjje: Currency;
function SumDtfj: Currency;
function SumDhf : Currency;
function SumEwf : Currency;
procedure GetGzxx;
procedure SumYhje;
procedure BakKrxx;
procedure BakKrzd;
procedure EmptyKrxx;
procedure EmptyKryj;
procedure EmptyKrzd;
procedure UpdateGz;
procedure UpdateYsk;
procedure CanYh;
procedure AddYjk(AGbkJzxx: TGbkJzxx);
procedure AddYsk(const AKhbh,AZdbh,AXmbh: string;AHh: Integer;AXfje: Currency);
procedure UpdateXxdc;
public
{ Public declarations }
end;
var
ZdForm: TZdForm;
procedure Zd(AJzxx: TJZXX);
procedure WjzZd(AJzxx: TJZXX);
implementation
uses C_HotelData, C_Sysprint, C_CardXf, C_Zdcx;
{$R *.dfm}
//散客结帐帐单
procedure Zd(AJzxx: TJZXX);
begin
ZdForm := TZdForm.Create(Application);
try
with ZdForm do
begin
//获取部门编号
FBmbh := HotelData.FindBh('YGDA','D_BMBH','D_YGBH',CZY.CzyBh);
//获取结帐信息
FJzxx := AJzxx;
//是否能优惠
CanYh;
//获取客房信息
GetKfxx;
//显示结帐方式
ShowJzfs;
//计算当天房价
FDtfj := SumDtfj;
//计算电话费
FDhf := SumDhf;
//计算押金金额
FYfje := SumYfje;
//计算已结金额
FYjje := SumYjje;
//计算消费金额
FXfje := SumXfje;
if (FDtfj<>0)or(FDhf<>0) then
FXfje := FXfje + FDtfj + FDhf;
//显示结帐信息
ShowJzxx;
//显示帐单
AddKrjz;
ShowModal;
end;
finally
ZdForm.Free;
end;
end;
//未结帐结帐
procedure WjzZd(AJzxx: TJZXX);
begin
ZdForm := TZdForm.Create(Application);
try
with ZdForm do
begin
FBmbh := HotelData.FindBh('YGDA','D_BMBH','D_YGBH',CZY.CzyBh);
FJzxx := AJzxx;
//是否能优惠
CanYh;
//获取客房信息
GetKfxxWjz;
//显示结帐方式
ShowJzfs;
FJzfhs := FJzxx.AKfbh;
lblJzfh.Caption := '结帐房号:' + FJzfhs;
//计算当天房价
FDtfj := 0;
//计算电话费
FDhf := 0;
//计算押金金额
FYfje := SumYfje;
//计算已结金额
FYjje := SumYjje;
//计算消费金额
FXfje := SumXfje;
{if (FDtfj<>0)or(FDhf<>0) then
FXfje := FXfje + FDtfj + FDhf;}
//显示结帐信息
ShowJzxx;
//显示帐单
AddKrjz;
ShowModal;
end;
finally
ZdForm.Free;
end;
end;
//判断是否能够优惠 只有人民币、信用卡、支票才可以优惠
procedure TZdForm.CanYh;
begin
dbgZd.Columns[2].ReadOnly := not((FJzxx.AJzfs=JZFS_RMB)
or(FJzxx.AJzfs= JZFS_ZP)
or(FJzxx.AJzfs=JZFS_XYK));
end;
//获得客房信息
procedure TZdForm.GetKfxx;
var
I: Integer;
begin
FItemNo := High(FJzxx.AJzfh);
SetLength(FKfxx,FItemNo+1);
for I:=0 to FItemNo do
FKfxx[i] := HotelData.GetKfxx(FJzxx.AJzfh[i]);
end;
//获得未结帐客房信息
procedure TZdForm.GetKfxxWjz;
begin
FItemNo := 0;
SetLength(FKfxx,FItemNo+1);
FKfxx[0].AKfbh := FJzxx.AKfbh;
FKfxx[0].AKrxm := FJzxx.AKfbh;
FKfxx[0].AZdbh := FJzxx.AJzfh[0];
FKfxx[0].AKrbh := FJzxx.AKrbh;
FKfxx[0].AYjbh := FJzxx.AYjbh;
FKfxx[0].ADtfj := 0;
FKfxx[0].ADhf := 0;
FKfxx[0].AZdhh := 9999;//?
end;
//显示结帐方式
procedure TZdForm.ShowJzfs;
var
I : Integer;
begin
FJzfhs := '';
for i := 0 to FItemNo do
FJzfhs := FJzfhs + FJzxx.AJzfh[i] + ' ';
lblJzfh.Caption := '结帐房号 ' + FJzfhs;
//edit by ls. 2002/09/02
if FJzxx.AJzfs = JZFS_JZ then
lblJzfs.Caption := FJzxx.AJzfs+'('+FJzxx.AKhbh+')'
else if FJzxx.AJzfs = JZFS_XYK then
lblJzfs.Caption := FJzxx.AJzfs+'('+HotelData.FindMc('XYK','D_XYKBH','D_XYKMC',FJzxx.AXykbh)+')'
else if FJzxx.AJzfs = JZFS_GSK then
lblJzfs.Caption := FJzxx.AJzfs+'('+FJzxx.AKfbh+')'
else if FJzxx.AJzfs = JZFS_GTD then
lblJzfs.Caption := FJzxx.AJzfs+'('+HotelData.FindMc('KRXX','D_KRBH','D_KRXM',FJzxx.AKrbh)+')'
else
lblJzfs.Caption := FJzxx.AJzfs;
lblJzrq.Caption := FormatDateTime('yyyy-mm-dd',FJzxx.AJzrq);
lblJzsj.Caption := FormatDateTime('hh:mm',FJzxx.AJzsj);
end;
//获得额外费
function TZdForm.SumEwf: Currency;
begin
Result := FSjje-FJsje;
end;
//获得电话费
function TZdForm.SumDhf: Currency;
var
I: Integer;
begin
Result := 0;
for I:=0 to FItemNo do
begin
FKfxx[i].ADhf := HotelData.GetDhf(FKfxx[i].AKfbh,FKfxx[i].ADdrq,FKfxx[i].ADdsj);
Result := Result + FKfxx[i].ADhf;
end;
end;
//更新半全价
procedure TZdForm.UpdateBqj;
var
i: Integer;
begin
for i:=0 to FItemNo do
if FKfxx[i].ABqj<>BQJ_ZC then
HotelData.UpdateBqj(FKfxx[i].AKfbh,FKfxx[i].ABqj,0,FKfxx[i].ADtfj)
else
HotelData.UpdateBqj(FKfxx[i].AKfbh,FKfxx[i].ABqj,0,0);
end;
//获得当天房价
function TZdForm.SumDtfj: Currency;
var
I,ABqj: Integer;
begin
Result := 0;
for I:=0 to FItemNo do
begin
FKfxx[i].ADtfj := GetDtfj(FKfxx[i].ADdsj,FJzxx.AJzsj,FKfxx[i].AKfbz,FKfxx[i].ASjfj);
ABqj := CheckLdsj(FKfxx[i].ADdsj,FJzxx.AJzsj,FKfxx[i].AKfbz);
FKfxx[i].ABqj := ABqj;
{if ABqj<>BQJ_ZC then
HotelData.UpdateBqj(FKfxx[i].AKfbh,ABqj,0,FKfxx[i].ADtfj)
else
HotelData.UpdateBqj(FKfxx[i].AKfbh,ABqj,0,0);}
Result := Result + FKfxx[i].ADtfj;
end;
end;
//累计优惠金额
procedure TZdForm.SumYhje;
var
PrevRecord: TBookMark;
begin
PrevRecord := tblKrjz.GetBookmark;
try
tblKrjz.DisableControls;
FYhje := 0;
tblKrjz.First;
while not tblKrjz.Eof do
begin
FYhje := FYhje + tblKrjzD_YHJE.Value;
tblKrjz.Next;
end;
finally
tblKrjz.EnableControls;
if PrevRecord<>nil then
begin
tblKrjz.GotoBookmark(PrevRecord);
tblKrjz.FreeBookmark(PrevRecord);
end;
ShowJzxx;
end;
end;
//获得预付金额
function TZdForm.SumYfje: Currency;
var
I: Integer;
SqlStr: string;
begin
SqlStr := '';
for I:= 0 to FItemNo do
begin
if I>0 then SqlStr := SqlStr + 'or';
SqlStr := SqlStr + '(D_YJBH="'+FKfxx[i].AYjbh+'")';
end;
SqlStr := 'select sum(D_YFJE) from KRYJ where (D_FKFS="'
+FKFS_RMB+'")and('+SqlStr+')';
Result := HotelData.SumJe(SqlStr);
end;
//获得已结金额
function TZdForm.SumYjje: Currency;
var
I: Integer;
SqlStr: string;
begin
SqlStr := '';
for I:= 0 to FItemNo do
begin
if I>0 then SqlStr := SqlStr + 'or';
SqlStr := SqlStr + '(D_ZDBH="'+FKfxx[i].AZdbh+'")';
end;
//SqlStr := 'select sum(D_XFJE) from KRZD where (D_JZBZ="'
// +JZ_YX+'")and('+SqlStr+')';
SqlStr := 'select sum(D_XFJE) from KRZD where ((D_XMBH="'
+XMBH_YJK+'")or(D_JZBZ="'+JZ_YX+'"))and('+SqlStr+')';
Result := 0-HotelData.SumJe(SqlStr);
end;
//获得消费金额
function TZdForm.SumXfje: Currency;
var
I: Integer;
SqlStr: string;
begin
SqlStr := '';
for I:= 0 to FItemNo do
begin
if I>0 then SqlStr := SqlStr + 'or';
SqlStr := SqlStr + '(D_ZDBH="'+FKfxx[i].AZdbh+'")';
end;
//edit by ls. 20020729
{SqlStr := 'select sum(D_XFJE) from KRZD where (D_HH=0)'
+'and('+SqlStr+')';}
SqlStr := 'select sum(D_XFJE) from KRZD where (D_HH<>0)and(D_XMBH<>"'+XMBH_YJK+'")'
+'and(D_JZBZ<>"'+JZ_YX+'")and('+SqlStr+')';
Result := HotelData.SumJe(SqlStr);
end;
//更新信息导出
procedure TZdForm.UpdateXxdc;
var
I: Integer;
begin
try
try
HotelData.tblXxdc.Open;
except
On E:Exception do
begin
ShowWarning('打开数据库出错,请检查网络连接是否正常!'
+#13#10
+'错误信息:'
+E.Message);
raise;
end;
end;
for I:=0 to FItemNo do
begin
if HotelData.tblXxdc.FindKey([FKfxx[i].AKrbh]) then
begin
HotelData.tblXxdc.Edit;
HotelData.tblXxdc.FieldByName('D_LDRQ').AsString := FormatDateTime('yyyymmdd',Date);
HotelData.tblXxdc.Post;
end;
end;
finally
HotelData.tblXxdc.Close;
end;
end;
//显示结帐信息
procedure TZdForm.ShowJzxx;
begin
FJsje := FXfje-FYjje-FYhje;
if FJsje>=0 then
FSjje := Trunc(FJsje+0.99)
else
FSjje := Trunc(FJsje-0.99);
//20020627 edit by ls. 如果不是人民币结帐 退还全部押金
if FJzxx.AJzfs = JZFS_RMB then
begin
if FYfje>0 then
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -