[Suiviobsmer-commits] r456 - in trunk/wao-business/src: main/java/fr/ifremer/wao main/java/fr/ifremer/wao/bean main/java/fr/ifremer/wao/service test/java/fr/ifremer/wao/service
Author: fdesbois Date: 2010-04-19 21:28:10 +0000 (Mon, 19 Apr 2010) New Revision: 456 Log: Evo #2100 : Add specific case to manage estimated tides when programValidation becomes FALSE or not Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactStatus.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactImplTest.java Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2010-04-19 19:59:47 UTC (rev 455) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/PostgresMigrationCallback.java 2010-04-19 21:28:10 UTC (rev 456) @@ -97,6 +97,7 @@ "date_part('month', S.periodDate)" + " AND date_part('year', C.tideBeginDate) = " + "date_part('year', S.periodDate)" + + " AND C.validationProgram != FALSE" + "), " + "topiaVersion = S.topiaVersion + 1;"); } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactStatus.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactStatus.java 2010-04-19 19:59:47 UTC (rev 455) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/bean/ContactStatus.java 2010-04-19 21:28:10 UTC (rev 456) @@ -272,6 +272,26 @@ return contactValidate; } + public boolean isRefused() { + Boolean oldValidationProgram = oldContact != null ? + oldContact.getValidationProgram() : null; + Boolean newValidationProgram = newContact != null ? + newContact.getValidationProgram() : null; + + return BooleanUtils.isNotFalse(oldValidationProgram) && + BooleanUtils.isFalse(newValidationProgram); + } + + public boolean isNoMoreRefused() { + Boolean oldValidationProgram = oldContact != null ? + oldContact.getValidationProgram() : null; + Boolean newValidationProgram = newContact != null ? + newContact.getValidationProgram() : null; + + return BooleanUtils.isFalse(oldValidationProgram) && + BooleanUtils.isNotFalse(newValidationProgram); + } + /** * Return true if contact state is {@link ContactState#BOARDING_DONE} * depends on {@code context}. To check oldContact state, use Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2010-04-19 19:59:47 UTC (rev 455) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2010-04-19 21:28:10 UTC (rev 456) @@ -57,6 +57,7 @@ import fr.ifremer.wao.entity.*; import fr.ifremer.wao.io.*; import fr.ifremer.wao.io.WaoCsvHeader.*; +import org.apache.commons.lang.BooleanUtils; import org.nuiton.util.beans.BinderBuilder; import org.nuiton.util.beans.BinderProvider; @@ -588,6 +589,15 @@ * <li>UPDATE : both {@code oldContact} and {@code contact} are defined</li> * <li>DELETE : {@code oldContact} is defined and {@code contact} = null</li> * </ul> + * <p> + * <strong>Estimated Tides value</strong> = nbContacts with BOARDING_DONE + * state and not refused by program (validationProgram != FALSE) + * </p> + * <p> + * <strong>Real Tides value</strong> = nbContacts accepted by company + * (validationCompany = TRUE) and not refused by program + * (validationProgram != FALSE) + * </p> * * @param transaction used to update the SampleMonth * @param oldContact old state of the contact @@ -631,7 +641,11 @@ // decrement real tides oldMonth.addRealTideTime(-1); } - if (status.isOldContactDone()) { + // Decrement estimated only if old state is BOARDING_DONE + // and old validationProgram is NOT FALSE + // the estimated value has already been decremented during refused + if (status.isOldContactDone() && + BooleanUtils.isNotFalse(oldContact.getValidationProgram())) { // decrement estimated tides oldMonth.addEstimatedTideTime(-1); } @@ -646,10 +660,20 @@ if (status.isNewContactValidate()) { // increment real tides sampleMonth.addRealTideTime(1); + // validationProgram becomes not FALSE, estimatedTides must be + // incremented + if (status.isNoMoreRefused()) { + sampleMonth.addEstimatedTideTime(1); + } // never decrement if tideBeginDate has changed } else if (status.isOldContactValidate() && !tideBeginDateChanged) { // decrement real tides sampleMonth.addRealTideTime(-1); + // validationProgram becomes FALSE, estimatedTides must be + // decremented + if (status.isRefused()) { + sampleMonth.addEstimatedTideTime(-1); + } } } Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactImplTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactImplTest.java 2010-04-19 19:59:47 UTC (rev 455) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/service/ServiceContactImplTest.java 2010-04-19 21:28:10 UTC (rev 456) @@ -410,6 +410,86 @@ } } + @Test + public void testDecrementSampleMonthContactRefused() + throws TopiaException, NullSampleMonthException { + logger.info("testDecrementSampleMonthContactRefused"); + + /** PREPARE DATA **/ + prepareData(false, false); + + // contactReference as the same tideBeginDate and sampleRow as contact + Date tideBeginDate = new Date(contact.getTideBeginDate().getTime()); + when(contactReference.getTideBeginDate()).thenReturn(tideBeginDate); + when(contactReference.getSampleRow()).thenReturn(sampleRow); + + // Initialize correct old status in contactReference + when(contactReference.getValidationCompany()).thenReturn(Boolean.TRUE); + when(contactReference.getContactState()). + thenReturn(ContactState.BOARDING_DONE); + when(contactReference.getValidationProgram()).thenReturn(null); + + + // Initialize data in sampleMonth + TopiaContext transaction = manager.getContext().beginTransaction(); + try { + SampleMonthDAO dao = WaoDAOHelper.getSampleMonthDAO(transaction); + + sampleMonth.addEstimatedTideTime(1); + sampleMonth.addRealTideTime(1); + + dao.update(sampleMonth); + + transaction.commitTransaction(); + } finally { + transaction.closeContext(); + } + + // both estimated and real as value = 1 + checkTidesValue(1, false); + checkTidesValue(1, true); + + /** EXEC METHOD **/ + logger.info("test 1 : validationProgram null -> FALSE, estimated -1" + + " and real -1"); + transaction = manager.getContext().beginTransaction(); + try { + when(contact.getValidationCompany()).thenReturn(Boolean.TRUE); + when(contact.getContactState()). + thenReturn(ContactState.BOARDING_DONE); + when(contact.getValidationProgram()).thenReturn(Boolean.FALSE); + + service.updateSampleMonthTidesValue(transaction, contactReference, + contact, true); + + transaction.commitTransaction(); + } finally { + transaction.closeContext(); + } + + checkTidesValue(0, false); + checkTidesValue(0, true); + + logger.info("test 2 : validationProgram FALSE -> null, estimated +1" + + " and real +1"); + transaction = manager.getContext().beginTransaction(); + try { + when(contactReference.getValidationProgram()). + thenReturn(Boolean.FALSE); + when(contact.getValidationProgram()).thenReturn(null); + + service.updateSampleMonthTidesValue(transaction, contactReference, + contact, true); + + transaction.commitTransaction(); + } finally { + transaction.closeContext(); + } + + checkTidesValue(1, false); + checkTidesValue(1, true); + } + protected void checkTidesValue(int expected, boolean real) throws TopiaException { TopiaContext transaction = manager.getContext().beginTransaction();
participants (1)
-
fdesbois@users.labs.libre-entreprise.org