1
|
import os
|
2
|
|
3
|
from quixote import get_publisher, redirect
|
4
|
from quixote.directory import Directory
|
5
|
|
6
|
from qommon.publisher import get_publisher_class
|
7
|
|
8
|
import wcs.backoffice.root
|
9
|
import wcs.root
|
10
|
from wcs.admin.menu import *
|
11
|
from wcs.categories import Category
|
12
|
from wcs.formdef import FormDef
|
13
|
|
14
|
from qommon import get_cfg
|
15
|
from qommon.form import *
|
16
|
|
17
|
class BackofficeRootDirectory(wcs.backoffice.root.RootDirectory):
|
18
|
def __init__(self):
|
19
|
wcs.backoffice.root.RootDirectory.__init__(self)
|
20
|
self._q_exports = wcs.backoffice.root.RootDirectory._q_exports
|
21
|
|
22
|
def _q_index [html] (self):
|
23
|
from wcs.backoffice.menu import html_top
|
24
|
html_top('/')
|
25
|
'<p>'
|
26
|
_('Welcome on Au Quotidien back office interface')
|
27
|
'</p>'
|
28
|
|
29
|
user = get_request().user
|
30
|
|
31
|
def append_form_entry(formdef):
|
32
|
formdef_data_class = formdef.data_class()
|
33
|
count_forms = formdef_data_class.count() - len(formdef_data_class.get_ids_with_indexed_value('status', 'draft'))
|
34
|
if formdef.workflow:
|
35
|
not_endpoint_status = formdef.workflow.get_not_endpoint_status()
|
36
|
not_endpoint_status_ids = ['wf-%s' % x.id for x in not_endpoint_status]
|
37
|
else:
|
38
|
not_endpoint_status_ids = ['new', 'accepted']
|
39
|
pending_forms = []
|
40
|
for status in not_endpoint_status_ids:
|
41
|
pending_forms.extend(formdef_data_class.get_ids_with_indexed_value(
|
42
|
'status', status))
|
43
|
if len(pending_forms) == 0:
|
44
|
return
|
45
|
l.append((formdef, len(pending_forms), count_forms))
|
46
|
|
47
|
l = []
|
48
|
if user:
|
49
|
for formdef in FormDef.select(order_by='name', ignore_errors=True):
|
50
|
if formdef.disabled:
|
51
|
continue
|
52
|
if user.is_admin or formdef.receiver_id in (user.roles or []):
|
53
|
append_form_entry(formdef)
|
54
|
|
55
|
if l:
|
56
|
'<div class="bo-block">'
|
57
|
'<h2>%s</h2>' % _('Forms in your care')
|
58
|
'<ul>'
|
59
|
cats = Category.select(order_by = 'name')
|
60
|
one = False
|
61
|
for c in cats:
|
62
|
l2 = [x for x in l if x[0].category_id == c.id]
|
63
|
if not l2:
|
64
|
continue
|
65
|
'<li>%s</li>' % c.name
|
66
|
'<ul>'
|
67
|
for formdef, no_pending, no_total in l2:
|
68
|
'<li><a href="%s/pending">%s</a>' % (formdef.url_name, formdef.name)
|
69
|
_(': %(pending)s open on %(total)s') % {'pending': no_pending,
|
70
|
'total': no_total}
|
71
|
'</li>'
|
72
|
one = True
|
73
|
'</ul>'
|
74
|
|
75
|
l2 = [x for x in l if not x[0].category_id]
|
76
|
if l2:
|
77
|
if one:
|
78
|
'<li>%s</li>' % _('Misc')
|
79
|
'<ul>'
|
80
|
for formdef, no_pending, no_total in l2:
|
81
|
'<li><a href="%s/pending">%s</a>' % (formdef.url_name, formdef.name)
|
82
|
_(': %(pending)s open on %(total)s') % {'pending': no_pending,
|
83
|
'total': no_total}
|
84
|
'</li>'
|
85
|
if one:
|
86
|
'</ul>'
|
87
|
'</ul>'
|
88
|
'</div>'
|
89
|
|
90
|
get_publisher_class().backoffice_directory_class = BackofficeRootDirectory
|
91
|
|