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

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