1827 |
1827 |
def listing_top_actions(self):
|
1828 |
1828 |
return ''
|
1829 |
1829 |
|
1830 |
|
def get_multi_actions(self, user, status_filter):
|
1831 |
|
global_actions = self.formdef.workflow.get_global_manual_actions()
|
|
1830 |
@classmethod
|
|
1831 |
def get_multi_actions(self, formdef, user, status_filter):
|
|
1832 |
global_actions = formdef.workflow.get_global_manual_actions()
|
1832 |
1833 |
|
1833 |
1834 |
if status_filter not in ('open', 'waiting', 'done', 'all'):
|
1834 |
1835 |
# when the listing is filtered on a specific status, include
|
1835 |
1836 |
# manual jumps with identifiers
|
1836 |
1837 |
try:
|
1837 |
|
status = self.formdef.workflow.get_status(status_filter)
|
|
1838 |
status = formdef.workflow.get_status(status_filter)
|
1838 |
1839 |
except KeyError:
|
1839 |
1840 |
status = None
|
1840 |
1841 |
else:
|
... | ... | |
1887 |
1888 |
if get_request().get_query():
|
1888 |
1889 |
qs = '?' + get_request().get_query()
|
1889 |
1890 |
|
1890 |
|
multi_actions = self.get_multi_actions(get_request().user,
|
1891 |
|
status_filter=selected_filter)
|
|
1891 |
multi_actions = self.get_multi_actions(
|
|
1892 |
self.formdef, get_request().user, status_filter=selected_filter)
|
1892 |
1893 |
multi_form = Form(id='multi-actions')
|
1893 |
1894 |
for action in multi_actions:
|
1894 |
1895 |
attrs = {}
|
... | ... | |
1947 |
1948 |
return r.getvalue()
|
1948 |
1949 |
|
1949 |
1950 |
def submit_multi(self, action, selected_filter, query, criterias):
|
1950 |
|
class ActionJob(object):
|
1951 |
|
def __init__(self, formdef, query_string, action, item_ids):
|
1952 |
|
self.formdef = formdef
|
1953 |
|
self.query_string = query_string
|
1954 |
|
self.action = action
|
1955 |
|
self.item_ids = item_ids
|
1956 |
|
self.user = get_request().user
|
1957 |
|
|
1958 |
|
def execute(self, job=None):
|
1959 |
|
# sort formdatas so we know for sure the processing order
|
1960 |
|
formdatas = self.formdef.data_class().get_ids(
|
1961 |
|
item_ids,
|
1962 |
|
order_by='receipt_time')
|
1963 |
|
job.completion_status = '{}/{}'.format(0, len(formdatas))
|
1964 |
|
job.store()
|
1965 |
|
publisher = get_publisher()
|
1966 |
|
if formdatas:
|
1967 |
|
oldest_lazy_form = formdatas[0].get_as_lazy()
|
1968 |
|
for i, formdata in enumerate(formdatas):
|
1969 |
|
publisher.substitutions.reset()
|
1970 |
|
publisher.substitutions.feed(publisher)
|
1971 |
|
publisher.substitutions.feed(self.user)
|
1972 |
|
publisher.substitutions.feed(self.formdef)
|
1973 |
|
publisher.substitutions.feed(formdata)
|
1974 |
|
publisher.substitutions.feed({
|
1975 |
|
'oldest_form': oldest_lazy_form,
|
1976 |
|
'mass_action_index': i,
|
1977 |
|
'mass_action_length': len(formdatas),
|
1978 |
|
})
|
1979 |
|
if getattr(self.action['action'], 'status_action', False):
|
1980 |
|
# manual jump action
|
1981 |
|
from wcs.wf.jump import jump_and_perform
|
1982 |
|
jump_and_perform(formdata, self.action['action'].action)
|
1983 |
|
else:
|
1984 |
|
# global action
|
1985 |
|
formdata.perform_global_action(self.action['action'].id, self.user)
|
1986 |
|
job.completion_status = '{}/{}'.format(i+1, len(formdatas))
|
1987 |
|
job.store()
|
1988 |
|
|
1989 |
1951 |
item_ids = get_request().form['select[]']
|
1990 |
1952 |
if '_all' in item_ids:
|
1991 |
1953 |
item_ids = FormDefUI(self.formdef).get_listing_item_ids(
|
1992 |
1954 |
selected_filter, user=get_request().user, query=query,
|
1993 |
1955 |
criterias=criterias)
|
1994 |
|
action_job = ActionJob(self.formdef, get_request().get_query(), action, item_ids)
|
|
1956 |
|
1995 |
1957 |
job = get_response().add_after_job(
|
1996 |
|
_('Executing task "%s" on forms') % action['action'].name,
|
1997 |
|
action_job.execute)
|
1998 |
|
job.query_string = get_request().get_query()
|
|
1958 |
MassActionAfterJob(
|
|
1959 |
label=_('Executing task "%s" on forms') % action['action'].name,
|
|
1960 |
formdef=self.formdef,
|
|
1961 |
user_id=get_request().user.id,
|
|
1962 |
status_filter=selected_filter,
|
|
1963 |
query_string=get_request().get_query(),
|
|
1964 |
action_id=action['action'].id,
|
|
1965 |
item_ids=item_ids))
|
1999 |
1966 |
job.store()
|
2000 |
1967 |
return redirect('./?job=%s' % job.id)
|
2001 |
1968 |
|
... | ... | |
3469 |
3436 |
return _('%(minutes)d minute(s) and %(seconds)d seconds') % {
|
3470 |
3437 |
'minutes': minutes, 'seconds': seconds}
|
3471 |
3438 |
return _('%d seconds') % seconds
|
|
3439 |
|
|
3440 |
|
|
3441 |
class MassActionAfterJob(AfterJob):
|
|
3442 |
def __init__(self, formdef, **kwargs):
|
|
3443 |
super().__init__(
|
|
3444 |
formdef_class=formdef.__class__,
|
|
3445 |
formdef_id=formdef.id,
|
|
3446 |
**kwargs)
|
|
3447 |
self.query_string = kwargs.get('query_string')
|
|
3448 |
|
|
3449 |
def execute(self):
|
|
3450 |
formdef = self.kwargs['formdef_class'].get(self.kwargs['formdef_id'])
|
|
3451 |
item_ids = self.kwargs['item_ids']
|
|
3452 |
action_id = self.kwargs['action_id']
|
|
3453 |
status_filter = self.kwargs['status_filter']
|
|
3454 |
user = get_publisher().user_class.get(self.kwargs['user_id'])
|
|
3455 |
|
|
3456 |
multi_actions = FormPage.get_multi_actions(formdef, user, status_filter)
|
|
3457 |
for action in multi_actions:
|
|
3458 |
if action['action'].id == action_id:
|
|
3459 |
break
|
|
3460 |
else:
|
|
3461 |
# action not found
|
|
3462 |
return
|
|
3463 |
|
|
3464 |
formdatas = formdef.data_class().get_ids(item_ids, order_by='receipt_time')
|
|
3465 |
self.completion_status = '{}/{}'.format(0, len(formdatas))
|
|
3466 |
self.store()
|
|
3467 |
|
|
3468 |
publisher = get_publisher()
|
|
3469 |
if formdatas:
|
|
3470 |
oldest_lazy_form = formdatas[0].get_as_lazy()
|
|
3471 |
for i, formdata in enumerate(formdatas):
|
|
3472 |
publisher.substitutions.reset()
|
|
3473 |
publisher.substitutions.feed(publisher)
|
|
3474 |
publisher.substitutions.feed(user)
|
|
3475 |
publisher.substitutions.feed(formdef)
|
|
3476 |
publisher.substitutions.feed(formdata)
|
|
3477 |
publisher.substitutions.feed({
|
|
3478 |
'oldest_form': oldest_lazy_form,
|
|
3479 |
'mass_action_index': i,
|
|
3480 |
'mass_action_length': len(formdatas),
|
|
3481 |
})
|
|
3482 |
if getattr(action['action'], 'status_action', False):
|
|
3483 |
# manual jump action
|
|
3484 |
from wcs.wf.jump import jump_and_perform
|
|
3485 |
jump_and_perform(formdata, action['action'].action)
|
|
3486 |
else:
|
|
3487 |
# global action
|
|
3488 |
formdata.perform_global_action(action['action'].id, user)
|
|
3489 |
self.completion_status = '{}/{}'.format(i + 1, len(formdatas))
|
|
3490 |
self.store()
|
3472 |
|
-
|