Revision 0372dbcd
Von Tamino Steinert vor mehr als 1 Jahr hinzugefügt
SL/Controller/DeliveryOrder.pm | ||
---|---|---|
use SL::DB::TransferType;
|
||
use SL::DB::ValidityToken;
|
||
use SL::DB::Warehouse;
|
||
use SL::Model::Record;
|
||
|
||
use SL::Helper::CreatePDF qw(:all);
|
||
use SL::Helper::PrintOptions;
|
||
... | ... | |
|
||
my $order = SL::DB::Order->new(id => $self->{converted_from_oe_id})->load;
|
||
|
||
$self->order(SL::DB::DeliveryOrder->new_from($order, type => $::form->{type}));
|
||
my $target_type = $::form->{type};
|
||
my $delivery_order = SL::Model::Record->new_from_workflow($order, $target_type);
|
||
$self->order($delivery_order);
|
||
|
||
$self->action_add;
|
||
}
|
||
... | ... | |
my ($self) = @_;
|
||
|
||
my $reclamation = SL::DB::Reclamation->new(id => $::form->{from_id})->load;
|
||
my $delivery_order = SL::DB::DeliveryOrder->new_from($reclamation);
|
||
my $target_type = $reclamation->is_sales ? 'rma_delivery_order'
|
||
: 'supplier_delivery_order';
|
||
my $delivery_order = SL::Model::Record->new_from_workflow($reclamation, $target_type);
|
||
$self->{converted_from_reclamation_id} = $::form->{from_id};
|
||
$self->order($delivery_order);
|
||
|
||
... | ... | |
|
||
my $destination_type = $self->type_data->workflow("to_quotation_type");
|
||
|
||
$self->order(SL::DB::DeliveryOrder->new_from($self->order, destination_type => $destination_type));
|
||
my $delivery_order = SL::Model::Record->new_from_workflow($self->order, $destination_type, {});
|
||
$self->order($delivery_order);
|
||
$self->{converted_from_oe_id} = delete $::form->{id};
|
||
|
||
# set item ids to new fake id, to identify them as new items
|
||
... | ... | |
$custom_shipto = $self->order->shipto->clone('SL::DB::DeliveryOrder');
|
||
}
|
||
|
||
$self->order(SL::DB::DeliveryOrder->new_from($self->order, destination_type => $destination_type));
|
||
my $delivery_order = SL::Model::Record->new_from_workflow($self->order, $destination_type, {});
|
||
$self->order($delivery_order);
|
||
$self->{converted_from_oe_id} = delete $::form->{id};
|
||
|
||
# set item ids to new fake id, to identify them as new items
|
SL/Controller/Order.pm | ||
---|---|---|
use SL::DB::Shipto;
|
||
use SL::DB::Translation;
|
||
use SL::DB::ValidityToken;
|
||
use SL::Model::Record;
|
||
|
||
use SL::Helper::CreatePDF qw(:all);
|
||
use SL::Helper::PrintOptions;
|
||
... | ... | |
|
||
my $reclamation = SL::DB::Reclamation->new(id => $::form->{from_id})->load;
|
||
my %params;
|
||
$params{destination_type} = $reclamation->is_sales ? 'sales_order'
|
||
: 'purchase_order';
|
||
my $order = SL::DB::Order->new_from($reclamation, %params);
|
||
my $target_type = $reclamation->is_sales ? 'sales_order'
|
||
: 'purchase_order';
|
||
my $order = SL::Model::Record->new_from_workflow($reclamation, $target_type);
|
||
$self->{converted_from_reclamation_id} = $::form->{from_id};
|
||
|
||
$self->order($order);
|
SL/Controller/Reclamation.pm | ||
---|---|---|
|
||
use SL::Controller::Helper::GetModels;
|
||
|
||
use SL::DB::Order;
|
||
use SL::DB::DeliveryOrder;
|
||
use SL::DB::Invoice;
|
||
use SL::Model::Record;
|
||
|
||
use List::Util qw(first sum0);
|
||
use List::UtilsBy qw(sort_by uniq_by);
|
||
use List::MoreUtils qw(any none pairwise first_index);
|
||
... | ... | |
return $self->js->render();
|
||
}
|
||
|
||
require SL::DB::Order;
|
||
my $order = SL::DB::Order->new(id => $::form->{from_id})->load;
|
||
my $reclamation = $order->convert_to_reclamation();
|
||
my $target_type = $order->is_sales ? 'sales_reclamation'
|
||
: 'purchase_reclamation';
|
||
my $reclamation = SL::Model::Record->new_from_workflow($order, $target_type);
|
||
|
||
$self->reclamation($reclamation);
|
||
|
||
... | ... | |
return $self->js->render();
|
||
}
|
||
|
||
require SL::DB::DeliveryOrder;
|
||
my $delivery_order = SL::DB::DeliveryOrder->new(id => $::form->{from_id})->load;
|
||
my $reclamation = $delivery_order->convert_to_reclamation();
|
||
my $target_type = $delivery_order->is_sales ? 'sales_reclamation'
|
||
: 'purchase_reclamation';
|
||
my $reclamation = SL::Model::Record->new_from_workflow($delivery_order, $target_type);
|
||
|
||
$self->reclamation($reclamation);
|
||
|
||
... | ... | |
return $self->js->render();
|
||
}
|
||
|
||
require SL::DB::Invoice;
|
||
my $invoice = SL::DB::Invoice->new(id => $::form->{from_id})->load;
|
||
my $reclamation = $invoice->convert_to_reclamation();
|
||
my $target_type = 'sales_reclamation';
|
||
my $reclamation = SL::Model::Record->new_from_workflow($invoice, $target_type);
|
||
|
||
$self->reclamation($reclamation);
|
||
|
||
... | ... | |
require SL::DB::PurchaseInvoice;
|
||
my $invoice = SL::DB::PurchaseInvoice->new(id => $::form->{from_id})->load;
|
||
$invoice->{type} = $invoice->invoice_type; #can't add type → invoice_type in SL/DB/PurchaseInvoice
|
||
my $reclamation = $invoice->convert_to_reclamation();
|
||
my $target_type = 'purchase_reclamation';
|
||
my $reclamation = SL::Model::Record->new_from_workflow($invoice, $target_type);
|
||
|
||
$self->reclamation($reclamation);
|
||
|
SL/DB/DeliveryOrder.pm | ||
---|---|---|
employee => SL::DB::Manager::Employee->current,
|
||
closed => 0,
|
||
delivered => 0,
|
||
order_type => $params{type},
|
||
order_type => $params{destination_type},
|
||
transdate => DateTime->today_local,
|
||
);
|
||
|
SL/Model/Record.pm | ||
---|---|---|
|
||
use strict;
|
||
|
||
use SL::Locale::String qw(t8);
|
||
use Carp;
|
||
|
||
use SL::DB::Order;
|
||
use SL::DB::DeliveryOrder;
|
||
use SL::DB::Reclamation;
|
||
use SL::DB::Invoice;
|
||
|
||
use SL::Locale::String qw(t8);
|
||
|
||
sub new {
|
||
my ($class, $target_type, %flags) = @_;
|
||
... | ... | |
}
|
||
|
||
sub new_from_workflow {
|
||
my ($class, $source_objects, $target_type, %flags) = @_;
|
||
my ($class, $source_object, $target_subtype, %flags) = @_;
|
||
|
||
# source: entweder das einzelne quellobjekt oder ein arrayref von quellobjekten.
|
||
# - wenn ein arrayref übergeben wurde muss der code testen ob die objekte alle subtype gleich sind und evtl customer/vendor gleich sind
|
||
# source: ein quellobjekt
|
||
# target type: sollte ein subtype sein. wer das hier implementiert, sollte auch eine subtype registratur bauen in der man subtypes nachschlagen kann
|
||
# flags: welche extra behandlungen sollen gemacht werden, z.B. record_links setzen
|
||
|
||
# muss prüfen ob diese umwandlung korrekt ist
|
||
# (muss prüfen ob diese umwandlung korrekt ist)
|
||
# muss das entsprechende new_from in den objekten selber benutzen
|
||
# und dann evtl nachbearbeitung machen (die bisher im controller stand)
|
||
|
||
... | ... | |
|
||
# fehlerfall: exception aus unterliegendem code bubblen oder neue exception werfen
|
||
# rückgabe: das neue objekt
|
||
|
||
$flags{destination_type} = $target_subtype;
|
||
my %defaults_flags = (
|
||
no_linked_records => 0,
|
||
);
|
||
%flags = (%flags, %defaults_flags);
|
||
|
||
my %subtype_to_type = (
|
||
# Order
|
||
"request_quotation" => "SL::DB::Order",
|
||
"purchase_order" => "SL::DB::Order",
|
||
"sales_quotation" => "SL::DB::Order",
|
||
"sales_order" => "SL::DB::Order",
|
||
# DeliveryOrder
|
||
"sales_delivery_order" => "SL::DB::DeliveryOrder",
|
||
"purchase_delivery_order" => "SL::DB::DeliveryOrder",
|
||
"rma_delivery_order" => "SL::DB::DeliveryOrder",
|
||
"supplier_delivery_order" => "SL::DB::DeliveryOrder",
|
||
# Reclamation
|
||
"sales_reclamation" => "SL::DB::Reclamation",
|
||
"purchase_reclamation" => "SL::DB::Reclamation",
|
||
);
|
||
my $target_type = $subtype_to_type{$target_subtype};
|
||
unless ($target_type) {
|
||
croak("Conversion not supported to $target_subtype");
|
||
}
|
||
|
||
my $target_object = ${target_type}->new_from($source_object, %flags);
|
||
return $target_object;
|
||
}
|
||
|
||
# im Moment nur bei Aufträgen
|
Auch abrufbar als: Unified diff
Model::Record: new_from_workflow implementiert