]> wagnertech.de Git - mfinanz.git/commitdiff
Merge branch 'rb-wiederkehrende-rechnungen' into 263
authorMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 19 Jan 2011 10:08:32 +0000 (11:08 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 19 Jan 2011 10:08:32 +0000 (11:08 +0100)
1  2 
SL/IS.pm
bin/mozilla/oe.pl

diff --combined SL/IS.pm
index 666d8bc043c1e632c97d9c5a195ccae831eb666d,3556d4bb746ac075ca48ac51098a5482d6a2bf2a..7087c5aa07efbeec3195b20bfe8c8f7d6598a6a9
+++ b/SL/IS.pm
@@@ -963,10 -963,7 +963,7 @@@ sub post_invoice 
      $query = qq|UPDATE ar SET paid = ? WHERE id = ?|;
      do_query($form, $dbh, $query,  $form->{paid}, conv_i($form->{id}));
  
-     if (!$provided_dbh) {
-       $dbh->commit();
-       $dbh->disconnect();
-     }
+     $dbh->commit if !$provided_dbh;
  
      $main::lxdebug->leave_sub();
      return;
                                 'table'   => 'ar',);
  
    my $rc = 1;
-   if (!$provided_dbh) {
-     $dbh->commit();
-     $dbh->disconnect();
-   }
+   $dbh->commit if !$provided_dbh;
  
    $main::lxdebug->leave_sub();
  
@@@ -1379,7 -1373,7 +1373,7 @@@ sub delete_invoice 
  
    # Falls wir ein Storno haben, müssen zwei Felder in der stornierten Rechnung wieder
    # zurückgesetzt werden. Vgl:
-   #  id | storno | storno_id |  paid   |  amount   
+   #  id | storno | storno_id |  paid   |  amount
    #----+--------+-----------+---------+-----------
    # 18 | f      |           | 0.00000 | 119.00000
    # ZU:
@@@ -1997,10 -1991,6 +1991,10 @@@ sub get_pricegroups_for_parts 
      my ($price, $selectedpricegroup_id) = split(/--/, $form->{"sellprice_pg_$i"});
  
      my $pricegroup_old = $form->{"pricegroup_old_$i"};
 +
 +    # sellprice has format 13,0000 or 0,00000, can't check for 0 numerically
 +    my $sellprice = $form->{"sellprice_$i"};
 +    my $pricegroup_id = $form->{"pricegroup_id_$i"};
      $form->{"new_pricegroup_$i"} = $selectedpricegroup_id;
      $form->{"old_pricegroup_$i"} = $pricegroup_old;
  
        $pkr->{price} = $form->format_amount($myconfig, $pkr->{price}, 5);
  
        if ($selectedpricegroup_id eq undef) {
 -        if ($pkr->{pricegroup_id} eq $form->{customer_klass}) {
 -
 +        # new entries in article list, either old invoice was loaded (edit) or a new article was added
 +        # Case A: open old invoice, no pricegroup selected
 +        # Case B: add new article to invoice, no pricegroup selected
 +
 +        # to distinguish case A and B the variable pricegroup_id_$i is used
 +        # for new articles this variable isn't defined, for loaded articles it is
 +        # sellprice can't be used, as it already has 0,00 set
 +        
 +        if ($pkr->{pricegroup_id} eq $form->{"pricegroup_id_$i"} and defined $form->{"pricegroup_id_$i"}) {
 +          # Case A
            $pkr->{selected}  = ' selected';
  
 +        } elsif ($pkr->{pricegroup_id} eq $form->{customer_klass} 
 +                 and not defined $form->{"pricegroup_id_$i"} 
 +                 and $pkr->{price} != 0    # only use customer pricegroup price if it has a value, else use default_sellprice
 +                                           # for the case where pricegroup prices haven't been set
 +                ) {
 +          # Case B: use default pricegroup of customer
 +
 +          $pkr->{selected}  = ' selected'; # unless $form->{selected};
 +
            # no customer pricesgroup set
            if ($pkr->{price} == $pkr->{default_sellprice}) {
  
            } else {
  
  # this sub should not set anything and only return. --sschoeling, 20090506
 -#            $form->{"sellprice_$i"} = $pkr->{price};
 +# is this correct? put in again... -- grichardson 20110119
 +            $form->{"sellprice_$i"} = $pkr->{price};
            }
  
 -        } elsif ($pkr->{price} == $pkr->{default_sellprice}) {
 +        } elsif ($pkr->{price} == $pkr->{default_sellprice} and $pkr->{default_sellprice} != 0) {
            $pkr->{price}    = $form->{"sellprice_$i"};
            $pkr->{selected} = ' selected';
          }
 -      } else {
 +      }
 +
 +      # existing article: pricegroup or price changed
 +      if ($selectedpricegroup_id or $selectedpricegroup_id == 0) {
          if ($selectedpricegroup_id ne $pricegroup_old) {
 +          # pricegroup has changed
            if ($pkr->{pricegroup_id} eq $selectedpricegroup_id) {
              $pkr->{selected}  = ' selected';
            }
 -        } elsif (    (   $form->parse_amount($myconfig, $price_new)
 -                      != $form->parse_amount($myconfig, $form->{"sellprice_$i"}))
 -                 and ($price_new ne 0)) {
 +        } elsif (($price_new != $form->{"sellprice_$i"}) and ($price_new ne 0) and defined $price_new) {
 +          # sellprice has changed
 +          # when loading existing invoices $price_new is NULL
            if ($pkr->{pricegroup_id} == 0) {
              $pkr->{price}     = $form->{"sellprice_$i"};
              $pkr->{selected}  = ' selected';
            }
          } elsif ($pkr->{pricegroup_id} eq $selectedpricegroup_id) {
 +          # neither sellprice nor pricegroup changed
            $pkr->{selected}  = ' selected';
 -          if (    ($pkr->{pricegroup_id} == 0)
 -              and ($pkr->{price} == $form->{"sellprice_$i"})) {
 +          if (    ($pkr->{pricegroup_id} == 0) and ($pkr->{price} == $form->{"sellprice_$i"})) {
              # $pkr->{price}                         = $form->{"sellprice_$i"};
            } else {
              $pkr->{price} = $form->{"sellprice_$i"};
diff --combined bin/mozilla/oe.pl
index 0e469d8d3f8dee1c56aff4eaef9bbf630516925d,2f63157c98dcbb524d30e2dba5c5ee86960e7c41..d70ee6fc71d5175473b936e763b6fa560b283043
@@@ -41,6 -41,7 +41,7 @@@ use SL::IS
  use SL::MoreCommon qw(ary_diff);
  use SL::PE;
  use SL::ReportGenerator;
+ use List::MoreUtils qw(any none);
  use List::Util qw(max reduce sum);
  use Data::Dumper;
  
@@@ -396,6 -397,16 +397,16 @@@ sub form_header 
    $onload .= qq|;setupPoints('|.   $myconfig{numberformat} .qq|', '|. $locale->text("wrongformat") .qq|')|;
    $TMPL_VAR{onload} = $onload;
  
+   if ($form->{type} eq 'sales_order') {
+     if (!$form->{periodic_invoices_config}) {
+       $form->{periodic_invoices_status} = $locale->text('not configured');
+     } else {
+       my $config                        = YAML::Load($form->{periodic_invoices_config});
+       $form->{periodic_invoices_status} = $config->{active} ? $locale->text('active') : $locale->text('inactive');
+     }
+   }
    $form->{javascript} .= qq|<script type="text/javascript" src="js/show_form_details.js"></script>|;
    $form->{javascript} .= qq|<script type="text/javascript" src="js/show_history.js"></script>|;
    $form->{javascript} .= qq|<script type="text/javascript" src="js/show_vc_details.js"></script>|;
@@@ -747,7 -758,8 +758,8 @@@ sub orders 
      "salesman",
      "shipvia",                 "globalprojectnumber",
      "transaction_description", "open",
-     "delivered", "marge_total", "marge_percent",
+     "delivered",               "periodic_invoices",
+     "marge_total",             "marge_percent",
      "vcnumber",                "ustid",
      "country",
    );
      unshift @columns, "ids";
    }
  
-   $form->{l_open}      = $form->{l_closed} = "Y" if ($form->{open}      && $form->{closed});
-   $form->{l_delivered} = "Y"                     if ($form->{delivered} && $form->{notdelivered});
+   $form->{l_open}              = $form->{l_closed} = "Y" if ($form->{open}      && $form->{closed});
+   $form->{l_delivered}         = "Y"                     if ($form->{delivered} && $form->{notdelivered});
+   $form->{l_periodic_invoices} = "Y"                     if ($form->{periodic_invoices_active} && $form->{periodic_invoices_inactive});
  
    my $attachment_basename;
    if ($form->{vc} eq 'vendor') {
    my @hidden_variables = map { "l_${_}" } @columns;
    push @hidden_variables, "l_subtotal", $form->{vc}, qw(l_closed l_notdelivered open closed delivered notdelivered ordnumber quonumber
                                                          transaction_description transdatefrom transdateto type vc employee_id salesman_id
-                                                         reqdatefrom reqdateto projectnumber project_id);
+                                                         reqdatefrom reqdateto projectnumber project_id periodic_invoices_active periodic_invoices_inactive);
  
    my $href = build_std_url('action=orders', grep { $form->{$_} } @hidden_variables);
  
      'vcnumber'                => { 'text' => $form->{vc} eq 'customer' ? $locale->text('Customer Number') : $locale->text('Vendor Number'), },
      'country'                 => { 'text' => $locale->text('Country'), },
      'ustid'                   => { 'text' => $locale->text('USt-IdNr.'), },
+     'periodic_invoices'       => { 'text' => $locale->text('Per. Inv.'), },
    );
  
    foreach my $name (qw(id transdate reqdate quonumber ordnumber name employee salesman shipvia transaction_description)) {
    push @options, $locale->text('Closed')                                                                  if $form->{closed};
    push @options, $locale->text('Delivered')                                                               if $form->{delivered};
    push @options, $locale->text('Not delivered')                                                           if $form->{notdelivered};
+   push @options, $locale->text('Periodic invoices active')                                                if $form->{periodic_invoices_actibe};
  
    $report->set_options('top_info_text'        => join("\n", @options),
                         'raw_top_info_text'    => $form->parse_html_template('oe/orders_top'),
    foreach my $oe (@{ $form->{OE} }) {
      map { $oe->{$_} *= $oe->{exchangerate} } @subtotal_columns;
  
-     $oe->{tax}       = $oe->{amount} - $oe->{netamount};
-     $oe->{open}      = $oe->{closed}    ? $locale->text('No')  : $locale->text('Yes');
-     $oe->{delivered} = $oe->{delivered} ? $locale->text('Yes') : $locale->text('No');
+     $oe->{tax}               = $oe->{amount} - $oe->{netamount};
+     $oe->{open}              = $oe->{closed}            ? $locale->text('No')  : $locale->text('Yes');
+     $oe->{delivered}         = $oe->{delivered}         ? $locale->text('Yes') : $locale->text('No');
+     $oe->{periodic_invoices} = $oe->{periodic_invoices} ? $locale->text('On')  : $locale->text('Off');
  
      map { $subtotals{$_} += $oe->{$_};
            $totals{$_}    += $oe->{$_} } @subtotal_columns;
@@@ -1419,10 -1435,6 +1435,10 @@@ sub invoice 
  
    }
  
 +  #  show pricegroup in newly loaded invoice when creating invoice from quotation/order
 +  IS->get_pricegroups_for_parts(\%myconfig, \%$form);
 +  set_pricegroup($_) for 1 .. $form->{rowcount};
 +
    &display_form;
  
    $main::lxdebug->leave_sub();
@@@ -1940,6 -1952,69 +1956,69 @@@ sub report_for_todo_list 
    return $content;
  }
  
+ sub edit_periodic_invoices_config {
+   $::lxdebug->enter_sub();
+   $::form->{type} = 'sales_order';
+   check_oe_access();
+   my $config;
+   $config = YAML::Load($::form->{periodic_invoices_config}) if $::form->{periodic_invoices_config};
+   if ('HASH' ne ref $config) {
+     $config =  { periodicity             => 'y',
+                  start_date_as_date      => $::form->{transdate},
+                  extend_automatically_by => 12,
+                  active                  => 1,
+                };
+   }
+   $config->{periodicity} = 'm' if none { $_ eq $config->{periodicity} } qw(m q y);
+   $::form->get_lists(printers => "ALL_PRINTERS",
+                      charts   => { key       => 'ALL_CHARTS',
+                                    transdate => 'current_date' });
+   $::form->{AR}    = [ grep { $_->{link} =~ m/(?:^|:)AR(?::|$)/ } @{ $::form->{ALL_CHARTS} } ];
+   $::form->{title} = $::locale->text('Edit the configuration for periodic invoices');
+   $::form->header();
+   print $::form->parse_html_template('oe/edit_periodic_invoices_config', $config);
+   $::lxdebug->leave_sub();
+ }
+ sub save_periodic_invoices_config {
+   $::lxdebug->enter_sub();
+   $::form->{type} = 'sales_order';
+   check_oe_access();
+   $::form->isblank('start_date_as_date', $::locale->text('The start date is missing.'));
+   my $config = { active                  => $::form->{active}     ? 1 : 0,
+                  terminated              => $::form->{terminated} ? 1 : 0,
+                  periodicity             => (any { $_ eq $::form->{periodicity} } qw(m q y)) ? $::form->{periodicity} : 'm',
+                  start_date_as_date      => $::form->{start_date_as_date},
+                  end_date_as_date        => $::form->{end_date_as_date},
+                  print                   => $::form->{print} ? 1 : 0,
+                  printer_id              => $::form->{print} ? $::form->{printer_id} * 1 : undef,
+                  copies                  => $::form->{copies} * 1 ? $::form->{copies} : 1,
+                  extend_automatically_by => $::form->{extend_automatically_by} * 1 || undef,
+                  ar_chart_id             => $::form->{ar_chart_id} * 1,
+                };
+   $::form->{periodic_invoices_config} = YAML::Dump($config);
+   $::form->{title} = $::locale->text('Edit the configuration for periodic invoices');
+   $::form->header;
+   print $::form->parse_html_template('oe/save_periodic_invoices_config', $config);
+   $::lxdebug->leave_sub();
+ }
  sub dispatcher {
    my $form     = $main::form;
    my $locale   = $main::locale;