unit U_EquipmentCk;

interface

uses
  Windows, Messages, SysUtils, StrUtils, Variants, Classes, Graphics, Controls,
  Forms, Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, MMSystem,
  cxDataStorage, cxEdit, DB, cxDBData, cxGridCustomTableView, cxGridTableView,
  cxGridDBTableView, cxGridLevel, cxClasses, cxControls, cxGridCustomView,
  cxGrid, StdCtrls, ComCtrls, ExtCtrls, ToolWin, cxButtonEdit, cxDropDownEdit,
  DBClient, ADODB, cxGridCustomPopupMenu, cxGridPopupMenu, BtnEdit, cxContainer,
  cxTextEdit, cxCurrencyEdit, cxCheckBox, Menus, RM_Common, RM_Class, RM_e_Xls,
  RM_Dataset, RM_System, RM_GridReport, cxCalendar;

type
  TfrmEquipment = class(TForm)
    ToolBar1: TToolBar;
    TBSave: TToolButton;
    TBClose: TToolButton;
    ADOQueryCmd: TADOQuery;
    ADOQueryTmp: TADOQuery;
    DataSource1: TDataSource;
    CDS_Main: TClientDataSet;
    cxGridPopupMenu1: TcxGridPopupMenu;
    Panel3: TPanel;
    ADOQueryMain: TADOQuery;
    cxGrid1: TcxGrid;
    Tv1: TcxGridDBTableView;
    v1Qty: TcxGridDBColumn;
    v1Note: TcxGridDBColumn;
    cxGrid1Level1: TcxGridLevel;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    ADOQueryPrint: TADOQuery;
    RM1: TRMGridReport;
    RMDB_Main: TRMDBDataSet;
    RMXLSExport1: TRMXLSExport;
    v1Column4: TcxGridDBColumn;
    v1Column6: TcxGridDBColumn;
    v1Column7: TcxGridDBColumn;
    v1Column8: TcxGridDBColumn;
    v1Column9: TcxGridDBColumn;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    v1Column1: TcxGridDBColumn;
    procedure FormDestroy(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure TBSaveClick(Sender: TObject);
    procedure v1P_CodeNamePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
    procedure TBCloseClick(Sender: TObject);
    procedure v1QtyPropertiesEditValueChanged(Sender: TObject);
    procedure FHAddressBtnDnClick(Sender: TObject);
    procedure v1Column3PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
    procedure v1Column5PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure v1Column6PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
    procedure ToolButton3Click(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
  private
    procedure InitGrid();
    function savedate(): Boolean;
    function CheckData(): Boolean;
    { Private declarations }
  public
    fkeyNO: string;
    FType: integer;
    fCKName: string;
    { Public declarations }
  end;

var
  frmEquipment: TfrmEquipment;

implementation

uses
  U_DataLink, U_Fun10, U_ZDYHelp, U_EquipmentkCList, U_ZdyAttachment,
  U_ZDYHelpSel, U_ClothSCHZListSel, U_ZdyAttachGYS;
{$R *.dfm}

function TfrmEquipment.CheckData(): Boolean;
begin
  try

    if cds_main.Locate('CRType', '', []) then
      raise Exception.Create('出库类型不能为空！');
    if cds_main.Locate('CRType', NULL, []) then
      raise Exception.Create('出库类型不能为空！');

    if cds_main.Locate('CRType', '', []) then
      raise Exception.Create('出库类型不能为空！');
    if cds_main.Locate('CRType', NULL, []) then
      raise Exception.Create('出库类型不能为空！');

    if cds_main.Locate('ToFactoryName', NULL, []) then
      raise Exception.Create('出到工厂不能为空！');
    if cds_main.Locate('ToFactoryName', '', []) then
      raise Exception.Create('出到工厂不能为空！');

    if cds_main.Locate('Rollnum', NULL, []) then
      raise Exception.Create('数量不能为空！');
    if cds_main.Locate('Rollnum', 0, []) then
      raise Exception.Create('数量不能为0！');

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

function TfrmEquipment.savedate(): Boolean;
var
  MaxNo: string;
begin
  result := false;
  try
    ADOQueryCmd.Connection.BeginTrans;
    CDS_Main.DisableControls;
    CDS_Main.First;
    with CDS_Main do
    begin
      while not eof do
      begin
        with ADOQueryCmd do
        begin
          close;
          sql.Clear;
          sql.Add('select * from CK_Equipment_CR');
          sql.Add('where CRNO=' + quotedstr(Trim(CDS_Main.FieldByName('CRNO').AsString)));
          open;
        end;
        if ADOQueryCmd.IsEmpty then
        begin
          if GetLSNo(ADOQueryTmp, MaxNo, 'WC', 'CK_Equipment_CR', 3, 1) = False then
          begin
            ADOQueryCmd.Connection.RollbackTrans;
            Application.MessageBox('取最大号失败!', '提示', 0);
            Exit;
          end;
          ADOQueryCmd.Append;
          ADOQueryCmd.FieldByName('Filler').Value := trim(DName);
          ADOQueryCmd.FieldByName('FillTime').Value := dateTimetostr(SGetServerDateTime(adoqueryTmp));
        end
        else
        begin
          MaxNo := Trim(CDS_Main.FieldByName('CRNO').AsString);
          ADOQueryCmd.Edit;
          ADOQueryCmd.FieldByName('editer').Value := trim(dName);
          ADOQueryCmd.FieldByName('editTime').Value := SGetServerDateTime(adoqueryTmp);
        end;

        ADOQueryCmd.FieldByName('InoutNo').Value := trim(MaxNo);
        ADOQueryCmd.FieldByName('CRNO').Value := trim(MaxNo);
        ADOQueryCmd.FieldByName('CKName').Value := '设备';
        ADOQueryCmd.FieldByName('CRFlag').Value := '出库';
        ADOQueryCmd.FieldByName('CRQtyFlag').Value := -1;

         //保存明细
        RTSetSaveDataCDS(ADOQueryCmd, Tv1, CDS_Main, 'CK_Equipment_CR', 0);

         //保存隐藏ID
        ADOQueryCmd.FieldByName('qty').Value := 0;
        ADOQueryCmd.FieldByName('FromOrderNo').Value := trim(fieldbyname('FromOrderNo').AsString);
        ADOQueryCmd.FieldByName('FrommainID').Value := trim(fieldbyname('FrommainID').AsString);
        ADOQueryCmd.FieldByName('FromsubID').Value := trim(fieldbyname('FromsubID').AsString);
        ADOQueryCmd.FieldByName('TomainID').Value := trim(fieldbyname('TomainID').AsString);
        ADOQueryCmd.FieldByName('TosubID').Value := trim(fieldbyname('TosubID').AsString);

        ADOQueryCmd.Post;

        //更新库存
        with ADOQueryCmd do
        begin
          Close;
          SQL.Clear;
          SQL.Add('exec P_Up_Equipment ' + quotedstr(trim(MaxNo)));
          Open;
        end;

        if Trim(ADOQueryCmd.FieldByName('Msg').AsString) = '操作失败' then
        begin
          CDS_Main.EnableControls;
          ADOQueryCmd.Connection.RollbackTrans;
          Application.MessageBox('入库数量少于出库数量!', '提示', 0);
          Exit;
        end;

        Edit;
        FieldByName('InoutNo').Value := trim(MaxNo);
        FieldByName('CRNO').Value := trim(MaxNo);
        post;
        next;
      end;
    end;
    CDS_Main.EnableControls;
    ADOQueryCmd.Connection.CommitTrans;
    result := true;
  except
    CDS_Main.EnableControls;
    ADOQueryCmd.Connection.RollbackTrans;
  end;
end;

procedure TfrmEquipment.InitGrid();
begin
  try
    with adoqueryMain do
    begin
      close;
      sql.Clear;
      sql.Add('select A.* from CK_WarpRoller_CR A');
      sql.Add('where A.CRNO=' + quotedstr(trim(fkeyNO)));
      open;
    end;
    SCreateCDS20(adoqueryMain, CDS_Main);
    SInitCDSData20(adoqueryMain, CDS_Main);
    if not CDS_Main.IsEmpty then
    begin

    end;
  finally
  end;
end;

procedure TfrmEquipment.FormDestroy(Sender: TObject);
begin
  frmEquipment := nil;
end;

procedure TfrmEquipment.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := cahide;
end;

procedure TfrmEquipment.FormShow(Sender: TObject);
var
  fbhType, fInoutNo: string;
begin
  readCxGrid(self.Caption, Tv1, '仓储管理');
  InitGrid();

end;

procedure TfrmEquipment.TBSaveClick(Sender: TObject);
begin
  if cds_main.IsEmpty then
    exit;

  if CheckData() = false then
    exit;

  if savedate() then
  begin
    application.MessageBox('数据保存成功！', '提示信息');
  end
  else
  begin
    application.MessageBox('数据保存失败！', '提示信息', MB_ICONERROR);
  end;
end;

procedure TfrmEquipment.v1P_CodeNamePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
  try
    frmZDYHelp := TfrmZDYHelp.Create(Application);
    with frmZDYHelp do
    begin
      flag := 'Cloth';
      flagname := '坯布名称';
      if ShowModal = 1 then
      begin
        Self.CDS_Main.Edit;
        Self.CDS_Main.FieldByName('P_CodeName').Value := Trim(ClientDataSet1.fieldbyname('ZDYName').AsString);
        Self.CDS_Main.FieldByName('P_Code').Value := Trim(ClientDataSet1.fieldbyname('ZDYNo').AsString);
      end;
    end;
  finally
    frmZDYHelp.Free;
  end;
end;

procedure TfrmEquipment.TBCloseClick(Sender: TObject);
begin
  writeCxGrid(self.Caption, Tv1, '仓储管理');
  close;
end;

procedure TfrmEquipment.v1QtyPropertiesEditValueChanged(Sender: TObject);
var
  mvalue, FFieldName: string;
begin
  mvalue := TcxTextEdit(Sender).EditingText;
  if Trim(mvalue) = '' then
  begin
    mvalue := '0';
  end;
  FFieldName := Trim(Tv1.Controller.FocusedColumn.DataBinding.FilterFieldName);
  with CDS_Main do
  begin
    Edit;
    FieldByName(FFieldName).Value := Trim(mvalue);
    FieldbyName('Money').Value := format('%.2f', [FieldByName('Qty').AsFloat * FieldByName('Price').AsFloat]);
    Post;
  end;
  tv1.Controller.EditingController.ShowEdit();
end;

procedure TfrmEquipment.FHAddressBtnDnClick(Sender: TObject);
begin
  TBtnEditC(Sender).Text := '';
  TBtnEditC(Sender).TxtCode := '';
end;

procedure TfrmEquipment.v1Column3PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
  frmClothSCHZListSel := TfrmClothSCHZListSel.Create(Application);
  with frmClothSCHZListSel do
  begin
    if showmodal = 1 then
    begin
      CDS_Main.Edit;
      CDS_Main.fieldbyname('ToOrderNo').Value := trim(Order_Main.fieldbyname('OrderNo').AsString);
      CDS_Main.fieldbyname('ToMainID').Value := trim(Order_Main.fieldbyname('MainID').AsString);
      CDS_Main.fieldbyname('TosubID').Value := trim(Order_Main.fieldbyname('subID').AsString);
      CDS_Main.Post;
    end;
    free;
  end;
  tv1.Controller.EditingController.ShowEdit();
end;

procedure TfrmEquipment.v1Column5PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
  try
    frmZDYHelp := TfrmZDYHelp.Create(Application);
    with frmZDYHelp do
    begin
      flag := 'MLType';
      flagname := '面料类型';
      if ShowModal = 1 then
      begin
        CDS_Main.Edit;
        CDS_Main.FieldByName('P_Type').Value := Trim(ClientDataSet1.fieldbyname('zdyName').AsString);
        CDS_Main.Post;
      end;
    end;
  finally
    frmZDYHelp.Free;
  end;
  tv1.Controller.EditingController.ShowEdit();
end;

procedure TfrmEquipment.N1Click(Sender: TObject);
begin
  SelOKNo(CDS_Main, True);
end;

procedure TfrmEquipment.N2Click(Sender: TObject);
begin
  SelOKNo(CDS_Main, False);
end;

procedure TfrmEquipment.v1Column6PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
  try
    frmZdyAttachGYS := TfrmZdyAttachGYS.Create(Application);
    with frmZdyAttachGYS do
    begin
      if ShowModal = 1 then
      begin
        CDS_Main.Edit;
        CDS_Main.fieldbyname('ToFactoryName').Value := Trim(CDS_HZ.fieldbyname('CoName').AsString);
        CDS_Main.Post;

      end;
    end;
  finally
    frmZdyAttachGYS.Free;
  end;
  tv1.Controller.EditingController.ShowEdit();
end;

procedure TfrmEquipment.ToolButton3Click(Sender: TObject);
var
  FMJID: string;
begin
  frmEquipmentkCList := TfrmEquipmentkCList.create(self);
  with frmEquipmentkCList do
  begin
    canshu1 := '选择';
    if showmodal = 1 then
    begin
      cds_main.DisableControls;
      cds_main.First;
      while not cds_main.Eof do
      begin
        if (cds_main.fieldbyname('ssel').AsBoolean) and (not self.cds_main.Locate('FactoryName', trim(cds_main.fieldbyname('FactoryName').AsString), [])) then
        begin
          self.cds_main.Append;
          self.cds_main.fieldbyname('FactoryName').Value := trim(cds_main.fieldbyname('FactoryName').AsString);
          self.cds_main.fieldbyname('P_CodeName').Value := trim(cds_main.fieldbyname('P_CodeName').AsString);
          self.cds_main.FieldByName('RollNum').Value := cds_main.fieldbyname('KCPS').AsFloat;
          self.cds_main.Post;
        end;
        cds_main.Next;
      end;
      cds_main.EnableControls;
    end;
    free;
  end;
end;

procedure TfrmEquipment.ToolButton4Click(Sender: TObject);
begin
  if CDS_Main.IsEmpty then
    exit;
  if Trim(CDS_Main.FieldByName('CRNO').AsString) = '' then
  begin
    CDS_Main.Delete;
  end
  else
  begin
    ADOQueryCmd.Connection.BeginTrans;
    with ADOQueryCmd do
    begin
      Close;
      SQL.Clear;
      sql.Add('update CK_Equipment_CR set Valid=''N''  where CRNO=' + quotedstr(Trim(CDS_Main.FieldByName('CRNO').AsString)));
      ExecSQL;
    end;
    with ADOQueryCmd do
    begin
      Close;
      SQL.Clear;
      SQL.Add('exec P_Up_Equipment ' + quotedstr(Trim(CDS_Main.FieldByName('CRNO').AsString)));
      Open;
    end;
    if Trim(ADOQueryCmd.FieldByName('Msg').AsString) = '操作失败' then
    begin
      CDS_Main.EnableControls;
      ADOQueryCmd.Connection.RollbackTrans;
      Application.MessageBox('出库数量超出库存数量!', '提示', 0);
      Exit;
    end;
    ADOQueryCmd.Connection.CommitTrans;
    CDS_Main.Delete;
  end;
end;

end.

