Revision 91f4c662
Von Tamino Steinert vor mehr als 1 Jahr hinzugefügt
SL/Controller/DeliveryOrder.pm | ||
---|---|---|
use SL::Webdav;
|
||
use SL::File;
|
||
use SL::MIME;
|
||
use SL::Util qw(trim);
|
||
use SL::YAML;
|
||
use SL::DB::History;
|
||
use SL::DB::Order;
|
||
... | ... | |
return $self->js->render();
|
||
}
|
||
|
||
# load order from db to check if values changed
|
||
my $saved_order = SL::DB::DeliveryOrder->new(id => $order->id)->load;
|
||
|
||
my %new_attrs;
|
||
# Lets assign a new number if the user hasn't changed the previous one.
|
||
# If it has been changed manually then use it as-is.
|
||
$new_attrs{number} = (trim($order->number) eq $saved_order->number)
|
||
? ''
|
||
: trim($order->number);
|
||
|
||
# Clear transdate unless changed
|
||
$new_attrs{transdate} = ($order->transdate == $saved_order->transdate)
|
||
? DateTime->today_local
|
||
: $order->transdate;
|
||
|
||
# Set new reqdate unless changed if it is enabled in client config
|
||
$new_attrs{reqdate} = $self->type_data->get_reqdate_by_type($order->reqdate, $saved_order->reqdate);
|
||
|
||
# Update employee
|
||
$new_attrs{employee} = SL::DB::Manager::Employee->current;
|
||
|
||
# Create new record from current one
|
||
$self->order(SL::DB::DeliveryOrder->new_from($order, destination_type => $order->type, attributes => \%new_attrs));
|
||
my $updated_order = SL::Model::Record->update_for_save_as_new($saved_order, $order);
|
||
|
||
$self->order($updated_order);
|
||
|
||
# no linked records on save as new
|
||
delete $::form->{$_} for qw(converted_from_oe_id converted_from_orderitems_ids);
|
SL/Controller/Order.pm | ||
---|---|---|
return $self->js->render();
|
||
}
|
||
|
||
# load order from db to check if values changed
|
||
my $saved_order = SL::DB::Order->new(id => $order->id)->load;
|
||
|
||
my %new_attrs;
|
||
# Lets assign a new number if the user hasn't changed the previous one.
|
||
# If it has been changed manually then use it as-is.
|
||
$new_attrs{number} = (trim($order->number) eq $saved_order->number)
|
||
? ''
|
||
: trim($order->number);
|
||
|
||
# Clear transdate unless changed
|
||
$new_attrs{transdate} = ($order->transdate == $saved_order->transdate)
|
||
? DateTime->today_local
|
||
: $order->transdate;
|
||
|
||
# Set new reqdate unless changed if it is enabled in client config
|
||
if ($order->reqdate == $saved_order->reqdate) {
|
||
my $extra_days = $self->type eq sales_quotation_type() ? $::instance_conf->get_reqdate_interval :
|
||
$self->type eq sales_order_type() ? $::instance_conf->get_delivery_date_interval :
|
||
$self->type eq sales_order_intake_type() ? $::instance_conf->get_delivery_date_interval : 1;
|
||
|
||
if ( ($self->type eq sales_order_intake_type() && !$::instance_conf->get_deliverydate_on)
|
||
|| ($self->type eq sales_order_type() && !$::instance_conf->get_deliverydate_on)
|
||
|| ($self->type eq sales_quotation_type() && !$::instance_conf->get_reqdate_on)) {
|
||
$new_attrs{reqdate} = '';
|
||
} else {
|
||
$new_attrs{reqdate} = DateTime->today_local->next_workday(extra_days => $extra_days);
|
||
}
|
||
} else {
|
||
$new_attrs{reqdate} = $order->reqdate;
|
||
}
|
||
|
||
# Update employee
|
||
$new_attrs{employee} = SL::DB::Manager::Employee->current;
|
||
|
||
# Warn on obsolete items
|
||
my @obsolete_positions = map { $_->position } grep { $_->part->obsolete } @{ $order->items_sorted };
|
||
flash_later('warning', t8('This record containts obsolete items at position #1', join ', ', @obsolete_positions)) if @obsolete_positions;
|
||
|
||
# Create new record from current one
|
||
$self->order(SL::DB::Order->new_from($order, destination_type => $order->type, attributes => \%new_attrs));
|
||
my $updated_order = SL::Model::Record->update_for_save_as_new($saved_order, $order);
|
||
|
||
$self->order($updated_order);
|
||
|
||
# no linked records on save as new
|
||
delete $::form->{$_} for qw(converted_from_oe_id converted_from_orderitems_ids);
|
||
|
||
# Warn on obsolete items
|
||
my @obsolete_positions = map { $_->position } grep { $_->part->obsolete } @{ $self->order->items_sorted };
|
||
flash_later('warning', t8('This record containts obsolete items at position #1', join ', ', @obsolete_positions)) if @obsolete_positions;
|
||
|
||
if (!$::form->{form_validity_token}) {
|
||
$::form->{form_validity_token} = SL::DB::ValidityToken->create(scope => SL::DB::ValidityToken::SCOPE_ORDER_SAVE())->token;
|
||
}
|
SL/Controller/Reclamation.pm | ||
---|---|---|
use SL::Webdav;
|
||
use SL::File;
|
||
use SL::MIME;
|
||
use SL::Util qw(trim);
|
||
use SL::YAML;
|
||
use SL::DB::History;
|
||
use SL::DB::Reclamation;
|
||
... | ... | |
return $self->js->render();
|
||
}
|
||
|
||
# load reclamation from db to check if values changed
|
||
my $saved_reclamation = SL::DB::Reclamation->new(id => $reclamation->id)->load;
|
||
|
||
my %new_attrs;
|
||
# If it has been changed manually then use it as-is, otherwise change.
|
||
$new_attrs{record_number} = (trim($reclamation->record_number) eq $saved_reclamation->record_number)
|
||
? ''
|
||
: trim($reclamation->record_number);
|
||
$new_attrs{transdate} = ($reclamation->transdate == $saved_reclamation->transdate)
|
||
? DateTime->today_local
|
||
: $reclamation->transdate;
|
||
if ($reclamation->reqdate == $saved_reclamation->reqdate) {
|
||
$new_attrs{reqdate} = '';
|
||
} else {
|
||
$new_attrs{reqdate} = $reclamation->reqdate;
|
||
}
|
||
|
||
# Update employee
|
||
$new_attrs{employee} = SL::DB::Manager::Employee->current;
|
||
|
||
# Create new record from current one
|
||
$self->reclamation(
|
||
SL::DB::Reclamation->new_from(
|
||
$reclamation,
|
||
destination_type => $reclamation->type,
|
||
attributes => \%new_attrs,
|
||
no_linked_records => 1,
|
||
)
|
||
);
|
||
my $new_reclamation = SL::Model::Record->update_for_save_as_new($saved_reclamation, $reclamation);
|
||
$self->reclamation($new_reclamation);
|
||
|
||
if (!$::form->{form_validity_token}) {
|
||
$::form->{form_validity_token} = SL::DB::ValidityToken->create(scope => SL::DB::ValidityToken::SCOPE_RECLAMATION_SAVE())->token;
|
SL/DB/Reclamation.pm | ||
---|---|---|
closed => 0,
|
||
delivered => 0,
|
||
transdate => DateTime->today_local,
|
||
reqdate => DateTime->today_local->next_workday(),
|
||
);
|
||
if ( $is_abbr_any->(qw(srsr prpr srpr prsr)) ) { #Reclamation
|
||
map { $record_args{$_} = $source->$_ } # {{{ for vim folds
|
||
... | ... | |
netamount
|
||
notes
|
||
payment_id
|
||
reqdate
|
||
salesman_id
|
||
shippingpoint
|
||
shipvia
|
SL/Model/Record.pm | ||
---|---|---|
use SL::DB::Status;
|
||
use SL::DB::ValidityToken;
|
||
|
||
use SL::Util qw(trim);
|
||
use SL::Locale::String qw(t8);
|
||
|
||
sub new {
|
||
... | ... | |
}
|
||
|
||
sub update_for_save_as_new {
|
||
my ($class, $record, %params) = @_;
|
||
my ($class, $saved_record, $changed_record, %params) = @_;
|
||
|
||
# der übergebene beleg wurde mit new_from erstellt und muss nachbearbeitet werden:
|
||
# - transadte, reqdate müssen überschrieben werden
|
||
# - number muss überschrieben werden
|
||
# - employee auf aktuellen setzen
|
||
|
||
my $type_info = {
|
||
# order
|
||
sales_quotation => {
|
||
get_new_reqdate => sub {
|
||
if ($::instance_conf->get_reqdate_on) {
|
||
return '';
|
||
} else {
|
||
return DateTime->today_local->next_workday(
|
||
extra_days => $::instance_conf->get_reqdate_interval());
|
||
}
|
||
},
|
||
},
|
||
sales_order => {
|
||
get_new_reqdate => sub {
|
||
if ($::instance_conf->get_deliverydate_on) {
|
||
return '';
|
||
} else {
|
||
return DateTime->today_local->next_workday(
|
||
extra_days => $::instance_conf->get_delivery_date_interval());
|
||
}
|
||
},
|
||
},
|
||
request_quotation => {
|
||
get_new_reqdate => sub { DateTime->today_local->next_workday(extra_days => 1); },
|
||
},
|
||
purchase_order => {
|
||
get_new_reqdate => sub { DateTime->today_local->next_workday(extra_days => 1); },
|
||
},
|
||
# delivery_order
|
||
rma_delivery_order => {
|
||
get_new_reqdate => sub {
|
||
DateTime->today_local->next_workday(extra_days => 1);
|
||
},
|
||
},
|
||
sales_delivery_order => {
|
||
get_new_reqdate => sub {
|
||
DateTime->today_local->next_workday(extra_days => 1);
|
||
},
|
||
},
|
||
supplier_delivery_order => {
|
||
get_new_reqdate => sub {
|
||
DateTime->today_local->next_workday(extra_days => 1);
|
||
},
|
||
},
|
||
purchase_delivery_order => {
|
||
get_new_reqdate => sub {
|
||
DateTime->today_local->next_workday(extra_days => 1);
|
||
},
|
||
},
|
||
# reclamation
|
||
sales_reclamation => {
|
||
get_new_reqdate => sub {
|
||
'';
|
||
},
|
||
},
|
||
purchase_reclamation => {
|
||
get_new_reqdate => sub {
|
||
'';
|
||
},
|
||
},
|
||
};
|
||
|
||
# changed_record
|
||
my %new_attrs;
|
||
# Lets assign a new number if the user hasn't changed the previous one.
|
||
# If it has been changed manually then use it as-is.
|
||
$new_attrs{number} = (trim($changed_record->number) eq $saved_record->number)
|
||
? ''
|
||
: trim($changed_record->number);
|
||
|
||
# Clear transdate unless changed
|
||
$new_attrs{transdate} = ($changed_record->transdate == $saved_record->transdate)
|
||
? DateTime->today_local
|
||
: $changed_record->transdate;
|
||
|
||
# Set new reqdate unless changed if it is enabled in client config
|
||
if ($changed_record->reqdate == $saved_record->reqdate) {
|
||
$new_attrs{reqdate} = $type_info->{$saved_record->type}->{get_new_reqdate}->();
|
||
}
|
||
|
||
# Update employee
|
||
$new_attrs{employee} = SL::DB::Manager::Employee->current;
|
||
|
||
|
||
my $new_record = SL::Model::Record->new_from_workflow($changed_record, $saved_record->type, no_linked_records => 1, attributes => \%new_attrs);
|
||
|
||
# return: nichts
|
||
# fehler: exception
|
||
return $new_record;
|
||
}
|
||
|
||
|
||
... | ... | |
=head1 AUTHORS
|
||
|
||
Bernd Bleßmann E<lt>bernd@kivitendo-premium.deE<gt>
|
||
Tamino Steinert E<lt>tamino.steinert@tamino.stE<gt>
|
||
...
|
||
|
||
=cut
|
Auch abrufbar als: Unified diff
Model::Record: update_for_save_as_new implementiert