App-BPOMUtils
view release on metacpan or search on metacpan
lib/App/BPOMUtils.pm view on Meta::CPAN
SODIUM: {
my $code_round_sodium = sub {
my $val = shift;
if ($val < 5) { 0 }
elsif ($val <= 140) { _nearest( 5, $val) }
else { _nearest(10, $val) }
};
my $code_round_sodium_pct_dv = sub {
my ($val, $fat_valr) = @_;
if ($fat_valr == 0) { 0 }
else { _nearest(1 , $val) }
};
my $val0 = $args{sodium};
my $val = $val0*$args{$size_key}/100;
my $valr = $code_round_sodium->($val);
my $pct_dv_R = $code_round_sodium_pct_dv->($val/325*100, $valr);
if ($output_format eq 'raw_table') {
push @rows, {
name_eng => 'Salt (Sodium)',
name_ind => 'Garam (Natrium)',
val_per_100g => $val0,
(val_per_srv => $val,
val_per_srv_R => $valr) x ($per_package_ing ? 0:1),
(val_per_pkg => $val,
val_per_pkg_R => $valr) x $per_package_ing,
pct_dv => $val/325*100,
pct_dv_R => $pct_dv_R,
};
} elsif ($output_format =~ /vertical/) {
push @rows, [{bottom_border=>1, colspan=>2, $attr=>$code_fmttext->("*Garam (Natrium)*")}, {align=>'right', $attr=>$code_fmttext->("*$valr mg*")}, {align=>'right', $attr=>"$pct_dv_R %"}, ''];
} elsif ($output_format =~ /linear/) {
push @rows, $code_fmttext->("*Garam (Natrium) $valr mg ($pct_dv_R% AKG)*. ");
}
}
if ($output_format eq 'raw_table') {
} elsif ($output_format =~ /vertical/) {
push @rows, [{colspan=>5, $attr=>$code_fmttext->("/*Persen AKG berdasarkan kebutuhan energi 2150 kkal. Kebutuhan energi Anda mungkin lebih tinggi atau lebih rendah./")}];
} elsif ($output_format =~ /linear/) {
push @rows, $code_fmttext->( "/Persen AKG berdasarkan kebutuhan energi 2150 kkal. Kebutuhan energi Anda mungkin lebih tinggi atau lebih rendah./");
}
OUTPUT:
if ($output_format eq 'raw_table') {
return [200, "OK", \@rows, {'table.fields'=>[qw/name_eng name_ind val_per_100g val_per_srv val_per_srv_R val_per_pkg val_per_pkg_R pct_dv pct_dv_R/]}];
}
my $text;
if ($output_format =~ /vertical/) {
if ($output_format =~ /html/) {
require Text::Table::HTML;
my $table = Text::Table::HTML::table(rows => \@rows, header_row=>0);
$table =~ s!<table>!<table><colgroup><col style="width:16pt;"><col style="width:200pt;"><col style="width:48pt;"><col style="width:48pt;"><col style="width:36pt;"></colgroup>!;
$text = "
<style>
table { border-collapse: collapse; border: 1px solid; }
tr.has_bottom_border { border-bottom: 1pt solid black; }
// td:first-child { background: red; }
</style>\n" . $table;
} else {
require Text::Table::More;
$text = Text::Table::More::generate_table(rows => \@rows, color=>1, header_row=>0);
}
} elsif ($output_format =~ /linear/) {
if ($output_format =~ /html/) {
$text = "
<style>
p { border-style: solid; }
</style>
<p>" . join("", @rows). "</p>\n";
} else {
$text = join("", @rows). "\n";
}
}
if ($output_format =~ /html/ && $args{browser}) {
require Browser::Open;
require File::Slurper;
require File::Temp;
my $tempdir = File::Temp::tempdir();
my $temppath = "$tempdir/ing.html";
File::Slurper::write_text($temppath, $text);
my $url = "file:$temppath";
my $err = Browser::Open::open_browser($url);
return [500, "Can't open browser"] if $err;
return [200];
}
return [200, "OK", $text, {'cmdline.skip_format'=>1}];
}
1;
# ABSTRACT: Utilities related to BPOM
__END__
=pod
=encoding UTF-8
=head1 NAME
App::BPOMUtils - Utilities related to BPOM
=head1 VERSION
This document describes version 0.014 of App::BPOMUtils (from Perl distribution App-BPOMUtils), released on 2022-11-10.
=head1 SYNOPSIS
# Use via the included scripts
=head1 DESCRIPTION
This distribution includes CLI utilities related to BPOM (Badan Pengawas Obat
dan Makanan, Indonesian equivalent of Food & Drug Administration authority).
lib/App/BPOMUtils.pm view on Meta::CPAN
Return value: (any)
=head2 bpom_show_nutrition_facts
Usage:
bpom_show_nutrition_facts(%args) -> [$status_code, $reason, $payload, \%result_meta]
Round values and format them as nutrition fact table (ING - informasi nilai gizi).
Examples:
=over
=item * An example, in linear text format (colorE<sol>emphasis is shown with markup):
bpom_show_nutrition_facts(
carbohydrate => 13.113,
color => "never",
fat => 0.223,
output_format => "linear_text",
package_size => 20,
protein => 0.99,
saturated_fat => 0.01,
serving_size => 175,
sodium => 0.223,
sugar => 7.173
);
Result:
[
200,
"OK",
"*INFORMASI NILAI GIZI* *JUMLAH PER KEMASAN (20 g*) : *Energi total 10 kkal*, Energi dari lemak 0 kkal, Energi dari lemak jenuh 0 kkal, *Lemak total 0 g (0% AKG)*, *Lemak jenuh 0 g (0% AKG)*, *Protein 0 g (0% AKG)*, *Karbohidrat total 3 g (1% AKG...
{ "cmdline.skip_format" => 1 },
]
=item * The same example in vetical HTML table format:
bpom_show_nutrition_facts(
carbohydrate => 13.113,
fat => 0.223,
output_format => "vertical_html_table",
package_size => 20,
protein => 0.99,
saturated_fat => 0.01,
serving_size => 175,
sodium => 0.223,
sugar => 7.173
);
Result:
[
200,
"OK",
"\n<style>\n table { border-collapse: collapse; border: 1px solid; }\n tr.has_bottom_border { border-bottom: 1pt solid black; }\n // td:first-child { background: red; }\n</style>\n<table><colgroup><col style=\"width:16pt;\"><col style=\"width:2...
{ "cmdline.skip_format" => 1 },
]
=item * The same example, in vertical text format (colorE<sol>emphasis is shown with markup):
bpom_show_nutrition_facts(
carbohydrate => 13.113,
color => "never",
fat => 0.223,
output_format => "vertical_text_table",
package_size => 20,
protein => 0.99,
saturated_fat => 0.01,
serving_size => 175,
sodium => 0.223,
sugar => 7.173
);
Result:
[
200,
"OK",
".---------------------------------------------------------------------------------------------------------------------.\n| *INFORMASI NILAI GIZI* |\n| *J...
{ "cmdline.skip_format" => 1 },
]
=back
This function is not exported by default, but exportable.
Arguments ('*' denotes required arguments):
=over 4
=item * B<browser> => I<true>
View output HTML in browser instead of returning it.
=item * B<carbohydrate>* => I<ufloat>
Total carbohydrate, in gE<sol>100g.
=item * B<color> => I<str> (default: "auto")
(No description)
=item * B<fat>* => I<ufloat>
Total fat, in gE<sol>100g.
=item * B<name> => I<str>
(No description)
=item * B<output_format> => I<str> (default: "vertical_text_table")
(No description)
=item * B<package_size>* => I<ufloat>
( run in 3.261 seconds using v1.01-cache-2.11-cpan-d8267643d1d )