Commit 22c5ff6001e904dc39ce49849db3ce677326a21f

Authored by hitier
1 parent 2cb0a345

New stacked_charge function used for agent display

@@ -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