unit U_WarpRollerRk;

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, cxTextEdit, BtnEdit,
  cxCheckBox, cxLookAndFeels, cxLookAndFeelPainters, cxNavigator;

type
  TfrmWarpRollerRk = class(TForm)
    ToolBar1: TToolBar;
    TBSave: TToolButton;
    TBClose: TToolButton;
    Panel1: TPanel;
    Label1: TLabel;
    CRTime: TDateTimePicker;
    Label2: TLabel;
    CRType: TComboBox;
    cxGrid1: TcxGrid;
    Tv1: TcxGridDBTableView;
    v1P_CodeName: TcxGridDBColumn;
    v1Note: TcxGridDBColumn;
    cxGrid1Level1: TcxGridLevel;
    ADOQueryCmd: TADOQuery;
    ADOQueryTmp: TADOQuery;
    DataSource1: TDataSource;
    CDS_Main: TClientDataSet;
    ToolBar2: TToolBar;
    ToolButton2: TToolButton;
    cxGridPopupMenu1: TcxGridPopupMenu;
    v1P_Code: TcxGridDBColumn;
    JZRKNo: TEdit;
    Label8: TLabel;
    Label6: TLabel;
    v1Column2: TcxGridDBColumn;
    Label9: TLabel;
    FactoryName: TBtnEditA;
    Label3: TLabel;
    fromFactoryName: TBtnEditA;
    btn1: TToolButton;
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure TBSaveClick(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure TBCloseClick(Sender: TObject);
    procedure v1P_ColorPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
    procedure v1P_CodePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
    procedure v1P_ColorPropertiesEditValueChanged(Sender: TObject);
    procedure v1QtyPropertiesEditValueChanged(Sender: TObject);
    procedure v1Column2PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
    procedure v1Column8PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
    procedure FactoryNameBtnClick(Sender: TObject);
    procedure Tv1CustomDrawIndicatorCell(Sender: TcxGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean);
    procedure v1Column1PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
    procedure fromFactoryNameBtnClick(Sender: TObject);
    procedure btn1Click(Sender: TObject);
  private
    procedure InitGrid();
    function savedate(): Boolean;
    function CheckData(): Boolean;
    { Private declarations }
  public
    fkeyNO: string;
    FType: integer;

    { Public declarations }
  end;

var
  frmWarpRollerRk: TfrmWarpRollerRk;

implementation

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

function TfrmWarpRollerRk.CheckData(): Boolean;
begin
  try
    if Trim(CRType.Text) = '' then
      raise Exception.Create('入库类型不能为空！');
//    if Trim(fromFactoryName.Text) = '' then
//      raise Exception.Create('来自工厂不能为空！');
    if Trim(FactoryName.Text) = '' then
      raise Exception.Create('存放工厂不能为空！');
    if cds_main.IsEmpty then
      raise Exception.Create('产品信息不能为空！');
    if cds_main.Locate('WBCode', NULL, []) then
      raise Exception.Create('经轴编号不能为空！');
    if cds_main.Locate('WBCode', '', []) then
      raise Exception.Create('经轴编号不能为空！');

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

function TfrmWarpRollerRk.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_WarpBeam_CR');
          sql.Add('where JZRKID=' + quotedstr(Trim(CDS_Main.FieldByName('JZRKID').AsString)));
          open;
        end;
        if ADOQueryCmd.IsEmpty then
        begin
          if GetLSNo(ADOQueryTmp, MaxNo, 'ZJR', 'CK_WarpBeam_CR', 4, 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('JZRKID').AsString);
          ADOQueryCmd.Edit;
          ADOQueryCmd.FieldByName('editer').Value := trim(dName);
          ADOQueryCmd.FieldByName('editTime').Value := SGetServerDateTime(adoqueryTmp);
        end;

        //保存主表
        ADOQueryCmd.FieldByName('JZRKNo').Value := trim(JZRKNo.Text);
        ADOQueryCmd.FieldByName('FactoryName').Value := trim(FactoryName.Text);
        ADOQueryCmd.FieldByName('fromFactoryName').Value := trim(fromFactoryName.Text);
        ADOQueryCmd.FieldByName('JZRKID').Value := trim(MaxNo);
        ADOQueryCmd.FieldByName('CRTime').Value := formatdateTime('yyyy-MM-dd', CRTIme.Date);
        ADOQueryCmd.FieldByName('CRType').Value := trim(CRType.Text);
        ADOQueryCmd.FieldByName('KCID').Value := trim(MaxNo);
        ADOQueryCmd.FieldByName('CRFlag').Value := '入库';
        ADOQueryCmd.FieldByName('CRQtyFlag').Value := 1;

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

        ADOQueryCmd.Post;

//        判断库存
//        with ADOQueryCmd do
//        with ADOQueryCmd do
//        begin
//          Close;
//          SQL.Clear;
//          SQL.Add('exec P_Up_WarpRoller ' + quotedstr(trim(CDS_Main.fieldbyname('KCID').AsString)));
//          Open;
//        end;
//        if Trim(ADOQueryCmd.FieldByName('Msg').AsString) = '操作失败' then
//        begin
//          CDS_Main.EnableControls;
//          ADOQueryCmd.Connection.RollbackTrans;
//          Application.MessageBox('入库数量少于出库数量!', '提示', 0);
//          Exit;
//        end;

        CDS_Main.Edit;
        CDS_Main.FieldByName('JZRKID').Value := Trim(MaxNo);
        CDS_Main.Post;
        Next;
      end;
    end;
    CDS_Main.EnableControls;
    ADOQueryCmd.Connection.CommitTrans;
    result := true;
  except
    CDS_Main.EnableControls;
    ADOQueryCmd.Connection.RollbackTrans;
  end;
end;

procedure TfrmWarpRollerRk.InitGrid();
var
  i: Integer;
begin
  try
    with adoqueryTmp do
    begin
      close;
      sql.Clear;
      sql.Add('select A.* ');
      SQL.Add(' from CK_WarpBeam_CR A');
      if fType = 1 then
      begin
        sql.Add('where  A.JZRKID ' + trim(fkeyNO));
      end
      else
        sql.Add('where  A.JZRKID =' + QuotedStr(Trim(fkeyNO)));
      open;
    end;
    SCreateCDS20(adoqueryTmp, CDS_Main);
    SInitCDSData20(adoqueryTmp, CDS_Main);
    if not CDS_Main.IsEmpty then
    begin
      CRTime.Date := CDS_Main.fieldbyname('CRTime').AsDateTime;
      CRType.ItemIndex := CRType.Items.IndexOf(trim(CDS_Main.fieldbyname('CRType').AsString));
      JZRKNo.Text := CDS_Main.fieldbyname('JZRKNo').asstring;
      FactoryName.Text := trim(CDS_Main.fieldbyname('FactoryName').AsString);
      fromFactoryName.Text := trim(CDS_Main.fieldbyname('fromFactoryName').AsString);
    end;
  finally
  end;
end;

procedure TfrmWarpRollerRk.FormDestroy(Sender: TObject);
begin
  frmWarpRollerRk := nil;
end;

procedure TfrmWarpRollerRk.FormCreate(Sender: TObject);
begin
  CRTime.Date := SGetServerDate10(ADOQueryTmp);
end;

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

procedure TfrmWarpRollerRk.FormShow(Sender: TObject);
begin
  readCxGrid(trim(self.Caption), Tv1, '仓储管理');
  InitGrid();
  if fType = 0 then
  begin
    if GetLSNo(ADOQueryCmd, fkeyNo, 'RK', 'CK_WarpBeam_CR', 4, 1) = False then
    begin
      Application.MessageBox('取最大号失败!', '提示', 0);
      Exit;
    end;
    JZRKNo.Text := Trim(fkeyNo);
  end;
end;

procedure TfrmWarpRollerRk.TBSaveClick(Sender: TObject);
begin
  if CheckData() = false then
    exit;
  CRTime.SetFocus;

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

procedure TfrmWarpRollerRk.ToolButton2Click(Sender: TObject);
begin
  if CDS_Main.IsEmpty then
    exit;
  if Trim(CDS_Main.FieldByName('JZRKID').AsString) = '' then
  begin
    CDS_Main.Delete;
  end
  else
  begin
    ADOQueryCmd.Connection.BeginTrans;
    with ADOQueryCmd do
    begin
      Close;
      SQL.Clear;
      sql.Add('update CK_WarpBeam_CR set Valid=''N'' where JZRKID=' + quotedstr(Trim(CDS_Main.FieldByName('JZRKID').AsString)));
      ExecSQL;
    end;
//    with ADOQueryCmd do
//    begin
//      Close;
//      SQL.Clear;
//      SQL.Add('exec P_Up_WarpRoller ' + quotedstr(Trim(CDS_Main.FieldByName('KCID').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;

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

procedure TfrmWarpRollerRk.v1P_ColorPropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
  try
    frmZDYHelp := TfrmZDYHelp.Create(Application);
    with frmZDYHelp do
    begin
      flag := 'OrdColor';
      flagname := '颜色';
      V1Name.Caption := '中文名称';
      V1Note.Caption := '英文名称';
      MainType := Trim(DName);
      fnote := True;
      if ShowModal = 1 then
      begin
        Self.CDS_Main.Edit;
        Self.CDS_Main.FieldByName('P_Color').Value := Trim(ClientDataSet1.fieldbyname('ZDYName').AsString);
        Self.CDS_Main.Post;
      end;
    end;
  finally
    frmZDYHelp.Free;
  end;
  self.tv1.Controller.EditingController.ShowEdit();
end;

procedure TfrmWarpRollerRk.v1P_CodePropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
var
  FKuWei: string;
begin
//  try
//    frmZdyAttachCP20:=TfrmZdyAttachCP20.Create(Application);
//    with frmZdyAttachCP20 do
//    begin
//      CKType.Text:='面料';
//      if ShowModal=1 then
//      begin
//        Self.CDS_Main.Edit;
////        Self.CDS_Main.FieldByName('WLType').Value:=Trim(CDS_HZ.fieldbyname('WLType').AsString);
//        Self.CDS_Main.FieldByName('P_Code').Value:=Trim(CDS_HZ.fieldbyname('ZdyCode').AsString);
//        Self.CDS_Main.FieldByName('P_CodeName').Value:=Trim(CDS_HZ.fieldbyname('ZdyName').AsString);
//        Self.CDS_Main.FieldByName('P_SPEC').Value:=Trim(CDS_HZ.fieldbyname('DEFstr1').AsString);
////        Self.CDS_Main.FieldByName('P_Color').Value:=Trim(CDS_HZ.fieldbyname('DEFstr1').AsString);
//        Self.CDS_Main.FieldByName('P_MF').Value:=Trim(CDS_HZ.fieldbyname('DEFstr7').AsString);
//        Self.CDS_Main.FieldByName('P_KZ').Value:=Trim(CDS_HZ.fieldbyname('DEFstr8').AsString);
//        Self.CDS_Main.FieldByName('qtyUnit').Value:=Trim(CDS_HZ.fieldbyname('DEFstr4').AsString);
//      end;
//    end;
//  finally
//    frmZdyAttachCP20.Free;
//  end;
//  self.tv1.Controller.EditingController.ShowEdit();
end;

procedure TfrmWarpRollerRk.v1P_ColorPropertiesEditValueChanged(Sender: TObject);
var
  mvalue: string;
begin
 { mvalue:=TcxTextEdit(Sender).EditingText;

  IF trim(mvalue)='' then exit;

  IF rightBstr(trim(mvalue),1)<>'#'THEN
  BEGIn
    mvalue:=trim(mvalue)+'#';
  END;



  with CDS_Main do
  begin
    Edit;
    FieldByName('P_Color').Value:=Trim(mvalue);
    Post;
  end;
  self.tv1.Controller.EditingController.ShowEdit();  }
end;

procedure TfrmWarpRollerRk.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 TfrmWarpRollerRk.v1Column2PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
  frmWarpBeamManageList := TfrmWarpBeamManageList.Create(Application);
  with frmWarpBeamManageList do
  begin
    if showmodal = 1 then
    begin
      CDS_Main.Edit;
      CDS_Main.fieldbyname('WBId').Value := trim(CDS_HZ.fieldbyname('WBId').AsString);
      CDS_Main.fieldbyname('WBCode').Value := trim(CDS_HZ.fieldbyname('WBCode').AsString);
      CDS_Main.fieldbyname('WBName').Value := trim(CDS_HZ.fieldbyname('WBName').AsString);
      CDS_Main.Post;
    end;
    free;
  end;
  tv1.Controller.EditingController.ShowEdit();
end;

procedure TfrmWarpRollerRk.v1Column8PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
  try
    frmZDYHelp := TfrmZDYHelp.Create(Application);
    with frmZDYHelp do
    begin
      flag := 'CPProperty';
      flagname := '面料属性';
      if ShowModal = 1 then
      begin
        Self.CDS_Main.Edit;
        Self.CDS_Main.FieldByName('CPProperty').Value := Trim(ClientDataSet1.fieldbyname('ZDYName').AsString);

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

procedure TfrmWarpRollerRk.FactoryNameBtnClick(Sender: TObject);
begin
  try
    frmZdyAttachGYS := TfrmZdyAttachGYS.Create(Application);
    with frmZdyAttachGYS do
    begin
      if ShowModal = 1 then
      begin
        FactoryName.Text := Trim(CDS_HZ.fieldbyname('CoName').AsString);
      end;
    end;
  finally
    frmZdyAttachGYS.Free;
  end;
end;

procedure TfrmWarpRollerRk.Tv1CustomDrawIndicatorCell(Sender: TcxGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean);
var
  FValue: string;
  FBounds: TRect;
begin
  if (AViewInfo is TcxGridIndicatorRowItemViewInfo) then
  begin
    FValue := IntToStr(TcxGridIndicatorRowItemViewInfo(AViewInfo).GridRecord.Index + 1);
    FBounds := AViewInfo.Bounds;
    ACanvas.FillRect(FBounds);
    ACanvas.DrawComplexFrame(FBounds, clBtnHighlight, clBtnShadow, [bBottom, bLeft, bRight], 1);
    InflateRect(FBounds, -1, -1);
    ACanvas.Font.Color := clBlack;
    ACanvas.Brush.Style := bsClear;
    ACanvas.DrawText(FValue, FBounds, cxAlignCenter or cxAlignTop);
    ADone := True;
  end;
end;

procedure TfrmWarpRollerRk.v1Column1PropertiesButtonClick(Sender: TObject; AButtonIndex: Integer);
begin
  try
    frmZDYHelp := TfrmZDYHelp.Create(Application);
    with frmZDYHelp do
    begin
      flag := 'kuwei';
      flagname := '库位';

      if ShowModal = 1 then
      begin
        Self.CDS_Main.Edit;
        Self.CDS_Main.FieldByName('kuwei').Value := Trim(ClientDataSet1.fieldbyname('ZDYName').AsString);
        Self.CDS_Main.Post;
      end;
    end;
  finally
    frmZDYHelp.Free;
  end;
  self.tv1.Controller.EditingController.ShowEdit();
end;

procedure TfrmWarpRollerRk.fromFactoryNameBtnClick(Sender: TObject);
begin
  try
    frmZdyAttachGYS := TfrmZdyAttachGYS.Create(Application);
    with frmZdyAttachGYS do
    begin
      if ShowModal = 1 then
      begin
        fromFactoryName.Text := Trim(CDS_HZ.fieldbyname('Name').AsString);
      end;
    end;
  finally
    frmZdyAttachGYS.Free;
  end;
end;

procedure TfrmWarpRollerRk.btn1Click(Sender: TObject);
var
  MaxNo: string;
begin
  frmWarpBeamManageList := TfrmWarpBeamManageList.Create(Application);
  with frmWarpBeamManageList do
  begin
    if showmodal = 1 then
    begin
      while frmWarpBeamManageList.CDS_HZ.Locate('SSel', True, []) do
      begin

        with Self.CDS_Main do
        begin
          append;
          fieldbyname('WBId').Value := trim(CDS_HZ.fieldbyname('WBId').AsString);
          fieldbyname('WBCode').Value := trim(CDS_HZ.fieldbyname('WBCode').AsString);
          fieldbyname('WBName').Value := trim(CDS_HZ.fieldbyname('WBName').AsString);
          fieldbyname('Note').Value := '';

          Post;
        end;
        frmWarpBeamManageList.CDS_HZ.Delete;
      end;
    end;
    free;
  end;
  tv1.Controller.EditingController.ShowEdit();
end;

end.

