use Carp;
use List::Util qw(first);
+use List::MoreUtils qw(pairwise);
use SL::DB::MetaSetup::Invoice;
use SL::DB::Manager::Invoice;
use SL::DB::Helper::PriceTaxCalculator;
use SL::DB::Helper::PriceUpdater;
use SL::DB::Helper::TransNumberGenerator;
+use SL::DB::CustomVariable;
__PACKAGE__->meta->add_relationship(
invoiceitems => {
__PACKAGE__->meta->initialize;
+__PACKAGE__->before_save('_before_save_set_invnumber');
+
+# hooks
+
+sub _before_save_set_invnumber {
+ my ($self) = @_;
+
+ $self->create_trans_number if !$self->invnumber;
+
+ return 1;
+}
+
# methods
sub items { goto &invoiceitems; }
my %args = ( map({ ( $_ => $source->$_ ) } qw(customer_id taxincluded shippingpoint shipvia notes intnotes salesman_id cusordnumber ordnumber quonumber
department_id cp_id language_id payment_id delivery_customer_id delivery_vendor_id taxzone_id shipto_id
- globalproject_id transaction_description currency_id)),
+ globalproject_id transaction_description currency_id delivery_term_id)),
transdate => DateTime->today_local,
gldate => DateTime->today_local,
duedate => DateTime->today_local->add(days => $terms * 1),
fxsellprice => $source_item->sellprice,);
} @{ $source->items_sorted };
+ my $i = 0;
+ foreach my $item (@items) {
+ my $source_cvars = $source->items_sorted->[$i]->cvars_by_config;
+ my $target_cvars = $item->cvars_by_config;
+ pairwise { $a->value($b->value) } @{ $target_cvars }, @{ $source_cvars };
+ $i++;
+ }
+
$invoice->invoiceitems(\@items);
return $invoice;
my %data = $self->calculate_prices_and_taxes;
$self->_post_create_assemblyitem_entries($data{assembly_items});
- $self->create_trans_number;
$self->save;
$self->_post_add_acctrans($data{amounts_cogs});