Commit ca0797d66e3df3a2de7c578fe115a1dac126fef2
1 parent
7bca61b9
Exists in
master
and in
4 other branches
New agent edit form
Showing
4 changed files
with
114 additions
and
46 deletions
Show diff stats
app/main/routes.py
1 | - | |
2 | -from flask import render_template, make_response, current_app, redirect, url_for, request | |
1 | +from flask import render_template, make_response, current_app, redirect, url_for, request, flash | |
3 | 2 | from flask_login import login_required, current_user |
4 | 3 | |
5 | 4 | from . import bp |
6 | 5 | |
7 | -from app.models import Agent, Project, Service, Capacity, Period | |
6 | +from app.models import Agent, Project, Service, Capacity, Period, db | |
8 | 7 | from app import db_mgr |
9 | 8 | from app.auth.routes import role_required |
10 | 9 | |
... | ... | @@ -112,7 +111,42 @@ def agent(agent_id): |
112 | 111 | return render_template('agent.html', |
113 | 112 | agent=this_agent, |
114 | 113 | charges=charges_table, |
115 | - subtitle="{} {}".format(this_agent.firstname, this_agent.secondname)) | |
114 | + subtitle=f"{this_agent.fullname}") | |
115 | + | |
116 | + | |
117 | +@bp.route('/agent/create', methods=('POST', 'GET')) | |
118 | +@bp.route('/agent/<agent_id>/edit', methods=('POST', 'GET')) | |
119 | +@role_required('service') | |
120 | +def agent_edit(agent_id=None): | |
121 | + # Make the form, filled with existing agent if updating | |
122 | + # | |
123 | + if request.method == 'GET': | |
124 | + if agent_id: | |
125 | + this_agent = Agent.query.get(int(agent_id)) | |
126 | + else: | |
127 | + this_agent = Agent() | |
128 | + # export to structure for jinja display | |
129 | + agent_struct = this_agent.to_struct() | |
130 | + return render_template('agent_edit.html', agent=agent_struct) | |
131 | + # Or submit for db writing | |
132 | + # | |
133 | + elif request.method == 'POST': | |
134 | + agent_id = request.form['agent_id'] | |
135 | + if agent_id: | |
136 | + # then update existing | |
137 | + this_agent = Agent.query.get(int(agent_id)) | |
138 | + done_string = "mis à jour." | |
139 | + else: | |
140 | + # or create from scratch | |
141 | + this_agent = Agent() | |
142 | + done_string = "ajouté." | |
143 | + # fill orm with form and write to db | |
144 | + this_agent.from_request(request) | |
145 | + db.session.add(this_agent) | |
146 | + db.session.commit() | |
147 | + # we're done | |
148 | + flash(f"Agent {this_agent.fullname} "+done_string) | |
149 | + return redirect(url_for('main.agent', agent_id=this_agent.id)) | |
116 | 150 | |
117 | 151 | |
118 | 152 | # - - - - - - - - - - - - - - - - - - - - REST API - - - - - - - - - - - - - - - - - - - - |
... | ... | @@ -141,4 +175,3 @@ def charge_agent_csv(agent_id): |
141 | 175 | resp = make_response("\n".join(csv_table)) |
142 | 176 | resp.headers['Content-Type'] = 'text/plain;charset=utf8' |
143 | 177 | return resp |
144 | - | ... | ... |
app/main/templates/agent.html
... | ... | @@ -64,8 +64,7 @@ |
64 | 64 | <dt class="col-sm-2 text-right">Besoin en formation :</dt> |
65 | 65 | <dd class="col-sm-10 text-left"></dd> |
66 | 66 | </dl> |
67 | - | |
68 | - <a class="card-link disabled" href="#">Modifier</a> | |
67 | + <a class="card-link" href="{{url_for('main.agent_edit', agent_id=agent.id)}}">Modifier</a> | |
69 | 68 | </div> |
70 | 69 | </div> |
71 | 70 | |
... | ... | @@ -103,7 +102,7 @@ |
103 | 102 | <script> |
104 | 103 | build_chart("#projects_chart", |
105 | 104 | "{{url_for('main.charge_agent_csv', agent_id=agent.id)}}", |
106 | - "{{agent.secondname}}" + " {{agent.firstname}}", | |
105 | + "{{agent.fullname}}", | |
107 | 106 | "project"); |
108 | 107 | </script> |
109 | 108 | {% endblock %} | ... | ... |
app/main/templates/agent_edit.html
1 | 1 | {% extends "base_page.html" %} |
2 | -{% block content %} | |
3 | -{% if agent %} | |
4 | -Modifier l'agent {{ agent.name}}. | |
2 | +{# Set the title that will be used in base_page #} | |
3 | +{% if agent['agent_id'] != '' %} | |
4 | + {% set subtitle = "Modifier l'agent"+ agent['fullname'] +":" %} | |
5 | 5 | {% else %} |
6 | -Ajouter un nouvel agent. | |
6 | + {% set subtitle = "Ajouter un nouvel agent:" %} | |
7 | 7 | {% endif %} |
8 | -<form action="{{url_for('main.agent_edit')}}" method="post"> | |
9 | - {% if agent %} | |
10 | - <input class="form-control" id="agent_id" name="agent_id" type="hidden" value="{{agent.id}}"> | |
11 | - {% endif %} | |
12 | - <div class="form-group"> | |
13 | - <label for="firstname">Nom</label> | |
14 | - <input class="form-control" id="firstname" name="firstname" type="text" value="{{agent.firstname}}"> | |
15 | - </div> | |
16 | - <div class="form-group"> | |
17 | - <label for="secondname">Prénom</label> | |
18 | - <input class="form-control" id="secondname" name="secondname" type="text" value="{{agent.secondname}}"> | |
19 | - </div> | |
20 | - <div class="form-group"> | |
21 | - <label for="virtual">Virtuel</label> | |
22 | - <input class="form-control" id="virtual" name="virtual" type="text" value="{{agent.virtual}}"> | |
23 | - </div> | |
24 | - <div class="form-group"> | |
25 | - <label for="company">Structure</label> | |
26 | - <input class="form-control" id="company" name="company" type="text" value="{{agent.company.name}}"> | |
27 | - </div> | |
28 | - <div class="form-group"> | |
29 | - <label for="grade">Grade</label> | |
30 | - <input class="form-control" id="grade" name="grade" type="text" value="{{agent.grade.name}}"> | |
31 | - </div> | |
32 | - <div class="form-group"> | |
33 | - <label for="status">Statut</label> | |
34 | - <input class="form-control" id="status" name="status" type="text" value="{{agent.status.name}}"> | |
35 | - </div> | |
36 | - <div class="form-group"> | |
37 | - <label for="bap">Bap</label> | |
38 | - <input class="form-control" id="bap" name="bap" type="text" value="{{agent.bap.name}}"> | |
39 | - </div> | |
40 | - <input class="btn btn-dark" type="submit" value="Valider"> | |
41 | -</form> | |
8 | +{% block content %} | |
9 | + <form action="{{ url_for('main.agent_edit') }}" method="post"> | |
10 | + {% if agent %} | |
11 | + <input class="form-control" id="agent_id" name="agent_id" type="hidden" value="{{ agent['agent_id'] }}"> | |
12 | + {% endif %} | |
13 | + <div class="form-group"> | |
14 | + <label for="firstname">Nom</label> | |
15 | + <input class="form-control" id="firstname" name="firstname" type="text" value="{{ agent['firstname'] }}"> | |
16 | + </div> | |
17 | + <div class="form-group"> | |
18 | + <label for="secondname">Prénom</label> | |
19 | + <input class="form-control" id="secondname" name="secondname" type="text" value="{{ agent['secondname'] }}"> | |
20 | + </div> | |
21 | + <div class="form-group"> | |
22 | + <label for="virtual">Virtuel</label> | |
23 | + <input class="form-control" id="virtual" name="virtual" type="text" value="{{ agent['virtual'] }}"> | |
24 | + </div> | |
25 | + <div class="form-group"> | |
26 | + <label for="company">Structure</label> | |
27 | + <input class="form-control" id="company_id" name="company_id" type="text" value="{{ agent['company_id'] }}"> | |
28 | + </div> | |
29 | + <div class="form-group"> | |
30 | + <label for="grade">Grade</label> | |
31 | + <input class="form-control" id="grade_id" name="grade_id" type="text" value="{{ agent['grade_id'] }}"> | |
32 | + </div> | |
33 | + <div class="form-group"> | |
34 | + <label for="status">Statut</label> | |
35 | + <input class="form-control" id="status_id" name="status_id" type="text" value="{{ agent['status_id'] }}"> | |
36 | + </div> | |
37 | + <div class="form-group"> | |
38 | + <label for="bap">Bap</label> | |
39 | + <input class="form-control" id="bap_id" name="bap_id" type="text" value="{{ agent['bap_id'] }}"> | |
40 | + </div> | |
41 | + <div class="form-group"> | |
42 | + <label for="permanent">Permanent</label> | |
43 | + <input class="form-control" id="permanent" name="permanent" type="text" value="{{ agent['permanent'] }}"> | |
44 | + </div> | |
45 | + <input class="btn btn-dark" type="submit" value="Valider"> | |
46 | + </form> | |
42 | 47 | {% endblock %} | ... | ... |
app/models.py
... | ... | @@ -82,6 +82,37 @@ class Agent(db.Model): |
82 | 82 | status = relationship("AgentStatus", back_populates="agents") |
83 | 83 | company = relationship("Company", back_populates="agents") |
84 | 84 | |
85 | + @property | |
86 | + def export_keys(self): | |
87 | + return ['firstname', 'secondname', 'virtual', 'permanent', 'company_id', 'status_id', 'grade_id', 'bap_id'] | |
88 | + | |
89 | + @property | |
90 | + def fullname(self): | |
91 | + return f"{self.secondname} {self.firstname}" | |
92 | + | |
93 | + def to_struct(self): | |
94 | + """ | |
95 | + Export the orm object to a structure easily used in jinja | |
96 | + | |
97 | + :return: nothing | |
98 | + """ | |
99 | + _struct = {'agent_id': self.id if self.id else '', | |
100 | + 'fullname': self.fullname} | |
101 | + for key in self.export_keys: | |
102 | + _value = getattr(self, key) | |
103 | + _struct[key] = '' if _value is None else _value | |
104 | + return _struct | |
105 | + | |
106 | + def from_request(self, form_request): | |
107 | + """ | |
108 | + Get a form request structure and fill in our fields | |
109 | + | |
110 | + :param form_request: | |
111 | + :return: | |
112 | + """ | |
113 | + for key in self.export_keys: | |
114 | + setattr(self, key, form_request.form[key]) | |
115 | + | |
85 | 116 | |
86 | 117 | class Service(db.Model): |
87 | 118 | id = db.Column(db.Integer, primary_key=True) | ... | ... |