Revbank

From Frack - Hackerspace Friesland
Jump to navigationJump to search
Project: revbank
Revbank.jpg
Status lopend
Betrokkenen
Afbeelding Anoniem.png Tblorb
Thomas (Tblorb) Rol: deelnemer Werkt aan: Geen projecten :(
,
Afbeelding Anoniem.png Juerd
Er is nog geen profiel voor Juerd. Maak er een aan met het profielformulier.
Projectcode frack
Afgeleid van: Frack Kassa
ProjectoverzichtProject toevoegen

het kassasysteem van revspace. In gebruik bij Frack sinds 14 mei 2019

Revbank is een kassasysteem met name ontwikkeld door juerd @ revspace. Sinds 14 mei 2019 is deze nu ook in gebruik bij Frack en vervangt het de oudere Frack Kassa.

Migratie

Tblorb begon 9 april 2019 met de migratie van het oude Frack kassasysteem naar revbank, een systeem gemaakt door revspace dat onderhouden wordt. Deze migratie was 14 mei 2019 voltooid.

Met de migratie van software kwam ook een migratie van hardware. De nieuwe Frack-PC hardware:

  • 7.5 GB ram
  • 300 GB HDD
  • CPU: Intel Core 2 Duo Processor E8400

De nieuwe kassa-PC was gedoneerd door Ghost van Hacklab.

Om de migratie uit te voeren is het onderstaande migrate.sh script gebouwd dat grotendeels het werk doet om de frack kassa database om te zetten naar de revbank database.

Configuratie frack kassa PC

OS: Xubuntu 18.04

Gebruiker: frack

Wachtwoord: frack

Startup script voor revbank: xfce4-terminal --fullscreen --execute ./startrevbank.sh

Live-versie revbank: ~/revbank

Broncode revbank: ~/Projects/revbank (Frack branch op GitHub)

Bestanden van migratie: ~/frackmigratie.project

migrate.sh

Lelijk script dat frackbar.sqlite opent in de huidige directory, data hieruit laadt en exporteert naar revbank files (.revbank.log voor oude transacties, en revbank.products en revbank.accounts).

Deze is gebruikt tijdens de migratie van de frack kassa naar revbank.

#!/bin/bash

LC_ALL=en_US.UTF-8 # required so printf isn't being stupid about , vs .

# sales -> .revbank.log
# part 1: datetime
sqlite3 frackbar.sqlite 'select datetime from sales' | sed 's/$/ CHECKOUT 0    frackbar-migratie LOSE EUR /' > /tmp/migrate1
# part 2: price
printf '%.2f\n' $(sqlite3 frackbar.sqlite 'select case when member=1 then memberprice else visitorprice end from sales JOIN product on sales.product=product.id;') > /tmp/migrate2
# part 3: product name
sqlite3 frackbar.sqlite 'select name,case when member=0 then " (visitor)" else "" end from sales JOIN product on sales.product=product.id;' | sed 's/\([^|]*\)|\([^|]*\)/# Frackbar sale: \1\2/' > /tmp/migrate3
# paste it together
paste -d' ' /tmp/migrate{1,2,3} > .revbank.log
rm /tmp/migrate{1,2,3}

# products -> revbank.products
sqlite3 frackbar.sqlite 'select barcode,visitorprice,name from product;' | tr '|' '\t' > revbank.products
# fix formatting of prices
paste <(cut -d$'\t' -f1 revbank.products) <(printf '%.2f\n' $(cut -d$'\t' -f2 revbank.products )) <(cut -d$'\t' -f3- revbank.products) | sponge revbank.products
# make backup of original product list before removing duplicates
cp revbank.products revbank.products.prefiltered
# for each duplicate entry, take the last price in the database
cut -d$'\t' -f1 revbank.products | sort -u > /tmp/keys
for d in $(cat /tmp/keys); do grep ^"$d"$'\t' revbank.products | tail -1 >> /tmp/newproducts; done
mv /tmp/newproducts revbank.products
# fix ugly formatting when name is too short
column -ts$'\t' revbank.products.prefiltered | sponge revbank.products.prefiltered
column -ts$'\t' revbank.products | sponge revbank.products
rm /tmp/keys


# creditcards -> revbank.accounts
sqlite3 frackbar.sqlite 'select barcode, credit, datetime from creditcard;' | tr '|' '\t' > revbank.accounts
# fix formatting of credit amounts
paste <(cut -d$'\t' -f1 revbank.accounts) <(printf '%+.2f\n' $(cut -d$'\t' -f2 revbank.accounts )) <(cut -d$'\t' -f3- revbank.accounts) | sponge revbank.accounts
column -ts$'\t' revbank.accounts | sponge revbank.accounts

Dit bestand filtert de producten zodat altijd de laatste prijzen worden gebruikt, de "prefiltered" versie wordt ook ge-output naar revbank.products.prefiltered. Om te zien hoe ze zijn aangepast (als meld geinstalleerd is):

meld <(sort revbank.products.prefiltered) <(sort revbank.products)

Hotfixes na migratie

Er waren na migratie wel een aantal problemen gevonden. De meeste hiervan lijken functionaliteit niet aan te tasten, maar ze zorgen wel voor een aantal artefacten in de UI:

  • migrate.sh exporteert datum-tijden met een spatie tussen datum en tijd, ipv met een _ zoals het bij revbank hoort
  • migrate.sh gebruikt een andere hoeveelheid indents dan revbank in revbank.accounts, waardoor het aantal indents in sommige lijsten zoals shame niet matchen
  • migrate.sh exporteert accounts waarbij de naam alleen verschilt in case (zoals FCC-thomas en FCC-THOMAS), maar revbank is case-insensitive in namen. Dit kan ervoor zorgen dat namen meerdere keren voorkomen in revbank.accounts, waarbij het lijkt dat de laatste altijd wordt gebruikt
  • revbank lijkt soms de casing te wijzigen in accountnamen wanneer ze worden opgeslagen. Het is nog niet helemaal duidelijk hoe dit werkt, maar er zijn lowercase FCCs aangetroffen in revbank.accounts nadat revbank is live gezet. Dit heeft geen functionele gevolgen behalve dat case van accounts er anders uit ziet in lijsten zoals shame. fixed?

De volgende hotfixes zijn sindsdien aangebracht om hier wat van te fixen:

  • .revbank.log is aangepast zodat alle datum-tijden gemaakt door migrate.sh nu een _ hebben ipv spatie
  • de FCCs die lower case gemaakt waren zijn handmatig upper case gemaakt in revbank.accounts