Skip to content

Commit 94e19e0

Browse files
committed
Exclude SAS and students with special needs from GenerateSpecialSeasonEnrolmentPaymentCodesAndEvents
1 parent efc9dcf commit 94e19e0

File tree

4 files changed

+92
-43
lines changed

4 files changed

+92
-43
lines changed

fenixedu-ist-integration/src/main/dml/fenixedu-ist-integration.dml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,3 +338,12 @@ relation RemoteSystemDomainRoot {
338338
.pt.ist.fenixframework.DomainRoot playsRole domainRoot;
339339
}
340340

341+
relation SpecialSeasonStatuteException {
342+
.org.fenixedu.bennu.core.domain.Bennu playsRole bennu {
343+
multiplicity 0..1;
344+
}
345+
.org.fenixedu.academic.domain.student.StatuteType playsRole specialSeasonStatuteException {
346+
multiplicity *;
347+
}
348+
}
349+
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,67 @@
11
package pt.ist.fenixedu.integration.task.updateData.payments;
22

3+
import java.util.Collection;
4+
import java.util.Collections;
5+
import java.util.Set;
6+
37
import org.fenixedu.academic.domain.Degree;
48
import org.fenixedu.academic.domain.EnrolmentEvaluation;
9+
import org.fenixedu.academic.domain.ExecutionSemester;
510
import org.fenixedu.academic.domain.ExecutionYear;
611
import org.fenixedu.academic.domain.Person;
712
import org.fenixedu.academic.domain.accounting.PaymentCodeType;
813
import org.fenixedu.academic.domain.accounting.events.SpecialSeasonEnrolmentEvent;
914
import org.fenixedu.academic.domain.accounting.paymentCodes.AccountingEventPaymentCode;
1015
import org.fenixedu.academic.domain.administrativeOffice.AdministrativeOffice;
1116
import org.fenixedu.academic.domain.student.Registration;
17+
import org.fenixedu.academic.domain.student.StatuteType;
18+
import org.fenixedu.academic.domain.student.Student;
1219
import org.fenixedu.academic.util.EnrolmentEvaluationState;
1320
import org.fenixedu.academic.util.Money;
21+
import org.fenixedu.bennu.core.domain.Bennu;
1422
import org.fenixedu.bennu.core.domain.User;
1523
import org.fenixedu.bennu.core.groups.Group;
1624
import org.fenixedu.bennu.scheduler.CronTask;
1725
import org.fenixedu.bennu.scheduler.annotation.Task;
1826
import org.fenixedu.messaging.core.domain.Message;
27+
import org.fenixedu.messaging.core.template.DeclareMessageTemplate;
28+
import org.fenixedu.messaging.core.template.TemplateParameter;
1929
import org.joda.time.YearMonthDay;
2030

21-
import java.util.Collections;
31+
@DeclareMessageTemplate(id = "special.season.enrolment.payment.info.message.template",
32+
description = "special.season.enrolment.payment.info.message.description",
33+
subject = "special.season.enrolment.payment.info.message.subject",
34+
text = "special.season.enrolment.payment.info.message.body",
35+
parameters = {
36+
@TemplateParameter(id = "eventDescriptionPT",
37+
description = "special.season.enrolment.payment.info.message.parameter.event.description.pt"),
38+
@TemplateParameter(id = "eventDescriptionEN",
39+
description = "special.season.enrolment.payment.info.message.parameter.event.description.en"),
40+
@TemplateParameter(id = "paymentEntityCode", description = "special.season.enrolment.payment.info.message.parameter.entity.code"),
41+
@TemplateParameter(id = "paymentCode", description = "special.season.enrolment.payment.info.message.parameter.code"),
42+
@TemplateParameter(id = "amount", description = "special.season.enrolment.payment.info.message.parameter.amount"),
43+
},
44+
bundle = "resources.FenixeduIstIntegrationResources")
2245

2346
@Task(englishTitle = "Create Events and Payment Codes for Special Season Enrolments", readOnly = false)
2447
public class GenerateSpecialSeasonEnrolmentPaymentCodesAndEvents extends CronTask {
2548

2649
private static final Money AMOUNT_TO_PAY = new Money("20");
27-
private static final String EVENT_DESCRIPTION = "Inscrição em época especial à disciplina ";
50+
private static final String EVENT_DESCRIPTION_PT = "Inscrição em época especial à disciplina ";
51+
private static final String EVENT_DESCRIPTION_EN = "Special Season Enrolment Course ";
52+
private static final Set<StatuteType> EXCEPTION_STATUTE_TYPES = Bennu.getInstance().getSpecialSeasonStatuteExceptionSet();
2853

2954
@Override
3055
public void runTask() {
31-
56+
taskLog("Starting GenerateSpecialSeasonEnrolmentPaymentCodesAndEvents");
3257
ExecutionYear.readCurrentExecutionYear().getExecutionPeriodsSet().stream()
3358
.flatMap(es -> es.getEnrolmentsSet().stream())
3459
.flatMap(e -> e.getEvaluationsSet().stream())
3560
.filter(ee -> ee.getEvaluationSeason().isSpecial())
3661
.filter(ee -> !ee.getEnrolmentEvaluationState().equals(EnrolmentEvaluationState.ANNULED_OBJ))
3762
.filter(this::missingEvent)
3863
.forEach(this::createEvent);
64+
taskLog("Finish");
3965
}
4066

4167
private boolean missingEvent(final EnrolmentEvaluation ee) {
@@ -47,54 +73,52 @@ private void createEvent(final EnrolmentEvaluation ee) {
4773
final Degree degree = registration.getDegree();
4874
final AdministrativeOffice office = degree.getAdministrativeOffice();
4975
final Person person = registration.getPerson();
76+
final Student student = person.getStudent();
77+
final Collection<StatuteType> statuteTypes =
78+
student.getStatutesTypesValidOnAnyExecutionSemesterFor(ee.getEnrolment().getExecutionYear());
79+
final User user = registration.getPerson().getUser();
80+
81+
if (statuteTypes.stream().anyMatch(st -> EXCEPTION_STATUTE_TYPES.contains(st))) {
82+
taskLog("Skipped payment for student due to exception statute: %s%n", user.getUsername());
83+
return;
84+
}
85+
5086
final SpecialSeasonEnrolmentEvent event = new SpecialSeasonEnrolmentEvent(office, person, Collections.singleton(ee));
5187

5288
final YearMonthDay today = new YearMonthDay();
5389
final AccountingEventPaymentCode paymentCode =
5490
AccountingEventPaymentCode.create(PaymentCodeType.SPECIAL_SEASON_ENROLMENT, today, today.plusDays(10), event,
5591
AMOUNT_TO_PAY, AMOUNT_TO_PAY, event.getPerson());
5692

57-
final User user = registration.getPerson().getUser();
58-
final String eventDescription = eventDescription(ee);
59-
60-
taskLog("Generated payment codes for: %s -> %s%n", user.getUsername(), eventDescription);
61-
62-
final String subject = "Pagamento Inscrição Época Especial - " + eventDescription;
63-
final String body =
64-
"A inscrição em exames de época especial ou extraordinário está sujeita ao " +
65-
"pagamento de um emolumento de 20 Euros por unidade curricular. " +
66-
"\n\n" +
67-
"A sua inscrição só é finalizada após o pagamento do referido emolumento " +
68-
"usando a referência multibanco junta. " +
69-
"\n\n" +
70-
"Há uma referência multibanco associada a cada unidade curricular a que " +
71-
"pretende inscrever-se. " +
72-
"\n\n" +
73-
"Este pagamento deverá ser efectuado no prazo de 48h, sob pena " +
74-
"de a inscrição deixar de ser válida. " +
75-
"\n\n" +
76-
"Pode efetuar o pagamento via multibanco com os seguintes dados a partir " +
77-
"das 20:00 do dia de hoje (ou das 20:00 do dia seguinte se esta mensagem " +
78-
"tiver sido enviada depois das 18h00): " +
79-
"\n\n" +
80-
"Entidade: " + paymentCode.getEntityCode() + "\n" +
81-
"\n" +
82-
"Referência: " + paymentCode.getCode() + "\n\n" +
83-
"\n" +
84-
"Valor: " + AMOUNT_TO_PAY.toString() + " €" +
85-
"\n\n"
86-
;
93+
final String eventDescriptionPT = eventDescriptionPT(ee);
94+
final String eventDescriptionEN = eventDescriptionEN(ee);
95+
96+
taskLog("Generated payment codes for: %s -> %s%n", user.getUsername(), eventDescriptionEN);
97+
8798
Message.fromSystem()
88-
.replyToSender()
89-
.to(Group.users(user))
90-
.subject(subject)
91-
.textBody(body)
92-
.send();
99+
.replyToSender()
100+
.to(Group.users(user))
101+
.template("special.season.enrolment.payment.info.message.template")
102+
.parameter("eventDescriptionPT", eventDescriptionPT)
103+
.parameter("eventDescriptionEN", eventDescriptionEN)
104+
.parameter("paymentEntityCode", paymentCode.getEntityCode())
105+
.parameter("paymentCode", paymentCode.getCode())
106+
.parameter("amount", AMOUNT_TO_PAY.toString())
107+
.and()
108+
.send();
109+
93110
}
94111

95-
private String eventDescription(final EnrolmentEvaluation ee) {
96-
return EVENT_DESCRIPTION + ee.getEnrolment().getCurricularCourse().getName(ee.getExecutionPeriod()) + " - "
112+
private String eventDescriptionPT(final EnrolmentEvaluation ee) {
113+
return EVENT_DESCRIPTION_PT + ee.getEnrolment().getCurricularCourse().getName(ee.getExecutionPeriod()) + " - "
97114
+ ee.getExecutionPeriod().getQualifiedName();
98115
}
99116

100-
}
117+
private String eventDescriptionEN(final EnrolmentEvaluation ee) {
118+
ExecutionSemester executionSemester = ee.getExecutionPeriod();
119+
String semester = executionSemester.getSemester() == 1 ? "1st" : "2nd" + " Semester ";
120+
String year = executionSemester.getExecutionYear().getYear().toString();
121+
return EVENT_DESCRIPTION_EN + ee.getEnrolment().getCurricularCourse().getNameEn(ee.getExecutionPeriod()) + " - "
122+
+ semester + year;
123+
}
124+
}

fenixedu-ist-integration/src/main/resources/resources/FenixeduIstIntegrationResources_en.properties

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,5 +72,13 @@ message.academicAdministration.abandonState.observations=Automatically changed t
7272
message.academicAdministration.abandonState.warning=<strong>Attention:</strong> The student registration with no enrolments in the semesters <strong>{0}</strong> and <strong>{1}</strong> will be put on Abandon state.
7373
message.error.page.submitted.body=Thank you for contact, your message will be processed as soon as possible. For further questions, email us at:
7474
message.error.page.submitted=Your request has been logged
75+
special.season.enrolment.payment.info.message.body = The enrollment in exams in special season is subject to the payment of a fee of 20 Euros per curricular unit.\n\nYour registration is only finalized after the payment of the referred fee using the ATM reference.\n\nThere is a ATM reference associated with each course you wish to enroll.\n\nThis payment must be made within 48 hours, otherwise the registration will no longer be valid.\n\nYou can pay via ATM with the following information from 8:00 PM today (or 8:00 PM the next day if this message was sent after 6:00 PM):\n\nEntity: {{paymentEntityCode}}\n\nReference: {{paymentCode}}\n\n\nValue: {{amount}} \u20AC
76+
special.season.enrolment.payment.info.message.description = Message model to notify special season enrolment payment informations
77+
special.season.enrolment.payment.info.message.parameter.event.description.pt = String that partially describes the message subject in portuguese
78+
special.season.enrolment.payment.info.message.parameter.event.description.en = String that partially describes the message subject in english
79+
special.season.enrolment.payment.info.message.parameter.entity.code = String that represents the payment entity transaction code
80+
special.season.enrolment.payment.info.message.parameter.code = String that represents the transaction code
81+
special.season.enrolment.payment.info.message.parameter.amount = String that represent the amount to pay (in euros)
82+
special.season.enrolment.payment.info.message.subject = Special Season Enrolment Payment - {{ eventDescriptionEN }}
7583
title.student.merit.report = Student Merit Report
76-
link.dges.importation.process.cancel.stand.by.candidacies.from.previous.years = Cancel Not Concluded Applications From Previous Years
84+
link.dges.importation.process.cancel.stand.by.candidacies.from.previous.years = Cancel Not Concluded Applications From Previous Years

fenixedu-ist-integration/src/main/resources/resources/FenixeduIstIntegrationResources_pt.properties

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,5 +72,13 @@ message.academicAdministration.abandonState.observations=Estado colocado automat
7272
message.academicAdministration.abandonState.warning=<strong>Atenção:</strong> As matrículas dos alunos sem inscrições nos semestres <strong>{0}</strong> e <strong>{1}</strong> vão passar ao estado de Abandono.
7373
message.error.page.submitted.body=Agradecemos o seu contacto, a sua mensagem será processada o mais brevemente possível. Para mais questões, envie-nos um email para:
7474
message.error.page.submitted=O seu pedido foi registado
75+
special.season.enrolment.payment.info.message.body = A inscrição em exames de época especial ou extraordinário está sujeita ao pagamento de um emolumento de 20 Euros por unidade curricular.\n\nA sua inscrição só é finalizada após o pagamento do referido emolumento usando a referência multibanco junta.\n\nHá uma referência multibanco associada a cada unidade curricular a que pretende inscrever-se.\n\nEste pagamento deverá ser efectuado no prazo de 48h, sob pena de a inscrição deixar de ser válida.\n\nPode efetuar o pagamento via multibanco com os seguintes dados a partir das 20:00 do dia de hoje (ou das 20:00 do dia seguinte se esta mensagem tiver sido enviada depois das 18h00): \n\nEntidade: {{ paymentEntityCode }} \n\nReferência: {{ paymentCode }}\n\n\nValor: {{ amount }} \u20AC\n\n
76+
special.season.enrolment.payment.info.message.description = Modelo de mensagem para notificar informações sobre o pagamento de inscrições em época especial
77+
special.season.enrolment.payment.info.message.parameter.event.description.pt = String que descreve parcialmente o assunto da mensagem em portugu\u1EBDs
78+
special.season.enrolment.payment.info.message.parameter.event.description.en = String que descreve parcialmente o assunto da mensagem em inglês
79+
special.season.enrolment.payment.info.message.parameter.entity.code = String que representa o código da transação da entitade de pagamento
80+
special.season.enrolment.payment.info.message.parameter.code = String que representa o codigo de transação
81+
special.season.enrolment.payment.info.message.parameter.amount = String que representa a quantitade monetária (em euros) a pagar
82+
special.season.enrolment.payment.info.message.subject = Pagamento Inscrição Época Especial - {{ eventDescriptionPT }}
7583
title.student.merit.report = Listagem de Médias dos Alunos
76-
link.dges.importation.process.cancel.stand.by.candidacies.from.previous.years = Cancelar Candidaturas Não Concluídas de Anos Anteriores
84+
link.dges.importation.process.cancel.stand.by.candidacies.from.previous.years = Cancelar Candidaturas Não Concluídas de Anos Anteriores

0 commit comments

Comments
 (0)