unit U_TradeClothDROutEdit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage,
  cxEdit, DB, cxDBData, StdCtrls, ExtCtrls, ADODB, DBClient,
  cxGridCustomPopupMenu, cxGridPopupMenu, cxGridLevel, cxGridCustomTableView,
  cxGridTableView, cxGridDBTableView, cxClasses, cxControls, cxGridCustomView,
  cxGrid, MovePanel, cxCheckBox, Menus, ComCtrls, BtnEdit, ShellAPI, cxTextEdit,
  RM_Common, RM_Class, RM_GridReport, RM_System, RM_Dataset, RM_e_Xls,
  cxLookAndFeels, cxLookAndFeelPainters,  
  cxNavigator, dxDateRanges, dxBarBuiltInMenu, U_BaseList;

type
  TfrmTradeClothDROutEdit = class(TfrmBaseList)
    ADOQueryTemp: TADOQuery;
    ADOQueryCmd: TADOQuery;
    DS_MainSel: TDataSource;
    CDS_MainSel: TClientDataSet;
    GPM_1: TcxGridPopupMenu;
    Panel2: TPanel;
    Label5: TLabel;
    Label4: TLabel;
    Label9: TLabel;
    edtScan: TEdit;
    CRTime: TDateTimePicker;
    KHName: TEdit;
    Button2: TButton;
    cxStyleRepository1: TcxStyleRepository;
    cxStyle1: TcxStyle;
    Label12: TLabel;
    CDS_Main: TClientDataSet;
    CRType: TEdit;
    Button1: TButton;
    RMXLSExport1: TRMXLSExport;
    RMDBMX: TRMDBDataSet;
    RM1: TRMGridReport;
    CDS_JuanPRT: TClientDataSet;
    Label10: TLabel;
    edtIsSMTH: TEdit;
    btn1: TButton;
    ds1: TClientDataSet;
    ds2: TDataSource;
    Panel1: TPanel;
    cxGrid3: TcxGrid;
    Tv3: TcxGridDBTableView;
    cv3Column3: TcxGridDBColumn;
    VC_MJXH: TcxGridDBColumn;
    v3Column1: TcxGridDBColumn;
    v3Column2: TcxGridDBColumn;
    cv3Column4: TcxGridDBColumn;
    cxGridLevel1: TcxGridLevel;
    cxGrid1: TcxGrid;
    TV4: TcxGridDBTableView;
    cCXCONNO: TcxGridDBColumn;
    cV4Column1: TcxGridDBColumn;
    cCXCOLOR: TcxGridDBColumn;
    VC_SQQTY: TcxGridDBColumn;
    cCXFHPS: TcxGridDBColumn;
    cxGridLevel2: TcxGridLevel;
    TV4Column1: TcxGridDBColumn;
    Tv3Column1: TcxGridDBColumn;
    TV4Column2: TcxGridDBColumn;
    TV4Column3: TcxGridDBColumn;
    CKNO: TEdit;
    Tv3Column2: TcxGridDBColumn;
    Tv3Column3: TcxGridDBColumn;
    GPM_2: TcxGridPopupMenu;
    TV4Column4: TcxGridDBColumn;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure edtScanKeyPress(Sender: TObject; var Key: Char);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure edtIsSMTHClick(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    procedure TV4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
    FCKNO, FSMStr, JXFlag, CZZT, fcuowu: string;
    procedure InitCKGrid();
    procedure InitSQGrid();
    function JudgeSQD(): Boolean;
    function JudgeBao(): Boolean;
    procedure SaveCKBao();
    function JudgeJTM(): Boolean;
    procedure SaveCKJTM();
    function JudgeJTMCX(): Boolean;
    procedure SaveCKJTMCX();
  public
    { Public declarations }
  end;

var
  frmTradeClothDROutEdit: TfrmTradeClothDROutEdit;

implementation

uses
  U_DataLink, U_RTFun, MMSystem;         //, U_FHSQListSel, U_CKProductCPKCListSel, U_CKProductBCPKCListSel

procedure TfrmTradeClothDROutEdit.SaveCKJTMCX();
begin
  try
    ADOQueryCmd.Connection.BeginTrans;

    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('Update CK_Cloth_CR Set CRFlag=''待出库'',CRType='''',CRTime=NULL,CRNote='''',CKNO='''' ');
      sql.Add(' where CK_Cloth_CR=CRID = ( select top 1 X.CRID from CK_Cloth_CR X  inner join CK_Cloth_KC Y on X.JYID=Y.JYID and X.Cycles=Y.Cycles ');
      sql.Add('               where X.CRFlag=''出库'' and X.JYID=' + Quotedstr(Trim(FSMStr)) + '   )  ');

      sql.Add(' UPdate CK_Cloth_KC Set Valid=''Y'' ');
      sql.Add(' where  CK_Cloth_KC.JYID=' + Quotedstr(Trim(FSMStr)));
      sql.Add(' and Valid=''N'' ');

      sql.Add(' Update JY_Cloth Set JYCRType=''已入库'' ');
      sql.Add(' where  JY_Cloth.JYID=' + Quotedstr(Trim(FSMStr)));
      SQL.Add(' and JY_Cloth.JYCRType=''已出库'' ');
      ExecSQL;
    end;
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('insert into SY_SysLog(operor,opertime,Model,acction,opevent,result) values( ');
      sql.Add(' ' + quotedstr(trim(DName)));
      sql.Add(',getdate() ');
      sql.Add(',' + quotedstr(''));
      sql.Add(',' + quotedstr(trim('出库扫描撤销')));
      sql.Add(',' + quotedstr('卷条码：' + trim(FSMStr) + ' 出库单号：' + trim(FCKNO)));
      sql.Add(',' + quotedstr(trim('成功')));
      sql.Add(')');
      ExecSQL;
    end;
    ADOQueryCmd.Connection.CommitTrans;
  except
    ADOQueryCmd.Connection.RollbackTrans;
    application.MessageBox('撤销出库失败！', '提示信息', 0);
  end;
end;

procedure TfrmTradeClothDROutEdit.TV4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  inherited;

//  InitCKGrid();
end;

function TfrmTradeClothDROutEdit.JudgeJTMCX(): Boolean;
begin
  try
    if Trim(CKNO.Text) = '' then
      raise Exception.Create('出库单号不能为空!');

    if CDS_MainSel.IsEmpty then
      raise Exception.Create('无可撤销的数据!');

    with ADOQueryTemp do
    begin
      Close;
      sql.Clear;
      sql.Add('SELECT RKNO,CKNO FROM CK_Cloth_CR where CRFlag=''出库'' and JYID=' + quotedstr(FSMStr));
      Open;
    end;

    if ADOQueryTemp.IsEmpty then
      raise Exception.Create('无可撤销的数据!');

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

procedure TfrmTradeClothDROutEdit.SaveCKJTM();
begin
  try
    ADOQueryCmd.Connection.BeginTrans;

    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('UPDATE CK_Cloth_CR Set  ');
      sql.add(' CRTime=' + quotedstr(FormatDateTime('yyyy-MM-dd', CRTime.DateTime)) + ',CRType=''扫描出库'',CRFlag=''出库''  ');
      sql.add(',CKNO=' + Quotedstr(CKNO.Text));
      sql.Add(' where CK_Cloth_CR.JYID=' + Quotedstr(Trim(FSMStr)));
      sql.Add('and CK_Cloth_CR.CRFlag=''待出库''  ');
      ExecSQL;
    end;

    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('UPDATE CK_Cloth_KC Set  ');
      sql.add(' Valid=''N''  ');
      sql.Add(' where CK_Cloth_KC.JYID=' + Quotedstr(Trim(FSMStr)));
      ExecSQL;
    end;

    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('UPDATE JY_Cloth Set  JYCRType=''已出库''  ');
      sql.Add(' where JY_Cloth.JYID=' + Quotedstr(Trim(FSMStr)));
      SQL.Add(' and JY_Cloth.JYCRType=''已入库'' ');
      ExecSQL;
    end;

    ADOQueryCmd.Connection.CommitTrans;
  except
    ADOQueryCmd.Connection.RollbackTrans;
    application.MessageBox('出库失败！', '提示信息', 0);
  end;
end;
{$R *.dfm}

function TfrmTradeClothDROutEdit.JudgeJTM(): Boolean;
begin
  try
    if Trim(CKNO.Text) = '' then
      raise Exception.Create('未扫描申请单暂停发货!');

    with ADOQueryTemp do
    begin
      Close;
      sql.Clear;
      sql.Add('select JYID from JY_Cloth  where JYID=' + quotedstr(trim(FSMStr)));
//      ShowMessage(SQL.Text);
      Open;
    end;
    if ADOQueryTemp.IsEmpty then
    begin
      raise Exception.Create('条码错误暂停发货');
    end;
    with ADOQueryTemp do
    begin
      Close;
      sql.Clear;
      sql.Add('select A.CRFlag from CK_Cloth_CR A inner join CK_Cloth_KC B on A.JYID=B.JYID and A.Cycles=B.Cycles    ');
      sql.Add('where A.CRFlag=''入库'' and A.JYID=' + quotedstr(trim(FSMStr)));
      Open;
    end;
    if ADOQueryTemp.IsEmpty then
    begin
      raise Exception.Create('未入库暂停发货');
    end;
    with ADOQueryTemp do
    begin
      Close;
      sql.Clear;
      sql.Add('select A.CKNO from CK_Cloth_CR A inner join CK_Cloth_KC B on A.JYID=B.JYID and A.Cycles=B.Cycles    ');
      sql.Add('where A.CRFlag=''出库'' and A.JYID=' + quotedstr(trim(FSMStr)));

      Open;
    end;
    if ADOQueryTemp.IsEmpty = False then
    begin
      if Trim(ADOQueryTemp.fieldbyname('CKNO').AsString) = Trim(CKNO.Text) then
      begin
        raise Exception.Create('已扫描');
      end
      else
      begin
        raise Exception.Create('已出库暂停发货');
      end;
    end;

    Result := True;
  except
    Result := false;
    application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0);
//    PlaySound('wav\'+Exception(ExceptObject).Message+'.wav', 0, SND_FILENAME or SND_ASYNC);
  end;
end;

function TfrmTradeClothDROutEdit.JudgeBao(): Boolean;
begin
  try

    if Trim(CKNO.Text) = '' then
      raise Exception.Create('未扫描申请单暂停发货!');

    with ADOQueryTemp do
    begin
      Close;
      sql.Clear;
      sql.Add('select   * from JY_Cloth A   ');
      sql.Add('where  edtScan=' + quotedstr(trim(FSMStr)));
      Open;
    end;

    if ADOQueryTemp.IsEmpty then
      raise Exception.Create('条码错误暂停发货!');

    with ADOQueryTemp do
    begin
      Close;
      sql.Clear;
      sql.Add('select A.CRFlag from CK_Cloth_CR A inner join CK_Cloth_KC B on A.JYID=B.JYID and A.Cycles=B.Cycles    ');
      sql.Add('where A.CRFlag=''入库'' and A.edtScan=' + quotedstr(trim(FSMStr)));
      Open;
    end;
    if ADOQueryTemp.IsEmpty then
    begin
      raise Exception.Create('未入库暂停发货');
    end;

    with ADOQueryTemp do
    begin
      Close;
      sql.Clear;

      sql.Add('select A.CRFlag from CK_Cloth_CR A inner join CK_Cloth_KC B on A.JYID=B.JYID and A.Cycles=B.Cycles    ');
      sql.Add('where A.CRFlag=''出库'' and A.edtScan=' + quotedstr(trim(FSMStr)));

      Open;
    end;
    if not ADOQueryTemp.IsEmpty then
      raise Exception.Create('已扫描!');

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

procedure TfrmTradeClothDROutEdit.SaveCKBao();
begin
  try
    ADOQueryCmd.Connection.BeginTrans;

    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('UPDATE CK_Cloth_KC Set  ');
      sql.add(' Valid=''N''  ');
      sql.Add(' where exists(select JYID from CK_Cloth_CR X where CK_Cloth_KC.JYID=X.JYID and X.CRFlag=''入库'' and X.edtScan=' + Quotedstr(FSMStr) + ')  ');
      ExecSQL;
    end;
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('UPDATE CK_Cloth_CR Set  ');
      sql.add(' CRTime=getdate(),CRType=''扫描出库'',CRFlag=''出库''  ');
      sql.add(',CKNO=' + Quotedstr(CKNO.Text));
      sql.Add(' where exists(select JYID from CK_Cloth_CR X where CK_Cloth_CR.JYID=X.JYID and X.CRFlag=''入库'' and X.edtScan=' + Quotedstr(FSMStr) + ')  ');
      sql.Add('and CK_Cloth_CR.CRFlag=''待出库''  ');
      ExecSQL;
    end;
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('UPDATE JY_Cloth Set  JYCRType=''已出库''  ');
      sql.Add(' where exists (select JYID from CK_Cloth_CR X where JY_Cloth.JYID=X.JYID and X.CRFlag=''入库'' and X.edtScan=' + Quotedstr(FSMStr) + ')  ');
      SQL.Add(' and JY_Cloth.JYCRType=''已入库'' ');
      ExecSQL;
    end;

    ADOQueryCmd.Connection.CommitTrans;
  except
    ADOQueryCmd.Connection.RollbackTrans;
    application.MessageBox('出库失败！', '提示信息', 0);
  end;
end;

function TfrmTradeClothDROutEdit.JudgeSQD(): Boolean;
begin
  Result := false;
  try
    with ADOQueryTemp do
    begin
      Close;
      sql.Clear;
      sql.Add('select * from FHSQ_Main A inner join FHSQ_Sub B on A.FSID=B.FSID where A.FSID=''' + Trim(FSMStr) + '''');
      Open;
    end;
    if ADOQueryTemp.IsEmpty then
      raise Exception.Create('申请单不存在暂停发货!');

    if Trim(CKNO.Text) <> '' then
    begin
      FCKNO := Trim(CKNO.Text);
    end;
    CKNO.Text := Trim(FSMStr);
    if FSMStr <> FCKNO then
    begin
      InitCKGrid();
      InitSQGrid();

    end;

    Result := True;
  except
    Result := false;
    application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0);
//      PlaySound('未扫描申请单暂停发货.wav', 0, SND_FILENAME or SND_ASYNC);
  end;
end;

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

procedure TfrmTradeClothDROutEdit.FormDestroy(Sender: TObject);
begin
  inherited;
  frmTradeClothDROutEdit := nil;
end;

procedure TfrmTradeClothDROutEdit.FormShow(Sender: TObject);
begin
  inherited;
  edtScan.SetFocus;
  ReadCxGrid('扫描出库Tv4', Tv4, '发货申请');
  ReadCxGrid('扫描出库Tv3', Tv3, '发货申请');
  CRTime.DateTime := SGetServerDate(ADOQueryTemp);
end;

procedure TfrmTradeClothDROutEdit.edtScanKeyPress(Sender: TObject; var Key: Char);
var
  maxno, SMFlag, KYCKFlag, FMainId, ff: string;
  FFQty: Integer;
begin

  if Key = #13 then
  begin
    FSMStr := TRIM(edtScan.Text);
    if Copy(FSMStr, 1, 2) = 'SM' then
    begin
      if not JudgeSQD() then
        exit;
    end
    else
    begin
      if Trim(edtIsSMTH.Text) = '' then
      begin
        if Copy(FSMStr, 1, 2) = 'BI' then
        begin
          if not JudgeBao() then
            exit;
          SaveCKBao();
          PlaySound('wav/正确.wav', 0, SND_FILENAME or SND_ASYNC);
        end
        else
        begin
          if not JudgeJTM() then
            exit;
          SaveCKJTM();
          PlaySound('wav/正确.wav', 0, SND_FILENAME or SND_ASYNC);
        end;
      end
      else
      begin
        if JudgeJTMCX() then  //检测卷条码
          SaveCKJTMCX();
      end;

      with ADOQueryCmd do
      begin
        Close;
        sql.Clear;
        sql.Add('exec P_FH_UP_FHQty ''' + Trim(CKNO.Text) + '''');
        ExecSQL;
      end;
      InitSQGrid();
      InitCKGrid();
    end;

    edtScan.Text := '';

  end;

end;

procedure TfrmTradeClothDROutEdit.Button2Click(Sender: TObject);
begin
  WriteCxGrid('扫描出库Tv4', Tv4, '发货申请');
  WriteCxGrid('扫描出库Tv3', Tv3, '发货申请');
  Close;

end;

procedure TfrmTradeClothDROutEdit.Button1Click(Sender: TObject);
var
  MKey: Char;
begin
  MKey := #13;
//  try
//    frmFHSQListSel := TfrmFHSQListSel.Create(self);
//    with frmFHSQListSel do
//    begin
//      if ShowModal = 1 then
//      begin
//        edtScan.Text := Trim(Order_Main.fieldbyname('FSID').AsString);
//        edtScanKeyPress(edtScan, MKey);
//      end;
//    end;
//  finally
//    frmFHSQListSel.Free;
//  end;
end;

procedure TfrmTradeClothDROutEdit.edtIsSMTHClick(Sender: TObject);
begin
  if Trim(edtIsSMTH.Text) = '' then
    edtIsSMTH.Text := '√'
  else
    edtIsSMTH.Text := '';
end;

procedure TfrmTradeClothDROutEdit.btn1Click(Sender: TObject);
var
  MKey: Char;
begin
  MKey := #13;
  CZZT := '选择库存';
  fcuowu := '1';
//  try
//    frmCKProductCPKCListSel := TfrmCKProductCPKCListSel.Create(Application);
//    with frmCKProductCPKCListSel do
//    begin
////      CustomerNoName.text := trim(Self.KHName.text);
//      if ShowModal = 1 then
//      begin
//        with frmCKProductCPKCListSel.CDS_Main do
//        begin
//          First;
//          while not Eof do
//          begin
//            if Fieldbyname('ssel').AsBoolean then
//            begin
//
//              Self.edtScan.Text := Trim(Fieldbyname('JYID').AsString);
//              edtScanKeyPress(Self.edtScan, MKey);
//              if fcuowu = '错误' then
//              begin
//                Break;
//              end;
//              Sleep(200);
//            end;
//            Next;
//          end;
//        end;
//      end;
//    end;
//  finally
//    frmCKProductCPKCListSel.Free;
//  end;
  InitCKGrid();
end;

procedure TfrmTradeClothDROutEdit.InitSQGrid();
begin
  if CKNO.Text <> '' then
  begin

    with ADOQueryTemp do
    begin

      Close;
      sql.Clear;
      sql.Add('SELECT b.*,A.ConNo FROM FHSQ_Sub B');
      sql.Add('inner join FHSQ_Main  A ON A.FSId=B.FSId ');
      sql.Add('WHERE B.FSId=''' + Trim(CKNO.Text) + '''');


//      ShowMessage(SQL.Text);
      Open;

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

end;

procedure TfrmTradeClothDROutEdit.InitCKGrid();
begin
  if CKNO.Text <> '' then
  begin
    with ADOQueryTemp do
    begin
      Close;
      sql.Clear;
      sql.Add('select *');
      sql.Add(' from CK_Cloth_CR A');
      sql.Add(' where A.CKNo=''' + Trim(CKNO.Text) + '''');
      Open;
    end;
    SCreateCDS(ADOQueryTemp, CDS_MainSel);
    SInitCDSData(ADOQueryTemp, CDS_MainSel);
  end;

end;

end.

