Commit 1f54a207e4d1df9225abb19c33aa450e26e4c7f0

Authored by hitier
1 parent 8bcfce10

New routes and tpl: Capacity view, edit, delete

app/main/routes.py
@@ -333,6 +333,38 @@ def capacities(): @@ -333,6 +333,38 @@ def capacities():
333 capacities=all_capacities) 333 capacities=all_capacities)
334 334
335 335
  336 +@bp.route('/capacity/<capacity_id>')
  337 +@role_required('admin')
  338 +def capacity(capacity_id):
  339 + # get capacity
  340 + this_capacity = Capacity.query.get(int(capacity_id))
  341 + # pass to template
  342 + return render_template('capacity.html', subtitle=f"{this_capacity.name}",
  343 + capacity=this_capacity)
  344 +
  345 +
  346 +@bp.route('/capacity/create', methods=('POST', 'GET'))
  347 +@bp.route('/capacity/<capacity_id>/edit', methods=('POST', 'GET'))
  348 +@role_required('admin')
  349 +def capacity_edit(capacity_id=None):
  350 + return form_manager(object_class=Capacity,
  351 + object_id_key='capacity_id',
  352 + object_id=capacity_id,
  353 + form_template='capacity_form.html',
  354 + form_struct={},
  355 + urlfor_exist_dict={'endpoint': 'main.capacity_edit'},
  356 + urlfor_done_dict={'endpoint': 'main.capacity', 'capacity_id': None})
  357 +
  358 +
  359 +@bp.route('/capacity/<capacity_id>/delete', methods=('POST', 'GET'))
  360 +@role_required('admin')
  361 +def capacity_delete(capacity_id=None):
  362 + flash("Suppression du Capacity pas encore implémentée", 'warning')
  363 + # this_label = Label.query.get(int(label_id))
  364 + # flash(f"Label {this_label.name} effacé")
  365 + return redirect(url_for('main.capacities'))
  366 +
  367 +
336 @bp.route('/labels') 368 @bp.route('/labels')
337 @login_required 369 @login_required
338 def labels(): 370 def labels():
app/main/templates/capacities.html
@@ -8,12 +8,19 @@ @@ -8,12 +8,19 @@
8 <thead> 8 <thead>
9 <tr> 9 <tr>
10 <th scope="col">Fonction</th> 10 <th scope="col">Fonction</th>
  11 + <th scope="col" class="col-1">Actions</th>
11 </tr> 12 </tr>
12 </thead> 13 </thead>
13 <tbody> 14 <tbody>
14 {% for capacity in capacities %} 15 {% for capacity in capacities %}
15 <tr> 16 <tr>
16 - <td>{{ capacity.name }}</td> 17 + <td><a href="{{ url_for('main.capacity', capacity_id=capacity.id) }}">
  18 + {{ capacity.name }}</a>
  19 + </td>
  20 + <td>
  21 + {{ commons.edit_link(url_for('main.capacity_edit', capacity_id=capacity.id)) }}
  22 + {{ commons.delete_link( url_for('main.capacity_delete', capacity_id=capacity.id)) }}
  23 + </td>
17 </tr> 24 </tr>
18 {% endfor %} 25 {% endfor %}
19 </tbody> 26 </tbody>
app/main/templates/capacity.html 0 → 100644
@@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
  1 +{% extends "base_page.html" %}
  2 +{% block content %}
  3 +
  4 + <!-- Invisible span to definte wich ul and a in the navbar are actived -->
  5 + <span id="nav_actived" style="display: none">agent,capacities</span>
  6 +
  7 + <div class="card">
  8 + <div class="card-header">
  9 + Fiche Fonction
  10 + </div>
  11 + <div class="card-body">
  12 + <dl class="row agent">
  13 + <dt class="col-sm-2 text-right">ID :</dt>
  14 + <dd class="col-sm-10 text-left">{{ capacity.id }}</dd>
  15 + <dt class="col-sm-2 text-right">Nom :</dt>
  16 + <dd class="col-sm-10 text-left">{{ capacity.name }}</dd>
  17 + <dt class="col-sm-2 text-right"></dt>
  18 + </dl>
  19 + {{ commons.edit_link(url_for('main.capacity_edit', capacity_id=capacity.id), 25) }}
  20 + {{ commons.delete_link( url_for('main.capacity_delete', capacity_id=capacity.id), 25) }}
  21 + </div>
  22 + </div>
  23 +
  24 +{% endblock %}
app/main/templates/capacity_form.html 0 → 100644
@@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
  1 +{% extends "base_page.html" %}
  2 +
  3 +{# Make link with form_manager #}
  4 +{% set capacity = object_struct %}
  5 +
  6 +{# Set the title that will be used in base_page #}
  7 +{% if capacity['id'] and capacity['id'] != '' %}
  8 + {% set subtitle = "Modifier la fonction "+ capacity['name'] %}
  9 +{% else %}
  10 + {% set subtitle = "Ajouter une nouvelle fonction" %}
  11 +{% endif %}
  12 +
  13 +{% block content %}
  14 +
  15 + <!-- Invisible span to define wich ul and a in the navbar are actived -->
  16 + <span id="nav_actived" style="display: none">admin,capacity_edit</span>
  17 +
  18 + <form id="capacity_form" class="pdc-form" action="{{ url_for('main.capacity_edit',
  19 + capacity_id=capacity['id']) }}" method="post">
  20 + {% if capacity['id'] and capacity['id'] != '' %}
  21 + <input class="form-control" id="capacity_id" name="capacity_id" type="hidden" value="{{ capacity['id'] }}">
  22 + {% endif %}
  23 + <div class="form-group">
  24 + <label for="name">Nom</label>
  25 + <input class="form-control" id="name" name="name" type="text" value="{{ capacity['name'] }}">
  26 + </div>
  27 + <input class="pdc-form-submit" type="submit" value="Valider">
  28 + </form>
  29 +{% endblock %}
@@ -292,7 +292,7 @@ class Agent(db.Model, Formable): @@ -292,7 +292,7 @@ class Agent(db.Model, Formable):
292 bap = relationship("AgentBap", back_populates="agents") 292 bap = relationship("AgentBap", back_populates="agents")
293 status = relationship("AgentStatus", back_populates="agents") 293 status = relationship("AgentStatus", back_populates="agents")
294 company = relationship("Company", back_populates="agents") 294 company = relationship("Company", back_populates="agents")
295 - name = column_property(firstname+" "+secondname) 295 + name = column_property(firstname + " " + secondname)
296 296
297 @property 297 @property
298 def fullname(self): 298 def fullname(self):
@@ -322,10 +322,12 @@ class Service(db.Model): @@ -322,10 +322,12 @@ class Service(db.Model):
322 abbr = db.Column(db.String(50), unique=True) 322 abbr = db.Column(db.String(50), unique=True)
323 323
324 324
325 -class Capacity(db.Model): 325 +class Capacity(db.Model, Formable):
326 id = db.Column(db.Integer, primary_key=True) 326 id = db.Column(db.Integer, primary_key=True)
327 name = db.Column(db.String(100), unique=True) 327 name = db.Column(db.String(100), unique=True)
328 328
  329 + export_keys = ['name']
  330 +
329 331
330 class Period(db.Model): 332 class Period(db.Model):
331 id = db.Column(db.Integer, primary_key=True) 333 id = db.Column(db.Integer, primary_key=True)
app/templates/base_page.html
@@ -50,8 +50,6 @@ @@ -50,8 +50,6 @@
50 href="{{ url_for('main.agents') }}">Liste des 50 href="{{ url_for('main.agents') }}">Liste des
51 agents</a> 51 agents</a>
52 </li> 52 </li>
53 - <li class="nav-item"><a id="agents_stats" class="sub_link nav-link"  
54 - href="{{ url_for('main.agents_stats') }}">Statistiques</a></li>  
55 <li class="nav-item"><a id="responsabilities" class="sub_link nav-link" 53 <li class="nav-item"><a id="responsabilities" class="sub_link nav-link"
56 href="{{ url_for('main.responsabilities') }}">Liste des responsabilités</a></li> 54 href="{{ url_for('main.responsabilities') }}">Liste des responsabilités</a></li>
57 <li class="nav-item"><a id="capacities" class="sub_link nav-link " 55 <li class="nav-item"><a id="capacities" class="sub_link nav-link "
@@ -63,6 +61,8 @@ @@ -63,6 +61,8 @@
63 <li class="nav-item"><a class="sub_link nav-link disabled" href="#">Liste des pôles</a></li> 61 <li class="nav-item"><a class="sub_link nav-link disabled" href="#">Liste des pôles</a></li>
64 <li class="nav-item"><a id="employments" class="sub_link nav-link" 62 <li class="nav-item"><a id="employments" class="sub_link nav-link"
65 href="{{ url_for('main.employments') }}">Liste des emplois types</a></li> 63 href="{{ url_for('main.employments') }}">Liste des emplois types</a></li>
  64 + <li class="nav-item"><a id="agents_stats" class="sub_link nav-link"
  65 + href="{{ url_for('main.agents_stats') }}">Statistiques</a></li>
66 </ul> 66 </ul>
67 </li> 67 </li>
68 <li class="nav-item"> 68 <li class="nav-item">
@@ -134,10 +134,12 @@ @@ -134,10 +134,12 @@
134 href="{{ url_for('main.label_edit') }}">Ajouter un label</a></li> 134 href="{{ url_for('main.label_edit') }}">Ajouter un label</a></li>
135 <li class="nav-item"><a class="sub_link nav-link disabled" href="#">Ajouter une compétence</a> 135 <li class="nav-item"><a class="sub_link nav-link disabled" href="#">Ajouter une compétence</a>
136 </li> 136 </li>
137 - <li class="nav-item"><a class="sub_link nav-link disabled" href="#">Ajouter une fonction</a> 137 + <li class="nav-item"><a id="capacity_edit" class="sub_link nav-link"
  138 + href="{{ url_for('main.capacity_edit') }}">Ajouter une fonction</a>
138 </li> 139 </li>
139 <li class="nav-item"><a id="responsability_edit" class="sub_link nav-link" 140 <li class="nav-item"><a id="responsability_edit" class="sub_link nav-link"
140 - href="{{ url_for('main.responsability_edit') }}">Ajouter une responsabilité</a></li> 141 + href="{{ url_for('main.responsability_edit') }}">Ajouter une responsabilité</a>
  142 + </li>
141 <li class="nav-item"><a class="sub_link nav-link disabled" href="#">Affecter un responsable de 143 <li class="nav-item"><a class="sub_link nav-link disabled" href="#">Affecter un responsable de
142 projet</a></li> 144 projet</a></li>
143 <li class="nav-item"><a class="sub_link nav-link disabled" href="#">Affecter un responsable de 145 <li class="nav-item"><a class="sub_link nav-link disabled" href="#">Affecter un responsable de
tests/frontend_tests.py
@@ -9,7 +9,7 @@ from selenium.webdriver.common.keys import Keys @@ -9,7 +9,7 @@ from selenium.webdriver.common.keys import Keys
9 from selenium.webdriver.support.select import Select 9 from selenium.webdriver.support.select import Select
10 10
11 from app import create_app 11 from app import create_app
12 -from app.models import Agent, Charge, Project, AgentResponsability, ProjectStatus, Label, Category 12 +from app.models import Agent, Charge, Project, AgentResponsability, ProjectStatus, Label, Category, Capacity
13 from pdc_config import TestConfig 13 from pdc_config import TestConfig
14 from tests.common_db_feed import resources_to_instancedb 14 from tests.common_db_feed import resources_to_instancedb
15 15
@@ -163,13 +163,12 @@ class AccessTestCase(BaseFrontTestCase): @@ -163,13 +163,12 @@ class AccessTestCase(BaseFrontTestCase):
163 def test_responsability_page(self): 163 def test_responsability_page(self):
164 self.check_page_h2('projet', url_for('main.responsability', responsability_id=1)) 164 self.check_page_h2('projet', url_for('main.responsability', responsability_id=1))
165 165
166 - @unittest.skip("to be implemented")  
167 - def test_capacity_page(self):  
168 - pass  
169 -  
170 def test_capacities(self): 166 def test_capacities(self):
171 self.check_num_trs(59, url_for('main.capacities')) 167 self.check_num_trs(59, url_for('main.capacities'))
172 168
  169 + def test_capacity_page(self):
  170 + self.check_page_h2('Acousticien', url_for('main.capacity', capacity_id=1))
  171 +
173 def test_project_status_page(self): 172 def test_project_status_page(self):
174 self.check_page_h2('Abandonné', url_for('main.project_status', status_id=1)) 173 self.check_page_h2('Abandonné', url_for('main.project_status', status_id=1))
175 174
@@ -240,6 +239,21 @@ class FormsTestCase(BaseFrontTestCase): @@ -240,6 +239,21 @@ class FormsTestCase(BaseFrontTestCase):
240 def test_responsability_delete(self): 239 def test_responsability_delete(self):
241 self.check_delete(url_for('main.responsability_delete', responsability_id=1)) 240 self.check_delete(url_for('main.responsability_delete', responsability_id=1))
242 241
  242 + def test_capacity_add(self):
  243 + resp_dict = {'name': 'Ma Fonction'}
  244 + resp_add_url = url_for('main.capacity_edit')
  245 + self.check_edit(Capacity, resp_add_url, resp_dict)
  246 +
  247 + # Test capacity form
  248 + def test_capacity_edit(self):
  249 + init_dict = {'name': 'Acousticien'}
  250 + resp_dict = {'name': 'Ma Fonction'}
  251 + resp_add_url = url_for('main.capacity_edit', capacity_id=1)
  252 + self.check_edit(Capacity, resp_add_url, resp_dict, init_dict)
  253 +
  254 + def test_capacity_delete(self):
  255 + self.check_delete(url_for('main.capacity_delete', capacity_id=1))
  256 +
243 def test_agent_add(self): 257 def test_agent_add(self):
244 agent_dict = {'firstname': 'Hitier', 'secondname': 'Richard'} 258 agent_dict = {'firstname': 'Hitier', 'secondname': 'Richard'}
245 agent_add_url = url_for('main.agent_edit') 259 agent_add_url = url_for('main.agent_edit')