package SL::BackgroundJob::SetClosedTo;

use strict;

use parent qw(SL::BackgroundJob::Base);

use SL::Helper::DateTime;

sub create_job {
  $_[0]->create_standard_job('1 0 10 * *'); # always the 10th of the month
}


sub run {
  my ($self, $db_obj) = @_;
  my $data       = $db_obj->data_as_hash;

  my $subtract_month = $data->{subtract_month} || 1;
  my $subtract_days  = $data->{subtract_days}  || 10;

  die "No integer number for days or month" unless ($subtract_month =~ m/^\d+\z/
                                                 && $subtract_days  =~ m/^\d+\z/);

  # new closedto
  my $new_closedto = DateTime->now_local->subtract(months => $subtract_month, days => $subtract_days);

  my $defaults   = SL::DB::Default->get;

  # dont accidently open the books
  return 1 if ($defaults->closedto && $defaults->closedto >= $new_closedto);

  $defaults->closedto($new_closedto);
  $defaults->save || die "Cannot save closedto!";

  return 1;
}

1;

__END__

=encoding utf8

=head1 NAME

SL::BackgroundJob::SetClosedTo - Background job for
periodically setting closedto (books closed until).
Defaults to the end of the second last month.

=cut
