package pt.utl.ist.scripts.runOnce.candidacy; import java.util.List; import net.sourceforge.fenixedu.applicationTier.Servico.caseHandling.CreateNewProcess; import net.sourceforge.fenixedu.dataTransferObject.candidacy.PrecedentDegreeInformationBean; import net.sourceforge.fenixedu.dataTransferObject.person.PersonBean; import net.sourceforge.fenixedu.domain.Person; import net.sourceforge.fenixedu.domain.candidacyProcess.CandidacyProcess; import net.sourceforge.fenixedu.domain.candidacyProcess.DegreeOfficePublicCandidacyHashCode; import net.sourceforge.fenixedu.domain.candidacyProcess.FormationBean; import net.sourceforge.fenixedu.domain.candidacyProcess.IndividualCandidacyProcess; import net.sourceforge.fenixedu.domain.candidacyProcess.degreeChange.DegreeChangeCandidacyProcess; import net.sourceforge.fenixedu.domain.candidacyProcess.degreeChange.DegreeChangeIndividualCandidacyProcess; import net.sourceforge.fenixedu.domain.candidacyProcess.degreeChange.DegreeChangeIndividualCandidacyProcessBean; import net.sourceforge.fenixedu.domain.candidacyProcess.degreeTransfer.DegreeTransferIndividualCandidacyProcess; import net.sourceforge.fenixedu.domain.candidacyProcess.degreeTransfer.DegreeTransferIndividualCandidacyProcessBean; import net.sourceforge.fenixedu.domain.student.PrecedentDegreeInformation; import org.joda.time.DateTime; import pt.utl.ist.scripts.commons.AtomicScript; public class MigrateDegreeTransferApplicationsToDegreeChange extends AtomicScript { public static final DateTime DEGREE_CHANGE_PROCESS_DATE = new DateTime(2009, 8, 15, 0, 0, 0, 0); private static final String[] PROCESS_CODES = { "091071409" }; @Override protected void run() throws Exception { for (String processCode : PROCESS_CODES) { System.out.println(String.format("Processing %s ", processCode)); System.out.println("\tSearching process for migration"); DegreeTransferIndividualCandidacyProcess degreeTransferProcess = IndividualCandidacyProcess.findIndividualCandidacyProcessByCode( DegreeTransferIndividualCandidacyProcess.class, processCode); if (degreeTransferProcess == null) { System.out.println("\tProcess with code %s not found"); continue; } System.out.println("\tMigrating to Degree Change Process"); DegreeTransferIndividualCandidacyProcessBean degreeTransferProcessBean = new DegreeTransferIndividualCandidacyProcessBean(degreeTransferProcess); degreeTransferProcessBean.setPrecedentDegreeInformation(new PrecedentDegreeInformationBean(degreeTransferProcess .getPrecedentDegreeInformation())); degreeTransferProcessBean.setPersonBean(new PersonBean(degreeTransferProcess.getPersonalDetails())); degreeTransferProcessBean.setPublicCandidacyHashCode(degreeTransferProcess.getCandidacyHashCode()); degreeTransferProcessBean.setCandidacyDate(degreeTransferProcess.getCandidacyDate()); DegreeChangeIndividualCandidacyProcessBean degreeChangeProcessBean = migrateDegreeTransferBeanToDegreeChangeBean(degreeTransferProcessBean); IndividualCandidacyProcess process = (IndividualCandidacyProcess) CreateNewProcess.run(DegreeChangeIndividualCandidacyProcess.class.getName(), degreeChangeProcessBean); if (process == null) { System.out.println("And error ocurred!"); } System.out.println("\tMigration done"); } } private DegreeChangeIndividualCandidacyProcessBean migrateDegreeTransferBeanToDegreeChangeBean( DegreeTransferIndividualCandidacyProcessBean degreeTransferProcessBean) throws Exception { DegreeChangeIndividualCandidacyProcessBean degreeChangeProcessBean = new DegreeChangeIndividualCandidacyProcessBean(); migratePersonalData(degreeTransferProcessBean, degreeChangeProcessBean); migrateCandidacyInformation(degreeTransferProcessBean, degreeChangeProcessBean); return degreeChangeProcessBean; } private void migrateCandidacyInformation(DegreeTransferIndividualCandidacyProcessBean degreeTransferProcessBean, DegreeChangeIndividualCandidacyProcessBean degreeChangeProcessBean) throws Exception { System.out.println("\tMigrating candidacy information"); migrateFormationConcluded(degreeTransferProcessBean, degreeChangeProcessBean); migrateFormationNonConcluded(degreeTransferProcessBean, degreeChangeProcessBean); migrateObservations(degreeTransferProcessBean, degreeChangeProcessBean); migratePersonNumber(degreeTransferProcessBean, degreeChangeProcessBean); migratePrecedentDegreeInformation(degreeTransferProcessBean, degreeChangeProcessBean); createPublicCandidacyHashCode(degreeTransferProcessBean, degreeChangeProcessBean); migrateSelectedDegree(degreeTransferProcessBean, degreeChangeProcessBean); migrateIsUtlStudent(degreeTransferProcessBean, degreeChangeProcessBean); migrateCandidacyInformationBean(degreeTransferProcessBean, degreeChangeProcessBean); degreeChangeProcessBean.setCandidacyProcess(this.getDegreeChangeCandidacyProcess()); degreeChangeProcessBean.setCandidacyDate(degreeTransferProcessBean.getCandidacyDate()); } private void migrateCandidacyInformationBean(DegreeTransferIndividualCandidacyProcessBean degreeTransferProcessBean, DegreeChangeIndividualCandidacyProcessBean degreeChangeProcessBean) { System.out.println("\t\tMigrating candidacy information bean"); } private void migrateIsUtlStudent(DegreeTransferIndividualCandidacyProcessBean degreeTransferProcessBean, DegreeChangeIndividualCandidacyProcessBean degreeChangeProcessBean) { System.out.println("\t\tMigrating is IST student"); degreeChangeProcessBean.setUtlStudent(degreeTransferProcessBean.getUtlStudent()); } private void migrateSelectedDegree(DegreeTransferIndividualCandidacyProcessBean degreeTransferProcessBean, DegreeChangeIndividualCandidacyProcessBean degreeChangeProcessBean) { System.out.println("\t\tMigrating Degree Selected"); degreeChangeProcessBean.setSelectedDegree(degreeTransferProcessBean.getSelectedDegree()); } private void createPublicCandidacyHashCode(DegreeTransferIndividualCandidacyProcessBean degreeTransferProcessBean, DegreeChangeIndividualCandidacyProcessBean degreeChangeProcessBean) throws Exception { System.out.println("\t\tCreating Degree Office Public Candidacy Hash Code"); String applicationEmail = degreeTransferProcessBean.getPublicCandidacyHashCode().getEmail(); CandidacyProcess correctProcess = getDegreeChangeCandidacyProcess(); DegreeOfficePublicCandidacyHashCode candidacyHashCode = DegreeOfficePublicCandidacyHashCode.getUnusedOrCreateNewHashCode(DegreeChangeIndividualCandidacyProcess.class, correctProcess, applicationEmail); degreeChangeProcessBean.setPublicCandidacyHashCode(candidacyHashCode); } public CandidacyProcess getDegreeChangeCandidacyProcess() { return CandidacyProcess.getCandidacyProcessByDate(DegreeChangeCandidacyProcess.class, DEGREE_CHANGE_PROCESS_DATE); } private void migratePrecedentDegreeInformation(DegreeTransferIndividualCandidacyProcessBean degreeTransferProcessBean, DegreeChangeIndividualCandidacyProcessBean degreeChangeProcessBean) { System.out.println("\t\tMigrating precedent degree information"); PrecedentDegreeInformationBean transferPrecedentDegreeBean = degreeTransferProcessBean.getPrecedentDegreeInformation(); PrecedentDegreeInformation precedentDegreeInformation = transferPrecedentDegreeBean.getPrecedentDegreeInformation(); PrecedentDegreeInformationBean changePrecedentDegreeBean = new PrecedentDegreeInformationBean(); changePrecedentDegreeBean.setConclusionDate(transferPrecedentDegreeBean.getConclusionDate()); changePrecedentDegreeBean.setConclusionGrade(transferPrecedentDegreeBean.getConclusionGrade()); changePrecedentDegreeBean.setCountry(transferPrecedentDegreeBean.getCountry()); changePrecedentDegreeBean.setDegreeDesignation(transferPrecedentDegreeBean.getDegreeDesignation()); changePrecedentDegreeBean.setInstitutionName(transferPrecedentDegreeBean.getInstitutionName()); changePrecedentDegreeBean.setInstitutionUnitName(transferPrecedentDegreeBean.getInstitutionUnitName()); degreeChangeProcessBean.setPrecedentDegreeType(degreeTransferProcessBean.getPrecedentDegreeType()); if (precedentDegreeInformation.isCandidacyInternal()) { degreeChangeProcessBean.setPrecedentStudentCurricularPlan(precedentDegreeInformation.getStudentCurricularPlan()); } degreeChangeProcessBean.setPrecedentDegreeInformation(changePrecedentDegreeBean); } private void migratePersonNumber(DegreeTransferIndividualCandidacyProcessBean degreeTransferProcessBean, DegreeChangeIndividualCandidacyProcessBean degreeChangeProcessBean) { degreeChangeProcessBean.setPersonNumber(degreeTransferProcessBean.getPersonNumber()); } private void migrateObservations(DegreeTransferIndividualCandidacyProcessBean degreeTransferProcessBean, DegreeChangeIndividualCandidacyProcessBean degreeChangeProcessBean) { System.out.println("\t\tMigrating observations"); degreeChangeProcessBean.setObservations(degreeTransferProcessBean.getObservations()); } private void migrateFormationNonConcluded(DegreeTransferIndividualCandidacyProcessBean degreeTransferProcessBean, DegreeChangeIndividualCandidacyProcessBean degreeChangeProcessBean) { System.out.println("\t\tMigrating formation non concluded"); degreeChangeProcessBean.setFormationNonConcludedBeanList(migrateFormation( degreeTransferProcessBean.getFormationNonConcludedBeanList(), Boolean.FALSE)); } private List migrateFormation(List formationList, Boolean hasConcluded) { List resultList = new java.util.ArrayList(); for (FormationBean bean : formationList) { FormationBean resultBean = new FormationBean(hasConcluded); resultBean.setConclusionExecutionYear(bean.getConclusionExecutionYear()); resultBean.setConclusionGrade(bean.getConclusionGrade()); resultBean.setDesignation(bean.getDesignation()); resultBean.setFormationBeginYear(bean.getFormationBeginYear()); resultBean.setFormationEndYear(bean.getFormationEndYear()); resultBean.setInstitutionUnitName(bean.getInstitutionUnitName()); resultList.add(resultBean); } return resultList; } private void migrateFormationConcluded(DegreeTransferIndividualCandidacyProcessBean degreeTransferProcessBean, DegreeChangeIndividualCandidacyProcessBean degreeChangeProcessBean) { System.out.println("\t\tMigrating formation concluded"); degreeChangeProcessBean.setFormationConcludedBeanList(migrateFormation( degreeTransferProcessBean.getFormationConcludedBeanList(), Boolean.TRUE)); } private void migratePersonalData(DegreeTransferIndividualCandidacyProcessBean degreeTransferProcessBean, DegreeChangeIndividualCandidacyProcessBean degreeChangeProcessBean) { Person person = degreeTransferProcessBean.getPersonBean().getPerson(); System.out.println(String.format("\tMigrating candidate %s with identification type %s and number %s", person.getName(), person.getIdDocumentType().getLocalizedName(), person.getDocumentIdNumber())); PersonBean personBean = new PersonBean(person); degreeChangeProcessBean.setPersonBean(personBean); } public static final void main(String[] args) { processWriteTransaction(new MigrateDegreeTransferApplicationsToDegreeChange()); } }