Files
2022-03-20 21:05:45 +01:00

96 lines
3.5 KiB
Python

import json
from dash import html, dcc
import dash_bootstrap_components as dbc
import pandas as pd
from dash.dependencies import Input, Output
from app import app
import re
SIRET = '20004525000012'
def fn(input_number) -> str:
return '{:,.0f}'.format(input_number).replace(',', ' ')
def get_siret(pathname: str) -> str:
return pathname.split('/')[2]
layout = html.Div(id='stats')
@app.callback(Output('memory', 'data'),
Input('url', 'pathname'),
Input('memory', 'data'))
def get_marches(pathname, data):
regex = re.compile('^/siret/[0-9a-z]{14}$')
if regex.match(pathname):
siret = get_siret(pathname)
if type(data) == dict and data['siret']:
pass
df_marches: pd.DataFrame = pd.read_csv(
f'https://decp.info/db/decp-sans-titulaires.csv?_sort=uid&acheteur.id__exact={siret}&_size=max&_dl=1',
true_values=['oui'],
false_values=['non'])
# df_marches = df_marches[df_marches['donneesActuelles'] == 'oui']
df_marches['anneeNotification'] = df_marches['dateNotification'].str[:4]
df_attributions: pd.DataFrame = pd.read_csv(
f'https://decp.info/db/decp.csv?_sort=uid&acheteur.id__exact={siret}&_size=max&_dl=1',
true_values=['oui'],
false_values=['non'])
# df_attributions = df_attributions[df_attributions['donneesActuelles'] == 'oui']
df_attributions['anneeNotification'] = df_attributions['dateNotification'].str[:4]
datasets = {
'marches': df_marches.to_json(date_format='iso', orient='split'),
'attributions': df_attributions.to_json(date_format='iso', orient='split'),
}
return json.dumps(datasets)
@app.callback(Output('stats', 'children'),
Input('url', 'pathname'),
Input('memory', 'data'))
def generateYears(pathname, json_data) -> [dbc.Row]:
siret = pathname.split('/')[2]
print(siret)
years = ['2022', '2021', '2020']
result = [dbc.Row([
html.H2('Par année')
])]
dataset = json.loads(json_data)
df_marches = pd.read_json(dataset['marches'], orient='split')
for year in years:
df_marches_year = df_marches[df_marches['anneeNotification'] == int(year)]
# df_attributions_year = df_attributions[df_attributions['anneeNotification'] == year]
row = dbc.Row([
dbc.Col([
dbc.Row([
html.H3(year),
html.A('Télécharger les données', href=f'https://decp.info/db/decp.xlsx?'
f'_sort=rowid'
f'&dateNotification__startswith={year}'
f'&acheteur.id__exact={siret}'
f'&_size=max&_dl=1')
]),
dbc.Row([
dbc.Col([
html.H4('Marchés attribués'),
html.P(df_marches_year.index.size)]),
dbc.Col([
html.H4('Montant total attribué'),
html.P(fn(df_marches_year['montant'].sum()) + ' euros')]),
# dbc.Col([
# html.H4('Titulaires différents'),
# html.P(str(df_attributions_year['titulaire.id'].unique().size))])
])
])
])
result.append(row)
return result