Merge branch 'master' of git@vc.linet-services.de:public/lx-office-erp
[kivitendo-erp.git] / SL / DB / Order.pm
index 25c3788..6b31cd2 100644 (file)
@@ -10,8 +10,10 @@ use List::Util qw(max);
 use SL::DB::MetaSetup::Order;
 use SL::DB::Manager::Order;
 use SL::DB::Invoice;
 use SL::DB::MetaSetup::Order;
 use SL::DB::Manager::Order;
 use SL::DB::Invoice;
+use SL::DB::Helper::FlattenToForm;
 use SL::DB::Helper::LinkedRecords;
 use SL::DB::Helper::PriceTaxCalculator;
 use SL::DB::Helper::LinkedRecords;
 use SL::DB::Helper::PriceTaxCalculator;
+use SL::DB::Helper::PriceUpdater;
 use SL::DB::Helper::TransNumberGenerator;
 use SL::RecordLinks;
 
 use SL::DB::Helper::TransNumberGenerator;
 use SL::RecordLinks;
 
@@ -39,6 +41,26 @@ __PACKAGE__->meta->add_relationship(
     class      => 'SL::DB::PaymentTerm',
     column_map => { payment_id => 'id' },
   },
     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;
@@ -91,14 +113,6 @@ sub convert_to_invoice {
 
   croak("Conversion to invoices is only supported for sales records") unless $self->customer_id;
 
 
   croak("Conversion to invoices is only supported for sales records") unless $self->customer_id;
 
-  if (!$params{ar_id}) {
-    my $chart = SL::DB::Manager::Chart->get_all(query   => [ SL::DB::Manager::Chart->link_filter('AR') ],
-                                                sort_by => 'id ASC',
-                                                limit   => 1)->[0];
-    croak("No AR chart found and no parameter `ar_id' given") unless $chart;
-    $params{ar_id} = $chart->id;
-  }
-
   my $invoice;
   if (!$self->db->do_transaction(sub {
     $invoice = SL::DB::Invoice->new_from($self)->post(%params) || die;
   my $invoice;
   if (!$self->db->do_transaction(sub {
     $invoice = SL::DB::Invoice->new_from($self)->post(%params) || die;
@@ -122,13 +136,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
 
@@ -138,28 +152,34 @@ 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
 linked to the new invoice via L<SL::DB::RecordLink>. C<$self>'s
 C<closed> attribute is set to C<true>, and C<$self> is saved.
 
 
 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
 linked to the new invoice via L<SL::DB::RecordLink>. C<$self>'s
 C<closed> attribute is set to C<true>, and C<$self> is saved.
 
-The arguments in C<%params> are passed to
-L<SL::DB::Invoice::post>. One parameter of note is
-C<$paras{ar_id}>. If set it must be the ID of the accounts receivables
-chart to post to. If it is not set then the first chart configured for
-accounts receivables is used.
+The arguments in C<%params> are passed to L<SL::DB::Invoice::post>.
 
 
-Returns the new invoice instance on success and C<undef> on failure.
+Returns the new invoice instance on success and C<undef> on
+failure. The whole process is run inside a transaction. On failure
+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.
 
-=back
+=head2 C<create_sales_process>
+
+Creates and saves a new sales process. Can only be called for sales
+orders.
+
+The newly created process will be linked bidirectionally to both
+C<$self> and to all sales quotations that are linked to C<$self>.
+
+Returns the newly created process instance.
 
 =head1 BUGS
 
 
 =head1 BUGS