This is an automated email from the git hooks/post-receive script. New commit to branch feature/8157 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit ee339960af5c552da0d011b58580d6368d503bf9 Author: Kevin Morin <morin@codelutin.com> Date: Fri Apr 1 15:45:49 2016 +0200 ajout de l'action de rapport de prélèvement pour la campagne (refs #8157) --- .../fr/ifremer/tutti/ui/swing/TuttiUIContext.java | 5 + .../ui/swing/content/home/SelectCruiseUI.jaxx | 1 + .../ui/swing/content/home/SelectCruiseUI.jcss | 10 +- .../CalcifiedPiecesSamplingReportAction.java | 117 +++++++++++++++++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 10 ++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 10 ++ 6 files changed, 152 insertions(+), 1 deletion(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java index 58bbab6..ea9de60 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java @@ -39,6 +39,7 @@ import fr.ifremer.tutti.service.catches.WeightCleaningService; import fr.ifremer.tutti.service.catches.WeightComputingService; import fr.ifremer.tutti.service.catches.multipost.MultiPostExportService; import fr.ifremer.tutti.service.catches.multipost.MultiPostImportService; +import fr.ifremer.tutti.service.export.cps.CalcifiedPiecesSamplingExportService; import fr.ifremer.tutti.service.export.pdf.CatchesPdfExportService; import fr.ifremer.tutti.service.export.sumatra.CatchesSumatraExportService; import fr.ifremer.tutti.service.export.toconfirmreport.ToConfirmReportService; @@ -750,6 +751,10 @@ public class TuttiUIContext extends AbstractBean implements Closeable, UIMessage return serviceContext.getService(CatchesSumatraExportService.class); } + public CalcifiedPiecesSamplingExportService getCalcifiedPiecesSamplingExportService() { + return serviceContext.getService(CalcifiedPiecesSamplingExportService.class); + } + public MultiPostImportService getMultiPostImportService() { return serviceContext.getService(MultiPostImportService.class); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jaxx index 0e049d5..c14782f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jaxx @@ -65,6 +65,7 @@ <JButton id='editCruiseButton'/> <JButton id='sendCruiseReportButton'/> <JButton id='exportCruiseForSumatraButton'/> + <JButton id='calcifiedPiecesSamplingReportButton'/> <JButton id='speciesToConfirmReportForCruiseButton'/> <JButton id='newProtocolButton'/> <JButton id='importProtocolButton'/> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jcss index 1582844..e77fc74 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jcss +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/SelectCruiseUI.jcss @@ -90,7 +90,7 @@ BeanFilterableComboBox { #editCruiseComboBox { enabled: {model.isProgramFound() && model.isCruiseFound()}; - _comboboxActions: {Arrays.asList(editCruiseButton, sendCruiseReportButton, exportCruiseForSumatraButton, speciesToConfirmReportForCruiseButton)}; + _comboboxActions: {Arrays.asList(editCruiseButton, sendCruiseReportButton, exportCruiseForSumatraButton, calcifiedPiecesSamplingReportButton, speciesToConfirmReportForCruiseButton)}; } #editCruiseButton { @@ -118,6 +118,14 @@ BeanFilterableComboBox { _help: {"tutti.selectCruise.action.exportCruiseForSumatra.help"}; } +#calcifiedPiecesSamplingReportButton { + actionIcon: report; + text: "tutti.selectCruise.action.calcifiedPiecesSamplingReport"; + toolTipText: "tutti.selectCruise.action.calcifiedPiecesSamplingReport.tip"; + _applicationAction: {fr.ifremer.tutti.ui.swing.content.home.actions.CalcifiedPiecesSamplingReportAction.class}; + _help: {"tutti.selectCruise.action.calcifiedPiecesSamplingReport.help"}; +} + #speciesToConfirmReportForCruiseButton { actionIcon: report; text: "tutti.selectCruise.action.speciesToConfirmReportForCruise"; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/actions/CalcifiedPiecesSamplingReportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/actions/CalcifiedPiecesSamplingReportAction.java new file mode 100644 index 0000000..d898c18 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/home/actions/CalcifiedPiecesSamplingReportAction.java @@ -0,0 +1,117 @@ +package fr.ifremer.tutti.ui.swing.content.home.actions; + +import com.google.common.base.Preconditions; +import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.service.export.cps.CalcifiedPiecesSamplingExportService; +import fr.ifremer.tutti.service.sampling.CruiseSamplingCacheLoader; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import fr.ifremer.tutti.ui.swing.content.actions.AbstractMainUITuttiAction; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.DateUtil; + +import java.io.File; +import java.util.Date; + +import static org.nuiton.i18n.I18n.t; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.5 + */ +public class CalcifiedPiecesSamplingReportAction extends AbstractMainUITuttiAction { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(CalcifiedPiecesSamplingReportAction.class); + + protected File file; + +// protected SumatraExportResult sumatraExportResult; + + public CalcifiedPiecesSamplingReportAction(MainUIHandler handler) { + super(handler, false); + } + + @Override + public boolean prepareAction() throws Exception { + + boolean doAction = super.prepareAction(); + + if (doAction && !getDataContext().isProtocolFilled()) { + displayErrorMessage( + t("tutti.exportCpsCsv.title.missing.protocol"), + t("tutti.exportCpsCsv.message.missing.protocol") + ); + doAction = false; + } + + if (doAction && !getDataContext().getProtocol().isUseCalcifiedPieceSampling()) { + displayErrorMessage( + t("tutti.exportCpsCsv.title.sampling.notActivated"), + t("tutti.exportCpsCsv.message.sampling.notActivated") + ); + doAction = false; + } + + if (doAction) { + + String date = DateUtil.formatDate(new Date(), "dd-MM-yyyy"); + String exportFilename = t("tutti.exportCpsCsv.fileName", getDataContext().getCruise().getName(), date); + + // choose file to export + file = saveFile( + exportFilename, + "csv", + t("tutti.exportCpsCsv.title.choose.exportFile"), + t("tutti.exportCpsCsv.action.chooseFile"), + "^.+\\.csv$", t("tutti.common.file.csv") + ); + doAction = file != null; + } + return doAction; + } + + @Override + public void doAction() throws Exception { + Cruise cruise = getDataContext().getCruise(); + Preconditions.checkNotNull(cruise); + Preconditions.checkNotNull(file); + + if (log.isInfoEnabled()) { + log.info("Will export cps for cruise " + cruise.getId() + + " to file: " + file); + } + ProgressionModel pm = new ProgressionModel(); + setProgressionModel(pm); + + long cruiseFishingOperationIds = getDataContext().getCruiseFishingOperationIds().stream().count(); + pm.setTotal((int) (1 + cruiseFishingOperationIds)); + + if (!getDataContext().isCruiseSamplingCacheLoaded()) { + CruiseSamplingCacheLoader cruiseSamplingCacheLoader = new CruiseSamplingCacheLoader(getContext().getPersistenceService(), + getContext().getDecoratorService(), getProgressionModel()); + getDataContext().loadCruiseSamplingCache(cruiseSamplingCacheLoader); + } + + + // export sampling report + + CalcifiedPiecesSamplingExportService service = getContext().getCalcifiedPiecesSamplingExportService(); + service.exportCruiseCalcifiedPiecesSamplingsReport(file, pm); + } + + @Override + public void postSuccessAction() { + super.postSuccessAction(); + sendMessage(t("tutti.exportCpsCsv.action.success", file)); + } + + @Override + public void releaseAction() { + file = null; + super.releaseAction(); + } + +} diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index 3a279cf..3d5e6fe 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -1682,6 +1682,14 @@ tutti.error.update.bad.url.syntax= tutti.error.update.could.not.found.url= tutti.error.update.could.not.reach.url= tutti.error.write.startActionFile=could not write action content to file %s +tutti.exportCpsCsv.action.chooseFile= +tutti.exportCpsCsv.action.success= +tutti.exportCpsCsv.fileName= +tutti.exportCpsCsv.message.missing.protocol= +tutti.exportCpsCsv.message.sampling.notActivated= +tutti.exportCpsCsv.title.choose.exportFile= +tutti.exportCpsCsv.title.missing.protocol= +tutti.exportCpsCsv.title.sampling.notActivated= tutti.exportCruise.action.computeNbSteps= tutti.exportCruise.action.exportErrors= tutti.exportCruise.action.success= @@ -2356,6 +2364,8 @@ tutti.rtpEdit.askCancelEditBeforeLeaving= tutti.rtpEdit.askSaveBeforeLeaving= tutti.rtpEdit.title= tutti.selectBenthos.title= +tutti.selectCruise.action.calcifiedPiecesSamplingReport= +tutti.selectCruise.action.calcifiedPiecesSamplingReport.tip= tutti.selectCruise.action.chooseCruiseExportFile= tutti.selectCruise.action.chooseProgramExportFile= tutti.selectCruise.action.cloneProtocol= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index 343d943..4fba820 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -1568,6 +1568,14 @@ tutti.error.update.bad.url.syntax=Mise à jour impossible (le format de l'url <s tutti.error.update.could.not.found.url=Mise à jour impossible (l'url <strong>%s</strong> n'existe pas) tutti.error.update.could.not.reach.url=Mise à jour impossible (l'url <strong>%s</strong> n'est pas joignable) tutti.error.write.startActionFile=impossible d'écrire dans le fichier %s +tutti.exportCpsCsv.action.chooseFile=Exporter +tutti.exportCpsCsv.action.success=Le rapport des prélèvements de la campagne a été exporté daans le fichier <strong>%s</strong>. +tutti.exportCpsCsv.fileName=Rapport_prelevement_%1$s_%2$s +tutti.exportCpsCsv.message.missing.protocol=<html><body>Pas de protocole renseigné, impossible d'exporter le rapport de prélèvement.</body></html> +tutti.exportCpsCsv.message.sampling.notActivated=<html><body>L'algorithme de prélèvement n'a pas été activé dans le protocole, impossible d'exporter le rapport de prélèvement.</body></html> +tutti.exportCpsCsv.title.choose.exportFile=Exporter le rapport de prélèvement +tutti.exportCpsCsv.title.missing.protocol=Pas de protocole renseigné +tutti.exportCpsCsv.title.sampling.notActivated=Algorithme de prélèvement non activé tutti.exportCruise.action.computeNbSteps=Calcul du nombre d'opérations à réaliser tutti.exportCruise.action.exportErrors=Des erreurs sont apparues pendant l'élévation des poids de la campagne <strong>%s</strong>.<br/>L'export a cependant été réalisé.<hr/>Erreur(s) rencontrée(s) \: <br/>%s tutti.exportCruise.action.success=La campagne <strong>%s</strong> a été exportée dans le fichier <strong>%s</strong>. @@ -2163,6 +2171,8 @@ tutti.rtpEdit.askCancelEditBeforeLeaving=Les relations taille-poids ne sont pas tutti.rtpEdit.askSaveBeforeLeaving=Des modifications n'ont pas été enregistrées tutti.rtpEdit.title=Relations taille-poids de l'espèce %s tutti.selectBenthos.title=Choisissez une espèce du benthos +tutti.selectCruise.action.calcifiedPiecesSamplingReport=Exporter le rapport de prélèvements +tutti.selectCruise.action.calcifiedPiecesSamplingReport.tip=Exporter le rapport de prélèvements tutti.selectCruise.action.chooseCruiseExportFile=Exporter tutti.selectCruise.action.chooseProgramExportFile=Exporter tutti.selectCruise.action.cloneProtocol=Cloner -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.