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"> Imprimir</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"> Gerar 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"> </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"> </p> 353 </td> 354 </tr> 355 <tr> 356 <td> 357 <span class="title">(+) Juros/Multa</span> 358 <br/> 359 <p class="content right"> </p> 360 </td> 361 </tr> 362 <tr> 363 <td> 364 <span class="title">(=) Valor Pago</span> 365 <br/> 366 <p class="content right"> </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> {{.View.Boleto.Buyer.Name}}</span></td> 374 <td><span class="text" id="buyer_document"><b>CNPJ/CPF: </b> {{fmtDoc .View.Boleto.Buyer.Document}}</span></td> 375 </tr> 376 <tr> 377 <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> 378 <td> </td> 379 </tr> 380 <tr> 381 {{if .View.Boleto.HasPayeeGuarantor}} 382 <td><span class="text"><b>Sacador/Avalista: </b> {{.View.Boleto.PayeeGuarantor.Name}}</span></td> 383 <td><span class="text"><b>CNPJ/CPF: </b> {{fmtDoc .View.Boleto.PayeeGuarantor.Document}}</span></td> 384 {{else}} 385 <td><span class="text"><b>Sacador/Avalista: </b> </span></td> 386 <td><span class="text"><b>CNPJ/CPF: </b> </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"> </p> 480 </td> 481 </tr> 482 <tr> 483 <td><span class="title">(=) Valor Pago</span><br> 484 <p class="content right"> </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> {{.View.Boleto.Buyer.Name}}</span></td> 493 <td><span class="text" id="buyer_document"><b>CNPJ/CPF: </b> {{fmtDoc .View.Boleto.Buyer.Document}}</span> 494 </td> 495 </tr> 496 <tr> 497 <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> 498 <td> </td> 499 </tr> 500 <tr> 501 <td><span class="text"><b>Sacador/Avalista:</b> </span></td> 502 <td><span class="text"><b>CNPJ/CPF:</b> </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 }