prepare for multiactions
This commit is contained in:
parent
605f354a6d
commit
4d9b566aa5
|
@ -65,6 +65,12 @@
|
||||||
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
|
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<browser:page
|
||||||
|
name="multiactions"
|
||||||
|
class=".multiactions.MultiActionsView"
|
||||||
|
permission="zope2.View"
|
||||||
|
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
|
||||||
|
/>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
<browser:page
|
<browser:page
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
from Products.Five.browser import BrowserView
|
||||||
|
from plone import api
|
||||||
|
|
||||||
|
class MultiActionsView(BrowserView):
|
||||||
|
def __call__(self):
|
||||||
|
action = self.request.form['action'] # ex: process_without_comment
|
||||||
|
documents = self.request.form['documents[]']
|
||||||
|
if isinstance(documents, basestring):
|
||||||
|
documents = [documents]
|
||||||
|
for document_id in documents:
|
||||||
|
document = api.content.get(document_id)
|
||||||
|
api.content.transition(document, action)
|
||||||
|
document.reindexObject(idxs=['review_state'])
|
||||||
|
if action == 'to_process':
|
||||||
|
from pfwbged.policy.subscribers.mail import incoming_mail_attributed
|
||||||
|
incoming_mail_attributed(document, u'')
|
||||||
|
|
||||||
|
return 'OK'
|
|
@ -1,5 +1,5 @@
|
||||||
(function ($) {
|
(function ($) {
|
||||||
$.querywidget.updateSearch = function () {
|
$.querywidget.updateSearch = function (stay_on_page) {
|
||||||
var context_url = (function() {
|
var context_url = (function() {
|
||||||
var baseUrl, pieces;
|
var baseUrl, pieces;
|
||||||
baseUrl = $('base').attr('href');
|
baseUrl = $('base').attr('href');
|
||||||
|
@ -83,6 +83,9 @@
|
||||||
{},
|
{},
|
||||||
function (data) { results.html(data); });
|
function (data) { results.html(data); });
|
||||||
});
|
});
|
||||||
|
/*if (stay_on_page) {
|
||||||
|
querylist.push($('a.batch-link.current').data('query'));
|
||||||
|
}*/
|
||||||
query += querylist.join('&');
|
query += querylist.join('&');
|
||||||
query += '&sort_on=' + $('#sort_on').val();
|
query += '&sort_on=' + $('#sort_on').val();
|
||||||
if ($('#sort_order:checked').length > 0) {
|
if ($('#sort_order:checked').length > 0) {
|
||||||
|
@ -116,6 +119,7 @@
|
||||||
$.querywidget.updateExtraColumnsMenu();
|
$.querywidget.updateExtraColumnsMenu();
|
||||||
$.querywidget.updateTableHeaders();
|
$.querywidget.updateTableHeaders();
|
||||||
$.querywidget.updatePreviewLinks();
|
$.querywidget.updatePreviewLinks();
|
||||||
|
$.querywidget.updateMultiCheckboxes();
|
||||||
$.pfwbged.prepareLinearNavigation();
|
$.pfwbged.prepareLinearNavigation();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -133,6 +137,7 @@
|
||||||
$.querywidget.updateExtraColumnsMenu();
|
$.querywidget.updateExtraColumnsMenu();
|
||||||
$.querywidget.updateTableHeaders();
|
$.querywidget.updateTableHeaders();
|
||||||
$.querywidget.updatePreviewLinks();
|
$.querywidget.updatePreviewLinks();
|
||||||
|
$.querywidget.updateMultiCheckboxes();
|
||||||
$.pfwbged.prepareLinearNavigation();
|
$.pfwbged.prepareLinearNavigation();
|
||||||
});
|
});
|
||||||
return false;
|
return false;
|
||||||
|
@ -290,6 +295,55 @@
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$.querywidget.updateMultiCheckboxes = function () {
|
||||||
|
$('th span.colour-column-head').click(function(e) {
|
||||||
|
var $table = $(this).parents('table');
|
||||||
|
$table.find('td.colour-column input').click();
|
||||||
|
});
|
||||||
|
$('td.colour-column input').change(function(e) {
|
||||||
|
if ($(this).prop('checked')) {
|
||||||
|
$(this).parents('tr').addClass('selected');
|
||||||
|
} else {
|
||||||
|
$(this).parents('tr').removeClass('selected');
|
||||||
|
}
|
||||||
|
$('.multi-actions button').each(function(idx, elem) {
|
||||||
|
var action_status = $(elem).data('status');
|
||||||
|
var action_type = $(elem).data('type');
|
||||||
|
var selector = 'tr.selected.row-state-' + action_status;
|
||||||
|
if (action_type) {
|
||||||
|
selector = selector + '.row-type-' + action_type;
|
||||||
|
}
|
||||||
|
if ($(this).parents('div.table').find(selector).length) {
|
||||||
|
$(elem).show();
|
||||||
|
} else {
|
||||||
|
$(elem).hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
e.stopPropagation();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
$('.multi-actions button').on('click', function() {
|
||||||
|
var $div = $(this).parent();
|
||||||
|
var url = $(this).parent().data('actions-url');
|
||||||
|
var action = $(this).data('action');
|
||||||
|
var action_status = $(this).data('status');
|
||||||
|
var documents = Array();
|
||||||
|
$(this).parents('div.table').find('tr.selected.row-state-' + action_status + ' input').each(function(idx, elem) {
|
||||||
|
documents.push($(elem).data('value'));
|
||||||
|
});
|
||||||
|
$div.find('button').prop('disabled', true);
|
||||||
|
$.post(url, {'action': action, 'documents': documents }
|
||||||
|
).done(function() {
|
||||||
|
console.log('success');
|
||||||
|
console.log('xx:', $.querywidget.updateSearch);
|
||||||
|
$.querywidget.updateSearch(true);
|
||||||
|
}).fail(function() {
|
||||||
|
console.log('fail');
|
||||||
|
}).always(function() {
|
||||||
|
$div.find('button').prop('disabled', false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
}(jQuery));
|
}(jQuery));
|
||||||
|
|
||||||
function update_portaltypes()
|
function update_portaltypes()
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
# -*- coding: utf8 -*-
|
||||||
|
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
import json
|
import json
|
||||||
import datetime
|
import datetime
|
||||||
|
@ -182,6 +184,23 @@ class ResultsTable(BaseTable):
|
||||||
'title': _(u'Recipient(s)'),}]
|
'title': _(u'Recipient(s)'),}]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class ResultsDocumentsTable(ResultsTable):
|
||||||
|
|
||||||
|
def render(self):
|
||||||
|
portal_url = api.portal.get().portal_url()
|
||||||
|
return self.renderTable() + u"""
|
||||||
|
|
||||||
|
<div class="multi-actions" data-actions-url="%(portal_url)s/@@multiactions">
|
||||||
|
<button data-status="assigning" data-action="to_process">À traiter</button>
|
||||||
|
<button data-status="processing" data-action="to_considered">Pris en compte</button>
|
||||||
|
<button data-status="processing" data-action="to_noaction">Sans suite</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
""" % {'portal_url': portal_url}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ResultsTasksTable(TasksTable):
|
class ResultsTasksTable(TasksTable):
|
||||||
|
|
||||||
def updateBatch(self):
|
def updateBatch(self):
|
||||||
|
@ -205,6 +224,26 @@ class ResultsTasksTable(TasksTable):
|
||||||
def getPotentialExtraColumns(self):
|
def getPotentialExtraColumns(self):
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
def render(self):
|
||||||
|
portal_url = api.portal.get().portal_url()
|
||||||
|
#abandon ask-for-refusal attribute take-responsibility
|
||||||
|
|
||||||
|
return self.renderTable() + """
|
||||||
|
|
||||||
|
<div class="multi-actions" data-actions-url="%(portal_url)s/@@multiactions">
|
||||||
|
<button data-type="task" data-status="todo" data-action="take-responsibility">Prendre en charge</button>
|
||||||
|
<button data-type="task" data-status="in-progress" data-action="mark-as-done">Marquer comme fait </button>
|
||||||
|
<button data-type="information" data-status="todo" data-action="mark-as-done">Marquer comme lu</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
""" % {'portal_url': portal_url}
|
||||||
|
|
||||||
|
|
||||||
|
class ResultsOpinionsTable(ResultsTasksTable):
|
||||||
|
def render(self):
|
||||||
|
# no multiactions for opinions
|
||||||
|
return self.renderTable()
|
||||||
|
|
||||||
|
|
||||||
class ContactsTasksTable(ResultsTable):
|
class ContactsTasksTable(ResultsTable):
|
||||||
|
|
||||||
|
@ -379,19 +418,28 @@ def get_appropriate_table_class(context, query):
|
||||||
table_class = ResultsTable
|
table_class = ResultsTable
|
||||||
if parsed_query.get('portal_type'):
|
if parsed_query.get('portal_type'):
|
||||||
portal_types = parsed_query.get('portal_type').get('query')
|
portal_types = parsed_query.get('portal_type').get('query')
|
||||||
if portal_types is not None and not (set(portal_types) - set(['task', 'opinion',
|
if portal_types is None:
|
||||||
'validation', 'information'])):
|
return table_class
|
||||||
|
if not (set(portal_types) - set(['opinion'])):
|
||||||
|
# nothing but "opinions", use a more appropriate table
|
||||||
|
return ResultsOpinionsTable
|
||||||
|
if not (set(portal_types) - set(['task', 'opinion', 'validation', 'information'])):
|
||||||
# nothing but "tasks", use a more appropriate table
|
# nothing but "tasks", use a more appropriate table
|
||||||
table_class = ResultsTasksTable
|
return ResultsTasksTable
|
||||||
if portal_types is not None and not (set(portal_types) - set(['information'])):
|
if not (set(portal_types) - set(['information'])):
|
||||||
# nothing but "tasks", use a more appropriate table
|
# nothing but "informations", use a more appropriate table
|
||||||
table_class = ResultsInformationsTable
|
return ResultsInformationsTable
|
||||||
if portal_types is not None and not (set(portal_types) - set(['person', 'organization'])):
|
if not (set(portal_types) - set(['person', 'organization'])):
|
||||||
# nothing but "contacts", use a more appropriate table
|
# nothing but "contacts", use a more appropriate table
|
||||||
table_class = ContactsTasksTable
|
return ContactsTasksTable
|
||||||
if portal_types is not None and not (set(portal_types) - set(['pfwbgedfolder'])):
|
if not (set(portal_types) - set(['pfwbgedfolder'])):
|
||||||
# nothing but "folders", use a more appropriate table
|
# nothing but "folders", use a more appropriate table
|
||||||
table_class = ResultsFoldersTable
|
return ResultsFoldersTable
|
||||||
|
if not set(portal_types).intersection(set(['task', 'opinion',
|
||||||
|
'validation', 'information', 'person', 'organization',
|
||||||
|
'pfwbgedfolder'])):
|
||||||
|
# nothing but documents (hopefully)
|
||||||
|
return ResultsDocumentsTable
|
||||||
return table_class
|
return table_class
|
||||||
|
|
||||||
BATCH_SIZE = 10
|
BATCH_SIZE = 10
|
||||||
|
|
Reference in New Issue