Revision 7ac17a23
Von Tamino Steinert vor mehr als 2 Jahren hinzugefügt
| SL/DB/Reclamation.pm | ||
|---|---|---|
|   return $order;
 | ||
| }
 | ||
|  | ||
| sub convert_to_delivery_order {
 | ||
|   my ($self, %params) = @_;
 | ||
|  | ||
|   my $delivery_order;
 | ||
|   if (!$self->db->with_transaction(sub {
 | ||
|     require SL::DB::DeliveryOrder;
 | ||
|     $delivery_order = SL::DB::DeliveryOrder->new_from($self, %params);
 | ||
|     $delivery_order->save;
 | ||
|     $self->link_to_record($delivery_order);
 | ||
|     # TODO extend link_to_record for items, otherwise long-term no d.r.y.
 | ||
|     foreach my $item (@{ $delivery_order->items }) {
 | ||
|       foreach (qw(reclamation_items)) {
 | ||
|         if ($item->{"converted_from_${_}_id"}) {
 | ||
|           die unless $item->{id};
 | ||
|           RecordLinks->create_links('dbh'        => $self->db->dbh,
 | ||
|                                     'mode'       => 'ids',
 | ||
|                                     'from_table' => $_,
 | ||
|                                     'from_ids'   => $item->{"converted_from_${_}_id"},
 | ||
|                                     'to_table'   => 'delivery_order_items',
 | ||
|                                     'to_id'      => $item->{id},
 | ||
|           ) || die;
 | ||
|           delete $item->{"converted_from_${_}_id"};
 | ||
|         }
 | ||
|       }
 | ||
|     }
 | ||
|  | ||
|     $self->update_attributes(delivered => 1) unless $::instance_conf->get_shipped_qty_require_stock_out;
 | ||
|     1;
 | ||
|   })) {
 | ||
|     return undef, $self->db->error->db_error->db_error;
 | ||
|   }
 | ||
|  | ||
|   return $delivery_order, undef;
 | ||
| }
 | ||
|  | ||
| #TODO(Werner): überprüfen ob alle Felder richtig gestetzt werden
 | ||
| sub new_from {
 | ||
|   my ($class, $source, %params) = @_;
 | ||
|   my %allowed_sources = map { $_ => 1 } qw(
 | ||
|     SL::DB::Reclamation
 | ||
|     SL::DB::Order
 | ||
|     SL::DB::DeliveryOrder
 | ||
|   );
 | ||
|   unless( $allowed_sources{ref $source} ) {
 | ||
|     croak("Unsupported source object type '" . ref($source) . "'");
 | ||
| ... | ... | |
|     #Order
 | ||
|     { from => 'sales_order',             to => 'sales_reclamation',    abbr => 'sosr', },
 | ||
|     { from => 'purchase_order',          to => 'purchase_reclamation', abbr => 'popr', },
 | ||
|     #Delivery Order
 | ||
|     { from => 'sales_delivery_order',    to => 'sales_reclamation',    abbr => 'sdsr', },
 | ||
|     { from => 'purchase_delivery_order', to => 'purchase_reclamation', abbr => 'pdpr', },
 | ||
|   );
 | ||
|   my $from_to = (grep { $_->{from} eq $source->type && $_->{to} eq $destination_type} @from_tos)[0];
 | ||
|   if (!$from_to) {
 | ||
| ... | ... | |
|     $record_args{contact_id} = $source->cp_id;
 | ||
|     $record_args{cv_record_number} = $source->cusordnumber;
 | ||
|     # }}} for vim folds
 | ||
|   } elsif ( $is_abbr_any->(qw(sdsr pdpr)) ) { #DeliveryOrder
 | ||
|     map { $record_args{$_} = $source->$_ } # {{{ for vim folds
 | ||
|     qw(
 | ||
|       currency_id
 | ||
|       customer_id
 | ||
|       delivery_term_id
 | ||
|       department_id
 | ||
|       globalproject_id
 | ||
|       intnotes
 | ||
|       language_id
 | ||
|       notes
 | ||
|       payment_id
 | ||
|       salesman_id
 | ||
|       shippingpoint
 | ||
|       shipvia
 | ||
|       tax_point
 | ||
|       taxincluded
 | ||
|       taxzone_id
 | ||
|       transaction_description
 | ||
|       vendor_id
 | ||
|     );
 | ||
|     $record_args{contact_id} = $source->cp_id;
 | ||
|     $record_args{cv_record_number} = $source->cusordnumber;
 | ||
|     # }}} for vim folds
 | ||
|   }
 | ||
|  | ||
|   if ( ($from_to->{from} =~ m{sales}) && ($from_to->{to} =~ m{purchase}) ) {
 | ||
Auch abrufbar als: Unified diff
Workflow: delivery_order ↔ reclamation