Projet

Général

Profil

0001-wcs-use-wcs-category-order-in-backoffice-submission-.patch

Nicolas Roche, 26 septembre 2019 16:35

Télécharger (7,69 ko)

Voir les différences:

Subject: [PATCH] wcs: use wcs category order in backoffice submission cell
 (#29187)

 combo/apps/wcs/models.py                      | 23 ++++++++
 .../combo/wcs/backoffice_submission.html      | 11 ++--
 tests/test_wcs.py                             | 53 ++++++++++++++-----
 3 files changed, 68 insertions(+), 19 deletions(-)
combo/apps/wcs/models.py
557 557
            for formdef in site_formdefs['data']:
558 558
                if not 'category' in formdef:
559 559
                    formdef['category'] = _('Misc')
560

  
561
        # group formdef by categories, keeping the w.c.s. categories order
562
        sites = []
563
        for site in context['all_formdefs'].values():
564
            category_names = []
565
            tmp_categories = {}
566
            for formdef in site['data']:
567
                category_name = formdef['category']
568

  
569
                # remind first seen category order
570
                if category_name not in category_names:
571
                    category_names.append(category_name)
572

  
573
                    tmp_categories[category_name] = []
574
                tmp_categories[category_name].append(formdef)
575
            categories = []
576
            for category_name in category_names:
577
                categories.append({
578
                    'name': category_name,
579
                    'formdefs': tmp_categories[category_name]
580
                })
581
            sites.append({'title': site['title'], 'categories': categories})
582
        context['reordered_all_formdefs'] = sites
560 583
        return context
combo/apps/wcs/templates/combo/wcs/backoffice_submission.html
1 1
{% load combo i18n %}
2 2
{% block cell-content %}
3 3
<h2>{% trans "New Form" %}</h2>
4
{% for site_formdefs in all_formdefs.values %}
4
{% for site in reordered_all_formdefs %}
5 5
  <div class="links-list">
6
  {% if all_formdefs.keys|length > 1 %}<h3>{{ site_formdefs.title }}</h3>{% endif %}
6
  {% if reordered_all_formdefs|length > 1 %}<h3>{{ site.title }}</h3>{% endif %}
7 7
  <ul>
8
  {% regroup site_formdefs.data|dictsort:"category" by category as categories_formdefs %}
9
  {% for category_formdefs in categories_formdefs %}
10
    <li><h4>{{ category_formdefs.grouper }}</h4></li>
11
    {% for formdef in category_formdefs.list|dictsort:"title" %}
8
  {% for category in site.categories %}
9
    <li><h4>{{ category.name }}</h4></li>
10
    {% for formdef in category.formdefs %}
12 11
      <li><a href="{{formdef.backoffice_submission_url}}?NameID={{name_id}}&ReturnURL={{ absolute_uri|iriencode }}">{{formdef.title}}</a></li>
13 12
    {% endfor %}
14 13
  {% endfor %}
tests/test_wcs.py
139 139
    code.id = 'CNPHNTFB'
140 140
    code.formdata = formdata
141 141

  
142
# a private formdef
142
# private formdefs
143 143
role = Role(name='Blah')
144 144
role.store()
145 145

  
146
formdef = FormDef()
147
formdef.name = 'a private form'
148
formdef.category_id = cats[2].id
149
formdef.roles = [role.id]
150
formdef.backoffice_submission_roles = [role.id]
151
formdef.fields = []
152
formdef.store()
146
for i in range(1,5):
147
    category_id = 2+i%2  # not ordered by categories
148
    formdef = FormDef()
149
    formdef.category_id = cats[category_id].id
150
    formdef.name = 'private form %d (category %s)' % (i, formdef.category_id)
151
    formdef.roles = [role.id]
152
    formdef.backoffice_submission_roles = [role.id]
153
    formdef.fields = []
154
    formdef.store()
153 155

  
154 156
user2 = get_publisher().user_class()  # agent
155 157
user2.name = 'foo2 bar2'
......
259 261
    form_class = cell.get_default_form_class()
260 262
    form = form_class()
261 263
    assert form.fields['formdef_reference'].widget.choices == [
262
            (u'default:a-private-form', u'test : a private form'),
263 264
            (u'default:a-second-form-title', u'test : a second form title'),
264 265
            (u'default:form-title', u'test : form title'),
266
            (u'default:private-form-1-category-4', u'test : private form 1 (category 4)'),
267
            (u'default:private-form-2-category-3', u'test : private form 2 (category 3)'),
268
            (u'default:private-form-3-category-4', u'test : private form 3 (category 4)'),
269
            (u'default:private-form-4-category-3', u'test : private form 4 (category 3)'),
265 270
            (u'default:third-form-title', u'test : third form title'),
266
            (u'other:a-private-form', u'test2 : a private form'),
267 271
            (u'other:a-second-form-title', u'test2 : a second form title'),
268 272
            (u'other:form-title', u'test2 : form title'),
273
            (u'other:private-form-1-category-4', u'test2 : private form 1 (category 4)'),
274
            (u'other:private-form-2-category-3', u'test2 : private form 2 (category 3)'),
275
            (u'other:private-form-3-category-4', u'test2 : private form 3 (category 4)'),
276
            (u'other:private-form-4-category-3', u'test2 : private form 4 (category 3)'),
269 277
            (u'other:third-form-title', u'test2 : third form title')]
270 278

  
271 279

  
......
471 479
    form = form_class()
472 480
    assert form.fields['category_reference'].widget.choices == [
473 481
            (u'default:test-3', u'test : Test 3'),
482
            (u'default:test-4', u'test : Test 4'),
474 483
            (u'default:test-9', u'test : Test 9'),
475 484
            (u'other:test-3', u'test2 : Test 3'),
485
            (u'other:test-4', u'test2 : Test 4'),
476 486
            (u'other:test-9', u'test2 : Test 9')]
477 487

  
478 488
@wcs_present
......
589 599

  
590 600
    resp = app.get('/manage/pages/%s/' % page.id)
591 601
    assert ('data-cell-reference="%s"' % cells[0].get_reference()) in resp.text
592
    assert len(resp.form['c%s-categories' % cells[0].get_reference()].options) == 4
593
    resp.form['c%s-categories' % cells[0].get_reference()].value = ['default:test-3', 'default:test-9']
602
    assert len(resp.form['c%s-categories' % cells[0].get_reference()].options) == 6
603
    resp.form['c%s-categories' % cells[0].get_reference()].value = [
604
        'default:test-3', 'default:test-9']
594 605
    resp = resp.form.submit().follow()
595 606
    assert resp.form['c%s-categories' % cells[0].get_reference()].value == ['default:test-3', 'default:test-9']
596 607

  
......
781 792
    context['request'].user = MockUser2()
782 793

  
783 794
    result = cell.render(context)
784
    assert '/backoffice/submission/a-private-form/' in result
795
    assert [x['title'] for x in context['all_formdefs'].values()[0]['data']] == [
796
        'private form 1 (category 4)',
797
        'private form 2 (category 3)',
798
        'private form 3 (category 4)',
799
        'private form 4 (category 3)']
800
    assert [c['formdefs'][i]['title']
801
            for c in context['reordered_all_formdefs'][0]['categories']
802
                for i in range(0, 2)] == [
803
         'private form 1 (category 4)',
804
         'private form 3 (category 4)',
805
         'private form 2 (category 3)',
806
         'private form 4 (category 3)']
807
    assert result.count('/backoffice/submission/private-form-') == 4
808
    index = {}
809
    for i in range(1, 5):
810
        index['form%d' % i] = result.find('/private-form-%d' % i)
811
    assert index['form1'] < index['form3'] < index['form2'] < index['form4']
785
-