X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=sidebyside;f=SL%2FController%2FCustomerVendorTurnover.pm;fp=SL%2FController%2FCustomerVendorTurnover.pm;h=5a59f1fbdb6bb63e3859fdd7eee636acb130df87;hb=53593baa211863fbf66540cf1bcc36c8fb37257f;hp=0000000000000000000000000000000000000000;hpb=deb4d2dbb676d7d6f69dfe7815d6e0cb09bd4a44;p=kivitendo-erp.git diff --git a/SL/Controller/CustomerVendorTurnover.pm b/SL/Controller/CustomerVendorTurnover.pm new file mode 100644 index 000000000..5a59f1fbd --- /dev/null +++ b/SL/Controller/CustomerVendorTurnover.pm @@ -0,0 +1,528 @@ +package SL::Controller::CustomerVendorTurnover; +use strict; +use parent qw(SL::Controller::Base); +use SL::DBUtils; +use SL::DB::AccTransaction; +use SL::DB::Invoice; +use SL::DB::Order; +use SL::DB::EmailJournal; +use SL::DB::Letter; +use SL::DB; + +__PACKAGE__->run_before('check_auth'); + +sub action_list_turnover { + my ($self) = @_; + + return $self->render('generic/error', { layout => 0 }, label_error => "list_transactions needs a trans_id") unless $::form->{id}; + + my $cv = $::form->{id}; + my $open_invoices; + if ( $::form->{db} eq 'customer' ) { + $open_invoices = SL::DB::Manager::Invoice->get_all( + query => [ + customer_id => $cv, + or => [ + amount => { gt => \'paid'}, + amount => { lt => \'paid'}, + ], + ], + sort_by => 'transdate DESC', + with_objects => [ 'dunnings' ], + ); + } else { + $open_invoices = SL::DB::Manager::PurchaseInvoice->get_all( + query => [ + vendor_id => $cv, + or => [ + amount => { gt => \'paid'}, + amount => { lt => \'paid'}, + ], + ], + sort_by => 'transdate DESC', + ); + } + my $open_items; + if (@{$open_invoices}) { + $open_items = $self->_list_open_items($open_invoices); + } + my $open_orders = $self->_get_open_orders; + return $self->render('customer_vendor_turnover/turnover', { header => 0 }, + open_orders => $open_orders, + open_items => $open_items, + id => $cv, + ); +} + +sub _list_open_items { + my ($self, $open_items) = @_; + + return $self->render('customer_vendor_turnover/_list_open_items', { output => 0 }, + OPEN_ITEMS => $open_items, + title => $::locale->text('Open Items'), + ); +} + +sub action_count_open_items_by_year { + my ($self) = @_; + + return $self->render('generic/error', { layout => 0 }, label_error => "list_transactions needs a trans_id") unless $::form->{id}; + my $dbh = SL::DB->client->dbh; + + my $cv = $::form->{id}; + + my $query = <{dun_statistic} = selectall_hashref_query($::form, $dbh, $query, $cv); + $self->render('customer_vendor_turnover/count_open_items_by_year', { layout => 0 }); +} + +sub action_count_open_items_by_month { + + my ($self) = @_; + + return $self->render('generic/error', { layout => 0 }, label_error => "list_transactions needs a trans_id") unless $::form->{id}; + my $dbh = SL::DB->client->dbh; + + my $cv = $::form->{id}; + + my $query = <{dun_statistic} = selectall_hashref_query($::form, $dbh, $query, $cv); + $self->render('customer_vendor_turnover/count_open_items_by_year', { layout => 0 }); +} + +sub action_turnover_by_month { + + my ($self) = @_; + + return $self->render('generic/error', { layout => 0 }, label_error => "list_transactions needs a trans_id") unless $::form->{id}; + + my $dbh = SL::DB->client->dbh; + my $cv = $::form->{id}; + my ($db, $cv_type); + if ($::form->{db} eq 'customer') { + $db = "ar"; + $cv_type = "customer_id"; + } else { + $db = "ap"; + $cv_type = "vendor_id"; + } + my $query = <{turnover_statistic} = selectall_hashref_query($::form, $dbh, $query, $cv); + $self->render('customer_vendor_turnover/count_turnover', { layout => 0 }); +} + +sub action_turnover_by_year { + my ($self) = @_; + + return $self->render('generic/error', { layout => 0 }, label_error => "list_transactions needs a trans_id") unless $::form->{id}; + + my $dbh = SL::DB->client->dbh; + my $cv = $::form->{id}; + my ($db, $cv_type); + if ($::form->{db} eq 'customer') { + $db = "ar"; + $cv_type = "customer_id"; + } else { + $db = "ap"; + $cv_type = "vendor_id"; + } + my $query = <{turnover_statistic} = selectall_hashref_query($::form, $dbh, $query, $cv); + $self->render('customer_vendor_turnover/count_turnover', { layout => 0 }); +} + +sub action_get_invoices { + my ($self) = @_; + + return $self->render('generic/error', { layout => 0 }, label_error => "list_transactions needs a trans_id") unless $::form->{id}; + + my $cv = $::form->{id}; + my $invoices; + if ( $::form->{db} eq 'customer' ) { + $invoices = SL::DB::Manager::Invoice->get_all( + query => [ customer_id => $cv, ], + sort_by => 'transdate DESC', + ); + } else { + $invoices = SL::DB::Manager::PurchaseInvoice->get_all( + query => [ vendor_id => $cv, ], + sort_by => 'transdate DESC', + ); + } + $self->render('customer_vendor_turnover/invoices_statistic', { layout => 0 }, invoices => $invoices); +} + +sub action_get_orders { + my ($self) = @_; + + return $self->render('generic/error', { layout => 0 }, label_error => "list_transactions needs a trans_id") unless $::form->{id}; + + my $cv = $::form->{id}; + my $orders; + my $type = $::form->{type}; + if ( $::form->{db} eq 'customer' ) { + $orders = SL::DB::Manager::Order->get_all( + query => [ + customer_id => $cv, + quotation => ($type eq 'quotation' ? 'T' : 'F') + ], + sort_by => 'transdate DESC', + ); + } else { + $orders = SL::DB::Manager::Order->get_all( + query => [ + vendor_id => $cv, + quotation => ($type eq 'quotation' ? 'T' : 'F') + ], + sort_by => 'transdate DESC', + ); + } + if ( $type eq 'order') { + $self->render('customer_vendor_turnover/order_statistic', { layout => 0 }, orders => $orders); + } else { + $self->render('customer_vendor_turnover/quotation_statistic', { layout => 0 }, orders => $orders); + } +} + +sub _get_open_orders { + my ( $self ) = @_; + + return $self->render('generic/error', { layout => 0 }, label_error => "list_transactions needs a trans_id") unless $::form->{id}; + my $open_orders; + my $cv = $::form->{id}; + + if ( $::form->{db} eq 'customer' ) { + $open_orders = SL::DB::Manager::Order->get_all( + query => [ + customer_id => $cv, + closed => 'F', + ], + sort_by => 'transdate DESC', + ); + } else { + $open_orders = SL::DB::Manager::Order->get_all( + query => [ + vendor_id => $cv, + closed => 'F', + ], + sort_by => 'transdate DESC', + ); + } + + return 0 unless scalar @{$open_orders}; + return $self->render('customer_vendor_turnover/_list_open_orders', { output => 0 }, + orders => $open_orders, + title => $::locale->text('Open Orders'), + ); +} + +sub action_get_mails { + my ( $self ) = @_; + + return $self->render('generic/error', { layout => 0 }, label_error => "list_transactions needs a trans_id") unless $::form->{id}; + my $dbh = SL::DB->client->dbh; + my $query; + my $cv = $::form->{id}; + + if ( $::form->{db} eq 'customer') { + $query = <render('customer_vendor_turnover/email_statistic', { layout => 0 }, emails => $emails); +} + +sub action_get_letters { + my ($self) = @_; + + return $self->render('generic/error', { layout => 0 }, label_error => "list_transactions needs a trans_id") unless $::form->{id}; + + my $cv = $::form->{id}; + my $letters; + my $type = $::form->{type}; + if ( $::form->{db} eq 'customer' ) { + $letters = SL::DB::Manager::Letter->get_all( + query => [ customer_id => $cv, ], + sort_by => 'date DESC', + ); + } else { + $letters = SL::DB::Manager::Letter->get_all( + query => [ vendor_id => $cv, ], + sort_by => 'date DESC', + ); + } + $self->render('customer_vendor_turnover/letter_statistic', { layout => 0 }, letters => $letters); +} + +sub check_auth { + $::auth->assert('show_extra_record_tab_customer | show_extra_record_tab_vendor'); +} + +1; + +__END__ + +=encoding utf-8 + +=head1 NAME + +SL::Controller::CustomerVendorTurnover + +=head1 DESCRIPTION + +Gets all kinds of records like orders, request orders, quotations, invoices, emails, letters + +wich belong to customer/vendor and displays them in an extra tab "Records". + +=head1 URL ACTIONS + +=over 4 + +=item C + +Basic action wich displays open invoices and open orders if there are any and shows the tab menu for the other actions + +=item C + +gets and shows a dunning statistic of the customer by month + +=item C + +gets and shows a dunning statistic of the customer by year + +=item C + +gets and shows an invoice statistic of customer/vendor by month + +=item C + +gets and shows an invoice statistic of customer/vendor by year + +=item C + +get and shows all invoices from the customer/vendor in an extra tab + +=item C + +get and shows all orders from the customer/vendor in an extra tab + +=item C + +get and shows all letters from the customer/vendor in an extra tab + +=item C + +get and shows all mails from the customer/vendor in an extra tab + +=back + +=head1 Functions + +=over 4 + +=item C<_get_open_orders> + +retrieves the open orders for customer/vendor to display them + +=item C<_list_open_items> + +retrieves open invoices with their dunnings to display them + +=back + +=head1 BUGS + +None yet. :) + +=head1 AUTHOR + +W. Hahn Ewh@futureworldsearch.netE + +=cut