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

     1  package boleto
     2  
     3  const templateBoletoItau = `
     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      		width: 216mm;
    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      
   144          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)}
   145          </style>
   146  
   147          <script type="text/javascript">
   148              window.onload = function getUrlParams() {
   149                  var url_string = window.location.href;
   150                  var url = new URL(url_string);
   151              
   152                  var fmt = url.searchParams.get("fmt");
   153              
   154                  if(fmt === "html") {
   155                      document.getElementById("headerBtn").style.display = "block";
   156                  } 
   157              }
   158          </script>    
   159  </head>
   160  
   161  <body>
   162  	<br/>
   163      <div class="headerBtn" id="headerBtn">
   164          <div style="text-align:right;">
   165              <button class="no-print btnDefault print" onclick="window.print()">
   166                  <i class="icss-print"></i>
   167                  <span class="align">&nbspImprimir</span>
   168              </button>
   169              <button class="no-print btnDefault print" onclick="window.location='./boleto?fmt=pdf&id={{bsonMongoToString .View.ID}}&pk={{.View.PublicKey}}'">
   170                  <i class="icss-files"></i>
   171                  <span class="align">&nbspGerar PDF</span>
   172              </button>            
   173          </div>
   174      </div>
   175      <br/> 
   176      {{template "boletoForm" .}}
   177  	<hr/>
   178      {{template "boletoForm" .}}
   179  	<div class="left">
   180  		<img style="margin-left:5mm;" id="barcode_{{printIfNotProduction .View.Barcode}}" src="data:image/png;base64,{{.Barcode64}}" alt="">
   181  		<br/>
   182  		</div>
   183      </div>
   184  </body>
   185  
   186  </html>
   187  `
   188  
   189  const boletoFormItau = `
   190  {{define "boletoForm"}}
   191  <div class="document">
   192          <table cellspacing="0" cellpadding="0">
   193              <tr class="topLine">
   194                  <td class="bankLogo">
   195                      {{.ConfigBank.Logo}}					
   196                  </td>
   197                  <td class="sideBorders center"><span style="font-weight:bold;font-size:0.9em;">{{.View.BankNumber}}</span></td>
   198                  <td class="boletoNumber center"><img src="data:image/png;base64,{{.DigitableLine}}" line="{{printIfNotProduction .View.DigitableLine}}"  /></td>
   199              </tr>
   200          </table>
   201          <table cellspacing="0" cellpadding="0" border="1">
   202              <tr>
   203                  <td width="80%" colspan="6">
   204                      <span class="title">Local de Pagamento</span>
   205                      <br/>
   206                      <span class="text">ATÉ O VENCIMENTO EM QUALQUER BANCO OU CORRESPONDENTE NÃO BANCÁRIO</span>
   207                  </td>
   208                  <td width="20%">
   209                      <span class="title">Data de Vencimento</span>
   210                      <br/>
   211                      <br/>
   212                      <p class="content right text" style="font-weight:bold;" id="expire_date">{{.View.Boleto.Title.ExpireDateTime | brdate}}</p>
   213                  </td>
   214              </tr>
   215              <tr>
   216                  <td width="80%" colspan="6">
   217                      <span class="title">Nome do Beneficiário / CNPJ / CPF / Endereço:</span>
   218                      <br/>
   219                      <table border="0" style="border:none">
   220                          <tr>
   221                              <td width="60%"><span class="text" id="recipient_name">{{.View.Boleto.Recipient.Name}}</span></td>
   222                              <td><span class="text" id="recipient_document"><b>{{.View.Boleto.Recipient.Document.Type}}</b> {{fmtDoc .View.Boleto.Recipient.Document}}</span></td>
   223                          </tr>
   224                      </table>
   225                      <br/>
   226                      <span class="text" id="recipient_address">{{.View.Boleto.Recipient.Address.Street}}, 
   227                      {{.View.Boleto.Recipient.Address.Number}} - 
   228                      {{.View.Boleto.Recipient.Address.District}}, 
   229                      {{.View.Boleto.Recipient.Address.StateCode}} - 
   230                      {{.View.Boleto.Recipient.Address.ZipCode}}</span>
   231                  </td>
   232                  <td width="20%">
   233                      <span class="title">Agência/Código Beneficiário</span>
   234                      <br/>
   235                      <br/>
   236                      <p class="content right" id="agreement_agency_account">
   237                      {{.View.Boleto.Agreement.Agency}} / {{.View.Boleto.Agreement.Account}}-{{.View.Boleto.Agreement.AccountDigit}}                        
   238                      </p>
   239                  </td>
   240              </tr>
   241  
   242              <tr>
   243                  <td width="20%">
   244                      <span class="title">Data do Documento</span>
   245                      <br/>
   246                      <p class="content center" id="create_date">{{.View.Boleto.Title.CreateDate | brdate}}</p>
   247                  </td>
   248                  <td width="17%" colspan="2">
   249                      <span class="title">Num. do Documento</span>
   250                      <br/>
   251                      <p class="content center" id="boleto_document_number">{{.View.Boleto.Title.DocumentNumber}}</p>
   252                  </td>
   253                  <td width="10%">
   254                      <span class="title">Espécie doc</span>
   255                      <br/>
   256                      <p class="content center" id="configbank_especie_doc">{{.ConfigBank.EspecieDoc}}</p>
   257                  </td>
   258                  <td width="8%">
   259                      <span class="title">Aceite</span>
   260                      <br/>
   261                      <p class="content center" id="configbank_aceite" >{{.ConfigBank.Aceite}}</p>
   262                  </td>
   263                  <td>
   264                      <span class="title">Data Processamento</span>
   265                      <br/>
   266                      <p class="content center" id="process_date">{{.View.Boleto.Title.CreateDate | brdate}}</p>
   267                  </td>
   268                  <td width="30%">                    
   269  					<span class="title">Carteira/Nosso Número</span>
   270  					<br/>
   271  					<br/>
   272                      <p class="content right" id="ournumber">{{.View.Boleto.Agreement.Wallet}} /
   273                      {{padLeft (toString .View.Boleto.Title.OurNumber) "0" 8}}-{{mod10ItauDv (padLeft (toString .View.Boleto.Title.OurNumber) "0" 8) (padLeft .View.Boleto.Agreement.Agency "0" 4) (padLeft .View.Boleto.Agreement.Account "0" 7) .View.Boleto.Agreement.Wallet}}
   274                      </p>                    
   275                  </td>
   276              </tr>
   277  
   278              <tr>                
   279                  <td width="20%">
   280                      <span class="title">Uso do Banco</span>
   281                      <br/>
   282                      <p class="content center">&nbsp;</p>
   283                  </td>                
   284                  <td width="14%">
   285                      <table>
   286                          <tr>
   287                              <td>
   288                                  <span class="title">Carteira</span>
   289                                  <br/>
   290                                  <p class="content center" id="wallet">                                
   291                                      {{.View.Boleto.Agreement.Wallet}}                                
   292                                  </p>
   293                              </td>
   294                          </tr>
   295                      </table>                    
   296                  </td>                
   297                  <td width="10%">
   298                      <span class="title">Espécie</span>
   299                      <br/>
   300                      <p class="content center">{{.ConfigBank.Moeda}}</p>
   301                  </td>
   302                  <td width="8%" colspan="2">
   303                      <span class="title">Quantidade</span>
   304                      <br/>
   305                      <p class="content center" id="configbank_quantidade">{{.ConfigBank.Quantidade}}</p>
   306                  </td>
   307                  <td>
   308                      <span class="title">Valor</span>
   309                      <br/>
   310                      <p class="content center" id="configbank_valorCotacao" >{{.ConfigBank.ValorCotacao}}</p>
   311                  </td>
   312                  <td width="30%">
   313                      <span class="title">(=) Valor do Documento</span>
   314                      <br/>
   315                      <br/>
   316                      <p class="content right" id="amount_in_cents" >{{fmtNumber .View.Boleto.Title.AmountInCents}}</p>
   317                  </td>
   318              </tr>
   319              <tr>
   320                  <td colspan="6" rowspan="4">
   321                      <span class="title">Instruções de responsabilidade do BENEFICIÁRIO. Qualquer dúvida sobre este boleto contate o beneficiário.</span>
   322                      <p class="content" id="instructions">{{.View.Boleto.Title.Instructions }}</p>
   323                  </td>
   324              </tr>
   325              <tr>
   326                  <td>
   327                      <span class="title">(-) Descontos/Abatimento</span>
   328                      <br/>
   329                      <p class="content right">&nbsp;</p>
   330                  </td>
   331              </tr>
   332              <tr>
   333                  <td>
   334                      <span class="title">(+) Juros/Multa</span>
   335                      <br/>
   336                      <p class="content right">&nbsp;</p>
   337                  </td>
   338              </tr>
   339              <tr>
   340                  <td>
   341                      <span class="title">(=) Valor Pago</span>
   342                      <br/>
   343                      <p class="content right">&nbsp;</p>
   344                  </td>
   345              </tr>
   346              <tr>
   347                  <td colspan="7">
   348                      <table border="0" style="border:none">
   349                          <tr>
   350                              <td width="60%"><span class="text" id="buyer_name"><b>Nome do Pagador: </b>&nbsp;{{.View.Boleto.Buyer.Name}}</span></td>
   351                              <td><span class="text" id="buyer_document"><b>CNPJ/CPF: </b>&nbsp;{{fmtDoc .View.Boleto.Buyer.Document}}</span></td>
   352                          </tr>
   353                          <tr>
   354                              <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>
   355                              <td>&nbsp;</td>
   356                          </tr>
   357                          <tr>
   358                              <td><span class="text"><b>Sacador/Avalista: </b> &nbsp;</span></td>
   359                              <td><span class="text"><b>CNPJ/CPF: </b> &nbsp;</span></td>
   360                          </tr>
   361                      </table>
   362                  </td>
   363              </tr>            
   364          </table>
   365  		<br/>
   366      </div>
   367  
   368  	{{end}}
   369  `
   370  
   371  const boletoPropostaLayoutFormItau = `
   372  {{define "boletoForm"}}
   373  <div class="document">
   374      <table cellspacing="0" cellpadding="0">
   375          <tbody>
   376              <tr class="topLine">
   377                  <td class="bankLogo">{{.ConfigBank.Logo}}</td>
   378                  <td class="sideBorders center"><span style="font-weight:700;font-size:.9em">{{.View.BankNumber}}</span></td>
   379                  <td class="boletoNumber center"><img src="data:image/png;base64,{{.DigitableLine}}" line="{{printIfNotProduction .View.DigitableLine}}"  /></td>
   380              </tr>
   381          </tbody>
   382      </table>
   383      <table cellspacing="0" cellpadding="0" border="1">
   384          <tbody>
   385              <tr>
   386                  <td colspan="6">
   387                      <p class="center" style="font-weight:bold">BOLETO DE PROPOSTA</p>
   388                      <br>
   389                      <p class="text" style="font-weight:bold">ESTE BOLETO SE REFERE A UMA PROPOSTA JÁ FEITA A VOCÊ E O
   390                          SEU PAGAMENTO NÃO É OBRIGATÓRIO.
   391                          <br>Deixar de pagá-lo não dará causa a protesto, a cobrança judicial ou extrajudicial, nem a
   392                          inserção de seu nome em cadastro de restrição de credito.
   393                          <br>Pagar até a data do vencimento significa aceitar a proposta.
   394                          <br>Informações adicionais sobre a proposta e sobre o respectivo contrato poderão ser
   395                          solicitadas a qualquer momento ao beneficiário,por meio de seus canais de atendimento.</p>
   396                  </td>
   397              </tr>
   398              <tr>
   399                  <td colspan="6"><span class="title">Local de Pagamento</span><br><span class="text">ATÉ O VENCIMENTO EM
   400                          QUALQUER BANCO OU CORRESPONDENTE NÃO BANCÁRIO</span></td>
   401              </tr>
   402              <tr>
   403                  <td colspan="5"><span class="title">Nome do Beneficiário / CNPJ / CPF / Endereço:</span>
   404                      <br>
   405                      <span class="text" id="recipient_name">{{.View.Boleto.Recipient.Name}}</span>
   406                      <span class="text" id="recipient_document" style="margin-left:5em"><b>{{.View.Boleto.Recipient.Document.Type}}</b> {{fmtDoc .View.Boleto.Recipient.Document}}</span>
   407                      <br>
   408                      <span class="text" id="recipient_address">{{.View.Boleto.Recipient.Address.Street}}, 
   409                      {{.View.Boleto.Recipient.Address.Number}} - 
   410                      {{.View.Boleto.Recipient.Address.District}}, 
   411                      {{.View.Boleto.Recipient.Address.StateCode}} - 
   412                      {{.View.Boleto.Recipient.Address.ZipCode}}</span>
   413                  </td>
   414                  <td width="20%"><span class="title">Data de Vencimento</span><br><br>
   415                      <p class="content right text" style="font-weight:700" id="expire_date">{{.View.Boleto.Title.ExpireDateTime | brdate}}</p>
   416                  </td>
   417              </tr>
   418              <tr>
   419                  <td width="20%"><span class="title">Data Processamento</span><br>
   420                      <p class="content center" id="process_date">{{.View.Boleto.Title.CreateDate | brdate}}</p>
   421                  </td>
   422                  <td width="17%"><span class="title">Num. do Documento</span><br>
   423                      <p class="content center" id="boleto_document_number">{{.View.Boleto.Title.DocumentNumber}}</p>
   424                  </td>
   425                  <td><span class="title">Nosso Número</span><br><br>
   426                      <p class="content center" id="ournumber">
   427                      {{padLeft (toString .View.Boleto.Title.OurNumber) "0" 8}}-{{mod10ItauDv (padLeft (toString .View.Boleto.Title.OurNumber) "0" 8) (padLeft .View.Boleto.Agreement.Agency "0" 4) (padLeft .View.Boleto.Agreement.Account "0" 7) .View.Boleto.Agreement.Wallet}}
   428                      </p>
   429                  </td>
   430                  <td width="22%"><span class="title">Agência/Código Beneficiário</span><br>
   431                      <p class="content center" id="agreement_agency_account">
   432                          {{.View.Boleto.Agreement.Agency}} / {{.View.Boleto.Agreement.Account}}-{{.View.Boleto.Agreement.AccountDigit}}
   433                      </p>
   434                  </td>
   435                  <td width="8%"><span class="title">Carteira</span><br>
   436                      <p class="content center" id="wallet">{{.View.Boleto.Agreement.Wallet}}</p>
   437                  </td>
   438                  <td><span class="title">(=) Valor do Documento</span><br><br>
   439                      <p class="content right" id="amount_in_cents">{{fmtNumber .View.Boleto.Title.AmountInCents}}</p>
   440                  </td>
   441              </tr>
   442              <tr>
   443                  <td colspan="5" rowspan="2"><span class="title">Informações de responsabilidade do
   444                          beneficiário</span><br><br><p class="content" id="instructions">{{.View.Boleto.Title.Instructions }}</p></td>
   445                  <td width="20%"><span class="title">(-) Descontos/Abatimento</span><br>
   446                      <p class="content right">&nbsp;</p>
   447                  </td>
   448              </tr>
   449              <tr>
   450                  <td><span class="title">(=) Valor Pago</span><br>
   451                      <p class="content right">&nbsp;</p>
   452                  </td>
   453              </tr>
   454              <tr>
   455                  <td colspan="7">
   456                      <table border="0" style="border:none">
   457                          <tbody>
   458                              <tr>
   459                                  <td width="60%"><span class="text" id="buyer_name"><b>Nome do Pagador: </b>&nbsp;{{.View.Boleto.Buyer.Name}}</span></td>
   460                                  <td><span class="text" id="buyer_document"><b>CNPJ/CPF: </b>&nbsp;{{fmtDoc .View.Boleto.Buyer.Document}}</span>
   461                                  </td>
   462                              </tr>
   463                              <tr>
   464                                  <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>
   465                                  <td>&nbsp;</td>
   466                              </tr>
   467                              <tr>
   468                                  <td><span class="text"><b>Sacador/Avalista:</b> &nbsp;</span></td>
   469                                  <td><span class="text"><b>CNPJ/CPF:</b> &nbsp;</span></td>
   470                              </tr>
   471                          </tbody>
   472                      </table>
   473                  </td>
   474              </tr>
   475          </tbody>
   476  
   477      </table><br>
   478  </div>
   479  	{{end}}
   480  `
   481  
   482  func getTemplateItau(bt string) (string, string) {
   483  	if bt == "BDP" {
   484  		return templateBoletoItau, boletoPropostaLayoutFormItau
   485  	}
   486  	return templateBoletoItau, boletoFormItau
   487  }