package com.pollex.pam.appointment.process; import java.util.Optional; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.pollex.pam.domain.Appointment; import com.pollex.pam.domain.AppointmentClosedInfo; import com.pollex.pam.enums.ContactStatusEnum; import com.pollex.pam.repository.AppointmentClosedInfoRepository; import com.pollex.pam.service.AppointmentClosedInfoService; import com.pollex.pam.service.AppointmentService; import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO; import com.pollex.pam.service.dto.ClosedProcessDTO; import com.pollex.pam.service.dto.DoneProcessDTO; import com.pollex.pam.web.rest.errors.AppointmentClosedInfoNotFoundException; @Service public class ClosedProcess implements AppointmentProcessInterface{ @Autowired AppointmentClosedInfoRepository appointmentClosedInfoRepository; @Autowired AppointmentService appointmentService; @Autowired AppointmentClosedInfoService appointmentClosedInfoService; @Override public void createProcess(AbstractAppointmentProcessDTO processDTO) { checkClosedInfo(processDTO.getAppointmentId()); ClosedProcessDTO closeProcess = toClosedProcessDTO(processDTO); AppointmentClosedInfo closedInfo = new AppointmentClosedInfo(); BeanUtils.copyProperties(closeProcess, closedInfo); appointmentClosedInfoRepository.save(closedInfo); } private ClosedProcessDTO toClosedProcessDTO(AbstractAppointmentProcessDTO processDTO) { ClosedProcessDTO closeProcess = (ClosedProcessDTO)processDTO; BeanUtils.copyProperties(processDTO, closeProcess); return closeProcess; } private void checkClosedInfo(Long appointmentId) { Optional closedInfo = appointmentClosedInfoRepository.findByAppointmentId(appointmentId); if(closedInfo.isPresent()) { throw new IllegalArgumentException("appointment closed info exist"); } } @Override public ContactStatusEnum getProcessType() { return ContactStatusEnum.CLOSED; } @Override public AppointmentClosedInfo editClosedInfo(AbstractAppointmentProcessDTO abstractDTO) { ClosedProcessDTO closeProcess = toClosedProcessDTO(abstractDTO); AppointmentClosedInfo closedInfo = appointmentClosedInfoService.findByAppointmentId(abstractDTO.getAppointmentId()); BeanUtils.copyProperties(closeProcess, closedInfo); return appointmentClosedInfoRepository.save(closedInfo); } }