VerreSupplementAssoService.java
package com.sintia.ffl.admin.optique.services.services;
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.ModeleVerreCatalogue;
import com.sintia.ffl.admin.optique.dal.entities.catalogue.SupplementVerreCatalogue;
import com.sintia.ffl.admin.optique.dal.entities.catalogue.VerreSupplementAssoCatalogue;
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.ModeleVerreCatalogueRepository;
import com.sintia.ffl.admin.optique.dal.repositories.catalogue.SupplementVerreCatalogueRepository;
import com.sintia.ffl.admin.optique.dal.repositories.catalogue.VerreSupplementAssoCatalogueRepository;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Optional;
@Service
@RequiredArgsConstructor
public class VerreSupplementAssoService {
@Getter
public static class ItemNotFoundException extends Exception{
private final String itemType;
public ItemNotFoundException(String itemType){
this.itemType = itemType;
}
}
private final VerreSupplementAssoCatalogueRepository verreSupplementAssoRepository;
private final DistributeurCatalogueRepository distributeurRepository;
private final FabricantCatalogueRepository fabricantRepository;
private final SupplementVerreCatalogueRepository supplementVerreRepository;
private final ModeleVerreCatalogueRepository modeleVerreRepository;
public VerreSupplementAssoCatalogue updateOrCreateAssociation(
Integer idFabricant, String glassOptoCode, Integer idDistributeur,
String extrasCode, boolean mandatory, boolean included, LocalDateTime date
) throws ItemNotFoundException {
if(idFabricant == null || idDistributeur == null){
return null;
}
// Obtenir l'association existante ou en créer une
VerreSupplementAssoCatalogue verreSupplementAssoCatalogue = verreSupplementAssoRepository
.findModeleVerre(
glassOptoCode,
extrasCode,
idDistributeur,
idFabricant
).orElse(new VerreSupplementAssoCatalogue());
// Obtenir le supplément verre
SupplementVerreCatalogue supplementVerre = supplementVerreRepository
.findSupplementVerreCataloguesByIdFabricantAndIdDistributeurAndCodeSupplementVerre(
idFabricant, idDistributeur, extrasCode
)
.orElseThrow(() -> new ItemNotFoundException("supplément verre"));
// Obtenir le modèle verre
ModeleVerreCatalogue modeleVerre = modeleVerreRepository
.findModeleVerreCatalogueByIdFabricantAndIdDistributeurAndCodeOptoCodeVerre(
idFabricant, idDistributeur, glassOptoCode
)
.orElseThrow(() -> new ItemNotFoundException("modèle verre"));
// Mettre à jour l'association
verreSupplementAssoCatalogue.setIdSupplementVerre(supplementVerre.getIdSupplementVerre());
verreSupplementAssoCatalogue.setIdModeleVerre(modeleVerre.getIdModeleVerre());
verreSupplementAssoCatalogue.setBObligatoire(mandatory ? "1" : "0");
verreSupplementAssoCatalogue.setBInclus(included ? "1" : "0");
verreSupplementAssoCatalogue.setBSaisie("1");
verreSupplementAssoCatalogue.setDateCreation(date);
verreSupplementAssoCatalogue.setDateMaj(date);
return verreSupplementAssoCatalogue;
}
public Integer getIdFabricant(String codeOptoCodeFabricant) {
return fabricantRepository.findBycodeOptoCodeFabricant(codeOptoCodeFabricant)
.map(FabricantCatalogue::getIdFabricant)
.orElse(null);
}
public Integer getIdDistributeur(String codeOptoCodeDistributeur){
return distributeurRepository.findBycOptoCodeDistributeur(codeOptoCodeDistributeur)
.map(DistributeurCatalogue::getIdDistributeur)
.orElse(null);
}
}