]> wagnertech.de Git - mfinanz.git/blobdiff - SL/DB/DeliveryOrder.pm
BankAccount.pm - require für Chart Abfrage
[mfinanz.git] / SL / DB / DeliveryOrder.pm
index c99d2fdca8b7e449d78827e0d32227fc94be9f9b..e6538e92e3a56a77b72bd2d483a978845d285e8a 100644 (file)
@@ -8,6 +8,8 @@ use Rose::DB::Object::Helpers ();
 
 use SL::DB::MetaSetup::DeliveryOrder;
 use SL::DB::Manager::DeliveryOrder;
+use SL::DB::Helper::AttrHTML;
+use SL::DB::Helper::AttrSorted;
 use SL::DB::Helper::FlattenToForm;
 use SL::DB::Helper::LinkedRecords;
 use SL::DB::Helper::TransNumberGenerator;
@@ -29,6 +31,9 @@ __PACKAGE__->meta->add_relationship(orderitems => { type         => 'one to many
 
 __PACKAGE__->meta->initialize;
 
+__PACKAGE__->attr_html('notes');
+__PACKAGE__->attr_sorted('items');
+
 __PACKAGE__->before_save('_before_save_set_donumber');
 
 # hooks
@@ -45,12 +50,8 @@ sub _before_save_set_donumber {
 
 sub items { goto &orderitems; }
 sub add_items { goto &add_orderitems; }
-
-sub items_sorted {
-  my ($self) = @_;
-
-  return [ sort {$a->position <=> $b->position } @{ $self->items } ];
-}
+sub payment_terms { goto &payment; }
+sub record_number { goto &donumber; }
 
 sub sales_order {
   my $self   = shift;
@@ -72,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) = @_;
 
@@ -105,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,
             );
 
@@ -163,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};
 
@@ -205,11 +217,6 @@ closed and delivered.
 An alias for C<deliver_orer_items> for compatibility with other
 sales/purchase models.
 
-=item C<items_sorted>
-
-Returns the delivery order items sorted by their ID (same order they
-appear in the frontend delivery order masks).
-
 =item C<new_from $source, %params>
 
 Creates a new C<SL::DB::DeliveryOrder> instance and copies as much
@@ -253,6 +260,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>