75 lines
2 KiB
Go
75 lines
2 KiB
Go
package printer
|
|
|
|
import (
|
|
"fmt"
|
|
"image"
|
|
_ "image/jpeg"
|
|
"log"
|
|
"net"
|
|
"os"
|
|
|
|
"git.ctdo.de/henne/blitzer-v2/config"
|
|
"git.ctdo.de/henne/blitzer-v2/db"
|
|
"github.com/hennedo/escpos"
|
|
)
|
|
|
|
var whyImage image.Image
|
|
|
|
func init() {
|
|
if config.C.PrinterPort == "" {
|
|
return
|
|
}
|
|
imageFile, err := os.Open("webserver/assets/img/traffic_police.jpg")
|
|
if err != nil {
|
|
log.Printf("error loading image: %s", err)
|
|
}
|
|
whyImage, _, err = image.Decode(imageFile)
|
|
if err != nil {
|
|
log.Printf("image decoding error: %s", err)
|
|
}
|
|
|
|
}
|
|
|
|
func PrintTicket(ticket db.SpeedingTicket) {
|
|
if config.C.PrinterPort == "" {
|
|
return
|
|
}
|
|
socket, err := net.Dial("tcp", config.C.PrinterPort)
|
|
if err != nil {
|
|
log.Printf("printer error serial port: %s", err)
|
|
}
|
|
printer := escpos.New(socket)
|
|
printer.Initialize()
|
|
//printer.PrintImage(whyImage)
|
|
printer.Justify(escpos.JustifyCenter)
|
|
printer.Bold(true).Size(2, 2).Write("WHY Traffic Police")
|
|
printer.LineFeed()
|
|
printer.LineFeed()
|
|
printer.Bold(false).Size(1, 1).WriteWEU("Traffic Violation")
|
|
printer.LineFeed()
|
|
printer.LineFeed()
|
|
printer.Bold(false).Size(1, 1).WriteWEU("Dear being,")
|
|
printer.LineFeed()
|
|
time := ticket.CreatedAt
|
|
speed := ticket.Speed
|
|
limit := ticket.AllowedSpeed
|
|
printer.Bold(false).Size(1, 1).WriteWEU("we have found that you have violated")
|
|
printer.LineFeed()
|
|
printer.Bold(true).WriteWEU("WHY2025 traffic rules")
|
|
printer.LineFeed()
|
|
printer.Bold(false).WriteWEU(fmt.Sprintf("At %s on the %s", time.Format("15:04:05"), time.Format("02.01.2006")))
|
|
printer.LineFeed()
|
|
printer.WriteWEU("you exceeded the maximum allowed Speed of")
|
|
printer.LineFeed()
|
|
printer.WriteWEU(fmt.Sprintf("%dkm/h by %dkm/h", limit, speed-limit))
|
|
printer.LineFeed()
|
|
printer.WriteWEU(fmt.Sprintf("reaching a speed of %dkm/h", speed))
|
|
printer.LineFeed()
|
|
printer.QRCode("https://traffic.dre.li/ticket/"+ticket.ID.String(), true, 10, escpos.QRCodeErrorCorrectionLevelH)
|
|
printer.LineFeed()
|
|
printer.WriteWEU("find your ticket including proof online.")
|
|
printer.LineFeed()
|
|
printer.LineFeed()
|
|
printer.LineFeed()
|
|
printer.PrintAndCut()
|
|
}
|