unit U_KnitPlanMachInPut;

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;

type
  TfrmKnitPlanMachInPut = 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;
    Label4: TLabel;
    CarType: TEdit;
    N2: TMenuItem;
    cxStyleRepository1: TcxStyleRepository;
    cxStyle1: TcxStyle;
    cxGrid1: TcxGrid;
    Tv1: TcxGridDBTableView;
    Tv1Column1: TcxGridDBColumn;
    v1OrderNo: TcxGridDBColumn;
    Tv1Column2: TcxGridDBColumn;
    v1Column31: TcxGridDBColumn;
    v1Column20: TcxGridDBColumn;
    v1Column2: TcxGridDBColumn;
    v1Column3: TcxGridDBColumn;
    v1Column8: TcxGridDBColumn;
    v1Column13: TcxGridDBColumn;
    v1Column5: TcxGridDBColumn;
    v1Qty1: TcxGridDBColumn;
    v1Column6: TcxGridDBColumn;
    v1Column4: TcxGridDBColumn;
    Tv1Column3: TcxGridDBColumn;
    cxGrid1Level1: TcxGridLevel;
    cxGrid2: TcxGrid;
    TV2: TcxGridDBTableView;
    TV2Column1: TcxGridDBColumn;
    TV2Column2: TcxGridDBColumn;
    TV2Column3: TcxGridDBColumn;
    TV2Column4: TcxGridDBColumn;
    TV2Column5: TcxGridDBColumn;
    TV2Column6: TcxGridDBColumn;
    cxGridLevel1: TcxGridLevel;
    Label3: TLabel;
    Label5: TLabel;
    Label2: TLabel;
    ConNo: TEdit;
    C_Name: TEdit;
    C_Code: TEdit;
    ToolBar1: TToolBar;
    ToolButton12: TToolButton;
    TBClose: TToolButton;
    Label7: TLabel;
    BatchNo: TEdit;
    TV2Column7: TcxGridDBColumn;
    Panel3: TPanel;
    Label1: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label6: TLabel;
    edtName: TEdit;
    edtCode: TEdit;
    edtConNo: TEdit;
    CardQty: TEdit;
    Label8: TLabel;
    procedure FormDestroy(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TBCloseClick(Sender: TObject);
    procedure TBFindClick(Sender: TObject);
    procedure TBRafreshClick(Sender: TObject);
    procedure ConNoChange(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure cxTabControl1Change(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Tv1DblClick(Sender: TObject);
    procedure ToolButton12Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
  private
    procedure InitOrd();
    procedure InitGrid1();
    procedure InitGrid2();
    { Private declarations }
  public
    FMainId, FSubId: string;
    { Public declarations }
  end;

var
  frmKnitPlanMachInPut: TfrmKnitPlanMachInPut;

implementation

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

procedure TfrmKnitPlanMachInPut.InitOrd();
begin

  with ADOQueryTemp do
  begin
    Close;
    sql.Clear;
    sql.Add(' select A.*,B.*');
    sql.Add(' ,CardQty=OrdPiece-ISNULL((select sum(CardQty) from knit_Plan_Mach AA where AA.SubId=B.SubId),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('ConNo').AsString;
  edtCode.Text := ADOQueryTemp.FieldByName('C_Code').AsString;
  edtName.Text := ADOQueryTemp.FieldByName('C_Name').AsString;
  CardQty.Text := ADOQueryTemp.FieldByName('CardQty').AsString;

end;

procedure TfrmKnitPlanMachInPut.N2Click(Sender: TObject);
begin
  with ADOQueryTemp do
  begin
    close;
    sql.Clear;
    sql.Add(' select * from knit_Plan_Card A where A.PRTCount>1 and A.PMID=' + quotedstr(trim(CDS_2.fieldbyname('PMID').AsString)));
    Open;
  end;
  if not ADOQueryTemp.IsEmpty then
  begin
    Application.MessageBox('�Ѵ�ӡ��Ʊ����ɾ��!', '��ʾ', 0);
    Exit;
  end;
  with ADOQueryCmd do
  begin
    close;
    sql.Clear;
    sql.Add('delete knit_Plan_Mach ');
    sql.Add('where PMID=' + quotedstr(trim(CDS_2.fieldbyname('PMID').AsString)));
    sql.Add('delete knit_Plan_Card ');
    sql.Add('where PMID=' + quotedstr(trim(CDS_2.fieldbyname('PMID').AsString)));
    execsql;
  end;
  CDS_2.Delete;
end;

procedure TfrmKnitPlanMachInPut.InitGrid1();
var
  fwhere: string;
begin
  try
    ADOQueryMain.DisableControls;
    with ADOQueryMain do
    begin
      Close;
      sql.Clear;

      sql.Add('select * from BS_Machine A         ');
      sql.Add('LEFT join Knit_Plan_Mach B on A.MCNO=B.MCNo   ');
      sql.Add('LEFT JOIN Knit_Plan_Sub C on B.SubId=C.SubId   ');
      sql.Add('LEFT JOIN Knit_Plan_Main D on C.MainId=D.MainId ');
//      sql.Add(' select A.*,B.*');
//      sql.Add(' ,CardQty=OrdPiece-ISNULL((select sum(CardQty) from knit_Plan_Mach AA where AA.SubId=B.SubId),0)');
//      sql.Add(' ,APPS=(select Count(*) from knit_Plan_Card AA where AA.MainId=A.MainId)');
//      sql.Add(' ,JYPS=(select Count(*) from knit_Cloth_Inspect AA where AA.MainId=A.MainId)');
//      sql.Add(' ,JYQtyKg=(select sum(MJMaoZ) from knit_Cloth_Inspect AA where AA.MainId=A.MainId)');
//      sql.Add(' ,RKPS=(select Count(*) from knit_Cloth_IO AA where AA.MainId=A.MainId and CRFlag=''���'')');
//      sql.Add(' ,RKQtyKg=(select sum(KgQty) from knit_Cloth_IO AA where AA.MainId=A.MainId and CRFlag=''���'')');
//      sql.Add(' ,CKPS=(select Count(*) from knit_Cloth_IO AA where AA.MainId=A.MainId and CRFlag=''����'')');
//      sql.Add(' ,CKQtyKg=(select sum(KgQty) from knit_Cloth_IO AA where AA.MainId=A.MainId and CRFlag=''����'')');
      //SQL.Add(',CustomerNoName=(select CustomerNoName  from JYOrderCon_Main_PB X where X.MainId=A.ConMainId) ');
//      sql.Add(' from knit_Plan_Main A');
//      sql.Add(' inner join knit_Plan_Sub B on A.MainId=B.MainId');
      Open;
    end;
    SCreateCDS(ADOQueryMain, CDS_1);
    SInitCDSData(ADOQueryMain, CDS_1);
  finally
    ADOQueryMain.EnableControls;
  end;
end;

procedure TfrmKnitPlanMachInPut.InitGrid2();
begin
  with ADOQueryTemp do
  begin
    Close;
    sql.Clear;
    sql.Add(' select A.* ');
    sql.Add(' from Knit_Plan_Mach A   ');
    sql.Add(' where SubId= ' + QuotedStr(Trim(FSubId)));
    sql.Add('order by filltime  ');
    Open;
  end;

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

procedure TfrmKnitPlanMachInPut.FormDestroy(Sender: TObject);
begin
  inherited;
  frmKnitPlanMachInPut := nil;
end;

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

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

end;

procedure TfrmKnitPlanMachInPut.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 TfrmKnitPlanMachInPut.TBRafreshClick(Sender: TObject);
begin
  InitGrid1();
  InitGrid2();

end;

procedure TfrmKnitPlanMachInPut.ConNoChange(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 TfrmKnitPlanMachInPut.FormShow(Sender: TObject);
begin
  inherited;

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

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

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

procedure TfrmKnitPlanMachInPut.Button3Click(Sender: TObject);
var
  maxno, maxPCId: 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) > ADOQueryTemp.fieldbyname('CardQty').AsInteger 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) from knit_Plan_Mach A ');
        sql.Add('inner join Knit_Plan_Card B on A.PMID=B.PMID');
        sql.Add('where A.SubId=' + Quotedstr(Trim(FSubId)));
        sql.Add('and A.MCNO=' + Quotedstr(Trim(FStrs[i])));
        Open;
      end;
      if ADOQueryTemp.IsEmpty then
        MPCNo := 1
      else
        MPCNo := ADOQueryTemp.FieldByName('PCNo').AsInteger + 1;
      if GetLSNo(ADOQueryTemp, maxno, 'PM', 'knit_Plan_Mach', 3, 1) = False then
      begin
        raise Exception.Create('ȡ���Ż�̨��ˮ��ʧ��!');
      end;
      with ADOQueryCmd do
      begin
        Close;
        sql.Clear;
        sql.Add('select * from knit_Plan_Mach where 1=2');
        Open;
      end;
      with ADOQueryCmd do
      begin
        Append;
        FieldByName('MainId').Value := Trim(FMainId);
        FieldByName('SubId').Value := Trim(FSubId);
        FieldByName('PMID').Value := Trim(maxno);
        FieldByName('MCNO').Value := Trim(FStrs[i]);
        FieldByName('CardQty').Value := StrToIntdef(edtCardQty.Text, 0);
        FieldByName('Repairid').Value := Repairer.TxtCode;
        FieldByName('Repairer').Value := Repairer.Text;
        FieldByName('BatchNo').Value := Trim(BatchNo.Text);
//        FieldByName('CheJian').Value := Trim(MCheJian);
        FieldByName('Filler').Value := Trim(DName);
        Post;
      end;
//////////////////            ���벼Ʊ               //////////////////////

      with ADOQueryCmd do
      begin
        Close;
        sql.Clear;
        sql.Add(' insert into Knit_Plan_Card(MainId,SubId,PMID,PCId,PCNo,APDate,Filler,BatchNo) values');
        for j := 0 to StrToIntdef(edtCardQty.Text, 0) do
        begin
          if GetLSNo(ADOQueryTemp, maxPCId, 'PC', 'knit_Plan_Mach', 3, 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(maxno)));
          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(' )');
          MPCNo := MPCNo + 1;
        end;
//        ShowMessage(SqL.Text);
        ExecSQL;
      end;


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

end;

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

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


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


end;

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

end.