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

📄 c_tdzd.pas

📁 经典的酒店管理系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{立方酒店管理系统 v1.0
 Copyright by CubicSoft
 program by ls.
 Date:20020301-20020601
 20020627 加入注释
}
unit C_Tdzd;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, C_StdJd, DosMove, StdCtrls, Buttons, ExtCtrls, Grids, DBGrids, C_Define,
  DB, DBTables;

type
  TTdzdForm = 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;
    Label2: TLabel;
    Label4: TLabel;
    lblJzfs: TLabel;
    Label8: TLabel;
    Label10: TLabel;
    lblJzrq: TLabel;
    lblJzsj: TLabel;
    Label6: TLabel;
    Bevel2: TBevel;
    edtSjje: TEdit;
    dbgZd: TDBGrid;
    tblYsk: TTable;
    tblKryj: TTable;
    qryZd: TQuery;
    tblKrjz: TTable;
    tblKrjzD_XFXM: TStringField;
    dsKrjz: TDataSource;
    qryKrzd: TQuery;
    btnPrint: TBitBtn;
    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;
    Label12: TLabel;
    lblKrxm: TLabel;
    btnFjmx: TBitBtn;
    btnZdmx: TBitBtn;
    procedure tblKrjzNewRecord(DataSet: TDataSet);
    procedure tblKrjzBeforeInsert(DataSet: TDataSet);
    procedure tblKrjzAfterPost(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);
    procedure btnFjmxClick(Sender: TObject);
    procedure btnZdmxClick(Sender: TObject);
  private
    { Private declarations }
    FBmbh: string;
    FJzxx: TTdJzxx;
    FYfje: Currency;
    FYjje: Currency;
    FXfje: Currency;
    FJsje: Currency;
    FSjje: Currency;
    FYhje: Currency;
    FTfje: Currency;
    FEwf : Currency;
    FJzbh: string;
    FHh  : Integer;
    IsAppend: Boolean;
    procedure ShowJzfs;
    procedure ShowJzxx;
    function SumYfje: Currency;
    function SumYjje: Currency;
    function SumXfje: Currency;
    function SumEwf : Currency;
    procedure AddEwf;
    procedure CanYh;
    procedure AddKrjz;
    procedure SumYhje;
    procedure UpdateEwf;
    procedure UpdateKrzd(const ABz: string);
    procedure AddKrzd(const AXmbh: string;AXfje: Currency);
    procedure UpdateKrjz;
    procedure UpdateKrxx;
    procedure BakKrxx;
    procedure EmptyKrxx;
    procedure EmptyKryj;
    procedure BakKrzd;
    //procedure EmptyKrzd;
    procedure UpdateYsk;
    procedure AddYjk(AGbkJzxx: TGbkJzxx);
    procedure AddYsk(const AKhbh,AZdbh,AXmbh: string;AHh: Integer;AXfje: Currency);
  public
    { Public declarations }
  end;

var
  TdzdForm: TTdzdForm;

procedure Tdzd(AJzxx: TTdJzxx);

implementation

uses C_HotelData, C_Sysprint, C_CardXf, C_Fjmx, C_Zdmx;

{$R *.dfm}

//团队结帐
procedure Tdzd(AJzxx: TTdJzxx);
begin
  TdzdForm := TTdzdForm.Create(Application);
  try
    with TdzdForm do
    begin
      //获取部门编号
      FBmbh := HotelData.FindBh('YGDA','D_BMBH','D_YGBH',CZY.CzyBh);

      //获取结帐信息
      FJzxx := AJzxx;

      //是否能优惠
      CanYh;

      //获取客房信息
      //GetKfxx;

      //显示结帐方式
      ShowJzfs;

      //计算押金金额
      FYfje := SumYfje;

      //计算已结金额
      FYjje := SumYjje;

      //计算消费金额
      FXfje := SumXfje;

      //显示结帐信息
      ShowJzxx;

      //显示帐单列表
      AddKrjz;

      ShowModal;
    end;
  finally
    TdzdForm.Free;
  end;
end;

//判断是否允许优惠
procedure TTdzdForm.CanYh;
begin
  dbgZd.Columns[2].ReadOnly :=
    not((FJzxx.AJzfs=JZFS_RMB)or(FJzxx.AJzfs=JZFS_ZP)or(FJzxx.AJzfs=JZFS_XYK));
end;

//获取预付金额
function TTdzdForm.SumYfje: Currency;
var
  SqlStr: string;
begin
  SqlStr :=
    'select sum(D_YFJE) from KRYJ where (D_FKFS="'+FKFS_RMB
    +'")and(D_YJBH="'+FJzxx.AYjbh+'")';
  Result := HotelData.SumJe(SqlStr);
end;

//获取已结金额
function TTdzdForm.SumYjje: Currency;
var
  SqlStr: string;
begin
  SqlStr := 'select sum(D_XFJE) from KRZD where ((D_JZBZ="'+JZ_YX+'")'
            +'or(D_XMBH="'+XMBH_YJK+'"))and(D_ZDBH="'+FJzxx.AZdbh+'")';
  Result := 0-HotelData.SumJe(SqlStr);
end;

//获取消费金额
function TTdzdForm.SumXfje: Currency;
var
  SqlStr: string;
begin
  SqlStr := 'select sum(D_XFJE) from KRZD where (D_HH<>0)'
            +'and(D_ZDBH="'+FJzxx.AZdbh+'")and(D_XMBH<>"'+XMBH_YJK+'")and(D_JZBZ<>"'+JZ_YX+'")';
  Result := HotelData.SumJe(SqlStr);
end;

//显示结帐方式
procedure TTdzdForm.ShowJzfs;
begin
  lblKrxm.Caption := FJzxx.AKrxm;
  //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;

//显示结帐信息
procedure TTdzdForm.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
      FTfje := FYfje-FSjje
    else
      FTfje := 0;
  end
  else
    FTfje := FYfje;

  lblYfje.Caption := FormatFloat('#.##',FYfje);//CurrToStr(FYfje)+'元';
  lblXfje.Caption := FormatFloat('#.##',FXfje);//CurrToStr(FXfje)+'元';
  lblYjje.Caption := FormatFloat('#.##',FYjje);//CurrToStr(FYjje)+'元';
  lblYhje.Caption := FormatFloat('#.##',FYhje);//CurrToStr(FYhje)+'元';
  lblJsje.Caption := FormatFloat('#.##',FJsje);//CurrToStr(FJsje)+'元';
  lblTfje.Caption := FormatFloat('#.##',FTfje);//CurrToStr(FTfje)+'元';
  edtSjje.Text := FormatFloat('#.##',FSjje);//CurrToStr(FSjje);
end;

//添加结帐帐单列表
procedure TTdzdForm.AddKrjz;
var
  SqlStr: string;
begin
  SqlStr := 'select D_XMBH,sum(D_XFJE) as XFJE from KRZD where (D_HH<>0)'
            +'and(D_ZDBH="'+FJzxx.AZdbh+'") group by D_XMBH';
  with qryZd do
  begin
    SQL.Clear;
    SQL.Add(SqlStr);
    try
      Open;
    except
      On E:Exception do
      begin
        ShowWarning('打开数据库出错,请检查网络连接是否正常!'
                    +#13#10
                    +'错误信息:'
                    +E.Message);
        raise;
      end;
    end;
  end;

  tblKrjz.DisableControls;

  try
    IsAppend := True;
    //获取结帐编号
    FJzbh := HotelData.GetBh('D_JZBH',PREV_JZBH);
    //行号=1
    FHh := 1;

    try
      tblKrjz.Open;
    except
      On E:Exception do
      begin
        ShowWarning('打开数据库出错,请检查网络连接是否正常!'
                    +#13#10
                    +'错误信息:'
                    +E.Message);
        raise;
      end;
    end;

    tblKrjz.Filter   := 'D_JZBH='''+FJzbh+'''';
    tblKrjz.Filtered := True;

    //添加消费明细
    qryZd.First;
    while not qryZd.Eof do
    begin
      if qryZd.FieldByName('D_XMBH').AsString<>'' then
      begin
        tblKrjz.Insert;
        tblKrjzD_XMBH.Value := qryZd.FieldByName('D_XMBH').AsString;
        tblKrjzD_XFJE.Value := qryZd.FieldByName('XFJE').AsCurrency;
        tblKrjz.Post;
      end;
      qryZd.Next;
    end;

  finally
    IsAppend := False;
    tblKrjz.First;
    tblKrjz.EnableControls;
  end;
end;

//累加优惠金额
procedure TTdzdForm.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;

procedure TTdzdForm.tblKrjzNewRecord(DataSet: TDataSet);
begin
  inherited;
  if IsAppend then
  begin
    tblKrjzD_JZBH.Value := FJzbh;
    tblKrjzD_HH.Value   := FHh;
    tblKrjzD_JZRQ.Value := FJzxx.AJzrq;
    tblKrjzD_JZSJ.Value := FJzxx.AJzsj;
    tblKrjzD_JZFS.Value := FJzxx.AJzfs;
    tblKrjzD_XYKBH.Value:= FJzxx.AXykbh;
    tblKrjzD_KHBH.Value := FJzxx.AKhbh;
    tblKrjzD_JZLX.Value := JZLX_YK;
    tblKrjzD_CZYXM.Value:= CZY.CzyXm;
    tblKrjzD_BMBH.Value := FBmbh;
    tblKrjzD_BZ.Value   := JZBZ_TD+' '+FJzxx.AKrxm;
  end;
end;

procedure TTdzdForm.tblKrjzBeforeInsert(DataSet: TDataSet);
begin
  inherited;
  if not IsAppend then
    Abort;
end;

procedure TTdzdForm.tblKrjzAfterPost(DataSet: TDataSet);
begin
  inherited;
  if not IsAppend then
    SumYhje
  else
    Inc(FHh);
end;

procedure TTdzdForm.tblKrjzBeforeDelete(DataSet: TDataSet);
begin
  inherited;
  Abort;
end;

//检查优惠金额有效性
procedure TTdzdForm.tblKrjzD_YHJEValidate(Sender: TField);
begin
  inherited;
  if tblKrjzD_XMBH.Value <> XMBH_YJK then
  begin
    if tblKrjzD_YHJE.AsCurrency>tblKrjzD_XFJE.AsCurrency then
      raise Exception.Create('优惠金额不能大于消费金额!');
  end
  else
  begin
    if tblKrjzD_YHJE.Value <> 0 then
      raise Exception.Create('预交款不能优惠!');
  end;
end;

//获取额外费
function TTdzdForm.SumEwf: Currency;
begin
  Result := FSjje-FJsje;
end;

//结帐库中添加额外费
procedure TTdzdForm.AddEwf;
begin
  IsAppend := True;
  tblKrjz.Insert;
  tblKrjzD_XMBH.Value := XMBH_EWF;
  tblKrjzD_XFJE.Value := FEwf;
  tblKrjz.Post;
  IsAppend := False;
end;

//结帐库中添加额外费,更新额外费库
procedure TTdzdForm.UpdateEwf;
begin
  //获取额外费
  FEwf := SumEwf;

⌨️ 快捷键说明

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