### Choose a character set (just in case you like to change it here)
-### uncommit the line you wish to activate
+### uncomment the line you wish to activate
#AddDefaultCharset ISO-8859-15
#AddDefaultCharset UTF-8
### simple access control by client ip
-### uncomment the lines starting with Order ..., Deny ... and Allow ...
-### examples: "Allow from 192.168" or "Allow from 192.168.1" or "Allow from 192.168.178" or "Allow from 217.84.201.2"
-#Order deny,allow
-#Deny from all
-#Allow from 192.168
+### uncomment the lines starting with <IfModule ...> until last </IfModule>
+### examples for Apache >= 2.4: "Require ip 192.168" or "Require ip 192.168.1" or "Require ip 192.168.178" or "Require ip 217.84.201.2"
+### examples for Apache <= 2.2: "Allow from 192.168" or "Allow from 192.168.1" or "Allow from 192.168.178" or "Allow from 217.84.201.2"
+#<IfModule mod_authz_core.c>
+# # Apache 2.4
+# Require ip 192.168
+#</IfModule>
+#<IfModule !mod_authz_core.c>
+# # Apache 2.2
+# Order deny,allow
+# Deny from all
+# Allow from 192.168
+#</IfModule>
-Order Allow,Deny
-Deny from all
+<IfModule mod_authz_core.c>
+ # Apache 2.4
+ Require all denied
+</IfModule>
+<IfModule !mod_authz_core.c>
+ # Apache 2.2
+ Order deny,allow
+ Deny from all
+</IfModule>
sub action_save_as_new {
my ($self) = @_;
- if (!$self->order->id) {
+ my $order = $self->order;
+
+ if (!$order->id) {
$self->js->flash('error', t8('This object has not been saved yet.'));
return $self->js->render();
}
- delete $::form->{$_} for qw(closed delivered converted_from_oe_id converted_from_orderitems_ids);
-
- my $src_order = SL::DB::Order->new(id => $self->order->id)->load;
+ # 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.
- if (trim($self->order->number) eq $src_order->number) {
- $self->order->number('');
- }
+ $new_attrs{number} = (trim($order->number) eq $saved_order->number)
+ ? ''
+ : trim($order->number);
- # Clear reqdate and transdate unless changed
- if ($self->order->transdate == $src_order->transdate) {
- $self->order->transdate(DateTime->today_local)
- }
- if ($self->order->reqdate == $src_order->reqdate) {
+ # Clear transdate unless changed
+ $new_attrs{transdate} = ($order->transdate == $saved_order->transdate)
+ ? DateTime->today_local
+ : $order->transdate;
+
+ # Set new reqdate unless changed
+ if ($order->reqdate == $saved_order->reqdate) {
my $extra_days = $self->type eq _sales_quotation_type() ? $::instance_conf->get_reqdate_interval : 1;
- $self->order->reqdate(DateTime->today_local->next_workday(extra_days => $extra_days));
+ $new_attrs{reqdate} = DateTime->today_local->next_workday(extra_days => $extra_days);
+ } else {
+ $new_attrs{reqdate} = $order->reqdate;
}
# Update employee
- $self->order->employee(SL::DB::Manager::Employee->current);
+ $new_attrs{employee} = SL::DB::Manager::Employee->current;
+
+ # Create new record from current one
+ $self->order(SL::DB::Order->new_from($order, destination_type => $order->type, attributes => \%new_attrs));
+
+ # no linked records on save as new
+ delete $::form->{$_} for qw(converted_from_oe_id converted_from_orderitems_ids);
# save
$self->action_save();
croak("A destination type must be given parameter") unless $params{destination_type};
my $destination_type = delete $params{destination_type};
- my $src_dst_allowed = ('sales_quotation' eq $source->type && 'sales_order' eq $destination_type)
- || ('request_quotation' eq $source->type && 'purchase_order' eq $destination_type);
+ my $src_dst_allowed = ('sales_quotation' eq $source->type && 'sales_order' eq $destination_type)
+ || ('request_quotation' eq $source->type && 'purchase_order' eq $destination_type)
+ || ('sales_quotation' eq $source->type && 'sales_quotation' eq $destination_type)
+ || ('sales_order' eq $source->type && 'sales_order' eq $destination_type)
+ || ('request_quotation' eq $source->type && 'request_quotation' eq $destination_type)
+ || ('purchase_order' eq $source->type && 'purchase_order' eq $destination_type);
croak("Cannot convert from '" . $source->type . "' to '" . $destination_type . "'") unless $src_dst_allowed;
my ($item_parent_id_column, $item_parent_column);
ordnumber payment_id quonumber reqdate salesman_id shippingpoint shipvia taxincluded taxzone_id
transaction_description vendor_id
)),
- quotation => 0,
+ quotation => !!($destination_type =~ m{quotation$}),
closed => 0,
delivered => 0,
transdate => DateTime->today_local,
# Custom shipto addresses (the ones specific to the sales/purchase
# record and not to the customer/vendor) are only linked from
- # shipto → delivery_orders. Meaning delivery_orders.shipto_id
+ # shipto → order. Meaning order.shipto_id
# will not be filled in that case.
if (!$source->shipto_id && $source->id) {
$args{custom_shipto} = $source->custom_shipto->clone($class) if $source->can('custom_shipto') && $source->custom_shipto;
=head2 C<new_from $source, %params>
Creates a new C<SL::DB::Order> instance and copies as much
-information from C<$source> as possible. At the moment only sales orders from
+information from C<$source> as possible. At the moment only records with the
+same destination type as the source type and sales orders from
sales quotations and purchase orders from requests for quotations can be
created.
=item C<destination_type>
(mandatory)
-The type of the newly created object. Can be C<sales_order> or
-C<purchase_order> for now.
+The type of the newly created object. Can be C<sales_quotation>,
+C<sales_order>, C<purchase_quotation> or C<purchase_order> for now.
=item C<items>
-Order Allow,Deny
-Deny from all
+<IfModule mod_authz_core.c>
+ # Apache 2.4
+ Require all denied
+</IfModule>
+<IfModule !mod_authz_core.c>
+ # Apache 2.2
+ Order deny,allow
+ Deny from all
+</IfModule>
-Order Allow,Deny
-Deny from all
+<IfModule mod_authz_core.c>
+ # Apache 2.4
+ Require all denied
+</IfModule>
+<IfModule !mod_authz_core.c>
+ # Apache 2.2
+ Order deny,allow
+ Deny from all
+</IfModule>
-Order Allow,Deny
-Deny from all
+<IfModule mod_authz_core.c>
+ # Apache 2.4
+ Require all denied
+</IfModule>
+<IfModule !mod_authz_core.c>
+ # Apache 2.2
+ Order deny,allow
+ Deny from all
+</IfModule>
-Order Allow,Deny
-Deny from all
+<IfModule mod_authz_core.c>
+ # Apache 2.4
+ Require all denied
+</IfModule>
+<IfModule !mod_authz_core.c>
+ # Apache 2.2
+ Order deny,allow
+ Deny from all
+</IfModule>
-Order Allow,Deny
-Deny from all
+<IfModule mod_authz_core.c>
+ # Apache 2.4
+ Require all denied
+</IfModule>
+<IfModule !mod_authz_core.c>
+ # Apache 2.2
+ Order deny,allow
+ Deny from all
+</IfModule>
-Order Allow,Deny
-Deny from all
+<IfModule mod_authz_core.c>
+ # Apache 2.4
+ Require all denied
+</IfModule>
+<IfModule !mod_authz_core.c>
+ # Apache 2.2
+ Order deny,allow
+ Deny from all
+</IfModule>