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"> Imprimir</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"> Gerar 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"> </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"> </p> 360 </td> 361 </tr> 362 <tr> 363 <td> 364 <span class="title">(+) Juros/Multa</span> 365 <br/> 366 <p class="content right"> </p> 367 </td> 368 </tr> 369 <tr> 370 <td> 371 <span class="title">(=) Valor Pago</span> 372 <br/> 373 <p class="content right"> </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> {{.View.Boleto.Buyer.Name}}</span></td> 381 <td><span class="text" id="buyer_document"><b>CNPJ/CPF: </b> {{fmtDoc .View.Boleto.Buyer.Document}}</span></td> 382 </tr> 383 <tr> 384 <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> 385 <td> </td> 386 </tr> 387 <tr> 388 <td><span class="text"><b>Sacador/Avalista: </b> </span></td> 389 <td><span class="text"><b>CNPJ/CPF: </b> </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"> </p> 479 </td> 480 </tr> 481 <tr> 482 <td><span class="title">(=) Valor Pago</span><br> 483 <p class="content right"> </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> {{.View.Boleto.Buyer.Name}}</span></td> 492 <td><span class="text" id="buyer_document"><b>CNPJ/CPF: </b> {{fmtDoc .View.Boleto.Buyer.Document}}</span> 493 </td> 494 </tr> 495 <tr> 496 <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> 497 <td> </td> 498 </tr> 499 <tr> 500 <td><span class="text"><b>Sacador/Avalista:</b> </span></td> 501 <td><span class="text"><b>CNPJ/CPF:</b> </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 }