Commit c71d399a authored by RANNOU's avatar RANNOU 👽
Browse files

[enh] Service/Dao: add a request to find next sample label for a strategy (#385)

[fix] Data: fix test data and test cases
parent 8ea11778
......@@ -34,14 +34,19 @@ import net.sumaris.core.dao.referential.location.LocationRepository;
import net.sumaris.core.dao.referential.taxon.TaxonNameRepository;
import net.sumaris.core.dao.referential.taxon.TaxonNameRepositoryImpl;
import net.sumaris.core.dao.technical.jpa.BindableSpecification;
import net.sumaris.core.dao.technical.model.IEntity;
import net.sumaris.core.exception.NotUniqueException;
import net.sumaris.core.exception.SumarisTechnicalException;
import net.sumaris.core.model.administration.programStrategy.*;
import net.sumaris.core.model.administration.user.Department;
import net.sumaris.core.model.data.Landing;
import net.sumaris.core.model.data.LandingMeasurement;
import net.sumaris.core.model.data.Sample;
import net.sumaris.core.model.referential.Status;
import net.sumaris.core.model.referential.StatusEnum;
import net.sumaris.core.model.referential.gear.Gear;
import net.sumaris.core.model.referential.location.Location;
import net.sumaris.core.model.referential.pmfm.PmfmEnum;
import net.sumaris.core.model.referential.taxon.ReferenceTaxon;
import net.sumaris.core.model.referential.taxon.TaxonGroup;
import net.sumaris.core.util.Beans;
......@@ -224,8 +229,8 @@ public class StrategyRepositoryImpl
/**
* @param programId program id
* @param labelPrefix label prefix (ex: AAAA_BIO_)
* @return next strategy label for this prefix (ex: AAAA_BIO_0001)
* @param labelPrefix label prefix (ex: 20-LEUCCIR-)
* @return next strategy label for this prefix (ex: 20-LEUCCIR-001)
*/
@Override
public String computeNextLabelByProgramId(int programId, String labelPrefix, int nbDigit) {
......@@ -262,6 +267,51 @@ public class StrategyRepositoryImpl
return result;
}
/**
* @param strategyLabel strategy label (ex: 20-LEUCCIR-001)
* @param labelSeparator label separator (ex: -)
* @return next strategy sample label for this strategy (ex: 20-LEUCCIR-001-0001)
*/
@Override
public String computeNextSampleLabelByStrategy(String strategyLabel, String labelSeparator, int nbDigit) {
Preconditions.checkNotNull(strategyLabel);
final String prefix = (labelSeparator == null) ? strategyLabel : strategyLabel + labelSeparator;
CriteriaBuilder builder = getEntityManager().getCriteriaBuilder();
CriteriaQuery<String> query = builder.createQuery(String.class);
Root<Sample> root = query.from(Sample.class);
ParameterExpression<Integer> idParam = builder.parameter(Integer.class);
ParameterExpression<String> valueParam = builder.parameter(String.class);
Join<Sample, Landing> landingInnerJoin = root.join(Sample.Fields.LANDING, JoinType.INNER);
Join<Landing, LandingMeasurement> measurementInnerJoin = landingInnerJoin.joinList(Landing.Fields.MEASUREMENTS, JoinType.INNER);
query.select(root.get(Sample.Fields.LABEL))
.distinct(true)
.where(
builder.and(
builder.equal(measurementInnerJoin.get(LandingMeasurement.Fields.PMFM).get(IEntity.Fields.ID), idParam),
builder.equal(measurementInnerJoin.get(LandingMeasurement.Fields.ALPHANUMERICAL_VALUE), valueParam)
));
String result = getEntityManager()
.createQuery(query)
.setParameter(idParam, PmfmEnum.STRATEGY_LABEL.getId())
.setParameter(valueParam, strategyLabel)
.getResultStream()
.max(String::compareTo)
.map(source -> StringUtils.removeStart(source, prefix))
.orElse("0");
if (!StringUtils.isNumeric(result)) {
throw new SumarisTechnicalException(String.format("Unable to increment label '%s' on sample", prefix.concat(result)));
}
result = String.valueOf(Integer.parseInt(result) + 1);
result = prefix.concat(StringUtils.leftPad(result, nbDigit, '0'));
return result;
}
@Override
public List<StrategyVO> findNewerByProgramId(final int programId, final Date updateDate, final StrategyFetchOptions fetchOptions) {
return findAll(
......
......@@ -246,6 +246,8 @@ public interface StrategySpecifications extends ReferentialSpecifications<Strate
String computeNextLabelByProgramId(int programId, String labelPrefix, int nbDigit);
String computeNextSampleLabelByStrategy(String strategyLabel, String labelSeparator, int nbDigit);
List<StrategyVO> findNewerByProgramId(final int programId, final Date updateDate, final StrategyFetchOptions fetchOptions);
void saveProgramLocationsByStrategyId(int strategyId);
......
......@@ -94,6 +94,9 @@ public interface StrategyService {
@Transactional(readOnly = true)
String computeNextLabelByProgramId(int programId, String labelPrefix, int nbDigit);
@Transactional(readOnly = true)
String computeNextSampleLabelByStrategy(String strategyLabel, String labelSeparator, int nbDigit);
StrategyVO save(StrategyVO source);
List<StrategyVO> saveByProgramId(int programId, List<StrategyVO> sources);
......
......@@ -139,12 +139,16 @@ public class StrategyServiceImpl implements StrategyService {
return denormalizedPmfmStrategyRepository.findByFilter(filter, fetchOptions);
}
@Override
public String computeNextLabelByProgramId(int programId, String labelPrefix, int nbDigit) {
return strategyRepository.computeNextLabelByProgramId(programId, labelPrefix, nbDigit);
}
@Override
public String computeNextSampleLabelByStrategy(String strategyLabel, String labelSeparator, int nbDigit) {
return strategyRepository.computeNextSampleLabelByStrategy(strategyLabel, labelSeparator, nbDigit);
}
@Override
public StrategyVO save(StrategyVO source) {
StrategyVO result = strategyRepository.save(source);
......
......@@ -147,12 +147,21 @@ public class StrategyServiceReadTest extends AbstractServiceTest{
@Test
public void computeNextLabelByProgramId() {
public void computeNextLabel() {
// By programId
String label = service.computeNextLabelByProgramId(40, "BIO", 0);
Assert.assertEquals("BIO1", label);
label = service.computeNextLabelByProgramId(40, "2020-BIO-", 4);
Assert.assertEquals("2020-BIO-0003", label);
label = service.computeNextLabelByProgramId(40, "20-LEUCCIR-", 3);
Assert.assertEquals("20-LEUCCIR-003", label);
// By strategyLabel
label = service.computeNextSampleLabelByStrategy("BIO1", null, 0);
Assert.assertEquals("BIO11", label);
label = service.computeNextSampleLabelByStrategy("20-LEUCCIR-001", "-", 4);
Assert.assertEquals("20-LEUCCIR-001-0005", label);
}
......@@ -177,7 +186,7 @@ public class StrategyServiceReadTest extends AbstractServiceTest{
List<StrategyVO> strategies = service.findByFilter(filter, Pageable.unpaged(), StrategyFetchOptions.DEFAULT);
Assert.assertNotNull(strategies);
Assert.assertEquals(1, strategies.size());
Assert.assertEquals("2020-BIO-0001", strategies.get(0).getLabel());
Assert.assertEquals("20-LEUCCIR-001", strategies.get(0).getLabel());
}
// Filter by reference taxon
......@@ -187,8 +196,8 @@ public class StrategyServiceReadTest extends AbstractServiceTest{
.build();
List<StrategyVO> strategies = service.findByFilter(filter, Pageable.unpaged(), StrategyFetchOptions.DEFAULT);
Assert.assertNotNull(strategies);
Assert.assertEquals(1, strategies.size());
Assert.assertEquals("2020-BIO-0001", strategies.get(0).getLabel());
Assert.assertEquals(2, strategies.size());
Assert.assertEquals("20-LEUCCIR-001", strategies.get(0).getLabel());
}
// Filter by department
......@@ -199,7 +208,7 @@ public class StrategyServiceReadTest extends AbstractServiceTest{
List<StrategyVO> strategies = service.findByFilter(filter, Pageable.unpaged(), StrategyFetchOptions.DEFAULT);
Assert.assertNotNull(strategies);
Assert.assertEquals(1, strategies.size());
Assert.assertEquals("2020-BIO-0001", strategies.get(0).getLabel());
Assert.assertEquals("20-LEUCCIR-001", strategies.get(0).getLabel());
}
// Filter by location
......@@ -210,7 +219,7 @@ public class StrategyServiceReadTest extends AbstractServiceTest{
List<StrategyVO> strategies = service.findByFilter(filter, Pageable.unpaged(), StrategyFetchOptions.DEFAULT);
Assert.assertNotNull(strategies);
Assert.assertEquals(1, strategies.size());
Assert.assertEquals("2020-BIO-0001", strategies.get(0).getLabel());
Assert.assertEquals("20-LEUCCIR-001", strategies.get(0).getLabel());
}
// Filter by pmfm
......@@ -221,8 +230,8 @@ public class StrategyServiceReadTest extends AbstractServiceTest{
List<StrategyVO> strategies = service.findByFilter(filter, Pageable.unpaged(), StrategyFetchOptions.DEFAULT);
Assert.assertNotNull(strategies);
Assert.assertEquals(2, strategies.size());
Assert.assertEquals("2020-BIO-0001", strategies.get(0).getLabel());
Assert.assertEquals("2020-BIO-0002", strategies.get(1).getLabel());
Assert.assertEquals("20-LEUCCIR-001", strategies.get(0).getLabel());
Assert.assertEquals("20-LEUCCIR-002", strategies.get(1).getLabel());
}
// Filter by periods
......@@ -237,7 +246,7 @@ public class StrategyServiceReadTest extends AbstractServiceTest{
List<StrategyVO> strategies = service.findByFilter(filter, Pageable.unpaged(), StrategyFetchOptions.DEFAULT);
Assert.assertNotNull(strategies);
Assert.assertEquals(1, strategies.size());
Assert.assertEquals("2020-BIO-0001", strategies.get(0).getLabel());
Assert.assertEquals("20-LEUCCIR-001", strategies.get(0).getLabel());
}
}
}
......@@ -32,10 +32,7 @@ import net.sumaris.core.service.administration.programStrategy.StrategyService;
import net.sumaris.core.service.referential.ReferentialService;
import net.sumaris.core.util.Beans;
import net.sumaris.core.util.Dates;
import net.sumaris.core.vo.administration.programStrategy.AppliedPeriodVO;
import net.sumaris.core.vo.administration.programStrategy.AppliedStrategyVO;
import net.sumaris.core.vo.administration.programStrategy.StrategyDepartmentVO;
import net.sumaris.core.vo.administration.programStrategy.StrategyVO;
import net.sumaris.core.vo.administration.programStrategy.*;
import net.sumaris.core.vo.referential.ReferentialVO;
import org.junit.Assert;
import org.junit.ClassRule;
......@@ -60,14 +57,15 @@ public class StrategyServiceWriteTest extends AbstractServiceTest{
@Test
public void saveExisting() {
StrategyVO strategy = service.getByLabel("2020-BIO-0001");
StrategyVO strategy = service.getByLabel("20-LEUCCIR-001",
StrategyFetchOptions.builder().withPmfms(true).build());
Assert.assertNotNull(strategy);
Assert.assertNotNull(strategy.getId());
Assert.assertEquals(30, strategy.getId().intValue());
Assert.assertNotNull(strategy.getTaxonNames());
Assert.assertEquals(1, strategy.getTaxonNames().size());
Assert.assertNotNull(strategy.getPmfms());
Assert.assertEquals(10, strategy.getPmfms().size());
Assert.assertEquals(11, strategy.getPmfms().size());
Assert.assertNotNull(strategy.getAppliedStrategies());
Assert.assertEquals(3, strategy.getAppliedStrategies().size());
Assert.assertNotNull(strategy.getDepartments());
......@@ -87,12 +85,12 @@ public class StrategyServiceWriteTest extends AbstractServiceTest{
strategy.setDepartments(Lists.newArrayList(strategyDepartment));
// Add an applied period
AppliedPeriodVO appliedPeriod = new AppliedPeriodVO();
appliedPeriod.setAppliedStrategyId(30);
appliedPeriod.setAppliedStrategyId(11);
appliedPeriod.setStartDate(Dates.getFirstDayOfYear(2020));
appliedPeriod.setEndDate(Dates.getFirstDayOfYear(2021));
appliedPeriod.setAcquisitionNumber(10);
AppliedStrategyVO appliedStrategy = strategy.getAppliedStrategies().get(1);
appliedStrategy.getAppliedPeriods().add(appliedPeriod);
strategy.getAppliedStrategies().get(1).setAppliedPeriods(Lists.newArrayList(appliedPeriod));
strategy.getAppliedStrategies().get(2).setAppliedPeriods(Lists.newArrayList());
service.save(strategy);
......
......@@ -301,6 +301,17 @@ public class ProgramGraphQLService {
nbDigit == null ? 0 : nbDigit);
}
@GraphQLQuery(name = "strategyNextSampleLabel", description = "Get next sample label for strategy")
@IsUser
public String findNextSampleLabelByStrategy(
@GraphQLNonNull @GraphQLArgument(name = "strategyLabel") @NonNull String strategyLabel,
@GraphQLArgument(name = "labelSeparator", defaultValue = "") String labelSeparator,
@GraphQLArgument(name = "nbDigit", defaultValue = "0") Integer nbDigit) {
return strategyService.computeNextSampleLabelByStrategy(strategyLabel,
labelSeparator == null ? "" : labelSeparator,
nbDigit == null ? 0 : nbDigit);
}
@GraphQLSubscription(name = "updateProgram", description = "Subscribe to changes on a program")
@IsUser
public Publisher<ProgramVO> updateProgram(@GraphQLArgument(name = "id") final Integer id,
......
......@@ -54,22 +54,24 @@
<PROGRAM2LOCATION PROGRAM_FK="40" LOCATION_FK="102"/>
<!-- Strategies / Department / Taxon -->
<STRATEGY ID="30" PROGRAM_FK="40" LABEL="2020-BIO-0001" NAME="2020-BIO-0001" DESCRIPTION="Description Plan #1" COMMENTS="Commentaire Plan #1" ANALYTIC_REFERENCE="P101-0001-01-DF" STATUS_FK="1" CREATION_DATE="2020-09-29" UPDATE_DATE="2020-09-29"/>
<STRATEGY ID="31" PROGRAM_FK="40" LABEL="2020-BIO-0002" NAME="2020-BIO-0002" DESCRIPTION="Description Plan #2" COMMENTS="Commentaire Plan #2" ANALYTIC_REFERENCE="P101-0002-01-RE" STATUS_FK="1" CREATION_DATE="2020-09-29" UPDATE_DATE="2020-09-29"/>
<STRATEGY ID="30" PROGRAM_FK="40" LABEL="20-LEUCCIR-001" NAME="2020-BIO-0001" DESCRIPTION="Description Plan #1" COMMENTS="Commentaire Plan #1" ANALYTIC_REFERENCE="P101-0001-01-DF" STATUS_FK="1" CREATION_DATE="2020-09-29" UPDATE_DATE="2020-09-29"/>
<STRATEGY ID="31" PROGRAM_FK="40" LABEL="20-LEUCCIR-002" NAME="2020-BIO-0002" DESCRIPTION="Description Plan #2" COMMENTS="Commentaire Plan #2" ANALYTIC_REFERENCE="P101-0002-01-RE" STATUS_FK="1" CREATION_DATE="2020-09-29" UPDATE_DATE="2020-09-29"/>
<STRATEGY2DEPARTMENT ID="40" STRATEGY_FK="30" DEPARTMENT_FK="1" PROGRAM_PRIVILEGE_FK="1" UPDATE_DATE="2020-09-29"/>
<STRATEGY2DEPARTMENT ID="41" STRATEGY_FK="30" DEPARTMENT_FK="3" PROGRAM_PRIVILEGE_FK="2" UPDATE_DATE="2020-09-29"/>
<STRATEGY2DEPARTMENT ID="42" STRATEGY_FK="31" DEPARTMENT_FK="1" PROGRAM_PRIVILEGE_FK="1" UPDATE_DATE="2020-09-29"/>
<REFERENCE_TAXON_STRATEGY STRATEGY_FK="30" REFERENCE_TAXON_FK="1006"/>
<REFERENCE_TAXON_STRATEGY STRATEGY_FK="31" REFERENCE_TAXON_FK="1006"/>
<!-- AppliedStrategy / Fishing Area / Effort -->
<APPLIED_STRATEGY ID="10" STRATEGY_FK="30" LOCATION_FK="100"/>
<APPLIED_PERIOD APPLIED_STRATEGY_FK="10" START_DATE="2020-01-01" END_DATE="2020-03-31" ACQUISITION_NUMBER="10"/>
<APPLIED_PERIOD APPLIED_STRATEGY_FK="10" START_DATE="2020-04-01" END_DATE="2020-06-30" ACQUISITION_NUMBER="0"/>
<APPLIED_PERIOD APPLIED_STRATEGY_FK="10" START_DATE="2020-10-01" END_DATE="2020-12-31" ACQUISITION_NUMBER="5"/>
<APPLIED_STRATEGY ID="11" STRATEGY_FK="30" LOCATION_FK="101"/>
<APPLIED_STRATEGY ID="12" STRATEGY_FK="30" LOCATION_FK="102"/>
<APPLIED_STRATEGY ID="13" STRATEGY_FK="31" LOCATION_FK="100"/>
<!-- PmfmStrategy / Observation -->
<PMFM_STRATEGY ID="500" STRATEGY_FK="30" ACQUISITION_LEVEL_FK="11" PMFM_FK="359" RANK_ORDER="1" ACQUISITION_NUMBER="1" IS_MANDATORY="1"/>
......
......@@ -270,12 +270,10 @@
<OBSERVED_LOCATION2PERSON OBSERVED_LOCATION_FK="12" PERSON_FK="2"/>
<LANDING ID="30" OBSERVED_LOCATION_FK="12" PROGRAM_FK="40" RECORDER_DEPARTMENT_FK="2" RECORDER_PERSON_FK="2" CREATION_DATE="2020-12-18" UPDATE_DATE="2018-03-08" LANDING_DATE_TIME="2020-12-01 16:00:00.000" LANDING_LOCATION_FK="30" QUALITY_FLAG_FK="0" RANK_ORDER="1" VESSEL_FK="1" COMMENTS="landing test #1"/>
<LANDING_MEASUREMENT ID="30" LANDING_FK="30" PMFM_FK="359" RANK_ORDER="1" ALPHANUMERICAL_VALUE="2020-BIO-0001" UPDATE_DATE="2018-03-08" RECORDER_DEPARTMENT_FK="2" QUALITY_FLAG_FK="0"/>
<LANDING_MEASUREMENT ID="30" LANDING_FK="30" PMFM_FK="359" RANK_ORDER="1" ALPHANUMERICAL_VALUE="20-LEUCCIR-001" UPDATE_DATE="2018-03-08" RECORDER_DEPARTMENT_FK="2" QUALITY_FLAG_FK="0"/>
<SAMPLE ID="50" LANDING_FK="30" PROGRAM_FK="40" RECORDER_DEPARTMENT_FK="2" RECORDER_PERSON_FK="2" SAMPLE_DATE="2020-12-01 16:00:00.000" CREATION_DATE="2020-12-18" UPDATE_DATE="2018-03-08" LABEL="XBL071220MERLMER0001" RANK_ORDER="1" MATRIX_FK="2" QUALITY_FLAG_FK="0" REFERENCE_TAXON_FK="1010" COMMENTS="sample test #50"/>
<SAMPLE ID="51" LANDING_FK="30" PROGRAM_FK="40" RECORDER_DEPARTMENT_FK="2" RECORDER_PERSON_FK="2" SAMPLE_DATE="2020-12-01 16:00:00.000" CREATION_DATE="2020-12-18" UPDATE_DATE="2018-03-08" LABEL="XBL071220MERLMER0002" RANK_ORDER="2" MATRIX_FK="2" QUALITY_FLAG_FK="0" REFERENCE_TAXON_FK="1010" COMMENTS="sample test #51"/>
<!-- code morse -->
<SAMPLE_MEASUREMENT ID="50" SAMPLE_FK="50" RECORDER_DEPARTMENT_FK="2" PMFM_FK="358" RANK_ORDER="1" UPDATE_DATE="2018-03-08" QUALITY_FLAG_FK="0" ALPHANUMERICAL_VALUE="TitiX00032"/>
<SAMPLE ID="50" LANDING_FK="30" PROGRAM_FK="40" RECORDER_DEPARTMENT_FK="2" RECORDER_PERSON_FK="2" SAMPLE_DATE="2020-12-01 16:00:00.000" CREATION_DATE="2020-12-18" UPDATE_DATE="2018-03-08" LABEL="20-LEUCCIR-001-0001" RANK_ORDER="1" MATRIX_FK="2" QUALITY_FLAG_FK="0" REFERENCE_TAXON_FK="1010" COMMENTS="sample test #50"/>
<SAMPLE ID="51" LANDING_FK="30" PROGRAM_FK="40" RECORDER_DEPARTMENT_FK="2" RECORDER_PERSON_FK="2" SAMPLE_DATE="2020-12-01 16:00:00.000" CREATION_DATE="2020-12-18" UPDATE_DATE="2018-03-08" LABEL="20-LEUCCIR-001-0002" RANK_ORDER="2" MATRIX_FK="2" QUALITY_FLAG_FK="0" REFERENCE_TAXON_FK="1010" COMMENTS="sample test #51"/>
<!-- poids -->
<SAMPLE_MEASUREMENT ID="51" SAMPLE_FK="50" RECORDER_DEPARTMENT_FK="2" PMFM_FK="356" RANK_ORDER="2" UPDATE_DATE="2018-03-08" QUALITY_FLAG_FK="0" NUMERICAL_VALUE="4"/>
<!-- taille -->
......@@ -288,11 +286,9 @@
<SAMPLE_MEASUREMENT ID="55" SAMPLE_FK="51" RECORDER_DEPARTMENT_FK="2" PMFM_FK="81" RANK_ORDER="6" UPDATE_DATE="2018-03-08" QUALITY_FLAG_FK="0" NUMERICAL_VALUE="10"/>
<LANDING ID="31" OBSERVED_LOCATION_FK="12" PROGRAM_FK="40" RECORDER_DEPARTMENT_FK="2" RECORDER_PERSON_FK="2" CREATION_DATE="2020-12-18" UPDATE_DATE="2018-03-08" LANDING_DATE_TIME="2020-12-01 16:00:00.000" LANDING_LOCATION_FK="30" QUALITY_FLAG_FK="0" RANK_ORDER="1" VESSEL_FK="1" COMMENTS="landing test #2"/>
<LANDING_MEASUREMENT ID="31" LANDING_FK="31" PMFM_FK="359" RANK_ORDER="1" ALPHANUMERICAL_VALUE="2020-BIO-0001" UPDATE_DATE="2018-03-08" RECORDER_DEPARTMENT_FK="2" QUALITY_FLAG_FK="0"/>
<LANDING_MEASUREMENT ID="31" LANDING_FK="31" PMFM_FK="359" RANK_ORDER="1" ALPHANUMERICAL_VALUE="20-LEUCCIR-001" UPDATE_DATE="2018-03-08" RECORDER_DEPARTMENT_FK="2" QUALITY_FLAG_FK="0"/>
<SAMPLE ID="52" LANDING_FK="31" PROGRAM_FK="40" RECORDER_DEPARTMENT_FK="2" RECORDER_PERSON_FK="2" SAMPLE_DATE="2020-12-01 16:00:00.000" CREATION_DATE="2020-12-18" UPDATE_DATE="2018-03-08" LABEL="XBL071220MERLMER0001" RANK_ORDER="1" MATRIX_FK="2" QUALITY_FLAG_FK="0" REFERENCE_TAXON_FK="1010" COMMENTS="sample test #52"/>
<!-- code morse -->
<SAMPLE_MEASUREMENT ID="60" SAMPLE_FK="52" RECORDER_DEPARTMENT_FK="2" PMFM_FK="358" RANK_ORDER="1" UPDATE_DATE="2018-03-08" QUALITY_FLAG_FK="0" ALPHANUMERICAL_VALUE="TitiX00032"/>
<SAMPLE ID="52" LANDING_FK="31" PROGRAM_FK="40" RECORDER_DEPARTMENT_FK="2" RECORDER_PERSON_FK="2" SAMPLE_DATE="2020-12-01 16:00:00.000" CREATION_DATE="2020-12-18" UPDATE_DATE="2018-03-08" LABEL="20-LEUCCIR-001-0003" RANK_ORDER="1" MATRIX_FK="2" QUALITY_FLAG_FK="0" REFERENCE_TAXON_FK="1010" COMMENTS="sample test #52"/>
<!-- poids -->
<!-- <SAMPLE_MEASUREMENT ID="61" SAMPLE_FK="52" RECORDER_DEPARTMENT_FK="2" PMFM_FK="356" RANK_ORDER="2" UPDATE_DATE="2018-03-08" QUALITY_FLAG_FK="0" NUMERICAL_VALUE="4"/>-->
<!-- taille -->
......@@ -304,11 +300,9 @@
<LANDING ID="32" OBSERVED_LOCATION_FK="12" PROGRAM_FK="40" RECORDER_DEPARTMENT_FK="2" RECORDER_PERSON_FK="2" CREATION_DATE="2020-12-18" UPDATE_DATE="2018-03-08" LANDING_DATE_TIME="2020-12-01 16:00:00.000" LANDING_LOCATION_FK="30" QUALITY_FLAG_FK="0" RANK_ORDER="1" VESSEL_FK="1" COMMENTS="landing test #3"/>
<LANDING_MEASUREMENT ID="32" LANDING_FK="32" PMFM_FK="359" RANK_ORDER="1" ALPHANUMERICAL_VALUE="2020-BIO-0001" UPDATE_DATE="2018-03-08" RECORDER_DEPARTMENT_FK="2" QUALITY_FLAG_FK="0"/>
<LANDING_MEASUREMENT ID="32" LANDING_FK="32" PMFM_FK="359" RANK_ORDER="1" ALPHANUMERICAL_VALUE="20-LEUCCIR-001" UPDATE_DATE="2018-03-08" RECORDER_DEPARTMENT_FK="2" QUALITY_FLAG_FK="0"/>
<SAMPLE ID="53" LANDING_FK="32" PROGRAM_FK="40" RECORDER_DEPARTMENT_FK="2" RECORDER_PERSON_FK="2" SAMPLE_DATE="2020-12-01 16:00:00.000" CREATION_DATE="2020-12-18" UPDATE_DATE="2018-03-08" LABEL="XBL071220MERLMER0001" RANK_ORDER="1" MATRIX_FK="2" QUALITY_FLAG_FK="0" REFERENCE_TAXON_FK="1010" COMMENTS="sample test #53"/>
<!-- code morse -->
<SAMPLE_MEASUREMENT ID="70" SAMPLE_FK="53" RECORDER_DEPARTMENT_FK="2" PMFM_FK="358" RANK_ORDER="1" UPDATE_DATE="2018-03-08" QUALITY_FLAG_FK="0" ALPHANUMERICAL_VALUE="TitiX00032"/>
<SAMPLE ID="53" LANDING_FK="32" PROGRAM_FK="40" RECORDER_DEPARTMENT_FK="2" RECORDER_PERSON_FK="2" SAMPLE_DATE="2020-12-01 16:00:00.000" CREATION_DATE="2020-12-18" UPDATE_DATE="2018-03-08" LABEL="20-LEUCCIR-001-0004" RANK_ORDER="1" MATRIX_FK="2" QUALITY_FLAG_FK="0" REFERENCE_TAXON_FK="1010" COMMENTS="sample test #53"/>
<!-- poids -->
<SAMPLE_MEASUREMENT ID="71" SAMPLE_FK="53" RECORDER_DEPARTMENT_FK="2" PMFM_FK="356" RANK_ORDER="2" UPDATE_DATE="2018-03-08" QUALITY_FLAG_FK="0" NUMERICAL_VALUE="4"/>
<!-- taille -->
......@@ -323,11 +317,9 @@
<OBSERVED_LOCATION2PERSON OBSERVED_LOCATION_FK="13" PERSON_FK="2"/>
<LANDING ID="33" OBSERVED_LOCATION_FK="13" PROGRAM_FK="40" RECORDER_DEPARTMENT_FK="2" RECORDER_PERSON_FK="2" CREATION_DATE="2020-12-21" UPDATE_DATE="2018-03-08" LANDING_DATE_TIME="2020-12-02 16:00:00.000" LANDING_LOCATION_FK="30" QUALITY_FLAG_FK="0" RANK_ORDER="1" VESSEL_FK="2" COMMENTS="landing test #4"/>
<LANDING_MEASUREMENT ID="33" LANDING_FK="33" PMFM_FK="359" RANK_ORDER="1" ALPHANUMERICAL_VALUE="2020-BIO-0002" UPDATE_DATE="2018-03-09" RECORDER_DEPARTMENT_FK="2" QUALITY_FLAG_FK="0"/>
<LANDING_MEASUREMENT ID="33" LANDING_FK="33" PMFM_FK="359" RANK_ORDER="1" ALPHANUMERICAL_VALUE="20-LEUCCIR-002" UPDATE_DATE="2018-03-09" RECORDER_DEPARTMENT_FK="2" QUALITY_FLAG_FK="0"/>
<SAMPLE ID="54" LANDING_FK="33" PROGRAM_FK="40" RECORDER_DEPARTMENT_FK="2" RECORDER_PERSON_FK="2" SAMPLE_DATE="2020-12-02 16:00:00.000" CREATION_DATE="2020-12-21" UPDATE_DATE="2018-03-08" LABEL="XBL071220MERLMER0002" RANK_ORDER="1" MATRIX_FK="2" QUALITY_FLAG_FK="0" REFERENCE_TAXON_FK="1042" COMMENTS="sample test #54"/>
<!-- code morse -->
<SAMPLE_MEASUREMENT ID="80" SAMPLE_FK="54" RECORDER_DEPARTMENT_FK="2" PMFM_FK="358" RANK_ORDER="1" UPDATE_DATE="2018-03-08" QUALITY_FLAG_FK="0" ALPHANUMERICAL_VALUE="code morse value #1"/>
<SAMPLE ID="54" LANDING_FK="33" PROGRAM_FK="40" RECORDER_DEPARTMENT_FK="2" RECORDER_PERSON_FK="2" SAMPLE_DATE="2020-12-02 16:00:00.000" CREATION_DATE="2020-12-21" UPDATE_DATE="2018-03-08" LABEL="20-LEUCCIR-002-0001" RANK_ORDER="1" MATRIX_FK="2" QUALITY_FLAG_FK="0" REFERENCE_TAXON_FK="1042" COMMENTS="sample test #54"/>
<!-- poids -->
<SAMPLE_MEASUREMENT ID="81" SAMPLE_FK="54" RECORDER_DEPARTMENT_FK="2" PMFM_FK="356" RANK_ORDER="2" UPDATE_DATE="2018-03-08" QUALITY_FLAG_FK="0" NUMERICAL_VALUE="15"/>
<!-- taille -->
......@@ -338,11 +330,9 @@
<SAMPLE_MEASUREMENT ID="84" SAMPLE_FK="54" RECORDER_DEPARTMENT_FK="2" PMFM_FK="80" RANK_ORDER="5" UPDATE_DATE="2018-03-08" QUALITY_FLAG_FK="0" QUALITATIVE_VALUE_FK="185"/>
<LANDING ID="34" OBSERVED_LOCATION_FK="13" PROGRAM_FK="40" RECORDER_DEPARTMENT_FK="2" RECORDER_PERSON_FK="2" CREATION_DATE="2020-12-21" UPDATE_DATE="2018-03-08" LANDING_DATE_TIME="2020-12-03 16:00:00.000" LANDING_LOCATION_FK="30" QUALITY_FLAG_FK="0" RANK_ORDER="1" VESSEL_FK="1" COMMENTS="landing test #5"/>
<LANDING_MEASUREMENT ID="34" LANDING_FK="34" PMFM_FK="359" RANK_ORDER="1" ALPHANUMERICAL_VALUE="2020-BIO-0002" UPDATE_DATE="2018-03-09" RECORDER_DEPARTMENT_FK="2" QUALITY_FLAG_FK="0"/>
<LANDING_MEASUREMENT ID="34" LANDING_FK="34" PMFM_FK="359" RANK_ORDER="1" ALPHANUMERICAL_VALUE="20-LEUCCIR-002" UPDATE_DATE="2018-03-09" RECORDER_DEPARTMENT_FK="2" QUALITY_FLAG_FK="0"/>
<SAMPLE ID="55" LANDING_FK="34" PROGRAM_FK="40" RECORDER_DEPARTMENT_FK="2" RECORDER_PERSON_FK="2" SAMPLE_DATE="2020-12-02 16:00:00.000" CREATION_DATE="2020-12-21" UPDATE_DATE="2018-03-08" LABEL="XBL071220MERLMER00013" RANK_ORDER="1" MATRIX_FK="2" QUALITY_FLAG_FK="0" REFERENCE_TAXON_FK="1061" COMMENTS="sample test #55"/>
<!-- code morse -->
<SAMPLE_MEASUREMENT ID="90" SAMPLE_FK="55" RECORDER_DEPARTMENT_FK="2" PMFM_FK="358" RANK_ORDER="1" UPDATE_DATE="2018-03-08" QUALITY_FLAG_FK="0" ALPHANUMERICAL_VALUE="code morse value #2"/>
<SAMPLE ID="55" LANDING_FK="34" PROGRAM_FK="40" RECORDER_DEPARTMENT_FK="2" RECORDER_PERSON_FK="2" SAMPLE_DATE="2020-12-02 16:00:00.000" CREATION_DATE="2020-12-21" UPDATE_DATE="2018-03-08" LABEL="20-LEUCCIR-002-0002" RANK_ORDER="1" MATRIX_FK="2" QUALITY_FLAG_FK="0" REFERENCE_TAXON_FK="1061" COMMENTS="sample test #55"/>
<!-- poids -->
<SAMPLE_MEASUREMENT ID="91" SAMPLE_FK="55" RECORDER_DEPARTMENT_FK="2" PMFM_FK="356" RANK_ORDER="2" UPDATE_DATE="2018-03-08" QUALITY_FLAG_FK="0" NUMERICAL_VALUE="28"/>
<!-- taille -->
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment