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

📄 c_ctjz.pas

📁 经典的酒店管理系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit C_ctjz;

interface

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

type
  TCtjzForm = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    lblTitle: TLabel;
    DBGrid1: TDBGrid;
    btnOk: TBitBtn;
    btnCanc: TBitBtn;
    tblCtjz: TTable;
    dsCtjz: TDataSource;
    radJzfs: TRadioGroup;
    cmbJz: TComboBox;
    Label1: TLabel;
    edtZkl: TEdit;
    Label2: TLabel;
    edtYhje: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    lblXfje: TLabel;
    lblSjje: TLabel;
    tblCtxm: TTable;
    DosMove1: TDosMove;
    tblKrxx: TTable;
    tblKrzd: TTable;
    tblKrjz: TTable;
    tblCtdc: TTable;
    tblYsk: TTable;
    btnPrint: TBitBtn;
    Bevel1: TBevel;
    tblCtjzD_XMBH: TStringField;
    tblCtjzD_XFJE: TFloatField;
    tblCtjzD_YHJE: TFloatField;
    tblCtjzD_BZ: TStringField;
    tblCtjzD_XMMC: TStringField;
    procedure tblCtjzAfterPost(DataSet: TDataSet);
    procedure tblCtjzBeforeEdit(DataSet: TDataSet);
    procedure edtZklExit(Sender: TObject);
    procedure edtYhjeExit(Sender: TObject);
    procedure radJzfsClick(Sender: TObject);
    procedure btnOkClick(Sender: TObject);
    procedure btnPrintClick(Sender: TObject);
    procedure tblCtjzBeforeInsert(DataSet: TDataSet);
    procedure cmbJzDblClick(Sender: TObject);
    procedure cmbJzKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
    FCtzts: TCtzts;
    FCtzt: TCtzt;
    FXfje: Currency;
    FYhje: Currency;
    FSjje: Currency;
    FSpje: Currency;
    FBjje: Currency;
    FXyje: Currency;
    FZkl : Double;

    //FKcje: Currency;

    FJzfs: string;
    FXykbh: string;
    FKhbh: string;
    FKfbh: string;
    FKrbh: string;

    FBmbh: string;
    FZdbh: string;
    FJzbh: string;

    IsAppend : Boolean;
    FGbkJzxx : TGbkJzxx;

    procedure GetJzje;
    procedure SumXfje;
    procedure ShowJzxx;
    procedure SumQtje;

    procedure GetTdmc;
    function IsValid: Boolean;

    procedure UpdateKrzd;
    procedure UpdateKrzdWjz;
    procedure UpdateKrjz;
    procedure UpdateCtdc(const ABz: string);
    procedure UpdateCtzt;
    procedure UpdateGz(const AZdbh,AZdlb: string);
    procedure UpdateYsk;
  public
    { Public declarations }

  end;

var
  CtjzForm: TCtjzForm;

procedure Ctjz(var ACtzts: TCtzts);

implementation

uses C_CtData, C_Sysprint, C_CardXf, C_KhdaSel;

{$R *.dfm}

//餐厅结帐
procedure Ctjz(var ACtzts: TCtzts);
begin
  CtjzForm := TCtjzForm.Create(Application);
  try
    with CtjzForm do
    begin
    FBmbh  := CtData.FindBh('YGDA','D_BMBH','D_YGBH',CZY.CzyBh);
    FCtzts := ACtzts;
    FCtzt  := FCtzts[0];
    FJzfs  := JZFS_RMB;
    radJzfs.ItemIndex := 0;

    GetJzje;
    ShowJzxx;
    tblCtjz.Close;
    tblCtjz.Open;
    ShowModal;
    ACtzts := FCtzts;
    end;
  finally
    CtjzForm.tblCtjz.Close;
    CtjzForm.Free;
  end;
end;

procedure TCtjzForm.SumQtje;
var
  PrevRecord: TBookMark;
  FTotals : Currency;
begin
  PrevRecord := tblCtjz.GetBookmark;
  try
    tblCtjz.DisableControls;
    FTotals := 0;
    tblCtjz.First;
    while not tblCtjz.Eof do
    begin
      FTotals := FTotals + tblCtjzD_XFJE.Value;
      tblCtjz.Next;
    end;
    FXfje := FTotals;
    ShowJzxx;
  finally
    tblCtjz.EnableControls;
    if PrevRecord<>nil then
    begin
      tblCtjz.GotoBookmark(PrevRecord);
      tblCtjz.FreeBookmark(PrevRecord);
    end;
  end;
end;

//消费金额
procedure TCtjzForm.SumXfje;
var
  s: string;
begin
  //消费总额
  s := 'select sum((D_XFSL-D_THSL)*D_DJ) from DCMX'
      +' where (D_DEL="F")and(D_DCBH="'+FCtzt.ADcbh+'")';
  FXfje := CtData.SumJe(s);

  //食品金额
  s := 'select sum((D_XFSL-D_THSL)*D_DJ) from DCMX'
      +' where (D_DEL="F")and(D_DCBH="'+FCtzt.ADcbh
      +'")and(D_XMBH="'+XMBH_SP+'")';
  FSpje := CtData.SumJe(s);

  //酒水
  s := 'select sum((D_XFSL-D_THSL)*D_DJ) from DCMX where (D_DEL="F")and(D_DCBH="'
      +FCtzt.ADcbh+'")and(D_XMBH="'
      +XMBH_JS+'")';
  FBjje := CtData.SumJe(s);

  //香烟
  s := 'select sum((D_XFSL-D_THSL)*D_DJ) from DCMX where (D_DEL="F")and(D_DCBH="'
      +FCtzt.ADcbh+'")and(D_XMBH="'
      +XMBH_XY+'")';
  FXyje := CtData.SumJe(s);

  //折扣率
  FZkl  := 100;
  //优惠金额 //只优惠食品
  //FYhje := FXfje*(1-FZkl*0.01);
  FYhje := FSpje*(1-FZkl*0.01);
  //实结金额
  FSjje := Trunc(FXfje - FYhje + 0.99);
end;

//获取结帐金额
procedure TCtjzForm.GetJzje;
begin
  edtZkl.Text  := '';
  edtYhje.Text := '';
  IsAppend     := True;

  SumXfje;

  tblCtjz.Close;
  tblCtjz.EmptyTable;
  tblCtjz.Open;
  try
    tblCtxm.Open;
    tblCtxm.First;
    while not tblCtxm.Eof do
    begin
      tblCtjz.Insert;
      tblCtjzD_XMBH.Value := tblCtxm.FieldByName('D_XMBH').AsString;

      if tblCtxm.FieldByName('D_XMBH').AsString = XMBH_SP then
      begin
        tblCtjzD_XFJE.Value := FSpje;
        tblCtjzD_BZ.Value := 'T';
      end;

      if tblCtxm.FieldByName('D_XMBH').AsString = XMBH_JS then
      begin
        tblCtjzD_XFJE.Value := FBjje;
        tblCtjzD_BZ.Value := 'T';
      end;

      if tblCtxm.FieldByName('D_XMBH').AsString = XMBH_XY then
      begin
        tblCtjzD_XFJE.Value := FXyje;
        tblCtjzD_BZ.Value := 'T';
      end;

      tblCtjz.Post;
      tblCtxm.Next;
    end;
  finally
    IsAppend := False;
    tblCtxm.Close;
  end;
end;

//显示结帐信息
procedure TCtjzForm.ShowJzxx;
begin
  FSjje := Trunc(FXfje - FYhje + 0.99);
  lblXfje.Caption := CurrToStr(FXfje)+'元';
  lblSjje.Caption := CurrToStr(FSjje)+'元';
end;

procedure TCtjzForm.tblCtjzAfterPost(DataSet: TDataSet);
begin
  if not IsAppend then
    SumQtje;
end;

procedure TCtjzForm.tblCtjzBeforeEdit(DataSet: TDataSet);
begin
  if tblCtjzD_BZ.Value='T' then
    Abort;
end;

procedure TCtjzForm.edtZklExit(Sender: TObject);
begin
  if edtZkl.Text<>'' then
  begin
    try
      FZkl := StrToFloat(edtZkl.Text);
    except
      Exit;
      raise;
    end;

    if (FZkl>=0)and(FZkl<=100) then
    begin
      //只优惠食品
      //FYhje := Trunc(FXfje*(1-FZkl*0.01));
      FYhje := Trunc(FSpje*(1-FZkl*0.01));
      edtYhje.Text := CurrToStr(FYhje);
    end
    else
      FZkl := 100;
      
    ShowJzxx;
  end;
end;

procedure TCtjzForm.edtYhjeExit(Sender: TObject);
begin
  if edtYhje.Text <> '' then
  begin
    try
      FYhje := StrToCurr(edtYhje.Text);
    except
      Exit;
      raise;
    end;

    ShowJzxx;
  end
  else
  begin
    FYhje := 0;
    
    ShowJzxx;
  end;
end;

procedure TCtjzForm.GetTdmc;
begin
  tblKrxx.Open;
  tblKrxx.Filter   := 'D_KRLX=''T''';
  tblKrxx.Filtered := True;

  tblKrxx.First;
  while not tblKrxx.Eof do
  begin
    cmbJz.Items.Add(tblKrxx.FieldByName('D_KRXM').AsString);
    tblKrxx.Next;
  end;

  tblKrxx.Filter   := '';
  tblKrxx.Filtered := False;
  tblKrxx.Close;
end;

procedure TCtjzForm.radJzfsClick(Sender: TObject);
begin
  cmbJz.Items.Clear;
  cmbJz.Style := csDropDownList;
  case radJzfs.ItemIndex of
    0: FJzfs := JZFS_RMB;
    1:
      begin
        CtData.ListMc(cmbJz,'XYK','D_XYKMC');
        FJzfs := JZFS_XYK;
      end;
    2: FJzfs := JZFS_ZP;
    3:
      begin
        cmbJz.Style := csDropDown;
        CtData.ListDm(cmbJz,'KHDA','D_KHMC');
        FJzfs := JZFS_JZ;
      end;
    4:
      begin
        cmbJz.Style := csDropDown;
        FJzfs := JZFS_GSK;
      end;
    5:
      begin
        GetTdmc;
        FJzfs := JZFS_GTD;
      end;
    6:
      begin
        FJzfs := JZFS_ZD;
      end;
    7: FJzfs := JZFS_GBK;
    8: FJzfs := JZFS_WJZ;
  end;
end;

//是否有效
function TCtjzForm.IsValid: Boolean;
var
  s: string;
begin
  Result := False;
  case radJzfs.ItemIndex of
    1:
      begin
        FXykbh := CtData.FindBh('XYK','D_XYKBH','D_XYKMC',cmbJz.Text);
        if FXykbh<>'' then
          Result := True
        else
          ShowInfo('请选择信用卡!');
      end;
    3:
      begin
        s := GetMc(cmbJz.Text);
        FKhbh := CtData.FindBh('KHDA','D_KHBH','D_KHMC',s);
        if FKhbh<>'' then
          Result := True
        else
          ShowInfo('请选择记帐客户!');
      end;
    4:
      begin
        if CtData.CheckKfzt(cmbJz.Text)=KFZT_BF then
        begin
          FKfbh := cmbJz.Text;
          Result := True;
        end
        else
          ShowInfo('请选择挂帐散客!');
      end;
    5:
      begin
        tblKrxx.Open;
        if tblKrxx.Locate('D_KRXM',cmbJz.Text,[]) then
        begin
          FKrbh := tblKrxx.FieldByName('D_KRBH').AsString;
          Result := True;
        end
        else
          ShowInfo('请选择挂帐团队!');
        tblKrxx.Close;
      end;
    else
      Result := True;
  end;
end;

//更新客人结帐
procedure TCtjzForm.UpdateKrjz;
begin
  FJzbh := CtData.GetBh('D_JZBH',PREV_JZBH);
  try
    tblKrjz.Open;
    tblKrjz.Insert;
    tblKrjz.FieldByName('D_JZBH').AsString   := FJzbh;
    tblKrjz.FieldByName('D_HH').AsInteger    := 0;
    tblKrjz.FieldByName('D_JZLX').AsString   := JZLX_FYK;
    tblKrjz.FieldByName('D_XFJE').AsCurrency := FSjje+FYhje;
    tblKrjz.FieldByName('D_YHJE').AsCurrency := FYhje;
    tblKrjz.FieldByName('D_JZRQ').AsDateTime := Date;
    tblKrjz.FieldByName('D_JZSJ').AsDateTime := Time;
    tblKrjz.FieldByName('D_CZYXM').AsString  := CZY.CzyXm;
    tblKrjz.FieldByName('D_BMBH').AsString   := FBmbh;
    tblKrjz.FieldByName('D_BZ').AsString     := JZBZ_FYK+' '+'餐费';
    tblKrjz.FieldByName('D_JZFS').AsString   := FJzfs;
    tblKrjz.FieldByName('D_XYKBH').AsString  := FXykbh;
    tblKrjz.FieldByName('D_KHBH').AsString   := FKhbh;
    tblKrjz.Post;

    if FJzfs<>JZFS_GBK then
    begin
      tblKrjz.Insert;
      tblKrjz.FieldByName('D_JZBH').AsString   := FJzbh;
      tblKrjz.FieldByName('D_HH').AsInteger    := 1;
      tblKrjz.FieldByName('D_XMBH').AsString   := XMBH_CF;
      tblKrjz.FieldByName('D_JZLX').AsString   := JZLX_FYK;
      tblKrjz.FieldByName('D_XFJE').AsCurrency := FSjje+FYhje;
      tblKrjz.FieldByName('D_YHJE').AsCurrency := FYhje;
      tblKrjz.FieldByName('D_JZRQ').AsDateTime := Date;
      tblKrjz.FieldByName('D_JZSJ').AsDateTime := Time;
      tblKrjz.FieldByName('D_CZYXM').AsString  := CZY.CzyXm;
      tblKrjz.FieldByName('D_BMBH').AsString   := FBmbh;
      tblKrjz.FieldByName('D_BZ').AsString     := JZBZ_FYK+' 餐费 ';
      tblKrjz.FieldByName('D_JZFS').AsString   := FJzfs;
      tblKrjz.FieldByName('D_XYKBH').AsString  := FXykbh;
      tblKrjz.FieldByName('D_KHBH').AsString   := FKhbh;
      tblKrjz.Post;
    end
    else //贵宾卡
    begin

      //添加预交款
      tblKrjz.Insert;
      tblKrjz.FieldByName('D_JZBH').AsString   := FJzbh;
      tblKrjz.FieldByName('D_HH').AsInteger    := 2;
      tblKrjz.FieldByName('D_XMBH').AsString   := XMBH_YJK;
      tblKrjz.FieldByName('D_JZLX').AsString   := JZLX_FYK;
      tblKrjz.FieldByName('D_XFJE').AsCurrency := 0-FGbkJzxx.AKcje;
      tblKrjz.FieldByName('D_YHJE').AsCurrency := 0;
      tblKrjz.FieldByName('D_JZRQ').AsDateTime := Date;
      tblKrjz.FieldByName('D_JZSJ').AsDateTime := Time;

⌨️ 快捷键说明

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