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

     1  package boleto
     2  
     3  const templateBoletoPefisa = `
     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 boletoFormPefisa = `
   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}} - 
   221                      {{.View.Boleto.Recipient.Address.District}}, 
   222                      {{.View.Boleto.Recipient.Address.StateCode}} - 
   223                      {{.View.Boleto.Recipient.Address.ZipCode}}</span>
   224                  </td>
   225                  <td width="20%">
   226                      <span class="title">Agência/Código Beneficiário</span>
   227                      <br/>
   228                      <br/>
   229                      <p class="content right" id="agreement_agency_account">
   230                          {{.View.Boleto.Agreement.Agency}} / {{.View.Boleto.Agreement.AgreementNumber}}
   231                      </p>
   232                  </td>
   233              </tr>
   234  
   235              <tr>
   236                  <td width="20%">
   237                      <span class="title">Data do Documento</span>
   238                      <br/>
   239                      <p class="content center" id="create_date">{{.View.Boleto.Title.CreateDate | brdate}}</p>
   240                  </td>
   241                  <td width="17%" colspan="2">
   242                      <span class="title">Num. do Documento</span>
   243                      <br/>
   244                      <p class="content center" id="boleto_document_number">{{.View.Boleto.Title.DocumentNumber}}</p>
   245                  </td>
   246                  <td width="10%">
   247                      <span class="title">Espécie doc</span>
   248                      <br/>
   249                      <p class="content center" id="configbank_especie_doc">{{.ConfigBank.EspecieDoc}}</p>
   250                  </td>
   251                  <td width="8%">
   252                      <span class="title">Aceite</span>
   253                      <br/>
   254                      <p class="content center" id="configbank_aceite" >{{.ConfigBank.Aceite}}</p>
   255                  </td>
   256                  <td>
   257                      <span class="title">Data Processamento</span>
   258                      <br/>
   259                      <p class="content center" id="process_date">{{.View.Boleto.Title.CreateDate | brdate}}</p>
   260                  </td>
   261                  <td width="30%">
   262                      <span class="title">Carteira/Nosso Número</span>
   263                      <br/>
   264                      <br/>
   265                      <p class="content right" id="ournumber">{{.View.Boleto.Agreement.Wallet}}/{{.View.Boleto.Title.OurNumber}}</p>                   
   266                  </td>
   267              </tr>
   268  
   269              <tr>
   270                  {{if eq .View.BankNumber "033-7"}}
   271                  <td width="29%" colspan="2">
   272                      <table>
   273                          <tr>                            
   274                              <td>
   275                                  <span class="title">Carteira</span>
   276                                  <br/>
   277                                  <p class="content center" id="wallet">COBRANCA SIMPLES RCR</p>
   278                              </td>
   279                          </tr>
   280                      </table>                
   281                  </td>
   282                  {{else}}
   283                  <td width="20%">
   284                      <span class="title">Uso do Banco</span>
   285                      <br/>
   286                      <p class="content center">&nbsp;</p>
   287                  </td>                
   288                  <td width="14%">
   289                      <table>
   290                          <tr>
   291                              {{if eq .View.BankNumber "237-2"}}
   292                                  <td style="border-right: 1px solid #808080;" id="cel_cip">
   293                                      <span class="title">Cip</span>
   294                                      <br/>
   295                                      <p class="content center" id="wallet">865</p>
   296                                  </td>
   297                              {{end}}
   298  
   299                              <td>
   300                                  <span class="title">Carteira</span>
   301                                  <br/>
   302                                  <p class="content center" id="wallet">
   303                                  {{if eq .View.BankNumber "104-0"}}
   304                                      RG
   305                                  {{else}}
   306                                      {{.View.Boleto.Agreement.Wallet}}
   307                                  {{end}}
   308                                  </p>
   309                              </td>
   310                          </tr>
   311                      </table>
   312                      
   313                  </td>
   314                  {{end}}
   315                  <td width="10%">
   316                      <span class="title">Espécie</span>
   317                      <br/>
   318                      <p class="content center">{{.ConfigBank.Moeda}}</p>
   319                  </td>
   320                  <td width="8%" colspan="2">
   321                      <span class="title">Quantidade</span>
   322                      <br/>
   323                      <p class="content center" id="configbank_quantidade">{{.ConfigBank.Quantidade}}</p>
   324                  </td>
   325                  <td>
   326                      <span class="title">Valor</span>
   327                      <br/>
   328                      <p class="content center" id="configbank_valorCotacao" >{{.ConfigBank.ValorCotacao}}</p>
   329                  </td>
   330                  <td width="30%">
   331                      <span class="title">(=) Valor do Documento</span>
   332                      <br/>
   333                      <br/>
   334                      <p class="content right" id="amount_in_cents" >{{fmtNumber .View.Boleto.Title.AmountInCents}}</p>
   335                  </td>
   336              </tr>
   337              <tr>
   338                  <td colspan="6" rowspan="4">
   339                      <span class="title">Instruções de responsabilidade do BENEFICIÁRIO. Qualquer dúvida sobre este boleto contate o beneficiário.</span>
   340                      <p class="content" id="instructions">{{.View.Boleto.Title.Instructions }}</p>
   341                  </td>
   342              </tr>
   343              <tr>
   344                  <td>
   345                      <span class="title">(-) Descontos/Abatimento</span>
   346                      <br/>
   347                      <p class="content right">&nbsp;</p>
   348                  </td>
   349              </tr>
   350              <tr>
   351                  <td>
   352                      <span class="title">(+) Juros/Multa</span>
   353                      <br/>
   354                      <p class="content right">&nbsp;</p>
   355                  </td>
   356              </tr>
   357              <tr>
   358                  <td>
   359                      <span class="title">(=) Valor Pago</span>
   360                      <br/>
   361                      <p class="content right">&nbsp;</p>
   362                  </td>
   363              </tr>
   364              <tr>
   365                  <td colspan="7">
   366                      <table border="0" style="border:none">
   367                          <tr>
   368                              <td width="60%"><span class="text" id="buyer_name"><b>Nome do Pagador: </b>&nbsp;{{.View.Boleto.Buyer.Name}}</span></td>
   369                              <td><span class="text" id="buyer_document"><b>CNPJ/CPF: </b>&nbsp;{{fmtDoc .View.Boleto.Buyer.Document}}</span></td>
   370                          </tr>
   371                          <tr>
   372                              <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>
   373                              <td>&nbsp;</td>
   374                          </tr>
   375                          <tr>
   376                              <td><span class="text"><b>Sacador/Avalista: </b> &nbsp;</span></td>
   377                              <td><span class="text"><b>CNPJ/CPF: </b> &nbsp;</span></td>
   378                          </tr>
   379                      </table>
   380                  </td>
   381              </tr>            
   382          </table>
   383  		<br/>
   384      </div>
   385  
   386  	{{end}}
   387  `
   388  
   389  func getTemplatePefisa() (string, string) {
   390  	return templateBoletoPefisa, boletoFormPefisa
   391  }