X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FTimeRecording.pm;h=930f346d6fcb9960fdfb7a7705153f5dd7d05efa;hb=7718459cd0be728a57d7ca75dd8077316df7d730;hp=628c8ae1ee7fae48697fa50324f972ac309a81de;hpb=cc1f1d856a432cd669fcec19dfb6938d8c638767;p=kivitendo-erp.git diff --git a/SL/Controller/TimeRecording.pm b/SL/Controller/TimeRecording.pm index 628c8ae1e..930f346d6 100644 --- a/SL/Controller/TimeRecording.pm +++ b/SL/Controller/TimeRecording.pm @@ -22,6 +22,7 @@ use SL::Helper::Flash qw(flash); use SL::Helper::Number qw(_round_number _parse_number _round_total); use SL::Helper::UserPreferences::TimeRecording; use SL::Locale::String qw(t8); +use SL::Presenter::Tag qw(checkbox_tag); use SL::ReportGenerator; use Rose::Object::MakeMethods::Generic @@ -33,7 +34,9 @@ use Rose::Object::MakeMethods::Generic # safety __PACKAGE__->run_before('check_auth'); -__PACKAGE__->run_before('check_auth_edit', only => [ qw(edit save delete) ]); +__PACKAGE__->run_before('check_auth_edit', only => [ qw(edit save delete) ]); +__PACKAGE__->run_before('check_auth_edit_all', only => [ qw(mark_as_booked) ]); + my %sort_columns = ( date => t8('Date'), @@ -83,6 +86,19 @@ sub action_list { $self->report_generator_list_objects(report => $self->{report}, objects => $objects); } +sub action_mark_as_booked { + my ($self) = @_; + + if (scalar @{ $::form->{ids} }) { + SL::DB::Manager::TimeRecording->update_all( + set => { booked => 1 }, + where => [ id => $::form->{ids} ] + ); + } + + $self->redirect_to(safe_callback()); +} + sub action_edit { my ($self) = @_; @@ -257,7 +273,7 @@ sub init_all_time_recording_articles { } sub init_all_orders { - my $orders = SL::DB::Manager::Order->get_all(query => [or => [ closed => 0, closed => undef ], + my $orders = SL::DB::Manager::Order->get_all(query => [or => [ closed => 0, closed => undef, id => $_[0]->time_recording->order_id ], or => [ quotation => 0, quotation => undef ], '!customer_id' => undef]); return [ map { [$_->id, sprintf("%s %s", $_->number, $_->customervendor->name) ] } sort { $a->number <=> $b->number } @{$orders||[]} ]; @@ -279,15 +295,24 @@ sub check_auth_edit { } } +sub check_auth_edit_all { + my ($self) = @_; + + $::auth->assert('time_recording_edit_all'); +} + sub prepare_report { my ($self) = @_; my $report = SL::ReportGenerator->new(\%::myconfig, $::form); $self->{report} = $report; - my @columns = qw(date start_time end_time order customer project part description staff_member duration booked); + my @columns = qw(ids date start_time end_time order customer project part description staff_member duration booked); my %column_defs = ( + ids => { raw_header_data => checkbox_tag("", id => "check_all", checkall => "[data-checkall=1]"), + align => 'center', + raw_data => sub { $_[0]->booked ? '' : checkbox_tag("ids[]", value => $_[0]->id, "data-checkall" => 1) } }, date => { text => t8('Date'), sub => sub { $_[0]->date_as_date }, obj_link => sub { $self->url_for(action => 'edit', 'id' => $_[0]->id, callback => $self->models->get_callback) } }, start_time => { text => t8('Start'), sub => sub { $_[0]->start_time_as_timestamp }, @@ -307,6 +332,11 @@ sub prepare_report { booked => { text => t8('Booked'), sub => sub { $_[0]->booked ? t8('Yes') : t8('No') } }, ); + if (!$self->can_edit_all) { + @columns = grep {'ids' ne $_} @columns; + delete $column_defs{ids}; + } + my $title = t8('Time Recordings'); $report->{title} = $title; # for browser titlebar (title-tag) @@ -373,6 +403,19 @@ sub setup_list_action_bar { submit => [ '#filter_form', { action => 'TimeRecording/list' } ], accesskey => 'enter', ], + combobox => [ + action => [ + t8('Actions'), + only_if => $self->can_edit_all, + ], + action => [ + t8('Mark as booked'), + submit => [ '#form', { action => 'TimeRecording/mark_as_booked', callback => $self->models->get_callback } ], + checks => [ [ 'kivi.check_if_entries_selected', '[name="ids[]"]' ] ], + confirm => $::locale->text('Do you really want to mark the selected entries as booked?'), + only_if => $self->can_edit_all, + ], + ], action => [ t8('Add'), link => $self->url_for(action => 'edit', callback => $self->models->get_callback),