This is an automated email from the git hooks/post-receive script. New commit to branch feature/9052_add_totals_in_range_table in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit 43271c89ddc71f52cdc8cfe100dadac3a0a6410a Author: Kevin Morin <morin@codelutin.com> Date: Tue Feb 14 14:17:11 2017 +0100 fixes #9052 Ajouter une ligne "Totaux" dans le tableau des quantités par gamme sur les dossiers --- .../franciaflex/faxtomail/beans/Quantities.java | 33 +++++++++++++++ .../faxtomail/beans/QuantitiesByRange.java | 32 +++++++++++++++ .../persistence/entities/EmailTopiaDao.java | 48 +++++++++++++++++----- .../faxtomail/services/service/EmailService.java | 5 +-- .../services/service/EmailServiceImpl.java | 25 ++--------- .../services/service/EmailServiceTest.java | 13 +++--- .../demande/QuantitiesByRangeUIHandler.java | 2 +- .../actions/ComputeQuantitiesByRangeAction.java | 27 +++++++++--- .../i18n/faxtomail-ui-swing_fr_FR.properties | 1 + 9 files changed, 137 insertions(+), 49 deletions(-) diff --git a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/beans/Quantities.java b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/beans/Quantities.java new file mode 100644 index 0000000..ed15198 --- /dev/null +++ b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/beans/Quantities.java @@ -0,0 +1,33 @@ +package com.franciaflex.faxtomail.beans; + +/** + * @author Kevin Morin (Code Lutin) + * @since 2.2.3 + */ +public class Quantities { + + private final Long productQuantity; + + private final Long savQuantity; + + private final Long quotationQuantity; + + public Quantities(Long productQuantity, Long savQuantity, Long quotationQuantity) { + this.productQuantity = productQuantity; + this.savQuantity = savQuantity; + this.quotationQuantity = quotationQuantity; + } + + public Long getProductQuantity() { + return productQuantity; + } + + public Long getSavQuantity() { + return savQuantity; + } + + public Long getQuotationQuantity() { + return quotationQuantity; + } + +} diff --git a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/beans/QuantitiesByRange.java b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/beans/QuantitiesByRange.java new file mode 100644 index 0000000..b2ecdf9 --- /dev/null +++ b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/beans/QuantitiesByRange.java @@ -0,0 +1,32 @@ +package com.franciaflex.faxtomail.beans; + +import com.franciaflex.faxtomail.persistence.entities.Range; +import com.google.common.collect.ImmutableMap; + +import java.io.Serializable; +import java.util.Map; + +/** + * @author Kevin Morin (Code Lutin) + * @since 2.2.3 + */ +public class QuantitiesByRange implements Serializable { + + private final ImmutableMap<Range, Quantities> quantitiesByRange; + + private final Quantities totalQuantities; + + public QuantitiesByRange(Map<Range, Quantities> quantitiesByRange, Quantities totalQuantities) { + this.quantitiesByRange = ImmutableMap.copyOf(quantitiesByRange); + this.totalQuantities = totalQuantities; + } + + public Map<Range, Quantities> getQuantitiesByRange() { + return quantitiesByRange; + } + + public Quantities getTotalQuantities() { + return totalQuantities; + } + +} diff --git a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java index 5ce2399..ea39fa4 100644 --- a/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java +++ b/faxtomail-persistence/src/main/java/com/franciaflex/faxtomail/persistence/entities/EmailTopiaDao.java @@ -24,6 +24,8 @@ package com.franciaflex.faxtomail.persistence.entities; * #L% */ +import com.franciaflex.faxtomail.beans.Quantities; +import com.franciaflex.faxtomail.beans.QuantitiesByRange; import com.google.common.base.Function; import com.google.common.base.Objects; import com.google.common.base.Splitter; @@ -44,13 +46,14 @@ import org.nuiton.util.pagination.PaginationResult; import java.util.Calendar; import java.util.Collection; +import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.HashSet; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.TreeMap; public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { @@ -981,7 +984,7 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { return result; } - public Map<String, Long[]> computeQuantitiesByRange(List<MailFolder> folders) { + public QuantitiesByRange computeQuantitiesByRange(List<MailFolder> folders) { // this has been modifier from // SELECT range @@ -990,7 +993,7 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { // do to bug https://hibernate.atlassian.net/browse/HHH-1615 that can be reproduced // on sql server - String query = "SELECT range." + Range.PROPERTY_TOPIA_ID + "," + + String query = "SELECT range," + " SUM(rangeRow." + RangeRow.PROPERTY_PRODUCT_QUANTITY + ") AS prodQ," + " SUM(rangeRow." + RangeRow.PROPERTY_SAV_QUANTITY + ") AS savQ," + " SUM(rangeRow." + RangeRow.PROPERTY_QUOTATION_QUANTITY + ") AS quotQ" + @@ -1003,19 +1006,42 @@ public class EmailTopiaDao extends AbstractEmailTopiaDao<Email> { Map<String, Object> args = new HashMap<>(); args.put("folders", folders); - Map<String, Long[]> result = new LinkedHashMap<>(); + Map<Range, Quantities> quantitiesByRange = new TreeMap<>(new Comparator<Range>() { + @Override + public int compare(Range o1, Range o2) { + return o1.getLabel().compareTo(o2.getLabel()); + } + }); + Long productTotalQuantity = 0L; + Long savTotalQuantity = 0L; + Long quotationTotalQuantity = 0L; List<Object[]> queryResuts = findAll(query, args); for (Object[] queryResut : queryResuts) { - String range = (String) queryResut[0]; - Long[] sums = new Long[3]; - sums[0] = (Long) queryResut[1]; - sums[1] = (Long) queryResut[2]; - sums[2] = (Long) queryResut[3]; - result.put(range, sums); + Range range = (Range) queryResut[0]; + + Long productQuantity = (Long) queryResut[1]; + if (productQuantity != null) { + productTotalQuantity += productQuantity; + } + + Long savQuantity = (Long) queryResut[2]; + if (savQuantity != null) { + savTotalQuantity += savQuantity; + } + + Long quotationQuantity = (Long) queryResut[3]; + if (quotationQuantity != null) { + quotationTotalQuantity += quotationQuantity; + } + + Quantities quantities = new Quantities(productQuantity, savQuantity, quotationQuantity); + quantitiesByRange.put(range, quantities); } - return result; + Quantities totalQuantities = new Quantities(productTotalQuantity, savTotalQuantity, quotationTotalQuantity); + + return new QuantitiesByRange(quantitiesByRange, totalQuantities); } /* diff --git a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java index 76f4249..16d1ee1 100644 --- a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java +++ b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailService.java @@ -34,11 +34,11 @@ import com.franciaflex.faxtomail.persistence.entities.HistoryType; import com.franciaflex.faxtomail.persistence.entities.MailFolder; import com.franciaflex.faxtomail.persistence.entities.MailLock; import com.franciaflex.faxtomail.persistence.entities.OriginalEmail; -import com.franciaflex.faxtomail.persistence.entities.Range; import com.franciaflex.faxtomail.persistence.entities.Reply; import com.franciaflex.faxtomail.persistence.entities.ReplyContent; import com.franciaflex.faxtomail.persistence.entities.SearchFilter; import com.franciaflex.faxtomail.services.FaxToMailService; +import com.franciaflex.faxtomail.beans.QuantitiesByRange; import com.franciaflex.faxtomail.services.service.exceptions.AlreadyLockedMailException; import com.franciaflex.faxtomail.services.service.exceptions.FolderNotReadableException; import com.franciaflex.faxtomail.services.service.exceptions.InvalidClientException; @@ -58,7 +58,6 @@ import java.nio.charset.Charset; import java.util.Collection; import java.util.Date; import java.util.List; -import java.util.Map; import java.util.Set; /** @@ -84,7 +83,7 @@ public interface EmailService extends FaxToMailService { List<MailFolder> getChildrenRecursively(MailFolder folder); - Map<Range, Long[]> computeQuantitiesByRange(MailFolder rootFolder); + QuantitiesByRange computeQuantitiesByRange(MailFolder rootFolder); Email addToHistory(String emailId, HistoryType type, FaxToMailUser user, Date date, String... fields); diff --git a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java index 1a906ed..1db0638 100644 --- a/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java +++ b/faxtomail-service/src/main/java/com/franciaflex/faxtomail/services/service/EmailServiceImpl.java @@ -24,6 +24,7 @@ package com.franciaflex.faxtomail.services.service; * #L% */ +import com.franciaflex.faxtomail.beans.QuantitiesByRange; import com.franciaflex.faxtomail.persistence.entities.AbstractFaxToMailTopiaDao; import com.franciaflex.faxtomail.persistence.entities.Attachment; import com.franciaflex.faxtomail.persistence.entities.AttachmentFile; @@ -58,10 +59,8 @@ import com.franciaflex.faxtomail.persistence.entities.OriginalEmail; import com.franciaflex.faxtomail.persistence.entities.OriginalEmailTopiaDao; import com.franciaflex.faxtomail.persistence.entities.Priority; import com.franciaflex.faxtomail.persistence.entities.PriorityTopiaDao; -import com.franciaflex.faxtomail.persistence.entities.Range; import com.franciaflex.faxtomail.persistence.entities.RangeRow; import com.franciaflex.faxtomail.persistence.entities.RangeRowTopiaDao; -import com.franciaflex.faxtomail.persistence.entities.RangeTopiaDao; import com.franciaflex.faxtomail.persistence.entities.Reply; import com.franciaflex.faxtomail.persistence.entities.ReplyContent; import com.franciaflex.faxtomail.persistence.entities.ReplyContentTopiaDao; @@ -167,7 +166,6 @@ import java.sql.Statement; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.Comparator; import java.util.Date; import java.util.Enumeration; import java.util.HashMap; @@ -175,9 +173,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.Set; -import java.util.TreeMap; import java.util.UUID; import java.util.regex.Pattern; @@ -812,26 +808,11 @@ public class EmailServiceImpl extends FaxToMailServiceSupport implements EmailSe } @Override - public Map<Range, Long[]> computeQuantitiesByRange(MailFolder rootFolder) { + public QuantitiesByRange computeQuantitiesByRange(MailFolder rootFolder) { // get results by topia id List<MailFolder> folders = getChildrenRecursively(rootFolder); EmailTopiaDao emailDao = getPersistenceContext().getEmailDao(); - Map<String, Long[]> daoResult = emailDao.computeQuantitiesByRange(folders); - - // convert topiaId to entities - RangeTopiaDao rangeDao = getPersistenceContext().getRangeDao(); - Map<Range, Long[]> result = new TreeMap<Range, Long[]>(new Comparator<Range>() { - @Override - public int compare(Range o1, Range o2) { - return o1.getLabel().compareTo(o2.getLabel()); - } - }); - for (Entry<String, Long[]> entry : daoResult.entrySet()) { - Range range = rangeDao.forTopiaIdEquals(entry.getKey()).findUnique(); - result.put(range, entry.getValue()); - } - - return result; + return emailDao.computeQuantitiesByRange(folders); } @Override diff --git a/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java b/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java index cb6c74b..71d3acc 100644 --- a/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java +++ b/faxtomail-service/src/test/java/com/franciaflex/faxtomail/services/service/EmailServiceTest.java @@ -24,6 +24,8 @@ package com.franciaflex.faxtomail.services.service; * #L% */ +import com.franciaflex.faxtomail.beans.Quantities; +import com.franciaflex.faxtomail.beans.QuantitiesByRange; import com.franciaflex.faxtomail.persistence.entities.Attachment; import com.franciaflex.faxtomail.persistence.entities.AttachmentFile; import com.franciaflex.faxtomail.persistence.entities.DemandStatus; @@ -58,7 +60,6 @@ import java.io.InputStream; import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.Map; import java.util.Map.Entry; import java.util.Properties; import java.util.Set; @@ -223,14 +224,14 @@ public class EmailServiceTest extends AbstractFaxToMailServiceTest { MailFolderTopiaDao mailFolderDao = getServiceContext().getPersistenceContext().getMailFolderDao(); MailFolder cyril = mailFolderDao.forNameEquals("Cyril").findUnique(); - Map<Range, Long[]> quantitiesByRange = service.computeQuantitiesByRange(cyril); - Assert.assertEquals(4, quantitiesByRange.size()); + QuantitiesByRange quantitiesByRange = service.computeQuantitiesByRange(cyril); + Assert.assertEquals(4, quantitiesByRange.getQuantitiesByRange().size()); // recupere la premiere lignes - Entry<Range, Long[]> entry = quantitiesByRange.entrySet().iterator().next(); + Entry<Range, Quantities> entry = quantitiesByRange.getQuantitiesByRange().entrySet().iterator().next(); Assert.assertEquals("Bas de gamme", entry.getKey().getLabel()); - Assert.assertEquals(500, entry.getValue()[0].longValue()); - Assert.assertEquals(600, entry.getValue()[1].longValue()); + Assert.assertEquals(500, entry.getValue().getProductQuantity().longValue()); + Assert.assertEquals(600, entry.getValue().getSavQuantity().longValue()); // NPE : Assert.assertEquals(600, entry.getValue()[2].longValue()); } diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/QuantitiesByRangeUIHandler.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/QuantitiesByRangeUIHandler.java index 87d0c1b..042d212 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/QuantitiesByRangeUIHandler.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/QuantitiesByRangeUIHandler.java @@ -32,7 +32,7 @@ import org.jdesktop.swingx.table.DefaultTableColumnModelExt; import org.jdesktop.swingx.table.TableColumnModelExt; import org.nuiton.jaxx.application.swing.util.Cancelable; -import javax.swing.*; +import javax.swing.JComponent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; diff --git a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/ComputeQuantitiesByRangeAction.java b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/ComputeQuantitiesByRangeAction.java index 8575baa..a081491 100644 --- a/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/ComputeQuantitiesByRangeAction.java +++ b/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/actions/ComputeQuantitiesByRangeAction.java @@ -24,8 +24,11 @@ package com.franciaflex.faxtomail.ui.swing.content.demande.actions; * #L% */ +import com.franciaflex.faxtomail.beans.Quantities; +import com.franciaflex.faxtomail.beans.QuantitiesByRange; import com.franciaflex.faxtomail.persistence.entities.MailFolder; import com.franciaflex.faxtomail.persistence.entities.Range; +import com.franciaflex.faxtomail.persistence.entities.RangeImpl; import com.franciaflex.faxtomail.services.FaxToMailServiceContext; import com.franciaflex.faxtomail.ui.swing.actions.AbstractFaxToMailAction; import com.franciaflex.faxtomail.ui.swing.content.demande.QuantitiesByRangeUI; @@ -57,28 +60,29 @@ public class ComputeQuantitiesByRangeAction extends AbstractFaxToMailAction<Quan public void doAction() throws Exception { MailFolder folder = getModel().getRootFolder(); FaxToMailServiceContext serviceContext = getContext().newServiceContext(); - Map<Range, Long[]> quantitiesByRange = serviceContext.getEmailService().computeQuantitiesByRange(folder); + QuantitiesByRange quantitiesByRange = serviceContext.getEmailService().computeQuantitiesByRange(folder); List<RangeRowModel> rangeRows = new ArrayList<>(); - for (Range range : quantitiesByRange.keySet()) { + Map<Range, Quantities> quantitiesByRangeMap = quantitiesByRange.getQuantitiesByRange(); + for (Range range : quantitiesByRangeMap.keySet()) { RangeRowModel row = new RangeRowModel(); row.setRange(range); - Long[] quantities = quantitiesByRange.get(range); + Quantities quantities = quantitiesByRangeMap.get(range); - Long productQuantity = quantities[0]; + Long productQuantity = quantities.getProductQuantity(); if (productQuantity == null) { productQuantity = 0L; } row.setProductQuantity(productQuantity.intValue()); - Long savQuantity = quantities[1]; + Long savQuantity = quantities.getSavQuantity(); if (savQuantity == null) { savQuantity = 0L; } row.setSavQuantity(savQuantity.intValue()); - Long quotationQuantity = quantities[2]; + Long quotationQuantity = quantities.getQuotationQuantity(); if (quotationQuantity == null) { quotationQuantity = 0L; } @@ -86,6 +90,17 @@ public class ComputeQuantitiesByRangeAction extends AbstractFaxToMailAction<Quan rangeRows.add(row); } + + Quantities totalQuantities = quantitiesByRange.getTotalQuantities(); + RangeRowModel row = new RangeRowModel(); + Range total = new RangeImpl(); + total.setLabel(t("faxtomail.rangeRows.quantities.totals.label")); + row.setRange(total); + row.setProductQuantity(totalQuantities.getProductQuantity().intValue()); + row.setSavQuantity(totalQuantities.getSavQuantity().intValue()); + row.setQuotationQuantity(totalQuantities.getQuotationQuantity().intValue()); + rangeRows.add(row); + getModel().setRangeRows(rangeRows); } diff --git a/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties b/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties index 8eb8892..99ce390 100644 --- a/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties +++ b/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties @@ -268,6 +268,7 @@ faxtomail.pdfEditor.readPdf.error=Erreur lors de la lecture du PDF faxtomail.print.success.message=%s fichiers ont été imprimés faxtomail.quantitiesByRange.button.text=OK faxtomail.quantitiesByRange.title=Quantités par gamme +faxtomail.rangeRows.quantities.totals.label=Totaux faxtomail.rangeRows.table.header.commandNumber=N° commande / devis faxtomail.rangeRows.table.header.commandNumber.tip=N° commande / devis faxtomail.rangeRows.table.header.productColumn=Qté produits -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.