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

📄 c_tdzd.pas

📁 经典的酒店管理系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  //写入krjz.db
  if FEwf<>0 then
  begin
    //结帐库中写入额外费
    AddEwf;
    //写入ewf.db
    HotelData.UpdateEwfDbf(FJzbh,FJzxx.AKrxm,FEwf,FJzxx.AJzrq,FJzxx.AJzsj);
  end;
end;

//帐单中增加记录
procedure TTdzdForm.AddKrzd(const AXmbh: string;AXfje: Currency);
begin
  qryKrzd.Insert;
  qryKrzdD_ZDBH.Value := FJzxx.AZdbh;
  qryKrzdD_HH.Value   := 9999;
  qryKrzdD_KRBH.Value := FJzxx.AKrbh;
  qryKrzdD_YJBH.Value := FJzxx.AYjbh;
  qryKrzdD_ZDLB.Value := ZDLB_TD;
  qryKrzdD_XMBH.Value := AXmbh;
  qryKrzdD_XFJE.Value := AXfje;
  qryKrzdD_XFRQ.Value := FJzxx.AJzrq;
  qryKrzdD_XFSJ.Value := FJzxx.AJzsj;
  qryKrzdD_JZBZ.Value := JZ_NO;
  qryKrzdD_JSBZ.Value := JS_NO;
  qryKrzd.Post;
end;

//修改帐单信息,额外费
procedure TTdzdForm.UpdateKrzd(const ABz: string);
var
  SqlStr: string;
begin
  SqlStr := 'select * from KRZD where (D_ZDBH="'+FJzxx.AZdbh+'")';

  with qryKrzd do
  begin
    if Active then Active := False;
    SQL.Clear;
    SQL.Add(SqlStr);
    try
      Open;
    except
      On E:Exception do
      begin
        ShowWarning('打开数据库出错,请检查网络连接是否正常!'
                    +#13#10
                    +'错误信息:'
                    +E.Message);
        raise;
      end;
    end;
  end;

  //如果额外费不等于零
  if (FEwf<>0) then
    AddKrzd(XMBH_EWF,FEwf);

  //修改帐单总单的金额
  if qryKrzd.Locate('D_HH',0,[]) then
  begin
    qryKrzd.Edit;
    qryKrzdD_XFJE.Value := qryKrzdD_XFJE.Value + FEwf;
    qryKrzd.Post;
  end;

  //修改帐单的信息
  qryKrzd.First;
  while not qryKrzd.Eof do
  begin
    qryKrzd.Edit;
    qryKrzdD_JSBZ.Value := JS_YES;
    qryKrzdD_JZRQ.Value := FJzxx.AJzrq;
    qryKrzdD_JZSJ.Value := FJzxx.AJzsj;
    qryKrzdD_JZBH.Value := FJzbh;
    qryKrzdD_BZ.Value   := qryKrzdD_BZ.Value+' '+ABz;
    qryKrzdD_CZYXM.Value := CZY.CzyXm;
    qryKrzdD_JZYXM.Value := CZY.CzyXm;
    qryKrzdD_BMBH.Value  := FBmbh;
    //edit by ls. 20020824
    if qryKrzdD_JZBZ.Value = JZ_NO then
      qryKrzdD_JZBZ.Value := JZ_YES;
    qryKrzdD_JSBZ.Value := JS_YES;
    qryKrzd.Post;
    qryKrzd.Next;
  end;
end;

//取消
procedure TTdzdForm.btnCancClick(Sender: TObject);
begin
  inherited;
  tblKrjz.CancelUpdates;
end;

//结帐库中加入总单
procedure TTdzdForm.UpdateKrjz;
begin
  IsAppend := True;
  FHh := 0;
  tblKrjz.Insert;
  //edit by ls.20021020
  tblKrjzD_XFJE.Value := FSjje+FYhje+FYjje;
  tblKrjzD_YJJE.Value := 0-FYjje;
  tblKrjzD_YHJE.Value := FYhje;
  tblKrjz.Post;
  IsAppend := False;
end;

//修改客人信息的离店日期
procedure TTdzdForm.UpdateKrxx;
begin
  HotelData.UpdateKrxxJz(FJzxx.AKrbh,FJzxx.AJzrq,FJzxx.AJzsj);
end;

//备份客人信息
procedure TTdzdForm.BakKrxx;
begin
  HotelData.BakData('select * from KRXX where D_KRBH="'+FJzxx.AKrbh+'"','KRXXDA');
end;

//清空客人信息
procedure TTdzdForm.EmptyKrxx;
begin
  //HotelData.EmptyData('select * from KRXX where D_KRBH="'+FJzxx.AKrbh+'"');
  HotelData.EmptyData('delete from KRXX where D_KRBH="'+FJzxx.AKrbh+'"');
end;

//备份客人帐单
procedure TTdzdForm.BakKrzd;
begin
  HotelData.BakData('select * from KRZD where D_ZDBH="'+FJzxx.AZdbh+'"','KRZDDA');
end;

//清空客人押金
procedure TTdzdForm.EmptyKryj;
begin
  //HotelData.EmptyData('select * from KRYJ where D_YJBH="'+FJzxx.AYjbh+'"');
  HotelData.EmptyData('delete from KRYJ where D_YJBH="'+FJzxx.AYjbh+'"');
end;

{
procedure TTdzdForm.EmptyKrzd;
begin
  HotelData.EmptyData('select * from KRZD where D_ZDBH="'+FJzxx.AZdbh+'"');
end;
}

procedure TTdZdForm.AddYsk(const AKhbh,AZdbh,AXmbh: string;AHh: Integer;AXfje: Currency);
begin
  try
    try
      tblYsk.Open;
    except
      On E:Exception do
      begin
        ShowWarning('打开数据库出错,请检查网络连接是否正常!'
                    +#13#10
                    +'错误信息:'
                    +E.Message);
        raise;
      end;
    end;

    tblYsk.Insert;
    tblYsk.FieldByName('D_KHBH').AsString   := AKhbh;
    tblYsk.FieldByName('D_ZDBH').AsString   := AZdbh;
    tblYsk.FieldByName('D_HH').AsInteger    := AHh;
    tblYsk.FieldByName('D_XMBH').AsString   := AXmbh;
    //tblYsk.FieldByName('D_XFDJ').AsCurrency := qryKrzdD_XFDJ.Value;
    //tblYsk.FieldByName('D_XFSL').AsFloat    := qryKrzdD_XFSL.Value;
    tblYsk.FieldByName('D_XFJE').AsCurrency := AXfje;
    tblYsk.FieldByName('D_XFRQ').AsDateTime := FJzxx.AJzrq;
    tblYsk.FieldByName('D_XFSJ').AsDateTime := FJzxx.AJzsj;
    tblYsk.FieldByName('D_CZYXM').AsString  := CZY.CzyXm;
    //tblYsk.FieldByName('D_BZ').AsString     := qryKrzdD_BZ.Value;
    tblYsk.Post;

  finally
    tblYsk.Close;
  end;
end;


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

    //添加消费明细
    qryKrzd.First;
    while not qryKrzd.Eof do
    begin
      if qryKrzdD_HH.Value <> 0 then
      begin
        tblYsk.Insert;
        tblYsk.FieldByName('D_KHBH').AsString   := FJzxx.AKhbh;
        tblYsk.FieldByName('D_ZDBH').AsString   := qryKrzdD_ZDBH.Value;
        tblYsk.FieldByName('D_HH').AsInteger    := qryKrzdD_HH.Value;
        tblYsk.FieldByName('D_XMBH').AsString   := qryKrzdD_XMBH.Value;
        tblYsk.FieldByName('D_XFDJ').AsCurrency := qryKrzdD_XFDJ.Value;
        tblYsk.FieldByName('D_XFSL').AsFloat    := qryKrzdD_XFSL.Value;
        tblYsk.FieldByName('D_XFJE').AsCurrency := qryKrzdD_XFJE.Value;
        tblYsk.FieldByName('D_XFRQ').AsDateTime := qryKrzdD_XFRQ.Value;
        tblYsk.FieldByName('D_XFSJ').AsDateTime := qryKrzdD_XFSJ.Value;
        tblYsk.FieldByName('D_CZYXM').AsString  := CZY.CzyXm;
        tblYsk.FieldByName('D_BZ').AsString     := qryKrzdD_BZ.Value;
        tblYsk.Post;
      end;
      qryKrzd.Next;
    end;
  finally
    tblYsk.Close;
  end;
end;

//结帐库中添加预交款 贵宾卡
procedure TTdZdForm.AddYjk(AGbkJzxx: TGbkJzxx);
var
  AYe,ACe: Currency;
  AXmbh,AZdbh: string;
  AHh: Integer;
begin
  IsAppend := True;

  if (AGbkJzxx.AJzfs=JZFS_RMB)
   or(AGbkJzxx.AJzfs=JZFS_XYK)
   or(AGbkJzxx.AJzfs=JZFS_ZP )  then
  begin
    //贵宾卡结帐,剩余的金额
    AYe := FSjje - AGbkJzxx.AKcje;
    tblKrjz.First;
    while not tblKrjz.Eof do
    begin
      if AYe = 0 then Break;
      //如果不是预交款
      if tblKrjzD_XMBH.Value <> XMBH_YJK then
      begin
        //如果余额大于当前消费金额,修改当前结帐方式
        if AYe >= tblKrjzD_XFJE.Value then
        begin
          tblKrjz.Edit;
          tblKrjzD_JZFS.Value := AGbkJzxx.AJzfs;
          tblKrjzD_XYKBH.Value:= AGbkJzxx.AXykbh;
          AYe := AYe - tblKrjzD_XFJE.Value;
          tblKrjz.Post;
        end
        else //如果余额小于当前消费金额,修改当前消费金额为余额,增加差额
        begin
          ACe   := tblKrjzD_XFJE.Value - AYe;
          AXmbh := tblKrjzD_XMBH.Value;

          tblKrjz.Edit;
          tblKrjzD_XFJE.Value := AYe;
          tblKrjzD_JZFS.Value := AGbkJzxx.AJzfs;
          tblKrjzD_XYKBH.Value:= AGbkJzxx.AXykbh;
          AYe := AYe - tblKrjzD_XFJE.Value;
          tblKrjz.Post;
          tblKrjz.Insert;
          tblKrjzD_XMBH.Value := AXmbh;
          tblKrjzD_XFJE.Value := ACe;
          tblKrjzD_YJJE.Value := 0;
          tblKrjzD_YHJE.Value := 0;
          tblKrjz.Post;
        end;
      end;
      tblKrjz.Next;
    end;
  end;
  //如果是记账
  if (AGbkJzxx.AJzfs = JZFS_JZ) then
  begin
    //贵宾卡结帐,剩余的金额
    AZdbh := HotelData.GetBh('D_ZDBH',PREV_ZDBH);
    AHh := 0;
    AYe := FSjje - AGbkJzxx.AKcje;
    tblKrjz.First;
    while not tblKrjz.Eof do
    begin
      if AYe = 0 then Break;
      //如果不是预交款
      if tblKrjzD_XMBH.Value <> XMBH_YJK then
      begin
        //如果余额大于当前消费金额,当前消费金额记账
        if AYe >= tblKrjzD_XFJE.Value then
        begin
          AYe := AYe - tblKrjzD_XFJE.Value;

          Inc(AHh);

          AddYsk(AGbkJzxx.AKhbh,AZdbh,tblKrjzD_XMBH.Value,AHh,tblKrjzD_XFJE.Value);

          tblKrjz.Delete;
        end
        else //如果余额小于当前消费金额,修改当前消费金额为差额,余额记账
        begin
          ACe   := tblKrjzD_XFJE.Value - AYe;
          AXmbh := tblKrjzD_XMBH.Value;

          Inc(AHh);

          AddYsk(AGbkJzxx.AKhbh,AZdbh,tblKrjzD_XMBH.Value,AHh,AYe);

          tblKrjz.Edit;
          tblKrjzD_XFJE.Value := ACe;
          AYe := AYe - tblKrjzD_XFJE.Value;
          tblKrjz.Post;
          tblKrjz.Next;
        end;
      end;
    end;
  end;

  tblKrjz.Insert;
  tblKrjzD_XMBH.Value := XMBH_YJK;
  tblKrjzD_XFJE.Value := 0-AGbkJzxx.AKcje;
  tblKrjzD_YJJE.Value := 0;
  tblKrjzD_YHJE.Value := 0;
  tblKrjz.Post;
  IsAppend := False;
end;

//确认结帐
procedure TTdzdForm.btnOKClick(Sender: TObject);
var
  AGbkJzxx: TGbkJzxx;
  ASjje : Currency;
begin
  inherited;
  ASjje := StrToCurr(edtSjje.Text);
  if Abs(ASjje-FJsje)<=10 then FSjje := ASjje
  else
  begin
    ShowWarning('实结金额差额必须小于10元!');
    edtSjje.SetFocus;
    Exit;
  end;

  if not Confirm('你确认该客人的消费结帐吗?') then
    Exit;

  try
    tblKrjz.DisableControls;
    tblKrjzD_YHJE.OnValidate := nil;// 20020627 edit by ls.

    //事务启动
    HotelData.DatabaseUser.StartTransaction;

    try

      //贵宾卡结帐
      //人民币、支票、信用卡结帐
      if (FJzxx.AJzfs=JZFS_RMB)
        or(FJzxx.AJzfs=JZFS_ZP)
        or(FJzxx.AJzfs=JZFS_XYK)
        or(FJzxx.AJzfs=JZFS_GBK) then
      begin
        if FJzxx.AJzfs = JZFS_GBK then
        begin
          AGbkJzxx := CardXf(FSjje,True);
          if AGbkJzxx.AKcje = 0 then
            Exit;
          AddYjk(AGbkJzxx);
        end;

        UpdateEwf;
        UpdateKrzd(JZBZ_TD);
        UpdateKrjz;
        tblKrjz.ApplyUpdates;
        qryKrzd.ApplyUpdates;
        UpdateKrxx;
        BakKrxx;
        EmptyKrxx;
        EmptyKryj;
        BakKrzd;
        //EmptyKrzd;
        //tblKrjz.CancelUpdates;
      end;

      //客户记账
      if (FJzxx.AJzfs=JZFS_JZ) then
      begin
        UpdateEwf;
        UpdateKrzd(JZBZ_TD+ZDBZ_JZ+FJzxx.AKhbh);
        UpdateKrjz;
        UpdateYsk;
        qryKrzd.ApplyUpdates;
        UpdateKrxx;
        BakKrxx;
        EmptyKrxx;
        EmptyKryj;
        BakKrzd;
        //EmptyKrzd;
        tblKrjz.CancelUpdates;
      end;

      //事务提交
      HotelData.DatabaseUser.Commit;

      {if Confirm('是否打印帐单?') then
        btnPrintClick(nil);}

    except
      //事务回滚
      HotelData.DatabaseUser.Rollback;
      raise;
    end;

    tblKrjz.CancelUpdates;
    tblKrjz.CommitUpdates;
  finally
    tblKrjz.EnableControls;
  end;
  Close;
end;

//判断实结金额
procedure TTdzdForm.edtSjjeExit(Sender: TObject);
var
  ASjje: Currency;
begin
  inherited;
  ASjje := StrToCurr(edtSjje.Text);
  if Abs(ASjje-FJsje)<=10 then FSjje := ASjje
  else
  begin
    ShowWarning('实结金额差额必须小于10元!');
    edtSjje.SetFocus;
  end;
end;

procedure TTdzdForm.btnPrintClick(Sender: TObject);
var
  APrintStru: TPrintStru;
begin
  APrintStru.ATitle := '帐单(结帐方式:'+lblJzfs.Caption+')';
  APrintStru.ASub := '消费金额:'+lblXfje.Caption+' '
                    +'已结金额:'+lblYjje.Caption+' '
                    +'押金金额:'+lblYfje.Caption+' '
                    +'结算金额:'+lblJsje.Caption+' '+#13#10
                    +'退付金额:'+lblTfje.Caption+' '
                    +'优惠金额:'+lblYhje.Caption+' '
                    +'实结金额:'+edtSjje.Text+'元';

  APrintStru.ADataSet := tblKrjz;
  PrintLb(APrintStru,dbgZd);
end;

procedure TTdzdForm.btnFjmxClick(Sender: TObject);
begin
  inherited;
  Fjmx(FJzxx.AZdbh);
end;

procedure TTdzdForm.btnZdmxClick(Sender: TObject);
begin
  inherited;
  Zdmx(FJzxx.AZdbh);
end;

end.

⌨️ 快捷键说明

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