unit Cheque;

interface

uses
  Windows, system.UItypes, IB_Access, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls,ValorPorExtenso, ComCtrls,
  ppPrnabl, ppClass, ppCtrls, ppCache, ppBands, ppComm, ppRelatv, ppProd,
  ppReport, Rotinas, UCBase,Printers, myChkBox, ppStrtch, ppMemo,
  ppVar, ppRegion, IB_Components, IB_Grid, Mask, IB_Controls, ppDesignLayer,
  ppParameter, IB_EditButton;

type
  TfrmCheque = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    lblExten1: TLabel;
    Panel3: TPanel;
    btnImprimir: TBitBtn;
    btnLimpar: TBitBtn;
    btnFechar: TBitBtn;
    lblExten2: TLabel;
    edtData: TDateTimePicker;
    Label2: TLabel;
    edtNome: TLabeledEdit;
    GroupBox1: TGroupBox;
    lblNumero: TLabeledEdit;
    lblAssinado: TLabeledEdit;
    btnCopia: TBitBtn;
    edtExtenso: TLabeledEdit;
    ppReport1: TppReport;
    ppDetailBand3: TppDetailBand;
    ppShape4: TppShape;
    ppLabel1: TppLabel;
    ppLabel2: TppLabel;
    ppLabel3: TppLabel;
    ppLabel4: TppLabel;
    ppLabel5: TppLabel;
    ppLabel6: TppLabel;
    ppLabel7: TppLabel;
    ppLabel8: TppLabel;
    ppLabel9: TppLabel;
    ppLabel10: TppLabel;
    ppLabel11: TppLabel;
    ppLabel12: TppLabel;
    ppLabel13: TppLabel;
    ppLabel14: TppLabel;
    ppLabel15: TppLabel;
    ppLabel16: TppLabel;
    ppLabel21: TppLabel;
    ppLabel22: TppLabel;
    ppLabel23: TppLabel;
    ppLabel24: TppLabel;
    ppLabel25: TppLabel;
    ppLabel26: TppLabel;
    ppLabel27: TppLabel;
    ppLabel28: TppLabel;
    ppLabel29: TppLabel;
    UCControls1: TUCControls;
    Copia: TppReport;
    ppDetailBand2: TppDetailBand;
    ppCheque: TppImage;
    ppValorCopia: TppLabel;
    ppExtenso1_Copia: TppLabel;
    ppNome_Copia: TppLabel;
    ppCidade_Copia: TppLabel;
    ppDia_Copia: TppLabel;
    ppMes_Copia: TppLabel;
    ppAno_Copia: TppLabel;
    ppExtenso2_Copia: TppLabel;
    ppNumeroCheque: TppLabel;
    Cheque: TppReport;
    ppDetailBand1: TppDetailBand;
    ppValor: TppLabel;
    ppExtenso1: TppLabel;
    ppNominal: TppLabel;
    ppCidade: TppLabel;
    ppDia: TppLabel;
    ppMes: TppLabel;
    ppAno: TppLabel;
    ppExtenso2: TppLabel;
    Cheque_Linha1: TppLabel;
    Cheque_Linha2: TppLabel;
    Copia_Linha1: TppLabel;
    Copia_Linha2: TppLabel;
    rdgCruzado: TRadioGroup;
    chkCanhoto: TCheckBox;
    ppAssinatura: TppSummaryBand;
    ppAssinado2: TppLabel;
    ppSystemVariable1: TppSystemVariable;
    ppShape1: TppShape;
    ppLabel17: TppLabel;
    ppRegion1: TppRegion;
    ppLabel35: TppLabel;
    ppNumeroCheque2: TppLabel;
    ppLabel20: TppLabel;
    ppAssinado: TppLabel;
    ppLabel19: TppLabel;
    chkVisado: TmyCheckBox;
    ppLabel33: TppLabel;
    chkCruzado: TmyCheckBox;
    ppLabel34: TppLabel;
    ppShape2: TppShape;
    ppUsado: TppMemo;
    ppCanhoto: TppRegion;
    ppCanhoto_Data: TppLabel;
    ppCanhoto_Destino: TppMemo;
    ppCanhoto_Valor: TppLabel;
    qryConta: TIB_Query;
    cmbBanco: TIB_LookupCombo;
    dtConta: TIB_DataSource;
    ppLabel18: TppLabel;
    ppNumeroConta: TppLabel;
    ppBanco: TppLabel;
    ppLabel31: TppLabel;
    lblUsado: TMemo;
    lbl1: TLabel;
    edtValor: TIB_Currency;
    procedure btnFecharClick(Sender: TObject);
    procedure btnLimparClick(Sender: TObject);
    procedure btnImprimirClick(Sender: TObject);
    procedure DataAtual(Ano:Word;Mes:Word;Dia:Word);
    function ModificaCaracter(TEXTO:string):string;
    procedure Imprime_Caixa;
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure btnCopiaClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    function CasasDecimais(Valor: String): String;
    procedure MontaExtenso;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmCheque: TfrmCheque;
  Data_Extenso,Val_editado:STRING;
  Ano,Mes,Dia:word;
  Vpe: TValorPorExtenso;
  Cidade:String;
  Extenso1:String;
  Extenso2:String;

implementation

uses DataModulo, Principal;

{$R *.dfm}

function TestaValor(const Valor:string): boolean;
begin

  try
    StrToFloat(Valor);
    Result:= true;
  except
    Result:= false;
  end;
end;

procedure TfrmCheque.btnFecharClick(Sender: TObject);
begin
  Close;
end;

procedure TfrmCheque.btnLimparClick(Sender: TObject);
begin
  edtNome.text      :='';
  Cidade            :=dados.qrRegistro.FieldByName('CIDADE').Value;
  lblNumero.Clear;
  lblUsado.Clear;
//  lblAssinado.Clear;
  edtData.Date      :=Date;
  edtValor.Text     :=' ';
  Label1.caption    :='';
  lblExten1.caption :='';
  lblExten2.caption :='';
  Data_Extenso      :='';
  DecodeDate(edtData.Date,Ano,Mes,Dia);
  DataAtual(Ano,Mes,Dia);

end;

procedure TfrmCheque.btnImprimirClick(Sender: TObject);
begin
      if EdtValor.Text <> ' '
      then
        begin
           MontaExtenso;
           edtExtenso.Text:=Extenso(edtValor.Value);

           if rdgCruzado.ItemIndex = 0 then
           begin
             Copia_Linha1.Visible:=False;
             Copia_Linha2.Visible:=False;
             Cheque_Linha1.Visible:=False;
             Cheque_Linha2.Visible:=False;
             chkVisado.Checked:=True;
             chkCruzado.Checked:=False;
           end
           else
           begin
             Copia_Linha1.Visible:=True;
             Copia_Linha2.Visible:=True;
             Cheque_Linha1.Visible:=True;
             Cheque_Linha2.Visible:=True;
             chkVisado.Checked:=False;
             chkCruzado.Checked:=True;
           end;

           ppValor.Caption:='## '+edtValor.Text+' ##';
           ppExtenso1.Caption:=Extenso1;
           ppExtenso2.Caption:=Extenso2;
           ppNominal.Caption:=edtNome.Text;
           ppCidade.Caption:=Cidade;

           DecodeDate(edtData.Date,Ano,Mes,Dia);
           ppDia.Caption:=IntToStr(Dia);
           ppMes.Caption:=MesExtenso(Mes);
           ppAno.Caption:=Copy(IntToStr(Ano),3,2);

           if dados.qryEtiquetasEnvelopes.Locate('CODIGO',dados.tbConfig.FieldByName('CHEQUE_PADRAO').AsInteger, [])
           then
             begin
               if dados.qryEtiquetasEnvelopes.FieldByName('RETRATO_PAISAGEM').AsString = 'R' then
                 Cheque.PrinterSetup.Orientation:=poPortrait

               else Cheque.PrinterSetup.Orientation:=poLandscape;
               Cheque.PrinterSetup.PaperWidth :=dados.qryEtiquetasEnvelopes.FieldByName('LARGURA').AsFloat;
               Cheque.PrinterSetup.PaperHeight :=dados.qryEtiquetasEnvelopes.FieldByName('ALTURA').AsFloat;
               Cheque.PrinterSetup.MarginTop  :=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_TOPO').AsFloat;
               Cheque.PrinterSetup.MarginLeft :=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_ESQUERDA').AsFloat;

               Cheque_Linha1.Top:=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_TOPO').AsFloat;
               Cheque_Linha2.Top:=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_TOPO').AsFloat;

               Cheque_Linha1.Left:=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_ESQUERDA').AsFloat+dados.qryEtiquetasEnvelopes.fieldbyName('MARGEM_LEFT_LINHA2').AsFloat;
               Cheque_Linha2.Left:=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_ESQUERDA').AsFloat+dados.qryEtiquetasEnvelopes.fieldbyName('MARGEM_LEFT_LINHA2').AsFloat+13;

               ppValor.Top    :=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_TOPO').AsFloat+dados.qryEtiquetasEnvelopes.fieldbyName('MARGEM_TOP_LINHA1').AsFloat;
               ppValor.left   :=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_ESQUERDA').AsFloat+dados.qryEtiquetasEnvelopes.fieldbyName('MARGEM_LEFT_LINHA1').AsFloat;

               ppExtenso1.Top :=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_TOPO').AsFloat+dados.qryEtiquetasEnvelopes.fieldbyName('MARGEM_TOP_LINHA2').AsFloat;
               ppExtenso1.left:=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_ESQUERDA').AsFloat+dados.qryEtiquetasEnvelopes.fieldbyName('MARGEM_LEFT_LINHA2').AsFloat;
               ppExtenso2.Top :=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_TOPO').AsFloat+dados.qryEtiquetasEnvelopes.fieldbyName('MARGEM_TOP_LINHA3').AsFloat;
               ppExtenso2.left:=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_ESQUERDA').AsFloat+dados.qryEtiquetasEnvelopes.fieldbyName('MARGEM_LEFT_LINHA3').AsFloat;


               ppCanhoto.Top:= ppValor.Top;
               ppCanhoto.Left:= ppExtenso1.Left-70;

        //       ppCanhoto_Data.Top :=ppExtenso1.Top;
        //       ppCanhoto_Data.Left:=(ppExtenso2.Left-60);
               ppCanhoto_Data.Text:=DateToStr(edtData.Date);

        //       ppCanhoto_Destino.Top :=ppExtenso2.Top;
        //       ppCanhoto_Destino.Left:=ppCanhoto_Data.Left;
               ppCanhoto_Destino.Text:=edtNome.Text+#13+#10+#13+#10+lblUsado.Text;

               ppNominal.Top  :=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_TOPO').AsFloat+dados.qryEtiquetasEnvelopes.fieldbyName('MARGEM_TOP_LINHA4').AsFloat;
               ppNominal.left :=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_ESQUERDA').AsFloat+dados.qryEtiquetasEnvelopes.fieldbyName('MARGEM_LEFT_LINHA4').AsFloat;


               ppCidade.Top   :=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_TOPO').AsFloat+dados.qryEtiquetasEnvelopes.fieldbyName('MARGEM_TOP_LINHA5').AsFloat;
               ppCidade.left  :=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_ESQUERDA').AsFloat+dados.qryEtiquetasEnvelopes.fieldbyName('MARGEM_LEFT_LINHA5').AsFloat;
               ppDia.Top      :=ppCidade.Top;
               ppDia.left     :=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_ESQUERDA').AsFloat+dados.qryEtiquetasEnvelopes.fieldbyName('MARGEM_LEFT_ITEM6').AsFloat;
               ppMes.Top      :=ppCidade.Top;
               ppMes.left     :=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_ESQUERDA').AsFloat+dados.qryEtiquetasEnvelopes.fieldbyName('MARGEM_LEFT_ITEM7').AsFloat;
               ppAno.Top      :=ppCidade.Top;
               ppAno.left     :=dados.qryEtiquetasEnvelopes.FieldByName('MARGEM_ESQUERDA').AsFloat+dados.qryEtiquetasEnvelopes.fieldbyName('MARGEM_LEFT_ITEM8').AsFloat;


      //         ppCanhoto_Valor.Top :=ppCidade.Top+30;
      //         ppCanhoto_Valor.Left:=ppCanhoto_Data.Left;
               ppCanhoto_Valor.Text:=edtValor.Text;


               if chkCanhoto.Checked then
               begin
                 ppCanhoto_Valor.Visible:=True;
                 ppCanhoto_Data.Visible:=True;
                 ppCanhoto_Destino.Visible:=True;
               end
               else
               begin
                 ppCanhoto_Valor.Visible:=False;
                 ppCanhoto_Data.Visible:=False;
                 ppCanhoto_Destino.Visible:=False;
               end;

               Cheque.Print;
             end
           else MessageDlg('NÃO EXISTE FORMATO DE CHEQUE CONFIGURADO', mtError, [mbOK], 0);
        end
      else
      begin
         showmessage('Informe o Valor');
         edtValor.SetFocus;
      end;
end;

procedure TfrmCheque.DataAtual(Ano:Word;Mes:Word;Dia:Word);
begin
  System.SysUtils.FormatSettings.ShortDateFormat := 'dd/mm/yyyy';
  System.SysUtils.FormatSettings.LongMonthNames[1] := 'JANEIRO  ';
  System.SysUtils.FormatSettings.LongMonthNames[2] := 'FEVEREIRO';
  System.SysUtils.FormatSettings.LongMonthNames[3] := 'MARCO    ';
  System.SysUtils.FormatSettings.LongMonthNames[4] := 'ABRIL    ';
  System.SysUtils.FormatSettings.LongMonthNames[5] := 'MAIO     ';
  System.SysUtils.FormatSettings.LongMonthNames[6] := 'JUNHO    ';
  System.SysUtils.FormatSettings.LongMonthNames[7] := 'JULHO    ';
  System.SysUtils.FormatSettings.LongMonthNames[8] := 'AGOSTO   ';
  System.SysUtils.FormatSettings.LongMonthNames[9] := 'SETEMBRO ';
  System.SysUtils.FormatSettings.LongMonthNames[10]:= 'OUTUBRO  ';
  System.SysUtils.FormatSettings.LongMonthNames[11]:= 'NOVEMBRO ';
  System.SysUtils.FormatSettings.LongMonthNames[12]:= 'DEZEMBRO ';
end;

function TfrmCheque.ModificaCaracter(TEXTO:string):string;
// Elimina caracteres acentuados de um texto e retorna este texto em maiúsculas
var
  i,tamanho:integer;
  Texto_modificado:string;
  Caracter:char;
begin
  Texto := AnsiUpperCase(Texto);
  Tamanho := Length(Texto);
  for i :=1 to Tamanho do
    begin
      Caracter := Texto[i];
      case Caracter of
        'À','Á','Ã','Â','Ä': Texto_Modificado := Texto_Modificado + 'A';
        'È','É','Ê','Ë': Texto_Modificado := Texto_Modificado + 'E';
        'Ì','Í','Î','Ï': Texto_Modificado := Texto_Modificado + 'I';
        'Ò','Ó','Õ','Ô','Ö': Texto_Modificado := Texto_Modificado + 'O';
        'Ù','Ú','Û','Ü': Texto_Modificado := Texto_Modificado + 'U';
        'Ç': Texto_Modificado := Texto_Modificado + 'C';
        'Ñ': Texto_Modificado := Texto_Modificado + 'N';
        'Ÿ': Texto_Modificado := Texto_Modificado + 'Y';
        'ª': Texto_Modificado := Texto_Modificado + 'a';
        'º': Texto_Modificado := Texto_Modificado + 'o';
      else
        Texto_Modificado := Texto_Modificado + Caracter;
    end;
  end;
  result := Texto_Modificado;
end;

procedure TfrmCheque.Imprime_Caixa;
var
  i:integer;
  F:TextFile;
begin
        AssignFile(F,'LPT1');
        Rewrite(F);
        Writeln(F,'                               ');
        Writeln(F,'                                                    ',Val_editado);
        Writeln(F,'                               ');
        Writeln(F,'             ',lblExten1.caption);
        Writeln(F,'  ',lblExten2.caption);
        Writeln(F,'                               ');
        Writeln(F,'   ',edtNome.text);
        if Dia < 9
        then
          Data_Extenso:= Cidade + IntToStr(Dia) + ('   ') + (System.SysUtils.FormatSettings.LongMonthNames[Mes]) + ('      ') + IntToStr(Ano)
        else
          Data_Extenso:= Cidade + IntToStr(Dia) + ('  ') + (System.SysUtils.FormatSettings.LongMonthNames[Mes]) + ('      ') + IntToStr(Ano);
        Writeln(F,'                               ');
        Writeln(F,'                              ',Data_Extenso);
        for i:=1 to 9 do
          Writeln(F,'                               ');
        CloseFile(F);
end;



function TfrmCheque.CasasDecimais(Valor:String):String;
var len:integer;
begin
  len:= length(Valor);
  if (Valor[len]<> ',') and (Valor[len-1]= ',')
  then Valor:=Valor+'0'
  else
    begin
      if Valor[len-2]<> ','
      then Valor:=Valor+',00';
    end;
  CasasDecimais:=Valor;
end;


procedure TfrmCheque.FormKeyPress(Sender: TObject; var Key: Char);
begin
   if (Key = chr(13))
   then
     begin
        Key:= #0;
        Perform(wm_NextDlgCtl,0,0);
     end;
end;


procedure TfrmCheque.btnCopiaClick(Sender: TObject);
begin
    try
      ppCheque.Picture.LoadFromFile(dados.tbConfig.fieldByName('LOCAL_IMAGENS').Value+'cheque_'+qryConta.FieldByName('COD_CONTA').AsString+'.jpg');
    except;
    end;
    if rdgCruzado.ItemIndex = 0 then
    begin
     Copia_Linha1.Visible:=False;
     Copia_Linha2.Visible:=False;
     Cheque_Linha1.Visible:=False;
     Cheque_Linha2.Visible:=False;
     chkVisado.Checked:=True;
     chkCruzado.Checked:=False;
    end
    else
    begin
     Copia_Linha1.Visible:=True;
     Copia_Linha2.Visible:=True;
     Cheque_Linha1.Visible:=True;
     Cheque_Linha2.Visible:=True;
     chkVisado.Checked:=False;
     chkCruzado.Checked:=True;
    end;

    MontaExtenso;
    ppValorCopia.Caption:=edtValor.Text;
    ppExtenso1_Copia.Caption:=Extenso1;
    ppExtenso2_Copia.Caption:=Extenso2;
    ppNome_Copia.Caption:=edtNome.Text;
    ppCidade_Copia.Caption:=Cidade+',';

    DecodeDate(edtData.Date,Ano,Mes,Dia);
    ppDia_Copia.Caption:=IntToStr(Dia);
    ppMes_Copia.Caption:=MesExtenso(Mes);
    ppAno_Copia.Caption:=Copy(IntToStr(Ano),3,2);

    ppNumeroCheque.Caption:=lblNumero.Text;
    ppNumeroCheque2.Caption:=ppNumeroCheque.Caption;
    ppBanco.Caption:=qryConta.FieldbyName('COD_BANCO').AsString;
    ppNumeroConta.Caption:=qryConta.FieldbyName('COD_CONTA').AsString;
    ppUsado.Lines.Clear;
    ppUsado.Lines.Add(lblUsado.Text);
    ppAssinado.Caption:=lblAssinado.Text;
    ppAssinado2.Caption:=ppAssinado.Caption;

    if dados.tbConfig.FieldByName('CHEQUE_OPCAO_ASSINATURA').AsBoolean then
      ppAssinatura.Visible:=True
    else
      ppAssinatura.Visible:=False;

    Copia.Print;
end;

procedure TfrmCheque.MontaExtenso;
var Tamanho,Ultimo: Integer;
begin
  edtExtenso.Text:=Extenso(edtValor.Value);
  Tamanho:=length(edtExtenso.Text);

  if Tamanho < 65
  then
   begin
     Extenso1:=Formatar(UpperCase(Copy(edtExtenso.Text,1,65)),65,True,'*');
     Extenso2:=Formatar(' ',70,True,'*');
   end
  else
   begin
     Ultimo:=65;
     while copy(edtExtenso.Text,Ultimo,1) <> ' ' do
       begin
         dec(Ultimo);
       end;
     Extenso1:=UpperCase(Copy(edtExtenso.Text,1,Ultimo));
     Extenso2:=Formatar(UpperCase(Copy(edtExtenso.Text,Ultimo+1,120)),70,True,'*');
   end;
end;
{
     Extenso1:=UpperCase(Copy(edtExtenso.Text,1,65));
     Extenso2:=Formatar(UpperCase(Copy(edtExtenso.Text,66,120)),70,True,'*');
}
procedure TfrmCheque.FormCreate(Sender: TObject);
begin
  qryConta.Close;
  qryConta.Open;
   btnLimpar.Click;
  if dados.tbConfig.FieldByName('CHEQUE_VISADO_CRUZADO').AsBoolean then
    rdgCruzado.ItemIndex:= 0
  else
    rdgCruzado.ItemIndex:= 1;
  if dados.tbConfig.FieldByName('CHEQUE_COM_CANHOTO').AsBoolean then
    chkCanhoto.Checked:=True
  else
    chkCanhoto.Checked:=False;
  lblAssinado.Text:=dados.tbConfig.FieldByName('CHEQUE_ASSINADO_POR').AsString;
  
end;

end.
