Revision 961bd689
Von Bernd Bleßmann vor mehr als 2 Jahren hinzugefügt
SL/Controller/CustomerVendor.pm | ||
---|---|---|
|
||
$self->{template_args} ||= {};
|
||
|
||
$::request->{layout}->add_javascripts("$_.js") for qw (kivi.CustomerVendor kivi.File kivi.CustomerVendorTurnover ckeditor/ckeditor ckeditor/adapters/jquery follow_up);
|
||
$::request->{layout}->add_javascripts("$_.js") for qw (kivi.CustomerVendor kivi.File chart kivi.CustomerVendorTurnover ckeditor/ckeditor ckeditor/adapters/jquery follow_up);
|
||
|
||
$self->_setup_form_action_bar;
|
||
}
|
SL/Controller/CustomerVendorTurnover.pm | ||
---|---|---|
use SL::DB::EmailJournal;
|
||
use SL::DB::Letter;
|
||
use SL::DB;
|
||
use SL::JSON qw(to_json);
|
||
|
||
__PACKAGE__->run_before('check_auth');
|
||
|
||
... | ... | |
ORDER BY $order_by
|
||
SQL
|
||
$self->{turnover_statistic} = selectall_hashref_query($::form, $dbh, $query, $cv);
|
||
$self->render('customer_vendor_turnover/count_turnover', { layout => 0 });
|
||
|
||
if ($::request->type eq 'json') {
|
||
$self->render(\ SL::JSON::to_json($self->{turnover_statistic}), { layout => 0, type => 'json', process => 0 });
|
||
} else {
|
||
$self->render('customer_vendor_turnover/count_turnover', { layout => 0 });
|
||
}
|
||
}
|
||
|
||
sub action_get_invoices {
|
js/kivi.CustomerVendorTurnover.js | ||
---|---|---|
$('#turnovers').load(url);
|
||
};
|
||
|
||
ns.show_turnover_chart = function(period) {
|
||
const html = '<div class="chart-container" style="position: relative;">'
|
||
+ '<canvas id="chart"></canvas>'
|
||
+ '</div>';
|
||
$('#turnovers').html(html);
|
||
|
||
let mode = "month";
|
||
if (period === 'y') {
|
||
mode = "year";
|
||
} else if (period === 'm') {
|
||
mode = "month";
|
||
}
|
||
|
||
const data = { action: 'CustomerVendorTurnover/turnover.json',
|
||
id: $('#cv_id').val(),
|
||
db: $('#db').val(),
|
||
mode: mode
|
||
};
|
||
$.getJSON('controller.pl', data, function( returned_data ) {
|
||
ns.draw_chart(returned_data);
|
||
$("html, body").animate({ scrollTop: $("#chart").offset().top }, "slow");
|
||
});
|
||
};
|
||
|
||
ns.draw_chart = function(data) {
|
||
// Todos are most probably better done in the perl backend.
|
||
// Todo: fill holes
|
||
// Todo: show amount/paid in one/each bar
|
||
// data = [
|
||
// {date_part: 2022, netamount: 1234.4},
|
||
// {date_part: 2022, netamount: 234.4},
|
||
// {date_part: 2021, netamount: 234.4},
|
||
// {date_part: 2021, netamount: 34.4},
|
||
// {date_part: 2020, netamount: 134.4},
|
||
// {date_part: 2018, netamount: 34.4}
|
||
// ];
|
||
|
||
$(data).each(function(idx, elt) {
|
||
elt.date_part = '' + elt.date_part;
|
||
});
|
||
|
||
ns.chart(data);
|
||
};
|
||
|
||
ns.chart = function(data) {
|
||
const ctx = 'chart';
|
||
const myChart = new Chart(ctx, {
|
||
type: 'bar',
|
||
data: {
|
||
datasets: [{
|
||
label: kivi.t8('Net.Turnover'),
|
||
data: data,
|
||
backgroundColor: [
|
||
'rgba(255, 99, 132, 0.2)',
|
||
'rgba(54, 162, 235, 0.2)',
|
||
'rgba(255, 206, 86, 0.2)',
|
||
'rgba(75, 192, 192, 0.2)',
|
||
'rgba(153, 102, 255, 0.2)',
|
||
'rgba(255, 159, 64, 0.2)'
|
||
],
|
||
borderColor: [
|
||
'rgba(255, 99, 132, 1)',
|
||
'rgba(54, 162, 235, 1)',
|
||
'rgba(255, 206, 86, 1)',
|
||
'rgba(75, 192, 192, 1)',
|
||
'rgba(153, 102, 255, 1)',
|
||
'rgba(255, 159, 64, 1)'
|
||
],
|
||
borderWidth: 1
|
||
}]
|
||
},
|
||
options: {
|
||
scales: {
|
||
y: {
|
||
beginAtZero: true
|
||
}
|
||
},
|
||
parsing: {
|
||
xAxisKey: 'date_part',
|
||
yAxisKey: 'netamount'
|
||
}
|
||
}
|
||
});
|
||
};
|
||
|
||
ns.sample_chart = function() {
|
||
const ctx = 'chart';
|
||
const myChart = new Chart(ctx, {
|
||
type: 'bar',
|
||
data: {
|
||
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
|
||
datasets: [{
|
||
label: '# of Votes',
|
||
data: [12, 19, 3, 5, 2, 3],
|
||
backgroundColor: [
|
||
'rgba(255, 99, 132, 0.2)',
|
||
'rgba(54, 162, 235, 0.2)',
|
||
'rgba(255, 206, 86, 0.2)',
|
||
'rgba(75, 192, 192, 0.2)',
|
||
'rgba(153, 102, 255, 0.2)',
|
||
'rgba(255, 159, 64, 0.2)'
|
||
],
|
||
borderColor: [
|
||
'rgba(255, 99, 132, 1)',
|
||
'rgba(54, 162, 235, 1)',
|
||
'rgba(255, 206, 86, 1)',
|
||
'rgba(75, 192, 192, 1)',
|
||
'rgba(153, 102, 255, 1)',
|
||
'rgba(255, 159, 64, 1)'
|
||
],
|
||
borderWidth: 1
|
||
}]
|
||
},
|
||
options: {
|
||
scales: {
|
||
y: {
|
||
beginAtZero: true
|
||
}
|
||
}
|
||
}
|
||
});
|
||
};
|
||
|
||
ns.cv_tabs_init = function () {
|
||
$("#customer_vendor_tabs").on('tabsbeforeactivate', function(event, ui){
|
||
if (ui.newPanel.attr('id') == 'quotations') {
|
js/locale/de.js | ||
---|---|---|
"Mon":"Mo",
|
||
"Monday":"Montag",
|
||
"More than one file selected, please set only one checkbox!":"Mehr als ein Element selektiert, bitte nur eine Box anklicken",
|
||
"Net.Turnover":"Netto Umsatz",
|
||
"Next month":"nächster Monat",
|
||
"No":"Nein",
|
||
"No article has been selected yet.":"Es wurde noch kein Artikel ausgewählt.",
|
js/locale/en.js | ||
---|---|---|
"Mon":"",
|
||
"Monday":"",
|
||
"More than one file selected, please set only one checkbox!":"",
|
||
"Net.Turnover":"",
|
||
"Next month":"",
|
||
"No":"",
|
||
"No article has been selected yet.":"",
|
locale/de/all | ||
---|---|---|
'Monat' => 'Monat',
|
||
'Monday' => 'Montag',
|
||
'Month' => 'Monat',
|
||
'Month as chart' => 'Monat als Grafik',
|
||
'Month/Year' => 'Monat/Jahr',
|
||
'Monthly' => 'monatlich',
|
||
'More than one control file with the tag \'%s\' exist.' => 'Es gibt mehr als eine Kontrolldatei mit dem Tag \'%s\'.',
|
||
... | ... | |
'X' => 'X',
|
||
'YYYY' => 'JJJJ',
|
||
'Year' => 'Jahr',
|
||
'Year as chart' => 'Jahr als Grafik',
|
||
'Year-end bookings were successfully completed!' => 'Die Jahresabschlußbuchungen wurden erfolgreich durchgeführt!',
|
||
'Year-end closing' => 'Jahresabschluß',
|
||
'Year-end date' => 'Jahresabschlußdatum',
|
locale/en/all | ||
---|---|---|
'Monat' => '',
|
||
'Monday' => '',
|
||
'Month' => '',
|
||
'Month as chart' => '',
|
||
'Month/Year' => '',
|
||
'Monthly' => '',
|
||
'More than one control file with the tag \'%s\' exist.' => '',
|
||
... | ... | |
'X' => '',
|
||
'YYYY' => '',
|
||
'Year' => '',
|
||
'Year as chart' => '',
|
||
'Year-end bookings were successfully completed!' => '',
|
||
'Year-end closing' => '',
|
||
'Year-end date' => '',
|
templates/webpages/customer_vendor_turnover/turnover_statistic.html | ||
---|---|---|
<p>
|
||
[% L.radio_button_tag('period', value='year', label= LxERP.t8('Year'), onclick='kivi.CustomerVendorTurnover.show_turnover_stat("y");') %]
|
||
|
||
[% L.radio_button_tag('period', value='year_chart', label= LxERP.t8('Year as chart'), onclick='kivi.CustomerVendorTurnover.show_turnover_chart("y");') %]
|
||
|
||
[% L.radio_button_tag('period', value='month', label= LxERP.t8('Month'), onclick='kivi.CustomerVendorTurnover.show_turnover_stat("m");') %]
|
||
|
||
[% L.radio_button_tag('period', value='month_chart', label= LxERP.t8('Month as chart'), onclick='kivi.CustomerVendorTurnover.show_turnover_chart("m");') %]
|
||
</p>
|
||
<div id="turnovers"></div>
|
Auch abrufbar als: Unified diff
Kunden-/Lieferanten-Umsatzstatistik als Chart (chart.js)