Merge branch 'master' of vc.linet-services.de:public/lx-office-erp
authorMoritz Bunkus <moritz@bunkus.org>
Thu, 12 Jan 2012 08:26:47 +0000 (09:26 +0100)
committerMoritz Bunkus <moritz@bunkus.org>
Thu, 12 Jan 2012 08:26:47 +0000 (09:26 +0100)
31 files changed:
SL/DATEV.pm
SL/Form.pm
SL/IC.pm
SL/Locale.pm
SL/WH.pm
bin/mozilla/am.pl
bin/mozilla/do.pl
bin/mozilla/gl.pl
bin/mozilla/ic.pl
bin/mozilla/io.pl
bin/mozilla/is.pl
bin/mozilla/menuv4.pl
bin/mozilla/oe.pl
bin/mozilla/rp.pl
bin/mozilla/ustva.pl
bin/mozilla/wh.pl
config/lx_office.conf.default
css/menuv4.css
doc/changelog
locale/de/all
sql/Pg-upgrade2/employee_deleted.sql
sql/Pg-upgrade2/ustva_2010_fixes.sql [new file with mode: 0644]
sql/Pg-upgrade2/warehouse_alter_chargenumber.sql [new file with mode: 0644]
templates/print/German/ustva-2010.tex [new file with mode: 0644]
templates/print/German/ustva-2011.tex [new file with mode: 0644]
templates/webpages/am/edit_accounts.html
templates/webpages/am/edit_defaults.html
templates/webpages/ic/search.html
templates/webpages/is/form_header.html
templates/webpages/wh/report_filter.html
users/ustva-2011.pdf [new file with mode: 0644]

index 7f38c88..cd04053 100644 (file)
@@ -426,10 +426,11 @@ sub _get_transactions {
         $ref->{is_tax} = 1;
       }
 
-      if (   !$ref->{invoice}
-          &&  $ref->{is_tax}
-          && !($prev_ref->{is_tax})
-          &&  (_sign($ref->{amount}) == _sign($prev_ref->{amount}))) {
+      if (   !$ref->{invoice}   # we have a non-invoice booking (=gl)
+          &&  $ref->{is_tax}    # that has "is_tax" set
+          && !($prev_ref->{is_tax})  # previous line wasn't is_tax
+          &&  (_sign($ref->{amount}) == _sign($prev_ref->{amount})))  # and sign same as previous sign
+          {
         $trans->[$i - 1]->{tax_amount} = $ref->{amount};
       }
     }
@@ -442,7 +443,10 @@ sub _get_transactions {
     }
 
     for my $j (0 .. (scalar(@{$trans}) - 1)) {
-      if (abs($trans->[$j]->{'amount'}) > abs($absumsatz)) {
+      # for gl-bookings no split is allowed and there is no AR/AP account, so we always use the maximum value as a reference
+      # for ap/ar bookings we can always search for AR/AP in link and use that
+      if ( ( not $trans->[$j]->{'invoice'} and abs($trans->[$j]->{'amount'}) > abs($absumsatz) )
+         or ($trans->[$j]->{'invoice'} and ($trans->[$j]->{'link'} eq 'AR' or $trans->[$j]->{'link'} eq 'AP'))) {
         $absumsatz     = $trans->[$j]->{'amount'};
         $notsplitindex = $j;
       }
index d537d28..2647a2b 100644 (file)
@@ -56,6 +56,7 @@ use SL::DBUtils;
 use SL::DO;
 use SL::IC;
 use SL::IS;
+use SL::Locale;
 use SL::Mailer;
 use SL::Menu;
 use SL::MoreCommon qw(uri_encode uri_decode);
@@ -1244,24 +1245,27 @@ sub get_formname_translation {
 
   $formname ||= $self->{formname};
 
+  $self->{recipient_locale} ||=  Locale->lang_to_locale($self->{language});
+  my $recipient_locale = Locale->new($self->{recipient_locale});
+
   my %formname_translations = (
-    bin_list                => $main::locale->text('Bin List'),
-    credit_note             => $main::locale->text('Credit Note'),
-    invoice                 => $main::locale->text('Invoice'),
-    pick_list               => $main::locale->text('Pick List'),
-    proforma                => $main::locale->text('Proforma Invoice'),
-    purchase_order          => $main::locale->text('Purchase Order'),
-    request_quotation       => $main::locale->text('RFQ'),
-    sales_order             => $main::locale->text('Confirmation'),
-    sales_quotation         => $main::locale->text('Quotation'),
-    storno_invoice          => $main::locale->text('Storno Invoice'),
-    sales_delivery_order    => $main::locale->text('Delivery Order'),
-    purchase_delivery_order => $main::locale->text('Delivery Order'),
-    dunning                 => $main::locale->text('Dunning'),
+    bin_list                => $recipient_locale->text('Bin List'),
+    credit_note             => $recipient_locale->text('Credit Note'),
+    invoice                 => $recipient_locale->text('Invoice'),
+    pick_list               => $recipient_locale->text('Pick List'),
+    proforma                => $recipient_locale->text('Proforma Invoice'),
+    purchase_order          => $recipient_locale->text('Purchase Order'),
+    request_quotation       => $recipient_locale->text('RFQ'),
+    sales_order             => $recipient_locale->text('Confirmation'),
+    sales_quotation         => $recipient_locale->text('Quotation'),
+    storno_invoice          => $recipient_locale->text('Storno Invoice'),
+    sales_delivery_order    => $recipient_locale->text('Delivery Order'),
+    purchase_delivery_order => $recipient_locale->text('Delivery Order'),
+    dunning                 => $recipient_locale->text('Dunning'),
   );
 
   $main::lxdebug->leave_sub();
-  return $formname_translations{$formname}
+  return $formname_translations{$formname};
 }
 
 sub get_number_prefix_for_type {
@@ -1297,11 +1301,14 @@ sub generate_attachment_filename {
   $main::lxdebug->enter_sub();
   my ($self) = @_;
 
+  $self->{recipient_locale} ||=  Locale->lang_to_locale($self->{language});
+  my $recipient_locale = Locale->new($self->{recipient_locale});
+
   my $attachment_filename = $main::locale->unquote_special_chars('HTML', $self->get_formname_translation());
   my $prefix              = $self->get_number_prefix_for_type();
 
   if ($self->{preview} && (first { $self->{type} eq $_ } qw(invoice credit_note))) {
-    $attachment_filename .= ' (' . $main::locale->text('Preview') . ')' . $self->get_extension_for_format();
+    $attachment_filename .= ' (' . $recipient_locale->text('Preview') . ')' . $self->get_extension_for_format();
 
   } elsif ($attachment_filename && $self->{"${prefix}number"}) {
     $attachment_filename .=  "_" . $self->{"${prefix}number"} . $self->get_extension_for_format();
index 9b224d6..47c5fea 100644 (file)
--- a/SL/IC.pm
+++ b/SL/IC.pm
@@ -792,11 +792,12 @@ sub all_parts {
   $form->{soldtotal} = undef if $form->{l_soldtotal}; # security fix. top100 insists on putting strings in there...
 
   my @simple_filters       = qw(partnumber ean description partsgroup microfiche drawing onhand);
+  my @project_filters      = qw(projectnumber projectdescription);
   my @makemodel_filters    = qw(make model);
   my @invoice_oi_filters   = qw(serialnumber soldtotal);
   my @apoe_filters         = qw(transdate);
   my @like_filters         = (@simple_filters, @invoice_oi_filters);
-  my @all_columns          = (@simple_filters, @makemodel_filters, @apoe_filters, qw(serialnumber));
+  my @all_columns          = (@simple_filters, @makemodel_filters, @apoe_filters, @project_filters, qw(serialnumber));
   my @simple_l_switches    = (@all_columns, qw(listprice sellprice lastcost priceupdate weight unit bin rop image));
   my @oe_flags             = qw(bought sold onorder ordered rfq quoted);
   my @qsooqr_flags         = qw(invnumber ordnumber quonumber trans_id name module qty);
@@ -816,14 +817,14 @@ sub all_parts {
     pfac       => 'LEFT JOIN price_factors pfac ON (pfac.id     = p.price_factor_id)',
     invoice_oi =>
       q|LEFT JOIN (
-         SELECT parts_id, description, serialnumber, trans_id, unit, sellprice, qty,          assemblyitem,         deliverydate, 'invoice'    AS ioi, id FROM invoice UNION
-         SELECT parts_id, description, serialnumber, trans_id, unit, sellprice, qty, FALSE AS assemblyitem, NULL AS deliverydate, 'orderitems' AS ioi, id FROM orderitems
+         SELECT parts_id, description, serialnumber, trans_id, unit, sellprice, qty,          assemblyitem,         deliverydate, 'invoice'    AS ioi, project_id, id FROM invoice UNION
+         SELECT parts_id, description, serialnumber, trans_id, unit, sellprice, qty, FALSE AS assemblyitem, NULL AS deliverydate, 'orderitems' AS ioi, project_id, id FROM orderitems
        ) AS ioi ON ioi.parts_id = p.id|,
     apoe       =>
       q|LEFT JOIN (
-         SELECT id, transdate, 'ir' AS module, ordnumber, quonumber,         invnumber, FALSE AS quotation, NULL AS customer_id,         vendor_id,    NULL AS deliverydate, 'invoice'    AS ioi FROM ap UNION
-         SELECT id, transdate, 'is' AS module, ordnumber, quonumber,         invnumber, FALSE AS quotation,         customer_id, NULL AS vendor_id,            deliverydate, 'invoice'    AS ioi FROM ar UNION
-         SELECT id, transdate, 'oe' AS module, ordnumber, quonumber, NULL AS invnumber,          quotation,         customer_id,         vendor_id, reqdate AS deliverydate, 'orderitems' AS ioi FROM oe
+         SELECT id, transdate, 'ir' AS module, ordnumber, quonumber,         invnumber, FALSE AS quotation, NULL AS customer_id,         vendor_id,    NULL AS deliverydate, globalproject_id, 'invoice'    AS ioi FROM ap UNION
+         SELECT id, transdate, 'is' AS module, ordnumber, quonumber,         invnumber, FALSE AS quotation,         customer_id, NULL AS vendor_id,            deliverydate, globalproject_id, 'invoice'    AS ioi FROM ar UNION
+         SELECT id, transdate, 'oe' AS module, ordnumber, quonumber, NULL AS invnumber,          quotation,         customer_id,         vendor_id, reqdate AS deliverydate, globalproject_id, 'orderitems' AS ioi FROM oe
        ) AS apoe ON ((ioi.trans_id = apoe.id) AND (ioi.ioi = apoe.ioi))|,
     cv         =>
       q|LEFT JOIN (
@@ -831,8 +832,9 @@ sub all_parts {
            SELECT id, name, 'vendor'   AS cv FROM vendor
          ) AS cv ON cv.id = apoe.customer_id OR cv.id = apoe.vendor_id|,
     mv         => 'LEFT JOIN vendor AS mv ON mv.id = mm.make',
+    project    => 'LEFT JOIN project AS pj ON pj.id = COALESCE(ioi.project_id, apoe.globalproject_id)',
   );
-  my @join_order = qw(partsgroup makemodel mv invoice_oi apoe cv pfac);
+  my @join_order = qw(partsgroup makemodel mv invoice_oi apoe cv pfac project);
 
   my %table_prefix = (
      deliverydate => 'apoe.', serialnumber => 'ioi.',
@@ -842,8 +844,8 @@ sub all_parts {
      quonumber    => 'apoe.', model        => 'mm.',
      invnumber    => 'apoe.', partsgroup   => 'pg.',
      lastcost     => 'p.',  , soldtotal    => ' ',
-     factor       => 'pfac.',
-     'SUM(ioi.qty)' => ' ',
+     factor       => 'pfac.', projectnumber => 'pj.',
+     'SUM(ioi.qty)' => ' ',   projectdescription => 'pj.',
      description  => 'p.',
      qty          => 'ioi.',
      serialnumber => 'ioi.',
@@ -857,7 +859,7 @@ sub all_parts {
   # of the scecified table will gently override (coalesce actually) the original value
   # use it to conditionally coalesce values from subtables
   my @column_override = (
-    #  column name,   prefix,  joins_needed
+    #  column name,   prefix,  joins_needed,  nick name (in case column is named like another)
     [ 'description',  'ioi.',  'invoice_oi'  ],
     [ 'deliverydate', 'ioi.',  'invoice_oi'  ],
     [ 'transdate',    'apoe.', 'apoe'        ],
@@ -871,6 +873,11 @@ sub all_parts {
     'SUM(ioi.qty)' => 'soldtotal',
     'ioi.id'       => 'ioi_id',
     'ioi.ioi'      => 'ioi',
+    'projectdescription' => 'projectdescription',
+  );
+
+  my %real_column = (
+    projectdescription => 'description',
   );
 
   if (($form->{searchitems} eq 'assembly') && $form->{l_lastcost}) {
@@ -880,19 +887,20 @@ sub all_parts {
   my $make_token_builder = sub {
     my $joins_needed = shift;
     sub {
-      my ($col, $alias) = @_;
+      my ($nick, $alias) = @_;
+      my ($col) = $real_column{$nick} || $nick;
       my @coalesce_tokens =
         map  { ($_->[1] || 'p.') . $_->[0] }
         grep { !$_->[2] || $joins_needed->{$_->[2]} }
-        grep {  $_->[0] eq $col }
-        @column_override, [ $col, $table_prefix{$col} ];
+        grep { ($_->[3] || $_->[0]) eq $nick }
+        @column_override, [ $col, $table_prefix{$nick}, undef , $nick ];
 
       my $coalesce = scalar @coalesce_tokens > 1;
       return ($coalesce
         ? sprintf 'COALESCE(%s)', join ', ', @coalesce_tokens
         : shift                              @coalesce_tokens)
-        . ($alias && ($coalesce || $renamed_columns{$col})
-        ?  " AS " . ($renamed_columns{$col} || $col)
+        . ($alias && ($coalesce || $renamed_columns{$nick})
+        ?  " AS " . ($renamed_columns{$nick} || $nick)
         : '');
     }
   };
@@ -1001,11 +1009,12 @@ sub all_parts {
 
   $joins_needed{partsgroup}  = 1;
   $joins_needed{pfac}        = 1;
+  $joins_needed{project}     = 1 if grep { $form->{$_} || $form->{"l_$_"} } @project_filters;
   $joins_needed{makemodel}   = 1 if grep { $form->{$_} || $form->{"l_$_"} } @makemodel_filters;
   $joins_needed{mv}          = 1 if $joins_needed{makemodel};
   $joins_needed{cv}          = 1 if $bsooqr;
   $joins_needed{apoe}        = 1 if $joins_needed{cv}   || grep { $form->{$_} || $form->{"l_$_"} } @apoe_filters;
-  $joins_needed{invoice_oi}  = 1 if $joins_needed{apoe} || grep { $form->{$_} || $form->{"l_$_"} } @invoice_oi_filters;
+  $joins_needed{invoice_oi}  = 1 if $joins_needed{project} || $joins_needed{apoe} || grep { $form->{$_} || $form->{"l_$_"} } @invoice_oi_filters;
 
   # special case for description search.
   # up in the simple filter section the description filter got interpreted as something like: WHERE description ILIKE '%$form->{description}%'
index dce9e64..bb95e73 100644 (file)
@@ -227,6 +227,18 @@ sub text {
   return $text;
 }
 
+sub lang_to_locale {
+  my ($self, $requested_lang) = @_;
+
+  my $requested_locale;
+  $requested_locale = 'de' if $requested_lang =~ m/^_(de|deu|ger)/i;
+  $requested_locale = 'fr' if $requested_lang =~ m/^_(en|uk|us|gr)/i;
+  $requested_locale = 'en' if $requested_lang =~ m/^_fr/i;
+  $requested_locale ||= 'de';
+
+  return $requested_locale;
+}
+
 sub findsub {
   $main::lxdebug->enter_sub();
 
index 352ca1a..f760f5e 100644 (file)
--- a/SL/WH.pm
+++ b/SL/WH.pm
@@ -620,6 +620,11 @@ sub get_warehouse_report {
     push @filter_vars, '%' . $filter{ean} . '%';
   }
 
+  if ($filter{date}) {
+    push @filter_ary, "i.itime <= ?";
+    push @filter_vars, $filter{date};
+  }
+
   # prepare qty comparison for later filtering
   my ($f_qty_op, $f_qty, $f_qty_base_unit);
 
index 997fd2c..2dacb6f 100644 (file)
@@ -328,22 +328,11 @@ sub account_header {
   }
 
   # preselection chart type
-  my $select_charttype = q{};
-
-  my %charttype = (
-      'A'  => $locale->text('Account'),
-      'H'  => $locale->text('Heading'),
-  );
-
-  foreach my $item ( sort({ $a <=> $b } keys %charttype) ) {
-    if ($item eq $form->{charttype}) {
-      $select_charttype .= qq|<option value="$item" selected="selected">$charttype{$item}\n|;
-
-    } else {
-      $select_charttype .= qq|<option value="$item">$charttype{$item}\n|;
-    }
+  my @all_charttypes = ({'name' => $locale->text('Account'), 'value' => 'A'},
+                        {'name' => $locale->text('Heading'), 'value' => 'H'},
+    );
+  my $selected_charttype = $form->{charttype};
 
-  }
 
   # account where AR_tax or AP_tax is set are not orphaned if they are used as
   # tax-o-matic account
@@ -362,7 +351,8 @@ sub account_header {
     ChartTypeIsAccount         => $ChartTypeIsAccount,
     AccountIsPosted            => $AccountIsPosted,
     select_category            => $select_category,
-    select_charttype           => $select_charttype,
+    all_charttypes             => \@all_charttypes,
+    selected_charttype         => $selected_charttype,
     select_bwa                 => $select_bwa,
     select_bilanz              => $select_bilanz,
     select_eur                 => $select_eur,
index 17b9fcc..37353dc 100644 (file)
@@ -174,7 +174,7 @@ sub order_links {
                'ids' => $form->{id});
 
   $form->backup_vars(qw(payment_id language_id taxzone_id salesman_id taxincluded cp_id intnotes currency));
-  $form->{shipto} = 1 if $form->{id};
+  $form->{shipto} = 1 if $form->{id} || $form->{convert_from_oe_ids};
 
   # get customer / vendor
   if ($form->{vc} eq 'vendor') {
@@ -303,7 +303,7 @@ sub form_header {
   # Fix für Bug 1082 Erwartet wird: 'abteilungsNAME--abteilungsID'
   # und Erweiterung für Bug 1760:
   # Das war leider nur ein Teil-Fix, da das Verhalten den 'Erneuern'-Knopf
-  # nicht überlebt. Konsequent jetzt auf L umgestellt 
+  # nicht überlebt. Konsequent jetzt auf L umgestellt
   #   $ perldoc SL::Template::Plugin::L
   # Daher entsprechend nur die Anpassung in form_header
   # und in DO.pm gemacht. 4 Testfälle:
@@ -477,7 +477,7 @@ sub orders {
     ids                     transdate
     id                      donumber
     ordnumber
-    name                    employee
+    name                    employee  salesman
     shipvia                 globalprojectnumber
     transaction_description
     open                    delivered
@@ -506,6 +506,7 @@ sub orders {
     'ordnumber'               => { 'text' => $locale->text('Order'), },
     'name'                    => { 'text' => $form->{vc} eq 'customer' ? $locale->text('Customer') : $locale->text('Vendor'), },
     'employee'                => { 'text' => $locale->text('Employee'), },
+    'salesman'                => { 'text' => $locale->text('Salesman'), },
     'shipvia'                 => { 'text' => $locale->text('Ship via'), },
     'globalprojectnumber'     => { 'text' => $locale->text('Project Number'), },
     'transaction_description' => { 'text' => $locale->text('Transaction description'), },
@@ -513,7 +514,7 @@ sub orders {
     'delivered'               => { 'text' => $locale->text('Delivered'), },
   );
 
-  foreach my $name (qw(id transdate donumber ordnumber name employee shipvia transaction_description)) {
+  foreach my $name (qw(id transdate donumber ordnumber name employee salesman shipvia transaction_description)) {
     my $sortdir                 = $form->{sort} eq $name ? 1 - $form->{sortdir} : $form->{sortdir};
     $column_defs{$name}->{link} = $href . "&sort=$name&sortdir=$sortdir";
   }
@@ -781,6 +782,7 @@ sub invoice {
   require "bin/mozilla/$form->{script}";
 
   my $currency = $form->{currency};
+  $form->{shipto} = 1 if $form->{convert_from_do_ids};
   invoice_links();
 
   if ($form->{ordnumber}) {
index 6ed1e4c..f4f87cc 100644 (file)
@@ -1312,6 +1312,7 @@ sub post_transaction {
   my $debitcount  = 0;
   my $creditcount = 0;
   my $debitcredit;
+  my %split_safety = ();
 
   my @flds = qw(accno debit credit projectnumber fx_transaction source memo tax taxchart);
 
@@ -1325,6 +1326,9 @@ sub post_transaction {
     push @a, {};
     $debitcredit = ($form->{"debit_$i"} == 0) ? "0" : "1";
 
+    $split_safety{   $form->{"debit_$i"}  <=> 0 }++;
+    $split_safety{ - $form->{"credit_$i"} <=> 0 }++;
+
     if ($debitcredit) {
       $debitcount++;
     } else {
@@ -1388,6 +1392,10 @@ sub post_transaction {
     $count++;
   }
 
+  if ($split_safety{-1} > 1 && $split_safety{1} > 1) {
+    $::form->error($::locale->text("Split entry detected. The values you have entered will result in an entry with more than one position on both debit and credit. Due to known problems involving accounting software Lx-Office does not allow these."));
+  }
+
   for my $i (1 .. $count) {
     my $j = $i - 1;
     for (@flds) { $form->{"${_}_$i"} = $a[$j]->{$_} }
index 48280d7..2ada087 100644 (file)
@@ -1056,6 +1056,8 @@ sub generate_report {
     'transdate'          => { 'text' => $locale->text('Transdate'), },
     'unit'               => { 'text' => $locale->text('Unit'), },
     'weight'             => { 'text' => $locale->text('Weight'), },
+    'projectnumber'      => { 'text' => $locale->text('Project Number'), },
+    'projectdescription' => { 'text' => $locale->text('Project Description'), },
   );
 
   $revers     = $form->{revers};
@@ -1215,7 +1217,7 @@ sub generate_report {
     partnumber description partsgroup bin onhand rop soldtotal unit listprice
     linetotallistprice sellprice linetotalsellprice lastcost linetotallastcost
     priceupdate weight image drawing microfiche invnumber ordnumber quonumber
-    transdate name serialnumber deliverydate ean
+    transdate name serialnumber deliverydate ean projectnumber projectdescription
   );
 
   my @includeable_custom_variables = grep { $_->{includeable} } @{ $cvar_configs };
index dbefff3..e45faba 100644 (file)
@@ -1584,6 +1584,7 @@ sub print_form {
     media     => $form->{media},
     extension => $extension,
     printer   => SL::DB::Manager::Printer->find_by_or_create(id => $form->{printer_id}),
+    today     => DateTime->today,
   };
 
   $form->parse_template(\%myconfig);
index 489a6d9..bcbf107 100644 (file)
@@ -387,7 +387,6 @@ sub form_footer {
   $main::auth->assert('invoice_edit');
 
   $form->{invtotal}    = $form->{invsubtotal};
-  $form->{oldinvtotal} = $form->{invtotal};
 
   # note rows
   $form->{rows} = max 2,
@@ -447,6 +446,8 @@ sub form_footer {
     $totalpaid += $form->{"paid_$i"};
   }
 
+  $form->{oldinvtotal} = $form->{invtotal};
+
   print $form->parse_html_template('is/form_footer', {
     is_type_credit_note => ($form->{type} eq "credit_note"),
     totalpaid           => $totalpaid,
index e9e7ac4..25d7d79 100644 (file)
@@ -126,7 +126,7 @@ sub print_menu {
 
       my $h = print_menu($menu, "${parent}${item}", $depth * 1 + 1)."\n";
       if (!$parent) {
-        $html .= qq|<ul><li><h2>${menu_text}</h2><ul>${h}</ul></li></ul>\n|;
+        $html .= qq|<ul><li><h2> ${menu_text} </h2><ul>${h}</ul></li></ul>\n|;
       } else {
         $html .= qq|<li><div class="x">${menu_text}</div><ul>${h}</ul></li>\n|;
       }
index dd1d8e2..40a9b4e 100644 (file)
@@ -240,7 +240,7 @@ sub order_links {
   $form->{"$form->{vc}_id"} ||= $form->{"all_$form->{vc}"}->[0]->{id} if $form->{"all_$form->{vc}"};
 
   $form->backup_vars(qw(payment_id language_id taxzone_id salesman_id taxincluded cp_id intnotes shipto_id currency));
-  $form->{shipto} = 1 if $form->{id};
+  $form->{shipto} = 1 if $form->{id} || $form->{convert_from_oe_ids};
 
   # get customer / vendor
   IR->get_vendor(\%myconfig, \%$form)   if $form->{type} =~ /(purchase_order|request_quotation)/;
index aaf47ff..a339cd4 100644 (file)
@@ -644,7 +644,7 @@ sub generate_trial_balance {
   my @options;
 
 
-  $form->{template_fromto} = $locale->date(\%myconfig, $form->{fromdate}, 0) . "&nbsp; - &nbsp;" . $locale->date(\%myconfig, $form->{todate}, 0);
+  $form->{template_fromto} = $locale->date(\%myconfig, $form->{fromdate}, 0) . " - " . $locale->date(\%myconfig, $form->{todate}, 0);
 
   $form->{print_date} = $locale->text('Create Date') . " " . $locale->date(\%myconfig, $form->current_date(\%myconfig), 0);
   push (@options, $form->{print_date});
@@ -655,6 +655,28 @@ sub generate_trial_balance {
 
   $form->{template_to} = $locale->date(\%myconfig, $form->{todate}, 0);
 
+  my @custom_headers = ([
+    { text => $::locale->text('Account'),          rowspan => 2, },
+    { text => $::locale->text('Description'),      rowspan => 2, },
+    { text => $::locale->text('Last Transaction'), rowspan => 2, },
+    { text => $::locale->text('Starting Balance'), colspan => 2, },
+    { text => $::locale->text('Sum for')   . " $form->{template_fromto}", colspan => 2, },
+    { text => $::locale->text('Sum per')   . " $form->{template_to}",     colspan => 2, },
+    { text => $::locale->text('Saldo per') . " $form->{template_to}",     colspan => 2, },
+  ], [
+    { text => '', },
+    { text => '', },
+    { text => '', },
+    { text => $::locale->text('Assets'), },
+    { text => $::locale->text('Equity'), },
+    { text => $::locale->text('Debit'),  },
+    { text => $::locale->text('Credit'), },
+    { text => $::locale->text('Debit'),  },
+    { text => $::locale->text('Credit'), },
+    { text => $::locale->text('Debit'),  },
+    { text => $::locale->text('Credit'), },
+  ]);
+
   $report->set_options('output_format'        => 'HTML',
                        'top_info_text'        => join("\n", @options),
                        'title'                => $form->{title},
@@ -662,6 +684,7 @@ sub generate_trial_balance {
                        'html_template'        => 'rp/html_report_susa',
                        'pdf_template'         => 'rp/html_report_susa',
     );
+  $report->set_custom_headers(@custom_headers);
   $report->set_options_from_form();
   $locale->set_numberformat_wo_thousands_separator(\%myconfig) if lc($report->{options}->{output_format}) eq 'csv';
 
index a3c4642..61ed296 100644 (file)
@@ -1222,11 +1222,7 @@ sub config_step2 {
     create_steuernummer();
 
     # rebuild elster_amt
-    my $amt = '';
-    foreach $amt (keys %{ $elster_init{ $form->{elsterland} } }) {
-      $elster_amt = $amt
-        if ($elster_init{ $form->{elsterland}{$amt} eq $form->{elsterFFFF} });
-    }
+    my $amt = $elster_init{$elsterFFFF};
 
     # load the predefined hash data into the FA_* Vars
     my @variables = qw(FA_Name FA_Strasse FA_PLZ FA_Ort
index 2b49ba0..62be1d1 100644 (file)
@@ -824,7 +824,7 @@ sub generate_report {
   my @columns = qw(warehousedescription bindescription partnumber partdescription chargenumber bestbefore qty stock_value);
 
   # filter stuff
-  map { $filter{$_} = $form->{$_} if ($form->{$_}) } qw(warehouse_id bin_id partnumber description chargenumber bestbefore);
+  map { $filter{$_} = $form->{$_} if ($form->{$_}) } qw(warehouse_id bin_id partnumber description chargenumber bestbefore date);
 
   $filter{qty_op} = WH->convert_qty_op($form->{qty_op});
   if ($filter{qty_op}) {
index 5570baf..387eff2 100644 (file)
@@ -78,6 +78,14 @@ webdav = 0
 vertreter = 0
 
 # Show fields used for the best before date
+# ATTENTION! If you enabled this feature you can not simply turn it off again
+# without taking care that best_before fields are emptied in the database.
+# This can be done with the following query:
+#
+#  UPDATE inventory SET bestbefore = NULL;
+#
+# Any stock contents containing a best before date will be impossible to stock
+# out otherwise.
 show_best_before = 0
 
 ## Pictures for parts
index 2fdd7ce..b59efc2 100644 (file)
@@ -26,11 +26,11 @@ padding:1px 0 1px 3px;
     content:" ";
 }
 #menu h2:after {
-    content:" "; 
+    content:" ";
 }
 #menu h2 {
 color:#fff;
-padding:2 15px
+padding:2px 10px;
 }
 
 #menu a, #menu a:visited, #menu div.x, #menu div.x:visited {
index 4c2d8d2..c19e8c4 100644 (file)
@@ -84,9 +84,9 @@
   - Bugfix 1588: Einzelteile eines Erzeugnisses von Verkaufsbericht ausnehmen
   - Bugfix 1756: Ertrag in Bruttorechnungen korrekt berechnen
   - Bugfix 1760 - 1760: Bei einem Lieferschein wird die Abteilung nicht mitgespeichert
-
-
-
+  - Bugfix 1752: Rechnung -> Druckvorschau ignoriert Änderung des Steuersatz beim Beleg
+  - Bugfix 1708: Fehlender Übertrag der Lieferadresse von Angebot -> Auftragsbestätigung
+  - Bugfix 1648: bebuchte Konten sollten nicht in Überschriften umgewandelt werden können
 
 
 2011-06-15 - Release 2.6.3
index ebc2f84..a780387 100644 (file)
@@ -901,6 +901,7 @@ $self->{texts} = {
   'ID-Nummer'                   => 'ID-Nummer (intern)',
   'II'                          => 'II',
   'III'                         => 'III',
+  'IMPORTANT NOTE: You cannot safely change currencies, IF you have already booking entries!' => 'WICHTIGER HINWEIS: Falls schon Buchungen im Mandanten vorhanden sind, kann man nicht mehr UNKRITISCH neue oder andere Währungen konfigurieren!',
   'IV'                          => 'IV',
   'If the article type is set to \'mixed\' then a column called \'type\' must be present.' => 'Falls der Artikeltyp auf \'gemischt\' gestellt wird, muss eine Spalte namens \'type\' vorhanden sein.',
   'If the automatic creation of invoices for fees and interest is switched on for a dunning level then the following accounts will be used for the invoice.' => 'Wenn das automatische Erstellen einer Rechnung &uuml;ber Mahngeb&uuml;hren und Zinsen f&uuml;r ein Mahnlevel aktiviert ist, so werden die folgenden Konten f&uuml;r die Rechnung benutzt.',
@@ -1406,6 +1407,7 @@ $self->{texts} = {
   'Proforma Invoice'            => 'Proformarechnung',
   'Program'                     => 'Programm',
   'Project'                     => 'Projekt',
+  'Project Description'         => 'Projektbeschreibung',
   'Project Number'              => 'Projektnummer',
   'Project Number missing!'     => 'Projektnummer fehlt!',
   'Project Numbers'             => 'Projektnummern',
@@ -1633,6 +1635,7 @@ $self->{texts} = {
   'Source bank account'         => 'Quellkonto',
   'Source bin'                  => 'Quelllagerplatz',
   'Space'                       => 'Leerzeichen',
+  'Split entry detected. The values you have entered will result in an entry with more than one position on both debit and credit. Due to known problems involving accounting software Lx-Office does not allow these.' => 'Splitbuchung! Die eingebenen Werte würden eine Buchung auslösen, die jeweils mehr als eine Position auf Soll und Haben hätte. Um Kompatibilität mit DATEV zu gewährleisten erlaubt Lx-Office keine Splitbuchungen.',
   'Spoolfile'                   => 'Druckdatei',
   'Start Dunning Process'       => 'Mahnprozess starten',
   'Start analysis'              => 'Analyse beginnen',
@@ -1653,6 +1656,7 @@ $self->{texts} = {
   'Step 3 of 3: Default units'  => 'Schritt 3 von 3: Standardeinheiten',
   'Steuersatz'                  => 'Steuersatz',
   'Stock'                       => 'Einlagern',
+  'Stock Qty for Date'          => 'Lagerbestand am',
   'Stock value'                 => 'Bestandswert',
   'Stocked Qty'                 => 'Lagermenge',
   'Storno'                      => 'Storno',
index 939580e..30d2289 100644 (file)
@@ -1,5 +1,6 @@
 -- @tag: employee_deleted
 -- @description: Benutzer löschbar machen
 -- @depends: release_2_6_3
+-- @charset: utf-8
 
 ALTER TABLE employee ADD COLUMN deleted BOOLEAN DEFAULT 'f';
diff --git a/sql/Pg-upgrade2/ustva_2010_fixes.sql b/sql/Pg-upgrade2/ustva_2010_fixes.sql
new file mode 100644 (file)
index 0000000..e24865d
--- /dev/null
@@ -0,0 +1,6 @@
+-- @tag: ustva_2010_fixes
+-- @description: Position 83 in der HTML USTVA muss auf 2 Stellen gerundet werden.
+-- @charset: utf-8
+-- @depends: release_2_6_3
+
+UPDATE tax.report_variables SET dec_places = '2' WHERE position = '83';
diff --git a/sql/Pg-upgrade2/warehouse_alter_chargenumber.sql b/sql/Pg-upgrade2/warehouse_alter_chargenumber.sql
new file mode 100644 (file)
index 0000000..725e374
--- /dev/null
@@ -0,0 +1,8 @@
+-- @tag: warehouse_alter_chargenumber
+-- @description: Chargennummber von NULL auf '' aktualisieren
+-- @depends: release_2_6_3
+-- @charset: utf-8
+UPDATE inventory set chargenumber='' where chargenumber IS NULL;
+ALTER TABLE inventory ALTER COLUMN chargenumber SET NOT NULL;
+ALTER TABLE inventory ALTER COLUMN chargenumber SET  default '';
+
diff --git a/templates/print/German/ustva-2010.tex b/templates/print/German/ustva-2010.tex
new file mode 100644 (file)
index 0000000..0192a08
--- /dev/null
@@ -0,0 +1,153 @@
+% German USTVA template for taxreports
+% Contributed by Marcus Habermehl
+% Based on template by Jacky und Stefan Tenne (German-ustva-2008.tex)
+%
+%
+\documentclass[twoside]{scrartcl}
+\usepackage{a4,german}
+\usepackage[frame]{xy}
+\usepackage[utf8]{inputenc}
+\usepackage[german]{babel}
+\usepackage{graphicx}
+\usepackage{tabularx}
+\usepackage{times, german}
+\usepackage{german}
+\setlength{\voffset}{-0.7cm} %hier wird die Höhenverschiebung
+\setlength{\hoffset}{-1cm}  %und hier die Verschiebung seitwärts
+\setlength{\topmargin}{0cm}
+\setlength{\headheight}{0cm}
+\setlength{\headsep}{0cm}
+\setlength{\topskip}{0pt}
+\setlength{\oddsidemargin}{0cm}
+\setlength{\evensidemargin}{0cm}
+\setlength{\textwidth}{20.9cm}
+\setlength{\textheight}{29.6cm}
+\setlength{\footskip}{-0cm}
+\setlength{\parindent}{1mm}
+
+\begin{document}
+
+\fontfamily{cmss}\fontshape{n}\large\selectfont
+\pagestyle{myheadings}
+\markboth{\protect\scalebox{1.045}[1.045]{\protect\includegraphics[viewport = 54 783 700 790,page=2]{ustva-2010.pdf}}}%Seite 2
+{\protect\scalebox{1.045}[1.045]{\protect\includegraphics[viewport = 70 700 700 790,page=1]{ustva-2010.pdf}}}%Seite 1
+\hspace{1mm}
+\begin{tabular}[b]{p{7mm}p{5cm}p{22.5mm}p{24mm}p{7mm}p{28mm}p{3mm}}
+\multicolumn{7}{c}{}\\[-2mm]
+ &  \multicolumn{6}{l}{<%steuernummer%>}\\
+\multicolumn{7}{c}{}\\[15mm]
+\multicolumn{2}{p{7.5cm}}{<%FA_Name%>} & & & & &\\[-4mm]
+\multicolumn{2}{p{7.5cm}}{}  & & & & &\\[3mm]
+\multicolumn{2}{p{7.5cm}}{<%FA_Strasse%>} & &<%0401%>&<%0407%>&&<%0441%>\\[1.2mm]
+\multicolumn{2}{p{7.5cm}}{} & &<%0402%>&<%0408%>&&<%0442%>\\[1.25mm]
+\multicolumn{2}{p{7.5cm}}{<%FA_PLZ%> <%FA_Ort%>} & &<%0403%>&<%0409%>&&<%0443%>\\[3mm]
+\multicolumn{2}{p{7.5cm}}{} & &<%0404%>&<%0410%>&&<%0444%>\\[1.25mm]
+\multicolumn{2}{p{7.5cm}}{} & &<%0405%>&<%0411%>&&\\[1.25mm]
+\multicolumn{2}{p{7.5cm}}{\small{<%company%>}} & &<%0406%>&<%0412%>&&\\[-1mm]
+\multicolumn{2}{p{7.5cm}}{\small{<%co_street%>}}& & & & &\\[-1mm]
+\multicolumn{2}{p{7.5cm}}{\small{<%co_city%>}}& & & &<%FA_10%> &\\[1mm]
+\multicolumn{2}{p{7.5cm}}{
+<%if tel%>
+\small{Tel: <%tel%>}~--~
+<%else%>
+\small{~}
+<%end tel%>
+<%if fax%>
+\small{Fax: <%fax%>}
+<%else%>
+\small{~}
+<%end fax%>
+}& & & & &\\[1.8mm]
+\multicolumn{2}{p{7.5cm}}{\small{<%email%>}}&~& & & &\\[-1mm]
+\end{tabular}\\[2.5mm]
+\begin{tabular}[b]{p{99mm}p{26.5mm}p{4.55mm}p{4mm}p{35mm}}
+&&&&\\[9.5mm]
+\multicolumn{2}{r}{<%41%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%44%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%49%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%43%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%48%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%81%>} & & \multicolumn{2}{r}{<%811%>}\\[1.8mm]
+\multicolumn{2}{r}{<%86%>} & & \multicolumn{2}{r}{<%861%>}\\[1.8mm]
+\multicolumn{2}{r}{<%35%>} & & \multicolumn{2}{r}{<%36%>}\\[1.8mm]
+\multicolumn{2}{r}{<%77%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%76%>} & & \multicolumn{2}{r}{<%80%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%91%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%89%>} & & \multicolumn{2}{r}{<%891%>}\\[1.8mm]
+\multicolumn{2}{r}{<%93%>} & & \multicolumn{2}{r}{<%931%>}\\[1.8mm]
+\multicolumn{2}{r}{<%95%>} & & \multicolumn{2}{r}{<%98%>}\\[1.8mm]
+\multicolumn{2}{r}{<%94%>} & & \multicolumn{2}{r}{<%96%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%42%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%60%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%21%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%45%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%Z43%>}\\
+\end{tabular}
+\newpage
+
+\vspace*{-9.5mm}\hspace{27mm}<%steuernummer%>\\[-2.7mm]
+\begin{tabular}[b]{p{99mm}p{25.2mm}p{2.55mm}p{10mm}p{32mm}}
+&&&&\\
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%Z45%>}\\[13.5mm]
+\multicolumn{2}{r}{<%46%>} & & \multicolumn{2}{r}{<%47%>}\\[1.8mm]
+\multicolumn{2}{r}{<%52%>} & & \multicolumn{2}{r}{<%53%>}\\[1.8mm]
+\multicolumn{2}{r}{<%73%>} & & \multicolumn{2}{r}{<%74%>}\\[1.8mm]
+\multicolumn{2}{r}{<%84%>} & & \multicolumn{2}{r}{<%85%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%65%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%Z53%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%66%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%61%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%62%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%67%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%63%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%64%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%59%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%Z62%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%69%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%39%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{\textbf{<%83%>}}\\[25.6mm]
+\end{tabular}\\[35mm]
+<%if FA_steuerberater%>
+\vspace{11mm}
+\begin{list}{}{
+\setlength{\leftmargin}{2mm}
+\setlength{\itemsep}{0mm}
+\setlength{\parsep}{0mm}
+%\setlength{\topsep}{0mm}
+%\setlength{\parskip}{0mm}
+%\setlength{\partopsep}{0mm}
+}
+\begin{small}
+\item <%FA_steuerberater_name%>
+\item <%FA_steuerberater_street%>
+\item <%FA_steuerberater_city%>
+\item Tel:~<%FA_steuerberater_tel%>
+\end{small}\\[15mm]
+\item  <%Datum_heute%>,
+\end{list}
+<%end FA_steuerberater%>
+<%if not FA_steuerberater%>
+\begin{list}{}{
+\setlength{\leftmargin}{2mm}
+\setlength{\itemsep}{0mm}
+\setlength{\parsep}{0mm}
+%\setlength{\topsep}{0mm}
+%\setlength{\parskip}{0mm}
+%\setlength{\partopsep}{0mm}
+}
+\begin{small}
+\item ~
+\item ~
+\item ~
+\item ~
+\end{small}\\[26mm]
+\item  <%Datum_heute%>,
+\end{list}
+<%end FA_steuerberater%>
+\end{document}
diff --git a/templates/print/German/ustva-2011.tex b/templates/print/German/ustva-2011.tex
new file mode 100644 (file)
index 0000000..0439373
--- /dev/null
@@ -0,0 +1,153 @@
+% German USTVA template for taxreports
+% Contributed by Marcus Habermehl
+% Based on template by Jacky und Stefan Tenne (German-ustva-2008.tex)
+%
+%
+\documentclass[twoside]{scrartcl}
+\usepackage{a4,german}
+\usepackage[frame]{xy}
+\usepackage[utf8]{inputenc}
+\usepackage[german]{babel}
+\usepackage{graphicx}
+\usepackage{tabularx}
+\usepackage{times, german}
+\usepackage{german}
+\setlength{\voffset}{-0.7cm} %hier wird die Höhenverschiebung
+\setlength{\hoffset}{-1cm}  %und hier die Verschiebung seitwärts
+\setlength{\topmargin}{0cm}
+\setlength{\headheight}{0cm}
+\setlength{\headsep}{0cm}
+\setlength{\topskip}{0pt}
+\setlength{\oddsidemargin}{0cm}
+\setlength{\evensidemargin}{0cm}
+\setlength{\textwidth}{20.9cm}
+\setlength{\textheight}{29.6cm}
+\setlength{\footskip}{-0cm}
+\setlength{\parindent}{1mm}
+
+\begin{document}
+
+\fontfamily{cmss}\fontshape{n}\large\selectfont
+\pagestyle{myheadings}
+\markboth{\protect\scalebox{1.045}[1.045]{\protect\includegraphics[viewport = 54 783 700 790,page=2]{ustva-2011.pdf}}}%Seite 2
+{\protect\scalebox{1.045}[1.045]{\protect\includegraphics[viewport = 70 700 700 790,page=1]{ustva-2011.pdf}}}%Seite 1
+\hspace{1mm}
+\begin{tabular}[b]{p{7mm}p{5cm}p{22.5mm}p{24mm}p{7mm}p{28mm}p{3mm}}
+\multicolumn{7}{c}{}\\[-2mm]
+ &  \multicolumn{6}{l}{<%steuernummer%>}\\
+\multicolumn{7}{c}{}\\[15mm]
+\multicolumn{2}{p{7.5cm}}{<%FA_Name%>} & & & & &\\[-4mm]
+\multicolumn{2}{p{7.5cm}}{}  & & & & &\\[3mm]
+\multicolumn{2}{p{7.5cm}}{<%FA_Strasse%>} & &<%0401%>&<%0407%>&&<%0441%>\\[1.2mm]
+\multicolumn{2}{p{7.5cm}}{} & &<%0402%>&<%0408%>&&<%0442%>\\[1.25mm]
+\multicolumn{2}{p{7.5cm}}{<%FA_PLZ%> <%FA_Ort%>} & &<%0403%>&<%0409%>&&<%0443%>\\[3mm]
+\multicolumn{2}{p{7.5cm}}{} & &<%0404%>&<%0410%>&&<%0444%>\\[1.25mm]
+\multicolumn{2}{p{7.5cm}}{} & &<%0405%>&<%0411%>&&\\[1.25mm]
+\multicolumn{2}{p{7.5cm}}{\small{<%company%>}} & &<%0406%>&<%0412%>&&\\[-1mm]
+\multicolumn{2}{p{7.5cm}}{\small{<%co_street%>}}& & & & &\\[-1mm]
+\multicolumn{2}{p{7.5cm}}{\small{<%co_city%>}}& & & &<%FA_10%> &\\[1mm]
+\multicolumn{2}{p{7.5cm}}{
+<%if tel%>
+\small{Tel: <%tel%>}~--~
+<%else%>
+\small{~}
+<%end tel%>
+<%if fax%>
+\small{Fax: <%fax%>}
+<%else%>
+\small{~}
+<%end fax%>
+}& & & & &\\[1.8mm]
+\multicolumn{2}{p{7.5cm}}{\small{<%email%>}}&~& & & &\\[-1mm]
+\end{tabular}\\[2.5mm]
+\begin{tabular}[b]{p{99mm}p{26.5mm}p{4.55mm}p{4mm}p{35mm}}
+&&&&\\[9.5mm]
+\multicolumn{2}{r}{<%41%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%44%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%49%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%43%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%48%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%81%>} & & \multicolumn{2}{r}{<%811%>}\\[1.8mm]
+\multicolumn{2}{r}{<%86%>} & & \multicolumn{2}{r}{<%861%>}\\[1.8mm]
+\multicolumn{2}{r}{<%35%>} & & \multicolumn{2}{r}{<%36%>}\\[1.8mm]
+\multicolumn{2}{r}{<%77%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%76%>} & & \multicolumn{2}{r}{<%80%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%91%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%89%>} & & \multicolumn{2}{r}{<%891%>}\\[1.8mm]
+\multicolumn{2}{r}{<%93%>} & & \multicolumn{2}{r}{<%931%>}\\[1.8mm]
+\multicolumn{2}{r}{<%95%>} & & \multicolumn{2}{r}{<%98%>}\\[1.8mm]
+\multicolumn{2}{r}{<%94%>} & & \multicolumn{2}{r}{<%96%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%42%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%60%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%21%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{<%45%>} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%Z43%>}\\
+\end{tabular}
+\newpage
+
+\vspace*{-9.5mm}\hspace{27mm}<%steuernummer%>\\[-2.7mm]
+\begin{tabular}[b]{p{99mm}p{25.2mm}p{2.55mm}p{10mm}p{32mm}}
+&&&&\\
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%Z45%>}\\[13.5mm]
+\multicolumn{2}{r}{<%46%>} & & \multicolumn{2}{r}{<%47%>}\\[1.8mm]
+\multicolumn{2}{r}{<%52%>} & & \multicolumn{2}{r}{<%53%>}\\[1.8mm]
+\multicolumn{2}{r}{<%73%>} & & \multicolumn{2}{r}{<%74%>}\\[1.8mm]
+\multicolumn{2}{r}{<%84%>} & & \multicolumn{2}{r}{<%85%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%65%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%Z53%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%66%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%61%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%62%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%67%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%63%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%64%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%59%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%Z62%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%69%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{<%39%>}\\[1.8mm]
+\multicolumn{2}{r}{} & & \multicolumn{2}{r}{\textbf{<%83%>}}\\[25.6mm]
+\end{tabular}\\[35mm]
+<%if FA_steuerberater%>
+\vspace{11mm}
+\begin{list}{}{
+\setlength{\leftmargin}{2mm}
+\setlength{\itemsep}{0mm}
+\setlength{\parsep}{0mm}
+%\setlength{\topsep}{0mm}
+%\setlength{\parskip}{0mm}
+%\setlength{\partopsep}{0mm}
+}
+\begin{small}
+\item <%FA_steuerberater_name%>
+\item <%FA_steuerberater_street%>
+\item <%FA_steuerberater_city%>
+\item Tel:~<%FA_steuerberater_tel%>
+\end{small}\\[15mm]
+\item  <%Datum_heute%>,
+\end{list}
+<%end FA_steuerberater%>
+<%if not FA_steuerberater%>
+\begin{list}{}{
+\setlength{\leftmargin}{2mm}
+\setlength{\itemsep}{0mm}
+\setlength{\parsep}{0mm}
+%\setlength{\topsep}{0mm}
+%\setlength{\parskip}{0mm}
+%\setlength{\partopsep}{0mm}
+}
+\begin{small}
+\item ~
+\item ~
+\item ~
+\item ~
+\end{small}\\[26mm]
+\item  <%Datum_heute%>,
+\end{list}
+<%end FA_steuerberater%>
+\end{document}
index bb8d484..10d9caf 100644 (file)
@@ -60,10 +60,25 @@ window.onload = function() {
 
         </label>
       </td>
-      <td><select name="charttype">[% select_charttype %]</select></td>
+      <td>
+[% IF AccountIsPosted %]
+        [% L.select_tag('dummy_charttype',
+                        L.options_for_select(all_charttypes,
+                                             title => 'name', value => 'value',
+                                             default => selected_charttype),
+                        disabled => '1') %]
+        [% L.hidden_tag('charttype', selected_charttype) %]
+[% ELSE %]
+        [% L.select_tag('charttype',
+                        L.options_for_select(all_charttypes,
+                                             title => 'name', value => 'value',
+                                             default => selected_charttype)) %]
+[% END %]
+      </td>
     </tr>
   </table>
 </fieldset>
+
 <fieldset class="DEPENDS ON charttype BEING A">
   <legend>[% 'Account Type' | $T8 %]</legend>
   <select name="category" id="AccountType" class="DEPENDS ON charttype BEING A">
@@ -73,12 +88,16 @@ window.onload = function() {
 [% IF ChartTypeIsAccount %]
 <fieldset class="DEPENDS ON charttype BEING A">
   <legend>[% 'Is this a summary account to record' | $T8 %]</legend>
-    <input name="AR" type="checkbox" class="checkbox" value="AR" [% HTML.escape(AR) %]>
-    &nbsp;[% 'AR' | $T8 %]
-    <input name="AP" type="checkbox" class="checkbox" value="AP" [% HTML.escape(AP) %]>
-    &nbsp;[% 'AP' | $T8 %]
-    <input name="IC" type="checkbox" class="checkbox" value="IC" [% HTML.escape(IC) %]>
-    &nbsp;[% 'Inventory' | $T8 %]
+    [% L.checkbox_tag('AR', value => 'AR', checked => AR, class => 'checkbox', disabled => AccountIsPosted) %] &nbsp;[% 'AR' | $T8 %]
+    [% L.checkbox_tag('AP', value => 'AP', checked => AP, class => 'checkbox', disabled => AccountIsPosted) %] &nbsp;[% 'AP' | $T8 %]
+    [% L.checkbox_tag('IC', value => 'IC', checked => IC, class => 'checkbox', disabled => AccountIsPosted) %] &nbsp;[% 'Inventory' | $T8 %]
+
+[% IF AccountIsPosted %]
+    [% IF AR %] [% L.hidden_tag('AR', 'AR') %] [% END %]
+    [% IF AP %] [% L.hidden_tag('AP', 'AP') %] [% END %]
+    [% IF IC %] [% L.hidden_tag('IC', 'IC') %] [% END %]
+[% END %]
+
 </fieldset>
 
 [% IF AccountIsPosted %]
index ed2921f..5b6d40a 100644 (file)
 
   <p>
    (1) [% 'Enter up to 3 letters separated by a colon (i.e CAD:USD:EUR) for your native and foreign currencies' | $T8 %]
+       [% 'IMPORTANT NOTE: You cannot safely change currencies, IF you have already booking entries!' | $T8 %]
   </p>
  </form>
 
index 18ef3d2..c679f0f 100644 (file)
@@ -92,6 +92,8 @@
         <label for="itemstatus_obsolete">[% 'Obsolete' | $T8 %]</label>
         <input name="itemstatus" id="itemstatus_orphaned" class="radio" type="radio" value="orphaned">
         <label for="itemstatus_orphaned">[% 'Orphaned' | $T8 %]</label>
+        <input name="itemstatus" id="itemstatus_all" class="radio" type="radio" value="">
+        <label for="itemstatus_all">[% 'All' | $T8 %]</label>
        </td>
       </tr>
 
            <input name="l_onhand" id="l_onhand" class="checkbox" type="checkbox" value="Y">
            <label for="l_onhand">[% 'Stocked Qty' | $T8 %]</label>
           </td>
+          <td>
+           <input name="l_projectnumber" id="l_projectnumber" class="checkbox" type="checkbox" value="Y">
+           <label for="l_projectnumber">[% 'Project Number' | $T8 %]</label>
+          </td>
+          <td>
+           <input name="l_projectdescription" id="l_projectdescription" class="checkbox" type="checkbox" value="Y">
+           <label for="l_projectdescription">[% 'Project Description' | $T8 %]</label>
+          </td>
          </tr>
 
          [% CUSTOM_VARIABLES_INCLUSION_CODE %]
index 77133a8..34b340c 100644 (file)
@@ -96,7 +96,7 @@
         <tr>
           <th align="right">[% 'Steuersatz' | $T8 %]</th>
           <td>
-            [% L.select_tag('taxzone_id', L.options_for_select(ALL_TAXZONES, default=taxzone_id, title='description'), readonly=(id ? 1 : 0), style='width: 250px') %]
+            [% L.select_tag('taxzone_id', L.options_for_select(ALL_TAXZONES, default=taxzone_id, title='description'), readonly=(id ? 1 : 0), style='width: 250px', onchange="document.getElementById('update_button').click();") %]
           </td>
   [%- IF id %]
           <input type='hidden' name='taxzone_id' value='[% taxzone_id %]'>
index affe4c2..a5cbe12 100644 (file)
@@ -1,4 +1,5 @@
 [%- USE T8 %]
+[%- USE L %]
 [% USE HTML %][% USE JavaScript %]<body onload="on_load();">
 
  <script type="text/javascript">
          </select>
         </td>
        </tr>
+        <th align="right" nowrap>[% 'Stock Qty for Date' | $T8 %]:</th>
+        <td>[% L.date_tag('date') %]</td>
+       <tr>
+       </tr>
       </table>
      </td>
     </tr>
diff --git a/users/ustva-2011.pdf b/users/ustva-2011.pdf
new file mode 100644 (file)
index 0000000..5978964
Binary files /dev/null and b/users/ustva-2011.pdf differ