unit U_DyeGreyClothStkStats;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage,
  cxEdit, DB, cxDBData, cxGridCustomTableView, cxGridTableView,
  cxGridBandedTableView, cxGridDBBandedTableView, cxGridLevel, cxClasses,
  cxControls, cxGridCustomView, cxGridDBTableView, cxGrid, StdCtrls, ComCtrls,
  ExtCtrls, ToolWin, cxGridCustomPopupMenu, cxGridPopupMenu, ADODB, DBClient,
  cxDropDownEdit, cxCheckBox, RM_Common, RM_Class, RM_e_Xls, RM_Dataset,
  RM_System, RM_GridReport, Menus, cxCalendar, cxButtonEdit, cxTextEdit,
  cxLookAndFeels, cxLookAndFeelPainters, dxSkinsCore, dxSkinsDefaultPainters,
  cxNavigator, dxDateRanges, dxBarBuiltInMenu, U_BaseList,
  dxScrollbarAnnotations;

type
  TfrmDyeGreyClothStkStats = class(TfrmBaseList)
    ToolBar1: TToolBar;
    TBRafresh: TToolButton;
    TBFind: TToolButton;
    TBClose: TToolButton;
    Panel1: TPanel;
    ADOQueryCmd: TADOQuery;
    ADOQueryMain: TADOQuery;
    DS_Main: TDataSource;
    cxGridPopupMenu1: TcxGridPopupMenu;
    CDS_Main: TClientDataSet;
    CDS_HZ: TClientDataSet;
    PopupMenu1: TPopupMenu;
    cxGrid2: TcxGrid;
    Tv1: TcxGridDBTableView;
    v1Column14: TcxGridDBColumn;
    v2Column1: TcxGridDBColumn;
    Tv1Material: TcxGridDBColumn;
    Tv1CKPiece: TcxGridDBColumn;
    Tv1CKQty: TcxGridDBColumn;
    cxGrid2Level1: TcxGridLevel;
    Label3: TLabel;
    Label8: TLabel;
    C_name: TEdit;
    finishDescription: TEdit;
    Tv1IOTime: TcxGridDBColumn;
    v1Column7: TcxGridDBColumn;
    v1Column9: TcxGridDBColumn;
    ToolButton2: TToolButton;
    ToolButton1: TToolButton;
    ADOQueryTmp: TADOQuery;
    Tv1Column4: TcxGridDBColumn;
    Tv1finishDescription: TcxGridDBColumn;
    Tv1OrderNo: TcxGridDBColumn;
    Tv1Note: TcxGridDBColumn;
    TbExport: TToolButton;
    Label1: TLabel;
    Label4: TLabel;
    BegDate: TDateTimePicker;
    EndDate: TDateTimePicker;
    Tv1CKIOTime: TcxGridDBColumn;
    TbSave: TToolButton;
    Tv1CPRKQty: TcxGridDBColumn;
    Tv1CPRKPiece: TcxGridDBColumn;
    Tv1CPCKQty: TcxGridDBColumn;
    Tv1CPCKPiece: TcxGridDBColumn;
    Tv1CPCKIOTime: TcxGridDBColumn;
    procedure FormDestroy(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TBRafreshClick(Sender: TObject);
    procedure ConNoMChange(Sender: TObject);
    procedure TBCloseClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure TBFindClick(Sender: TObject);
    procedure MPRTCodeNameChange(Sender: TObject);
    procedure SXBatchNOChange(Sender: TObject);
    procedure FromCoNameChange(Sender: TObject);
//    procedure ToolButton1Click(Sender: TObject);
    procedure Tv1CellDblClick(Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure Tv1Column3PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);

    procedure Tv1Column3PropertiesChange(Sender: TObject);
    procedure Tv1Column3PropertiesEditValueChanged(Sender: TObject);
    procedure TbExportClick(Sender: TObject);
    procedure TbSaveClick(Sender: TObject);
    procedure finishDescriptionKeyPress(Sender: TObject; var Key: Char);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    procedure InitGrid();
    function SaveData(): Boolean;
    { Private declarations }
  public
    FstkName, FWorkshop: string;
    { Public declarations }
  end;

var
  frmDyeGreyClothStkStats: TfrmDyeGreyClothStkStats;

implementation

uses
  U_DataLink, U_RTFun, U_ZDYHelp;

{$R *.dfm}

procedure TfrmDyeGreyClothStkStats.FormDestroy(Sender: TObject);
begin
  inherited;
  frmDyeGreyClothStkStats := nil;
end;

procedure TfrmDyeGreyClothStkStats.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_ESCAPE then  // VK_ESCAPE 是 ESC 键的常量
  begin
    Key := 0;  // 清除按键，防止继续传递
    Close;     // 或者 ModalResult := mrCancel;
  end;
end;

procedure TfrmDyeGreyClothStkStats.finishDescriptionKeyPress(Sender: TObject;
  var Key: Char);
begin
  if Key = #13 then
  begin
    TBFind.Click;
  end;

end;

procedure TfrmDyeGreyClothStkStats.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  Action := caFree;
end;

procedure TfrmDyeGreyClothStkStats.FormCreate(Sender: TObject);
begin
  inherited;
  FWorkshop := Trim(self.fParameters3);
end;

procedure TfrmDyeGreyClothStkStats.InitGrid();
begin
  try
    ADOQueryMain.DisableControls;
    with ADOQueryMain do
    begin
      Filtered := False;
      Close;
      sql.Clear;
      sql.Add(' select A.*');
      sql.Add(' from V_BS_Cloth_StkStats A    ');
      sql.add(' where A.IOTime>=''' + Trim(FormatDateTime('yyyy-MM-dd', BegDate.DateTime)) + '''');
      sql.Add(' and A.IOTime<''' + Trim(FormatDateTime('yyyy-MM-dd', enddate.DateTime + 1)) + '''');
      sql.Add(' and isnull(stkName,'''')=''' + Trim(FstkName) + '''');
      if trim(FWorkshop) <> '' then
        sql.Add(' and A.Workshop=''' + trim(FWorkshop) + ''' ');
      Open;
    end;
    SCreateCDS(ADOQueryMain, CDS_Main);
    SInitCDSData(ADOQueryMain, CDS_Main);
  finally
    ADOQueryMain.EnableControls;
  end;
end;

procedure TfrmDyeGreyClothStkStats.TBRafreshClick(Sender: TObject);
begin
  InitGrid();
end;

procedure TfrmDyeGreyClothStkStats.ConNoMChange(Sender: TObject);
begin
  if ADOQueryMain.Active then
  begin
    SDofilter(ADOQueryMain, SGetFilters(Panel1, 1, 2));
  end;
end;

procedure TfrmDyeGreyClothStkStats.TBCloseClick(Sender: TObject);
begin

  Close;
end;

procedure TfrmDyeGreyClothStkStats.TbExportClick(Sender: TObject);
begin
  if ADOQueryMain.IsEmpty then
    exit;
  TcxGridToExcel(FSTKName + '库存列表', cxGrid2);
end;

procedure TfrmDyeGreyClothStkStats.FormShow(Sender: TObject);
begin
  inherited;
//  ReadCxGrid(trim(Self.Caption), Tv1, '坯布库存统计');
  BegDate.DateTime := SGetServerDate(ADOQueryCmd) - 2;
  EndDate.DateTime := SGetServerDate(ADOQueryCmd);
  InitGrid();
  KeyPreview := True;  // 确保表单可以预览按键
end;

procedure TfrmDyeGreyClothStkStats.TBFindClick(Sender: TObject);
begin
  if ADOQueryMain.Active then
  begin
    SDofilter(ADOQueryMain, SGetFilters(Panel1, 1, 2));
    SCreateCDS(ADOQueryMain, CDS_Main);
    SInitCDSData(ADOQueryMain, CDS_Main);
  end;
end;

procedure TfrmDyeGreyClothStkStats.MPRTCodeNameChange(Sender: TObject);
begin
  TBFind.Click;
end;

procedure TfrmDyeGreyClothStkStats.SXBatchNOChange(Sender: TObject);
begin
  TBFind.Click;
end;

procedure TfrmDyeGreyClothStkStats.FromCoNameChange(Sender: TObject);
begin
  TBFind.Click;
end;

//procedure TfrmDyeGreyClothStkList.ToolButton1Click(Sender: TObject);
//var
//  FPiZhong: string;
//  FReal: Double;
//begin
//  if Trim(edit1.Text) = '' then
//  begin
//    Application.MessageBox('库位不能为空!', '提示', 0);
//    Exit;
//  end;
//
//  with ADOQueryCmd do
//  begin
//    Close;
//    sql.Clear;
//    sql.Add(' update BS_Cloth_IO set StkPosition=' + quotedstr(Trim(edit1.Text)));
//    sql.Add(' where  bcioid=   ' + quotedstr(cds_main.FieldByName('bcioid').asstring));
//
////    sql.Add('Update JYOrder_Main Set StkPosition=' + quotedstr(edit1.Text));
////    sql.Add(' where Mainid=''' + Trim(CDS_MAIN.fieldbyname('Mainid').AsString) + '''');
//    ExecSQL;
//  end;
//  with CDS_MAIN do
//  begin
//    Edit;
//    FieldByName('StkPosition').Value := edit1.Text;
//    Post;
//  end;
//  tv1.Controller.EditingController.ShowEdit();
//end;

procedure TfrmDyeGreyClothStkStats.ToolButton2Click(Sender: TObject);
begin
  WriteCxGrid(trim(Self.Caption), Tv1, '坯布库存统计');
end;

procedure TfrmDyeGreyClothStkStats.TbSaveClick(Sender: TObject);
begin

  if SaveData() then
  begin
    Application.MessageBox('保存成功!', '提示', 0);
    InitGrid();
  end;

end;

function TfrmDyeGreyClothStkStats.SaveData(): Boolean;
begin
  try
    ADOQueryCmd.Connection.BeginTrans;
    CDS_Main.DisableControls;
    CDS_Main.First;
    while not CDS_Main.Eof do
    begin
      with ADOQueryCmd do
      begin
        Close;
        SQL.Clear;
        sql.add('select * from BS_Cloth_IO where OrderNo = ' + QuotedStr(Trim(CDS_Main.FieldByName('OrderNo').AsString)));
        Open;
      end;
      ADOQueryCmd.First;
      while not ADOQueryCmd.Eof do
      begin
        ADOQueryCmd.Edit;
        ADOQueryCmd.FieldByName('finish').value := CDS_Main.FieldByName('finish').AsString;
        ADOQueryCmd.FieldByName('Note').value := CDS_Main.FieldByName('Note').AsString;
        ADOQueryCmd.Post;
        ADOQueryCmd.Next;
      end;
      CDS_Main.Next;
    end;

    CDS_Main.EnableControls;
    ADOQueryCmd.Connection.CommitTrans;

    Result := True;
  except
    Result := False;
    ADOQueryCmd.Connection.RollbackTrans;
    application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0);
  end;

end;

procedure TfrmDyeGreyClothStkStats.Tv1CellDblClick(Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean);
begin
  ModalResult := 1;
end;

procedure TfrmDyeGreyClothStkStats.Tv1Column3PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
  inherited;
  try
    frmZDYHelp := TfrmZDYHelp.Create(Application);
    with frmZDYHelp do
    begin
      flag := 'StkPosition';
      flagname := '库位';
      MainType := FSTKName;
      if ShowModal = 1 then
      begin
        with Self.CDS_Main do
        begin
          Edit;
          FieldByName('StkPosition').Value := Trim(frmZDYHelp.ClientDataSet1.fieldbyname('ZdyName').AsString);
          with ADOQueryTemp do
          begin

            Close;
            sql.Clear;

            sql.Add(' update BS_Cloth_IO set StkPosition=' + quotedstr(Trim(frmZDYHelp.ClientDataSet1.fieldbyname('ZdyName').AsString)));
            sql.Add(' where  bcioid=   ' + quotedstr(cds_main.FieldByName('bcioid').asstring));

            execsql;
          end;
        end;
      end;
    end;
  finally
    frmZDYHelp.Free;
  end;

end;

procedure TfrmDyeGreyClothStkStats.Tv1Column3PropertiesChange(Sender: TObject);
var
  mvalue, FFieldName: string;
begin

  mvalue := TcxTextEdit(Sender).EditingText;
  FFieldName := Trim(Tv1.Controller.FocusedColumn.DataBinding.FilterFieldName);
  with CDS_Main do
  begin
    Edit;
    FieldByName(FFieldName).Value := mvalue;
    Post;
  end;
  with ADOQueryTmp do
  begin

    Close;
    sql.Clear;

    sql.Add(' update BS_Cloth_IO set StkPosition=' + quotedstr(Trim(mvalue)));
    sql.Add(' where  bcioid=   ' + quotedstr(cds_main.FieldByName('bcioid').asstring));

    execsql;
  end;

  tv1.Controller.EditingController.ShowEdit();
end;

procedure TfrmDyeGreyClothStkStats.Tv1Column3PropertiesEditValueChanged(Sender: TObject);
var
  mvalue, FFieldName: string;
begin

  mvalue := TcxTextEdit(Sender).EditingText;
  FFieldName := Trim(Tv1.Controller.FocusedColumn.DataBinding.FilterFieldName);
  with CDS_Main do
  begin
    Edit;
    FieldByName(FFieldName).Value := mvalue;
    Post;
  end;
  with ADOQueryTmp do
  begin

    Close;
    sql.Clear;

    sql.Add(' update BS_Cloth_IO set StkPosition=' + quotedstr(Trim(mvalue)));
    sql.Add(' where  bcioid=   ' + quotedstr(cds_main.FieldByName('bcioid').asstring));

    execsql;
  end;

  tv1.Controller.EditingController.ShowEdit();
end;

end.

