unit U_YMTFHSQList;

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, cxCheckBox, cxCalendar, cxSplitter, RM_Dataset, RM_System,
  RM_Common, RM_Class, RM_GridReport, RM_e_Xls, Menus, cxPC, cxButtonEdit,
  RM_E_llPDF, cxDropDownEdit, cxTextEdit, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdHTTP, cxLookAndFeels, cxLookAndFeelPainters,
  cxNavigator, dxSkinsCore, dxSkinDarkRoom, dxSkinOffice2013White,
  dxSkinSharpPlus, dxSkinSpringTime, dxSkinsDefaultPainters, dxSkinscxPCPainter,
  dxSkinBlack, dxSkinBlue, dxSkinBlueprint, dxSkinCaramel, dxSkinCoffee,
  dxSkinDarkSide, dxSkinDevExpressDarkStyle, dxSkinDevExpressStyle, dxSkinFoggy,
  dxSkinGlassOceans, dxSkinHighContrast, dxSkiniMaginary, dxSkinLilian,
  dxSkinLiquidSky, dxSkinLondonLiquidSky, dxSkinMcSkin, dxSkinMetropolis,
  dxSkinMetropolisDark, dxSkinMoneyTwins, dxSkinOffice2007Black,
  dxSkinOffice2007Blue, dxSkinOffice2007Green, dxSkinOffice2007Pink,
  dxSkinOffice2007Silver, dxSkinOffice2010Black, dxSkinOffice2010Blue,
  dxSkinOffice2010Silver, dxSkinOffice2013DarkGray, dxSkinOffice2013LightGray,
  dxSkinPumpkin, dxSkinSeven, dxSkinSevenClassic, dxSkinSharp, dxSkinSilver,
  dxSkinStardust, dxSkinSummer2008, dxSkinTheAsphaltWorld, dxSkinValentine,
  dxSkinVS2010, dxSkinWhiteprint, dxSkinXmas2008Blue, BtnEdit;

type
  TfrmYMTFHSQList = class(TForm)
    ToolBar1: TToolBar;
    TBRafresh: TToolButton;
    TBAdd: TToolButton;
    TBEdit: TToolButton;
    TBDel: TToolButton;
    TBPrint: TToolButton;
    TBClose: TToolButton;
    Tv1: TcxGridDBTableView;
    cxGrid1Level1: TcxGridLevel;
    cxGrid1: TcxGrid;
    cxGridPopupMenu1: TcxGridPopupMenu;
    ADOQueryCmd: TADOQuery;
    ADOQueryMain: TADOQuery;
    ADOQueryTemp: TADOQuery;
    DataSource1: TDataSource;
    v1OrdDate: TcxGridDBColumn;
    v1OrdPerson1: TcxGridDBColumn;
    Order_Main: TClientDataSet;
    RMDB_Main: TRMDBDataSet;
    RMXLSExport1: TRMXLSExport;
    ToolButton1: TToolButton;
    ADOQueryPrint: TADOQuery;
    CDS_Print: TClientDataSet;
    v1Column4: TcxGridDBColumn;
    Panel1: TPanel;
    Label1: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    BegDate: TDateTimePicker;
    EndDate: TDateTimePicker;
    SHDanWei: TEdit;
    Salesman: TEdit;
    tchk: TToolButton;
    Tnochk: TToolButton;
    cxSplitter1: TcxSplitter;
    ADOQuerySub: TADOQuery;
    DataSource2: TDataSource;
    v1Column8: TcxGridDBColumn;
    Label2: TLabel;
    //RMllPDFExport1: TRMllPDFExport;
    cxGrid2: TcxGrid;
    Tv2: TcxGridDBTableView;
    v1Column5: TcxGridDBColumn;
    cxGridLevel1: TcxGridLevel;
    ClientDataSet2: TClientDataSet;
    cxGridPopupMenu2: TcxGridPopupMenu;
    CDS_Note: TClientDataSet;
    v2Column2: TcxGridDBColumn;
    RM1: TRMGridReport;
    v1Column11: TcxGridDBColumn;
    v1Column13: TcxGridDBColumn;
    v1Column17: TcxGridDBColumn;
    v1Column18: TcxGridDBColumn;
    v1Column19: TcxGridDBColumn;
    v2Column1: TcxGridDBColumn;
    v2Column3: TcxGridDBColumn;
    v1Column1: TcxGridDBColumn;
    v1Column7: TcxGridDBColumn;
    v1Column10: TcxGridDBColumn;
    v1Column21: TcxGridDBColumn;
    v2Column9: TcxGridDBColumn;
    v2Column10: TcxGridDBColumn;
    v2Column12: TcxGridDBColumn;
    v1Column2: TcxGridDBColumn;
    CDSUser: TClientDataSet;
    IdHTTP1: TIdHTTP;
    v2Column6: TcxGridDBColumn;
    ComboBox1: TComboBox;
    Label3: TLabel;
    cxStyleRepository1: TcxStyleRepository;
    cxStyle1: TcxStyle;
    v1Column3: TcxGridDBColumn;
    v2Column4: TcxGridDBColumn;
    v2Column5: TcxGridDBColumn;
    ToolButton2: TToolButton;
    Panel3: TPanel;
    Label25: TLabel;
    btnChk: TButton;
    Button3: TButton;
    CRType: TComboBox;
    v1Column6: TcxGridDBColumn;
    Tv1Column1: TcxGridDBColumn;
    TbAdd2: TToolButton;
    Tv2Column1: TcxGridDBColumn;
    OutStock: TToolButton;
    PrintMD: TToolButton;
    ToolButton3: TToolButton;
    //RMllPDFExport1: TRMllPDFExport;
    procedure FormDestroy(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure TBCloseClick(Sender: TObject);
    procedure TBEditClick(Sender: TObject);
    procedure TBDelClick(Sender: TObject);
    procedure TBPrintClick(Sender: TObject);
    procedure TBRafreshClick(Sender: TObject);
    procedure TBAddClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure CheckBox2Click(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure tchkClick(Sender: TObject);
    procedure TnochkClick(Sender: TObject);
    procedure Tv1FocusedRecordChanged(Sender: TcxCustomGridTableView; APrevFocusedRecord, AFocusedRecord: TcxCustomGridRecord; ANewItemRecordFocusingChanged: Boolean);
    procedure ComboBox1Change(Sender: TObject);
    procedure BegDateChange(Sender: TObject);
    procedure SHDanWeiKeyPress(Sender: TObject; var Key: Char);
    procedure ToolButton2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure btnChkClick(Sender: TObject);
    procedure TbAdd2Click(Sender: TObject);
    procedure OutStockClick(Sender: TObject);
    procedure PrintMDClick(Sender: TObject);
    procedure ToolButton3Click(Sender: TObject);
  private
    procedure InitGrid();
    procedure InitSubGrid();
    procedure InitForm();
    function DelData(): Boolean;
    procedure SendMessage(Mfsid: string);
    function BatchStockOut(FSID: string; UserID: string): Boolean;

    { Private declarations }
  public
    FFInt: Integer;
    canshu1, FZZType: string;  
    { Public declarations }
  end;

var
  frmYMTFHSQList: TfrmYMTFHSQList;

implementation

uses
  U_DataLink, U_YMTFHSQInPut, U_Fun, U_ZDYHelp, U_LabelPrintFun, U_YMTFHSQInPut2,
  superobject;

{$R *.dfm}
function TfrmYMTFHSQList.BatchStockOut(FSID: string; UserID: string): Boolean;
var
  IdHttp: TIdHTTP;
  Url, ResponseStr: string;
  ResponseStream: TStringStream;
  vJson1: ISuperObject;
begin
  Result := False;

//   参数验证
  if Trim(FSID) = '' then
  begin
    ShowMessage('MXID不能为空');
    Exit;
  end;

  if Trim(UserID) = '' then
  begin
    ShowMessage('用户ID不能为空');
    Exit;
  end;

  IdHttp := TIdHTTP.Create(nil);
  ResponseStream := TStringStream.Create('');
  try
    try
      // GET请求 - 不需要设置ContentType
      // 参数直接放在URL中
      // 接口URL（参数编码在URL中）
      Url := 'http://www.rightsoft.top/YunXiang/api/YMTCK/batchStockOut?' + 'FSID=' + Trim(FSID) + '&userid=' + Trim(UserID);
//      ShowMessage(Url);
      // 发送GET请求
      IdHttp.Get(Url, ResponseStream);

      // 获取响应内容
      ResponseStr := ResponseStream.DataString;

      // 解析JSON响应
      vJson1 := SO(ResponseStr);
//      ShowMessage(ResponseStr);
      if (vJson1.O['code'] <> nil) then
      begin
        if (vJson1.O['code'].AsInteger = 10000) then
        begin
          Result := True;
          ShowMessage('自动出库成功！');
        end
        else
        begin
          // 获取错误信息
          if vJson1.O['message'] <> nil then
            ShowMessage('自动出库失败: ' + vJson1.O['message'].AsString)
          else
            ShowMessage('自动出库失败，未知错误');
        end;
      end
      else
      begin
        ShowMessage('接口返回格式错误');
      end;

    except
      on e: Exception do
      begin
        ShowMessage('网络请求异常: ' + e.Message);
      end;
    end;

  finally
    IdHttp.Free;
    ResponseStream.Free;
  end;
end;

procedure TfrmYMTFHSQList.SendMessage(Mfsid: string);
begin
  if FZZType = '纬编' then
  begin
    with ADOQueryTemp do
    begin
      Close;
      SQL.Clear;
      sql.Add(' select * from  SY_User A where ISNULL(wxid,'''')<>''''');
      SQL.Add(' and exists( select * from SY_Purview X where A.UserID=X.UserID and ModuleID=''09'' and ModuleSubID=''03'' ) ');
      Open;
    end;
  end
  else
  begin
    with ADOQueryTemp do
    begin
      Close;
      SQL.Clear;
      sql.Add(' select * from  SY_User A where ISNULL(wxid,'''')<>''''');
      SQL.Add(' and exists( select * from SY_Purview X where A.UserID=X.UserID and ModuleID=''09'' and ModuleSubID=''13'' ) ');
      Open;
    end;
  end;
  SCreateCDS20(ADOQueryTemp, CDSUser);
  SInitCDSData20(ADOQueryTemp, CDSUser);
   
//  if ADOQueryTmp.IsEmpty then
//  begin
//    Application.MessageBox('客户未绑定微信,提交失败！','提示信息',0);
//    Exit;
//  end;

  CDSUser.First;
  while not CDSUser.Eof do
  begin
    try
      with ADOQueryCmd do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select * from WeixinMessage where 1<>1');
        Open;
        Append;
        FieldByName('MessageType').Value := 'DeliverApplyToAudit';
        FieldByName('MessageName').Value := '发货申请审核';
        FieldByName('Title').Value := '您有新的发货申请需要审核';
        FieldByName('URL').Value := 'pages/delivery-apply/view?id=' + Trim(Mfsid);
        FieldByName('OpenId').Value := Trim(CDSUser.FieldByName('wxid').AsString);
        FieldByName('Status').Value := '0';
        FieldByName('CreateDate').Value := FormatDateTime('yyyymmdd', SGetServerDateTime(ADOQueryTemp));
        FieldByName('CreateTime').Value := FormatDateTime('HH:mm:ss', SGetServerDateTime(ADOQueryTemp));
        FieldByName('BusinessId').Value := Trim(Mfsid);
        FieldByName('KeyWord1').Value := Trim(Mfsid);
        FieldByName('KeyWord2').Value := '发货申请';
        Post;
      end;
      //GetHTTP(IdHTTP1, 'http://www.rightsoft.top/linghui/api/Message/Send/DeliverApplyToAudit');
    except
      Application.MessageBox('推送失败', '提示', 0);
      Exit;
    end;
    CDSUser.Next;
  end;
end;

procedure TfrmYMTFHSQList.FormDestroy(Sender: TObject);
begin
  frmYMTFHSQList := nil;
end;

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

procedure TfrmYMTFHSQList.FormCreate(Sender: TObject);
begin
  cxgrid1.Align := alClient;
  canshu1 := DParameters1;
end;

procedure TfrmYMTFHSQList.TBCloseClick(Sender: TObject);
begin
  Close;
  WriteCxGrid('发货申请YX', Tv1, '发货申请管理');
  WriteCxGrid('发货申请YXMX', Tv2, '发货申请管理');
end;

procedure TfrmYMTFHSQList.InitGrid();
var
  fwhere, Pwhere: string;
begin
  Pwhere := SGetFilters(Panel1, 1, 2);
  try
    ADOQueryMain.DisableControls;
    with ADOQueryMain do
    begin
      Filtered := False;
      Close;
      sql.Clear;
      Sql.Add(' select A.*  from YMT_FHSQ_Main A');
      sql.Add(' where Valid = ''Y'' ');

      sql.Add(' and filltime>=''' + Trim(FormatDateTime('yyyy-MM-dd', BegDate.Date)) + '''');
      sql.Add(' and filltime<''' + Trim(FormatDateTime('yyyy-MM-dd', EndDate.Date + 1)) + '''');

      if Trim(Self.Caption) = '销售发货申请' then
      begin
        sql.Add(' and CRType in (''销售内销'',''销售外销'')');
      end
      else if Trim(Self.Caption) = '加工发货登记' then
      begin
        sql.Add(' and CRType in (''本厂加工'',''外发加工'')');
      end;

      if ComboBox1.Text = '未审核' then
      begin
        SQL.Add(' and isnull(A.Chker,'''')='''' ');
      end
      else if ComboBox1.Text = '已审核' then
      begin
        SQL.Add(' and isnull(A.Chker,'''')<>'''' ');
      end;

      if Trim(canshu1) <> '高权限' then
      begin
        sql.Add(' and isnull(A.Filler,'''')=''' + Trim(DName) + '''');
      end;
      if Pwhere <> '' then
        sql.Add(' and ' + Pwhere);
      Open;
    end;
    SCreateCDS20(ADOQueryMain, Order_Main);
    SInitCDSData20(ADOQueryMain, Order_Main);
  finally
    ADOQueryMain.EnableControls;
  end;
end;

procedure TfrmYMTFHSQList.InitForm();
begin

  ReadCxGrid('发货申请YX', Tv1, '发货申请管理');
  ReadCxGrid('发货申请YXMX', Tv2, '发货申请管理');

  EndDate.DateTime := SGetServerDate10(ADOQueryTemp);
  BegDate.DateTime := EndDate.DateTime;
  if Trim(Self.Caption) = '销售发货申请' then
  begin
    TBAdd.Visible := True;
    TBAdd2.Visible := False;
    OutStock.Visible := False;
  end
  else if Trim(Self.Caption) = '加工发货登记' then
  begin
    TBAdd2.Visible := True;
    TBAdd.Visible := False;
    PrintMD.Visible := False;
//    Panel4.Visible := False;
  end;

end;

procedure TfrmYMTFHSQList.TBEditClick(Sender: TObject);
begin
  if Order_Main.IsEmpty then
    Exit;
  if trim(Order_Main.fieldbyname('Chker').AsString) <> '' then
  begin
    application.MessageBox('已审核数据无法删除！', '提示信息');
    exit;
  end;
  if Trim(canshu1) <> '高权限' then
  begin
    if Trim(Order_Main.fieldbyname('Filler').AsString) <> Trim(DName) then
    begin
      Application.MessageBox('不能操作他人的数据!', '提示', 0);
      Exit;
    end;
  end;
  with ADOQueryTemp do
  begin
    close;
    sql.Clear;
    sql.Add('select * from YMT_FHSQ_Main');
    sql.Add('where FSID=' + quotedstr(trim(Order_Main.fieldbyname('FSID').AsString)));
    Open;
  end;
  if Trim(ADOQueryTemp.fieldbyname('YSID').AsString) <> '' then
  begin
    Application.MessageBox('已生成应收账款不能修改数据!', '提示', 0);
    Exit;
  end;

  if Trim(Self.Caption) = '销售发货申请' then
  begin
    try
      frmFHSQInPut := TfrmFHSQInPut.Create(Application);
      with frmFHSQInPut do
      begin
        PState := 1;
        FMainId := Trim(Self.Order_Main.fieldbyname('FSID').AsString);
        FZZType := trim(self.FZZType);
        if ShowModal = 1 then
        begin

        end;
      end;
    finally
      frmFHSQInPut.Free;
    end;
  end
  else if Trim(Self.Caption) = '加工发货登记' then
  begin
    try
      frmFHSQInPut2 := TfrmFHSQInPut2.Create(Application);
      with frmFHSQInPut2 do
      begin
        PState := 1;
        FMainId := Trim(Self.Order_Main.fieldbyname('FSID').AsString);
        FZZType := trim(self.FZZType);
        if ShowModal = 1 then
        begin

        end;
      end;
    finally
      frmFHSQInPut2.Free;
    end;
  end;

end;

procedure TfrmYMTFHSQList.TBDelClick(Sender: TObject);
begin
  if Order_Main.IsEmpty then
    Exit;
  if trim(Order_Main.fieldbyname('Chker').AsString) <> '' then
  begin
    application.MessageBox('已审核数据无法删除！', '提示信息');
    exit;
  end;
  if Trim(Order_Main.fieldbyname('Filler').AsString) <> Trim(DName) then
  begin
    Application.MessageBox('不能操作他人的数据!', '提示', 0);
    Exit;
  end;
  with ADOQueryTemp do
  begin
    Close;
    sql.Clear;
    sql.Add('select * from YMT_FHSQ_Sub where FSId=''' + Trim(Order_Main.fieldbyname('FSId').AsString) + '''');
    sql.add(' and isnull(FHPS,0)>0');
    Open;
  end;
  if ADOQueryTemp.IsEmpty = False then
  begin
    Application.MessageBox('已发货不能删除数据!', '提示', 0);
    exit;
  end;
  with ADOQueryTemp do
  begin
    close;
    sql.Clear;
    sql.Add('select * from YMT_FHSQ_Main');
    sql.Add('where FSID=' + quotedstr(trim(Order_Main.fieldbyname('FSID').AsString)));
    Open;
  end;
  if Trim(ADOQueryTemp.fieldbyname('YSID').AsString) <> '' then
  begin
    Application.MessageBox('已生成应收账款不能删除!', '提示', 0);
    Exit;
  end;
  if Application.MessageBox('确定要删除数据吗？', '提示', 32 + 4) <> IDYES then
    Exit;
  if DelData() then
  begin
    Order_Main.Delete;
    InitSubGrid();
  end;
end;

function TfrmYMTFHSQList.DelData(): Boolean;
begin
  try
    Result := false;
    ADOQueryCmd.Connection.BeginTrans;
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('delete YMT_FHSQ_Sub where FSId=''' + Trim(Order_Main.fieldbyname('FSId').AsString) + '''');
      ExecSQL;
    end;
    with ADOQueryCmd do
    begin
      Close;
      sql.Clear;
      sql.Add('delete YMT_FHSQ_Main where FSId=''' + Trim(Order_Main.fieldbyname('FSId').AsString) + '''');
      ExecSQL;
    end;

    ADOQueryCmd.Connection.CommitTrans;
    Result := True;
  except
    ADOQueryCmd.Connection.RollbackTrans;
    Result := False;
    Application.MessageBox('数据删除异常！', '提示', 0);
  end;
end;

procedure TfrmYMTFHSQList.TBPrintClick(Sender: TObject);
var
  MPrintJson, JsonResult, msql: string;
begin

  if Order_Main.IsEmpty then
    Exit;
  msql := ' select A.*,B.*  from YMT_FHSQ_Main A inner join YMT_FHSQ_Sub B on A.FSId=B.FSId where A.FSId=''' + Trim(Order_Main.fieldbyname('FSId').AsString) + '''';
  if Trim(Self.Caption) = '销售发货申请' then
  begin
    MPrintJson := '{ "LBName": "销售发货申请单","QrCodeField": "ssid","DConString": "' + DConString + '","DCode": "' + DCode + '","DName": "' + DName + '","IsPreview": true,"printerIndex": 0,"ExportFileType": "", "PrtArgs": [ {"SqlStr": "' + msql + '" }] }';
  end
  else if Trim(Self.Caption) = '加工发货登记' then
  begin
    MPrintJson := '{ "LBName": "加工发货申请单","QrCodeField": "ssid","DConString": "' + DConString + '","DCode": "' + DCode + '","DName": "' + DName + '","IsPreview": true,"printerIndex": 0,"ExportFileType": "", "PrtArgs": [ {"SqlStr": "' + msql + '" }] }';
  end;

  FunPrint(Application, PChar(MPrintJson));

end;

procedure TfrmYMTFHSQList.TBRafreshClick(Sender: TObject);
begin
  InitGrid();
  InitSubGrid();
end;

procedure TfrmYMTFHSQList.TBAddClick(Sender: TObject);
var
  maxno: string;
begin
  try
    frmFHSQInPut := TfrmFHSQInPut.Create(Application);
    with frmFHSQInPut do
    begin
      PState := 0;
      FMainId := '';
      FZZType := trim(self.FZZType);
      if ShowModal = 1 then
      begin

      end;
    end;
  finally
    frmFHSQInPut.Free;
  end;
  InitGrid();
end;

procedure TfrmYMTFHSQList.FormShow(Sender: TObject);
begin
  InitForm();
  InitGrid();
end;

procedure TfrmYMTFHSQList.CheckBox1Click(Sender: TObject);
begin
  InitGrid();
end;

procedure TfrmYMTFHSQList.CheckBox2Click(Sender: TObject);
begin
  TBRafresh.Click;
end;

procedure TfrmYMTFHSQList.ToolButton1Click(Sender: TObject);
begin
  if Order_Main.IsEmpty then
    Exit;
  try
    frmFHSQInPut := TfrmFHSQInPut.Create(Application);
    with frmFHSQInPut do
    begin
      PState := 1;
      FMainId := Trim(Self.Order_Main.fieldbyname('FSID').AsString);
      FZZType := trim(self.FZZType);
      ToolBar2.Visible := False;
      TBSave.Visible := False;
      ScrollBox1.Enabled := False;
      Tv1.OptionsSelection.CellSelect := False;
      if ShowModal = 1 then
      begin

      end;
    end;
  finally
    frmFHSQInPut.Free;
  end;
end;

procedure TfrmYMTFHSQList.tchkClick(Sender: TObject);
begin
  if Order_Main.IsEmpty then
    exit;

  if trim(Order_Main.fieldbyname('Chker').AsString) <> '' then
  begin
    application.MessageBox('已审核数据无需审核！', '提示信息');
    exit;
  end;

  with ADOQueryTemp do
  begin
    close;
    sql.Clear;
    sql.Add('select * from   KH_Main  ');
    sql.Add('where KHNO=' + quotedstr(trim(Order_Main.fieldbyname('KHNO').AsString)));
    open;
  end;

  if trim(ADOQueryTemp.fieldbyname('status').AsString) <> '1' then
  begin
    application.MessageBox('客户未审核', '提示信息');
    exit;
  end;

  try
    with ADOQueryCmd do
    begin
      close;
      sql.Clear;
      sql.Add('update  YMT_FHSQ_Main SET Chker=''' + Trim(DName) + ''',ChkTime=getdate(),ChkStatus=''审核通过'' ');
      sql.Add('where FSID=' + quotedstr(trim(Order_Main.fieldbyname('FSID').AsString)));
      execsql;
    end;
//    Order_Main.Delete;
    InitGrid();
    application.MessageBox('审核成功！', '提示信息');
  except
    application.MessageBox('审核失败！', '提示信息', 0);
  end;
end;

procedure TfrmYMTFHSQList.InitSubGrid();
begin
  with ADOQueryTemp do
  begin
    Close;
    sql.Clear;
    if Order_Main.IsEmpty = False then
      sql.Add('select * from YMT_FHSQ_Sub A where A.FSId=''' + Trim(Order_Main.fieldbyname('FSId').AsString) + '''')
    else
      sql.Add('select * from YMT_FHSQ_Sub A where 1=2');
    Open;
  end;
  SCreateCDS20(ADOQueryTemp, ClientDataSet2);
  SInitCDSData20(ADOQueryTemp, ClientDataSet2);
end;

procedure TfrmYMTFHSQList.TnochkClick(Sender: TObject);
begin
  if Order_Main.IsEmpty then
    exit;
  if trim(Order_Main.fieldbyname('Chker').AsString) = '' then
  begin
    application.MessageBox('当前数据未审核！', '提示信息');
    exit;
  end;
  with ADOQueryTemp do
  begin
    close;
    sql.Clear;
    sql.Add('select * from YMT_FHSQ_Main');
    sql.Add('where FSID=' + quotedstr(trim(Order_Main.fieldbyname('FSID').AsString)));
    Open;
  end;
  if Trim(ADOQueryTemp.fieldbyname('YSID').AsString) <> '' then
  begin
    Application.MessageBox('已生成应收账款不能撤销!', '提示', 0);
    Exit;
  end;
  try

    with ADOQueryCmd do
    begin
      close;
      sql.Clear;
      sql.Add('update  YMT_FHSQ_Main SET Chker=Null,ChkTime=Null,ChkStatus=Null ');
      sql.Add('where FSID=' + quotedstr(trim(Order_Main.fieldbyname('FSID').AsString)));
      execsql;
    end;
//    Order_Main.Delete;
    InitGrid();
    application.MessageBox('撤销成功！', '提示信息');
  except
    application.MessageBox('撤销失败！', '提示信息', 0);
  end;
end;

procedure TfrmYMTFHSQList.Tv1FocusedRecordChanged(Sender: TcxCustomGridTableView; APrevFocusedRecord, AFocusedRecord: TcxCustomGridRecord; ANewItemRecordFocusingChanged: Boolean);
begin
  with ADOQueryTemp do
  begin
    Close;
    sql.Clear;
    sql.Add('select A.*  from YMT_FHSQ_Sub A ');
    sql.Add(' where A.FSId=''' + Trim(Order_Main.fieldbyname('FSId').AsString) + '''');
    Open;
  end;
  SCreateCDS20(ADOQueryTemp, ClientDataSet2);
  SInitCDSData20(ADOQueryTemp, ClientDataSet2);
end;

procedure TfrmYMTFHSQList.ComboBox1Change(Sender: TObject);
begin
  InitGrid();
end;

procedure TfrmYMTFHSQList.BegDateChange(Sender: TObject);
begin
  InitGrid();
end;

procedure TfrmYMTFHSQList.SHDanWeiKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
    InitGrid();
end;

procedure TfrmYMTFHSQList.ToolButton2Click(Sender: TObject);
begin
  Panel3.Visible := True;
end;

procedure TfrmYMTFHSQList.Button3Click(Sender: TObject);
begin
  Panel3.Visible := False;
end;

procedure TfrmYMTFHSQList.btnChkClick(Sender: TObject);
begin
  if Order_Main.IsEmpty then
    exit;
  if Order_Main.Locate('SSel', True, []) = False then
  begin
    application.MessageBox('请选择数据！', '提示信息');
    exit;
  end;

  try
    while Order_Main.Locate('SSel', True, []) do
    begin
      with ADOQueryCmd do
      begin
        close;
        sql.Clear;
        sql.Add('update  YMT_FHSQ_Main SET CRType=' + quotedstr(trim(CRType.Text)));
        sql.Add('where FSID=' + quotedstr(trim(Order_Main.fieldbyname('FSID').AsString)));
        execsql;
      end;
      with Order_Main do
      begin
        Edit;
        FieldByName('SSel').Value := False;
        FieldByName('CRType').Value := trim(CRType.Text);
        Post;
      end;
    end;

    Panel3.Visible := False;
    application.MessageBox('审核成功！', '提示信息');
  except
    application.MessageBox('审核失败！', '提示信息', 0);
  end;
end;

procedure TfrmYMTFHSQList.TbAdd2Click(Sender: TObject);
begin
  try
    frmFHSQInPut2 := TfrmFHSQInPut2.Create(Application);
    with frmFHSQInPut2 do
    begin
      PState := 0;
      FMainId := '';
      FZZType := trim(self.FZZType);
      if ShowModal = 1 then
      begin

      end;
    end;
  finally
    frmFHSQInPut2.Free;
  end;
  InitGrid();
end;

procedure TfrmYMTFHSQList.OutStockClick(Sender: TObject);
var
  MFSID: string;
  Result: Integer;
begin
  if Order_Main.IsEmpty then
    Exit;
  MFSID := Order_Main.fieldbyname('FSID').AsString;

  if MFSID <> '' then
  begin
    // 显示带有确定和取消按钮的消息框
    Result := Application.MessageBox(PChar('是否要核销出库申请单号为【' + Trim(MFSID) + '】的加工出库的全部数据'), '提示', MB_OKCANCEL + MB_ICONQUESTION  // 确定取消按钮 + 问号图标
    );
  
  // 如果用户点击了取消按钮
    if Result = IDCANCEL then
      Exit;  // 退出当前过程
    if not BatchStockOut(MFSID, Trim(DCode)) then
    begin
      Application.MessageBox('核销出库失败!', '提示', 0);
      Exit;
    end;
  end;

end;

procedure TfrmYMTFHSQList.PrintMDClick(Sender: TObject);
var
  FPrintJson, MFiltration: string;
begin
  if Order_Main.IsEmpty then
    Exit;

  if Order_Main.Locate('ssel', True, []) = false then
  begin
    application.MessageBox('没有选择数据', '提示');
    exit;
  end;

  MFiltration := Trim(Order_Main.fieldbyname('FSId').AsString);

  FPrintJson := '{ "LMType": "YMTCKMD","PreviewPrint": true,"DConString": "' + DConString + '","DCode": "' + DCode + '","DName": "' + DName + '", "PrtArgs": [ { "IsSql": false, "Filtration": " ' + MFiltration + '" }] }';

  FormPrint(Application, PChar(FPrintJson));

end;

procedure TfrmYMTFHSQList.ToolButton3Click(Sender: TObject);
begin
//  if Order_Main.IsEmpty then
//    exit;
//  if trim(Order_Main.fieldbyname('Chker').AsString) = '' then
//  begin
//    application.MessageBox('当前数据未审核！', '提示信息');
//    exit;
//  end;
//  with ADOQueryTemp do
//  begin
//    close;
//    sql.Clear;
//    sql.Add('select * from YMT_FHSQ_Main');
//    sql.Add('where FSID=' + quotedstr(trim(Order_Main.fieldbyname('FSID').AsString)));
//    Open;
//  end;
//  if Trim(ADOQueryTemp.fieldbyname('YSID').AsString) <> '' then
//  begin
//    Application.MessageBox('已生成应收账款不能撤销!', '提示', 0);
//    Exit;
//  end;
//  try
//
//    with ADOQueryCmd do
//    begin
//      close;
//      sql.Clear;
//      sql.Add('update  YMT_FHSQ_Main SET Chker=Null,ChkTime=Null,ChkStatus=Null ');
//      sql.Add('where FSID=' + quotedstr(trim(Order_Main.fieldbyname('FSID').AsString)));
//      execsql;
//    end;
////    Order_Main.Delete;
//    InitGrid();
//    application.MessageBox('撤销成功！', '提示信息');
//  except
//    application.MessageBox('撤销失败！', '提示信息', 0);
//  end;
end;

end.

