Anpassungen Verkaufsstatistik

This commit is contained in:
Beate Trzensiok 2022-03-14 16:27:11 +01:00
parent 992914c29e
commit 9b4a85ba43
2 changed files with 93 additions and 23 deletions

View File

@ -15,6 +15,9 @@
"report_section",
"report_basierend_auf",
"gruppiert_nach",
"section_break_10",
"anzahl",
"preis",
"zeiteinheit_section",
"resolution",
"ausgabe_section",
@ -57,7 +60,7 @@
"fieldname": "resolution",
"fieldtype": "Select",
"label": "Auswahl",
"options": "period\ndaily\nweekly\nmonthly\nyearly\nemployee",
"options": "period\ndaily\nweekly\nmonthly\nyearly",
"translatable": 1
},
{
@ -92,11 +95,27 @@
"fieldname": "zeiteinheit_section",
"fieldtype": "Section Break",
"label": "Zeiteinheit"
},
{
"default": "0",
"fieldname": "anzahl",
"fieldtype": "Check",
"label": "Anzahl"
},
{
"default": "0",
"fieldname": "preis",
"fieldtype": "Check",
"label": "Preis"
},
{
"fieldname": "section_break_10",
"fieldtype": "Section Break"
}
],
"index_web_pages_for_search": 1,
"links": [],
"modified": "2022-03-11 08:32:22.749064",
"modified": "2022-03-14 16:25:40.030362",
"modified_by": "Administrator",
"module": "MSP",
"name": "Verkaufsstatistik Report",

View File

@ -8,12 +8,16 @@ import frappe
from datetime import datetime as dt
from pprint import pprint
import pandas as pd
import numpy as np
from retail.retail.doctype.flex_report.flex_report import pivot_table
class VerkaufsstatistikReport(Document):
@frappe.whitelist()
def do_report(self):
artikel_auswahl = self.artikel
if artikel_auswahl == []:
frappe.throw('Keine Artikel ausgewählt.')
artikel_name = [a.item for a in artikel_auswahl]
if self.report_basierend_auf == "Rechnung":
item_list = []
@ -31,7 +35,8 @@ class VerkaufsstatistikReport(Document):
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,artikel.rate]
price = artikel.qty*artikel.rate
artikel_details = [si["posting_date"],empl,artikel.item_name,artikel.item_code,artikel.qty,artikel.rate, price]
item_list.append(artikel_details)
if self.report_basierend_auf == "Lieferschein":
@ -50,54 +55,100 @@ class VerkaufsstatistikReport(Document):
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, artikel.rate]
price = artikel.qty*artikel.rate
artikel_details = [dn["posting_date"],empl,artikel.item_name,artikel.item_code,artikel.qty, artikel.rate, price]
item_list.append(artikel_details)
print(artikel_details)
df = pd.DataFrame(item_list, columns = ["Datum","Mitarbeiter","Item Name","Item","Anzahl","Preis"])
df = pd.DataFrame(item_list, columns = ["Datum","Mitarbeiter","Item Name","Item","Anzahl","Preis pro Einheit","Preis"])
df['Datum'] = pd.to_datetime(df['Datum'])
df['Kalenderwoche']= df['Datum'].dt.isocalendar().week
df['Monat']= df['Datum'].dt.month
df['Kalenderwoche']= df['Datum'].dt.isocalendar().week
#df['Monat']= df['Datum'].dt.month
df['Jahr'] = df['Datum'].dt.year
df['Monat'] = df['Datum'].dt.strftime("%m.%Y")
df.round ({"Anzahl":2,"Preis":2})
print(df.dtypes)
if self.resolution == 'monthly':
filters = ['Jahr','Monat']
date = ['Monat']
elif self.resolution == 'weekly':
filters =['Jahr','Kalenderwoche']
date =['Jahr','Kalenderwoche']
elif self.resolution == 'daily':
filters = ['Datum']
date = ['Datum']
elif self.resolution == 'yearly':
filters = ["Jahr"]
date = ["Jahr"]
elif self.resolution == 'period':
filters = []
date = []
else:
frappe.msgprint("Bitte Zeiteinheit für Gruppierung auswählen")
print(df)
values = []
if self.anzahl == 1:
values.append("Anzahl")
if self.preis == 1:
values.append("Preis")
if self.gruppiert_nach == "Artikel":
filters = filters +["Item","Item Name","Preis"]
if self.gruppiert_nach == "Mitarbeiter":
filters.append("Mitarbeiter")
#df_grouped = df.groupby(filters).agg({'Anzahl': ['sum']}).reset_index()
df_grouped = df.groupby(filters)['Anzahl'].sum().to_frame('Anzahl').reset_index()
self.report_ausgabe = self.get_styler(df_grouped).render()
df_pivot =df.pivot_table(index=date, columns="Item", values = values, aggfunc = np.sum, fill_value=0)
else:
df_pivot =df.pivot_table(index=date, columns="Mitarbeiter", values = values, aggfunc = np.sum, fill_value=0)
# #df_grouped = df.groupby(filters).agg({'Anzahl': ['sum']}).reset_index()
# if self.anzahl == 1:
# df['Item']=df['Item'].map('{} Anzahl'.format)
# df_grouped = df.groupby(filters)['Anzahl'].sum().reset_index()
# df_pivot1 = df_grouped.pivot_table(index= date,columns='Item',values='Anzahl')
# df_pivot1 = df_pivot.fillna(0)
# if self.preis == 1:
# df['Item']=df['Item'].map('{} Preis'.format)
# df_grouped = df.groupby(filters)['Preis'].sum().reset_index()
# df_pivot2 = df_grouped.pivot_table(index= date,columns='Item',values='Preis')
# df_pivot2= df_pivot.fillna(0)
df_pivot = pd.DataFrame(df_pivot.to_records())
a = df_pivot.drop(date,axis=1).astype(float)
a[date] = df_pivot[date]
a.set_index(date, inplace = True)
c = a.columns.tolist()
# = [lambda x : x.replace('(', '').replace(')','').replace("'",'') for x in c]
print(c)
print(a)
#df_pivot = df_pivot.astype(float)d
#df_pivot = self.add_total_row(df_pivot)
# print(df_pivot)
self.report_ausgabe = self.get_styler(a).render()
if item_list == []:
self.report_ausgabe = '<p>' + ("Für die angegebene Periode sind keine Daten vorhanden") + '</p>'
def add_total_row(df,self):
sum_row = df.aggregate('sum')
mean_row = df.aggregate('mean')
df.loc['SUM'] = sum_row
df.loc['MEAN'] = mean_row
def get_styler(self,df):
styles = [
dict(props=[("border-collapse", "collapse"), ("width", "100%")]),
dict(selector="th, td", props=[("padding", ".75rem"), ("border-top", "1px solid #dee2e6")]),
dict(selector=".col_heading", props=[('text-align', 'right')]),
#dict(selector=".col_heading.col0", props=[('text-align', 'left')]),
dict(selector=".col_heading.col0", props=[('text-align', 'left')]),
dict(selector=".data", props=[("text-align", "right")]),
dict(selector=".col0", props=[("text-align", "left")]), # first column
#dict(selector=".col0", props=[("text-align", "left")]), # first column
dict(selector="tbody tr:nth-of-type(odd)", props=[("background-color", "rgba(0,0,0,.05)")]), # stripes
]
return df.style.hide_index().format({"Anzahl":'{:.2f}', "Preis":'{:.2f}'}).set_table_styles(styles)
return df.style.format('{:.2f}').set_table_styles(styles)