column_map => { id => 'ar_id' },
manager_args => { with_objects => [ 'sepa_export' ] }
},
+ sepa_exports => {
+ type => 'many to many',
+ map_class => 'SL::DB::SepaExportItem',
+ map_from => 'ar',
+ map_to => 'sepa_export',
+ },
custom_shipto => {
type => 'one to one',
class => 'SL::DB::Shipto',
sub post {
my ($self, %params) = @_;
+ die "not an invoice" unless $self->invoice;
+
require SL::DB::Chart;
if (!$params{ar_id}) {
my $chart = SL::DB::Manager::Chart->get_all(query => [ SL::DB::Manager::Chart->link_filter('AR') ],
sort_by => 'id ASC',
limit => 1)->[0];
- croak("No AR chart found and no parameter `ar_id' given") unless $chart;
+ croak("No AR chart found and no parameter 'ar_id' given") unless $chart;
$params{ar_id} = $chart->id;
}
=pod
+=encoding UTF-8
+
=head1 NAME
SL::DB::Invoice: Rose model for invoices (table "ar")
=item C<attributes>
An optional hash reference. If it exists then it is passed to C<new>
-allowing the caller to set certain attributes for the new delivery
-order.
+allowing the caller to set certain attributes for the new invoice.
+For example to set a different transdate (default is the current date),
+call the method like this:
+
+ my %params;
+ $params{attributes}{transdate} = '28.08.2015';
+ $invoice = SL::DB::Invoice->new_from($self, %params)->post || die;
=back
=item * C<ar_id>
-The ID of the accounds receivable chart the invoices amounts are
+The ID of the accounts receivable chart the invoice's amounts are
posted to. If it is not set then the first chart configured for
accounts receivables is used.
and recorded in C<acc_trans>.
=item 6. Items in C<invoice> are updated according to their allocation
-status (regarding for costs of goold sold). Will only be done if
+status (regarding costs of goods sold). Will only be done if
kivitendo is not configured to use Einnahmenüberschussrechnungen.
=item 7. The invoice and its items are saved.
Returns C<$self> on success and C<undef> on failure. The whole process
is run inside a transaction. If it fails then nothing is saved to or
-changed in the database. A new transaction is only started if none is
+changed in the database. A new transaction is only started if none are
active.
=item C<basic_info $field>
=back
+=head1 TODO
+
+ As explained in the new_from example, it is possible to set transdate to a new value.
+ From a user / programm point of view transdate is more than holy and there should be
+ some validity checker available for controller code. At least the same logic like in
+ Form.pm from ar.pl should be available:
+ # see old stuff ar.pl post
+ #$form->error($locale->text('Cannot post transaction above the maximum future booking date!'))
+ # if ($form->date_max_future($transdate, \%myconfig));
+ #$form->error($locale->text('Cannot post transaction for a closed period!')) if ($form->date_closed($form->{"transdate"}, \%myconfig));
+
=head1 AUTHOR
Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>