package com.pollex.pam.appointment.process; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; 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.SatisfactionService; import com.pollex.pam.service.dto.AbstractAppointmentProcessDTO; import com.pollex.pam.service.dto.ClosedProcessDTO; @Service @Transactional public class ClosedProcess implements AppointmentProcessInterface{ @Autowired AppointmentClosedInfoRepository appointmentClosedInfoRepository; @Autowired AppointmentService appointmentService; @Autowired AppointmentClosedInfoService appointmentClosedInfoService; @Autowired SatisfactionService satisfactionService; @Override public AppointmentClosedInfo create(AbstractAppointmentProcessDTO processDTO) { ClosedProcessDTO closeProcess = toClosedProcessDTO(processDTO); AppointmentClosedInfo closedInfo = new AppointmentClosedInfo(); BeanUtils.copyProperties(closeProcess, closedInfo); Appointment appointment = appointmentService.findById(processDTO.getAppointmentId()); satisfactionService.createSatisfaction(appointment); return appointmentClosedInfoRepository.save(closedInfo); } private ClosedProcessDTO toClosedProcessDTO(AbstractAppointmentProcessDTO processDTO) { ClosedProcessDTO closeProcess = (ClosedProcessDTO)processDTO; BeanUtils.copyProperties(processDTO, closeProcess); return closeProcess; } @Override public ContactStatusEnum getProcessType() { return ContactStatusEnum.CLOSED; } @Override public AppointmentClosedInfo editClosedInfo( AbstractAppointmentProcessDTO abstractDTO , AppointmentClosedInfo closedInfo) { ClosedProcessDTO closeProcess = toClosedProcessDTO(abstractDTO); BeanUtils.copyProperties(closeProcess, closedInfo); return appointmentClosedInfoRepository.save(closedInfo); } }