unit U_TatClothDROutEdit;

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, dxSkinsCore, dxSkinsDefaultPainters,
  cxNavigator, dxDateRanges, dxBarBuiltInMenu, U_BaseList, dxSkinBasic,
  dxSkinBlack, dxSkinBlue, dxSkinBlueprint, dxSkinCaramel, dxSkinCoffee,
  dxSkinDarkroom, dxSkinDarkSide, dxSkinDevExpressDarkStyle,
  dxSkinDevExpressStyle, dxSkinFoggy, dxSkinGlassOceans, dxSkinHighContrast,
  dxSkiniMaginary, dxSkinLilian, dxSkinLiquidSky, dxSkinLondonLiquidSky,
  dxSkinMcSkin, dxSkinMetropolis, dxSkinMetropolisDark, dxSkinMoneyTwins,
  dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green,
  dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinOffice2010Black,
  dxSkinOffice2010Blue, dxSkinOffice2010Silver, dxSkinOffice2013DarkGray,
  dxSkinOffice2013LightGray, dxSkinOffice2013White, dxSkinOffice2016Colorful,
  dxSkinOffice2016Dark, dxSkinOffice2019Black, dxSkinOffice2019Colorful,
  dxSkinOffice2019DarkGray, dxSkinOffice2019White, dxSkinPumpkin, dxSkinSeven,
  dxSkinSevenClassic, dxSkinSharp, dxSkinSharpPlus, dxSkinSilver,
  dxSkinSpringtime, dxSkinStardust, dxSkinSummer2008, dxSkinTheAsphaltWorld,
  dxSkinTheBezier, dxSkinValentine, dxSkinVisualStudio2013Blue,
  dxSkinVisualStudio2013Dark, dxSkinVisualStudio2013Light, dxSkinVS2010,
  dxSkinWhiteprint, dxSkinWXI, dxSkinXmas2008Blue, dxScrollbarAnnotations;

type
  TfrmTatClothDROutEdit = 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;
    ToCoName: 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;
    OutNo: TEdit;
    Tv3Column2: TcxGridDBColumn;
    Tv3Column3: TcxGridDBColumn;
    GPM_2: TcxGridPopupMenu;
    TV4Column5: TcxGridDBColumn;
    Tv3Column4: 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();
    procedure PlayWav(MWav: string);
    function JudgeSQD(): Boolean;
    function SaveCKJTM(MStkIds: string): Boolean;//保存出库
    procedure SaveCKJTMCX();   //撤销出库
  public
    { Public declarations }
  end;

var
  frmTatClothDROutEdit: TfrmTatClothDROutEdit;

implementation

uses
  U_DataLink, U_RTFun, MMSystem, U_TatDRSel;

procedure TfrmTatClothDROutEdit.PlayWav(MWav: string);
begin
  if FileExists(PChar(ExtractFilePath(Application.ExeName) + 'wav\' + MWav + '.wav')) then
    PlaySound(PChar(ExtractFilePath(Application.ExeName) + 'wav\' + MWav + '.wav'), 0, SND_ASYNC);
end;

procedure TfrmTatClothDROutEdit.SaveCKJTMCX();
begin

  try
    if Trim(OutNo.Text) = '' then
      raise Exception.Create('出库单号不能为空!');

    if CDS_MainSel.IsEmpty then
      raise Exception.Create('无可撤销的数据!');
    try
      ADOQueryCmd.Connection.BeginTrans;
      with ADOQueryCmd do
      begin
        Close;
        Sql.Clear;
        sql.Add('insert into Finance_Need_Up(UType,UDataId,UOperation,UOperator,UModule) ');
        sql.Add('values(''贸易成品出库''    ');
        sql.Add(',' + quotedstr(OutNo.Text));
        sql.Add(',''出库'' ');
        sql.Add(',' + quotedstr(dname));
        sql.Add(',' + quotedstr(self.Caption));
        sql.Add(')  ');

        Sql.Add('exec P_Tat_Cloth_ReOut ');
        Sql.Add(' @StkIds=' + quotedstr(trim(FSMStr)));
        Sql.Add(',@IOIDS=' + quotedstr(trim('')));
        Sql.Add(',@FillId=' + Quotedstr(DCode));
        Sql.Add(',@Filler=' + Quotedstr(DName));
        Open;
      end;
      if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then
      begin
        raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString)));
      end;
      ADOQueryCmd.Connection.CommitTrans;
      PlayWav('正确');

    except
      ADOQueryCmd.Connection.RollbackTrans;
      raise Exception.Create(PChar(Exception(ExceptObject).Message));
    end;

    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('exec P_Tat_Cloth_DR @OutNo=' + Quotedstr(Trim(OutNo.Text)));
      Open;
    end;
    if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then
    begin
      raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString)));
    end;
  except

    application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0);
//    PlayWav('发货错误');
  end;

end;

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

  InitCKGrid();
end;

function TfrmTatClothDROutEdit.SaveCKJTM(MStkIds: string): Boolean;
begin
  try
    if Trim(OutNo.Text) = '' then
      raise Exception.Create('出库单号不能为空!');
//    if CDS_2.IsEmpty then
//      raise Exception.Create('未选单不能扫描出库!');
//
//    if not CDS_1.Locate('StkId', Trim(FScan), []) then
//      raise Exception.Create('此条码不包含在待出库的卷数据中');

    try

      with ADOQueryCmd do
      begin
        Close;
        sql.Clear;
        sql.Add('exec P_Tat_Cloth_DRJudge @OutNo=' + Quotedstr(Trim(OutNo.Text)));
        sql.Add(',@StkIds=' + Quotedstr(Trim(MStkIds)));
        Open;
      end;
      if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then
      begin
        raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString)));
      end;

      ADOQueryCmd.Connection.BeginTrans;

      with ADOQueryCmd do
      begin
        Close;
        Sql.Clear;
        sql.Add('insert into Finance_Need_Up(UType,UDataId) values(''贸易成品出库'',' + quotedstr(OutNo.Text) + ')  ');

        Sql.Add('exec P_Tat_Cloth_Out ');
        Sql.Add(' @StkIds=' + quotedstr(trim(MStkIds)));
        Sql.Add(',@IOTime=' + Quotedstr(FormatDateTime('yyyy-MM-dd', CRTime.DateTime)));
        Sql.Add(',@IOType=' + Quotedstr(crtype.Text));
        Sql.Add(',@IONO=' + Quotedstr(OutNo.Text));
        Sql.Add(',@FillId=' + Quotedstr(DCode));
        Sql.Add(',@Filler=' + Quotedstr(DName));
        Open;
      end;
      if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then
      begin
        raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString)));
      end;
      ADOQueryCmd.Connection.CommitTrans;

    except
      ADOQueryCmd.Connection.RollbackTrans;
      raise Exception.Create(PChar(Exception(ExceptObject).Message));
    end;
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('exec P_Tat_Cloth_DR @OutNoS=' + Quotedstr(Trim(OutNo.Text)));
      Open;
    end;
    if ADOQueryCmd.FieldByName('intReturn').AsInteger = -1 then
    begin
      raise Exception.Create(pchar(trim(ADOQueryCmd.FieldByName('ShowMsg').AsString)));
    end;

    PlayWav('正确');
    Result := True;
  except
    Result := False;
    application.MessageBox(PChar(Exception(ExceptObject).Message), '提示信息', 0);
//    PlayWav('发货错误');
  end;

end;

{$R *.dfm}

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

    if Trim(OutNo.Text) <> '' then
    begin
      FCKNO := Trim(OutNo.Text);
    end;
    OutNo.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 TfrmTatClothDROutEdit.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  Action := caFree;
end;

procedure TfrmTatClothDROutEdit.FormDestroy(Sender: TObject);
begin
  inherited;
  frmTatClothDROutEdit := nil;
end;

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

procedure TfrmTatClothDROutEdit.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, 3) = 'TDM' then
    begin
      if not JudgeSQD() then
        exit;
    end
    else
    begin
      if Trim(edtIsSMTH.Text) = '' then
      begin
        if Copy(FSMStr, 1, 2) = 'BI' then
        begin
          with ADOQueryTemp do
          begin
            Close;
            sql.Clear;
            sql.Add(' select StkIdS=CAST((select distinct lTRIM(RTRIM(X.StkId)) + '','' ');
            sql.Add('  from Tat_Cloth_Stock X where X.PacketId=' + quotedstr(FSMStr) + ' for xml path('''') ) AS NVARCHAR(MAX))     ');
            Open;
          end;
          if SaveCKJTM(ADOQueryTemp.FieldByName('StkIdS').AsString) then
          begin
            PlayWav('正确');
          end
          else
            exit;
        end
        else
        begin
          if SaveCKJTM(FSMStr) then
          begin
            PlayWav('正确');
          end
          else
            exit;
        end;
      end
      else
      begin
        SaveCKJTMCX();
      end;

      InitSQGrid();
      InitCKGrid();
    end;

    edtScan.Text := '';

  end;

end;

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

end;

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

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

procedure TfrmTatClothDROutEdit.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 TfrmTatClothDROutEdit.InitSQGrid();
begin
  if OutNo.Text <> '' then
  begin
    with ADOQueryTemp do
    begin
      Close;
      sql.Clear;
      sql.Add('SELECT * FROM Tat_Cloth_DR_Sub B');
      sql.Add('inner join Tat_Cloth_DR_Main  A ON A.DRMID=B.DRMID ');
      sql.Add('WHERE B.DRMID=''' + Trim(OutNo.Text) + '''');
      Open;
    end;
    SCreateCDS(ADOQueryTemp, DS1);
    SInitCDSData(ADOQueryTemp, DS1);
    crtype.Text := Trim(ADOQueryTemp.FieldByName('OutType').AsString);
    ToCoName.Text := Trim(ADOQueryTemp.FieldByName('ToCoName').AsString);
  end;
end;

procedure TfrmTatClothDROutEdit.InitCKGrid();
begin
  if OutNo.Text <> '' then
  begin
    with ADOQueryTemp do
    begin
      Close;
      sql.Clear;
      sql.Add('select * ');
      sql.Add(' from Tat_Cloth_Stock A inner join Tat_Cloth_IO B on A.STKID=B.StkId ');
      sql.Add(' where B.IONO=''' + Trim(OutNo.Text) + '''');
      Open;
    end;
    SCreateCDS(ADOQueryTemp, CDS_MainSel);
    SInitCDSData(ADOQueryTemp, CDS_MainSel);
  end;

end;

end.

