### 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>
'Tax Account' => 'Steuerkonto',
'Tax Account Name' => 'Steuerkontoname',
'Tax Consultant' => 'Steuerberater/-in',
- 'Tax ID number' => 'UStID-Nummer',
+ 'Tax ID number' => 'USt-IdNr.',
'Tax Included' => 'Steuer im Preis inbegriffen',
'Tax Number' => 'Steuernummer',
'Tax Number / SSN' => 'Steuernummer',
'Users with access to this client' => 'Benutzer mit Zugriff auf diesen Mandanten',
'Users, Clients and User Groups' => 'Benutzer, Mandanten und Benutzergruppen',
'Usually the sales quotation is valid until the next working day. If a value is set here then the quotation will be valid for at least that many days. The resulting date will be adjusted to the next working day if it ends up on a weekend.' => 'Standardmäßig ist ein Verkaufsangebot bis zum nächsten Werktag gültig. Ist hier ein Wert angegeben, so ist ein Angebot mindestens so viele Tage gültig. Sollte das dabei herauskommende Datum auf ein Wochenende fallen, so wird statt dessen der nachfolgende Arbeitstag genommen.',
- 'VAT ID' => 'UStdID-Nr',
+ 'VAT ID' => 'USt-IdNr.',
'VN' => 'Kred.-Nr.',
'Valid' => 'Gültig',
'Valid from' => 'Gültig ab',
-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>