branch feature/6116 updated (eaa28b6 -> d348a15)
This is an automated email from the git hooks/post-receive script. New change to branch feature/6116 in repository tutti. See http://git.codelutin.com/tutti.git from eaa28b6 ne pas mettre les lignes créées dans le rapport (fixes #6116) new 799b75f ajout des catégories meme si elles ne sont pas dans le fichier (refs #6116) new 144713e ajout des lots manquants lors de l'import (refs #6116) new 9989c2e ajout de la conf dans l'ui (fixes #6116) new d348a15 Merge branch 'feature/6116' of gitlab.nuiton.org:codelutin/tutti into feature/6116 The 4 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 d348a155982a4e859d0a3f38451ac735a708a257 Merge: eaa28b6 9989c2e Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 13 11:09:26 2016 +0100 Merge branch 'feature/6116' of gitlab.nuiton.org:codelutin/tutti into feature/6116 Conflicts: tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties commit 9989c2e8d16d54994e01faf9bfd270c91037641c Author: Kevin Morin <morin@codelutin.com> Date: Tue Jan 12 18:24:04 2016 +0100 ajout de la conf dans l'ui (fixes #6116) commit 144713e36face2264d566ba00f7d4e229e1e7943 Author: Kevin Morin <morin@codelutin.com> Date: Tue Jan 12 17:28:39 2016 +0100 ajout des lots manquants lors de l'import (refs #6116) commit 799b75f9749066eed9d90144212120381dc40eea Author: Kevin Morin <morin@codelutin.com> Date: Mon Jan 11 18:11:30 2016 +0100 ajout des catégories meme si elles ne sont pas dans le fichier (refs #6116) Summary of changes: -- 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/6116 in repository tutti. See http://git.codelutin.com/tutti.git commit 799b75f9749066eed9d90144212120381dc40eea Author: Kevin Morin <morin@codelutin.com> Date: Mon Jan 11 18:11:30 2016 +0100 ajout des catégories meme si elles ne sont pas dans le fichier (refs #6116) --- .../service/pupitri/PupitriSpeciesContext.java | 29 +++++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java index 30dbd99..c87d6da 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java @@ -145,7 +145,7 @@ public class PupitriSpeciesContext implements Serializable { public void addToSignContext(Signs sign, BoxType boxType, Float weight) { - PupitriSignContext signContext = getOrCreateSignContext(sign); + PupitriSignContext signContext = getOrCreateSignContext(sign, true); signContext.addWeight(weight); switch (boxType) { case SMALL: @@ -161,7 +161,7 @@ public class PupitriSpeciesContext implements Serializable { public void setMelagElevatedWeight(Signs melagElevatedSign, Float weight) { PupitriSignContext melagContext = getSignContext(Signs.MELAG); - PupitriSignContext pupitriSignContext = getOrCreateSignContext(melagElevatedSign); + PupitriSignContext pupitriSignContext = getOrCreateSignContext(melagElevatedSign, true); pupitriSignContext.addWeight(weight); //FIXME Check this??? pupitriSignContext.addNbBoxs(melagContext); @@ -175,7 +175,7 @@ public class PupitriSpeciesContext implements Serializable { PupitriSignContext melagContext = getSignContext(Signs.MELAG); - PupitriSignContext defaultSignContext = getOrCreateSignContext(Signs.DEFAULT); + PupitriSignContext defaultSignContext = getOrCreateSignContext(Signs.DEFAULT, true); defaultSignContext.addWeight(melagContext.getWeight()); //FIXME Check this??? defaultSignContext.addNbBoxs(melagContext); @@ -273,12 +273,33 @@ public class PupitriSpeciesContext implements Serializable { return signs.get(sign); } - private PupitriSignContext getOrCreateSignContext(Signs sign) { + private PupitriSignContext getOrCreateSignContext(Signs sign, boolean createOtherCategorySigns) { PupitriSignContext signContext = getSignContext(sign); if (signContext == null) { signContext = new PupitriSignContext(sign); signs.put(sign, signContext); } + + if (createOtherCategorySigns) { + // cf #6116 + + switch (sign) { + case MALE: + getOrCreateSignContext(Signs.FEMALE, false); + break; + case FEMALE: + getOrCreateSignContext(Signs.MALE, false); + break; + case BIG: + getOrCreateSignContext(Signs.SMALL, false); + break; + case SMALL: + getOrCreateSignContext(Signs.BIG, false); + break; + + } + } + return signContext; } -- 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/6116 in repository tutti. See http://git.codelutin.com/tutti.git commit 144713e36face2264d566ba00f7d4e229e1e7943 Author: Kevin Morin <morin@codelutin.com> Date: Tue Jan 12 17:28:39 2016 +0100 ajout des lots manquants lors de l'import (refs #6116) --- .../entities/protocol/TuttiProtocols.java | 31 ++++++ .../pupitri/CarrouselImportRequestResult.java | 8 +- .../service/pupitri/PupitriImportService.java | 109 ++++++++++++++++++--- .../service/pupitri/PupitriSpeciesContext.java | 53 +++++----- .../species/actions/ImportPupitriAction.java | 3 +- 5 files changed, 162 insertions(+), 42 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java index 42145e0..c2a0130 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/TuttiProtocols.java @@ -56,12 +56,14 @@ import org.nuiton.jaxx.application.ApplicationTechnicalException; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; +import javax.annotation.Nullable; import java.io.BufferedWriter; import java.io.File; import java.io.Reader; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -651,4 +653,33 @@ public class TuttiProtocols extends AbstractTuttiProtocols { return message; } + + public static Collection<String> getSurveyCodeWhoseCategoryIsMandatory(TuttiProtocol protocol, + final Caracteristic caracteristic) { + + Preconditions.checkNotNull(protocol); + Preconditions.checkNotNull(caracteristic); + + Collection<SpeciesProtocol> speciesProtocols = Collections2.filter(protocol.getSpecies(), + new Predicate<SpeciesProtocol>() { + + @Override + public boolean apply(@Nullable SpeciesProtocol input) { + List<Integer> mandatorySampleCategoryId = input.getMandatorySampleCategoryId(); + return mandatorySampleCategoryId != null + && mandatorySampleCategoryId.contains(caracteristic.getIdAsInt()); + } + }); + + Collection<String> surveyCodes = Collections2.transform(speciesProtocols, + new Function<SpeciesProtocol, String>() { + + @Override + public String apply(@Nullable SpeciesProtocol input) { + return input.getSpeciesSurveyCode(); + } + }); + + return new HashSet<>(surveyCodes); + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselImportRequestResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselImportRequestResult.java index 364bd4d..12ce5dc 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselImportRequestResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselImportRequestResult.java @@ -107,12 +107,16 @@ public class CarrouselImportRequestResult { notImportedSpeciesIds.add(speciesId); } - public PupitriSpeciesContext getOrCreateCatch(List<Species> speciesList, boolean sorted) { + public PupitriSpeciesContext getOrCreateCatch(List<Species> speciesList, + boolean createMissingSigns, + boolean sorted) { // on utilise la première espèce trouvée dans la liste des candidates //FIXME Bien s'assurer que cela est ok Species species = speciesList.get(0); - PupitriSpeciesContext pupitriSpeciesContext = new PupitriSpeciesContext(species, sorted); + PupitriSpeciesContext pupitriSpeciesContext = new PupitriSpeciesContext(species, + createMissingSigns, + sorted); int catchIndex = catches.indexOf(pupitriSpeciesContext); if (catchIndex >= 0) { pupitriSpeciesContext = catches.get(catchIndex); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java index 1a73504..3113694 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.service.pupitri; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmId; @@ -35,6 +36,8 @@ import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchs; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValues; @@ -72,6 +75,7 @@ import java.io.Reader; import java.io.Serializable; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Locale; @@ -148,11 +152,27 @@ public class PupitriImportService extends AbstractTuttiService { File carrouselFile, FishingOperation operation, CatchBatch catchBatch) { + return importPupitri(trunkFile, carrouselFile, operation, catchBatch, false); + } + + /** + * @param trunkFile incoming trunk file + * @param carrouselFile incoming carroussle file + * @param operation target operation + * @param catchBatch target catch batch + * @param importMissingCategoryBatches import or not empty batches for missing sex or size batches + * @return the number of rows of the .car file which have not been imported + */ + public PupitriImportResult importPupitri(File trunkFile, + File carrouselFile, + FishingOperation operation, + CatchBatch catchBatch, + boolean importMissingCategoryBatches) { PupitriImportResult result = new PupitriImportResult(); importPupitriTrunk(result, trunkFile, operation); - importPupitriCarrousel(result, carrouselFile, operation); + importPupitriCarrousel(result, carrouselFile, operation, importMissingCategoryBatches); if (result.isFishingOperationFound()) { @@ -166,7 +186,7 @@ public class PupitriImportService extends AbstractTuttiService { try { // persistence des lots - savePupitriImportResult(result, operation, catchBatch); + savePupitriImportResult(result, operation, catchBatch, importMissingCategoryBatches); // ajout des pièces-jointes addFileAsAttachment(trunkFile, catchBatch); @@ -214,7 +234,7 @@ public class PupitriImportService extends AbstractTuttiService { } - protected void addCatchEntry(TaxonCache taxonCache, PupitriSpeciesContext aCatch, PupitriImportReportModel reportModel) { + protected void addCatchEntry(TaxonCache taxonCache, PupitriSpeciesContext aCatch, PupitriImportReportModel reportModel) { Species species = aCatch.getSpecies(); taxonCache.load(species); @@ -308,7 +328,10 @@ public class PupitriImportService extends AbstractTuttiService { } - protected void importPupitriCarrousel(PupitriImportResult result, File carrouselFile, FishingOperation operation) { + protected void importPupitriCarrousel(PupitriImportResult result, + File carrouselFile, + FishingOperation operation, + boolean importMissingCategoryBatches) { if (log.isInfoEnabled()) { log.info("Will import pupitri operation [" + operation.toString() + @@ -316,14 +339,18 @@ public class PupitriImportService extends AbstractTuttiService { } // process import file - CarrouselImportRequestResult carrouselImportRequestResult = processCarrouselImportFile(carrouselFile, operation); + CarrouselImportRequestResult carrouselImportRequestResult = processCarrouselImportFile(carrouselFile, + operation, + importMissingCategoryBatches); // save it to global result result.flushCarrouselResult(carrouselImportRequestResult); } - protected CarrouselImportRequestResult processCarrouselImportFile(File carrouselFile, FishingOperation operation) { + protected CarrouselImportRequestResult processCarrouselImportFile(File carrouselFile, + FishingOperation operation, + boolean importMissingCategoryBatches) { // get the map of species by survey code or reftax code ListMultimap<String, Species> speciesBySurveyCode = ArrayListMultimap.create(); @@ -343,7 +370,7 @@ public class PupitriImportService extends AbstractTuttiService { for (CarrouselRow bean : importer) { - importCarrouselRow(result, operation, bean); + importCarrouselRow(result, operation, bean, importMissingCategoryBatches); } } @@ -362,7 +389,10 @@ public class PupitriImportService extends AbstractTuttiService { } - protected void importCarrouselRow(CarrouselImportRequestResult result, FishingOperation operation, CarrouselRow bean) { + protected void importCarrouselRow(CarrouselImportRequestResult result, + FishingOperation operation, + CarrouselRow bean, + boolean importMissingCategoryBatches) { if (!bean.acceptOperation(operation)) { @@ -410,7 +440,9 @@ public class PupitriImportService extends AbstractTuttiService { // creation d'un nouveau lot (par rapport au tuple (espece, trie)) // ou bien recuperation d'un lot deja existant - PupitriSpeciesContext pupitriSpeciesContext = result.getOrCreateCatch(speciesList, sorted); + PupitriSpeciesContext pupitriSpeciesContext = result.getOrCreateCatch(speciesList, + importMissingCategoryBatches, + sorted); // ajout des données (type de box, poids) au signe donne dans le lot pupitriSpeciesContext.addToSignContext(bean.getSign(), bean.getBoxType(), beanWeight); @@ -421,7 +453,8 @@ public class PupitriImportService extends AbstractTuttiService { protected void savePupitriImportResult(PupitriImportResult result, FishingOperation operation, - CatchBatch catchBatch) { + CatchBatch catchBatch, + boolean importMissingCategoryBatches) { catchBatch.setCatchTotalSortedTremisWeight(result.getSortedWeight()); catchBatch.setCatchTotalRejectedWeight(result.getRejectedWeight()); @@ -437,6 +470,25 @@ public class PupitriImportService extends AbstractTuttiService { // insert all imported species batches + TuttiProtocol protocol = dataContext.getProtocol(); + + // especes à sexer + Collection<String> surveyCodesToSex = + TuttiProtocols.getSurveyCodeWhoseCategoryIsMandatory(protocol, + persistenceService.getSexCaracteristic()); + + // especes à trier par taille + Collection<String> surveyCodesToSize = + TuttiProtocols.getSurveyCodeWhoseCategoryIsMandatory(protocol, + persistenceService.getSizeCategoryCaracteristic()); + + // especes à sexer et trier par taille + Collection<String> surveyCodesToSexAndSize = CollectionUtils.intersection(surveyCodesToSex, surveyCodesToSize); + + // on ne veut que les espèces qu'il faut soit sexer soit trier par taille + surveyCodesToSex.removeAll(surveyCodesToSexAndSize); + surveyCodesToSize.removeAll(surveyCodesToSexAndSize); + String melagComment = result.getMelagComment(); Decorator<Species> speciesDecorator = decoratorService.getDecoratorByType(Species.class); @@ -469,7 +521,6 @@ public class PupitriImportService extends AbstractTuttiService { for (Signs signs : pupitriSpeciesContext.getSigns()) { - boolean addMelagComment = pupitriSpeciesContext.isAddMelagComment(signs); float catchWeight = pupitriSpeciesContext.getWeight(signs); @@ -500,7 +551,6 @@ public class PupitriImportService extends AbstractTuttiService { log.info("Create a unique batch for species " + speciesStr + " with total weight: " + totalWeight); } - SpeciesBatch batch = createSpeciesBatch(operation, species, totalWeight, @@ -515,7 +565,40 @@ public class PupitriImportService extends AbstractTuttiService { batch.setComment(melagComment); } - persistenceService.createSpeciesBatch(batch, null, true); + batch = persistenceService.createSpeciesBatch(batch, null, true); + + if (importMissingCategoryBatches) { + + String parentBatchId = batch.getId(); + String speciesId = species.getSurveyCode(); + + List<Signs> signs2add = null; + + if (surveyCodesToSex.contains(speciesId)) { + + signs2add = Lists.newArrayList(Signs.MALE, Signs.FEMALE, Signs.DEFAULT); + + } else if (surveyCodesToSize.contains(speciesId)) { + + signs2add = Lists.newArrayList(Signs.SMALL, Signs.BIG); + } + + if (signs2add != null) { + for (Signs signs : signs2add) { + + Integer categoryId = signs.getCategory(); + CaracteristicQualitativeValue splitCqv = signsToCaracteristicValue.get(signs); + SpeciesBatch childBatch = createSpeciesBatch( + operation, + species, + null, + categoryId, + splitCqv); + + persistenceService.createSpeciesBatch(childBatch, parentBatchId, true); + } + } + } } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java index c87d6da..0735f5e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java @@ -88,10 +88,13 @@ public class PupitriSpeciesContext implements Serializable { */ protected final Map<Signs, PupitriSignContext> signs; - public PupitriSpeciesContext(Species species, boolean sorted) { + protected boolean createMissingSigns; + + public PupitriSpeciesContext(Species species, boolean createMissingSigns, boolean sorted) { this.species = species; this.sorted = sorted; this.signs = Maps.newHashMap(); + this.createMissingSigns = createMissingSigns; } public Species getSpecies() { @@ -145,7 +148,7 @@ public class PupitriSpeciesContext implements Serializable { public void addToSignContext(Signs sign, BoxType boxType, Float weight) { - PupitriSignContext signContext = getOrCreateSignContext(sign, true); + PupitriSignContext signContext = getOrCreateSignContext(sign); signContext.addWeight(weight); switch (boxType) { case SMALL: @@ -156,12 +159,30 @@ public class PupitriSpeciesContext implements Serializable { break; } + // cf #6116 + switch (sign) { + case MALE: + getOrCreateSignContext(Signs.FEMALE); + getOrCreateSignContext(Signs.DEFAULT); + break; + case FEMALE: + getOrCreateSignContext(Signs.MALE); + getOrCreateSignContext(Signs.DEFAULT); + break; + + case SMALL: + getOrCreateSignContext(Signs.BIG); + break; + case BIG: + getOrCreateSignContext(Signs.SMALL); + break; + } } public void setMelagElevatedWeight(Signs melagElevatedSign, Float weight) { PupitriSignContext melagContext = getSignContext(Signs.MELAG); - PupitriSignContext pupitriSignContext = getOrCreateSignContext(melagElevatedSign, true); + PupitriSignContext pupitriSignContext = getOrCreateSignContext(melagElevatedSign); pupitriSignContext.addWeight(weight); //FIXME Check this??? pupitriSignContext.addNbBoxs(melagContext); @@ -175,7 +196,7 @@ public class PupitriSpeciesContext implements Serializable { PupitriSignContext melagContext = getSignContext(Signs.MELAG); - PupitriSignContext defaultSignContext = getOrCreateSignContext(Signs.DEFAULT, true); + PupitriSignContext defaultSignContext = getOrCreateSignContext(Signs.DEFAULT); defaultSignContext.addWeight(melagContext.getWeight()); //FIXME Check this??? defaultSignContext.addNbBoxs(melagContext); @@ -273,33 +294,13 @@ public class PupitriSpeciesContext implements Serializable { return signs.get(sign); } - private PupitriSignContext getOrCreateSignContext(Signs sign, boolean createOtherCategorySigns) { + private PupitriSignContext getOrCreateSignContext(Signs sign) { + PupitriSignContext signContext = getSignContext(sign); if (signContext == null) { signContext = new PupitriSignContext(sign); signs.put(sign, signContext); } - - if (createOtherCategorySigns) { - // cf #6116 - - switch (sign) { - case MALE: - getOrCreateSignContext(Signs.FEMALE, false); - break; - case FEMALE: - getOrCreateSignContext(Signs.MALE, false); - break; - case BIG: - getOrCreateSignContext(Signs.SMALL, false); - break; - case SMALL: - getOrCreateSignContext(Signs.BIG, false); - break; - - } - } - return signContext; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java index 74162aa..fc9fc6e 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java @@ -160,7 +160,8 @@ public class ImportPupitriAction extends LongActionSupport<SpeciesBatchUIModel, importResult = service.importPupitri(importedTrunkFile, importedCarrouselFile, operation, - catchBatch); + catchBatch, + true); if (importResult.isFishingOperationFound()) { -- 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/6116 in repository tutti. See http://git.codelutin.com/tutti.git commit 9989c2e8d16d54994e01faf9bfd270c91037641c Author: Kevin Morin <morin@codelutin.com> Date: Tue Jan 12 18:24:04 2016 +0100 ajout de la conf dans l'ui (fixes #6116) --- .../java/fr/ifremer/tutti/TuttiConfiguration.java | 4 ++ .../fr/ifremer/tutti/TuttiConfigurationOption.java | 8 +++ .../i18n/tutti-persistence_en_GB.properties | 1 + .../i18n/tutti-persistence_fr_FR.properties | 1 + .../service/pupitri/PupitriSpeciesContext.java | 34 ++++----- .../swing/content/config/TuttiConfigUIHandler.java | 4 ++ .../catches/species/ImportPupitriPopupUI.css | 9 +++ .../catches/species/ImportPupitriPopupUI.jaxx | 24 +++++-- .../species/ImportPupitriPopupUIHandler.java | 82 +++++++++++++--------- .../catches/species/ImportPupitriPopupUIModel.java | 54 ++++++++++++++ .../species/actions/ImportPupitriAction.java | 16 +++-- .../resources/i18n/tutti-ui-swing_en_GB.properties | 4 ++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 4 ++ 13 files changed, 185 insertions(+), 60 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java index 905245c..4d95ce7 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java @@ -580,6 +580,10 @@ public class TuttiConfiguration extends ApplicationConfiguration { return applicationConfig.getOptionAsFloat(TuttiConfigurationOption.TOTAL_SORTED_WEIGHTS_DIFFERENCE_RATE.getKey()); } + public boolean getPupitriImportMissingBatches() { + return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.PUPITRI_IMPORT_MISSING_BATCHES.getKey()); + } + public String getTremieCarousselVesselId() { return applicationConfig.getOption(TuttiConfigurationOption.TREMIE_CAROUSSEL_VESSEL_ID.getKey()); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java index 7b406a8..9cdb4f7 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java @@ -391,6 +391,14 @@ public enum TuttiConfigurationOption implements ConfigOptionDef { false ), + PUPITRI_IMPORT_MISSING_BATCHES( + "tutti.pupitriImportMissingBatches", + n("tutti.config.option.pupitriImportMissingBatches.description"), + "false", + Boolean.class, + false + ), + TREMIE_CAROUSSEL_VESSEL_ID( "tutti.tremieCarousselVessel", n("tutti.config.option.tremieCarousselVessel.description"), diff --git a/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties b/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties index 0d2bf90..5a20bce 100644 --- a/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties +++ b/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties @@ -45,6 +45,7 @@ tutti.config.option.persistence.showBatchLog.description= tutti.config.option.persistence.showMemoryUsage.description= tutti.config.option.programId.description= tutti.config.option.protocolId.description= +tutti.config.option.pupitriImportMissingBatches.description= tutti.config.option.report.backup.directory.description= tutti.config.option.report.directory.description= tutti.config.option.report.home.directory.description= diff --git a/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties b/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties index 935293d..d817e42 100644 --- a/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties +++ b/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties @@ -41,6 +41,7 @@ tutti.config.option.persistence.showBatchLog.description=Pour afficher dans les tutti.config.option.persistence.showMemoryUsage.description=Voir l'utilisation de la mémoire tutti.config.option.programId.description=Identifiant de la dernière série de campagne utilisée tutti.config.option.protocolId.description=Identifiant du dernier protocole utilisé +tutti.config.option.pupitriImportMissingBatches.description=Créer les lots mâle, femelle et indéterminé ou petit, gros s'ils ne sont pas présents dans l'import Pupitri tutti.config.option.report.backup.directory.description=Répertoire contenant les rapports générés tutti.config.option.report.directory.description=Répertoire contenant les modèles de rapports tutti.config.option.report.home.directory.description=Répertoire contenant la structure nécessaire pour les rapport diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java index 0735f5e..ec1e0b1 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java @@ -160,22 +160,24 @@ public class PupitriSpeciesContext implements Serializable { } // cf #6116 - switch (sign) { - case MALE: - getOrCreateSignContext(Signs.FEMALE); - getOrCreateSignContext(Signs.DEFAULT); - break; - case FEMALE: - getOrCreateSignContext(Signs.MALE); - getOrCreateSignContext(Signs.DEFAULT); - break; - - case SMALL: - getOrCreateSignContext(Signs.BIG); - break; - case BIG: - getOrCreateSignContext(Signs.SMALL); - break; + if (createMissingSigns) { + switch (sign) { + case MALE: + getOrCreateSignContext(Signs.FEMALE); + getOrCreateSignContext(Signs.DEFAULT); + break; + case FEMALE: + getOrCreateSignContext(Signs.MALE); + getOrCreateSignContext(Signs.DEFAULT); + break; + + case SMALL: + getOrCreateSignContext(Signs.BIG); + break; + case BIG: + getOrCreateSignContext(Signs.SMALL); + break; + } } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java index 8592b5b..9914e08 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java @@ -157,6 +157,10 @@ public class TuttiConfigUIHandler extends AbstractTuttiUIHandler<TuttiUIContext, .addOption(TuttiConfigurationOption.IMPORT_DB_SKIP_BACKUP) .setOptionShortLabel(t("tutti.config.option.ui.db.import.skipBackup.shortLabel")) + .addOption(TuttiConfigurationOption.PUPITRI_IMPORT_MISSING_BATCHES) + .setOptionShortLabel(t("tutti.config.option.pupitriImportMissingBatches.shortLabel")) + + ; TuttiUIContext context = getContext(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUI.css b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUI.css index 3b0de25..7fa4b71 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUI.css +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUI.css @@ -39,6 +39,7 @@ FileEditor { #trunkFile { exts: {t("tutti.importPupitri.trunkFile.extension")}; extsDescription: {t("tutti.importPupitri.trunkFile.extension.description")}; + selectedFile: { model.getTrunkFile() }; } #carrouselFileLabel { @@ -49,6 +50,14 @@ FileEditor { #carrouselFile { exts: {t("tutti.importPupitri.carrouselFile.extension")}; extsDescription: {t("tutti.importPupitri.carrouselFile.extension.description")}; + selectedFile: { model.getCarrouselFile() }; +} + +#importMissingBatches { + text: "tutti.importPupitri.importMissingBatches"; + toolTipText: "tutti.importPupitri.importMissingBatches.tip"; + i18nMnemonic: "tutti.importPupitri.importMissingBatches.mnemonic"; + selected: { model.isImportMissingBatches() }; } #cancelButton { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUI.jaxx index 1e88b04..44e518d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUI.jaxx @@ -19,10 +19,12 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<JDialog id='importPupitriDialog' layout='{new BorderLayout()}'> +<JDialog id='importPupitriDialog' layout='{new BorderLayout()}' + implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<ImportPupitriPopupUIModel, ImportPupitriPopupUIHandler>'> <import> fr.ifremer.tutti.ui.swing.TuttiUIContext + fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil jaxx.runtime.swing.editor.FileEditor @@ -30,9 +32,9 @@ <script><![CDATA[ -public ImportPupitriPopupUI(TuttiUIContext context) { - super(context.getMainUI()); - TuttiUIUtil.setApplicationContext(this, context); + +public ImportPupitriPopupUI(TuttiUI<?,?> parentUI) { + TuttiUIUtil.setParentUI(this, parentUI); } public void open() { @@ -40,6 +42,9 @@ public void open() { } ]]></script> + <ImportPupitriPopupUIModel id='model' + initializer='getContextValue(ImportPupitriPopupUIModel.class)'/> + <Table id='mainPanel' fill='both'> <row> @@ -47,7 +52,7 @@ public void open() { <JLabel id='trunkFileLabel'/> </cell> <cell weightx='1'> - <FileEditor id='trunkFile' onActionPerformed='handler.updateCarrouselFile()'/> + <FileEditor id='trunkFile' onActionPerformed='handler.setFile(event, ImportPupitriPopupUIModel.PROPERTY_TRUNK_FILE)'/> </cell> </row> @@ -56,7 +61,14 @@ public void open() { <JLabel id='carrouselFileLabel'/> </cell> <cell weightx='1'> - <FileEditor id='carrouselFile' onActionPerformed='handler.updateTrunkFile()'/> + <FileEditor id='carrouselFile' onActionPerformed='handler.setFile(event, ImportPupitriPopupUIModel.PROPERTY_CARROUSEL_FILE)'/> + </cell> + </row> + + <row> + <cell columns='2'> + <JCheckBox id='importMissingBatches' + onItemStateChanged='handler.setBoolean(event, ImportPupitriPopupUIModel.PROPERTY_IMPORT_MISSING_BATCHES)'/> </cell> </row> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIHandler.java index d4a6cf1..869ba20 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIHandler.java @@ -23,13 +23,16 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species; */ import com.google.common.io.Files; -import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import jaxx.runtime.SwingUtil; -import jaxx.runtime.spi.UIHandler; +import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import javax.swing.JComponent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.io.File; /** @@ -37,39 +40,65 @@ import java.io.File; * @author tchemit <chemit@codelutin.com> * @since 0.2 */ -public class ImportPupitriPopupUIHandler implements UIHandler<ImportPupitriPopupUI> { +public class ImportPupitriPopupUIHandler extends AbstractTuttiUIHandler<ImportPupitriPopupUIModel, ImportPupitriPopupUI> { /** Logger. */ private static final Log log = LogFactory.getLog(ImportPupitriPopupUIHandler.class); - protected ImportPupitriPopupUI ui; - @Override public void beforeInit(ImportPupitriPopupUI ui) { - this.ui = ui; + super.beforeInit(ui); + + ImportPupitriPopupUIModel model = new ImportPupitriPopupUIModel(); + boolean pupitriImportMissingBatches = getConfig().getPupitriImportMissingBatches(); + model.setImportMissingBatches(pupitriImportMissingBatches); + + ui.setContextValue(model); } @Override public void afterInit(ImportPupitriPopupUI ui) { + initUI(ui); ui.getTrunkFile().setDialogOwner(ui); ui.getCarrouselFile().setDialogOwner(ui); ui.pack(); ui.setResizable(true); - TuttiUIUtil.initButton(TuttiUIContext.getApplicationContext(), ui, ui.getCancelButton()); - TuttiUIUtil.initButton(TuttiUIContext.getApplicationContext(), ui, ui.getValidateButton()); + getModel().addPropertyChangeListener(ImportPupitriPopupUIModel.PROPERTY_TRUNK_FILE, new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + updateCarrouselFile(); + } + }); + + getModel().addPropertyChangeListener(ImportPupitriPopupUIModel.PROPERTY_CARROUSEL_FILE, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + updateTrunkFile(); + } + }); } - private boolean objectIsAdjusting; + @Override + protected JComponent getComponentToFocus() { + return ui.getTrunkFile(); + } - public void updateTrunkFile() { + @Override + public void onCloseUI() { + resetFields(); + } - if (objectIsAdjusting) { - // avoid re-entrant code - return; - } - File carrouselFile = ui.getCarrouselFile().getSelectedFile(); + @Override + public SwingValidator<ImportPupitriPopupUIModel> getValidator() { + return null; + } + + protected void updateTrunkFile() { + + File carrouselFile = getModel().getCarrouselFile(); if (carrouselFile != null) { String nameWithoutExtension = Files.getNameWithoutExtension(carrouselFile.getName()); @@ -80,12 +109,7 @@ public class ImportPupitriPopupUIHandler implements UIHandler<ImportPupitriPopup log.info("Select from carrousel file, trunk file: " + trunkFile); } - objectIsAdjusting = true; - try { - ui.getTrunkFile().setSelectedFile(trunkFile); - } finally { - objectIsAdjusting = false; - } + getModel().setTrunkFile(trunkFile); } else { if (log.isDebugEnabled()) { @@ -96,14 +120,9 @@ public class ImportPupitriPopupUIHandler implements UIHandler<ImportPupitriPopup } - public void updateCarrouselFile() { + protected void updateCarrouselFile() { - if (objectIsAdjusting) { - // avoid re-entrant code - return; - } - - File trunkFile = ui.getTrunkFile().getSelectedFile(); + File trunkFile = getModel().getTrunkFile(); if (trunkFile != null) { String nameWithoutExtension = Files.getNameWithoutExtension(trunkFile.getName()); File carrouselFile = new File(trunkFile.getParentFile(), nameWithoutExtension + ".car"); @@ -113,12 +132,7 @@ public class ImportPupitriPopupUIHandler implements UIHandler<ImportPupitriPopup log.info("Select from trunk file, carrousel file: " + carrouselFile); } - objectIsAdjusting = true; - try { - ui.getCarrouselFile().setSelectedFile(carrouselFile); - } finally { - objectIsAdjusting = false; - } + getModel().setCarrouselFile(carrouselFile); } else { if (log.isDebugEnabled()) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIModel.java new file mode 100644 index 0000000..8fb0586 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportPupitriPopupUIModel.java @@ -0,0 +1,54 @@ +package fr.ifremer.tutti.ui.swing.content.operation.catches.species; + +import org.jdesktop.beans.AbstractSerializableBean; + +import java.io.File; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.3 + */ +public class ImportPupitriPopupUIModel extends AbstractSerializableBean { + + public static final String PROPERTY_TRUNK_FILE = "trunkFile"; + + public static final String PROPERTY_CARROUSEL_FILE = "carrouselFile"; + + public static final String PROPERTY_IMPORT_MISSING_BATCHES = "importMissingBatches"; + + protected File trunkFile; + + protected File carrouselFile; + + protected boolean importMissingBatches; + + public File getTrunkFile() { + return trunkFile; + } + + public void setTrunkFile(File trunkFile) { + Object oldValue = getTrunkFile(); + this.trunkFile = trunkFile; + firePropertyChange(PROPERTY_TRUNK_FILE, oldValue, trunkFile); + } + + public File getCarrouselFile() { + return carrouselFile; + } + + public void setCarrouselFile(File carrouselFile) { + Object oldValue = getCarrouselFile(); + this.carrouselFile = carrouselFile; + firePropertyChange(PROPERTY_CARROUSEL_FILE, oldValue, carrouselFile); + } + + public boolean isImportMissingBatches() { + return importMissingBatches; + } + + public void setImportMissingBatches(boolean importMissingBatches) { + Object oldValue = isImportMissingBatches(); + this.importMissingBatches = importMissingBatches; + firePropertyChange(PROPERTY_IMPORT_MISSING_BATCHES, oldValue, importMissingBatches); + } +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java index fc9fc6e..319bede 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java @@ -31,6 +31,7 @@ import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.pupitri.PupitriImportResult; import fr.ifremer.tutti.service.pupitri.PupitriImportService; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.ImportPupitriPopupUIModel; import fr.ifremer.tutti.ui.swing.util.actions.LongActionSupport; import fr.ifremer.tutti.ui.swing.content.operation.fishing.actions.EditFishingOperationAction; import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI; @@ -68,6 +69,8 @@ public class ImportPupitriAction extends LongActionSupport<SpeciesBatchUIModel, protected File importedCarrouselFile; + protected boolean importMissingBatches; + protected PersistenceService persistenceService; protected EditFishingOperationAction editAction; @@ -136,10 +139,14 @@ public class ImportPupitriAction extends LongActionSupport<SpeciesBatchUIModel, if (result) { - ImportPupitriPopupUI importPupitriDialog = new ImportPupitriPopupUI(handler.getContext()); + ImportPupitriPopupUI importPupitriDialog = new ImportPupitriPopupUI(getUI()); importPupitriDialog.open(); - importedTrunkFile = importPupitriDialog.getTrunkFile().getSelectedFile(); - importedCarrouselFile = importPupitriDialog.getCarrouselFile().getSelectedFile(); + + ImportPupitriPopupUIModel importPupitriDialogModel = importPupitriDialog.getModel(); + importedTrunkFile = importPupitriDialogModel.getTrunkFile(); + importedCarrouselFile = importPupitriDialogModel.getCarrouselFile(); + importMissingBatches = importPupitriDialogModel.isImportMissingBatches(); + result = importedTrunkFile != null && importedCarrouselFile != null; } @@ -161,7 +168,7 @@ public class ImportPupitriAction extends LongActionSupport<SpeciesBatchUIModel, importedCarrouselFile, operation, catchBatch, - true); + importMissingBatches); if (importResult.isFishingOperationFound()) { @@ -174,6 +181,7 @@ public class ImportPupitriAction extends LongActionSupport<SpeciesBatchUIModel, public void releaseAction() { importedTrunkFile = null; importedCarrouselFile = null; + importMissingBatches = false; 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 0f46a3f..81e5e18 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 @@ -142,6 +142,7 @@ tutti.config.option.persistence.db.directory.shortLabel= tutti.config.option.persistence.db.enumerationPath.shortLabel= tutti.config.option.persistence.db.protocol.directory.shortLabel= tutti.config.option.persistence.jdbc.url.shortLabel= +tutti.config.option.pupitriImportMissingBatches.shortLabel= tutti.config.option.service.export.backup.directory.shortLabel= tutti.config.option.service.genericFormat.export.backup.directory.shortLabel= tutti.config.option.service.report.backup.directory.shortLabel= @@ -1669,6 +1670,9 @@ tutti.importPupitri.error.fileMissing.message= tutti.importPupitri.error.fileMissing.title= tutti.importPupitri.field.carrouselFile= tutti.importPupitri.field.trunkFile= +tutti.importPupitri.importMissingBatches= +tutti.importPupitri.importMissingBatches.mnemonic= +tutti.importPupitri.importMissingBatches.tip= tutti.importPupitri.title= tutti.importPupitri.trunkFile.extension= tutti.importPupitri.trunkFile.extension.description= 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 04f079d..d1febd0 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 @@ -124,6 +124,7 @@ tutti.config.option.persistence.db.directory.shortLabel=Répertoire de la base d tutti.config.option.persistence.db.enumerationPath.shortLabel=Chemin vers le fichier constantes adagio tutti.config.option.persistence.db.protocol.directory.shortLabel=Répertoire des protocoles tutti.config.option.persistence.jdbc.url.shortLabel=Url jdbc de connexion +tutti.config.option.pupitriImportMissingBatches.shortLabel=Créer les lots manquants lors de l'import Pupitri tutti.config.option.service.export.backup.directory.shortLabel=Répertoire des sauvegardes d'export générique tutti.config.option.service.genericFormat.export.backup.directory.shortLabel=Répertoire des sauvegardes de rapport d'import générique tutti.config.option.service.report.backup.directory.shortLabel=Répertoire des sauvegardes de rapport @@ -1585,6 +1586,9 @@ tutti.importPupitri.error.fileMissing.message=Vous devez sélectionner un fichie tutti.importPupitri.error.fileMissing.title=Fichier non renseigné tutti.importPupitri.field.carrouselFile=Fichier du carrousel tutti.importPupitri.field.trunkFile=Fichier du trémie +tutti.importPupitri.importMissingBatches=Créer les lots de sexe ou de classe de tri manquants +tutti.importPupitri.importMissingBatches.mnemonic=l +tutti.importPupitri.importMissingBatches.tip=Créer les lots mâle, femelle et indéterminé ou petit, gros s'ils ne sont pas présents dans l'import tutti.importPupitri.title=Import Pupitri tutti.importPupitri.trunkFile.extension=tnk tutti.importPupitri.trunkFile.extension.description=Fichier du trémie (.tnk) -- 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/6116 in repository tutti. See http://git.codelutin.com/tutti.git commit d348a155982a4e859d0a3f38451ac735a708a257 Merge: eaa28b6 9989c2e Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 13 11:09:26 2016 +0100 Merge branch 'feature/6116' of gitlab.nuiton.org:codelutin/tutti into feature/6116 Conflicts: tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriImportService.java tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/PupitriSpeciesContext.java tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/actions/ImportPupitriAction.java tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm