Revision ac05693f
Von Tamino Steinert vor etwa 2 Jahren hinzugefügt
SL/Controller/Reclamation.pm | ||
---|---|---|
use SL::DB::DeliveryOrder;
|
||
use SL::DB::Invoice;
|
||
use SL::Model::Record;
|
||
use SL::DB::Order::TypeData qw(:types);
|
||
use SL::DB::Reclamation::TypeData qw(:types);
|
||
|
||
use List::Util qw(first sum0);
|
||
use List::UtilsBy qw(sort_by uniq_by);
|
||
... | ... | |
}
|
||
|
||
my $order = SL::DB::Order->new(id => $::form->{from_id})->load;
|
||
my $target_type = $order->is_sales ? 'sales_reclamation'
|
||
: 'purchase_reclamation';
|
||
my $target_type = $order->is_sales ? SALES_RECLAMATION_TYPE()
|
||
: PURCHASE_RECLAMATION_TYPE();
|
||
my $reclamation = SL::Model::Record->new_from_workflow($order, $target_type);
|
||
|
||
$self->reclamation($reclamation);
|
||
... | ... | |
}
|
||
|
||
my $delivery_order = SL::DB::DeliveryOrder->new(id => $::form->{from_id})->load;
|
||
my $target_type = $delivery_order->is_sales ? 'sales_reclamation'
|
||
: 'purchase_reclamation';
|
||
my $target_type = $delivery_order->is_sales ? SALES_RECLAMATION_TYPE()
|
||
: PURCHASE_RECLAMATION_TYPE();
|
||
my $reclamation = SL::Model::Record->new_from_workflow($delivery_order, $target_type);
|
||
|
||
$self->reclamation($reclamation);
|
||
... | ... | |
}
|
||
|
||
my $invoice = SL::DB::Invoice->new(id => $::form->{from_id})->load;
|
||
my $target_type = 'sales_reclamation';
|
||
my $target_type = SALES_RECLAMATION_TYPE();
|
||
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 $target_type = 'purchase_reclamation';
|
||
my $target_type = PURCHASE_RECLAMATION_TYPE();
|
||
my $reclamation = SL::Model::Record->new_from_workflow($invoice, $target_type);
|
||
|
||
$self->reclamation($reclamation);
|
||
... | ... | |
sub action_save_and_order {
|
||
my ($self) = @_;
|
||
|
||
my $to_type = $self->reclamation->is_sales ? 'sales_order'
|
||
: 'purchase_order';
|
||
my $to_type = $self->reclamation->is_sales ? SALES_ORDER_TYPE()
|
||
: PURCHASE_ORDER_TYPE();
|
||
|
||
$self->save_with_render_error();
|
||
flash_later('info', t8('The reclamation has been saved'));
|
||
... | ... | |
controller => 'Reclamation',
|
||
action => 'add_from_reclamation',
|
||
from_id => $self->reclamation->id,
|
||
type => sales_reclamation_type(),
|
||
type => SALES_RECLAMATION_TYPE(),
|
||
);
|
||
}
|
||
|
||
... | ... | |
controller => 'Reclamation',
|
||
action => 'add_from_reclamation',
|
||
from_id => $self->reclamation->id,
|
||
type => purchase_reclamation_type(),
|
||
type => PURCHASE_RECLAMATION_TYPE(),
|
||
);
|
||
}
|
||
|
||
... | ... | |
#
|
||
|
||
sub init_valid_types {
|
||
[ sales_reclamation_type(), purchase_reclamation_type() ];
|
||
$_[0]->type_data->valid_types;
|
||
}
|
||
|
||
sub init_type {
|
||
... | ... | |
sub init_cv {
|
||
my ($self) = @_;
|
||
|
||
my $cv = (any { $self->type eq $_ } (sales_reclamation_type())) ? 'customer'
|
||
: (any { $self->type eq $_ } (purchase_reclamation_type())) ? 'vendor'
|
||
my $cv = (any { $self->type eq $_ } (SALES_RECLAMATION_TYPE())) ? 'customer'
|
||
: (any { $self->type eq $_ } (PURCHASE_RECLAMATION_TYPE())) ? 'vendor'
|
||
: die "Not a valid type for reclamation";
|
||
|
||
return $cv;
|
||
... | ... | |
language_id => t8('Language'),
|
||
department_id => t8('Department'),
|
||
globalproject_id => t8('Project Number'),
|
||
cv_record_number => ($self->type eq 'sales_reclamation' ? t8('Customer Record Number') : t8('Vendor Record Number')),
|
||
cv_record_number => ($self->type eq SALES_RECLAMATION_TYPE() ? t8('Customer Record Number') : t8('Vendor Record Number')),
|
||
transaction_description => t8('Description'),
|
||
notes => t8('Notes'),
|
||
intnotes => t8('Internal Notes'),
|
||
... | ... | |
|
||
sub init_part_picker_classification_ids {
|
||
my ($self) = @_;
|
||
my $attribute = 'used_for_' . ($self->type eq sales_reclamation_type() ? 'sale' : 'purchase');
|
||
my $attribute = 'used_for_' . ($self->type eq SALES_RECLAMATION_TYPE() ? 'sale' : 'purchase');
|
||
|
||
return [ map { $_->id } @{ SL::DB::Manager::PartClassification->get_all(where => [ $attribute => 1 ]) } ];
|
||
}
|
||
... | ... | |
|
||
# check for direct delivery
|
||
# copy shipto in custom shipto (custom shipto will be copied by new_from() in case)
|
||
if ($::form->{type} eq purchase_reclamation_type()) {
|
||
if ($::form->{type} eq PURCHASE_RECLAMATION_TYPE()) {
|
||
if ($::form->{use_shipto}) {
|
||
my $custom_shipto = $source_reclamation->shipto->clone('SL::DB::Reclamation');
|
||
$self->reclamation->custom_shipto($custom_shipto) if $custom_shipto;
|
||
... | ... | |
sub => sub { $_[0]->closed ? t8('Yes') : t8('No') },
|
||
},
|
||
);
|
||
if ($self->type eq sales_reclamation_type()) {
|
||
if ($self->type eq SALES_RECLAMATION_TYPE()) {
|
||
$column_defs{customer_id} = ({
|
||
raw_data => sub { $_[0]->customervendor->presenter->customer(display => 'table-cell', callback => $callback) },
|
||
sub => sub { $_[0]->customervendor->name },
|
||
... | ... | |
},
|
||
sub => sub { $_[0]->contact ? $_[0]->contact->cp_name : '' },
|
||
});
|
||
} elsif ($self->type eq purchase_reclamation_type()) {
|
||
} elsif ($self->type eq PURCHASE_RECLAMATION_TYPE()) {
|
||
$column_defs{vendor_id} = ({
|
||
raw_data => sub { $_[0]->customervendor->presenter->vendor(display => 'table-cell', callback => $callback) },
|
||
sub => sub { $_[0]->customervendor->name },
|
||
... | ... | |
{ output => 0 },
|
||
models => $self->models
|
||
),
|
||
title => $self->type eq sales_reclamation_type() ? t8('Sales Reclamations') : t8('Purchase Reclamations'),
|
||
title => $self->type eq SALES_RECLAMATION_TYPE() ? t8('Sales Reclamations') : t8('Purchase Reclamations'),
|
||
allow_pdf_export => 1,
|
||
allow_csv_export => 1,
|
||
);
|
||
... | ... | |
sub _setup_edit_action_bar {
|
||
my ($self, %params) = @_;
|
||
|
||
my $deletion_allowed = ($self->type eq sales_reclamation_type()
|
||
my $deletion_allowed = ($self->type eq SALES_RECLAMATION_TYPE()
|
||
&& $::instance_conf->get_sales_reclamation_show_delete)
|
||
|| ($self->type eq purchase_reclamation_type()
|
||
|| ($self->type eq PURCHASE_RECLAMATION_TYPE()
|
||
&& $::instance_conf->get_purchase_reclamation_show_delete);
|
||
|
||
for my $bar ($::request->layout->get('actionbar')) {
|
||
... | ... | |
$::instance_conf->get_reclamation_warn_duplicate_parts,
|
||
$::instance_conf->get_reclamation_warn_no_reqdate,
|
||
],
|
||
only_if => (any { $self->type eq $_ } (purchase_reclamation_type())),
|
||
only_if => (any { $self->type eq $_ } (PURCHASE_RECLAMATION_TYPE())),
|
||
],
|
||
action => [
|
||
t8('Save and Purchase Reclamation'),
|
||
call => [ 'kivi.Reclamation.purchase_reclamation_check_for_direct_delivery' ],
|
||
only_if => (any { $self->type eq $_ } (sales_reclamation_type())),
|
||
only_if => (any { $self->type eq $_ } (SALES_RECLAMATION_TYPE())),
|
||
],
|
||
action => [
|
||
t8('Save and Order'),
|
||
... | ... | |
$::instance_conf->get_reclamation_warn_duplicate_parts,
|
||
$::instance_conf->get_reclamation_warn_no_reqdate,
|
||
],
|
||
only_if => (any { $self->type eq $_ } (sales_reclamation_type())),
|
||
only_if => (any { $self->type eq $_ } (SALES_RECLAMATION_TYPE())),
|
||
],
|
||
action => [
|
||
t8('Save and Supplier Delivery Order'),
|
||
... | ... | |
$::instance_conf->get_reclamation_warn_duplicate_parts,
|
||
$::instance_conf->get_reclamation_warn_no_reqdate,
|
||
],
|
||
only_if => (any { $self->type eq $_ } (purchase_reclamation_type())),
|
||
only_if => (any { $self->type eq $_ } (PURCHASE_RECLAMATION_TYPE())),
|
||
],
|
||
action => [
|
||
t8('Save and Credit Note'),
|
||
... | ... | |
$::instance_conf->get_reclamation_warn_duplicate_parts,
|
||
$::instance_conf->get_reclamation_warn_no_reqdate,
|
||
],
|
||
only_if => (any { $self->type eq $_ } (sales_reclamation_type())),
|
||
only_if => (any { $self->type eq $_ } (SALES_RECLAMATION_TYPE())),
|
||
],
|
||
], # end of combobox "Workflow"
|
||
|
||
... | ... | |
# t8("Edit Purchase Reclamation");
|
||
|
||
$action = ucfirst(lc($action));
|
||
return $self->type eq sales_reclamation_type() ? t8("$action Sales Reclamation")
|
||
: $self->type eq purchase_reclamation_type() ? t8("$action Purchase Reclamation")
|
||
return $self->type eq SALES_RECLAMATION_TYPE() ? t8("$action Sales Reclamation")
|
||
: $self->type eq PURCHASE_RECLAMATION_TYPE() ? t8("$action Purchase Reclamation")
|
||
: '';
|
||
}
|
||
|
||
... | ... | |
return $texts;
|
||
}
|
||
|
||
sub sales_reclamation_type {
|
||
'sales_reclamation';
|
||
}
|
||
|
||
sub purchase_reclamation_type {
|
||
'purchase_reclamation';
|
||
}
|
||
|
||
sub save_history {
|
||
my ($self, $addition) = @_;
|
||
|
||
... | ... | |
}
|
||
|
||
sub init_type_data {
|
||
SL::DB::Helper::TypeDataProxy->new('SL::DB::Reclamation', $_[0]->type);
|
||
SL::DB::Helper::TypeDataProxy->new('SL::DB::Reclamation', $::form->{type});
|
||
}
|
||
|
||
1;
|
Auch abrufbar als: Unified diff
TypeData: nutzte Konstanten anstatt String für Typen