diff --git a/CHANGELOG.md b/CHANGELOG.md index a74b5d2f..d38eeab0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # Agrammon Change Log - - extend REST inputTemplate for json + +- feature branch floor_mitigation, 2022-06-09, christoph.haeni@bfh.ch + + - pigs: + - floor mitigation has effect on both indoors and outdoors + - Slurry_Label_Open has 100% flow into outdoors - pre, 2022-06-09, christoph.haeni@bfh.ch diff --git a/lib/Agrammon/OutputFormatter/CSV.pm6 b/lib/Agrammon/OutputFormatter/CSV.pm6 index 0c58348a..b231b4bb 100644 --- a/lib/Agrammon/OutputFormatter/CSV.pm6 +++ b/lib/Agrammon/OutputFormatter/CSV.pm6 @@ -16,11 +16,11 @@ sub output-as-csv( ) is export { return (gather for sorted-kv($outputs.get-outputs-hash) -> $module, $_ { my $prefix = "$simulation-name;$dataset-id" if $simulation-name; + my $filters = $include-filters ?? 'total' !! ''; when Hash { for sorted-kv($_) -> $output, $value { next unless $model.should-print($module, $output, @print-set); - my $filters = ''; my $raw-value = $value; my $var = $output; my $unit = $model.output-unit($module, $output, $language); @@ -42,7 +42,6 @@ sub output-as-csv( } when Array { for sorted-kv($_) -> $instance-id, %instance-outputs { - my $filters = ''; for sorted-kv(%instance-outputs) -> $fq-name, %values { my $q-name = module-with-instance($module, $instance-id, $fq-name); for sorted-kv(%values) -> $output, $value { @@ -82,8 +81,8 @@ sub add-filters(Agrammon::Outputs::FilterGroupCollection $collection, for (@filters || ( :value('Uncategorized') ) ) { my @data = ( |($prefix if $prefix), - $q-name, - $fq-name, + $q-name, # module + $fq-name, # variable ., flat-value($raw-value) // '', $unit diff --git a/lib/Agrammon/OutputFormatter/JSON.pm6 b/lib/Agrammon/OutputFormatter/JSON.pm6 index a300b9e6..5055ef9d 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,23 @@ 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) { + 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); + push $record, %( :label($filter-record[0]{$language}), :value($filter-record)); + } + push $record, %( :label($record