github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/boleto/templateCaixa.go (about) 1 package boleto 2 3 const templateBoletoCaixa = ` 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 float:left; 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 .spacing { 144 margin: auto auto; 145 width: 216mm; 146 } 147 148 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)} 149 </style> 150 151 <script type="text/javascript"> 152 window.onload = function getUrlParams() { 153 var url_string = window.location.href; 154 var url = new URL(url_string); 155 156 var fmt = url.searchParams.get("fmt"); 157 158 if(fmt === "html") { 159 document.getElementById("headerBtn").style.display = "block"; 160 } 161 } 162 </script> 163 164 </head> 165 166 <body> 167 168 <br/> 169 <div class="headerBtn" id="headerBtn"> 170 <div style="text-align:right;"> 171 <button class="no-print btnDefault print" onclick="window.print()"> 172 <i class="icss-print"></i> 173 <span class="align"> Imprimir</span> 174 </button> 175 <button class="no-print btnDefault print" onclick="window.location='./boleto?fmt=pdf&id={{bsonMongoToString .View.ID}}&pk={{.View.PublicKey}}'"> 176 <i class="icss-files"></i> 177 <span class="align"> Gerar PDF</span> 178 </button> 179 </div> 180 </div> 181 <br/> 182 {{template "boletoForm" .}} 183 <div class="spacing"> 184 <div style="float:left"> 185 <p style="margin: 0;"> 186 SAC CAIXA: 0800 726 0101 / Ouvidoria: 0800 725 7474<br style="margin:2px 0;"> 187 Para pessoas com deficiência auditiva ou de fala: 0800 726 2492<br style="margin:2px 0;"> 188 caixa.gov.br<br> 189 </p> 190 </div> 191 <div style="float:right"> 192 <span>Autenticação Mecânica - Recibo do Sacado</span> 193 </div> 194 </div> 195 </br> 196 <div class="spacing"> 197 <hr/> 198 </div> 199 {{template "boletoForm" .}} 200 <div class="spacing"> 201 <div class="left"> 202 <img style="margin-left:5mm;" id="barcode_{{printIfNotProduction .View.Barcode}}" src="data:image/png;base64,{{.Barcode64}}" alt=""> 203 <br/> 204 </div> 205 <div class="right" style="float:right;"> 206 <span class="right">Autenticação Mecânica – Ficha de Compensação</span> 207 </div> 208 </div> 209 </body> 210 </html> 211 ` 212 213 const boletoFormCaixa = ` 214 {{define "boletoForm"}} 215 <div class="document"> 216 <table cellspacing="0" cellpadding="0"> 217 <tr class="topLine"> 218 <td class="bankLogo"> 219 {{.ConfigBank.Logo}} 220 </td> 221 <td class="sideBorders center"><span style="font-weight:bold;font-size:0.9em;">{{.View.BankNumber}}</span></td> 222 <td class="boletoNumber center"><img src="data:image/png;base64,{{.DigitableLine}}" line="{{printIfNotProduction .View.DigitableLine}}" /></td> 223 </tr> 224 </table> 225 <table cellspacing="0" cellpadding="0" border="1"> 226 <tr> 227 <td width="80%" colspan="6"> 228 <span class="title">Local de Pagamento</span> 229 <br/> 230 <span class="text">PREFERENCIALMENTE NAS CASAS LOTÉRICAS ATÉ O VALOR LIMITE</span> 231 </td> 232 <td width="20%"> 233 <span class="title">Data de Vencimento</span> 234 <br/> 235 <br/> 236 <p class="content right text" style="font-weight:bold;" id="expire_date">{{.View.Boleto.Title.ExpireDateTime | brdate}}</p> 237 </td> 238 </tr> 239 <tr> 240 <td width="80%" colspan="6"> 241 <span class="title">Nome do Beneficiário / CNPJ / CPF / Endereço:</span> 242 <br/> 243 <table border="0" style="border:none"> 244 <tr> 245 <td width="60%"><span class="text" id="recipient_name">{{.View.Boleto.Recipient.Name}}</span></td> 246 <td><span class="text" id="recipient_document"><b>{{.View.Boleto.Recipient.Document.Type}}</b> {{fmtDoc .View.Boleto.Recipient.Document}}</span></td> 247 </tr> 248 </table> 249 <br/> 250 <span class="text" id="recipient_address">{{.View.Boleto.Recipient.Address.Street}}, 251 {{.View.Boleto.Recipient.Address.Number}} - 252 {{.View.Boleto.Recipient.Address.District}}, 253 {{.View.Boleto.Recipient.Address.StateCode}} - 254 {{.View.Boleto.Recipient.Address.ZipCode}}</span> 255 </td> 256 <td width="20%"> 257 <span class="title">Agência/Código Cedente</span> 258 <br/> 259 <br/> 260 <p class="content right" id="agreement_agency_account"> 261 {{.View.Boleto.Agreement.Agency}} / {{.View.Boleto.Agreement.AgreementNumber}}-{{mod11dv .View.Boleto.Agreement.AgreementNumber true}} 262 </p> 263 </td> 264 </tr> 265 266 <tr> 267 <td width="20%"> 268 <span class="title">Data do Documento</span> 269 <br/> 270 <p class="content center" id="create_date">{{.View.Boleto.Title.CreateDate | brdate}}</p> 271 </td> 272 <td width="17%" colspan="2"> 273 <span class="title">Num. do Documento</span> 274 <br/> 275 <p class="content center" id="boleto_document_number">{{.View.Boleto.Title.DocumentNumber}}</p> 276 </td> 277 <td width="10%"> 278 <span class="title">Espécie doc</span> 279 <br/> 280 <p class="content center" id="configbank_especie_doc">{{.ConfigBank.EspecieDoc}}</p> 281 </td> 282 <td width="8%"> 283 <span class="title">Aceite</span> 284 <br/> 285 <p class="content center" id="configbank_aceite" >{{.ConfigBank.Aceite}}</p> 286 </td> 287 <td> 288 <span class="title">Data Processamento</span> 289 <br/> 290 <p class="content center" id="process_date">{{.View.Boleto.Title.CreateDate | brdate}}</p> 291 </td> 292 <td width="30%"> 293 <span class="title">Nosso Número</span> 294 <br/> 295 <br/> 296 <p class="content right" id="ournumber">{{.View.Boleto.Title.OurNumber}}-{{mod11dv .View.Boleto.Title.OurNumber true}}</p> 297 </td> 298 </tr> 299 300 <tr> 301 {{if eq .View.BankNumber "033-7"}} 302 <td width="29%" colspan="2"> 303 <table> 304 <tr> 305 <td> 306 <span class="title">Carteira</span> 307 <br/> 308 <p class="content center" id="wallet">COBRANCA SIMPLES RCR</p> 309 </td> 310 </tr> 311 </table> 312 </td> 313 {{else}} 314 <td width="20%"> 315 <span class="title">Uso do Banco</span> 316 <br/> 317 <p class="content center"> </p> 318 </td> 319 <td width="14%"> 320 <table> 321 <tr> 322 <td> 323 <span class="title">Carteira</span> 324 <br/> 325 <p class="content center" id="wallet"> 326 RG 327 </p> 328 </td> 329 </tr> 330 </table> 331 332 </td> 333 {{end}} 334 <td width="10%"> 335 <span class="title">Espécie</span> 336 <br/> 337 <p class="content center">{{.ConfigBank.Moeda}}</p> 338 </td> 339 <td width="8%" colspan="2"> 340 <span class="title">Quantidade</span> 341 <br/> 342 <p class="content center" id="configbank_quantidade">{{.ConfigBank.Quantidade}}</p> 343 </td> 344 <td> 345 <span class="title">Valor</span> 346 <br/> 347 <p class="content center" id="configbank_valorCotacao" >{{.ConfigBank.ValorCotacao}}</p> 348 </td> 349 <td width="30%"> 350 <span class="title">(=) Valor do Documento</span> 351 <br/> 352 <br/> 353 <p class="content right" id="amount_in_cents" >{{fmtNumber .View.Boleto.Title.AmountInCents}}</p> 354 </td> 355 </tr> 356 <tr> 357 <td colspan="6" rowspan="6"> 358 <span class="title">Instruções de responsabilidade do BENEFICIÁRIO. Qualquer dúvida sobre este boleto contate o beneficiário.</span> 359 <p class="content" id="instructions">{{.View.Boleto.Title.Instructions }}</p> 360 {{if .View.Boleto.Title.HasFees}} 361 <br/> 362 <p class="content">** VALORES EXPRESSOS EM REAIS **</p> 363 {{if .View.Boleto.Title.Fees.Interest.HasInterest}} 364 <p class="content">{{getInterestInstruction .View.Boleto.Title}}</p> 365 {{end}} 366 {{if .View.Boleto.Title.Fees.Fine.HasFine}} 367 <p class="content">{{getFineInstruction .View.Boleto.Title}}</p> 368 {{end}} 369 {{end}} 370 </td> 371 </tr> 372 <tr> 373 <td> 374 <span class="title">(-) Desconto</span> 375 <br/> 376 <p class="content right"> </p> 377 </td> 378 </tr> 379 <tr> 380 <td> 381 <span class="title">(-) Outras Deduções/Abatimento</span> 382 <br/> 383 <p class="content right"> </p> 384 </td> 385 </tr> 386 <tr> 387 <td> 388 <span class="title">(+) Mora/Multa/Juros</span> 389 <br/> 390 <p class="content right"> </p> 391 </td> 392 </tr> 393 <tr> 394 <td> 395 <span class="title">(+) Outros Acrécimos</span> 396 <br/> 397 <p class="content right"> </p> 398 </td> 399 </tr> 400 <tr> 401 <td> 402 <span class="title">(=) Valor Cobrado</span> 403 <br/> 404 <p class="content right"> </p> 405 </td> 406 </tr> 407 <tr> 408 <td colspan="7"> 409 <table border="0" style="border:none"> 410 <tr> 411 <td width="60%"><span class="text" id="buyer_name"><b>Nome do Pagador: </b> {{.View.Boleto.Buyer.Name}}</span></td> 412 <td><span class="text" id="buyer_document"><b>CNPJ/CPF: </b> {{fmtDoc .View.Boleto.Buyer.Document}}</span></td> 413 </tr> 414 <tr> 415 {{if .View.Boleto.Buyer.HasAddress}} 416 <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> 417 <td> </td> 418 {{else}} 419 <td><span class="text" id="buyer_address"><b>Endereço: </b> </span></td> 420 <td> </td> 421 {{end}} 422 </tr> 423 <tr> 424 {{if .View.Boleto.HasPayeeGuarantor}} 425 <td><span class="text"><b>Sacador/Avalista: </b> {{.View.Boleto.PayeeGuarantor.Name}}</span></td> 426 <td><span class="text"><b>CNPJ/CPF: </b> {{fmtDoc .View.Boleto.PayeeGuarantor.Document}}</span></td> 427 {{else}} 428 <td><span class="text"><b>Sacador/Avalista: </b> </span></td> 429 <td><span class="text"><b>CNPJ/CPF: </b> </span></td> 430 {{end}} 431 </tr> 432 </table> 433 </td> 434 </tr> 435 436 </table> 437 <br/> 438 </div> 439 440 {{end}} 441 ` 442 443 func getTemplateCaixa() (string, string) { 444 return templateBoletoCaixa, boletoFormCaixa 445 }