From 30c55d21de656bb38b29ddaf1ef5b1e3ea078937 Mon Sep 17 00:00:00 2001 From: polyfloyd Date: Wed, 7 May 2025 00:20:31 +0200 Subject: [PATCH] Import from revbank fork --- bitlair_3dprint | 26 ++++++++++++++++++++++ bitlair_bigmoney | 17 +++++++++++++++ bitlair_deposit_methods | 27 +++++++++++++++++++++++ bitlair_mqtt | 19 ++++++++++++++++ bitlair_nomunnie | 15 +++++++++++++ bitlair_saldo | 48 +++++++++++++++++++++++++++++++++++++++++ 6 files changed, 152 insertions(+) create mode 100644 bitlair_3dprint create mode 100644 bitlair_bigmoney create mode 100644 bitlair_deposit_methods create mode 100644 bitlair_mqtt create mode 100644 bitlair_nomunnie create mode 100644 bitlair_saldo diff --git a/bitlair_3dprint b/bitlair_3dprint new file mode 100644 index 0000000..bf45a7d --- /dev/null +++ b/bitlair_3dprint @@ -0,0 +1,26 @@ +#!perl + +HELP "3dprint " => "3D-print filament afrekenen"; + +use Scalar::Util qw(looks_like_number); + +sub command :Tab(3dprint) ($self, $cart, $command, @) { + return NEXT if $command ne '3dprint'; + + return "Gewicht in gram, inclusief supports en purges", \&gram; +} + +sub gram($self, $cart, $input, @) { + looks_like_number($input) and $input == int($input) or return REJECT, "Invalid number!"; + my $gram = int($input); + return REJECT, "$input: Invalid amount." if $gram <= 0; + + my $beneficiary = "3dprinter"; + my $amount = 0.10 + $gram * 0.03; + + $cart + ->add(-$amount, "Given to $beneficiary ($gram g)") + ->add_contra($beneficiary, +$amount, "Received from \$you (${gram} g)"); + + return ACCEPT; +} diff --git a/bitlair_bigmoney b/bitlair_bigmoney new file mode 100644 index 0000000..9009fa5 --- /dev/null +++ b/bitlair_bigmoney @@ -0,0 +1,17 @@ +#!perl + +sub command :Tab(bigmoney) { + my ($self, $cart, $command) = @_; + + return NEXT if $command ne "bigmoney"; + + my @list = sort { + (split " ", $b)[1] <=> (split " ", $a)[1] + } grep { + not RevBank::Users::is_hidden($_) + } slurp("accounts"); + + print join "", @list[0..9]; + + return ACCEPT; +} diff --git a/bitlair_deposit_methods b/bitlair_deposit_methods new file mode 100644 index 0000000..845a4e4 --- /dev/null +++ b/bitlair_deposit_methods @@ -0,0 +1,27 @@ +#!perl + +sub hook_deposit_methods($class, $message, $hash, @) { + $$message = <<"END"; + +Selecteer één van de volgende: + +'iban': Abort en ga naar >>> https://deposit.bitlair.nl <<< +'cash': Contant geld in de kas +'reimburse': Declaraties van aankopen waar je van tevoren toestemming voor hebt gekregen + -> Stuur een scan van het bonnetje naar treasury\@bitlair.nl en vermeld dat je het bedrag via Revbank hebt geclaimed + -> Gebruik dit niet voor declaraties van meer dan 20 EUR +'other': Iets anders, geef een beschrijving op +END + + %$hash = ( + cash => { description => "Deposit (Cash)" }, + other => { description => "Deposit (%s)", prompts => [ "Description" ] }, + reimburse => { + description => "Reimbursement (%s, approval: %s)", + prompts => [ + "Please provide a short description", + "Which board member gave approval?", + ], + }, + ); +} diff --git a/bitlair_mqtt b/bitlair_mqtt new file mode 100644 index 0000000..9ffd004 --- /dev/null +++ b/bitlair_mqtt @@ -0,0 +1,19 @@ +#!perl + +use Cwd (); +use Net::MQTT::Simple; + +my $mqtt = Net::MQTT::Simple->new("mqtt.bitlair.nl"); + +sub command { NEXT } + +sub hook_checkout { + my ($class, $cart, $user, $transaction_id) = @_; + + my @entries = $cart->entries('product_id') or return; + + for my $entry (@entries) { + $mqtt->publish("bitlair/pos/product" => $entry->{description}) + for 1..$entry->quantity; + } +} diff --git a/bitlair_nomunnie b/bitlair_nomunnie new file mode 100644 index 0000000..c5e97e4 --- /dev/null +++ b/bitlair_nomunnie @@ -0,0 +1,15 @@ +#!perl + +use IO::Socket::IP; +use Net::MQTT::Simple "mqtt.bitlair.nl"; + +sub command { NEXT } + +sub hook_user_balance { + my ($class, $user, $old, $delta, $new, $transaction_id) = @_; + + return if $new >= -13.37; + return if RevBank::Users::is_hidden($user); + + publish "bitlair/bank/shame" => "NO MUNNIE?"; +} diff --git a/bitlair_saldo b/bitlair_saldo new file mode 100644 index 0000000..4e6c164 --- /dev/null +++ b/bitlair_saldo @@ -0,0 +1,48 @@ +#!perl + +use POSIX qw(strftime); + +sub _box(@lines) { + print( + "#" x 79, "\n", + (map { sprintf("## %-73s ##\n", $_) } @lines), + "#" x 79, "\n" + ); +} + +sub hook_checkout_done($class, $cart, $account, $transaction_id, @) { + defined $account or return; # hacks like 'undo' don't have an acting user + RevBank::Accounts::is_hidden($account) and return; + + my $balance = RevBank::Accounts::balance($account) or return; + my $since = RevBank::Accounts::since($account); + + if ($balance < -13.37) { + _box( + "Hoi $account,", + "", + "Je saldo is $balance en dus lager dan toegestaan.", + "", + "Saldo aanvullen kan via https://deposit.bitlair.nl", + "", + "Bedankt!", + "-- Het bestuur", + ); + } elsif ( + defined $since + and $since =~ /^-\@(.*)/ + and $1 lt strftime('%Y-%m-%d_%H:%M:%S', localtime(time() - 14 * 86400)) + ) { + _box( + "Hoi $account,", + "", + "Je staat al sinds $1 negatief, dus meer dan 2 weken. Deelnemers", + "mogen rood staan, maar niet langdurig.", + "", + "Saldo aanvullen kan via https://deposit.bitlair.nl", + "", + "Bedankt!", + "-- Het bestuur", + ); + } +}