unit Cheque_Impressao;

interface

uses
  Windows, system.UItypes, IB_Access, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, TelaComum, ImgList, ExtCtrls, StdCtrls, Buttons, 
  ppBands, myChkBox, ppCtrls, ppMemo, ppStrtch, ppRegion, ppPrnabl,
  ppClass, ppCache, ppComm, ppRelatv, ppProd, ppReport, DB, DBClient,
  IB_Components, Mask, IB_Controls, ppDB, ppDBPipe,Printers, IB_Grid,
  ppDesignLayer, ppParameter, IB_EditButton, System.ImageList, cxGraphics,
  cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxContainer, cxEdit,
  dxSkinsCore, dxSkinOffice2010Blue, cxTextEdit, cxCurrencyEdit;

type
  TfrmChequeImpressao = class(TfrmTelaComum)
    rbCheque: TppReport;
    ppDetailBand1: TppDetailBand;
    lblCheque_Cruzado_Linha1: TppLabel;
    lblCheque_Cruzado_Linha2: TppLabel;
    ppCanhoto: TppRegion;
    rbCopia: TppReport;
    ppDetailBand2: TppDetailBand;
    ppImagemCheque: TppImage;
    lblCopia_Cruzado_Linha1: TppLabel;
    lblCopia_Cruzado_Linha2: TppLabel;
    ppRegion1: TppRegion;
    ppShape2: TppShape;
    ppLabel35: TppLabel;
    ppLabel20: TppLabel;
    ppLabel19: TppLabel;
    chkVisado: TmyCheckBox;
    ppLabel33: TppLabel;
    chkCruzado: TmyCheckBox;
    ppLabel34: TppLabel;
    ppAssinatura: TppSummaryBand;
    edtNominal: TLabeledEdit;
    GroupBox1: TGroupBox;
    edtNumCheque: TLabeledEdit;
    edtUsadoPara: TLabeledEdit;
    edtAssinadoPor: TLabeledEdit;
    chkCanhoto: TCheckBox;
    btnLimpar: TBitBtn;
    btnCopia: TBitBtn;
    cdsCheque: TClientDataSet;
    ppValor: TppDBText;
    ppNominal: TppDBText;
    ppCidade: TppDBText;
    qrConfigCheque: TIB_Query;
    ppDia: TppDBText;
    ppMes: TppDBText;
    ppAno: TppDBText;
    edtData: TIB_Date;
    dsrCheque: TDataSource;
    pplCheque: TppDBPipeline;
    ppDBText1: TppDBText;
    ppDBMemo1: TppDBMemo;
    ppDBText2: TppDBText;
    rdbVisado: TRadioButton;
    rdbCruzado: TRadioButton;
    ppValorExtenso: TppDBText;
    ppValorExtenso2: TppDBText;
    ppDBText3: TppDBText;
    ppDBText4: TppDBText;
    ppDBText5: TppDBText;
    ppDBText6: TppDBText;
    ppDBText7: TppDBText;
    ppDBText9: TppDBText;
    ppDBText10: TppDBText;
    ppDBText11: TppDBText;
    cdsChequeValor: TCurrencyField;
    cdsChequeValor_Extenso1: TStringField;
    cdsChequeValor_Extenso2: TStringField;
    cdsChequeNominal: TStringField;
    cdsChequeCanhoto_data: TDateField;
    cdsChequeCanhoto_Destino: TStringField;
    cdsChequeCidade: TStringField;
    cdsChequeDia: TIntegerField;
    cdsChequeMes: TStringField;
    cdsChequeAno: TIntegerField;
    cdsChequeNumCheque: TStringField;
    cdsChequeUsadoPara: TStringField;
    cdsChequeAssinadoPor: TStringField;
    ppDBText8: TppDBText;
    ppDBText12: TppDBText;
    ppDBText13: TppDBText;
    cdsChequeCanhoto_Valor: TCurrencyField;
    ppDBText14: TppDBText;
    dsrConfigCheque: TIB_DataSource;
    edtModeloCheque: TIB_LookupCombo;
    qrConta: TIB_Query;
    dsrConta: TIB_DataSource;
    cmbBanco: TIB_LookupCombo;
    edtValor: TcxCurrencyEdit;
    procedure ConfiguraImpressao;
    procedure FormCreate(Sender: TObject);
    procedure BtGravarClick(Sender: TObject);
    procedure btnCopiaClick(Sender: TObject);
    procedure btnLimparClick(Sender: TObject);
  private
    procedure CopiaDados;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmChequeImpressao: TfrmChequeImpressao;

implementation

uses DataModulo, Rotinas;

{$R *.dfm}

procedure TfrmChequeImpressao.ConfiguraImpressao;
begin
   //============== Ajusta as configurações de impressao do cheque ==============

   if qrConfigCheque.FieldByName('RETRATO_PAISAGEM').AsString = 'R' then
      rbCheque.PrinterSetup.Orientation := poPortrait
   else
      rbCheque.PrinterSetup.Orientation := poLandscape;

   rbCheque.PrinterSetup.PaperWidth  := qrConfigCheque.FieldByName('LARGURA').AsFloat;
   rbCheque.PrinterSetup.PaperHeight := qrConfigCheque.FieldByName('ALTURA').AsFloat;
   rbCheque.PrinterSetup.MarginTop   := qrConfigCheque.FieldByName('MARGEM_TOPO').AsFloat;
   rbCheque.PrinterSetup.MarginLeft  := qrConfigCheque.FieldByName('MARGEM_ESQUERDA').AsFloat;

    //============== Linha de cheque cruzado ==============
   lblCheque_Cruzado_Linha1.Top  := qrConfigCheque.FieldByName('MARGEM_TOPO').AsFloat;
   lblCheque_Cruzado_Linha2.Top  := qrConfigCheque.FieldByName('MARGEM_TOPO').AsFloat;
   lblCheque_Cruzado_Linha1.Left := qrConfigCheque.FieldByName('MARGEM_ESQUERDA').AsFloat + qrConfigCheque.fieldbyName('Cheque_LEFT_LINHA2').AsFloat;
   lblCheque_Cruzado_Linha2.Left := qrConfigCheque.FieldByName('MARGEM_ESQUERDA').AsFloat + qrConfigCheque.fieldbyName('Cheque_LEFT_LINHA2').AsFloat+13;

    //============== Linha de valores  ==============
   ppValor.Top  := qrConfigCheque.FieldByName('MARGEM_TOPO').AsFloat     + qrConfigCheque.FieldbyName('Cheque_TOP_LINHA1').AsFloat;
   ppValor.left := qrConfigCheque.FieldByName('MARGEM_ESQUERDA').AsFloat + qrConfigCheque.FieldbyName('Cheque_LEFT_LINHA1').AsFloat;

   ppValorExtenso.Top  := qrConfigCheque.FieldByName('MARGEM_TOPO').AsFloat     + qrConfigCheque.FieldbyName('Cheque_TOP_LINHA2').AsFloat;
   ppValorExtenso.left := qrConfigCheque.FieldByName('MARGEM_ESQUERDA').AsFloat + qrConfigCheque.fieldbyName('Cheque_LEFT_LINHA2').AsFloat;

   ppValorExtenso2.Top  := qrConfigCheque.FieldByName('MARGEM_TOPO').AsFloat     + qrConfigCheque.FieldbyName('Cheque_TOP_LINHA3').AsFloat;
   ppValorExtenso2.left := qrConfigCheque.FieldByName('MARGEM_ESQUERDA').AsFloat + qrConfigCheque.fieldbyName('Cheque_LEFT_LINHA3').AsFloat;

   //============== Canhoto do cheque ==============
   ppCanhoto.Top          := ppValor.Top;
   ppCanhoto.Left         := ppValorExtenso.Left - 70;

   //============== Nominal ==============
   ppNominal.Top  := qrConfigCheque.FieldByName('MARGEM_TOPO').AsFloat     + qrConfigCheque.FieldbyName('Cheque_TOP_LINHA4').AsFloat;
   ppNominal.left := qrConfigCheque.FieldByName('MARGEM_ESQUERDA').AsFloat +  qrConfigCheque.fieldbyName('Cheque_LEFT_LINHA4').AsFloat;

    //============== Cidade dia e mes  ==============
   ppCidade.Top   := qrConfigCheque.FieldByName('MARGEM_TOPO').AsFloat     + qrConfigCheque.fieldbyName('Cheque_TOP_LINHA5').AsFloat;
   ppCidade.left  := qrConfigCheque.FieldByName('MARGEM_ESQUERDA').AsFloat + qrConfigCheque.fieldbyName('Cheque_LEFT_LINHA5').AsFloat;

   ppDia.Top      := ppCidade.Top;
   ppMes.Top      := ppCidade.Top;
   ppAno.Top      := ppCidade.Top;

   ppDia.left     := qrConfigCheque.FieldByName('MARGEM_ESQUERDA').AsFloat + qrConfigCheque.fieldbyName('Cheque_LEFT_dia').AsFloat;
   ppMes.left     := qrConfigCheque.FieldByName('MARGEM_ESQUERDA').AsFloat + qrConfigCheque.fieldbyName('Cheque_LEFT_mes').AsFloat;
   ppAno.left     := qrConfigCheque.FieldByName('MARGEM_ESQUERDA').AsFloat + qrConfigCheque.fieldbyName('Cheque_LEFT_ano').AsFloat;

   if rdbCruzado.Checked then
   begin
      lblCheque_Cruzado_Linha1.Visible := True;
      lblCheque_Cruzado_Linha2.Visible := True;
      lblCopia_Cruzado_Linha1.Visible  := True;
      lblCopia_Cruzado_Linha2.Visible  := True;

      chkVisado.Checked  := False;
      chkCruzado.Checked := True;
   end
   else
   begin
      lblCheque_Cruzado_Linha1.Visible := False;
      lblCheque_Cruzado_Linha2.Visible := False;
      lblCopia_Cruzado_Linha1.Visible  := False;
      lblCopia_Cruzado_Linha2.Visible  := False;

      chkVisado.Checked  := True;
      chkCruzado.Checked := False;
   end;

   if chkCanhoto.Checked then
      ppCanhoto.Visible := True
   else
      ppCanhoto.Visible := False;
end;

procedure TfrmChequeImpressao.FormCreate(Sender: TObject);
begin
  inherited;
   qrConfigCheque.Open;
   cdsCheque.Close;
   cdsCheque.CreateDataSet;

   if not qrConfigCheque.IsEmpty then
      qrConfigCheque.First;

   edtData.Value := Date;
end;

procedure TfrmChequeImpressao.CopiaDados;
var Dia, Mes, ano : Word;
   ValorExtenso : string;
   Extenso1 , Extenso2 : string;
   ultimo : Integer;
   imagemCheque : string;
begin
   //============== Copia os dados para o cdscheque ==============
  ConfiguraImpressao;

  DecodeDate(edtData.Value, ano,mes,Dia);
  cdsCheque.EmptyDataSet;
  cdsCheque.Insert;

  ValorExtenso := ValorPorExtenso(edtValor.Value);

   if Length(ValorExtenso) < 65 then
      begin
        Extenso1:=FormatarTexto(UpperCase(Copy(ValorExtenso,1,65)),65,True,'*');
        Extenso2:=FormatarTexto(' ',70,True,'*');
      end
   else
   begin
      Ultimo:=65;
      while copy(ValorExtenso,Ultimo,1) <> ' ' do
      begin
         dec(Ultimo);
      end;
      Extenso1:=UpperCase(Copy(ValorExtenso,1,Ultimo));
      Extenso2:=FormatarTexto(UpperCase(Copy(ValorExtenso,Ultimo+1,120)),70,True,'*');
   end;


  cdsCheque.FieldByName('Valor').value            := edtValor.Value;
  cdsCheque.FieldByName('Valor_Extenso1').value   := Extenso1;
  cdsCheque.FieldByName('Valor_Extenso2').value   := Extenso2;

  cdsCheque.FieldByName('Nominal').value         := edtNominal.Text;
  cdsCheque.FieldByName('Cidade').value          := Dados.qrFilial.fieldbyname('cidade').AsString;
  cdsCheque.FieldByName('dia').value             := Dia;
  cdsCheque.FieldByName('mes').value             := UpperCase(FormatDateTime('MMMM',edtData.Value));
  cdsCheque.FieldByName('ano').value             := ano;
  cdsCheque.FieldByName('Canhoto_data').value    := edtData.Value;
  cdsCheque.FieldByName('Canhoto_Valor').value   := edtValor.Value;
  cdsCheque.FieldByName('Canhoto_Destino').value := edtNominal.Text + #13 + edtUsadoPara.Text;
  cdsCheque.FieldByName('NumCheque').value       := edtNumCheque.Text;
  cdsCheque.FieldByName('UsadoPara').value       := edtUsadoPara.Text;
  cdsCheque.FieldByName('AssinadoPor').value     := edtAssinadoPor.Text;

  cdsCheque.Post;

  //imagemCheque := CaminhoEXE + 'cheque.jpg';

  imagemCheque := qrConfigCheque.FieldByName('CAMINHO_IMAGEM').AsString;

  if FileExists(imagemCheque) then
     ppImagemCheque.Picture.LoadFromFile(imagemCheque);
end;

procedure TfrmChequeImpressao.BtGravarClick(Sender: TObject);
begin
  inherited;
  if edtModeloCheque.Text = '' then
  begin
     MessageDlg('Informe o modelo do cheque', mtWarning, [mbOK], 0);
     edtModeloCheque.SetFocus;
     Exit;
  end;
  CopiaDados;
  ImpressaoBaseadaNoModelo(rbCheque,False,'','');
end;

procedure TfrmChequeImpressao.btnCopiaClick(Sender: TObject);
begin
  inherited;
  CopiaDados;
  ImpressaoBaseadaNoModelo(rbCopia,False,'','');
end;

procedure TfrmChequeImpressao.btnLimparClick(Sender: TObject);
begin
  inherited;
   edtData.Clear;
   edtValor.Clear;
   edtNominal.Clear;
   edtNumCheque.Clear;
   cmbBanco.Clear;
   edtUsadoPara.Clear;
   edtAssinadoPor.Clear;
end;

end.
