X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FOrder.pm;h=8228def987684435e4c1234a8956ce1651532ac1;hb=4dc48e117cfdb6e59c2d8b9d8087ef8a3bc245a4;hp=657252f8ab28a7dbdef85cda0b76f3df017c47a6;hpb=1b18f0aa0914699d5ef4372243ebb8872d1bdc20;p=kivitendo-erp.git diff --git a/SL/DB/Order.pm b/SL/DB/Order.pm index 657252f8a..8228def98 100644 --- a/SL/DB/Order.pm +++ b/SL/DB/Order.pm @@ -58,6 +58,8 @@ __PACKAGE__->attr_sorted('items'); __PACKAGE__->before_save('_before_save_set_ord_quo_number'); __PACKAGE__->before_save('_before_save_create_new_project'); +__PACKAGE__->before_save('_before_save_remove_empty_custom_shipto'); +__PACKAGE__->before_save('_before_save_set_custom_shipto_module'); # hooks @@ -98,6 +100,23 @@ sub _before_save_create_new_project { return 1; } + +sub _before_save_remove_empty_custom_shipto { + my ($self) = @_; + + $self->custom_shipto(undef) if $self->custom_shipto && $self->custom_shipto->is_empty; + + return 1; +} + +sub _before_save_set_custom_shipto_module { + my ($self) = @_; + + $self->custom_shipto->module('OE') if $self->custom_shipto; + + return 1; +} + # methods sub items { goto &orderitems; } @@ -120,9 +139,17 @@ sub is_type { } sub deliverydate { - # oe doesn't have deliverydate, but PTC checks for deliverydate or transdate to determine tax - # oe can't deal with deviating tax rates, but at least make sure PTC doesn't barf - return shift->transdate; + # oe doesn't have deliverydate, but it does have reqdate. + # But this has a different meaning for sales quotations. + # deliverydate can be used to determine tax if tax_point isn't set. + + return $_[0]->reqdate if $_[0]->type ne 'sales_quotation'; +} + +sub effective_tax_point { + my ($self) = @_; + + return $self->tax_point || $self->deliverydate || $self->transdate; } sub displayable_type { @@ -303,7 +330,7 @@ sub new_from { my %args = ( map({ ( $_ => $source->$_ ) } qw(amount cp_id currency_id cusordnumber customer_id delivery_customer_id delivery_term_id delivery_vendor_id department_id employee_id exchangerate globalproject_id intnotes marge_percent marge_total language_id netamount notes - ordnumber payment_id quonumber reqdate salesman_id shippingpoint shipvia taxincluded taxzone_id + ordnumber payment_id quonumber reqdate salesman_id shippingpoint shipvia taxincluded tax_point taxzone_id transaction_description vendor_id )), quotation => !!($destination_type =~ m{quotation$}), @@ -314,6 +341,7 @@ sub new_from { if ( $is_abbr_any->(qw(sopo poso)) ) { $args{ordnumber} = undef; + $args{quonumber} = undef; $args{reqdate} = DateTime->today_local->next_workday(); $args{employee} = SL::DB::Manager::Employee->current; } @@ -409,7 +437,7 @@ sub new_from_multi { # set this entries to undef that yield different information my %attributes; - foreach my $attr (qw(ordnumber transdate reqdate taxincluded shippingpoint + foreach my $attr (qw(ordnumber transdate reqdate tax_point taxincluded shippingpoint shipvia notes closed delivered reqdate quonumber cusordnumber proforma transaction_description order_probability expected_billing_date)) {