mirror of
https://github.com/itsdave-de/msp.git
synced 2025-05-06 15:35:12 +02:00
Report Artikelverkauf
This commit is contained in:
parent
7374e1a6b5
commit
071d1e6060
@ -0,0 +1,8 @@
|
||||
# Copyright (c) 2021, itsdave GmbH and Contributors
|
||||
# See license.txt
|
||||
|
||||
# import frappe
|
||||
import unittest
|
||||
|
||||
class TestVerkaufsstatistikReport(unittest.TestCase):
|
||||
pass
|
@ -0,0 +1,86 @@
|
||||
// Copyright (c) 2021, itsdave GmbH and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.ui.form.on('Verkaufsstatistik Report', {
|
||||
refresh: function(frm) {
|
||||
|
||||
moment.locale("de") // weeks start on monday
|
||||
frm.trigger('preset');
|
||||
|
||||
},
|
||||
setup: function(frm) {
|
||||
frm.set_query("artikel",function(){
|
||||
return {
|
||||
filters: [
|
||||
["Item","item_group", "in", ["Anwendungsentwicklung", "Arbeitszeiten Techniker"]]
|
||||
]
|
||||
}
|
||||
});
|
||||
},
|
||||
preset: function(frm) {
|
||||
if (!frm.doc.preset) {
|
||||
// No preset selected. Allow manual selection of dates.
|
||||
frm.toggle_enable(['from_date', 'to_date'], true);
|
||||
} else {
|
||||
// Preset selected. Make dates read only.
|
||||
frm.toggle_enable(['from_date', 'to_date'], false);
|
||||
|
||||
if (frm.doc.preset === 'Last Week') {
|
||||
frm.events.set_dates(frm, frappe.datetime.previous("week"));
|
||||
} else if (frm.doc.preset === 'Last Month') {
|
||||
frm.events.set_dates(frm, frappe.datetime.previous("month"));
|
||||
} else if (frm.doc.preset === 'Last Year') {
|
||||
frm.events.set_dates(frm, frappe.datetime.previous("year"));
|
||||
} else if (frm.doc.preset === 'YTD') {
|
||||
frm.events.set_dates(frm, frappe.datetime.year_to_date());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
|
||||
from_date: (frm) => frm.trigger('set_to_date'),
|
||||
set_to_date: function (frm) {
|
||||
|
||||
const len_in_days = moment(frm.doc.to_date).diff(moment(frm.doc.from_date), 'days');
|
||||
let to_date = moment(frm.doc.from_date).add(len_in_days, 'days');
|
||||
|
||||
if (frm.doc.preset && frm.doc.preset !== 'YTD') {
|
||||
// to_date is equal to the end of the week / month / year of from_date
|
||||
const time_map = {
|
||||
'Last Week': 'week',
|
||||
'Last Month': 'month',
|
||||
'Last Year': 'year',
|
||||
}
|
||||
to_date = moment(frm.doc.from_date).endOf(time_map[frm.doc.preset]);
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
set_from_date: function(frm) {
|
||||
|
||||
|
||||
if (frm.doc.to_previous_year) {
|
||||
frm.toggle_enable(['from_date'], false);
|
||||
let from_date = moment(frm.doc.from_date).subtract(1, 'year');
|
||||
|
||||
if (frm.doc.preset == 'Last Week') {
|
||||
const week = moment(frm.doc.from_date).format('WW');
|
||||
const previous_year = (moment(frm.doc.from_date).year() - 1).toString();
|
||||
from_date = moment(`${previous_year}W${week}`);
|
||||
}
|
||||
|
||||
frm.set_value('from_date', from_date.format());
|
||||
} else {
|
||||
frm.toggle_enable(['from_date'], true);
|
||||
}
|
||||
},
|
||||
|
||||
set_dates: function(frm, date_range) {
|
||||
frm.set_value('from_date', date_range.start);
|
||||
frm.set_value('to_date', date_range.end);
|
||||
},
|
||||
|
||||
|
||||
});
|
||||
|
@ -0,0 +1,120 @@
|
||||
{
|
||||
"actions": [],
|
||||
"autoname": "VKSR-.#####",
|
||||
"creation": "2021-10-26 11:58:38.201900",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"from_date",
|
||||
"preset",
|
||||
"artikel",
|
||||
"column_break_4",
|
||||
"to_date",
|
||||
"report",
|
||||
"report_section",
|
||||
"report_basierend_auf",
|
||||
"gruppiert_nach",
|
||||
"zeiteinheit_section",
|
||||
"resolution",
|
||||
"ausgabe_section",
|
||||
"report_ausgabe"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "from_date",
|
||||
"fieldtype": "Date",
|
||||
"label": "\u00a0From Date"
|
||||
},
|
||||
{
|
||||
"fieldname": "preset",
|
||||
"fieldtype": "Select",
|
||||
"label": "Preset",
|
||||
"options": "\nLast Week\nLast Month\nLast Year\nYTD"
|
||||
},
|
||||
{
|
||||
"fieldname": "artikel",
|
||||
"fieldtype": "Table MultiSelect",
|
||||
"label": "Artikel",
|
||||
"options": "Verkaufsstatistik Report Artikel"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_4",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "to_date",
|
||||
"fieldtype": "Date",
|
||||
"label": "To Date"
|
||||
},
|
||||
{
|
||||
"fieldname": "report",
|
||||
"fieldtype": "Button",
|
||||
"label": "Report",
|
||||
"options": "do_report"
|
||||
},
|
||||
{
|
||||
"fieldname": "resolution",
|
||||
"fieldtype": "Select",
|
||||
"label": "Auswahl",
|
||||
"options": "period\ndaily\nweekly\nmonthly\nyearly\nemployee",
|
||||
"translatable": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "ausgabe_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Ausgabe"
|
||||
},
|
||||
{
|
||||
"fieldname": "report_ausgabe",
|
||||
"fieldtype": "Text Editor",
|
||||
"label": "Report Ausgabe"
|
||||
},
|
||||
{
|
||||
"fieldname": "report_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": " Report"
|
||||
},
|
||||
{
|
||||
"fieldname": "report_basierend_auf",
|
||||
"fieldtype": "Select",
|
||||
"label": " Report basierend auf",
|
||||
"options": "Rechnung\nLieferschein"
|
||||
},
|
||||
{
|
||||
"fieldname": "gruppiert_nach",
|
||||
"fieldtype": "Select",
|
||||
"label": "Gruppiert nach",
|
||||
"options": "Artikel\nMitarbeiter"
|
||||
},
|
||||
{
|
||||
"fieldname": "zeiteinheit_section",
|
||||
"fieldtype": "Section Break",
|
||||
"label": "Zeiteinheit"
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2021-10-26 16:02:19.458345",
|
||||
"modified_by": "Administrator",
|
||||
"module": "MSP",
|
||||
"name": "Verkaufsstatistik Report",
|
||||
"owner": "Administrator",
|
||||
"permissions": [
|
||||
{
|
||||
"create": 1,
|
||||
"delete": 1,
|
||||
"email": 1,
|
||||
"export": 1,
|
||||
"print": 1,
|
||||
"read": 1,
|
||||
"report": 1,
|
||||
"role": "System Manager",
|
||||
"share": 1,
|
||||
"write": 1
|
||||
}
|
||||
],
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 1
|
||||
}
|
@ -0,0 +1,92 @@
|
||||
# Copyright (c) 2021, itsdave GmbH and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
|
||||
from frappe.model.document import Document
|
||||
from os import replace
|
||||
import frappe
|
||||
from datetime import datetime as dt
|
||||
from pprint import pprint
|
||||
import pandas as pd
|
||||
|
||||
|
||||
class VerkaufsstatistikReport(Document):
|
||||
@frappe.whitelist()
|
||||
def do_report(self):
|
||||
artikel_auswahl = self.artikel
|
||||
artikel_name = [a.item for a in artikel_auswahl]
|
||||
if self.report_basierend_auf == "Rechnung":
|
||||
item_list = []
|
||||
si_list = frappe.get_all(
|
||||
"Sales Invoice",
|
||||
filters = {
|
||||
"docstatus": 1,
|
||||
"posting_date": ["between", [self.from_date, self.to_date]]
|
||||
},
|
||||
fields = ["posting_date", "name"]
|
||||
)
|
||||
for si in si_list:
|
||||
artikel_doc = frappe.get_doc("Sales Invoice", si["name"])
|
||||
for artikel in artikel_doc.items:
|
||||
if artikel.item_code in artikel_name:
|
||||
empl = str(artikel.item_name).replace("Arbeitszeit ","").replace("Herr ","").replace(" Anwendungsentwicklung","").replace("Remote-Service ","")
|
||||
artikel_details = [si["posting_date"],empl,artikel.item_name,artikel.item_code,artikel.qty]
|
||||
item_list.append(artikel_details)
|
||||
|
||||
if self.report_basierend_auf == "Lieferschein":
|
||||
item_list = []
|
||||
dn_list = frappe.get_all(
|
||||
"Delivery Note",
|
||||
filters = {
|
||||
"docstatus": 1,
|
||||
"posting_date": ["between", [self.from_date, self.to_date]]
|
||||
},
|
||||
fields = ["posting_date", "name"]
|
||||
)
|
||||
for dn in dn_list:
|
||||
artikel_doc = frappe.get_doc("Delivery Note", dn["name"])
|
||||
|
||||
for artikel in artikel_doc.items:
|
||||
if artikel.item_code in artikel_name:
|
||||
empl = str(artikel.item_name).replace("Arbeitszeit ","").replace("Herr ","").replace(" Anwendungsentwicklung","").replace("Remote-Service ","")
|
||||
artikel_details = [dn["posting_date"],empl,artikel.item_name,artikel.item_code,artikel.qty]
|
||||
item_list.append(artikel_details)
|
||||
|
||||
|
||||
df = pd.DataFrame(item_list, columns = ["Datum","Mitarbeiter","Item Name","Item","Anzahl"])
|
||||
df['Datum'] = pd.to_datetime(df['Datum'])
|
||||
df['Kalenderwoche']= df['Datum'].dt.isocalendar().week
|
||||
df['Monat']= df['Datum'].dt.month
|
||||
df['Jahr'] = df['Datum'].dt.year
|
||||
|
||||
|
||||
if self.resolution == 'monthly':
|
||||
filters = ['Jahr','Monat']
|
||||
|
||||
elif self.resolution == 'weekly':
|
||||
filters =['Jahr','Kalenderwoche']
|
||||
|
||||
elif self.resolution == 'daily':
|
||||
filters = ['Datum']
|
||||
|
||||
elif self.resolution == 'yearly':
|
||||
filters = ["Jahr"]
|
||||
|
||||
elif self.resolution == 'period':
|
||||
filters = []
|
||||
|
||||
else:
|
||||
frappe.msgprint("Bitte Zeiteinheit für Gruppierung auswählen")
|
||||
|
||||
if self.gruppiert_nach == "Artikel":
|
||||
filters = filters +["Item","Item Name"]
|
||||
if self.gruppiert_nach == "Mitarbeiter":
|
||||
filters.append("Mitarbeiter")
|
||||
df_grouped = df.groupby(filters).agg({'Anzahl': ['sum']}).reset_index()
|
||||
|
||||
html = df_grouped.to_html(header = False,index = False)
|
||||
#html_2 = html.replace('<tr>','<tr style="text-align: center;">')
|
||||
self.report_ausgabe = html
|
||||
|
||||
if item_list == []:
|
||||
self.report_ausgabe = '<p>' + ("Für die angegebene Periode sind keine Daten vorhanden") + '</p>'
|
@ -0,0 +1,8 @@
|
||||
# Copyright (c) 2021, itsdave GmbH and Contributors
|
||||
# See license.txt
|
||||
|
||||
# import frappe
|
||||
import unittest
|
||||
|
||||
class TestVerkaufsstatistikReportArtikel(unittest.TestCase):
|
||||
pass
|
@ -0,0 +1,8 @@
|
||||
// Copyright (c) 2021, itsdave GmbH and contributors
|
||||
// For license information, please see license.txt
|
||||
|
||||
frappe.ui.form.on('Verkaufsstatistik Report Artikel', {
|
||||
// refresh: function(frm) {
|
||||
|
||||
// }
|
||||
});
|
@ -0,0 +1,30 @@
|
||||
{
|
||||
"actions": [],
|
||||
"creation": "2021-10-26 11:56:57.811638",
|
||||
"doctype": "DocType",
|
||||
"editable_grid": 1,
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"item"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
"fieldname": "item",
|
||||
"fieldtype": "Link",
|
||||
"label": "Item",
|
||||
"options": "Item"
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"istable": 1,
|
||||
"links": [],
|
||||
"modified": "2021-10-26 11:58:30.925182",
|
||||
"modified_by": "Administrator",
|
||||
"module": "MSP",
|
||||
"name": "Verkaufsstatistik Report Artikel",
|
||||
"owner": "Administrator",
|
||||
"permissions": [],
|
||||
"sort_field": "modified",
|
||||
"sort_order": "DESC",
|
||||
"track_changes": 1
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
# Copyright (c) 2021, itsdave GmbH and contributors
|
||||
# For license information, please see license.txt
|
||||
|
||||
# import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
class VerkaufsstatistikReportArtikel(Document):
|
||||
pass
|
Loading…
x
Reference in New Issue
Block a user