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

📄 c_ydcytd.pas

📁 经典的酒店管理系统
💻 PAS
字号:
unit C_Ydcytd;

interface

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

type
  TYdcytdForm = class(TStdJdForm)
    Label10: TLabel;
    lblKrxm: TLabel;
    Label12: TLabel;
    lblDwmc: TLabel;
    tblYdcy: TTable;
    Label1: TLabel;
    dtpBd: TDateTimePicker;
    Label2: TLabel;
    dtpEd: TDateTimePicker;
    btnInsert: TBitBtn;
    DBGrid1: TDBGrid;
    dsYdcy: TDataSource;
    btnYdqr: TBitBtn;
    btnYdqx: TBitBtn;
    lblState: TStaticText;
    Label3: TLabel;
    edtBz: TEdit;
    tblYdcyD_YDBH: TStringField;
    tblYdcyD_CTBH: TStringField;
    tblYdcyD_CTMC: TStringField;
    tblYdcyD_KRBH: TStringField;
    tblYdcyD_KRXM: TStringField;
    tblYdcyD_YDRQ: TDateTimeField;
    tblYdcyD_SYRQ: TDateTimeField;
    tblYdcyD_SYSJ: TDateTimeField;
    tblYdcyD_SJDM: TStringField;
    tblYdcyD_YCBZ: TStringField;
    tblYdcyD_YCLX: TIntegerField;
    tblYdcyD_RS: TIntegerField;
    tblYdcyD_DJ: TFloatField;
    tblYdcyD_XFSL: TFloatField;
    tblYdcyD_XFJE: TFloatField;
    tblYdcyD_YDBZ: TStringField;
    tblYdcyD_RZBZ: TStringField;
    tblYdcyD_KTBZ: TStringField;
    tblYdcyD_JSBZ: TStringField;
    tblYdcyD_BZ: TBlobField;
    tblYdcyD_CZYXM: TStringField;
    tblYdcyD_XFZE: TCurrencyField;
    btnPrint: TBitBtn;
    tblYdcytd: TTable;
    Label4: TLabel;
    lblLxdh: TLabel;
    procedure tblYdcyNewRecord(DataSet: TDataSet);
    procedure dtpBdChange(Sender: TObject);
    procedure dtpEdChange(Sender: TObject);
    procedure btnInsertClick(Sender: TObject);
    procedure btnCancClick(Sender: TObject);
    procedure tblYdcyCalcFields(DataSet: TDataSet);
    procedure btnOKClick(Sender: TObject);
    procedure tblYdcyBeforeInsert(DataSet: TDataSet);
    procedure btnYdqrClick(Sender: TObject);
    procedure btnPrintClick(Sender: TObject);
    procedure btnYdqxClick(Sender: TObject);
  private
    { Private declarations }
    FKrbh: string;
    FYdbh: string;
    FHh: Integer;
    FBd: TDateTime;
    FEd: TDateTime;
    FRzbz: string;
    IsAppend: Boolean;
    procedure ShowState;
  public
    { Public declarations }
  end;

var
  YdcytdForm: TYdcytdForm;

procedure YdcytdNew(const AKrbh: string);
procedure YdcytdEdit(const AKrbh,AYdbh: string);

implementation

uses C_HotelData, C_YdcytdPrint;

{$R *.dfm}

//新增预定
procedure YdcytdNew(const AKrbh: string);
begin
  YdcytdForm := TYdcytdForm.Create(Application);
  try
    with YdcytdForm do
    begin
      //初始化
      FKrbh      := AKrbh;
      FYdbh      := HotelData.GetBh('D_YDBH',PREV_YDBH);
      FHh        := 1;
      FRzbz      := 'F';
      dtpBd.Date := Tomorrow;
      dtpEd.Date := Tomorrow;
      FBd        := dtpBd.Date;
      FEd        := dtpEd.Date;
      lblKrxm.Caption := HotelData.FindUserBh('YDXX','D_KRXM','D_KRBH',FKrbh);
      lblDwmc.Caption := HotelData.FindUserBh('YDXX','D_LXR','D_KRBH',FKrbh);
      lblLxdh.Caption := HotelData.FindUserBh('YDXX','D_LXDH','D_KRBH',FKrbh);
      try
        tblYdcy.Open;
      except
        On E:Exception do
        begin
          ShowWarning('打开数据库出错,请检查网络连接是否正常!'
                      +#13#10
                      +'错误信息:'
                      +E.Message);
          raise;
        end;
      end;

      tblYdcy.Filter   := 'D_YDBH='''+FYdbh+''' and D_CTBH<>''0''';
      tblYdcy.Filtered := True;
      //IsAppend := True;
      ShowState;
      ShowModal;
    end;
  finally
    YdcytdForm.tblYdcy.Close;
    YdcytdForm.tblYdcy.Filter   := '';
    YdcytdForm.tblYdcy.Filtered := False;
    YdcytdForm.Free;
  end;
end;

//编辑预定
procedure YdcytdEdit(const AKrbh,AYdbh: string);
begin
  YdcytdForm := TYdcytdForm.Create(Application);
  try
    with YdcytdForm do
    begin
      //初始化
      FKrbh    := AKrbh;
      FYdbh    := AYdbh;
      IsAppend := False;
      lblKrxm.Caption := HotelData.FindUserBh('YDXX','D_KRXM','D_KRBH',FKrbh);
      lblDwmc.Caption := HotelData.FindUserBh('YDXX','D_LXR','D_KRBH',FKrbh);
      lblLxdh.Caption := HotelData.FindUserBh('YDXX','D_LXDH','D_KRBH',FKrbh);
      try
        tblYdcy.Open;
      except
        On E:Exception do
        begin
          ShowWarning('打开数据库出错,请检查网络连接是否正常!'
                      +#13#10
                      +'错误信息:'
                      +E.Message);
          raise;
        end;
      end;

      tblYdcy.Filter   := 'D_YDBH='''+FYdbh+''' and D_CTBH<>''0''';
      tblYdcy.Filtered := True;

      tblYdcy.First;
      dtpBd.Date := tblYdcyD_SYRQ.Value;
      FRzbz      := tblYdcyD_RZBZ.Value;
      edtBz.Text := tblYdcyD_BZ.Value;

      tblYdcy.Last;
      dtpEd.Date := tblYdcyD_SYRQ.Value;

      FHh := tblYdcyD_CTBH.AsInteger + 1;

      FBd := dtpBd.Date;
      FEd := dtpEd.Date;

      ShowState;
      ShowModal;
    end;
  finally
    YdcytdForm.tblYdcy.Close;
    YdcytdForm.tblYdcy.Filter   := '';
    YdcytdForm.tblYdcy.Filtered := False;
    YdcytdForm.Free;
  end;
end;

procedure TYdcytdForm.ShowState;
begin
  if FRzbz='T' then
  begin
    lblState.Caption    := '已确认';
    lblState.Font.Color := clGreen;
  end
  else
  begin
    lblState.Caption    := '未确认';
    lblState.Font.Color := clYellow;
  end;

  btnYdqr.Enabled := FRzbz<>'T';
  //btnYdqx.Enabled := btnYdqr.Enabled;
end;

procedure TYdcytdForm.tblYdcyNewRecord(DataSet: TDataSet);
begin
  inherited;
  tblYdcyD_YDBH.Value := FYdbh;
  tblYdcyD_KRBH.Value := FKrbh;
  tblYdcyD_YDRQ.Value := Date;
  tblYdcyD_CTMC.Value := '团队定餐';
  tblYdcyD_JSBZ.Value := JS_NO;
  tblYdcyD_YDBZ.Value := YDCY_TD;
  tblYdcyD_KRXM.Value := lblKrxm.Caption;
  tblYdcyD_CZYXM.Value:= CZY.CzyXm;
end;

procedure TYdcytdForm.dtpBdChange(Sender: TObject);
begin
  inherited;
  FBd := dtpBd.Date;
end;

procedure TYdcytdForm.dtpEdChange(Sender: TObject);
begin
  inherited;
  FEd := dtpEd.Date;
end;

//插入
procedure TYdcytdForm.btnInsertClick(Sender: TObject);
var
  ADate: TDate;
begin
  inherited;
  if FEd<FBd then
  begin
    ShowWarning('用餐截止日期必须大于等于起始日期!');
    Exit;
  end;

  IsAppend := True;
  ADate    := FBd;

  while ADate<=FEd do
  begin
    //如果存在则继续
    if tblYdcy.Locate('D_SYRQ',ADate,[]) then
    begin
      ADate := IncDay(ADate,1);
      Continue;
    end;

    tblYdcy.Insert;
    tblYdcyD_CTBH.Value := IntToStr(FHh);
    tblYdcyD_SYRQ.Value := StrToDate(FormatDateTime('yyyy-mm-dd',ADate));
    tblYdcyD_SYSJ.Value := EnCodeTime(7,0,0,0);
    tblYdcyD_SJDM.Value := Morning;
    tblYdcyD_RZBZ.Value := FRzbz;
    tblYdcy.Post;
    Inc(FHh);

    tblYdcy.Insert;
    tblYdcyD_CTBH.Value := IntToStr(FHh);
    tblYdcyD_SYRQ.Value := StrToDate(FormatDateTime('yyyy-mm-dd',ADate));
    tblYdcyD_SYSJ.Value := EnCodeTime(12,0,0,0);
    tblYdcyD_SJDM.Value := Noon;
    tblYdcyD_RZBZ.Value := FRzbz;
    tblYdcy.Post;
    Inc(FHh);

    tblYdcy.Insert;
    tblYdcyD_CTBH.Value := IntToStr(FHh);
    tblYdcyD_SYRQ.Value := StrToDate(FormatDateTime('yyyy-mm-dd',ADate));
    tblYdcyD_SYSJ.Value := EnCodeTime(18,0,0,0);
    tblYdcyD_SJDM.Value := Night;
    tblYdcyD_RZBZ.Value := FRzbz;
    tblYdcy.Post;
    Inc(FHh);

    ADate := IncDay(ADate,1);
  end;
  IsAppend := False;
end;

procedure TYdcytdForm.btnCancClick(Sender: TObject);
begin
  inherited;
  tblYdcy.CancelUpdates;
end;

procedure TYdcytdForm.tblYdcyCalcFields(DataSet: TDataSet);
begin
  inherited;
  tblYdcyD_XFZE.Value := tblYdcyD_XFSL.Value*tblYdcyD_DJ.Value;
end;

//确定
procedure TYdcytdForm.btnOKClick(Sender: TObject);
begin
  inherited;
  if not HotelData.CheckYgqx(CZY.CzyBh,'预定修改') then Exit;
  if tblYdcy.IsEmpty then
  begin
    ShowWarning('请输入用餐台数和用餐标准!');
    Exit;
  end;

  try
    tblYdcy.DisableControls;
    HotelData.DatabaseUser.StartTransaction;
    try
      tblYdcy.First;
      while not tblYdcy.Eof do
      begin
          {tblYdcy.Edit;
          tblYdcyD_BZ.Value   := edtBz.Text;
          tblYdcyD_RZBZ.Value := FRzbz;
          tblYdcyD_XFJE.Value := tblYdcyD_XFSL.Value*tblYdcyD_DJ.Value;
          if tblYdcyD_DJ.Value<>0 then
            tblYdcyD_YCBZ.Value := tblYdcyD_XFSL.AsString+' 桌×'+tblYdcyD_DJ.AsString+'元';
          tblYdcy.Post;
          tblYdcy.Next;}

        if tblYdcyD_XFZE.Value = 0 then
          tblYdcy.Delete
        else
        begin
          tblYdcy.Edit;
          tblYdcyD_BZ.Value   := edtBz.Text;
          tblYdcyD_RZBZ.Value := FRzbz;
          tblYdcyD_XFJE.Value := tblYdcyD_XFSL.Value*tblYdcyD_DJ.Value;
          tblYdcyD_YCBZ.Value := tblYdcyD_XFSL.AsString+' 桌×'+tblYdcyD_DJ.AsString+'元';
          tblYdcy.Post;
          tblYdcy.Next;

        end;
      end;



      //插入总单
      IsAppend         := True;
      tblYdcy.Filtered := False;
      if not tblYdcy.FindKey([FYdbh,'0']) then
      begin
        tblYdcy.Insert;
        tblYdcyD_CTBH.Value := '0';
        tblYdcyD_SYRQ.Value := StrToDate(FormatDateTime('yyyy-mm-dd',FBd));
        tblYdcyD_RZBZ.Value := FRzbz;
        tblYdcyD_BZ.Value   := edtBz.Text;
        tblYdcy.Post;
      end
      else
      begin
        tblYdcy.Edit;
        tblYdcyD_SYRQ.Value := FBd;
        tblYdcyD_RZBZ.Value := FRzbz;
        tblYdcyD_BZ.Value   := edtBz.Text;
        tblYdcy.Post;
      end;
      IsAppend := False;
      tblYdcy.Filtered := True;
      tblYdcy.ApplyUpdates;
      HotelData.DatabaseUser.Commit;
    except
      HotelData.DatabaseUser.Rollback;
      raise;
    end;

    tblYdcy.CommitUpdates;
  finally
    tblYdcy.EnableControls;
  end;
  Close;
end;

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

procedure TYdcytdForm.btnYdqrClick(Sender: TObject);
begin
  inherited;
  if not HotelData.CheckYgqx(CZY.CzyBh,'预定确认') then Exit;
  if Confirm('你确认该餐饮的预定吗?') then
  begin
    FRZBZ := 'T';
    //ShowState;
    btnOkClick(nil);
  end;
end;

procedure TYdcytdForm.btnPrintClick(Sender: TObject);
begin
  if not HotelData.CheckYgqx(CZY.CzyBh,'预定确认') then Exit;
  if Confirm('你确认该餐饮的预定吗?') then
  begin
    FRzbz := 'T';
    //ShowState;
    btnOkClick(nil);
  end
  else
    Exit;

  YdcytdPrintForm := TYdcytdPrintForm.Create(Application);
  try
    with YdcytdPrintForm do
    begin
      qrlSub.Caption  := '打印时间:'+DateTimeToStr(Now)+' '+'通知人:'+CZY.CzyXm;
      qrlKrxm.Caption := lblKrxm.Caption;
      qrlLxr.Caption  := lblDwmc.Caption;
      qrlLxdh.Caption := lblLxdh.Caption;
      qrlBz.Lines.Add(edtBz.Text);
      qrlYcsj.Caption := DateToStr(FBd)+'至'+DateToStr(FEd);
      YdcytdPrint;
    end;
  finally
    YdcytdPrintForm.Free;
  end;

end;

procedure TYdcytdForm.btnYdqxClick(Sender: TObject);
begin
  inherited;
  if not HotelData.CheckYgqx(CZY.CzyBh,'预定确认') then Exit;
  if Confirm('你取消该餐饮的确认吗?') then
  begin
    FRzbz := 'F';
    ShowState;
    //btnOkClick(nil);
  end;
end;

end.

⌨️ 快捷键说明

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