SupplementVerreHelper.java
package com.sintia.ffl.admin.optique.catalogue.helpers;
import com.sintia.ffl.admin.optique.catalogue.batch.reporter.Reporter;
import com.sintia.ffl.admin.optique.catalogue.models.EnrichedExtrasCSV;
import com.sintia.ffl.admin.optique.dal.entities.TypeSupplement;
import com.sintia.ffl.admin.optique.dal.entities.catalogue.DistributeurCatalogue;
import com.sintia.ffl.admin.optique.dal.entities.catalogue.FabricantCatalogue;
import com.sintia.ffl.admin.optique.dal.entities.catalogue.SupplementVerreCatalogue;
import com.sintia.ffl.admin.optique.dal.repositories.TypeSupplementRepository;
import com.sintia.ffl.admin.optique.dal.repositories.catalogue.DistributeurCatalogueRepository;
import com.sintia.ffl.admin.optique.dal.repositories.catalogue.FabricantCatalogueRepository;
import com.sintia.ffl.admin.optique.dal.repositories.catalogue.SupplementVerreCatalogueRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
@Service
@RequiredArgsConstructor
public class SupplementVerreHelper {
private final TypeSupplementRepository typeSupplementRepository;
private final SupplementVerreCatalogueRepository supplementVerreRepository;
private final FabricantCatalogueRepository fabricantRepository;
private final DistributeurCatalogueRepository distributeurRepository;
/**
* Insert a new extra (supplementVerre) in the database.<br> The table impacted will be :
* <ul>
* <li>supplementVerre => mandatory</li>
* </ul>
* @param enrichedExtra Données du supplément lues depuis le fichier CSV
*
* @param saisissable Indique si le supplément doit être saisissable ou non
* @param reporter Reporter permettant de tracer les erreurs dans le CR du traitement de chargement de catalogue
*/
public SupplementVerreCatalogue getSupplementVerreToCreate(
EnrichedExtrasCSV enrichedExtra,
boolean saisissable,
LocalDateTime creationDate,
Reporter reporter
) {
if (enrichedExtra == null) {
throw new IllegalArgumentException(
"Can't generate a new 'SupplementVerre' from a 'null' EnrichedExtrasCSV");
}
TypeSupplement extraType = typeSupplementRepository.findBycTypeSupplement(enrichedExtra.getExtrasType());
if(extraType == null){
reporter.addError(String.format("Le type %s de supplement %s est inexistant en BDD.",
enrichedExtra.getExtrasType(), enrichedExtra.getExtrasCode()));
return null;
}
FabricantCatalogue fabricant = this.fabricantRepository
.findBycodeOptoCodeFabricant(enrichedExtra.getMaker())
.orElseThrow(() -> new IllegalStateException("Le fabricant " + enrichedExtra.getMaker() + "n'existe pas en BDD."));
DistributeurCatalogue distributeur = this.distributeurRepository
.findBycOptoCodeDistributeur(enrichedExtra.getProvider())
.orElseThrow(() -> new IllegalStateException("Le distributeur " + enrichedExtra.getProvider() + "n'existe pas en BDD."));
// change with the date of the script
SupplementVerreCatalogue supplementVerre = new SupplementVerreCatalogue();
supplementVerre.setIdFabricant(fabricant.getIdFabricant());
supplementVerre.setIdDistributeur(distributeur.getIdDistributeur());
supplementVerre.setLibelleSupplementVerre(enrichedExtra.getExtrasName());
supplementVerre.setCodeSupplementVerre(enrichedExtra.getExtrasCode());
supplementVerre.setCTypeTraitAntireflet(null);
supplementVerre.setCProcedeSpecialFabrication(null);
supplementVerre.setCTypeTeinte("");
supplementVerre.setBCouchePhotochromique("");
supplementVerre.setBAntirayure("0");
supplementVerre.setBAntisalissure("0");
supplementVerre.setBCoucheUv("0");
supplementVerre.setBSaisie(saisissable ? "1" : "0");
supplementVerre.setDateCreation(creationDate);
supplementVerre.setDateMaj(creationDate);
supplementVerre.setIdTypeSupplement(extraType.getIdTypeSupplement());
return supplementVerre;
}
/**
* Update an existing extra (corresponding to the given enrichedExtra), by updating its type. The column "dMaj" is
* always updated with the given date
*
* @param enrichedExtra - Correspond to the data read from an enriched catalog file and must correspond to an
* existing extra in the database
* @param reporter Reporter permettant de tracer les erreurs dans le CR du traitement de chargement de catalogue
*/
public SupplementVerreCatalogue getSupplementVerreToUpdate(EnrichedExtrasCSV enrichedExtra,
Reporter reporter) {
return supplementVerreRepository
.findByCodeSupplementVerreAndCodeOptoDistributeurAndCodeOptoFabricant(
enrichedExtra.getExtrasCode(),
enrichedExtra.getMaker(),
enrichedExtra.getProvider()
).map(extra -> {
TypeSupplement extraType = typeSupplementRepository.findBycTypeSupplement(enrichedExtra.getExtrasType());
if(extraType != null)
extra.setIdTypeSupplement(extraType.getIdTypeSupplement());
else {
reporter.addError(String.format("Le type %s de supplement %s est inexistant en BDD.",
enrichedExtra.getExtrasType(), enrichedExtra.getExtrasCode()));
}
return extra;
})
.orElse(null);
}
}