Strichcode mit dem Kassenartikel auf den Bon drucken
Der Kassierer musste den Artikel bisher von Hand in der Kasse suchen. Jetzt steht er als Strichcode unter dem Betrag und wird gescannt. CODE128 in Zeichensatz B, nicht das sonst uebliche CODE39: dort sind nur Grossbuchstaben erlaubt, ein Artikel namens "techniker" waere damit nicht darstellbar. Die Modulbreite waehlt escpos.js so gross, wie die Papierbreite zulaesst - breitere Balken liest ein Handscanner zuverlaessiger, gerade auf Thermopapier, das einen Tag in einer Hosentasche hinter sich hat. Daraus ergibt sich die Laengengrenze von 17 Zeichen bei 80 mm Papier. Artikelname und An/Aus liegen in den Einstellungen, nicht im Code: der Name haengt am Artikelstamm der Kasse und kann sich aendern, ohne dass jemand an die App muss. Zwei Faelle, die sonst still danebengingen, melden sich jetzt: - Umlaute und Sonderzeichen weist das Speichern ab, statt sie zu verschlucken und einen Code zu drucken, der einen anderen Artikel bedeutet. - Passt der Name nicht auf die Papierbreite, druckt receipt.js ihn nur in Klarschrift. Ein abgeschnittener Code wird von keinem Scanner gelesen. Geprueft auf dem Epson TM-T88IV: Zwischenbeleg und Endbeleg, ausgeschalteter Strichcode, Laengengrenze, geschweifte Klammer im Namen (wird verdoppelt, sonst liest der Drucker sie als Umschaltbefehl). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b1c7d89a7d
commit
6ba0cdd07f
7 files changed
+229
-9
No files matched your search
+16
-1
@@ -569,6 +569,9 @@ async function loadSettings() {
|
||||
document.getElementById('receiptHeader').value = settings.receiptHeader || '';
|
||||
document.getElementById('receiptFooter').value = settings.receiptFooter || '';
|
||||
document.getElementById('printAutoOnStop').checked = state.printAutoOnStop;
|
||||
document.getElementById('receiptBarcodeEnabled').checked = settings.receiptBarcodeEnabled !== false;
|
||||
document.getElementById('receiptBarcodeArticle').value = settings.receiptBarcodeArticle || '';
|
||||
toggleBarcodeField();
|
||||
|
||||
updateSettingsPreview();
|
||||
renderPrinterState(settings.printer);
|
||||
@@ -584,11 +587,16 @@ async function saveSettings() {
|
||||
const receiptHeader = document.getElementById('receiptHeader').value;
|
||||
const receiptFooter = document.getElementById('receiptFooter').value;
|
||||
const printAutoOnStop = document.getElementById('printAutoOnStop').checked;
|
||||
const receiptBarcodeEnabled = document.getElementById('receiptBarcodeEnabled').checked;
|
||||
const receiptBarcodeArticle = document.getElementById('receiptBarcodeArticle').value;
|
||||
|
||||
try {
|
||||
const rate = await api('/api/settings', {
|
||||
method: 'PUT',
|
||||
body: JSON.stringify({ rateAmount, rateInterval, receiptHeader, receiptFooter, printAutoOnStop })
|
||||
body: JSON.stringify({
|
||||
rateAmount, rateInterval, receiptHeader, receiptFooter, printAutoOnStop,
|
||||
receiptBarcodeEnabled, receiptBarcodeArticle
|
||||
})
|
||||
});
|
||||
state.rate = rate;
|
||||
state.printAutoOnStop = rate.printAutoOnStop !== false;
|
||||
@@ -600,6 +608,13 @@ async function saveSettings() {
|
||||
}
|
||||
}
|
||||
|
||||
/** Der Artikelname interessiert nur, solange der Code auch gedruckt wird. */
|
||||
function toggleBarcodeField() {
|
||||
const an = document.getElementById('receiptBarcodeEnabled').checked;
|
||||
document.getElementById('barcodeArticleGroup').style.opacity = an ? '1' : '0.45';
|
||||
document.getElementById('receiptBarcodeArticle').disabled = !an;
|
||||
}
|
||||
|
||||
async function resetSettings() {
|
||||
if (!confirm('Tarif auf Standard zurücksetzen (€10 pro 10 Minuten)?')) return;
|
||||
document.getElementById('rateAmount').value = 10;
|
||||
|
||||
Reference in new issue
Block a user