neue Methode items_sorted für Order, DeliveryOrder, Invoice, PurchaseInvoice
[kivitendo-erp.git] / SL / DB / Order.pm
index 61a49d4..f4ca003 100644 (file)
@@ -31,36 +31,6 @@ __PACKAGE__->meta->add_relationship(
     class                  => 'SL::DB::PeriodicInvoicesConfig',
     column_map             => { id => 'oe_id' },
   },
     class                  => 'SL::DB::PeriodicInvoicesConfig',
     column_map             => { id => 'oe_id' },
   },
-  periodic_invoices        => {
-    type                   => 'one to many',
-    class                  => 'SL::DB::PeriodicInvoice',
-    column_map             => { id => 'oe_id' },
-  },
-  payment_term => {
-    type       => 'one to one',
-    class      => 'SL::DB::PaymentTerm',
-    column_map => { payment_id => 'id' },
-  },
-  contact      => {
-    type       => 'one to one',
-    class      => 'SL::DB::Contact',
-    column_map => { cp_id => 'cp_id' },
-  },
-  shipto       => {
-    type       => 'one to one',
-    class      => 'SL::DB::Shipto',
-    column_map => { shipto_id => 'shipto_id' },
-  },
-  department   => {
-    type       => 'one to one',
-    class      => 'SL::DB::Department',
-    column_map => { department_id => 'id' },
-  },
-  language     => {
-    type       => 'one to one',
-    class      => 'SL::DB::Language',
-    column_map => { language_id => 'id' },
-  },
 );
 
 __PACKAGE__->meta->initialize;
 );
 
 __PACKAGE__->meta->initialize;
@@ -69,6 +39,13 @@ __PACKAGE__->meta->initialize;
 
 sub items { goto &orderitems; }
 
 
 sub items { goto &orderitems; }
 
+sub items_sorted {
+  my ($self) = @_;
+
+  my @sorted =  sort {$a->id <=> $b->id } @{ $self->items };
+  return wantarray ? @sorted : \@sorted;
+}
+
 sub type {
   my $self = shift;
 
 sub type {
   my $self = shift;
 
@@ -84,6 +61,23 @@ sub is_type {
   return shift->type eq shift;
 }
 
   return shift->type eq shift;
 }
 
+sub displayable_type {
+  my $type = shift->type;
+
+  return $::locale->text('Sales quotation')   if $type eq 'sales_quotation';
+  return $::locale->text('Request quotation') if $type eq 'request_quotation';
+  return $::locale->text('Sales Order')       if $type eq 'sales_order';
+  return $::locale->text('Purchase Order')    if $type eq 'purchase_order';
+
+  die 'invalid type';
+}
+
+
+sub is_sales {
+  croak 'not an accessor' if @_ > 1;
+  return !!shift->customer_id;
+}
+
 sub invoices {
   my $self   = shift;
   my %params = @_;
 sub invoices {
   my $self   = shift;
   my %params = @_;
@@ -100,6 +94,12 @@ sub invoices {
   }
 }
 
   }
 }
 
+sub displayable_state {
+  my ($self) = @_;
+
+  return $self->closed ? $::locale->text('closed') : $::locale->text('open');
+}
+
 sub abschlag_invoices {
   return shift()->invoices(query => [ abschlag => 1 ]);
 }
 sub abschlag_invoices {
   return shift()->invoices(query => [ abschlag => 1 ]);
 }
@@ -126,6 +126,23 @@ sub convert_to_invoice {
   return $invoice;
 }
 
   return $invoice;
 }
 
+sub number {
+  my $self = shift;
+
+  my %number_method = (
+    sales_order       => 'ordnumber',
+    sales_quotation   => 'quonumber',
+    purchase_order    => 'ordnumber',
+    request_quotation => 'quonumber',
+  );
+
+  return $self->${ \ $number_method{$self->type} }(@_);
+}
+
+sub date {
+  goto &transdate;
+}
+
 1;
 
 __END__
 1;
 
 __END__
@@ -136,13 +153,13 @@ SL::DB::Order - Order Datenbank Objekt.
 
 =head1 FUNCTIONS
 
 
 =head1 FUNCTIONS
 
-=head2 type
+=head2 C<type>
 
 Returns one of the following string types:
 
 =over 4
 
 
 Returns one of the following string types:
 
 =over 4
 
-=item saes_order
+=item sales_order
 
 =item purchase_order
 
 
 =item purchase_order
 
@@ -152,11 +169,11 @@ Returns one of the following string types:
 
 =back
 
 
 =back
 
-=head2 is_type TYPE
+=head2 C<is_type TYPE>
 
 
-Rreturns true if the order is of the given type.
+Returns true if the order is of the given type.
 
 
-=item C<convert_to_invoice %params>
+=head2 C<convert_to_invoice %params>
 
 Creates a new invoice with C<$self> as the basis by calling
 L<SL::DB::Invoice::new_from>. That invoice is posted, and C<$self> is
 
 Creates a new invoice with C<$self> as the basis by calling
 L<SL::DB::Invoice::new_from>. That invoice is posted, and C<$self> is
@@ -171,7 +188,7 @@ nothing is created or changed in the database.
 
 At the moment only sales quotations and sales orders can be converted.
 
 
 At the moment only sales quotations and sales orders can be converted.
 
-=item C<create_sales_process>
+=head2 C<create_sales_process>
 
 Creates and saves a new sales process. Can only be called for sales
 orders.
 
 Creates and saves a new sales process. Can only be called for sales
 orders.
@@ -181,8 +198,6 @@ C<$self> and to all sales quotations that are linked to C<$self>.
 
 Returns the newly created process instance.
 
 
 Returns the newly created process instance.
 
-=back
-
 =head1 BUGS
 
 Nothing here yet.
 =head1 BUGS
 
 Nothing here yet.