From cf4dff8328414a613ace5c60c7f3f4f6f4e1e3d5 Mon Sep 17 00:00:00 2001 From: Aart van Halteren Date: Sun, 22 Jan 2023 17:23:49 +0100 Subject: [PATCH] Use gruff gem to generate bar graphs --- Gemfile | 1 + Gemfile.lock | 1 + app/helpers/TariffsMailer.rb | 2 +- app/models/cost.rb | 43 ++++--- config/locales/nl.yml | 213 +++++++++++++++++++++++++++++++++++ 5 files changed, 245 insertions(+), 15 deletions(-) create mode 100644 config/locales/nl.yml diff --git a/Gemfile b/Gemfile index 0ba5c40..c61cae7 100644 --- a/Gemfile +++ b/Gemfile @@ -12,4 +12,5 @@ gem 'ruby-gr' gem 'gr-plot' gem 'histogram' gem 'numo-narray' +gem 'i18n' gem 'gruff' diff --git a/Gemfile.lock b/Gemfile.lock index 0232c94..c6ed4ed 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -61,6 +61,7 @@ DEPENDENCIES gr-plot gruff histogram + i18n mail mysql2 nokogiri diff --git a/app/helpers/TariffsMailer.rb b/app/helpers/TariffsMailer.rb index 2c2aaf8..7d0e40a 100644 --- a/app/helpers/TariffsMailer.rb +++ b/app/helpers/TariffsMailer.rb @@ -3,7 +3,7 @@ require "mail" class TariffsMailer SSL_OPTS = { - :openssl_verify_mode => OpenSSL::SSL::VERIFY_NONE, + :openssl_verify_mode => OpenSSL::SSL::VERIFY_NONE, } diff --git a/app/models/cost.rb b/app/models/cost.rb index 42b47ff..ae82895 100644 --- a/app/models/cost.rb +++ b/app/models/cost.rb @@ -1,5 +1,7 @@ require 'open-uri' -require 'gr/plot' +require 'i18n' +require 'gruff' + EASY_ENERGY_TARIFFS = {} # See https://www.belastingdienst.nl/wps/wcm/connect/bldcontentnl/belastingdienst/zakelijk/overige_belastingen/belastingen_op_milieugrondslag/tarieven_milieubelastingen/tabellen_tarieven_milieubelastingen @@ -20,6 +22,11 @@ class Cost @entsoe = Entsoe.new(zone, storage_cost) @max_charge_kwh = max_charge @battery = Battery.new(battery_capacity) + + # Allow for Dutch titles in graphs + I18n.load_path += Dir[File.expand_path("config/locales") + "/*.yml"] + I18n.available_locales = [:en, :nl] + I18n.locale = :nl end # Government reduced VAT to 9% from 1 July 2022 until 31 Dec 2022 @@ -98,12 +105,16 @@ class Cost def easy_energy_tariff_barplot(date) hours = (0..23).to_a costs = easy_energy_hours(date) - GR.barplot(hours,costs) - # make sure you have set GKS_WSTYPE=100 in the environment (for headless setup) - title = "Tarief per kwH (incl. belastingen en BTW) - %s" % date.strftime("%A, %e %B %Y") - xlabel = "uur" - ylabel = "EUR" - GR.savefig("plots/easy_tariff_%s.png" % date.strftime("%F"), title: title, xlabel: xlabel, ylabel: ylabel) + g = Gruff::StackedBar.new() + g.title = "Tarief per kwH (incl. belastingen en BTW) - %s" % I18n.localize(date, format: "%A, %e %B %Y") + g.x_axis_label = "uur" + #g.y_axis_label = "EUR" + g.y_axis_label_format = lambda do |value| + "€ %.2f" % value + end + g.labels = hours + g.data :costs, costs + g.write("plots/easy_tariff_%s.png" % date.strftime("%F")) end def easy_energy_cost_barplot(date) @@ -126,13 +137,17 @@ class Cost # create plot hours = (0..23).to_a - GR.barplot(hours,costs) - # make sure you have set GKS_WSTYPE=100 in the environment (for headless setup) - title = "Verbruikskosten (incl. belastingen en BTW) - %s" % date.strftime("%A, %e %B %Y") - xlabel = "uur" - ylabel = "EUR" - GR.savefig("plots/easy_cost_%s.png" % date.strftime("%F"), title: title, xlabel: xlabel, ylabel: ylabel) - + g = Gruff::StackedBar.new() + g.title = "Verbruikskosten (incl. belastingen en BTW) - %s" % I18n.localize(date, format: "%A, %e %B %Y") + g.x_axis_label = "uur" + #g.y_axis_label = "EUR" + g.y_axis_label_format = lambda do |value| + "€ %.2f" % value + end + g.labels = hours + g.data :costs, costs + g.write("plots/easy_tariff_%s.png" % date.strftime("%F")) + # return the sum cost costs.sum end diff --git a/config/locales/nl.yml b/config/locales/nl.yml new file mode 100644 index 0000000..2f9ec0f --- /dev/null +++ b/config/locales/nl.yml @@ -0,0 +1,213 @@ +--- +nl: + activerecord: + errors: + messages: + record_invalid: 'Validatie mislukt: %{errors}' + restrict_dependent_destroy: + has_one: Kan item niet verwijderen omdat %{record} afhankelijk is + has_many: Kan item niet verwijderen omdat afhankelijke %{record} bestaan + date: + abbr_day_names: + - zo + - ma + - di + - wo + - do + - vr + - za + abbr_month_names: + - + - jan + - feb + - mrt + - apr + - mei + - jun + - jul + - aug + - sep + - okt + - nov + - dec + day_names: + - zondag + - maandag + - dinsdag + - woensdag + - donderdag + - vrijdag + - zaterdag + formats: + default: "%d-%m-%Y" + long: "%e %B %Y" + short: "%e %b" + month_names: + - + - januari + - februari + - maart + - april + - mei + - juni + - juli + - augustus + - september + - oktober + - november + - december + order: + - :day + - :month + - :year + datetime: + distance_in_words: + about_x_hours: + one: ongeveer een uur + other: ongeveer %{count} uur + about_x_months: + one: ongeveer een maand + other: ongeveer %{count} maanden + about_x_years: + one: ongeveer een jaar + other: ongeveer %{count} jaar + almost_x_years: + one: bijna een jaar + other: bijna %{count} jaar + half_a_minute: een halve minuut + less_than_x_seconds: + one: minder dan een seconde + other: minder dan %{count} seconden + less_than_x_minutes: + one: minder dan een minuut + other: minder dan %{count} minuten + over_x_years: + one: meer dan een jaar + other: meer dan %{count} jaar + x_seconds: + one: "%{count} seconde" + other: "%{count} seconden" + x_minutes: + one: "%{count} minuut" + other: "%{count} minuten" + x_days: + one: "%{count} dag" + other: "%{count} dagen" + x_months: + one: "%{count} maand" + other: "%{count} maanden" + x_years: + one: "%{count} jaar" + other: "%{count} jaar" + prompts: + second: seconde + minute: minuut + hour: uur + day: dag + month: maand + year: jaar + errors: + format: "%{attribute} %{message}" + messages: + accepted: moet worden geaccepteerd + blank: moet opgegeven zijn + confirmation: komt niet overeen met %{attribute} + empty: moet opgegeven zijn + equal_to: moet gelijk zijn aan %{count} + even: moet even zijn + exclusion: is gereserveerd + greater_than: moet groter zijn dan %{count} + greater_than_or_equal_to: moet groter dan of gelijk zijn aan %{count} + inclusion: is niet in de lijst opgenomen + invalid: is ongeldig + less_than: moet minder zijn dan %{count} + less_than_or_equal_to: moet minder dan of gelijk zijn aan %{count} + model_invalid: 'Validatie mislukt: %{errors}' + not_a_number: is geen getal + not_an_integer: moet een geheel getal zijn + odd: moet oneven zijn + other_than: moet anders zijn dan %{count} + present: moet leeg zijn + required: moet bestaan + taken: is al in gebruik + too_long: + one: is te lang (maximaal %{count} teken) + other: is te lang (maximaal %{count} tekens) + too_short: + one: is te kort (minimaal %{count} teken) + other: is te kort (minimaal %{count} tekens) + wrong_length: + one: heeft onjuiste lengte (moet %{count} teken lang zijn) + other: heeft onjuiste lengte (moet %{count} tekens lang zijn) + template: + body: 'Er zijn problemen met de volgende velden:' + header: + one: "%{model} niet opgeslagen: %{count} fout gevonden" + other: "%{model} niet opgeslagen: %{count} fouten gevonden" + helpers: + select: + prompt: Maak een keuze + submit: + create: "%{model} toevoegen" + submit: "%{model} opslaan" + update: "%{model} bijwerken" + number: + currency: + format: + delimiter: "." + format: "%u %n" + precision: 2 + separator: "," + significant: false + strip_insignificant_zeros: false + unit: "€" + format: + delimiter: "." + precision: 2 + separator: "," + significant: false + strip_insignificant_zeros: false + human: + decimal_units: + format: "%n %u" + units: + billion: miljard + million: miljoen + quadrillion: biljard + thousand: duizend + trillion: biljoen + unit: '' + format: + delimiter: '' + precision: 3 + significant: true + strip_insignificant_zeros: true + storage_units: + format: "%n %u" + units: + byte: + one: byte + other: bytes + gb: GB + kb: KB + mb: MB + tb: TB + percentage: + format: + delimiter: '' + format: "%n%" + precision: + format: + delimiter: '' + support: + array: + last_word_connector: " en " + two_words_connector: " en " + words_connector: ", " + time: + am: "'s ochtends" + formats: + default: "%a %d %b %Y %H:%M:%S %Z" + long: "%d %B %Y %H:%M" + short: "%d %b %H:%M" + pm: "'s middags" \ No newline at end of file