class => 'SL::DB::PeriodicInvoicesConfig',
column_map => { id => 'oe_id' },
},
+ custom_shipto => {
+ type => 'one to one',
+ class => 'SL::DB::Shipto',
+ column_map => { id => 'trans_id' },
+ query_args => [ module => 'OE' ],
+ },
);
__PACKAGE__->meta->initialize;
croak("Conversion to invoices is only supported for sales records") unless $self->customer_id;
my $invoice;
- if (!$self->db->do_transaction(sub {
+ if (!$self->db->with_transaction(sub {
+ require SL::DB::Invoice;
$invoice = SL::DB::Invoice->new_from($self)->post(%params) || die;
$self->link_to_record($invoice);
$self->update_attributes(closed => 1);
- # die;
+ 1;
})) {
return undef;
}
}
sub convert_to_delivery_order {
- my ($self, %params) = @_;
+ my ($self, @args) = @_;
my ($delivery_order, $custom_shipto);
- if (!$self->db->do_transaction(sub {
+ if (!$self->db->with_transaction(sub {
require SL::DB::DeliveryOrder;
- ($delivery_order, $custom_shipto) = SL::DB::DeliveryOrder->new_from($self);
+ ($delivery_order, $custom_shipto) = SL::DB::DeliveryOrder->new_from($self, @args);
$delivery_order->save;
$custom_shipto->save if $custom_shipto;
$self->link_to_record($delivery_order);
- # die;
+ $self->update_attributes(delivered => 1);
+ 1;
})) {
- return undef;
+ return wantarray ? () : undef;
}
return wantarray ? ($delivery_order, $custom_shipto) : $delivery_order;
Creates a new delivery order with C<$self> as the basis by calling
L<SL::DB::DeliveryOrder::new_from>. That delivery order is saved, and
-C<$self> is linked to the new invoice via L<SL::DB::RecordLink>.
+C<$self> is linked to the new invoice via
+L<SL::DB::RecordLink>. C<$self>'s C<delivered> attribute is set to
+C<true>, and C<$self> is saved.
The arguments in C<%params> are passed to
L<SL::DB::DeliveryOrder::new_from>.