Commit 22c5ff6001e904dc39ce49849db3ce677326a21f
1 parent
2cb0a345
Exists in
master
and in
4 other branches
New stacked_charge function used for agent display
Showing
3 changed files
with
102 additions
and
50 deletions
Show diff stats
app/db_mgr.py
@@ -13,6 +13,21 @@ def agents(): | @@ -13,6 +13,21 @@ def agents(): | ||
13 | return all_agents | 13 | return all_agents |
14 | 14 | ||
15 | 15 | ||
16 | +def stacked_charges_by_agent(agent_id): | ||
17 | + all_charges = {} | ||
18 | + for (period_id, period_name) in db.session.execute("select id, name from period order by id"): | ||
19 | + charge_by_project_req = """select p.name, c.charge_rate from project p left join | ||
20 | + charge c on p.id = c.project_id and agent_id = {} and period_id={} | ||
21 | + order by p.id""".format(agent_id, period_id) | ||
22 | + period_charge = {} | ||
23 | + for project_name, project_rate in db.session.execute(charge_by_project_req): | ||
24 | + period_charge[project_name] = project_rate | ||
25 | + all_charges[period_name]=period_charge | ||
26 | + | ||
27 | + pprint(all_charges) | ||
28 | + return all_charges | ||
29 | + | ||
30 | + | ||
16 | def charges_by_agent(agent_id): | 31 | def charges_by_agent(agent_id): |
17 | # all_charges = db.session.query(Charge).all() | 32 | # all_charges = db.session.query(Charge).all() |
18 | periods = db.session.execute("select name from period") | 33 | periods = db.session.execute("select name from period") |
app/main/routes.py
@@ -94,11 +94,7 @@ def charge_add(): | @@ -94,11 +94,7 @@ def charge_add(): | ||
94 | @bp.route('/charge/agent/<agent_id>') | 94 | @bp.route('/charge/agent/<agent_id>') |
95 | @role_required('service') | 95 | @role_required('service') |
96 | def charge_agent(agent_id): | 96 | def charge_agent(agent_id): |
97 | - agent_charges = [] | ||
98 | - for [period, charge] in db_mgr.charges_by_agent(agent_id): | ||
99 | - agent_charges.append({"charge": charge, "periode": period}) | ||
100 | - # agent_charges = [["charge", "periode"]]+db_mgr.charges_by_agent(agent_id)#agent_charges | ||
101 | - resp = make_response(json.dumps(agent_charges)) | 97 | + resp = make_response(json.dumps(db_mgr.stacked_charges_by_agent(agent_id))) |
102 | resp.headers['Content-Type'] = 'application/json' | 98 | resp.headers['Content-Type'] = 'application/json' |
103 | return resp | 99 | return resp |
104 | 100 |
app/main/templates/agent.html
@@ -67,57 +67,98 @@ | @@ -67,57 +67,98 @@ | ||
67 | 67 | ||
68 | // On demande à D3JS de charger notre fichier | 68 | // On demande à D3JS de charger notre fichier |
69 | d3.json("{{url_for('main.charge_agent', agent_id=agent.id)}}").then(data => { | 69 | d3.json("{{url_for('main.charge_agent', agent_id=agent.id)}}").then(data => { |
70 | - // Conversion des caractères en nombres | ||
71 | - data.forEach(d => d.charge = +d.charge); | ||
72 | - | ||
73 | - // Mise en relation du scale avec les données de notre fichier | ||
74 | - // Pour l'axe X, c'est la liste des periodes | ||
75 | - // Pour l'axe Y, c'est le max des charge | ||
76 | - x.domain(data.map(d => d.periode)); | ||
77 | - y.domain([0, 100]); | ||
78 | - | ||
79 | - // Ajout de l'axe X au SVG | ||
80 | - // Déplacement de l'axe horizontal et du futur texte (via la fonction translate) au bas du SVG | ||
81 | - // Selection des noeuds text, positionnement puis rotation | ||
82 | - svg.append("g") | ||
83 | - .attr("transform", "translate(0," + height + ")") | ||
84 | - .call(d3.axisBottom(x).tickSize(5)) | ||
85 | - .selectAll("text") | ||
86 | - .style("text-anchor", "end") | ||
87 | - .attr("dx", "-.8em") | ||
88 | - .attr("dy", ".15em") | ||
89 | - .attr("transform", "rotate(-65)"); | ||
90 | - | ||
91 | - | ||
92 | - svg.append("text") | ||
93 | - .attr("text-anchor", "end") | ||
94 | - .attr("transform", "rotate(-90)") | ||
95 | - .attr("y", -margin.left+60) | ||
96 | - .attr("x", -margin.top-70) | ||
97 | - .text("Charge (ETP)") | ||
98 | - | ||
99 | - | ||
100 | - // Ajout de l'axe Y au SVG avec 6 éléments de légende en utilisant la fonction ticks (sinon D3JS en place autant qu'il peut). | ||
101 | - svg.append("g") | ||
102 | - .call(d3.axisLeft(y).ticks(6)); | ||
103 | - | ||
104 | - // Ajout des bars en utilisant les données de notre fichier data.tsv | ||
105 | - // La largeur de la barre est déterminée par la fonction x | ||
106 |