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"> Imprimir</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"> Gerar 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"> </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"> </p> 330 </td> 331 </tr> 332 <tr> 333 <td> 334 <span class="title">(+) Juros/Multa</span> 335 <br/> 336 <p class="content right"> </p> 337 </td> 338 </tr> 339 <tr> 340 <td> 341 <span class="title">(=) Valor Pago</span> 342 <br/> 343 <p class="content right"> </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> {{.View.Boleto.Buyer.Name}}</span></td> 351 <td><span class="text" id="buyer_document"><b>CNPJ/CPF: </b> {{fmtDoc .View.Boleto.Buyer.Document}}</span></td> 352 </tr> 353 <tr> 354 <td><span class="text" id="buyer_address"><b>Endereço: </b> {{.View.Boleto.Buyer.Address.Street}} {{.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> </td> 356 </tr> 357 <tr> 358 <td><span class="text"><b>Sacador/Avalista: </b> </span></td> 359 <td><span class="text"><b>CNPJ/CPF: </b> </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"> </p> 447 </td> 448 </tr> 449 <tr> 450 <td><span class="title">(=) Valor Pago</span><br> 451 <p class="content right"> </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> {{.View.Boleto.Buyer.Name}}</span></td> 460 <td><span class="text" id="buyer_document"><b>CNPJ/CPF: </b> {{fmtDoc .View.Boleto.Buyer.Document}}</span> 461 </td> 462 </tr> 463 <tr> 464 <td><span class="text" id="buyer_address"><b>Endereço: </b> {{.View.Boleto.Buyer.Address.Street}} {{.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> </td> 466 </tr> 467 <tr> 468 <td><span class="text"><b>Sacador/Avalista:</b> </span></td> 469 <td><span class="text"><b>CNPJ/CPF:</b> </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 }