class => 'SL::DB::Exchangerate',
column_map => { currency_id => 'currency_id', transdate => 'transdate' },
},
+ phone_notes => {
+ type => 'one to many',
+ class => 'SL::DB::Note',
+ column_map => { id => 'trans_id' },
+ query_args => [ trans_module => 'oe' ],
+ manager_args => {
+ with_objects => [ 'employee' ],
+ sort_by => 'notes.itime',
+ }
+ },
);
SL::DB::Helper::Attr::make(__PACKAGE__, daily_exchangerate => 'numeric');
my $invoice;
if (!$self->db->with_transaction(sub {
require SL::DB::Invoice;
- $invoice = SL::DB::Invoice->new_from($self)->post(%params) || die;
+ $invoice = SL::DB::Invoice->new_from($self, %params)->post || die;
$self->link_to_record($invoice);
# TODO extend link_to_record for items, otherwise long-term no d.r.y.
foreach my $item (@{ $invoice->items }) {
my %args = ( map({ ( $_ => $source->$_ ) } qw(amount cp_id currency_id cusordnumber customer_id delivery_customer_id delivery_term_id delivery_vendor_id
department_id exchangerate globalproject_id intnotes marge_percent marge_total language_id netamount notes
ordnumber payment_id quonumber reqdate salesman_id shippingpoint shipvia taxincluded tax_point taxzone_id
- transaction_description vendor_id
+ transaction_description vendor_id billing_address_id
)),
quotation => !!($destination_type =~ m{quotation$}),
closed => 0,
linked to the new invoice via L<SL::DB::RecordLink>. C<$self>'s
C<closed> attribute is set to C<true>, and C<$self> is saved.
-The arguments in C<%params> are passed to L<SL::DB::Invoice::post>.
+The arguments in C<%params> are passed to L<SL::DB::Invoice::new_from>.
Returns the new invoice instance on success and C<undef> on
failure. The whole process is run inside a transaction. On failure