github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/boleto/templateCaixa.go (about)

     1  package boleto
     2  
     3  const templateBoletoCaixa = `
     4  <html>
     5  <head>
     6      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     7  	<meta name="robots" content="noindex">
     8      <style>
     9  
    10          @media print
    11          {    
    12              .no-print, .no-print *
    13              {
    14                  display: none !important;
    15              }
    16          }
    17  
    18          body {
    19              font-family: "Arial";
    20      		background-color: #fff;
    21              font-size:0.7em;
    22          }
    23          .left {
    24      		margin: auto;		
    25      		float:left;
    26      	}
    27          .document {
    28              margin: auto auto;
    29              width: 216mm;            
    30          }
    31  
    32          .headerBtn {
    33              margin: auto auto;
    34              width: 216mm;
    35              background-color: #fff;
    36              display: none;
    37          }
    38  
    39          table {
    40              width: 100%;
    41              position: relative;
    42              border-collapse: collapse;
    43          }
    44  
    45          .boletoNumber {
    46              width: 66%;
    47              font-weight: bold;
    48              font-size:0.9em;
    49          }
    50  
    51          .center {
    52              text-align: center;
    53          }
    54  
    55          .right {
    56              text-align: right;
    57              right: 20px;
    58          }
    59  
    60          td {
    61              position: relative;
    62          }
    63  
    64          .title {
    65              position: absolute;
    66              left: 0px;
    67              top: 0px;
    68              font-size:0.65em;
    69              font-weight: bold;
    70          }
    71  
    72          .text {
    73               font-size:0.7em;
    74          }
    75  
    76          p.content {
    77              padding: 0px;
    78              width: 100%;
    79              margin: 0px;
    80              font-size:0.7em;
    81          }
    82  
    83          .sideBorders {
    84              border-left: 1px solid black;
    85              border-right: 1px solid black;
    86          }
    87  
    88          hr {
    89              size: 1;
    90              border: 1px dashed;
    91      		width: 216mm;
    92      		margin-top: 9mm;
    93          	margin-bottom: 9mm;
    94          }
    95  
    96          br {
    97              content: " ";
    98              display: block;
    99              margin: 12px 0;
   100              line-height: 12px;
   101          }
   102  
   103          .print {
   104              /* TODO(dbeam): reconcile this with overlay.css' .default-button. */
   105              background-color: rgb(77, 144, 254);
   106              background-image: linear-gradient(to bottom, rgb(77, 144, 254), rgb(71, 135, 237));
   107              border: 1px solid rgb(48, 121, 237);
   108              color: #fff;
   109              text-shadow: 0 1px rgba(0, 0, 0, 0.1);
   110          }
   111  
   112          .btnDefault {
   113              font-kerning: none;
   114              font-weight: bold;
   115          }
   116  
   117          .btnDefault:not(:focus):not(:disabled) {
   118              border-color: #808080;
   119          }
   120  
   121          button {
   122              border: 1px;
   123              padding: 5px;
   124              line-height: 20px;
   125          }
   126  
   127          span.iconFont {
   128              font-size: 20px;
   129          }
   130  
   131          span.align {
   132              display: inline-block;
   133              vertical-align: middle;
   134          }
   135  
   136          label {
   137              -moz-user-select: -moz-none;
   138              -khtml-user-select: none;
   139              -webkit-user-select: none;            
   140              -ms-user-select: none;
   141              user-select: none;
   142          }
   143          .spacing {
   144              margin: auto auto;
   145              width: 216mm; 
   146          }
   147      
   148          i[class*=icss-]{position:relative;display:inline-block;font-style:normal;background-color:currentColor;-webkit-box-sizing:border-box;box-sizing:border-box;vertical-align:middle}i[class*=icss-]:after,i[class*=icss-]:before{content:"";border-width:0;position:absolute;-webkit-box-sizing:border-box;box-sizing:border-box}i.icss-print{width:.68em;height:1em;border-style:solid;border-color:currentcolor;border-width:.07em;-webkit-border-radius:.05em;border-radius:.05em;background-color:transparent;margin:0 .17em}i.icss-print:before{width:1em;height:.4em;border-width:.07em .21em 0;border-style:solid;border-color:currentColor currentcolor transparent;-webkit-border-radius:.05em .05em 0 0;border-radius:.05em .05em 0 0;top:.25em;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(20%,transparent),color-stop(20%,currentcolor),color-stop(60%,currentcolor),color-stop(60%,transparent));background-image:-webkit-linear-gradient(transparent 20%,currentcolor 20%,currentcolor 60%,transparent 60%);background-image:-o-linear-gradient(transparent 20%,currentcolor 20%,currentcolor 60%,transparent 60%);background-image:linear-gradient(transparent 20%,currentcolor 20%,currentcolor 60%,transparent 60%)}i.icss-print:after{width:.45em;height:.065em;background-color:currentColor;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);top:.6em;-webkit-box-shadow:0 .12em,-.1em -.28em 0 .05em;box-shadow:0 .12em,-.1em -.28em 0 .05em}i.icss-files{width:.75em;height:.95em;background-color:transparent;border:.05em solid transparent;border-width:0 .05em .05em 0;-webkit-box-shadow:inset 0 0 0 .065em,.13em .11em 0 -.05em;box-shadow:inset 0 0 0 .065em,.13em .11em 0 -.05em;-webkit-border-radius:0 .3em 0 0;border-radius:0 .3em 0 0;margin:0 .17em .05em .1em}i.icss-files:before{border-style:solid;border-width:.2em;top:.037em;left:.25em;-webkit-border-radius:.1em;border-radius:.1em;border-color:transparent currentColor transparent transparent;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}
   149          </style>
   150  
   151          <script type="text/javascript">
   152              window.onload = function getUrlParams() {
   153                  var url_string = window.location.href;
   154                  var url = new URL(url_string);
   155              
   156                  var fmt = url.searchParams.get("fmt");
   157              
   158                  if(fmt === "html") {
   159                      document.getElementById("headerBtn").style.display = "block";
   160                  } 
   161              }
   162          </script>    
   163      
   164  </head>
   165  
   166  <body>
   167      
   168  	<br/>
   169      <div class="headerBtn" id="headerBtn">
   170          <div style="text-align:right;">
   171              <button class="no-print btnDefault print" onclick="window.print()">
   172                  <i class="icss-print"></i>
   173                  <span class="align">&nbspImprimir</span>
   174              </button>
   175              <button class="no-print btnDefault print" onclick="window.location='./boleto?fmt=pdf&id={{bsonMongoToString .View.ID}}&pk={{.View.PublicKey}}'">
   176                  <i class="icss-files"></i>
   177                  <span class="align">&nbspGerar PDF</span>
   178              </button>            
   179          </div>
   180      </div>
   181      <br/> 
   182      {{template "boletoForm" .}}
   183      <div class="spacing">
   184          <div style="float:left">
   185              <p style="margin: 0;">
   186                  SAC CAIXA: 0800 726 0101 / Ouvidoria: 0800 725 7474<br style="margin:2px 0;">
   187                  Para pessoas com deficiência auditiva ou de fala: 0800 726 2492<br style="margin:2px 0;">
   188                  caixa.gov.br<br>
   189              </p>
   190          </div>
   191          <div style="float:right">
   192              <span>Autenticação Mecânica - Recibo do Sacado</span>
   193          </div>
   194      </div>
   195      </br>    
   196      <div class="spacing">
   197          <hr/>
   198      </div>
   199      {{template "boletoForm" .}}
   200      <div class="spacing">    
   201          <div class="left">        
   202              <img style="margin-left:5mm;" id="barcode_{{printIfNotProduction .View.Barcode}}" src="data:image/png;base64,{{.Barcode64}}" alt="">            
   203              <br/>
   204          </div>
   205          <div class="right" style="float:right;">
   206              <span class="right">Autenticação Mecânica – Ficha de Compensação</span>
   207          </div>
   208      </div>
   209  </body>
   210  </html>
   211  `
   212  
   213  const boletoFormCaixa = `
   214  {{define "boletoForm"}}
   215  <div class="document">
   216          <table cellspacing="0" cellpadding="0">
   217              <tr class="topLine">
   218                  <td class="bankLogo">
   219                      {{.ConfigBank.Logo}}					
   220                  </td>
   221                  <td class="sideBorders center"><span style="font-weight:bold;font-size:0.9em;">{{.View.BankNumber}}</span></td>
   222                  <td class="boletoNumber center"><img src="data:image/png;base64,{{.DigitableLine}}" line="{{printIfNotProduction .View.DigitableLine}}"  /></td>
   223              </tr>
   224          </table>
   225          <table cellspacing="0" cellpadding="0" border="1">
   226              <tr>
   227                  <td width="80%" colspan="6">
   228                      <span class="title">Local de Pagamento</span>
   229                      <br/>
   230                      <span class="text">PREFERENCIALMENTE NAS CASAS LOTÉRICAS ATÉ O VALOR LIMITE</span>
   231                  </td>
   232                  <td width="20%">
   233                      <span class="title">Data de Vencimento</span>
   234                      <br/>
   235                      <br/>
   236                      <p class="content right text" style="font-weight:bold;" id="expire_date">{{.View.Boleto.Title.ExpireDateTime | brdate}}</p>
   237                  </td>
   238              </tr>
   239              <tr>
   240                  <td width="80%" colspan="6">
   241                      <span class="title">Nome do Beneficiário / CNPJ / CPF / Endereço:</span>
   242                      <br/>
   243                      <table border="0" style="border:none">
   244                          <tr>
   245                              <td width="60%"><span class="text" id="recipient_name">{{.View.Boleto.Recipient.Name}}</span></td>
   246                              <td><span class="text" id="recipient_document"><b>{{.View.Boleto.Recipient.Document.Type}}</b> {{fmtDoc .View.Boleto.Recipient.Document}}</span></td>
   247                          </tr>
   248                      </table>
   249                      <br/>
   250                      <span class="text" id="recipient_address">{{.View.Boleto.Recipient.Address.Street}}, 
   251                      {{.View.Boleto.Recipient.Address.Number}} - 
   252                      {{.View.Boleto.Recipient.Address.District}}, 
   253                      {{.View.Boleto.Recipient.Address.StateCode}} - 
   254                      {{.View.Boleto.Recipient.Address.ZipCode}}</span>
   255                  </td>
   256                  <td width="20%">
   257                      <span class="title">Agência/Código Cedente</span>
   258                      <br/>
   259                      <br/>
   260                      <p class="content right" id="agreement_agency_account">
   261                          {{.View.Boleto.Agreement.Agency}} / {{.View.Boleto.Agreement.AgreementNumber}}-{{mod11dv .View.Boleto.Agreement.AgreementNumber true}}                 
   262                      </p>
   263                  </td>
   264              </tr>
   265  
   266              <tr>
   267                  <td width="20%">
   268                      <span class="title">Data do Documento</span>
   269                      <br/>
   270                      <p class="content center" id="create_date">{{.View.Boleto.Title.CreateDate | brdate}}</p>
   271                  </td>
   272                  <td width="17%" colspan="2">
   273                      <span class="title">Num. do Documento</span>
   274                      <br/>
   275                      <p class="content center" id="boleto_document_number">{{.View.Boleto.Title.DocumentNumber}}</p>
   276                  </td>
   277                  <td width="10%">
   278                      <span class="title">Espécie doc</span>
   279                      <br/>
   280                      <p class="content center" id="configbank_especie_doc">{{.ConfigBank.EspecieDoc}}</p>
   281                  </td>
   282                  <td width="8%">
   283                      <span class="title">Aceite</span>
   284                      <br/>
   285                      <p class="content center" id="configbank_aceite" >{{.ConfigBank.Aceite}}</p>
   286                  </td>
   287                  <td>
   288                      <span class="title">Data Processamento</span>
   289                      <br/>
   290                      <p class="content center" id="process_date">{{.View.Boleto.Title.CreateDate | brdate}}</p>
   291                  </td>
   292                  <td width="30%">                    
   293                      <span class="title">Nosso Número</span>
   294                      <br/>
   295                      <br/>
   296                      <p class="content right" id="ournumber">{{.View.Boleto.Title.OurNumber}}-{{mod11dv .View.Boleto.Title.OurNumber true}}</p>                    
   297                  </td>
   298              </tr>
   299  
   300              <tr>
   301                  {{if eq .View.BankNumber "033-7"}}
   302                  <td width="29%" colspan="2">
   303                      <table>
   304                          <tr>                            
   305                              <td>
   306                                  <span class="title">Carteira</span>
   307                                  <br/>
   308                                  <p class="content center" id="wallet">COBRANCA SIMPLES RCR</p>
   309                              </td>
   310                          </tr>
   311                      </table>                
   312                  </td>
   313                  {{else}}
   314                  <td width="20%">
   315                      <span class="title">Uso do Banco</span>
   316                      <br/>
   317                      <p class="content center">&nbsp;</p>
   318                  </td>                
   319                  <td width="14%">
   320                      <table>
   321                          <tr>
   322                              <td>
   323                                  <span class="title">Carteira</span>
   324                                  <br/>
   325                                  <p class="content center" id="wallet">                                
   326                                      RG                                
   327                                  </p>
   328                              </td>
   329                          </tr>
   330                      </table>
   331                      
   332                  </td>
   333                  {{end}}
   334                  <td width="10%">
   335                      <span class="title">Espécie</span>
   336                      <br/>
   337                      <p class="content center">{{.ConfigBank.Moeda}}</p>
   338                  </td>
   339                  <td width="8%" colspan="2">
   340                      <span class="title">Quantidade</span>
   341                      <br/>
   342                      <p class="content center" id="configbank_quantidade">{{.ConfigBank.Quantidade}}</p>
   343                  </td>
   344                  <td>
   345                      <span class="title">Valor</span>
   346                      <br/>
   347                      <p class="content center" id="configbank_valorCotacao" >{{.ConfigBank.ValorCotacao}}</p>
   348                  </td>
   349                  <td width="30%">
   350                      <span class="title">(=) Valor do Documento</span>
   351                      <br/>
   352                      <br/>
   353                      <p class="content right" id="amount_in_cents" >{{fmtNumber .View.Boleto.Title.AmountInCents}}</p>
   354                  </td>
   355              </tr>
   356              <tr>
   357                  <td colspan="6" rowspan="6">
   358                      <span class="title">Instruções de responsabilidade do BENEFICIÁRIO. Qualquer dúvida sobre este boleto contate o beneficiário.</span>
   359                      <p class="content" id="instructions">{{.View.Boleto.Title.Instructions }}</p>
   360                  {{if .View.Boleto.Title.HasFees}}
   361                      <br/>
   362                      <p class="content">** VALORES EXPRESSOS EM REAIS **</p>
   363                      {{if .View.Boleto.Title.Fees.Interest.HasInterest}}
   364                          <p class="content">{{getInterestInstruction .View.Boleto.Title}}</p>
   365                      {{end}}
   366                      {{if .View.Boleto.Title.Fees.Fine.HasFine}}
   367                          <p class="content">{{getFineInstruction .View.Boleto.Title}}</p>
   368                      {{end}}
   369                  {{end}}
   370                  </td>
   371              </tr>
   372              <tr>
   373                  <td>
   374                      <span class="title">(-) Desconto</span>
   375                      <br/>
   376                      <p class="content right">&nbsp;</p>
   377                  </td>
   378              </tr>
   379              <tr>
   380                  <td>
   381                      <span class="title">(-) Outras Deduções/Abatimento</span>
   382                      <br/>
   383                      <p class="content right">&nbsp;</p>
   384                  </td>
   385              </tr>
   386              <tr>
   387                  <td>
   388                      <span class="title">(+) Mora/Multa/Juros</span>
   389                      <br/>
   390                      <p class="content right">&nbsp;</p>
   391                  </td>
   392              </tr>
   393              <tr>
   394                  <td>
   395                      <span class="title">(+) Outros Acrécimos</span>
   396                      <br/>
   397                      <p class="content right">&nbsp;</p>
   398                  </td>
   399              </tr>
   400              <tr>
   401                  <td>
   402                      <span class="title">(=) Valor Cobrado</span>
   403                      <br/>
   404                      <p class="content right">&nbsp;</p>
   405                  </td>
   406              </tr>
   407              <tr>
   408                  <td colspan="7">
   409                      <table border="0" style="border:none">
   410                          <tr>
   411                              <td width="60%"><span class="text" id="buyer_name"><b>Nome do Pagador: </b>&nbsp;{{.View.Boleto.Buyer.Name}}</span></td>
   412                              <td><span class="text" id="buyer_document"><b>CNPJ/CPF: </b>&nbsp;{{fmtDoc .View.Boleto.Buyer.Document}}</span></td>
   413                          </tr>
   414                          <tr>
   415                          {{if .View.Boleto.Buyer.HasAddress}}
   416                              <td><span class="text" id="buyer_address"><b>Endereço: </b>&nbsp;{{.View.Boleto.Buyer.Address.Street}}&nbsp;{{.View.Boleto.Buyer.Address.Number}}, {{.View.Boleto.Buyer.Address.District}} - {{.View.Boleto.Buyer.Address.City}}, {{.View.Boleto.Buyer.Address.StateCode}} - {{.View.Boleto.Buyer.Address.ZipCode}}</span></td>
   417                              <td>&nbsp;</td>
   418                          {{else}}
   419                          <td><span class="text" id="buyer_address"><b>Endereço: </b>&nbsp;&nbsp;</span></td>
   420                              <td>&nbsp;</td>
   421                          {{end}}
   422                          </tr>
   423                          <tr>
   424                          {{if .View.Boleto.HasPayeeGuarantor}}
   425                              <td><span class="text"><b>Sacador/Avalista: </b> &nbsp;{{.View.Boleto.PayeeGuarantor.Name}}</span></td>
   426                              <td><span class="text"><b>CNPJ/CPF: </b> &nbsp;{{fmtDoc .View.Boleto.PayeeGuarantor.Document}}</span></td>
   427                          {{else}}
   428                              <td><span class="text"><b>Sacador/Avalista: </b> &nbsp;</span></td>
   429                              <td><span class="text"><b>CNPJ/CPF: </b> &nbsp;</span></td>
   430                          {{end}}     
   431                          </tr>
   432                      </table>
   433                  </td>
   434              </tr>
   435  
   436          </table>
   437  		<br/>
   438      </div>
   439  
   440  	{{end}}
   441  `
   442  
   443  func getTemplateCaixa() (string, string) {
   444  	return templateBoletoCaixa, boletoFormCaixa
   445  }