diff --git a/ACU/Trace.pm b/ACU/Trace.pm index 2cf448b..fba6621 100644 --- a/ACU/Trace.pm +++ b/ACU/Trace.pm @@ -115,6 +115,14 @@ sub addId($$;$) $self->{ids}{$key} = $value; } +sub delId($$) +{ + my $self = shift; + my $key = shift; + + delete $self->{ids}{$key}; +} + sub toString ($;$) { my $self = shift; diff --git a/commands/grades/send_bonusmalus.pl b/commands/grades/send_bonusmalus.pl index 8b7e1e3..f618d5a 100644 --- a/commands/grades/send_bonusmalus.pl +++ b/commands/grades/send_bonusmalus.pl @@ -45,5 +45,6 @@ if ($#ARGV >= 1) } else { - say "$0 [project_year] [files ...]"; + say "$0 [-d] [project_year] [files ...]"; + say "\t-d: delete bonus for listed logins (matching value if given)" } diff --git a/process/files/intradata_get.pl b/process/files/intradata_get.pl index 9c6890c..fdde9b0 100644 --- a/process/files/intradata_get.pl +++ b/process/files/intradata_get.pl @@ -151,6 +151,7 @@ sub grades_new_bonus my $args = shift; my $project_id = $args->{param}{id}; + my $delete = $args->{param}{delete} // 0; my $year = $args->{param}{year} // LDAP::get_year; if (! $project_id) { @@ -177,7 +178,9 @@ sub grades_new_bonus log TRACE, $args->{files}{$kfile}; log TRACE, @lines; - my $value = 1; + my $value; + $value = 1 if (!$delete); + # Looking for a global value if ($lines[0] =~ /^(\d+)$/) { $value = $1; @@ -193,7 +196,11 @@ sub grades_new_bonus my $tvalue = $2 // $value; my $trace; - log DEBUG, "Applying bonus for $login:$tvalue"; + if ($delete) { + log DEBUG, "Deleting bonus for $login"; + } else { + log DEBUG, "Applying bonus for $login:$tvalue"; + } if (-e "$basedir/$year/$project_id/traces/bonus/$login.xml") { open my $xml, "<", "$basedir/$year/$project_id/traces/bonus/$login.xml" or croak $!; @@ -201,17 +208,28 @@ sub grades_new_bonus $trace = Trace->new($xml); close $xml; } + elsif ($delete) { + next; + } else { $trace = Trace->new(); } - $trace->addId($kbonus, $tvalue); + if ($delete) { + if ($tvalue && $tvalue == $trace->getIds($kbonus)) { + $trace->delId($kbonus); + } else { + $trace->delId($kbonus); + } + } else { + $trace->addId($kbonus, $tvalue); + } log DEBUG, "Updating $basedir/$year/$project_id/traces/bonus/$login.xml"; open my $xml, ">", "$basedir/$year/$project_id/traces/bonus/$login.xml" or croak $!; print $xml $trace->toString(); - close $xml + close $xml; } else { log WARN, "Invalid login $line, line skiped"; diff --git a/process/projects/gen_grading.pl b/process/projects/gen_grading.pl index dacdaeb..6c04c57 100644 --- a/process/projects/gen_grading.pl +++ b/process/projects/gen_grading.pl @@ -56,7 +56,7 @@ sub process my @keys = keys %$ids; my $def_i = $keys[0]; - $def_i =~ s/^(.+)g.*$/\1/; + $def_i =~ s/^(.+)g.*$/$1/; $ids->{$def_i.'_end_$LOGIN'} = undef; $ids->{$def_i.'_end_group'} = undef;