Improved assignments and motions pdf.

Load all users in pdfmake function - not in state resolver of
assignment list.
This commit is contained in:
Emanuel Schütze 2016-11-09 22:18:44 +01:00
parent 7069326655
commit ff359ea629
5 changed files with 104 additions and 71 deletions

View File

@ -12,8 +12,7 @@ angular.module('OpenSlidesApp.assignments.pdf', ['OpenSlidesApp.core.pdf'])
var createInstance = function(assignment) { var createInstance = function(assignment) {
//use the Predefined Functions to create the title //use the Predefined Functions to create the title
var title = PdfPredefinedFunctions.createTitle( var title = PdfPredefinedFunctions.createTitle(assignment.title);
gettextCatalog.getString("Election") + ": " + assignment.title);
//create the preamble //create the preamble
var createPreamble = function() { var createPreamble = function() {
@ -121,7 +120,7 @@ angular.module('OpenSlidesApp.assignments.pdf', ['OpenSlidesApp.core.pdf'])
text: gettextCatalog.getString("Ballot") + " " + (pollIndex+1), text: gettextCatalog.getString("Ballot") + " " + (pollIndex+1),
bold: true, bold: true,
style: 'textItem', style: 'textItem',
margin: [0,15,0,0] margin: [0, 15, 0, 0]
}); });
pollTableBody.push([ pollTableBody.push([
@ -150,17 +149,18 @@ angular.module('OpenSlidesApp.assignments.pdf', ['OpenSlidesApp.core.pdf'])
]); ]);
} else if (poll.pollmethod == 'yn') { } else if (poll.pollmethod == 'yn') {
pollTableBody.push([ pollTableBody.push([
{ electedCandidateLine(candidateName, pollOption, pollTableBody),
text: candidateName,
style: PdfPredefinedFunctions.flipTableRowStyle(pollTableBody.length)
},
{ {
text: [ text: [
{ {
text: votes[0].label + ": " + votes[0].value + " " + votes[0].percentStr + "\n" text: votes[0].label + ": " +
votes[0].value + " " +
votes[0].percentStr + "\n"
}, },
{ {
text: votes[1].label + ": " + votes[1].value + " " + votes[1].percentStr text: votes[1].label + ": " +
votes[1].value + " " +
votes[1].percentStr
} }
], ],
style: PdfPredefinedFunctions.flipTableRowStyle(pollTableBody.length) style: PdfPredefinedFunctions.flipTableRowStyle(pollTableBody.length)
@ -168,20 +168,23 @@ angular.module('OpenSlidesApp.assignments.pdf', ['OpenSlidesApp.core.pdf'])
]); ]);
} else if (poll.pollmethod == 'yna') { } else if (poll.pollmethod == 'yna') {
pollTableBody.push([ pollTableBody.push([
{ electedCandidateLine(candidateName, pollOption, pollTableBody),
text: candidateName,
style: PdfPredefinedFunctions.flipTableRowStyle(pollTableBody.length)
},
{ {
text: [ text: [
{ {
text: votes[0].label + ": " + votes[0].value + " " + votes[0].percentStr + "\n" text: votes[0].label + ": " +
votes[0].value + " " +
votes[0].percentStr + "\n"
}, },
{ {
text: votes[1].label + ": " + votes[1].value + " " + votes[1].percentStr + "\n" text: votes[1].label + ": " +
votes[1].value + " " +
votes[1].percentStr + "\n"
}, },
{ {
text: votes[2].label + ": " + votes[2].value + " " + votes[2].percentStr text: votes[2].label + ": " +
votes[2].value + " " +
votes[2].percentStr
} }
], ],
style: PdfPredefinedFunctions.flipTableRowStyle(pollTableBody.length) style: PdfPredefinedFunctions.flipTableRowStyle(pollTableBody.length)
@ -199,7 +202,7 @@ angular.module('OpenSlidesApp.assignments.pdf', ['OpenSlidesApp.core.pdf'])
style: 'tableConclude' style: 'tableConclude'
}, },
{ {
text: ""+voteNrValid, text: "" + voteNrValid,
style: 'tableConclude' style: 'tableConclude'
}, },
]); ]);
@ -212,7 +215,7 @@ angular.module('OpenSlidesApp.assignments.pdf', ['OpenSlidesApp.core.pdf'])
style: 'tableConclude' style: 'tableConclude'
}, },
{ {
text: ""+voteNrInVal, text: "" + voteNrInVal,
style: 'tableConclude' style: 'tableConclude'
}, },
]); ]);
@ -225,7 +228,7 @@ angular.module('OpenSlidesApp.assignments.pdf', ['OpenSlidesApp.core.pdf'])
style: 'tableConclude' style: 'tableConclude'
}, },
{ {
text: ""+voteNrTotal, text: "" + voteNrTotal,
style: 'tableConclude' style: 'tableConclude'
}, },
]); ]);
@ -244,19 +247,17 @@ angular.module('OpenSlidesApp.assignments.pdf', ['OpenSlidesApp.core.pdf'])
} }
}); });
//Add the Legend to the result body //Add the legend to the result body
resultBody.push({ if (assignment.polls.length > 0) {
text: "* = " + gettextCatalog.getString("is elected"), resultBody.push({
margin: [0,5,0,0], text: "* = " + gettextCatalog.getString("is elected"),
}); margin: [0, 5, 0, 0],
});
}
return resultBody; return resultBody;
}; };
var getTitle = function() {
return assignment.title;
};
var getContent = function() { var getContent = function() {
return [ return [
title, title,
@ -269,7 +270,7 @@ angular.module('OpenSlidesApp.assignments.pdf', ['OpenSlidesApp.core.pdf'])
return { return {
getContent: getContent, getContent: getContent,
getTitle: getTitle title: assignment.title
}; };
}; };
@ -288,15 +289,16 @@ angular.module('OpenSlidesApp.assignments.pdf', ['OpenSlidesApp.core.pdf'])
// use the Predefined Functions to create the title // use the Predefined Functions to create the title
var createTitle = function() { var createTitle = function() {
return { return {
text: gettextCatalog.getString("Election") + ": " + scope.assignment.title, text: scope.assignment.title,
style: 'title', style: 'title',
}; };
}; };
//function to create the poll hint //function to create the poll hint
var createPollHint = function() { var createPollHint = function() {
var description = poll.description ? ': ' + poll.description : '';
return { return {
text: gettextCatalog.getString("Ballot") + " " + pollNumber + ": " + poll.description, text: gettextCatalog.getString("Ballot") + " " + pollNumber + description,
style: 'description', style: 'description',
}; };
}; };
@ -364,7 +366,7 @@ angular.module('OpenSlidesApp.assignments.pdf', ['OpenSlidesApp.core.pdf'])
columns : [ columns : [
{ {
width: 1, width: 1,
margin: [0,marginTop], margin: [0, marginTop],
text: "" text: ""
}, },
{ {
@ -450,11 +452,14 @@ angular.module('OpenSlidesApp.assignments.pdf', ['OpenSlidesApp.core.pdf'])
.factory('AssignmentCatalogContentProvider', [ .factory('AssignmentCatalogContentProvider', [
'gettextCatalog', 'gettextCatalog',
'PdfPredefinedFunctions', 'PdfPredefinedFunctions',
function(gettextCatalog, PdfPredefinedFunctions) { 'Config',
function(gettextCatalog, PdfPredefinedFunctions, Config) {
var createInstance = function(allAssignmnets, Config) { var createInstance = function(allAssignmnets) {
var title = PdfPredefinedFunctions.createTitle(Config.get('assignments_pdf_title').value); var title = PdfPredefinedFunctions.createTitle(
gettextCatalog.getString(Config.get('assignments_pdf_title').value)
);
var createPreamble = function() { var createPreamble = function() {
var preambleText = Config.get('assignments_pdf_preamble').value; var preambleText = Config.get('assignments_pdf_preamble').value;
@ -475,10 +480,10 @@ angular.module('OpenSlidesApp.assignments.pdf', ['OpenSlidesApp.core.pdf'])
}; };
var toc = []; var toc = [];
angular.forEach(assignmentTitles, function(title, key) { angular.forEach(assignmentTitles, function(title) {
toc.push({ toc.push({
text: gettextCatalog.getString("Election") + " " + (key+1) + ": " + title, text: title,
style: "tableofcontent", style: "tableofcontent"
}); });
}); });
@ -495,7 +500,7 @@ angular.module('OpenSlidesApp.assignments.pdf', ['OpenSlidesApp.core.pdf'])
var assignmentTitles = []; var assignmentTitles = [];
angular.forEach(allAssignmnets, function(assignment, key) { angular.forEach(allAssignmnets, function(assignment, key) {
assignmentTitles.push(assignment.getTitle()); assignmentTitles.push(assignment.title);
assignmentContent.push(assignment.getContent()); assignmentContent.push(assignment.getContent());
if (key < allAssignmnets.length - 1) { if (key < allAssignmnets.length - 1) {
assignmentContent.push(PdfPredefinedFunctions.addPageBreak()); assignmentContent.push(PdfPredefinedFunctions.addPageBreak());

View File

@ -40,9 +40,6 @@ angular.module('OpenSlidesApp.assignments.site', [
assignments: function(Assignment) { assignments: function(Assignment) {
return Assignment.findAll(); return Assignment.findAll();
}, },
users: function(User) { //TODO: Load only related users cause of better performance
return User.findAll();
},
tags: function(Tag) { tags: function(Tag) {
return Tag.findAll(); return Tag.findAll();
}, },
@ -243,12 +240,12 @@ angular.module('OpenSlidesApp.assignments.site', [
'Projector', 'Projector',
'ProjectionDefault', 'ProjectionDefault',
'gettextCatalog', 'gettextCatalog',
'Config',
'AssignmentContentProvider', 'AssignmentContentProvider',
'AssignmentCatalogContentProvider', 'AssignmentCatalogContentProvider',
'PdfMakeDocumentProvider', 'PdfMakeDocumentProvider',
'User',
function($scope, ngDialog, AssignmentForm, Assignment, Tag, Agenda, phases, Projector, ProjectionDefault, function($scope, ngDialog, AssignmentForm, Assignment, Tag, Agenda, phases, Projector, ProjectionDefault,
gettextCatalog, Config, AssignmentContentProvider, AssignmentCatalogContentProvider, PdfMakeDocumentProvider) { gettextCatalog, AssignmentContentProvider, AssignmentCatalogContentProvider, PdfMakeDocumentProvider, User) {
Assignment.bindAll({}, $scope, 'assignments'); Assignment.bindAll({}, $scope, 'assignments');
Tag.bindAll({}, $scope, 'tags'); Tag.bindAll({}, $scope, 'tags');
$scope.$watch(function () { $scope.$watch(function () {
@ -349,17 +346,21 @@ angular.module('OpenSlidesApp.assignments.site', [
}; };
// create the PDF List // create the PDF List
$scope.makePDF_assignmentList = function () { $scope.makePDF_assignmentList = function () {
var filename = gettextCatalog.getString("Elections") + ".pdf"; User.findAll().then( function(users) {
var assignmentContentProviderArray = []; var filename = gettextCatalog.getString("Elections") + ".pdf";
var assignmentContentProviderArray = [];
//convert the filtered assignments to content providers //convert the filtered assignments to content providers
angular.forEach($scope.assignmentsFiltered, function(assignment) { angular.forEach($scope.assignmentsFiltered, function(assignment) {
assignmentContentProviderArray.push(AssignmentContentProvider.createInstance(assignment)); assignmentContentProviderArray.push(AssignmentContentProvider.createInstance(assignment));
});
var assignmentCatalogContentProvider =
AssignmentCatalogContentProvider.createInstance(assignmentContentProviderArray);
var documentProvider =
PdfMakeDocumentProvider.createInstance(assignmentCatalogContentProvider);
pdfMake.createPdf(documentProvider.getDocument()).download(filename);
}); });
var assignmentCatalogContentProvider = AssignmentCatalogContentProvider.createInstance(assignmentContentProviderArray, Config);
var documentProvider = PdfMakeDocumentProvider.createInstance(assignmentCatalogContentProvider);
pdfMake.createPdf(documentProvider.getDocument()).download(filename);
}; };
} }
]) ])

View File

@ -157,6 +157,7 @@ class ConfigHandler:
""" """
return ConfigStore.get_collection_string() return ConfigStore.get_collection_string()
config = ConfigHandler() config = ConfigHandler()
""" """
Final entry point to get an set config variables. To get a config variable Final entry point to get an set config variables. To get a config variable

View File

@ -15,8 +15,9 @@ angular.module('OpenSlidesApp.motions.pdf', ['OpenSlidesApp.core.pdf'])
var createInstance = function(converter, motion, $scope, User) { var createInstance = function(converter, motion, $scope, User) {
var header = PdfPredefinedFunctions.createTitle(gettextCatalog.getString("Motion") + " " + var identifier = motion.identifier ? ' ' + motion.identifier : '';
motion.identifier + ": " + motion.getTitle($scope.version)); var header = PdfPredefinedFunctions.createTitle(gettextCatalog.getString("Motion") + identifier +
': ' + motion.getTitle($scope.version));
// generates the text of the motion. Also septerates between line-numbers // generates the text of the motion. Also septerates between line-numbers
var textContent = function() { var textContent = function() {
@ -142,7 +143,7 @@ angular.module('OpenSlidesApp.motions.pdf', ['OpenSlidesApp.core.pdf'])
}; };
var getIdentifier = function() { var getIdentifier = function() {
return motion.identifier; return motion.identifier ? motion.identifier : '';
}; };
var getCategory = function() { var getCategory = function() {
@ -252,7 +253,8 @@ angular.module('OpenSlidesApp.motions.pdf', ['OpenSlidesApp.core.pdf'])
.factory('MotionCatalogContentProvider', [ .factory('MotionCatalogContentProvider', [
'gettextCatalog', 'gettextCatalog',
'PdfPredefinedFunctions', 'PdfPredefinedFunctions',
function(gettextCatalog, PdfPredefinedFunctions) { 'Config',
function(gettextCatalog, PdfPredefinedFunctions, Config) {
/** /**
* Constructor * Constructor
@ -263,21 +265,46 @@ angular.module('OpenSlidesApp.motions.pdf', ['OpenSlidesApp.core.pdf'])
*/ */
var createInstance = function(allMotions, $scope, User, Category) { var createInstance = function(allMotions, $scope, User, Category) {
var title = PdfPredefinedFunctions.createTitle("Motions"); var title = PdfPredefinedFunctions.createTitle(
gettextCatalog.getString(Config.get('motions_export_title').value)
);
var createTOContent = function(motionTitles) { var createPreamble = function() {
var preambleText = Config.get('motions_export_preamble').value;
if (preambleText) {
return {
text: preambleText,
style: "preamble"
};
} else {
return "";
}
};
var createTOContent = function() {
var heading = { var heading = {
text: gettextCatalog.getString("Table of contents"), text: gettextCatalog.getString("Table of contents"),
style: "heading", style: "heading"
}; };
var toc = []; var toc = [];
angular.forEach(motionTitles, function(title) { angular.forEach(allMotions, function(motion) {
toc.push({ var identifier = motion.getIdentifier() ? motion.getIdentifier() : '';
text: gettextCatalog.getString("Motion") + " " + title, toc.push(
style: "tableofcontent", {
}); columns: [
{
text: identifier,
style: 'tableofcontent',
width: 30
},
{
text: motion.getTitle(),
style: 'tableofcontent'
}
]
}
);
}); });
return [ return [
@ -288,7 +315,7 @@ 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 createTOCatergories = function() { var createTOCategories = function() {
if (Category.getAll().length > 0) { if (Category.getAll().length > 0) {
var heading = { var heading = {
text: gettextCatalog.getString("Categories"), text: gettextCatalog.getString("Categories"),
@ -329,10 +356,7 @@ angular.module('OpenSlidesApp.motions.pdf', ['OpenSlidesApp.core.pdf'])
// returns the pure content of the motion, parseable by makepdf // returns the pure content of the motion, parseable by makepdf
var getContent = function() { var getContent = function() {
var motionContent = []; var motionContent = [];
var motionTitles = [];
var motionCategories = [];
angular.forEach(allMotions, function(motion, key) { angular.forEach(allMotions, function(motion, key) {
motionTitles.push(motion.getIdentifier() + ": " + motion.getTitle());
motionContent.push(motion.getContent()); motionContent.push(motion.getContent());
if (key < allMotions.length - 1) { if (key < allMotions.length - 1) {
motionContent.push(PdfPredefinedFunctions.addPageBreak()); motionContent.push(PdfPredefinedFunctions.addPageBreak());
@ -341,8 +365,9 @@ angular.module('OpenSlidesApp.motions.pdf', ['OpenSlidesApp.core.pdf'])
return [ return [
title, title,
createTOCatergories(), createPreamble(),
createTOContent(motionTitles), createTOCategories(),
createTOContent(),
motionContent motionContent
]; ];
}; };

View File

@ -76,6 +76,7 @@ class Index:
return open_dir(path) return open_dir(path)
return self.create_index() return self.create_index()
index = Index() index = Index()