Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision ff598089

Von Moritz Bunkus vor etwa 8 Jahren hinzugefügt

  • ID ff59808920276be5fc6ab6e8b007759e93c3cfcc
  • Vorgänger 5d497700
  • Nachfolger e4cc2d96

Hintergrundjob zum Schließen bei geschlossenen Aufträgen verlinkten Projekten

Der Job ist per Default deaktiviert. Wenn eine solche Funktionalität für
eine Installation benötigt wird, so muss der Admin manuell einen
Hintergrundjob dafür anlegen.

Unterschiede anzeigen:

SL/BackgroundJob/ALL.pm
use SL::BackgroundJob::Base;
use SL::BackgroundJob::BackgroundJobCleanup;
use SL::BackgroundJob::CleanBackgroundJobHistory;
use SL::BackgroundJob::CloseProjectsBelongingToClosedSalesOrders;
use SL::BackgroundJob::CreatePeriodicInvoices;
use SL::BackgroundJob::FailedBackgroundJobsReport;
1;
SL/BackgroundJob/CloseProjectsBelongingToClosedSalesOrders.pm
package SL::BackgroundJob::CloseProjectsBelongingToClosedSalesOrders;
use strict;
use parent qw(SL::BackgroundJob::Base);
use SL::DB::Project;
use SL::DB::ProjectStatus;
sub run {
my ($self, $db_obj) = @_;
my $data = $db_obj->data_as_hash;
$data->{new_status} ||= 'done';
$data->{set_inactive} = 1 if !exists $data->{set_inactive};
my $new_status = SL::DB::Manager::ProjectStatus->find_by(name => $data->{new_status}) || die "No project status named '$data->{new_status}' found!";
my %attributes = (project_status_id => $new_status->id);
$attributes{active} = 0 if $data->{set_inactive};
my $sql = <<EOSQL;
id IN (
SELECT oe.globalproject_id
FROM oe
WHERE (oe.globalproject_id IS NOT NULL)
AND (oe.customer_id IS NOT NULL)
AND NOT COALESCE(oe.quotation, FALSE)
AND COALESCE(oe.closed, FALSE)
)
EOSQL
SL::DB::Manager::Project->update_all(
set => \%attributes,
where => [
'!project_status_id' => $new_status->id,
\$sql,
],
);
return 1;
}
1;
__END__
=encoding utf8
=head1 NAME
SL::BackgroundJob::CloseProjectsBelongingToClosedSalesOrders —
Background job for closing all projects which are linked to a closed
sales order (via C<oe.globalproject_id>)
=head1 SYNOPSIS
This background job searches all closed sales orders for linked
projects. Those projects whose status is not C<done> will be modified:
their status will be set to C<done> and their C<active> flag will be
set to C<false>.
Both of these can be configured via the job's data hash: C<new_status>
is the new status' name (defaults to C<done>), and C<set_inactive>
determines whether or not the project will be set to inactive
(defaults to 1).
The job is deactivated by default. Administrators of installations
where such a feature is wanted have to create a job entry manually.
=head1 AUTHOR
Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
=cut

Auch abrufbar als: Unified diff