github.com/mundipagg/boleto-api@v0.0.0-20230620145841-3f9ec742599f/boleto/templateStone.go (about) 1 package boleto 2 3 const templateBoletoStone = ` 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 boletoFormStone = ` 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">Nosso Número</span> 268 <br/> 269 <br/> 270 <p class="content right" id="ournumber">{{.View.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">1</p> 308 </td> 309 </tr> 310 </table> 311 312 </td> 313 {{end}} 314 <td width="10%"> 315 <span class="title">Espécie</span> 316 <br/> 317 <p class="content center">{{.ConfigBank.Moeda}}</p> 318 </td> 319 <td width="8%" colspan="2"> 320 <span class="title">Quantidade</span> 321 <br/> 322 <p class="content center" id="configbank_quantidade">{{.ConfigBank.Quantidade}}</p> 323 </td> 324 <td> 325 <span class="title">Valor</span> 326 <br/> 327 <p class="content center" id="configbank_valorCotacao" >{{.ConfigBank.ValorCotacao}}</p> 328 </td> 329 <td width="30%"> 330 <span class="title">(=) Valor do Documento</span> 331 <br/> 332 <br/> 333 <p class="content right" id="amount_in_cents" >{{fmtNumber .View.Boleto.Title.AmountInCents}}</p> 334 </td> 335 </tr> 336 <tr> 337 <td colspan="6" rowspan="4"> 338 <span class="title">Instruções de responsabilidade do BENEFICIÁRIO. Qualquer dúvida sobre este boleto contate o beneficiário.</span> 339 <p class="content right"> </p> 340 <p class="content right"> </p> 341 <p class="content" id="instructions">{{.View.Boleto.Title.Instructions }}</p> 342 {{if .View.Boleto.Title.HasFees}} 343 <br/> 344 <p class="content">** VALORES EXPRESSOS EM REAIS **</p> 345 {{if .View.Boleto.Title.Fees.Interest.HasInterest}} 346 <p class="content">{{getInterestInstruction .View.Boleto.Title}}</p> 347 {{end}} 348 {{if .View.Boleto.Title.Fees.Fine.HasFine}} 349 <p class="content">{{getFineInstruction .View.Boleto.Title}}</p> 350 {{end}} 351 {{end}} 352 </td> 353 </tr> 354 <tr> 355 <td> 356 <span class="title">(-) Descontos/Abatimento</span> 357 <br/> 358 <p class="content right"> </p> 359 </td> 360 </tr> 361 <tr> 362 <td> 363 <span class="title">(+) Juros/Multa</span> 364 <br/> 365 <p class="content right"> </p> 366 </td> 367 </tr> 368 <tr> 369 <td> 370 <span class="title">(=) Valor Pago</span> 371 <br/> 372 <p class="content right"> </p> 373 </td> 374 </tr> 375 <tr> 376 <td colspan="7"> 377 <table border="0" style="border:none"> 378 <tr> 379 <td width="60%"><span class="text" id="buyer_name"><b>Nome do Pagador: </b> {{.View.Boleto.Buyer.Name}}</span></td> 380 <td><span class="text" id="buyer_document"><b>CNPJ/CPF: </b> {{fmtDoc .View.Boleto.Buyer.Document}}</span></td> 381 </tr> 382 <tr> 383 <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> 384 <td> </td> 385 </tr> 386 <tr> 387 <td><span class="text"><b>Sacador/Avalista: </b> </span></td> 388 <td><span class="text"><b>CNPJ/CPF: </b> </span></td> 389 </tr> 390 </table> 391 </td> 392 </tr> 393 </table> 394 <br/> 395 </div> 396 397 {{end}} 398 ` 399 400 func getTemplateStone() (string, string) { 401 return templateBoletoStone, boletoFormStone 402 }