]> wagnertech.de Git - kivitendo-erp.git/blobdiff - bin/mozilla/rp.pl
Erfolgsrechnung 1st draft
[kivitendo-erp.git] / bin / mozilla / rp.pl
index c3a13dac3e62a395e055d346335daf63a002a87e..6672be75e30663e40ff20afbe0d1005a89fa9e4d 100644 (file)
@@ -37,7 +37,9 @@
 
 use POSIX qw(strftime);
 
+use SL::DB::Default;
 use SL::DB::Project;
+use SL::DB::Customer;
 use SL::PE;
 use SL::RP;
 use SL::Iconv;
@@ -99,15 +101,16 @@ use strict;
 # $form->parse_html_template('rp/html_report_susa')
 
 my $rp_access_map = {
-  'projects'         => 'report',
-  'ar_aging'         => 'general_ledger',
-  'ap_aging'         => 'general_ledger',
-  'receipts'         => 'cash',
-  'payments'         => 'cash',
-  'trial_balance'    => 'report',
-  'income_statement' => 'report',
-  'bwa'              => 'report',
-  'balance_sheet'    => 'report',
+  'projects'           => 'report',
+  'ar_aging'           => 'general_ledger',
+  'ap_aging'           => 'general_ledger',
+  'receipts'           => 'cash',
+  'payments'           => 'cash',
+  'trial_balance'      => 'report',
+  'income_statement'   => 'report',
+  'income_statement_ch'=> 'report',
+  'bwa'                => 'report',
+  'balance_sheet'      => 'report',
 };
 
 sub check_rp_access {
@@ -127,6 +130,7 @@ sub report {
   my %title = (
     balance_sheet        => $::locale->text('Balance Sheet'),
     income_statement     => $::locale->text('Income Statement'),
+    income_statement_ch     => ('Erfolgsrechnung'),
     trial_balance        => $::locale->text('Trial Balance'),
     ar_aging             => $::locale->text('Search AR Aging'),
     ap_aging             => $::locale->text('Search AP Aging'),
@@ -139,6 +143,7 @@ sub report {
   );
 
   $::form->{title} = $title{$::form->{report}};
+  $::request->{layout}->add_javascripts('autocomplete_customer.js');
 
   # get departments
   $::form->all_departments(\%::myconfig);
@@ -149,13 +154,14 @@ sub report {
 
   $::form->get_lists("projects" => { "key" => "ALL_PROJECTS", "all" => 1 });
 
-  my $is_projects         = $::form->{report} eq "projects";
-  my $is_income_statement = $::form->{report} eq "income_statement";
-  my $is_bwa              = $::form->{report} eq "bwa";
-  my $is_balance_sheet    = $::form->{report} eq "balance_sheet";
-  my $is_trial_balance    = $::form->{report} eq "trial_balance";
-  my $is_aging            = $::form->{report} =~ /^a[rp]_aging$/;
-  my $is_payments         = $::form->{report} =~ /(receipts|payments)$/;
+  my $is_projects            = $::form->{report} eq "projects";
+  my $is_income_statement    = $::form->{report} eq "income_statement";
+  my $is_income_statement_ch = $::form->{report} eq "income_statement_ch";
+  my $is_bwa                 = $::form->{report} eq "bwa";
+  my $is_balance_sheet       = $::form->{report} eq "balance_sheet";
+  my $is_trial_balance       = $::form->{report} eq "trial_balance";
+  my $is_aging               = $::form->{report} =~ /^a[rp]_aging$/;
+  my $is_payments            = $::form->{report} =~ /(receipts|payments)$/;
 
   my ($label, $nextsub, $vc);
   if ($is_aging) {
@@ -169,8 +175,8 @@ sub report {
     $::form->all_vc(\%::myconfig, $::form->{vc}, $is_sales ? "AR" : "AP");
     $vc .= "<option>$_->{name}--$_->{id}\n" for @{ $::form->{"all_$::form->{vc}"} };
     $vc = ($vc)
-        ? qq|<select name=$::form->{vc}><option>\n$vc</select>|
-        : qq|<input name=$::form->{vc} size=35>|;
+        ? qq|<select name=$::form->{vc} class="initial_focus"><option>\n$vc</select>|
+        : qq|<input name=$::form->{vc} size=35 class="initial_focus">|;
   }
 
   my ($selection, $paymentaccounts);
@@ -188,22 +194,23 @@ sub report {
 
   $::form->header;
   print $::form->parse_html_template('rp/report', {
-    paymentaccounts     => $paymentaccounts,
-    selection           => $selection,
-    is_aging            => $is_aging,
-    vc                  => $vc,
-    label               => $label,
-    year                => DateTime->today->year,
-    today               => DateTime->today,
-    nextsub             => $nextsub,
-    accrual             => $::instance_conf->get_accounting_method ne 'cash',
-    cash                => $::instance_conf->get_accounting_method eq 'cash',
-    is_payments         => $is_payments,
-    is_trial_balance    => $is_trial_balance,
-    is_balance_sheet    => $is_balance_sheet,
-    is_bwa              => $is_bwa,
-    is_income_statement => $is_income_statement,
-    is_projects         => $is_projects,
+    paymentaccounts        => $paymentaccounts,
+    selection              => $selection,
+    is_aging               => $is_aging,
+    vc                     => $vc,
+    label                  => $label,
+    year                   => DateTime->today->year,
+    today                  => DateTime->today,
+    nextsub                => $nextsub,
+    accrual                => $::instance_conf->get_accounting_method ne 'cash',
+    cash                   => $::instance_conf->get_accounting_method eq 'cash',
+    is_payments            => $is_payments,
+    is_trial_balance       => $is_trial_balance,
+    is_balance_sheet       => $is_balance_sheet,
+    is_bwa                 => $is_bwa,
+    is_income_statement    => $is_income_statement,
+    is_income_statement_ch => $is_income_statement_ch,
+    is_projects            => $is_projects,
   });
 
   $::lxdebug->leave_sub;
@@ -370,19 +377,199 @@ sub generate_income_statement {
       . qq| $longcomparetodate|;
   }
 
-  # setup variables for the form
-  my @a = qw(company address businessnumber);
-  map { $form->{$_} = $myconfig{$_} } @a;
+  if ( $::instance_conf->get_profit_determination eq 'balance' ) {
+    $form->{title} = $locale->text('Income Statement');
+  } elsif ( $::instance_conf->get_profit_determination eq 'income' ) {
+    $form->{title} = $locale->text('Net Income Statement');
+  } else {
+    $form->{title} = "";
+  };
+
+  if ( $form->{method} eq 'cash' ) {
+    $form->{accounting_method} = $locale->text('Cash accounting');
+  } elsif ( $form->{method} eq 'accrual' ) {
+    $form->{accounting_method} = $locale->text('Accrual accounting');
+  } else {
+    $form->{accounting_method} = "";
+  };
+
+  $form->{report_date} = $locale->text('Report date') . ": " . $form->current_date;
+
+  $form->header;
+  print $form->parse_html_template('rp/income_statement');
+
+  $main::lxdebug->leave_sub();
+}
+
+sub generate_income_statement_ch {
+  $main::lxdebug->enter_sub();
+
+  $main::auth->assert('report');
+
+  my $form     = $main::form;
+  my %myconfig = %main::myconfig;
+  my $locale   = $main::locale;
+
+  my $defaults = SL::DB::Default->get;
+  $form->error($::locale->text('No print templates have been created for this client yet. Please do so in the client configuration.')) if !$defaults->templates;
+  $form->{templates} = $defaults->templates;
+
+  $form->{padding} = "&nbsp;&nbsp;";
+  $form->{bold}    = "<b>";
+  $form->{endbold} = "</b>";
+  $form->{br}      = "<br>";
 
-  $form->{templates} = $myconfig{templates};
+  if ($form->{reporttype} eq "custom") {
 
-  $form->{IN} = "income_statement.html";
+    #forgotten the year --> thisyear
+    if ($form->{year} !~ m/^\d\d\d\d$/) {
+      $locale->date(\%myconfig, $form->current_date(\%myconfig), 0) =~
+        /(\d\d\d\d)/;
+      $form->{year} = $1;
+    }
+
+    #yearly report
+    if ($form->{duetyp} eq "13") {
+      $form->{fromdate} = "1.1.$form->{year}";
+      $form->{todate}   = "31.12.$form->{year}";
+    }
+   #Quater reports
+    if ($form->{duetyp} eq "A") {
+      $form->{fromdate} = "1.1.$form->{year}";
+      $form->{todate}   = "31.3.$form->{year}";
+    }
+    if ($form->{duetyp} eq "B") {
+      $form->{fromdate} = "1.4.$form->{year}";
+      $form->{todate}   = "30.6.$form->{year}";
+    }
+    if ($form->{duetyp} eq "C") {
+      $form->{fromdate} = "1.7.$form->{year}";
+      $form->{todate}   = "30.9.$form->{year}";
+    }
+    if ($form->{duetyp} eq "D") {
+      $form->{fromdate} = "1.10.$form->{year}";
+      $form->{todate}   = "31.12.$form->{year}";
+    }
+  #Monthly reports
+  SWITCH: {
+      $form->{duetyp} eq "1" && do {
+        $form->{fromdate} = "1.1.$form->{year}";
+        $form->{todate}   = "31.1.$form->{year}";
+        last SWITCH;
+      };
+      $form->{duetyp} eq "2" && do {
+        $form->{fromdate} = "1.2.$form->{year}";
+
+        #this works from 1901 to 2099, 1900 and 2100 fail.
+        my $leap = ($form->{year} % 4 == 0) ? "29" : "28";
+        $form->{todate} = "$leap.2.$form->{year}";
+        last SWITCH;
+      };
+      $form->{duetyp} eq "3" && do {
+        $form->{fromdate} = "1.3.$form->{year}";
+        $form->{todate}   = "31.3.$form->{year}";
+        last SWITCH;
+      };
+      $form->{duetyp} eq "4" && do {
+        $form->{fromdate} = "1.4.$form->{year}";
+        $form->{todate}   = "30.4.$form->{year}";
+        last SWITCH;
+      };
+      $form->{duetyp} eq "5" && do {
+        $form->{fromdate} = "1.5.$form->{year}";
+        $form->{todate}   = "31.5.$form->{year}";
+        last SWITCH;
+      };
+      $form->{duetyp} eq "6" && do {
+        $form->{fromdate} = "1.6.$form->{year}";
+        $form->{todate}   = "30.6.$form->{year}";
+        last SWITCH;
+      };
+      $form->{duetyp} eq "7" && do {
+        $form->{fromdate} = "1.7.$form->{year}";
+        $form->{todate}   = "31.7.$form->{year}";
+        last SWITCH;
+      };
+    $form->{duetyp} eq "8" && do {
+        $form->{fromdate} = "1.8.$form->{year}";
+        $form->{todate}   = "31.8.$form->{year}";
+        last SWITCH;
+      };
+      $form->{duetyp} eq "9" && do {
+        $form->{fromdate} = "1.9.$form->{year}";
+        $form->{todate}   = "30.9.$form->{year}";
+        last SWITCH;
+      };
+      $form->{duetyp} eq "10" && do {
+        $form->{fromdate} = "1.10.$form->{year}";
+        $form->{todate}   = "31.10.$form->{year}";
+        last SWITCH;
+      };
+      $form->{duetyp} eq "11" && do {
+        $form->{fromdate} = "1.11.$form->{year}";
+        $form->{todate}   = "30.11.$form->{year}";
+        last SWITCH;
+      };
+      $form->{duetyp} eq "12" && do {
+        $form->{fromdate} = "1.12.$form->{year}";
+        $form->{todate}   = "31.12.$form->{year}";
+        last SWITCH;
+      };
+    }
+    hotfix_reformat_date();
+  } # Ende Bericht für vorgewählten Zeitraum (warum auch immer die Prüfung (custom eq true) ist ...
+
+   RP->income_statement_ch(\%myconfig, \%$form);
+
+  ($form->{department}) = split /--/, $form->{department};
+
+  $form->{period} =
+    $locale->date(\%myconfig, $form->current_date(\%myconfig), 1);
+  $form->{todate} = $form->current_date(\%myconfig) unless $form->{todate};
+
+  # if there are any dates construct a where
+  if ($form->{fromdate} || $form->{todate}) {
+
+    unless ($form->{todate}) {
+      $form->{todate} = $form->current_date(\%myconfig);
+    }
+
+    my $longtodate  = $locale->date(\%myconfig, $form->{todate}, 1);
+    my $shorttodate = $locale->date(\%myconfig, $form->{todate}, 0);
+
+    my $longfromdate  = $locale->date(\%myconfig, $form->{fromdate}, 1);
+    my $shortfromdate = $locale->date(\%myconfig, $form->{fromdate}, 0);
+
+    $form->{this_period} = "$shortfromdate\n$shorttodate";
+    $form->{period}      =
+        $locale->text('for Period')
+      . qq|\n$longfromdate |
+      . $locale->text('Bis')
+      . qq| $longtodate|;
+  }
+
+  if ($form->{comparefromdate} || $form->{comparetodate}) {
+    my $longcomparefromdate = $locale->date(\%myconfig, $form->{comparefromdate}, 1);
+    my $shortcomparefromdate = $locale->date(\%myconfig, $form->{comparefromdate}, 0);
+
+    my $longcomparetodate  = $locale->date(\%myconfig, $form->{comparetodate}, 1);
+    my $shortcomparetodate = $locale->date(\%myconfig, $form->{comparetodate}, 0);
+
+    $form->{last_period} = "$shortcomparefromdate\n$shortcomparetodate";
+    $form->{period} .=
+        "\n$longcomparefromdate "
+      . $locale->text('Bis')
+      . qq| $longcomparetodate|;
+  }
+
+   $form->{IN} = "erfolgsrechnung.html";
 
   $form->parse_template;
 
   $main::lxdebug->leave_sub();
 }
 
+
 sub generate_balance_sheet {
   $::lxdebug->enter_sub;
   $::auth->assert('report');
@@ -395,8 +582,9 @@ sub generate_balance_sheet {
 
   my $data = RP->balance_sheet(\%::myconfig, $::form);
 
-  $::form->{asofdate} ||= $::form->current_date;
-  $::form->{period}     = $::locale->date(\%::myconfig, $::form->current_date, 1);
+  $::form->{asofdate}    ||= $::form->current_date;
+  $::form->{report_title}  = $::locale->text('Balance Sheet');
+  $::form->{report_date} ||= $::form->current_date;
 
   ($::form->{department}) = split /--/, $::form->{department};
 
@@ -407,13 +595,10 @@ sub generate_balance_sheet {
   $::form->{this_period} = $::locale->date(\%::myconfig, $::form->{asofdate}, 0);
   $::form->{last_period} = $::locale->date(\%::myconfig, $::form->{compareasofdate}, 0);
 
+#  balance sheet isn't read from print templates anymore,
+#  instead use template in rp
 #  $::form->{IN} = "balance_sheet.html";
 
-  # setup company variables for the form
-  map { $::form->{$_} = $::myconfig{$_} } qw(company address businessnumber nativecurr);
-
-  $::form->{templates} = $::myconfig{templates};
-
   $::form->header;
   print $::form->parse_html_template('rp/balance_sheet', $data);
 
@@ -455,6 +640,7 @@ sub generate_trial_balance {
   my $form     = $main::form;
   my %myconfig = %main::myconfig;
   my $locale   = $main::locale;
+  my $defaults = SL::DB::Default->get;
 
   if ($form->{reporttype} eq "custom") {
 
@@ -579,7 +765,7 @@ sub generate_trial_balance {
   my $attachment_basename = $locale->text('trial_balance');
   my $report              = SL::ReportGenerator->new(\%myconfig, $form);
 
-  my @hidden_variables    = qw(fromdate todate year cash);
+  my @hidden_variables    = qw(fromdate todate year method);
 
   my $href                = build_std_url('action=generate_trial_balance', grep { $form->{$_} } @hidden_variables);
 
@@ -616,9 +802,14 @@ sub generate_trial_balance {
   $form->{print_date} = $locale->text('Create Date') . " " . $locale->date(\%myconfig, $form->current_date(\%myconfig), 0);
   push (@options, $form->{print_date});
 
-  $form->{company} = $locale->text('Company') . " " . $myconfig{company};
+  $form->{company} = $locale->text('Company') . " " . $defaults->company;
   push (@options, $form->{company});
 
+  if ($::form->{customer_id}) {
+    my $customer = SL::DB::Manager::Customer->find_by(id => $::form->{customer_id});
+    push @options, $::locale->text('Customer') . ' ' . $customer->displayable_name;
+  }
+
 
   $form->{template_to} = $locale->date(\%myconfig, $form->{todate}, 0);
 
@@ -969,7 +1160,7 @@ sub aging {
   $report->set_columns(%column_defs);
   $report->set_column_order(@columns);
 
-  my @hidden_variables = qw(todate customer vendor arap title ct);
+  my @hidden_variables = qw(todate customer vendor arap title ct fordate reporttype);
   $report->set_export_options('generate_' . ($form->{arap} eq 'ar' ? 'ar' : 'ap') . '_aging', @hidden_variables);
 
   my @options;
@@ -1195,9 +1386,11 @@ sub print_form {
   my %myconfig = %main::myconfig;
   my $locale   = $main::locale;
 
-  $form->{statementdate} = $locale->date(\%myconfig, $form->{todate}, 1);
+  my $defaults = SL::DB::Default->get;
+  $form->error($::locale->text('No print templates have been created for this client yet. Please do so in the client configuration.')) if !$defaults->templates;
+  $form->{templates} = $defaults->templates;
 
-  $form->{templates} = "$myconfig{templates}";
+  $form->{statementdate} = $locale->date(\%myconfig, $form->{todate}, 1);
 
   my $suffix = "html";
   my $attachment_suffix = "html";
@@ -1776,8 +1969,7 @@ sub generate_bwa {
     # if (defined ($form->{fromdate|todate}=='..'))
     # immer wahr
     if ($form->{fromdate}){
-      my ($yy, $mm, $dd) = $locale->parse_date(\%myconfig, $form->{fromdate});
-      my $datetime = $locale->parse_date_to_object(\%myconfig, $form->{fromdate});
+      my $datetime = $locale->parse_date_to_object($form->{fromdate});
       $datetime->set( month      => 1,
                       day        => 1);
       $form->{comparefromdate} = $locale->format_date(\%::myconfig, $datetime);
@@ -1818,14 +2010,21 @@ sub generate_bwa {
       . qq| $longtodate|;
   }
 
-  # setup variables for the form
-  my @a = qw(company address businessnumber);
-  map { $form->{$_} = $myconfig{$_} } @a;
-  $form->{templates} = $myconfig{templates};
+  $form->{report_date} = $locale->text('Report date') . ": " . $form->current_date;
 
-  $form->{IN} = "bwa.html";
+  if ( $form->{method} eq 'cash' ) {
+    $form->{accounting_method} = $locale->text('Cash accounting');
+  } elsif ( $form->{method} eq 'accrual' ) {
+    $form->{accounting_method} = $locale->text('Accrual accounting');
+  } else {
+    $form->{accounting_method} = "";
+  };
 
-  $form->parse_template;
+  $form->{title} = $locale->text('BWA');
+
+  $::request->layout->add_stylesheets('bwa.css');
+  $form->header;
+  print $form->parse_html_template('rp/bwa');
 
   $main::lxdebug->leave_sub();
 }