branch feature/9052_add_totals_in_range_table created (now 43271c8)
This is an automated email from the git hooks/post-receive script. New change to branch feature/9052_add_totals_in_range_table in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git at 43271c8 fixes #9052 Ajouter une ligne "Totaux" dans le tableau des quantités par gamme sur les dossiers This branch includes the following new commits: new 43271c8 fixes #9052 Ajouter une ligne "Totaux" dans le tableau des quantités par gamme sur les dossiers The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: 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 -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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>.
participants (1)
-
codelutin.com scm