unit U_KnitCardInPut;

interface

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

type
  TfrmKnitCardInPut = class(TfrmBaseInput)
    GPM_1: TcxGridPopupMenu;
    ADOQueryCmd: TADOQuery;
    ADOQueryMain: TADOQuery;
    ADOQueryTemp: TADOQuery;
    DS_1: TDataSource;
    CDS_1: TClientDataSet;
    DS_2: TDataSource;
    CDS_2: TClientDataSet;
    GPM_2: TcxGridPopupMenu;
    Panel4: TPanel;
    PM_1: TPopupMenu;
    PM_2: TPopupMenu;
    Panel5: TPanel;
    Panel2: TPanel;
    Label10: TLabel;
    Label11: TLabel;
    Button3: TButton;
    edtMachNo: TEdit;
    edtCardQty: TEdit;
    Repairer: TBtnEditC;
    Panel1: TPanel;
    cxStyleRepository1: TcxStyleRepository;
    cxStyle1: TcxStyle;
    cxGrid1: TcxGrid;
    Tv1: TcxGridDBTableView;
    cxGrid1Level1: TcxGridLevel;
    cxGrid2: TcxGrid;
    TV2: TcxGridDBTableView;
    TV2Column1: TcxGridDBColumn;
    TV2Column2: TcxGridDBColumn;
    TV2Column3: TcxGridDBColumn;
    TV2Column4: TcxGridDBColumn;
    TV2Column5: TcxGridDBColumn;
    TV2Column6: TcxGridDBColumn;
    cxGridLevel1: TcxGridLevel;
    Label3: TLabel;
    MCNO: TEdit;
    ToolBar1: TToolBar;
    ToolButton12: TToolButton;
    TBClose: TToolButton;
    Label7: TLabel;
    BatchNo: TEdit;
    TV2Column7: TcxGridDBColumn;
    Panel3: TPanel;
    Label1: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label21: TLabel;
    edtName: TEdit;
    edtCode: TEdit;
    edtConNo: TEdit;
    edtWAPPS: TEdit;
    Label8: TLabel;
    Label9: TLabel;
    edtYAPPS: TEdit;
    Tv1Column1: TcxGridDBColumn;
    Tv1Column2: TcxGridDBColumn;
    Label4: TLabel;
    isDY: TComboBox;
    Tv1Column3: TcxGridDBColumn;
    Tv1Column4: TcxGridDBColumn;
    Button1: TButton;
    TV2Column8: TcxGridDBColumn;
    lbl1: TLabel;
    JHSL: TEdit;
    cxgrdbclmnTV2Column9: TcxGridDBColumn;
    Tv1Column5: TcxGridDBColumn;
    Tv1Column6: TcxGridDBColumn;
    procedure FormDestroy(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TBCloseClick(Sender: TObject);
    procedure TBFindClick(Sender: TObject);
    procedure TBRafreshClick(Sender: TObject);
    procedure MCNOChange(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure cxTabControl1Change(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Tv1DblClick(Sender: TObject);
    procedure ToolButton12Click(Sender: TObject);
    procedure Tv1CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
    procedure RepairerBtnDnClick(Sender: TObject);
    procedure RepairerBtnUpClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    procedure InitOrd();
    procedure InitGrid1();
    procedure InitGrid2();
    { Private declarations }
  public
    FMainId, FSubId: string;
    { Public declarations }
  end;

var
  frmKnitCardInPut: TfrmKnitCardInPut;

implementation

uses
  U_DataLink, U_RTFun, U_ZDYHelp, U_LabelPrint;
  {$R *.dfm}

procedure TfrmKnitCardInPut.InitOrd();
begin

  with ADOQueryTemp do
  begin
    Close;
    sql.Clear;
    sql.Add(' select A.*,B.*');
    sql.Add(' ,YAPPS=ISNULL((select count(*) from Knit_Plan_Card X where X.MainId=A.MainId and X.Status <> ''-1'' ),0)');
    sql.Add(' ,WAPPS=OrdPiece-ISNULL((select count(*) from Knit_Plan_Card X where X.MainId=A.MainId and X.Status <> ''-1''),0)');
    sql.Add(' from knit_Plan_Main A');
    sql.Add(' inner join knit_Plan_Sub B on A.MainId=B.MainId ');
    sql.Add(' where B.SubId=' + QuotedStr(FSubId));
    Open;
  end;
  edtConNo.Text := ADOQueryTemp.FieldByName('OrderNo').AsString;
  edtCode.Text := ADOQueryTemp.FieldByName('C_Code').AsString;
  edtName.Text := ADOQueryTemp.FieldByName('C_Name').AsString;
  edtYAPPS.Text := ADOQueryTemp.FieldByName('YAPPS').AsString;
  edtWAPPS.Text := ADOQueryTemp.FieldByName('WAPPS').AsString;
end;

procedure TfrmKnitCardInPut.RepairerBtnDnClick(Sender: TObject);
begin
  Repairer.Text := '';
end;

procedure TfrmKnitCardInPut.RepairerBtnUpClick(Sender: TObject);
begin
  try
    frmZDYHelp := TfrmZDYHelp.Create(Application);
    with frmZDYHelp do
    begin
      flag := 'Repairer';
      flagname := '���޹�';
      if ShowModal = 1 then
      begin
        Repairer.Text := Trim(ClientDataSet1.fieldbyname('ZDYName').AsString);
      end;
    end;
  finally
    frmZDYHelp.Free;
  end;
end;

procedure TfrmKnitCardInPut.InitGrid1();
var
  fwhere: string;
begin
  try
    ADOQueryMain.DisableControls;
    with ADOQueryMain do
    begin
      Close;
      sql.Clear;
      sql.Add(' select * ');

      sql.Add(' ,ZWXJPS=(select count(*) from Knit_Plan_Card X where X.CarNo =AA.MCNO and   ISNULL(X.IsOffMachine,'''') = '''') ');
      sql.Add(' ,BWXJPS=(select count(*) from Knit_Plan_Card X where X.CarNo =AA.MCNO and ISNULL(X.IsOffMachine,'''') = '''' and MainID=''' + trim(FMainID) + ''')');

      sql.Add(' ,ZWJYPS=(select count(*) from Knit_Plan_Card X where X.CarNo =AA.MCNO and isnull(Status,''0'')=''0'') ');
      sql.Add(' ,BWJYPS=(select count(*) from Knit_Plan_Card X where X.CarNo =AA.MCNO and isnull(Status,''0'')=''0'' and MainID=''' + trim(FMainID) + ''')');
      sql.Add(' from (select A.MCNO,ISAP=''0'' from BS_Machine A where EXISTS (select CarNo from Knit_Plan_Card X where X.CarNo = A.MCNO and X.Status <> ''-1'' and X.MainID=''' + trim(FMainID) + ''')');
      sql.Add(' UNION   ');
      sql.Add(' select A.MCNO,ISAP=''1'' from BS_Machine A where not EXISTS (select CarNo from Knit_Plan_Card X where X.CarNo = A.MCNO and X.Status <> ''-1'' and X.MainID=''' + trim(FMainID) + ''')');
      sql.Add(' ) AA Order BY ISAP,MCNO');

      Open;
    end;
    SCreateCDS(ADOQueryMain, CDS_1);
    SInitCDSData(ADOQueryMain, CDS_1);
  finally
    ADOQueryMain.EnableControls;
  end;
end;

procedure TfrmKnitCardInPut.InitGrid2();
begin
  with ADOQueryTemp do
  begin
    Close;
    sql.Clear;
    sql.Add(' select JHSL,COUNT(*) AS APPS,CarNo,isnull(JXPerson,'''') AS JXPerson,isnull(BatchNo,'''') AS BatchNo ');
    sql.Add(',APDate=(select top 1 CONVERT(VARCHAR(10),X.APDate,120) from Knit_Plan_Card X where X.CarNo=A.CarNo and X.Status <> ''-1''  ');
    sql.Add(' and isnull(X.JXPerson,'''') = isnull(A.JXPerson,'''') and isnull(X.BatchNo,'''') = isnull(A.BatchNo,'''') and X.MainID=''' + trim(FMainId) + '''ORDER BY APDate)');
    sql.Add(' ,DYPS=(select count(*) from Knit_Plan_Card X where X.CarNo=A.CarNo and PrtCount > 0 and X.Status <> ''-1''  and X.MainID=''' + trim(FMainId) + '''');
    sql.Add(' and isnull(X.JXPerson,'''') = isnull(A.JXPerson,'''') and isnull(X.BatchNo,'''') = isnull(A.BatchNo,'''') )');
    sql.Add(' ,JYPS=(select count(*) from Knit_Plan_Card X where X.CarNo=A.CarNo and isnull(X.Status,''0'') = ''1'' and X.MainID=''' + trim(FMainId) + '''');
    sql.Add(' and isnull(X.JXPerson,'''') = isnull(A.JXPerson,'''') and isnull(X.BatchNo,'''') = isnull(A.BatchNo,'''') )');
    sql.Add(' ,XJPS=(select count(*) from Knit_Plan_Card X where X.CarNo=A.CarNo and X.IsOffMachine = ''��'' and X.Status <> ''-1''  and X.MainID=''' + trim(FMainId) + '''');
    sql.Add(' and isnull(X.JXPerson,'''') = isnull(A.JXPerson,'''') and isnull(X.BatchNo,'''') = isnull(A.BatchNo,'''') )');
    sql.Add(' from Knit_Plan_Card A where MainId =''' + trim(FMainId) + '''');
    sql.Add(' and A.Status <> ''-1'' GROUP BY CarNo,JHSL,isnull(JXPerson,''''),isnull(BatchNo,'''') ');
    //ShowMessage(sql.text);
    Open;
  end;

  SCreateCDS(ADOQueryTemp, CDS_2);
  SInitCDSData(ADOQueryTemp, CDS_2);
end;

procedure TfrmKnitCardInPut.FormDestroy(Sender: TObject);
begin
  inherited;
  frmKnitCardInPut := nil;
end;

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

procedure TfrmKnitCardInPut.TBCloseClick(Sender: TObject);
begin
  Close;

end;

procedure TfrmKnitCardInPut.TBFindClick(Sender: TObject);
begin
  if ADOQueryMain.Active = False then
    Exit;
  SDofilter(ADOQueryMain, SGetFilters(Panel1, 1, 2));
  SCreateCDS(ADOQueryMain, CDS_1);
  SInitCDSData(ADOQueryMain, CDS_1);
end;

procedure TfrmKnitCardInPut.TBRafreshClick(Sender: TObject);
begin
  InitGrid1();
  InitGrid2();

end;

procedure TfrmKnitCardInPut.MCNOChange(Sender: TObject);
begin
  if ADOQueryMain.Active = False then
    Exit;
  SDofilter(ADOQueryMain, SGetFilters(Panel1, 1, 2));
  SCreateCDS(ADOQueryMain, CDS_1);
  SInitCDSData(ADOQueryMain, CDS_1);
end;

procedure TfrmKnitCardInPut.FormShow(Sender: TObject);
begin
  inherited;

  ReadCxGrid(trim(self.Caption) + 'Tv1', Tv1, 'ָʾ������');
  ReadCxGrid(trim(self.Caption) + 'Tv2', Tv2, 'ָʾ������');

  InitOrd();
  InitGrid1();
  InitGrid2();
end;

procedure TfrmKnitCardInPut.cxTabControl1Change(Sender: TObject);
begin
  InitGrid1();
end;

procedure TfrmKnitCardInPut.Button1Click(Sender: TObject);
begin
  edtMachNo.text := '';
end;

procedure TfrmKnitCardInPut.Button3Click(Sender: TObject);
var
  maxno, maxPCId, WSql: string;
  FStrs: TStringList;
  i, j, MPCNo: integer;
begin
  if edtMachNo.Text = '' then
    Exit;
  if StrToIntdef(edtCardQty.Text, 0) = 0 then
    Exit;
  try
    FStrs := TStringList.Create();
    ExtractStrings([';'], [' '], PChar(edtMachNo.Text), FStrs);
    ADOQueryCmd.Connection.BeginTrans;
//    with ADOQueryTemp do
//    begin
//      Close;
//      sql.Clear;
//      sql.Add(' select CardQty=OrdPiece-ISNULL((select sum(CardQty) from knit_Plan_Mach AA where AA.SubId=B.SubId),0)');
//      sql.Add(' from   knit_Plan_Sub B ');
//      sql.Add(' where B.SubId=' + QuotedStr(Trim(FSubId)));
//      Open;
//    end;

    ///////////////�ж��Ƿ񳬳�����//////////////////
    if FStrs.Count * StrToIntdef(edtCardQty.Text, 0) > StrToIntdef(edtWAPPS.text, 0) then
    begin
//      raise Exception.Create('������������!');
    end;
    ///////////////�ж��Ƿ񳬳�����//////////////////


    for i := 0 to FStrs.Count - 1 do
    begin

      with ADOQueryTemp do
      begin
        Close;
        sql.Clear;
        sql.Add('select PCNo=isnull(Max(PCNo),0)  ');
        sql.Add('from Knit_Plan_Card A ');
        sql.Add('where A.MainID=' + Quotedstr(Trim(FMainID)));
        sql.Add('and A.Status <> ''-1'' and A.Carno=' + Quotedstr(Trim(FStrs[i])));
        Open;
      end;
      if ADOQueryTemp.IsEmpty then
        MPCNo := 1
      else
        MPCNo := ADOQueryTemp.FieldByName('PCNo').AsInteger + 1;

//////////////////            ���벼Ʊ               //////////////////////

      with ADOQueryCmd do
      begin
        Close;
        sql.Clear;
        sql.Add(' insert into Knit_Plan_Card(MainId,SubId,CarNo,PCId,PCNo,APDate,Filler,BatchNo,JXPerson,JHSL) values');
        for j := 0 to StrToIntdef(edtCardQty.Text, 0) - 1 do
        begin
          if GetLSNo(ADOQueryTemp, maxPCId, 'PC', 'knit_Plan_Mach', 4, 1) = False then
          begin
            raise Exception.Create('ȡ��Ʊ��ˮ��ʧ��!');
          end;
          if j > 0 then
            sql.Add(',');
          sql.Add(' (' + Quotedstr(Trim(FMainId)));
          sql.Add(',' + Quotedstr(Trim(FSubId)));
          sql.Add(',' + Quotedstr(Trim(FStrs[i])));
          sql.Add(',' + Quotedstr(maxPCId));
          sql.Add(',' + Quotedstr(IntToStr(MPCNo)));
          sql.Add(',getdate() ');
          sql.Add(',' + Quotedstr(Trim(DName)));
          sql.Add(',' + Quotedstr(Trim(BatchNo.Text)));
          sql.Add(',' + Quotedstr(Trim(Repairer.Text)));
          sql.Add(',' + StrToFloatDef(Trim(JHSL.Text), 0).toString());
          sql.Add(' )');
          MPCNo := MPCNo + 1;

          if WSql <> '' then
          begin
            WSql := WSql + ',' + QuotedStr(Trim(maxPCId));
          end
          else
          begin
            WSql := QuotedStr(Trim(maxPCId));
          end;
        end;
        ExecSQL;
      end;

//////////////////            ���벼Ʊ               //////////////////////
    end;
    ADOQueryCmd.Connection.CommitTrans;
    FStrs.Free;
  except
    FStrs.Free;
    ADOQueryCmd.Connection.RollbackTrans;
    application.MessageBox(PChar(Exception(ExceptObject).Message), '��ʾ��Ϣ', 0);
  end;

  if trim(isDY.text) = '��' then
  begin
    try
      frmLabelPrint := TfrmLabelPrint.Create(Application);
      with frmLabelPrint do
      begin
        FPreviewPrint := False;
        FLMType := 'KnitPlanCard';
        FFiltration1 := WSql;
        if ShowModal = 1 then
        begin
//        Self.InitGrid();
          with ADOQueryCmd do
          begin
            Close;
            sql.Clear;
            sql.Add('update Knit_Plan_Card         ');
            sql.Add('set PRTer=' + quotedstr(DName));
            sql.Add(', PRTCount=PRTCount+1');
            sql.Add(', PRTDate=getdate()');
            sql.Add(' where PCID in (' + WSql + ')');
            ExecSQL;
          end;
        end;
      end;
    finally
      frmLabelPrint.Free;
    end;
  end;
  InitOrd();
  InitGrid1();
  InitGrid2();
  edtMachNo.text := '';
end;

procedure TfrmKnitCardInPut.Tv1CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin

  if '0' = AViewInfo.GridRecord.Values[Tv1Column2.Index] then
    ACanvas.Brush.Color := $66ff66;
end;

procedure TfrmKnitCardInPut.Tv1DblClick(Sender: TObject);
var
  FStrs: TStringList;
begin

  try
    FStrs := TStringList.Create();
    ExtractStrings([';'], [' '], PChar(edtMachNo.Text), FStrs);
    if FStrs.IndexOf(Trim(CDS_1.FieldByName('MCNO').AsString)) < 0 then
    begin
      edtMachNo.Text := edtMachNo.Text + TRIM(CDS_1.FieldByName('MCNO').AsString) + ';';
    end;

  finally
    FStrs.Free
  end;


//      str4 := copy(str4, 1, Length(str4) - 1);


end;

procedure TfrmKnitCardInPut.ToolButton12Click(Sender: TObject);
begin
  WriteCxGrid(trim(self.Caption) + 'Tv1', Tv1, 'ָʾ������');
  WriteCxGrid(trim(self.Caption) + 'Tv2', Tv2, 'ָʾ������');
end;

end.