unit Editor_de_Documento;

interface

uses SysUtils, system.UItypes, VCL.forms, Editor_de_Documento_Base, Vcl.Dialogs , dxPrnDev;



type
   TEditor_de_Documento = class
   private
    FArquivo_caminho: string;
    procedure SetArquivo_caminho(const Value: string);

    Function Carregar_Objetos : Boolean ;
   public
      Impressora_Padrao     : string;
      Tag_Empresa           : TTag_Empresa;
      Tag_Contabilidade     : TTag_Contabilidade;
      Tag_Fornecedor        : TTag_Fornecedor;
      Tag_Oficio            : TTag_Oficio;
      Tag_Dados_Registro    : TTag_Dados_Registro;
      Tag_Rpa               : TTag_Rpa;
      Tag_Outras            : TTag_Outras;

      Constructor Create;
      Destructor  Destroy;

      property Arquivo_caminho     : string  read FArquivo_caminho     write SetArquivo_caminho;
      procedure Visualizar;
      procedure Imprimir(Mostar_Dialogo : Boolean);


end;

implementation

{ TEditor_de_Documento }

uses Editor_de_Documento_Word, DataModulo;



{ TEditor_de_Documento }


function TEditor_de_Documento.Carregar_Objetos: Boolean;
begin
  result := False;

  if Self.Arquivo_caminho.Trim <> '' then
  begin
     if FileExists( self.Arquivo_caminho.Trim ) = false then
     begin
        MessageDlg('Arquivo não encontrado para carregar: ' + self.Arquivo_caminho, mtWarning, [mbOK], 0);
        exit;
     end;
  end;

  //======== Cria as classe na tela do word
  if frmEditor_de_Documento_word = nil then
     frmEditor_de_Documento_word := TfrmEditor_de_Documento_word.Create( Application );

  frmEditor_de_Documento_word.Tag_Empresa            := TTag_Empresa.Create;
  frmEditor_de_Documento_word.Tag_contabilidade      := TTag_contabilidade.Create;
  frmEditor_de_Documento_word.Tag_Fornecedor         := TTag_Fornecedor.Create;
  frmEditor_de_Documento_word.Tag_Oficio             := TTag_Oficio.Create;
  frmEditor_de_Documento_word.Tag_Dados_Registro     := TTag_Dados_Registro.Create;
  frmEditor_de_Documento_word.Tag_Rpa                := TTag_Rpa.Create;
  frmEditor_de_Documento_word.Tag_Outras             := TTag_Outras.Create;

  //====== as classes do word recebem os mesmo dados das classes do editor do documento
  frmEditor_de_Documento_word.Tag_Empresa            :=  Self.Tag_Empresa;
  frmEditor_de_Documento_word.Tag_contabilidade      :=  Self.Tag_contabilidade;
  frmEditor_de_Documento_word.Tag_Fornecedor         :=  Self.Tag_Fornecedor;
  frmEditor_de_Documento_word.Tag_Oficio             :=  Self.Tag_Oficio;
  frmEditor_de_Documento_word.Tag_Dados_Registro     :=  self.Tag_Dados_Registro;
  frmEditor_de_Documento_word.Tag_Outras             :=  self.Tag_Outras;

  if Self.Arquivo_caminho.Trim <> '' then
  begin
     frmEditor_de_Documento_word.dxDocumento.LoadDocument( Self.Arquivo_caminho );
     frmEditor_de_Documento_word.Substitui_Tag;
  end
  else
     frmEditor_de_Documento_word.dxDocumento.CreateNewDocument();


  if Self.Impressora_Padrao.Trim <> '' then
       dxPrintDevice.PrinterIndex := dxPrintDevice.FindPrintDevice( pwidechar(Self.Impressora_Padrao.Trim),nil);

  result := True;

end;

constructor TEditor_de_Documento.Create;
begin
  //=========== cria as classes =======
  Tag_Empresa           := TTag_Empresa.Create;
  Tag_contabilidade     := TTag_contabilidade.Create;
  Tag_Fornecedor        := TTag_Fornecedor.Create;
  Tag_Oficio            := TTag_Oficio.Create;
  Tag_Dados_Registro    := TTag_Dados_Registro.Create;
  Tag_Rpa               := TTag_Rpa.Create;
  Tag_Outras            := TTag_Outras.Create;
  //=================== busca os dados do registro do sistema ============

  Tag_Dados_Registro.Cnpj                 := dados.qrRegistro.FieldByName('CNPJ').AsString;
  Tag_Dados_Registro.Nome                 := dados.qrRegistro.FieldByName('NOME').AsString;

  Tag_Dados_Registro.Endereco.Logradouro  := dados.qrRegistro.FieldByName('LOGRADOURO').AsString;
  Tag_Dados_Registro.Endereco.Numero      := dados.qrRegistro.FieldByName('NUMERO').AsString;
  Tag_Dados_Registro.Endereco.Complemento := dados.qrRegistro.FieldByName('COMPLEMENTO').AsString;
  Tag_Dados_Registro.Endereco.Bairro      := dados.qrRegistro.FieldByName('BAIRRO').AsString;
  Tag_Dados_Registro.Endereco.Cidade      := dados.qrRegistro.FieldByName('CIDADE').AsString;
  Tag_Dados_Registro.Endereco.Uf          := dados.qrRegistro.FieldByName('UF').AsString;
  Tag_Dados_Registro.Endereco.Cep         := dados.qrRegistro.FieldByName('CEP').AsString;
  Tag_Dados_Registro.Email                := dados.qrRegistro.FieldByName('EMAIL').AsString;

end;

destructor TEditor_de_Documento.Destroy;
begin
  frmEditor_de_Documento_word.hide;

  //==== destroi as classe das tags. automaticamente as classes das tag no editor_word sao dstruidas pq elas sao apenas um ponteiro para estas classes
  Tag_Empresa.Destroy;
  Tag_contabilidade.Destroy;
  Tag_Fornecedor.Destroy;
  Tag_Oficio.Destroy;
  Tag_Dados_Registro.Destroy;
  Tag_Rpa.Destroy;
  Tag_Outras.destroy;
end;

procedure TEditor_de_Documento.Imprimir(Mostar_Dialogo : Boolean);
begin
   Carregar_Objetos;
   frmEditor_de_Documento_word.dxPrinter.Print(Mostar_Dialogo, nil, nil);
end;

procedure TEditor_de_Documento.SetArquivo_caminho(const Value: string);
begin
  FArquivo_caminho := Value;
end;

procedure TEditor_de_Documento.Visualizar;
begin
  Carregar_Objetos;

  frmEditor_de_Documento_word.dxRibbon1.ActiveTab := frmEditor_de_Documento_word.dxRibbonTabHome;
  frmEditor_de_Documento_word.pnlTag.Visible      := false;
  frmEditor_de_Documento_word.WindowState         := wsMaximized;
  frmEditor_de_Documento_word.ShowModal;
end;

{ TEditor_de_Documento }


end.
