Merge pull request #3329 from FinnStutzenstein/category-sort-in-export

Add the option to sort the categories different in the motion export
This commit is contained in:
Norman Jäckel 2017-07-27 10:41:02 +02:00 committed by GitHub
commit f806dc4017
5 changed files with 38 additions and 14 deletions

View File

@ -30,7 +30,9 @@ Motions:
- Reworked DOCX export parser and added comments to DOCX [#3258]. - Reworked DOCX export parser and added comments to DOCX [#3258].
- New PDF export for personal note and comments [#3239]. - New PDF export for personal note and comments [#3239].
- Bugfix: Creating colliding change recommendation is now prevented - Bugfix: Creating colliding change recommendation is now prevented
on server side [#3304] on server side [#3304].
- Added config value for customize sorting of category list in
pdf/docx export [#3329].
Users: Users:
- User without permission to see users can now see agenda item speakers, - User without permission to see users can now see agenda item speakers,

View File

@ -253,3 +253,15 @@ def get_config_variables():
weight=375, weight=375,
group='Motions', group='Motions',
subgroup='Export') subgroup='Export')
yield ConfigVariable(
name='motions_export_category_sorting',
default_value='prefix',
input_type='choice',
label='Sort categories by',
choices=(
{'value': 'prefix', 'display_name': 'Prefix'},
{'value': 'name', 'display_name': 'Name'}),
weight=385,
group='Motions',
subgroup='Export')

View File

@ -22,7 +22,6 @@ angular.module('OpenSlidesApp.motions.docx', ['OpenSlidesApp.core.docx'])
var getData = function (motions, params) { var getData = function (motions, params) {
var data = {}; var data = {};
var categories = Category.getAll();
// header // header
var headerline1 = [ var headerline1 = [
Config.translate(Config.get('general_event_name').value), Config.translate(Config.get('general_event_name').value),
@ -39,9 +38,10 @@ angular.module('OpenSlidesApp.motions.docx', ['OpenSlidesApp.core.docx'])
data.preamble = Config.get('motions_export_preamble').value; data.preamble = Config.get('motions_export_preamble').value;
// categories // categories
var categories = getCategoriesData(motions);
data.has_categories = categories.length === 0 ? false : true; data.has_categories = categories.length === 0 ? false : true;
data.categories_translation = gettextCatalog.getString('Categories'); data.categories_translation = gettextCatalog.getString('Categories');
data.categories = getCategoriesData(categories); data.categories = categories;
data.no_categories = gettextCatalog.getString('No categories available.'); data.no_categories = gettextCatalog.getString('No categories available.');
data.pagebreak_main = categories.length === 0 ? '' : PAGEBREAK; data.pagebreak_main = categories.length === 0 ? '' : PAGEBREAK;
@ -58,13 +58,21 @@ angular.module('OpenSlidesApp.motions.docx', ['OpenSlidesApp.core.docx'])
}); });
}; };
var getCategoriesData = function (categories) { var getCategoriesData = function (motions) {
return _.map(categories, function (category) { var categories = _.map(motions, function (motion) {
if (motion.category) {
return { return {
prefix: category.prefix, prefix: motion.category.prefix,
name: category.name, name: motion.category.name,
}; };
}
}); });
// clear out 'undefined' and make the categories unique.
categories = _.uniqBy(_.filter(categories, function(category) {
return category;
}), 'prefix');
var sortKey = Config.get('motions_export_category_sorting').value;
return _.orderBy(categories, [sortKey]);
}; };
var getMotionShortData = function (motions) { var getMotionShortData = function (motions) {

View File

@ -712,21 +712,22 @@ angular.module('OpenSlidesApp.motions.pdf', ['OpenSlidesApp.core.pdf'])
// function to create the table of catergories (if any) // function to create the table of catergories (if any)
var createTOCategories = function() { var createTOCategories = function() {
var categories = []; var categories = [];
_.forEach(allMotions, function(motion) { _.forEach(allMotions, function (motion) {
var category = motion.getCategory(); var category = motion.getCategory();
if (category) { if (category) {
categories.push(category); categories.push(category);
} }
}); });
categories = _.uniqBy(categories, 'id'); var sortKey = Config.get('motions_export_category_sorting').value;
categories = _.orderBy(_.uniqBy(categories, 'id'), [sortKey]);
if (categories.length > 1) { if (categories.length > 1) {
var heading = { var heading = {
text: gettextCatalog.getString("Categories"), text: gettextCatalog.getString('Categories'),
style: "heading2" style: 'heading2',
}; };
var toc = []; var toc = [];
angular.forEach(_.orderBy(categories, ['prefix']), function(cat) { angular.forEach(categories, function(cat) {
toc.push( toc.push(
{ {
columns: [ columns: [

View File

@ -2260,6 +2260,7 @@ angular.module('OpenSlidesApp.motions.site', [
// subgroup PDF // subgroup PDF
gettext('Title for PDF and DOCX documents (all motions)'); gettext('Title for PDF and DOCX documents (all motions)');
gettext('Preamble text for PDF and DOCX documents (all motions)'); gettext('Preamble text for PDF and DOCX documents (all motions)');
gettext('Sort categories by');
// misc strings (used dynamically in templates by translate filter) // misc strings (used dynamically in templates by translate filter)
gettext('needed'); gettext('needed');