private void sendSubmissionErrorReportMail(IndividualCandidacyProcessBean individualCandidacyProcessBean,
DomainException exception) {
StringBuilder sb = new StringBuilder();
MobilityIndividualApplicationProcessBean mobilityBean =
(MobilityIndividualApplicationProcessBean) individualCandidacyProcessBean;
// Email intro and error message
sb.append(BundleUtil.getString(Bundle.CANDIDATE, "error.mobility.report.mail.intro"));
sb.append("\n");
sb.append("\nError message: ");
sb.append(BundleUtil.getString(Bundle.APPLICATION, exception.getKey(), exception.getArgs()));
sb.append("\n");
// Data input from candidate
PersonBean personBean = mobilityBean.getPersonBean();
sb.append("\nPersonal data entered:\n");
sb.append(reportAppenderAuxString("Name", personBean.getName()));
sb.append(reportAppenderAuxEnum("Gender", personBean.getGender()));
sb.append(reportAppenderAuxDate("Date of Birth", personBean.getDateOfBirth()));
sb.append(reportAppenderAuxString("Documentation Number", personBean.getDocumentIdNumber()));
sb.append(reportAppenderAuxCountry("Nationality", personBean.getNationality()));
sb.append(reportAppenderAuxString("Address", personBean.getAddress()));
sb.append(reportAppenderAuxString("Zip-Code", personBean.getAreaCode()));
sb.append(reportAppenderAuxString("City.", personBean.getArea()));
sb.append(reportAppenderAuxCountry("Country of Residence", personBean.getCountryOfResidence()));
sb.append(reportAppenderAuxString("Phone", personBean.getPhone()));
sb.append(reportAppenderAuxString("Email", personBean.getEmail()));
sb.append(reportAppenderAuxString("Email Confirmation", personBean.getEmailConfirmation()));
sb.append(reportAppenderAuxString("Student Number", mobilityBean.getPersonNumber()));
MobilityStudentDataBean mobilityStudentDataBean = mobilityBean.getMobilityStudentDataBean();
sb.append("\nMobility Data Entered:\n");
sb.append(reportAppenderAuxCountry("Selected Country", mobilityStudentDataBean.getSelectedCountry()));
sb.append(reportAppenderAuxUnivUnitDegree("Selected Univ", mobilityStudentDataBean.getSelectedUniversity()));
sb.append(reportAppenderAuxEnum("School Level", mobilityStudentDataBean.getSchoolLevel()));
sb.append(reportAppenderAuxString("Other School Level", mobilityStudentDataBean.getOtherSchoolLevel()));
sb.append(reportAppenderAuxString("Exchange Coord Name",
mobilityStudentDataBean.getHomeInstitutionExchangeCoordinatorName()));
sb.append(reportAppenderAuxToStringable("Has Diploma/Degree", mobilityStudentDataBean.getHasDiplomaOrDegree()));
sb.append(reportAppenderAuxString("Diploma Name", mobilityStudentDataBean.getDiplomaName()));
sb.append(reportAppenderAuxToStringable("Diploma Year", mobilityStudentDataBean.getDiplomaConclusionYear()));
sb.append(reportAppenderAuxToStringable("Experience Research", mobilityStudentDataBean.getExperienceCarryingOutProject()));
sb.append(reportAppenderAuxDate("Date of Arrival", mobilityStudentDataBean.getDateOfArrival()));
sb.append(reportAppenderAuxDate("Date of Departure", mobilityStudentDataBean.getDateOfDeparture()));
sb.append(reportAppenderAuxToStringable("Types of Programme", mobilityStudentDataBean.getTypeOfProgrammeList()));
sb.append(reportAppenderAuxString("Thesis Main Subject", mobilityStudentDataBean.getMainSubjectThesis()));
sb.append(reportAppenderAuxToStringable("Has contacted Staff", mobilityStudentDataBean.getHasContactedOtherStaff()));
sb.append(reportAppenderAuxString("Staff Name", mobilityStudentDataBean.getNameOfContact()));
sb.append(reportAppenderAuxEnum("Applying for period", mobilityStudentDataBean.getApplyFor()));
sb.append(reportAppenderAuxString("Observations", individualCandidacyProcessBean.getObservations()));
sb.append("\nMobility Program, Degree and Courses:\n");
sb.append(reportAppenderAuxProgram("Selected Program", mobilityStudentDataBean.getSelectedMobilityProgram()));
sb.append(reportAppenderAuxUnivUnitDegree("Chosen Degree", mobilityBean.getDegree()));
sb.append(reportAppenderAuxCourses("Chosen Courses", mobilityBean.getSortedSelectedCurricularCourses()));
// Exception details
sb.append("\n");
sb.append(BundleUtil.getString(Bundle.CANDIDATE, "error.mobility.report.mail.stacktrace"));
sb.append("\n");