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

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