Merge pull request #19 from robert-scheck/capital-sharp-s
authorMoritz Bunkus <moritz@bunkus.org>
Wed, 4 Apr 2018 07:44:12 +0000 (09:44 +0200)
committerGitHub <noreply@github.com>
Wed, 4 Apr 2018 07:44:12 +0000 (09:44 +0200)
Support German capital sharp s

12 files changed:
.htaccess
SL/.htaccess
SL/Controller/Order.pm
SL/DB/Order.pm
bin/mozilla/.htaccess
config/.htaccess
doc/dokumentation.xml
locale/.htaccess
locale/de/all
scripts/.htaccess
t/.htaccess
templates/.htaccess

index 6686227..977b220 100644 (file)
--- a/.htaccess
+++ b/.htaccess
@@ -1,11 +1,19 @@
 ### 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>
index 0a9a047..cde5b44 100644 (file)
@@ -1,2 +1,9 @@
-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>
index b3477b2..36896ee 100644 (file)
@@ -137,32 +137,44 @@ sub action_save {
 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();
index 31f6ad4..6baa0e2 100644 (file)
@@ -205,8 +205,12 @@ sub new_from {
   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);
@@ -221,7 +225,7 @@ sub new_from {
                                                 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,
@@ -229,7 +233,7 @@ sub new_from {
 
   # 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;
@@ -372,7 +376,8 @@ At the moment only sales quotations and sales orders can be converted.
 =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.
 
@@ -391,8 +396,8 @@ C<%params> can include the following options
 =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>
 
index 0a9a047..cde5b44 100644 (file)
@@ -1,2 +1,9 @@
-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>
index 0a9a047..cde5b44 100644 (file)
@@ -1,2 +1,9 @@
-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>
index a2abb6c..9db1c53 100644 (file)
         </itemizedlist>
 
         <para>Seit Version größer v3.5.0 sind die folgenden Pakete
-        hinzugekommen: <literal>Text::Unidecode, LWP::Authen::Digest,
-        LWP::UserAgent</literal></para>
+        hinzugekommen: <literal>Text::Unidecode</literal>,
+        <literal>LWP::Authen::Digest</literal>,
+        <literal>LWP::UserAgent</literal></para>
 
         <para>Seit Version v3.4.0 sind die folgenden Pakete hinzugekommen:
-        <literal>Algorithm::CheckDigits</literal><literal>PBKDF2::Tiny</literal></para>
+        <literal>Algorithm::CheckDigits</literal>,
+        <literal>PBKDF2::Tiny</literal></para>
 
         <para>Seit Version v3.2.0 sind die folgenden Pakete hinzugekommen:
         <literal>GD</literal>, <literal>HTML::Restrict</literal>,
@@ -450,7 +452,9 @@ cpan HTML::Restrict</programlisting>
         <para>Debian und Ubuntu: <programlisting>apt install aqbanking-tools
         </programlisting></para>
 
-        <para>OpenSuSE: <programlisting>zypper install aqbanking-tools</programlisting></para>
+        <para>Fedora: <programlisting>dnf install aqbanking</programlisting></para>
+
+        <para>openSUSE: <programlisting>zypper install aqbanking-tools</programlisting></para>
 
         <para>Seit Version v3.4.1 wird generell zum Feststellen der
         Seitenanzahl von PDF_Dokumenten 'pdfinfo' benötigt was im Paket
@@ -459,7 +463,9 @@ cpan HTML::Restrict</programlisting>
         <para>Debian und Ubuntu: <programlisting>apt install poppler-utils
         </programlisting></para>
 
-        <para>OpenSuSE: <programlisting>zypper install poppler-tools</programlisting></para>
+        <para>Fedora: <programlisting>dnf install poppler-utils</programlisting></para>
+
+        <para>openSUSE: <programlisting>zypper install poppler-tools</programlisting></para>
       </sect2>
     </sect1>
 
@@ -501,7 +507,7 @@ tar xvzf kivitendo-erp-3.4.1.tgz</programlisting>
       restlichen Dateien müssen für diesen Benutzer lesbar sein. Die Benutzer-
       und Gruppennamen sind bei verschiedenen Distributionen unterschiedlich
       (z.B. bei Debian/Ubuntu <constant>www-data</constant>, bei Fedora
-      <constant>apache</constant> oder bei OpenSUSE
+      <constant>apache</constant> oder bei openSUSE
       <constant>wwwrun</constant>).</para>
 
       <para>Der folgende Befehl ändert den Besitzer für die oben genannten
@@ -1241,7 +1247,7 @@ Alias       /url/for/kivitendo-erp-fcgid/          /path/to/kivitendo-erp/</prog
 
         <sect3>
           <title>SystemV-basierende Systeme (z.B. ältere Debian, ältere
-          OpenSUSE, ältere Fedora)</title>
+          openSUSE, ältere Fedora)</title>
 
           <para>Kopieren Sie die Datei
           <filename>scripts/boot/system-v/kivitendo-task-server</filename>
@@ -1259,7 +1265,7 @@ insserv kivitendo-task-server</programlisting>
             </listitem>
 
             <listitem>
-              <para>Ältere OpenSUSE und ältere Fedora:</para>
+              <para>Ältere openSUSE und ältere Fedora:</para>
 
               <programlisting>chkconfig --add kivitendo-task-server</programlisting>
             </listitem>
index 0a9a047..cde5b44 100644 (file)
@@ -1,2 +1,9 @@
-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>
index 5bdf79c..c9ecb48 100755 (executable)
@@ -3019,7 +3019,7 @@ $self->{texts} = {
   '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',
@@ -3719,7 +3719,7 @@ $self->{texts} = {
   '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',
index 0a9a047..cde5b44 100644 (file)
@@ -1,2 +1,9 @@
-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>
index 0a9a047..cde5b44 100644 (file)
@@ -1,2 +1,9 @@
-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>
index 0a9a047..cde5b44 100644 (file)
@@ -1,2 +1,9 @@
-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>