Neuer Bericht »Liquiditätsvorschau«
[kivitendo-erp.git] / SL / Controller / LiquidityProjection.pm
diff --git a/SL/Controller/LiquidityProjection.pm b/SL/Controller/LiquidityProjection.pm
new file mode 100644 (file)
index 0000000..24413d7
--- /dev/null
@@ -0,0 +1,81 @@
+package SL::Controller::LiquidityProjection;
+
+use strict;
+
+use parent qw(SL::Controller::Base);
+
+use SL::Locale::String;
+use SL::LiquidityProjection;
+use SL::Util qw(_hashify);
+
+__PACKAGE__->run_before('check_auth');
+
+use Rose::Object::MakeMethods::Generic (
+  scalar                  => [ qw(liquidity) ],
+  'scalar --get_set_init' => [ qw(oe_report_columns_str) ],
+);
+
+
+#
+# actions
+#
+
+sub action_show {
+  my ($self) = @_;
+
+  $self->liquidity(SL::LiquidityProjection->new(%{ $::form->{params} })->create) if $::form->{params};
+
+  $::form->{params} ||= {
+    months            => 6,
+    type              => 1,
+    salesman          => 1,
+    buchungsgruppe    => 1,
+  };
+
+  $self->render('liquidity_projection/show', title => t8('Liquidity projection'));
+}
+
+#
+# filters
+#
+
+sub check_auth                 { $::auth->assert('report') }
+sub init_oe_report_columns_str { join '&', map { "$_=Y" } qw(open delivered notdelivered l_ordnumber l_transdate l_reqdate l_name l_employee l_salesman l_netamount l_amount l_transaction_description) }
+
+#
+# helpers
+#
+
+sub link_to_old_orders {
+  my $self    = shift;
+  my %params  = _hashify(0, @_);
+
+  my $reqdate = $params{reqdate};
+  my $months  = $params{months} * 1;
+
+  my $fields  = '';
+
+  if ($reqdate eq 'old') {
+    $fields .= '&reqdate_unset_or_old=Y';
+
+  } elsif ($reqdate eq 'future') {
+    my @now  = localtime;
+    $fields .= '&reqdatefrom=' . $self->iso_to_display(SL::LiquidityProjection::_the_date($now[5] + 1900, $now[4] + 1 + $months) . '-01');
+
+  } else {
+    $reqdate =~ m/(\d+)-(\d+)/;
+    $fields .=  '&reqdatefrom=' . $self->iso_to_display($reqdate . '-01');
+    $fields .=  '&reqdateto='   . $self->iso_to_display($reqdate . sprintf('-%02d', DateTime->last_day_of_month(year => $1, month => $2)->day));
+
+  }
+
+  return "oe.pl?action=orders&type=sales_order&vc=customer&" . $self->oe_report_columns_str . $fields;
+}
+
+sub iso_to_display {
+  my ($self, $date) = @_;
+
+  $::locale->reformat_date({ dateformat => 'yyyy-mm-dd' }, $date, $::myconfig{dateformat});
+}
+
+1;