From 8a6f213e60699bf27eca70d8ed259e14715c96fc Mon Sep 17 00:00:00 2001 From: Fritz Zaucker Date: Wed, 15 Jun 2022 13:57:19 +0200 Subject: [PATCH 01/12] Add TotalNH3 print filter --- share/Models/version6/Total.nhd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/Models/version6/Total.nhd b/share/Models/version6/Total.nhd index 804d63e8..236b77c7 100644 --- a/share/Models/version6/Total.nhd +++ b/share/Models/version6/Total.nhd @@ -25,7 +25,7 @@ taxonomy = Total +nh3_nanimalproduction format= %.0f - print = SummaryLivestock,ResultsLivestock,LivestockNH3 + print = SummaryLivestock,ResultsLivestock,LivestockNH3,TotalNH3 ++labels sort = 099 en = Total From f5bae0023e4a4ee6069c60f6b496b6a04b48dbb9 Mon Sep 17 00:00:00 2001 From: Fritz Zaucker Date: Wed, 15 Jun 2022 13:58:33 +0200 Subject: [PATCH 02/12] Add comments --- lib/Agrammon/OutputFormatter/Text.pm6 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/Agrammon/OutputFormatter/Text.pm6 b/lib/Agrammon/OutputFormatter/Text.pm6 index 5bef73e0..472b5885 100644 --- a/lib/Agrammon/OutputFormatter/Text.pm6 +++ b/lib/Agrammon/OutputFormatter/Text.pm6 @@ -77,9 +77,12 @@ sub add-filters(@module-lines, Agrammon::Outputs::FilterGroupCollection $collect $unit, Str $prefix, Bool :$all-filters) { my @results = $collection.results-by-filter-group(:all($all-filters)); my $longest-filter = @results.map({ .key.map({ .key.chars + .value.chars }) }).flat.max + 1; + warn "TEXT formatter might have to be extended for multiple filter groups" if @filters.elems > 1; for @results { my %filters := .key; my $value := .value; +# TODO: make this an option +# next unless $value; my @filters = %filters.map: { .key ~ '=' ~ .value }; for (@filters || '(Uncategorized)').kv -> $idx, $filter-id { my $padding = ' ' x $longest-filter - $filter-id.chars; From fd27ff824d197c5c343f8a60a2b1f6d44157ab3e Mon Sep 17 00:00:00 2001 From: Fritz Zaucker Date: Wed, 15 Jun 2022 14:00:33 +0200 Subject: [PATCH 03/12] Add merged filter output to JSON --- lib/Agrammon/OutputFormatter/JSON.pm6 | 50 ++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/lib/Agrammon/OutputFormatter/JSON.pm6 b/lib/Agrammon/OutputFormatter/JSON.pm6 index a300b9e6..2ff4ccee 100644 --- a/lib/Agrammon/OutputFormatter/JSON.pm6 +++ b/lib/Agrammon/OutputFormatter/JSON.pm6 @@ -13,7 +13,7 @@ sub output-as-json( Bool :$all-filters = False, Bool :$short = False ) is export { - return get-data($model, $outputs, $include-filters, @print-set, $short, $language); + return get-data($model, $outputs, $include-filters, @print-set, $short, $language, :merge-filters); } sub output-for-gui(Agrammon::Model $model, @@ -28,7 +28,7 @@ sub output-for-gui(Agrammon::Model $model, ); } -sub get-data($model, $outputs, $include-filters, @print-set, $short, $language?) { +sub get-data($model, $outputs, $include-filters, @print-set, $short, $language?, :$merge-filters) { my @records; my $last-order = -1; for sorted-kv($outputs.get-outputs-hash) -> $module, $_ { @@ -36,10 +36,16 @@ sub get-data($model, $outputs, $include-filters, @print-set, $short, $language?) for sorted-kv($_) -> $output, $raw-value { my $var = $module ~ '::' ~ $output; my $order = $model.output-labels($module, $output) || $last-order; - push @records, make-record($module, $output, $model, $raw-value, $var, $order, $short, :$language, :@print-set); + my $record = make-record($module, $output, $model, $raw-value, $var, $order, $short, :$language, :@print-set); + push @records, $record; if $include-filters { if $raw-value ~~ Agrammon::Outputs::FilterGroupCollection && $raw-value.has-filters { - add-filters(@records, $module, $output, $model, $raw-value, $var, $order, $short, :@print-set); + if $merge-filters { + merge-filters($record, $module, $output, $model, $raw-value, $var, $order, $short, $language, :@print-set); + } + else { + add-filters(@records, $module, $output, $model, $raw-value, $var, $order, $short, :@print-set); + } } } $last-order = $order; @@ -52,10 +58,16 @@ sub get-data($model, $outputs, $include-filters, @print-set, $short, $language?) for sorted-kv(%values) -> $output, $raw-value { my $order = $model.output-labels($fq-name, $output) || $last-order; my $var = $q-name ~ '::' ~ $output; - push @records, make-record($fq-name, $output, $model, $raw-value, $var, $order, $short, $instance-id, :$language, :@print-set); + my $record = make-record($fq-name, $output, $model, $raw-value, $var, $order, $short, $instance-id, :$language, :@print-set); + push @records, $record; if $include-filters { if $raw-value ~~ Agrammon::Outputs::FilterGroupCollection && $raw-value.has-filters { - add-filters(@records, $fq-name, $output, $model, $raw-value, $var, $order, $short, :@print-set); + if $merge-filters { + merge-filters($record, $fq-name, $output, $model, $raw-value, $var, $order, $short, $language, :@print-set); + } + else { + add-filters(@records, $fq-name, $output, $model, $raw-value, $var, $order, $short, :@print-set); + } } } $last-order = $order; @@ -108,8 +120,8 @@ sub make-record($fq-name, $output, $model, $raw-value, $var, $order, $short, $in } sub add-filters(@records, $fq-name, $output, $model, - Agrammon::Outputs::FilterGroupCollection $collection, - $var, $order, $sort, :@print-set) { + Agrammon::Outputs::FilterGroupCollection $collection, + $var, $order, $sort, :@print-set) { for $collection.results-by-filter-group { my %keyFilters := .key; my @filters = translate-filter-keys($model, %keyFilters).map: -> $trans { %( label => $trans.key, enum => $trans.value ) }; @@ -117,3 +129,25 @@ sub add-filters(@records, $fq-name, $output, $model, push @records, make-record($fq-name, $output, $model, $value, $var, $order, $sort, :@print-set, :@filters); } } + +sub merge-filters($record, $fq-name, $output, $model, + Agrammon::Outputs::FilterGroupCollection $collection, + $var, $order, $sort, $language?, :@print-set) { + warn "JSON formatter must be extended for multiple filter groups" if @filters.elems > 1; + for $collection.results-by-filter-group { + my %keyFilters := .key; + my @filters = translate-filter-keys($model, %keyFilters).map: -> $trans { %( label => $trans.key, enum => $trans.value ) }; + my $value := .value; +# TODO: make this an option +# next unless $value; + my $filter-record = make-record($fq-name, $output, $model, $value, $var, $order, $sort, :@print-set, :@filters); + dd $filter-record; + push $record, %( :label($filter-record[0]{$language}), :value($filter-record)); + } + push $record, %( :label($record