unit U_YPCRIn;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, ComCtrls, ToolWin, cxStyles, cxCustomData, cxGraphics,
  cxFilter, cxData, cxDataStorage, cxEdit, DB, cxDBData,
  cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGridLevel,
  cxClasses, cxControls, cxGridCustomView, cxGrid, ADODB, DBClient,
  cxButtonEdit, cxDropDownEdit, cxCalendar, cxGridCustomPopupMenu,
  cxGridPopupMenu;

type
  TfrmYPCRIn = class(TForm)
    ToolBar1: TToolBar;
    BtnSave: TToolButton;
    BtnExit: TToolButton;
    Tv1: TcxGridDBTableView;
    cxGrid1Level1: TcxGridLevel;
    cxGrid1: TcxGrid;
    v1P_ChnName: TcxGridDBColumn;
    v1Note: TcxGridDBColumn;
    v1Quantity: TcxGridDBColumn;
    v1UnitName: TcxGridDBColumn;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    DataSource1: TDataSource;
    CDS_Sub: TClientDataSet;
    ADOQueryMain: TADOQuery;
    ADOQueryCmd: TADOQuery;
    ADOQueryTemp: TADOQuery;
    ToolButton4: TToolButton;
    v1Column1: TcxGridDBColumn;
    ToolButton1: TToolButton;
    v1Column3: TcxGridDBColumn;
    cxGridPopupMenu1: TcxGridPopupMenu;
    v1Column4: TcxGridDBColumn;
    v1Column5: TcxGridDBColumn;
    v1Column6: TcxGridDBColumn;
    v1Column7: TcxGridDBColumn;
    v1Column8: TcxGridDBColumn;
    v1Column9: TcxGridDBColumn;
    v1Column12: TcxGridDBColumn;
    v1Column13: TcxGridDBColumn;
    v1Column2: TcxGridDBColumn;
    v1Column15: TcxGridDBColumn;
    v1Column18: TcxGridDBColumn;
    procedure FormCreate(Sender: TObject);
    procedure BtnExitClick(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure ToolButton3Click(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure BtnSaveClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure v1P_ChnNamePropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
    procedure v1Column18PropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
    procedure v1Column4PropertiesButtonClick(Sender: TObject;
      AButtonIndex: Integer);
  private
    FCRID:String;
    procedure InitGrid();
    function  SaveData():Boolean;
    procedure SaveKCData();
    { Private declarations }
  public
    FMainID:string;
    FCopyInt:Integer;
    { Public declarations }
  end;

var
  frmYPCRIn: TfrmYPCRIn;

implementation
uses
  U_DataLink,U_RTFun,U_ZDYHelp,U_CPSel;

{$R *.dfm}

procedure TfrmYPCRIn.FormCreate(Sender: TObject);
begin
  cxGrid1.Align:=alClient;
end;

procedure TfrmYPCRIn.BtnExitClick(Sender: TObject);
begin
  Close;
  WriteCxGrid('��Ʒ���STInput',Tv1,'��Ʒ�ֿ�');
end;
procedure TfrmYPCRIn.InitGrid();
begin
  try
    ADOQueryMain.DisableControls;
    with ADOQueryMain do
    begin
      Close;
      sql.Clear;
      SQL.Add('select  A.CRTime,A.CRID,A.BCID,A.Qty,A.QtyUnit,A.CYColor,A.Note,A.CYType,A.BCID ');
      sql.Add(' ,A.CRPrice,A.BZTYpe,A.PBFactory,A.RCFactory,A.HJGFactory,A.CYID,A.WeiZhi,A.MiLenNote');
      SQL.Add(',B.CYNO,B.CYName,B.CYMF,B.CYKZ,B.CYSpec,B.CYCF,B.CYHX');
      sql.Add(' from CK_YP_CR A');
      sql.Add(' inner join CP_YDang B on A.CYID=B.CYID');
      SQL.Add(' where BCId='''+Trim(FMainID)+'''');
      Open;
    end;
    SCreateCDS20(ADOQueryMain,CDS_Sub);
    SInitCDSData20(ADOQueryMain,CDS_Sub);
  finally
    ADOQueryMain.EnableControls;
  end;
end;

procedure TfrmYPCRIn.ToolButton2Click(Sender: TObject);
var
  FDate:TDateTime;
begin
  FDate:=SGetServerDate(ADOQueryTemp);
  try
    frmCPSel:=TfrmCPSel.Create(self);
    with frmCPSel do
    begin
      frmCPSel.Align:=alClient;
      if ShowModal=1 then
      begin
        with CDS_Sub do
        begin
          Append;
          FieldByName('CRTime').Value:=FDate;
          FieldByName('CYID').Value:=Trim(CDS_Main.fieldbyname('CYID').AsString);
          FieldByName('CYNo').Value:=Trim(CDS_Main.fieldbyname('CYNo').AsString);
          FieldByName('CYName').Value:=Trim(CDS_Main.fieldbyname('CYName').AsString);
          FieldByName('CYSpec').Value:=Trim(CDS_Main.fieldbyname('CYSpec').AsString);
          FieldByName('CYCF').Value:=Trim(CDS_Main.fieldbyname('CYCF').AsString);
          FieldByName('CYMF').Value:=Trim(CDS_Main.fieldbyname('CYMF').AsString);
          FieldByName('CYKZ').Value:=Trim(CDS_Main.fieldbyname('CYKZ').AsString);
          FieldByName('CYHX').Value:=Trim(CDS_Main.fieldbyname('CYHX').AsString);
          FieldByName('CYColor').Value:=Trim(CDS_Main.fieldbyname('CYColor').AsString);
          Post;
        end;
      end;
    end;
  finally
    frmCPSel.Free;
  end;

end;

procedure TfrmYPCRIn.ToolButton3Click(Sender: TObject);
begin
  if CDS_Sub.IsEmpty then Exit;
  if Trim(CDS_Sub.fieldbyname('BCId').AsString)<>'' then
  begin
    Application.MessageBox('�����ڴ�ɾ���Ѿ���������ݣ�','��ʾ',0);
    Exit;
  end;
  CDS_Sub.Delete;
end;

procedure TfrmYPCRIn.ToolButton4Click(Sender: TObject);
var
  YCLCode,GYS:String;
begin
  if CDS_Sub.IsEmpty then Exit;
  CopyAddRow(tv1,CDS_Sub);
  with CDS_Sub do
  begin
    Edit;
    FieldByName('BCID').Value:='';
    FieldByName('CRID').Value:=NULL;
    FieldByName('CYColor').Value:='';
    FieldByName('Note').Value:='';
    Post;
  end;
end;

procedure TfrmYPCRIn.ToolButton1Click(Sender: TObject);
begin
  if CDS_Sub.IsEmpty then Exit;
  ToolBar1.SetFocus;
  OneKeyPost(Tv1,CDS_Sub);
end;

function TfrmYPCRIn.SaveData():Boolean;
var
  MaxNo,SubId,strSQL,LQuantity,LQty,YLQty:string;
  KID,i,PStatus,KID1,KID2:Integer;
begin
  try
    Result:=False;
    ADOQueryCmd.Connection.BeginTrans;
    CDS_Sub.DisableControls;
    with CDS_Sub do
    begin
      First;
      while not Eof do
      begin
        with ADOQueryTemp do
        begin
          Close;
          sql.Clear;
          sql.Add('select Top 1* from CK_YP_CR where CYID='''+Trim(CDS_Sub.fieldbyname('CYID').AsString)+'''');
          sql.Add(' and CYType='''+Trim(CDS_Sub.fieldbyname('CYType').AsString)+'''');
          Open;
        end;
        if ADOQueryTemp.IsEmpty=False then
        begin
          if Trim(ADOQueryTemp.FieldByName('QtyUnit').AsString)<>Trim(CDS_Sub.fieldbyname('QtyUnit').AsString) then
          begin
            ADOQueryCmd.Connection.RollbackTrans;
            CDS_Sub.EnableControls;
            Application.MessageBox('��λ����!','��ʾ',0);
            Exit;
          end;
        end;
        if Trim(CDS_Sub.FieldByName('Qty').AsString)='' then
        begin
          CDS_Sub.Edit;
          CDS_Sub.FieldByName('Qty').Value:='0';
          CDS_Sub.Post;
        end;


       { with ADOQueryTemp do
        begin
          Close;
          sql.Clear;
          sql.Add('select * from CK_YP_KC where WeiZhi='''+Trim(CDS_Sub.fieldbyname('WeiZhi').AsString)+'''');
          sql.Add(' and KCQty>0');
          Open;
        end;
        if ADOQueryTemp.RecordCount>1 then
        begin
          ADOQueryCmd.Connection.RollbackTrans;
          CDS_Sub.EnableControls;
          Application.MessageBox('��λ���Ѿ���ռ��!','��ʾ',0);
          Exit;
        end; }
        SaveKCData();
        //����
        if Trim(CDS_Sub.fieldbyname('BCId').AsString)<>'' then
        begin
          SubId:=Trim(CDS_Sub.fieldbyname('BCId').AsString);
        end else
        begin
          if GetLSNo(ADOQueryCmd,SubId,'BC','CK_YP_CR',4,1)=False then
          begin
            ADOQueryCmd.Connection.RollbackTrans;
            CDS_Sub.EnableControls;
            Application.MessageBox('ȡ����ʧ�ܣ�','��ʾ',0);
            Exit;
          end;
        end;
        with ADOQueryCmd do
        begin
          Close;
          sql.Clear;
          SQL.Add('select * from CK_YP_CR where BCId='''+Trim(SubId)+'''');
          Open;
        end;
        with ADOQueryCmd do
        begin
          if Trim(CDS_Sub.fieldbyname('BCId').AsString)<>'' then
            Edit
          else
            Append;
          FieldByName('BCId').Value:=Trim(SubId);
          //SSetSaveDataCDSNew(ADOQueryCmd,Tv1,CDS_Sub,'CK_YP_CR',2);
          RTSetSaveDataCDS(ADOQueryCmd,Tv1,CDS_Sub,'CK_YP_CR',2);
          FieldByName('CRTime').Value:=CDS_Sub.fieldbyname('CRtime').Value;
          FieldByName('CYID').Value:=CDS_Sub.fieldbyname('CYID').Value;
          FieldByName('CYColor').Value:=CDS_Sub.fieldbyname('CYColor').Value;
          FieldByName('CYType').Value:=CDS_Sub.fieldbyname('CYType').Value;
          FieldByName('QtyUnit').Value:=CDS_Sub.fieldbyname('QtyUnit').Value;
          FieldByName('Note').Value:=CDS_Sub.fieldbyname('Note').Value;
          FieldByName('Qty').Value:=CDS_Sub.fieldbyname('Qty').Value;
          FieldByName('QtyFlag').Value:=1;
          FieldByName('CRID').Value:=StrToInt(FCRID);
          FieldByName('CRFlag').Value:='���';
          FieldByName('CRType').Value:='�������';
          if Trim(CDS_Sub.fieldbyname('BCId').AsString)='' then
          begin
            FieldByName('Filler').Value:=Trim(DName);
          end
          else
          begin
            FieldByName('Editer').Value:=Trim(DName);
            FieldByName('EditTime').Value:=SGetServerDateTime(ADOQueryTemp);
          end;
          FieldByName('Note').Value:=Trim(CDS_Sub.fieldbyname('Note').AsString);
          Post;
        end;
        with ADOQueryCmd do
        begin
          Close;
          sql.Clear;
          sql.Add('Update CK_YP_KC Set KCQty=(select sum(Qty*QtyFlag) from CK_YP_CR A where A.CRID=CK_YP_KC.CRID)');
          sql.Add(' where CRID='+Trim(FCRID));
          ExecSQL;
        end;
        Next;
      end;
    end;
    CDS_Sub.EnableControls;
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('delete CK_YP_KC where CRID in(select CRID from CK_YP_KC ');
      sql.Add('  where not exists(select * from CK_YP_CR A where A.CRID=CK_YP_KC.CRID))');
      ExecSQL;
    end;
    ADOQueryCmd.Connection.CommitTrans;
    Result:=True;
    FMainID:=SubId;
    ModalResult:=1;
  except
    ADOQueryCmd.Connection.RollbackTrans;
    CDS_Sub.EnableControls;
    Application.MessageBox('����ʧ��!','��ʾ',0);
  end;
end;
procedure TfrmYPCRIn.SaveKCData();
var
  LQty:String;
  PState:Integer;
begin
  PState:=0;
  if Trim(CDS_Sub.fieldbyname('BCID').AsString)<>'' then
  begin
    with ADOQueryTemp do
    begin
      Close;
      sql.Clear;
      sql.Add('select * from CK_YP_CR where BCID='''+Trim(CDS_Sub.fieldbyname('BCID').AsString)+'''');
      Open;
    end;
    LQty:=Trim(ADOQueryTemp.fieldbyname('Qty').AsString);
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('UPdate CK_YP_KC Set KCQty=KCQty-'+LQty);
      SQL.Add(' where CRID='+Trim(ADOQueryTemp.fieldbyname('CRID').AsString));
      ExecSQL;
    end;
  end;
  with ADOQueryTemp do
  begin
    Close;
    SQL.Clear;
    sql.Add('select * from CK_YP_KC');
    sql.Add(' where CYID='''+Trim(CDS_Sub.fieldbyname('CYID').AsString)+'''');
    sql.Add(' and isnull(CYType,'''')='''+Trim(CDS_Sub.fieldbyname('CYType').AsString)+'''');
    sql.Add(' and isnull(CYColor,'''')='''+Trim(CDS_Sub.fieldbyname('CYColor').AsString)+'''');
    sql.Add(' and isnull(PBFactory,'''')='''+Trim(CDS_Sub.fieldbyname('PBFactory').AsString)+'''');
    sql.Add(' and isnull(RCFactory,'''')='''+Trim(CDS_Sub.fieldbyname('RCFactory').AsString)+'''');
    sql.Add(' and isnull(HJGFactory,'''')='''+Trim(CDS_Sub.fieldbyname('HJGFactory').AsString)+'''');
    sql.Add(' and isnull(KCQtyUnit,'''')='''+Trim(CDS_Sub.fieldbyname('QtyUnit').AsString)+'''');
    sql.Add(' and isnull(WeiZhi,'''')='''+Trim(CDS_Sub.fieldbyname('WeiZhi').AsString)+'''');
    sql.Add(' and isnull(KCNote,'''')='''+Trim(CDS_Sub.fieldbyname('Note').AsString)+'''');
    //sql.Add(' and isnull(MiLenNote,'''')='''+Trim(CDS_Sub.fieldbyname('MiLenNote').AsString)+'''');
    // sql.Add(' and isnull(BZType,'''')='''+Trim(CDS_Sub.fieldbyname('BZType').AsString)+'''');
    {if Trim(CDS_Sub.fieldbyname('CRPrice').AsString)<>'' then
    begin
      sql.Add(' and CRPrice='+Trim(CDS_Sub.fieldbyname('CRPrice').AsString));
    end else
    begin
      sql.Add(' and CRPrice=0');
    end; }

    Open;
  end;
  if ADOQueryTemp.IsEmpty then
  begin
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('update CK_YP_CRID Set CRID=CRID+1 select * from CK_YP_CRID');
      ExecSQL;
      Open;
    end;
    FCRID:=Trim(ADOQueryCmd.fieldbyname('CRID').AsString);
  end else
  begin
    FCRID:=Trim(ADOQueryTemp.fieldbyname('CRID').AsString);
    PState:=1;
  end;
  if PState=0 then
  begin
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('insert into CK_YP_KC(CRID,CYID,CYColor,PBFactory,KCQtyUnit,KCValid,CYType,KCNote,RCFactory,HJGFactory,WeiZhi)');
      sql.Add(' select '+FCRID);
      sql.Add(','''+Trim(CDS_Sub.fieldbyname('CYID').AsString)+'''');
      sql.Add(','''+Trim(CDS_Sub.fieldbyname('CYColor').AsString)+'''');
      sql.Add(','''+Trim(CDS_Sub.fieldbyname('PBFactory').AsString)+'''');
      sql.Add(','''+Trim(CDS_Sub.fieldbyname('QtyUnit').AsString)+'''');
      sql.Add(',''Y'' ');
      sql.Add(','''+Trim(CDS_Sub.fieldbyname('CYType').AsString)+'''');
      sql.Add(','''+Trim(CDS_Sub.fieldbyname('Note').AsString)+'''');
     // sql.Add(','''+Trim(CDS_Sub.fieldbyname('BZType').AsString)+'''');
      sql.Add(','''+Trim(CDS_Sub.fieldbyname('RCFactory').AsString)+'''');
      sql.Add(','''+Trim(CDS_Sub.fieldbyname('HJGFactory').AsString)+'''');
      {if  Trim(CDS_Sub.fieldbyname('CRPrice').AsString)<>'' then
        sql.Add(','+Trim(CDS_Sub.fieldbyname('CRPrice').AsString))
      else
        sql.Add(',0'); }
      sql.Add(','''+Trim(CDS_Sub.fieldbyname('WeiZhi').AsString)+'''');
      //sql.Add(','''+Trim(CDS_Sub.fieldbyname('MiLenNote').AsString)+'''');
      ExecSQL;
    end;
  end;
  with ADOQueryCmd do
  begin
    Close;
    sql.Clear;
    sql.Add('Update CK_YP_KC Set KCQty=KCQty+'+Trim(CDS_Sub.fieldbyname('Qty').AsString));
    SQL.Add(' where CRID='+FCRID);
    ExecSQL;
  end;
end;

procedure TfrmYPCRIn.BtnSaveClick(Sender: TObject);
begin
  if CDS_Sub.IsEmpty then Exit;
  if CDS_Sub.Locate('CRTime',Null,[]) then
  begin
    Application.MessageBox('���ʱ�䲻��Ϊ��!','��ʾ',0);
    Exit;
  end;
 { if CDS_Sub.Locate('CYNO',Null,[]) then
  begin
    Application.MessageBox('��Ʒ��Ų���Ϊ��!','��ʾ',0);
    Exit;
  end;
  if CDS_Sub.Locate('CYColor',Null,[]) then
  begin
    Application.MessageBox('��ɫ����Ϊ��!','��ʾ',0);
    Exit;
  end;  }
  if CDS_Sub.Locate('Qty',Null,[]) then
  begin
    Application.MessageBox('��������Ϊ��!','��ʾ',0);
    Exit;
  end;
  if CDS_Sub.Locate('QtyUnit',Null,[]) then
  begin
    Application.MessageBox('��λ����Ϊ��!','��ʾ',0);
    Exit;
  end;
  if CDS_Sub.Locate('CYType',Null,[]) then
  begin
    Application.MessageBox('��Ʒ���Ͳ���Ϊ��!','��ʾ',0);
    Exit;
  end;
 { if CDS_Sub.Locate('CRPrice',Null,[]) then
  begin
    Application.MessageBox('���۲���Ϊ��!','��ʾ',0);
    Exit;
  end;
  if CDS_Sub.Locate('BZType',Null,[]) then
  begin
    Application.MessageBox('���ֲ���Ϊ��!','��ʾ',0);
    Exit;
  end;   }
  if SaveData() then
  begin
    Application.MessageBox('����ɹ���','��ʾ',0);
  end;
end;

procedure TfrmYPCRIn.FormShow(Sender: TObject);
var
  i:Integer;
begin
  readCxGrid('��Ʒ���STInput',Tv1,'��Ʒ�ֿ�');
  InitGrid();
  if FCopyInt=99 then
  begin
    FMainID:='';
    with CDS_Sub do
    begin
      Edit;
      FieldByName('BCID').Value:='';
      FieldByName('WeiZhi').Value:='';
      FieldByName('CRID').Value:=Null;
      Post;
    end;
  end;
  if Trim(FMainID)<>'' then
  begin
    with ADOQueryTemp do
    begin
      Close;
      sql.Clear;
      sql.Add('select * from CK_YP_CR where CRID='+Trim(CDS_Sub.fieldbyname('CRID').AsString));
      sql.Add(' and CRFlag=''����'' ');
      Open;
    end;
    if ADOQueryTemp.IsEmpty=False then
    begin
      for i:=0 to Tv1.ColumnCount-1 do
      begin
        Tv1.Columns[i].Options.Focusing:=False;
      end;
      v1Column1.Options.Focusing:=True;
      v1Quantity.Options.Focusing:=True;
    end;
  end;
  {FDate:=SGetServerDate(ADOQueryTemp);
  if Trim(FMainID)='' then
  begin
    with CDS_Sub do
    begin
      Append;
      FieldByName('CRTime').Value:=FDate;
      Post;
    end;
  end; }
end;

procedure TfrmYPCRIn.v1P_ChnNamePropertiesButtonClick(Sender: TObject;
  AButtonIndex: Integer);
begin
  try
    frmZDYHelp:=TfrmZDYHelp.Create(Application);
    with frmZDYHelp do
    begin
      flag:='ordcolor';
      flagname:='��ɫ';
      if ShowModal=1 then
      begin
        with Self.CDS_Sub do
        begin
          Edit;
          FieldByName('CYColor').Value:=Trim(ClientDataSet1.fieldbyname('ZdyName').AsString);
        end;
      end;
    end;
  finally
    frmZDYHelp.Free;
  end;
end;

procedure TfrmYPCRIn.v1Column18PropertiesButtonClick(Sender: TObject;
  AButtonIndex: Integer);
begin
  try
    frmZDYHelp:=TfrmZDYHelp.Create(Application);
    with frmZDYHelp do
    begin
      flag:='WeiZhi';
      flagname:='����';
      if ShowModal=1 then
      begin
        CDS_Sub.Edit;
        CDS_Sub.FieldByName('WeiZhi').Value:=Trim(ClientDataSet1.fieldbyname('ZdyName').AsString);
      end;
    end;
  finally
    frmZDYHelp.Free;
  end;
end;

procedure TfrmYPCRIn.v1Column4PropertiesButtonClick(Sender: TObject;
  AButtonIndex: Integer);
begin
  try
    frmZDYHelp:=TfrmZDYHelp.Create(Application);
    with frmZDYHelp do
    begin
      flag:='CYType';
      flagname:='��Ʒ����';
      if ShowModal=1 then
      begin
        with Self.CDS_Sub do
        begin
          Edit;
          FieldByName('CYType').Value:=Trim(frmZDYHelp.ClientDataSet1.fieldbyname('ZDYName').AsString);
        end;
      end;
    end;
  finally
    frmZDYHelp.Free;
  end;
end;

end.