VerreSupplementAssoIteHelper.java

package com.sintia.ffl.admin.optique.specifique.isea.helpers;

import com.sintia.ffl.admin.optique.dal.entities.ModeleVerreIte;
import com.sintia.ffl.admin.optique.dal.entities.SupplementVerreIte;
import com.sintia.ffl.admin.optique.dal.entities.VerreSupplementAssoIte;
import com.sintia.ffl.admin.optique.dal.entities.catalogue.ModeleVerreCatalogueIte;
import com.sintia.ffl.admin.optique.dal.entities.catalogue.SupplementVerreCatalogueIte;
import com.sintia.ffl.admin.optique.dal.entities.catalogue.VerreSupplementAssoCatalogueIte;
import com.sintia.ffl.admin.optique.dal.repositories.catalogue.ModeleVerreCatalogueIteRepository;
import com.sintia.ffl.admin.optique.dal.repositories.catalogue.SupplementVerreCatalogueIteRepository;
import com.sintia.ffl.admin.optique.services.services.VerreSupplementAssoIteService;
import com.sintia.ffl.admin.optique.specifique.isea.models.VerreSupplementAssoCSV;
import com.sintia.ffl.admin.optique.specifique.isea.reporter.ChargementReporter;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.ZoneId;
import java.util.Date;
import java.util.List;
import java.util.Optional;

@Service
@Slf4j
public class VerreSupplementAssoIteHelper {
	
	private static final Logger LOGGER = LoggerFactory.getLogger(ModeleVerreIteHelper.class);
	
	@Autowired
	private ChargementReporter chargementReporter;
	
	@Autowired
	private VerreSupplementAssoIteService verreSupplementAssoCatalogueIteService;
	
	@Autowired
	private ModeleVerreCatalogueIteRepository modeleVerreCatalogueIteRepository;
	
	@Autowired
	private SupplementVerreCatalogueIteRepository supplementVerreCatalogueIteRepository;
	
	
	public void process(List<VerreSupplementAssoCSV> verreSupplementAssoCSVList, Date date) {
		
		for(VerreSupplementAssoCSV verreSupplementAssoCSV : verreSupplementAssoCSVList){
			
			try {
				if ("C".equals(verreSupplementAssoCSV.getAction()) || "M".equals(verreSupplementAssoCSV.getAction())) {
					createOrModifyVerreSupplementAsso(verreSupplementAssoCSV, date);
				}
			} catch(Exception e){
				LOGGER.error("Erreur Rencontrée dans le traitement de l'association verre supplement {} {} cause {}", verreSupplementAssoCSV.getCodeSupplement(),
						verreSupplementAssoCSV.getCodeVerre(), e.getMessage());
				chargementReporter.addError("Erreur Rencontrée dans le traitement de l'association verre supplement "+verreSupplementAssoCSV.getCodeSupplement() +" cause "+e.getMessage());
			}
			
		}
	}
	
	/**
	 * Creation ou modification Enregistrement VerreSupplement
	 * @param date
	 */
	private void createOrModifyVerreSupplementAsso(VerreSupplementAssoCSV verreSupplementAssoCSV, Date date) {
		VerreSupplementAssoCatalogueIte verreSupplementAssoCatalogueIte = verreSupplementAssoCatalogueIteService.exist(verreSupplementAssoCSV.getCodeSupplement(), verreSupplementAssoCSV.getCodeVerre());

		Optional<ModeleVerreCatalogueIte> modeleVerreCatalogueIte = modeleVerreCatalogueIteRepository.findModelVerreIteByCodeAndFournisseurAndModele(verreSupplementAssoCSV.getCodeVerre(), verreSupplementAssoCSV.getCodeFabricant() , verreSupplementAssoCSV.getCodeFournisseur());

		Optional<SupplementVerreCatalogueIte> supplementVerreCatalogueIte = supplementVerreCatalogueIteRepository
				.findByCodeSupplementVerreAndIdDistributeurIteAndIdFabricantIte(
						verreSupplementAssoCSV.getCodeSupplement(),
						modeleVerreCatalogueIte.map(ModeleVerreCatalogueIte::getIdDistributeurIte).orElse(null),
						modeleVerreCatalogueIte.map(ModeleVerreCatalogueIte::getIdFabricantIte).orElse(null)
				);
		if (verreSupplementAssoCatalogueIte != null && modeleVerreCatalogueIte.isPresent() && supplementVerreCatalogueIte.isPresent()) {
			modifyVerreSupplementAssoIte(date, verreSupplementAssoCSV, verreSupplementAssoCatalogueIte);
		} else if(verreSupplementAssoCatalogueIte == null && modeleVerreCatalogueIte.isPresent() && supplementVerreCatalogueIte.isPresent()) {
			createVerreSupplementAssoIte(date, verreSupplementAssoCSV, modeleVerreCatalogueIte.get(), supplementVerreCatalogueIte.get());
		}
	}
	
	/**
	 * Creation VerreSupplementAsso
	 * @param date
	 * @param verreSupplementAssoCSV
	 */
	private void createVerreSupplementAssoIte(Date date, VerreSupplementAssoCSV verreSupplementAssoCSV, ModeleVerreCatalogueIte modeleVerreCatalogueIte,
			SupplementVerreCatalogueIte supplementVerreCatalogueIte) {
		// Modification
		VerreSupplementAssoCatalogueIte verreSupplementAssoCatalogueIteToCreate = VerreSupplementAssoCatalogueIte.builder()
				.idSupplementVerreIte(supplementVerreCatalogueIte.getIdSupplementVerreIte())
				.idModeleVerreIte(modeleVerreCatalogueIte.getIdModeleVerreIte())
				.dCreation(date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime())
				.bObligatoire("Y".equals(verreSupplementAssoCSV.getSupplementObligatoire()) ? "1" : "0")
				.bInclus("Y".equals(verreSupplementAssoCSV.getSupplementInclus()) ? "1" : "0")
				.bSaisie("1")
				.dMaj(date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()).build();
		verreSupplementAssoCatalogueIteService.modifyOrCreate(verreSupplementAssoCatalogueIteToCreate);
	}
	
	/**
	 * Modification VerreSupplementAsso
	 * @param date
	 * @param verreSupplementAssoCSV
	 */
	private void modifyVerreSupplementAssoIte(Date date, VerreSupplementAssoCSV verreSupplementAssoCSV, VerreSupplementAssoCatalogueIte verreSupplementAssoCatalogueIte) {
		// Modification
		VerreSupplementAssoCatalogueIte verreSupplementAssoCatalogueIteToUpdate = VerreSupplementAssoCatalogueIte.builder()
				.idVerreSupplementAssoIte(verreSupplementAssoCatalogueIte.getIdVerreSupplementAssoIte())
				.bObligatoire("Y".equals(verreSupplementAssoCSV.getSupplementObligatoire()) ? "1" : "0")
				.bInclus("Y".equals(verreSupplementAssoCSV.getSupplementInclus()) ? "1" : "0")
				.bSaisie("1")
				.dMaj(date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()).build();
		verreSupplementAssoCatalogueIteService.modifyOrCreate(verreSupplementAssoCatalogueIteToUpdate);
	}
	
}