From d285b5da6b315ec41b94af5e4e01ed90a7cbdfae Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Tue, 3 Jan 2017 09:37:02 +0100
Subject: [PATCH] OO-2427: only show the delete action if there is an
 efficiency statement to delete

---
 ...eAndEfficiencyStatementListController.java | 28 +++++++-------
 ...ficateAndEfficiencyStatementListModel.java | 38 ++++++++++++++-----
 2 files changed, 42 insertions(+), 24 deletions(-)

diff --git a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java
index 26853cec4e2..e1483b33aa4 100644
--- a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java
+++ b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java
@@ -33,6 +33,7 @@ import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement;
 import org.olat.core.gui.components.form.flexible.elements.FormLink;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
 import org.olat.core.gui.components.form.flexible.impl.FormEvent;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.BooleanCellRenderer;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiCellRenderer;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
@@ -182,22 +183,19 @@ public class CertificateAndEfficiencyStatementListController extends FormBasicCo
 		}
 		
 		FlexiTableColumnModel tableColumnModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
-		tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.displayName.i18n(), Cols.displayName.ordinal(),
-				true, Cols.displayName.name()));
-		tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.score.i18n(), Cols.score.ordinal(),
-				true, Cols.score.name()));
-		tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.passed.i18n(), Cols.passed.ordinal(),
-				true, Cols.passed.name(), new PassedCellRenderer()));
+		tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.displayName));
+		tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.score));
+		tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.passed, new PassedCellRenderer()));
 		tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.header.show",
 				translate("table.header.show"), CMD_SHOW));
-		tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.lastModified.i18n(), Cols.lastModified.ordinal(),
-				true, Cols.lastModified.name()));
-		tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.certificate.i18n(), Cols.certificate.ordinal(),
-				true, Cols.certificate.name(), new DownloadCertificateCellRenderer(assessedIdentity)));
+		tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.lastModified));
+		tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.certificate, new DownloadCertificateCellRenderer(assessedIdentity)));
 		tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.header.launchcourse",
 				translate("table.header.launchcourse"), CMD_LAUNCH_COURSE));
-		tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.header.delete",
-				translate("table.action.delete"), CMD_DELETE));
+		
+		DefaultFlexiColumnModel deleteColumn = new DefaultFlexiColumnModel(Cols.deleteEfficiencyStatement.i18nHeaderKey(), Cols.deleteEfficiencyStatement.ordinal(), CMD_DELETE,
+				new BooleanCellRenderer(new StaticFlexiCellRenderer(translate("table.action.delete"), CMD_DELETE), null));
+		tableColumnModel.addFlexiColumnModel(deleteColumn);
 		
 		//artefact
 		if(portfolioV2Module.isEnabled()) {
@@ -331,8 +329,10 @@ public class CertificateAndEfficiencyStatementListController extends FormBasicCo
 	
 	private void doDelete(Long efficiencyStatementKey) {
 		UserEfficiencyStatementLight efficiencyStatement = esm.getUserEfficiencyStatementLightByKey(efficiencyStatementKey);
-		esm.deleteEfficiencyStatement(efficiencyStatement);
-
+		if(efficiencyStatement != null) {
+			esm.deleteEfficiencyStatement(efficiencyStatement);
+		}
+		
 		loadModel();
 		tableEl.reset();
 		showInfo("info.efficiencyStatement.deleted");
diff --git a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListModel.java b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListModel.java
index 2c9ce688edf..424c95f719c 100644
--- a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListModel.java
+++ b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListModel.java
@@ -25,6 +25,7 @@ import java.util.Locale;
 
 import org.olat.core.commons.persistence.SortKey;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiSortableColumnDef;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableDataModel;
 import org.olat.course.assessment.AssessmentHelper;
@@ -80,28 +81,45 @@ public class CertificateAndEfficiencyStatementListModel extends DefaultFlexiTabl
 			case certificate:
 				return statement.getCertificate();
 			case efficiencyStatement: return statement.getEfficiencyStatementKey();
+			case deleteEfficiencyStatement: return statement.getEfficiencyStatementKey() != null;
 		}
 		return null;
 	}
 
-	public static enum Cols {
+	public static enum Cols implements FlexiSortableColumnDef {
 		
-		displayName("table.header.course"),
-		score("table.header.score"),
-		passed("table.header.passed"),
-		lastModified("table.header.lastScoreDate"),
-		efficiencyStatement("table.header.certificate"),
-		certificate("table.header.certificate");
+		displayName("table.header.course", true),
+		score("table.header.score", true),
+		passed("table.header.passed", true),
+		lastModified("table.header.lastScoreDate", true),
+		efficiencyStatement("table.header.certificate", true),
+		certificate("table.header.certificate", true),
+		deleteEfficiencyStatement("table.action.delete", false);
 		
 		private final String i18n;
+		private final boolean sortable;
 		
-		private Cols(String i18n) {
+		private Cols(String i18n, boolean sortable) {
 			this.i18n = i18n;
+			this.sortable = sortable;
 		}
-		
-		public String i18n() {
+
+		@Override
+		public String i18nHeaderKey() {
 			return i18n;
 		}
+
+		@Override
+		public boolean sortable() {
+			return sortable;
+		}
+
+		@Override
+		public String sortKey() {
+			return name();
+		}
+		
+		
 	}
 	
 	public static class CertificateAndEfficiencyStatement {
-- 
GitLab