Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision ef24ff5a

Von Tamino Steinert vor fast 2 Jahren hinzugefügt

  • ID ef24ff5a4042354a4ee1c83fe122194d80037708
  • Vorgänger ed7b98dd
  • Nachfolger 4528f3f2

Model::Record: new_from_workflow implementiert

Unterschiede anzeigen:

SL/Controller/DeliveryOrder.pm
32 32
use SL::DB::TransferType;
33 33
use SL::DB::ValidityToken;
34 34
use SL::DB::Warehouse;
35
use SL::Model::Record;
35 36

  
36 37
use SL::Helper::CreatePDF qw(:all);
37 38
use SL::Helper::PrintOptions;
......
103 104

  
104 105
  my $order = SL::DB::Order->new(id => $self->{converted_from_oe_id})->load;
105 106

  
106
  $self->order(SL::DB::DeliveryOrder->new_from($order, type => $::form->{type}));
107
  my $target_type = $::form->{type};
108
  my $delivery_order = SL::Model::Record->new_from_workflow($order, $target_type);
109
  $self->order($delivery_order);
107 110

  
108 111
  $self->action_add;
109 112
}
......
112 115
  my ($self) = @_;
113 116

  
114 117
  my $reclamation = SL::DB::Reclamation->new(id => $::form->{from_id})->load;
115
  my $delivery_order = SL::DB::DeliveryOrder->new_from($reclamation);
118
  my $target_type = $reclamation->is_sales ? 'rma_delivery_order'
119
                                           : 'supplier_delivery_order';
120
  my $delivery_order = SL::Model::Record->new_from_workflow($reclamation, $target_type);
116 121
  $self->{converted_from_reclamation_id} = $::form->{from_id};
117 122
  $self->order($delivery_order);
118 123

  
......
1751 1756

  
1752 1757
  my $destination_type = $self->type_data->workflow("to_quotation_type");
1753 1758

  
1754
  $self->order(SL::DB::DeliveryOrder->new_from($self->order, destination_type => $destination_type));
1759
  my $delivery_order = SL::Model::Record->new_from_workflow($self->order, $destination_type, {});
1760
  $self->order($delivery_order);
1755 1761
  $self->{converted_from_oe_id} = delete $::form->{id};
1756 1762

  
1757 1763
  # set item ids to new fake id, to identify them as new items
......
1800 1806
    $custom_shipto = $self->order->shipto->clone('SL::DB::DeliveryOrder');
1801 1807
  }
1802 1808

  
1803
  $self->order(SL::DB::DeliveryOrder->new_from($self->order, destination_type => $destination_type));
1809
  my $delivery_order = SL::Model::Record->new_from_workflow($self->order, $destination_type, {});
1810
  $self->order($delivery_order);
1804 1811
  $self->{converted_from_oe_id} = delete $::form->{id};
1805 1812

  
1806 1813
  # set item ids to new fake id, to identify them as new items
SL/Controller/Order.pm
32 32
use SL::DB::Shipto;
33 33
use SL::DB::Translation;
34 34
use SL::DB::ValidityToken;
35
use SL::Model::Record;
35 36

  
36 37
use SL::Helper::CreatePDF qw(:all);
37 38
use SL::Helper::PrintOptions;
......
104 105

  
105 106
  my $reclamation = SL::DB::Reclamation->new(id => $::form->{from_id})->load;
106 107
  my %params;
107
  $params{destination_type} = $reclamation->is_sales ? 'sales_order'
108
                                              : 'purchase_order';
109
  my $order = SL::DB::Order->new_from($reclamation, %params);
108
  my $target_type = $reclamation->is_sales ? 'sales_order'
109
                                           : 'purchase_order';
110
  my $order = SL::Model::Record->new_from_workflow($reclamation, $target_type);
110 111
  $self->{converted_from_reclamation_id} = $::form->{from_id};
111 112

  
112 113
  $self->order($order);
SL/Controller/Reclamation.pm
34 34

  
35 35
use SL::Controller::Helper::GetModels;
36 36

  
37
use SL::DB::Order;
38
use SL::DB::DeliveryOrder;
39
use SL::DB::Invoice;
40
use SL::Model::Record;
41

  
37 42
use List::Util qw(first sum0);
38 43
use List::UtilsBy qw(sort_by uniq_by);
39 44
use List::MoreUtils qw(any none pairwise first_index);
......
116 121
    return $self->js->render();
117 122
  }
118 123

  
119
  require SL::DB::Order;
120 124
  my $order = SL::DB::Order->new(id => $::form->{from_id})->load;
121
  my $reclamation = $order->convert_to_reclamation();
125
  my $target_type = $order->is_sales ? 'sales_reclamation'
126
                                     : 'purchase_reclamation';
127
  my $reclamation = SL::Model::Record->new_from_workflow($order, $target_type);
122 128

  
123 129
  $self->reclamation($reclamation);
124 130

  
......
143 149
    return $self->js->render();
144 150
  }
145 151

  
146
  require SL::DB::DeliveryOrder;
147 152
  my $delivery_order = SL::DB::DeliveryOrder->new(id => $::form->{from_id})->load;
148
  my $reclamation = $delivery_order->convert_to_reclamation();
153
  my $target_type = $delivery_order->is_sales ? 'sales_reclamation'
154
                                              : 'purchase_reclamation';
155
  my $reclamation = SL::Model::Record->new_from_workflow($delivery_order, $target_type);
149 156

  
150 157
  $self->reclamation($reclamation);
151 158

  
......
170 177
    return $self->js->render();
171 178
  }
172 179

  
173
  require SL::DB::Invoice;
174 180
  my $invoice = SL::DB::Invoice->new(id => $::form->{from_id})->load;
175
  my $reclamation = $invoice->convert_to_reclamation();
181
  my $target_type = 'sales_reclamation';
182
  my $reclamation = SL::Model::Record->new_from_workflow($invoice, $target_type);
176 183

  
177 184
  $self->reclamation($reclamation);
178 185

  
......
200 207
  require SL::DB::PurchaseInvoice;
201 208
  my $invoice = SL::DB::PurchaseInvoice->new(id => $::form->{from_id})->load;
202 209
  $invoice->{type} = $invoice->invoice_type; #can't add type → invoice_type in SL/DB/PurchaseInvoice
203
  my $reclamation = $invoice->convert_to_reclamation();
210
  my $target_type = 'purchase_reclamation';
211
  my $reclamation = SL::Model::Record->new_from_workflow($invoice, $target_type);
204 212

  
205 213
  $self->reclamation($reclamation);
206 214

  
SL/DB/DeliveryOrder.pm
152 152
    employee => SL::DB::Manager::Employee->current,
153 153
    closed    => 0,
154 154
    delivered => 0,
155
    order_type => $params{type},
155
    order_type => $params{destination_type},
156 156
    transdate => DateTime->today_local,
157 157
  );
158 158

  
SL/Model/Record.pm
2 2

  
3 3
use strict;
4 4

  
5
use SL::Locale::String qw(t8);
5
use Carp;
6

  
7
use SL::DB::Order;
8
use SL::DB::DeliveryOrder;
9
use SL::DB::Reclamation;
10
use SL::DB::Invoice;
6 11

  
12
use SL::Locale::String qw(t8);
7 13

  
8 14
sub new {
9 15
  my ($class, $target_type, %flags) = @_;
......
18 24
}
19 25

  
20 26
sub new_from_workflow {
21
  my ($class, $source_objects, $target_type, %flags) = @_;
27
  my ($class, $source_object, $target_subtype, %flags) = @_;
22 28

  
23
  # source: entweder das einzelne quellobjekt oder ein arrayref von quellobjekten.
24
  #   - wenn ein arrayref übergeben wurde muss der code testen ob die objekte alle subtype gleich sind und evtl customer/vendor gleich sind
29
  # source: ein quellobjekt
25 30
  # target type: sollte ein subtype sein. wer das hier implementiert, sollte auch eine subtype registratur bauen in der man subtypes nachschlagen kann
26 31
  # flags: welche extra behandlungen sollen gemacht werden, z.B. record_links setzen
27 32

  
28
  # muss prüfen ob diese umwandlung korrekt ist
33
  # (muss prüfen ob diese umwandlung korrekt ist)
29 34
  # muss das entsprechende new_from in den objekten selber benutzen
30 35
  # und dann evtl nachbearbeitung machen (die bisher im controller stand)
31 36

  
......
33 38

  
34 39
  # fehlerfall: exception aus unterliegendem code bubblen oder neue exception werfen
35 40
  # rückgabe: das neue objekt
41

  
42
  $flags{destination_type} = $target_subtype;
43
  my %defaults_flags = (
44
    no_linked_records => 0,
45
  );
46
  %flags = (%flags, %defaults_flags);
47

  
48
  my %subtype_to_type = (
49
    # Order
50
    "request_quotation" => "SL::DB::Order",
51
    "purchase_order"    => "SL::DB::Order",
52
    "sales_quotation"   => "SL::DB::Order",
53
    "sales_order"       => "SL::DB::Order",
54
    # DeliveryOrder
55
    "sales_delivery_order"    => "SL::DB::DeliveryOrder",
56
    "purchase_delivery_order" => "SL::DB::DeliveryOrder",
57
    "rma_delivery_order"      => "SL::DB::DeliveryOrder",
58
    "supplier_delivery_order" => "SL::DB::DeliveryOrder",
59
    # Reclamation
60
    "sales_reclamation"    => "SL::DB::Reclamation",
61
    "purchase_reclamation" => "SL::DB::Reclamation",
62
  );
63
  my $target_type = $subtype_to_type{$target_subtype};
64
  unless ($target_type) {
65
    croak("Conversion not supported to $target_subtype");
66
  }
67

  
68
  my $target_object = ${target_type}->new_from($source_object, %flags);
69
  return $target_object;
36 70
}
37 71

  
38 72
# im Moment nur bei Aufträgen

Auch abrufbar als: Unified diff