]> wagnertech.de Git - mfinanz.git/blobdiff - SL/DB/DeliveryOrder.pm
changelog update
[mfinanz.git] / SL / DB / DeliveryOrder.pm
index 436c9b1a5fc04e754c602ed1c7e647350d40769f..7cfc2eac1796eb96e64222667b0c1391135abe7b 100644 (file)
@@ -50,6 +50,8 @@ sub _before_save_set_donumber {
 
 sub items { goto &orderitems; }
 sub add_items { goto &add_orderitems; }
+sub payment_terms { goto &payment; }
+sub record_number { goto &donumber; }
 
 sub sales_order {
   my $self   = shift;
@@ -71,6 +73,19 @@ sub type {
   return shift->customer_id ? 'sales_delivery_order' : 'purchase_delivery_order';
 }
 
+sub displayable_type {
+  my $type = shift->type;
+
+  return $::locale->text('Sales Delivery Order')    if $type eq 'sales_delivery_order';
+  return $::locale->text('Purchase Delivery Order') if $type eq 'purchase_delivery_order';
+
+  die 'invalid type';
+}
+
+sub displayable_name {
+  join ' ', grep $_, map $_[0]->$_, qw(displayable_type record_number);
+};
+
 sub displayable_state {
   my ($self) = @_;
 
@@ -104,15 +119,12 @@ sub new_from {
     $item_parent_column    = 'order';
   }
 
-  my $terms = $source->can('payment_id') && $source->payment_id ? $source->payment_terms->terms_netto : 0;
-
   my %args = ( map({ ( $_ => $source->$_ ) } qw(cp_id currency_id customer_id cusordnumber department_id employee_id globalproject_id intnotes language_id notes
-                                                ordnumber reqdate salesman_id shippingpoint shipvia taxincluded taxzone_id transaction_description vendor_id
+                                                ordnumber payment_id reqdate salesman_id shippingpoint shipvia taxincluded taxzone_id transaction_description vendor_id
                                              )),
                closed    => 0,
                is_sales  => !!$source->customer_id,
                delivered => 0,
-               terms     => $terms,
                transdate => DateTime->today_local,
             );
 
@@ -162,6 +174,7 @@ sub new_from {
 
   } @{ $items };
 
+  @items = grep { $params{item_filter}->($_) } @items if $params{item_filter};
   @items = grep { $_->qty * 1 } @items if $params{skip_items_zero_qty};
   @items = grep { $_->qty >=0 } @items if $params{skip_items_negative_qty};
 
@@ -194,6 +207,11 @@ SL::DB::DeliveryOrder - Rose model for delivery orders (table
 
 An alias for C<transdate> for compatibility with other sales/purchase models.
 
+=item C<displayable_name>
+
+Returns a human-readable and translated description of the delivery order, consisting of
+record type and number, e.g. "Verkaufslieferschein 123".
+
 =item C<displayable_state>
 
 Returns a human-readable description of the state regarding being
@@ -201,7 +219,7 @@ closed and delivered.
 
 =item C<items>
 
-An alias for C<deliver_orer_items> for compatibility with other
+An alias for C<delivery_order_items> for compatibility with other
 sales/purchase models.
 
 =item C<new_from $source, %params>
@@ -247,6 +265,12 @@ a quantity of 0 are not affected by this option.
 
 If trueish then items with a quantity of 0 are skipped.
 
+=item C<item_filter>
+
+An optional code reference that is called for each item with the item
+as its sole parameter. Items for which the code reference returns a
+falsish value will be skipped.
+
 =item C<attributes>
 
 An optional hash reference. If it exists then it is passed to C<new>
@@ -261,7 +285,7 @@ TODO: Describe sales_order
 
 =item C<type>
 
-Returns a stringdescribing this record's type: either
+Returns a string describing this record's type: either
 C<sales_delivery_order> or C<purchase_delivery_order>.
 
 =back