unit U_LabelPrint;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Vcl.Printers, Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
  cxDataStorage, cxEdit, DB, cxDBData, ToolWin, ComCtrls, U_BaseHelp,
  cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGridLevel,
  cxClasses, cxControls, cxGridCustomView, cxGrid, DBClient, ADODB, ImgList,
  StdCtrls, ExtCtrls, cxTextEdit, cxGridCustomPopupMenu, cxGridPopupMenu,
  cxLookAndFeels, cxLookAndFeelPainters, cxNavigator, dxDateRanges,
  dxBarBuiltInMenu, System.ImageList, U_BaseInput, RM_Common, RM_Class,
  RM_GridReport, RM_Dataset, Vcl.Buttons, RM_E_llPDF, RM_BarCode, RM_e_Graphic,
  RM_e_Jpeg, RM_e_Xls, cxContainer, cxMaskEdit, cxDropDownEdit, cxMRUEdit,
  System.Net.HttpClient, System.Net.HttpClientComponent, System.JSON,
  dxSkinsCore, dxSkinsDefaultPainters, dxSkinWXI;

type
  TfrmLabelPrint = class(TfrmBaseHelp)
    ADOQueryTemp: TADOQuery;
    ADOConnection1: TADOConnection;
    Panel1: TPanel;
    ImageList1: TImageList;
    RMDB_1: TRMDBDataSet;
    RM1: TRMGridReport;
    RMDB_2: TRMDBDataSet;
    CDS_Label: TClientDataSet;
    ADO_1: TADOQuery;
    btnShow: TSpeedButton;
    ADO_2: TADOQuery;
    RMDB_3: TRMDBDataSet;
    ADO_3: TADOQuery;
    RMXLSExport1: TRMXLSExport;
    RMJPEGExport1: TRMJPEGExport;
    RMBarCodeObject1: TRMBarCodeObject;
    RMllPDFExport1: TRMllPDFExport;
    CheckBox1: TCheckBox;
    Label1: TLabel;
    cbbLab: TcxMRUEdit;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    ADOQueryCmd: TADOQuery;
    ADO_While: TADOQuery;
    ComboBox1: TcxComboBox;
    ComboBox_Print: TcxComboBox;
    btnPrint: TSpeedButton;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure TV1DblClick(Sender: TObject);
    procedure btnPrintClick(Sender: TObject);
    procedure btnShowClick(Sender: TObject);
    procedure cbbLabPropertiesButtonClick(Sender: TObject);
  private
    procedure InitGrid();
    procedure PrintLabel(MIsShow: Boolean);
    procedure PrintServerLabel(MIsShow: Boolean);
    function JsonGetChildValue(JsonStr, KeyName: string): string;
    { Private declarations }
  public
    FPreviewPrint, IsSql1, IsSql2, IsSql3: Boolean;
    FLMType: string; //标签类型
    FFiltration1, FFiltration2, FFiltration3: string;
    FparamBlclid: string;
    { Public declarations }
  end;

var
  frmLabelPrint: TfrmLabelPrint;

implementation

uses
  U_DataLink, U_RTFun, U_LabelMapSet;  //, U_printPdf

{$R *.dfm}
function TfrmLabelPrint.JsonGetChildValue(JsonStr, KeyName: string): string;
var
  JSONObject: TJSONObject; // JSON类
  JSONPair: TJSONPair;
  i, Cloint: integer;
  Z, X: string;
begin
  Result := '';
  JSONObject := TJSONObject.ParseJSONValue(JsonStr) as TJSONObject;
  Cloint := JSONObject.Count;
  for i := 0 to Cloint - 1 do
  begin
    JSONPair := JSONObject.Pairs[i];
    Z := JSONPair.JsonString.Value;
    X := JSONPair.JSONValue.Value;
    if JSONPair.JsonString.Value = KeyName then
      Result := JSONPair.JSONValue.Value;
  end;
end;

procedure TfrmLabelPrint.PrintServerLabel(MIsShow: Boolean);
var
  MaxBLCLID, LBName: string;
  WBoolean: Boolean;
  HttpClient: THttpClient;
  Request: TStringStream;
  Response: IHTTPResponse;
  ResponseString: string;
  jsonArray: TJSONArray; // JSON数组变量
  JSONObject: TJSONObject; // JSON类
  JSONPair: TJSONPair;
  JSONStr: string;
  i: Integer;
  Mmessage, MpdfFileId, Mcode: string;
  mprintFlag, mprinter: Integer;
begin
  if CDS_Label.IsEmpty then
  begin
    Application.MessageBox(PChar('类型' + FLMType + '没有设置标签!'), '提示', 0);
    Exit;
  end;
  LBName := cbbLab.text;

  if CDS_Label.Locate('LMName', LBName, []) then
  begin
    if GetLSNo(ADOQueryCmd, MaxBLCLID, 'X', 'Bs_Report_Cloud_Log', 4, 1) = False then
    begin
      ADOQueryCmd.Connection.RollbackTrans;
      Application.MessageBox('取最大号失败！', '提示', 0);
      Exit;
    end;
    with ADOQueryCmd do
    begin
      Close;
      SQL.Clear;
      sql.Add('select * from Bs_Report_Cloud_Log where 1=2');
      Open;
    end;
    with ADOQueryCmd do
    begin
      Append;
      FieldByName('BLCLID').Value := MaxBLCLID;
      FieldByName('Filler').Value := dname;
      FieldByName('LMName').Value := trim(CDS_Label.fieldbyname('LMName').AsString);
      FieldByName('LMSql1').Value := trim(CDS_Label.fieldbyname('LMSql1').AsString);
      FieldByName('LMSql2').Value := trim(CDS_Label.fieldbyname('LMSql2').AsString);
      FieldByName('LMSql3').Value := trim(CDS_Label.fieldbyname('LMSql3').AsString);
      FieldByName('Filtration1').Value := Trim(FFiltration1);
      FieldByName('Filtration2').Value := Trim(FFiltration2);
      FieldByName('Filtration3').Value := Trim(FFiltration3);
      FieldByName('IsSql1').Value := IsSql1;
      FieldByName('IsSql2').Value := IsSql2;
      FieldByName('IsSql3').Value := IsSql3;
      FieldByName('Sheets').Value := strtointdef(ComboBox1.Text, 1);
      FieldByName('paramBlclid').Value := StrToFloatDef(FparamBlclid, 0);
      Post;
    end;
  end;
  if MIsShow then
    mprintFlag := 1
  else
    mprintFlag := 0;

  mprinter := ComboBox_Print.ItemIndex;
//  printPdf(Application, 1, PChar('title'), PChar(dcode), PChar(dname), PChar(MaxBLCLID), StrToIntDef(ComboBox1.Text, 1), mprintFlag, mprinter, PChar(DConString))//  HttpClient := THttpClient.Create;
//  JSONStr := '{"reportFileName":"","ciid":"' + MaxBLCLID + '"}';
//  Request := TStringStream.Create(JSONStr);
//
//  try
//    HttpClient.ContentType := 'application/json';
//    Response := HttpClient.Post('http://101.132.143.144:8089/datasnap/rest/TServerMethods1/RmfToPdf/', Request);
//    ResponseString := Response.ContentAsString;
//    JSONObject := TJSONObject.ParseJSONValue(ResponseString) as TJSONObject;
//    jsonArray := TJSONArray(JSONObject.GetValue('result'));
//    for i := 0 to 2 do
//    begin
//      JSONPair := jsonArray.Items[0].GetValue<TJSONObject>.Pairs[i];
//      if JSONPair.JsonString.Value = 'code' then
//        Mcode := JSONPair.JSONValue.Value;
//      if JSONPair.JsonString.Value = 'pdfFileId' then
//        MpdfFileId := JSONPair.JSONValue.Value;
//      if JSONPair.JsonString.Value = 'message' then
//        Mmessage := JSONPair.JSONValue.Value;
//    end;
//    if Mmessage = 'success' then
//    begin
//      if MIsShow then
//        mprintFlag := 1
//      else
//        mprintFlag := 0;
//
//      mprinter := ComboBox_Print.ItemIndex;
//
//      printPdf(Application, 1, PChar('title'), PChar(dcode), PChar(dname), PChar(MpdfFileId), StrToIntDef(ComboBox1.Text, 1), mprintFlag, mprinter, PChar(DConString))
//    end;
//  finally
//    Request.Free;
//    HttpClient.Free;
//  end;
end;

procedure TfrmLabelPrint.PrintLabel(MIsShow: Boolean);
var
  fPrintFile, fPrintFile10, FMainID, LBName: string;
begin
  if CDS_Label.IsEmpty then
  begin
    Application.MessageBox(PChar('类型' + FLMType + '没有设置标签!'), '提示', 0);
    Exit;
  end;
  RMllPDFExport1.ShowDialog := CheckBox2.Checked;
  RMJPEGExport1.ShowDialog := CheckBox2.Checked;
  RMXLSExport1.ShowDialog := CheckBox2.Checked;
  RM1.ShowPrintDialog := CheckBox1.Checked;

  LBName := cbbLab.text;
  ExportFtErpFile(LBName + '.rmf', ADOQueryTemp);

  if CDS_Label.Locate('LMName', LBName, []) then
  begin

    if trim(CDS_Label.fieldbyname('LMSql1').AsString) <> '' then
    begin
      with ADO_1 do
      begin
        Close;
        sql.Clear;
        if IsSql1 then
        begin
          sql.add('exec ' + trim(CDS_Label.fieldbyname('LMSql1').AsString));
          sql.add(FFiltration1);
        end
        else
        begin
          sql.add('exec ' + trim(CDS_Label.fieldbyname('LMSql1').AsString) + ' @Filtration=' + quotedstr(Trim(FFiltration1)));
        end;
        Open;
      end;
    end;

    if trim(CDS_Label.fieldbyname('LMSql2').AsString) <> '' then
    begin
      with ADO_2 do
      begin
        Close;
        sql.Clear;
        if IsSql1 then
        begin
          sql.add('exec ' + trim(CDS_Label.fieldbyname('LMSql2').AsString));
          sql.add(FFiltration2);
        end
        else
        begin
          sql.add('exec ' + trim(CDS_Label.fieldbyname('LMSql2').AsString) + ' @Filtration=' + quotedstr(Trim(FFiltration2)));
        end;
        Open;
      end;
    end;

    if trim(CDS_Label.fieldbyname('LMSql3').AsString) <> '' then
    begin
      with ADO_3 do
      begin
        Close;
        sql.Clear;
        if IsSql1 then
        begin
          sql.add('exec ' + trim(CDS_Label.fieldbyname('LMSql3').AsString));
          sql.add(FFiltration3);
        end
        else
        begin
          sql.add('exec ' + trim(CDS_Label.fieldbyname('LMSql3').AsString) + ' @Filtration=' + quotedstr(Trim(FFiltration3)));
        end;
        Open;
      end;
    end;

  end;
  fPrintFile := ExtractFilePath(Application.ExeName) + 'Report\' + LBName + '.rmf';
  if FileExists(fPrintFile) then
  begin

    RM1.LoadFromFile(fPrintFile);
    RM1.DefaultCopies := StrToIntDef(ComboBox1.Text, 1);
    RMVariables['LBPrtCode'] := dcode;
    RMVariables['LBPrtName'] := dname;
    if MIsShow then
      RM1.ShowReport
    else
      RM1.PrintReport;
  end
  else
  begin
    Application.MessageBox(PChar('没有找' + fPrintFile), '提示', 0);
  end;
end;

procedure TfrmLabelPrint.FormCreate(Sender: TObject);
begin
  inherited;
  FPreviewPrint := True;
  try
    with ADOConnection1 do
    begin
      Connected := false;
      ConnectionString := DConString;
      Connected := true;
    end;
    ADOQueryBaseCmd.Connection := ADOConnection1;
    ADOQueryBaseTemp.Connection := ADOConnection1;
  except
    {if Application.MessageBox('网络连接失败,是否要再次连接?','提示',32+4)=IDYES then
    begin
      try
        with ADOConnection1 do
        begin
          Connected:=false;
          ConnectionString:=DConString;
          //ConnectionString:='23242';
          Connected:=true;
        end;
      except
      end;
    end; }
  end;
end;

procedure TfrmLabelPrint.btnPrintClick(Sender: TObject);
begin
  if not CheckBox3.Checked then
  begin
    PrintLabel(False);
  end
  else
  begin
    PrintServerLabel(False);
  end;
  ModalResult := 1;
end;

procedure TfrmLabelPrint.btnShowClick(Sender: TObject);
begin
  if not CheckBox3.Checked then
  begin
    PrintLabel(true);
  end
  else
  begin
    PrintServerLabel(true);
  end;
end;

procedure TfrmLabelPrint.cbbLabPropertiesButtonClick(Sender: TObject);
begin

  try
    frmLabelMapSet := TfrmLabelMapSet.Create(Application);
    with frmLabelMapSet do
    begin
      IsSql1 := self.IsSql1;
      IsSql2 := self.IsSql2;
      IsSql3 := self.IsSql3;
      FFiltration1 := self.FFiltration1;
      FFiltration2 := self.FFiltration2;
      FFiltration3 := self.FFiltration3;
      FLMType := self.FLMType;
      if ShowModal = 1 then
      begin
        Self.InitGrid();
      end;
    end;
  finally
    frmLabelMapSet.Free;
  end;
end;

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

procedure TfrmLabelPrint.InitGrid();
begin

  with ADOQueryTemp do
  begin
    close;
    sql.Clear;
    sql.Add('select  LMName  name from BS_Label_Map where LMType=' + QuotedStr(TRIM(FLMType)));
    sql.Add(' order by  SerialNo    ');
    Open;
    if isEmpty then
    begin
      exit;
    end;
    cbbLab.Properties.LookupItems.Clear;
    while not Eof do
    begin

      cbbLab.Properties.LookupItems.Add(Trim(fieldByName('Name').AsString));
      Next;
    end;

    cbbLab.ItemIndex := 0;
  end;

  with ADOQueryTemp do
  begin
    Filtered := False;
    Close;
    sql.Clear;
    Sql.Add('select * from BS_Label_Map where LMType=' + QuotedStr(TRIM(FLMType)));
    Open;
  end;
  SCreateCDS(ADOQueryTemp, CDS_Label);
  SInitCDSData(ADOQueryTemp, CDS_Label);
  if CDS_Label.IsEmpty then
  begin
    Application.MessageBox(PChar('类型' + FLMType + '没有设置标签!'), '提示', 0);
    Exit;
  end;
end;

procedure TfrmLabelPrint.FormShow(Sender: TObject);
begin
  inherited;
  if FPreviewPrint then
    RM1.PreviewButtons := [rmpbZoom, rmpbLoad, rmpbSave, rmpbPrint, rmpbFind, rmpbPageSetup, rmpbExit, rmpbSaveToXLS, rmpbExport, rmpbNavigator]
  else
    RM1.PreviewButtons := [rmpbZoom, rmpbLoad, rmpbSave, rmpbFind, rmpbPageSetup, rmpbExit, rmpbSaveToXLS, rmpbExport, rmpbNavigator];

  if Trim(FFiltration2) = '' then
    FFiltration2 := FFiltration1;
  if Trim(FFiltration3) = '' then
    FFiltration3 := FFiltration1;
  ComboBox_Print.Properties.Items.Assign(printer.Printers);
  InitGrid();
end;

procedure TfrmLabelPrint.TV1DblClick(Sender: TObject);
begin
  ModalResult := 1;
end;

procedure TfrmLabelPrint.FormDestroy(Sender: TObject);
begin
  inherited;
  frmLabelPrint := nil;
end;

end.

