Skip to content

Commit

Permalink
feature: shift zaak fatal date with additional info task (#1944)
Browse files Browse the repository at this point in the history
Shift due and fatal dates in accordance with additional info task fatal
date

Solves: PZ-3986

---------

Co-authored-by: Hristo Iliev <[email protected]>
  • Loading branch information
hsiliev and Hristo Iliev authored Oct 28, 2024
1 parent 1fdec03 commit 939b67a
Show file tree
Hide file tree
Showing 9 changed files with 223 additions and 81 deletions.
48 changes: 30 additions & 18 deletions src/main/java/net/atos/zac/app/planitems/PlanItemsRESTService.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import net.atos.client.zgw.zrc.model.Zaak;
import net.atos.client.zgw.zrc.model.generated.Resultaat;
import net.atos.zac.admin.ZaakafhandelParameterService;
import net.atos.zac.admin.model.FormulierDefinitie;
import net.atos.zac.admin.model.HumanTaskParameters;
import net.atos.zac.admin.model.MailtemplateKoppeling;
import net.atos.zac.admin.model.ZaakafhandelParameters;
Expand All @@ -61,7 +62,7 @@
import net.atos.zac.mailtemplates.model.MailGegevens;
import net.atos.zac.mailtemplates.model.MailTemplate;
import net.atos.zac.policy.PolicyService;
import net.atos.zac.shared.helper.OpschortenZaakHelper;
import net.atos.zac.shared.helper.SuspensionZaakHelper;
import net.atos.zac.util.UriUtil;
import net.atos.zac.util.time.DateTimeConverterUtil;
import net.atos.zac.zoeken.IndexingService;
Expand All @@ -75,6 +76,7 @@
@Produces(MediaType.APPLICATION_JSON)
public class PlanItemsRESTService {
private static final String REDEN_OPSCHORTING = "Aanvullende informatie opgevraagd";
private static final String REDEN_PAST_FATALE_DATUM = "Aanvullende informatie opgevraagd";

private ZaakVariabelenService zaakVariabelenService;
private CMMNService cmmnService;
Expand All @@ -88,7 +90,7 @@ public class PlanItemsRESTService {
private ConfiguratieService configuratieService;
private MailTemplateService mailTemplateService;
private PolicyService policyService;
private OpschortenZaakHelper opschortenZaakHelper;
private SuspensionZaakHelper suspensionZaakHelper;
private RESTMailGegevensConverter restMailGegevensConverter;

/**
Expand All @@ -111,7 +113,7 @@ public PlanItemsRESTService(
ConfiguratieService configuratieService,
MailTemplateService mailTemplateService,
PolicyService policyService,
OpschortenZaakHelper opschortenZaakHelper,
SuspensionZaakHelper suspensionZaakHelper,
RESTMailGegevensConverter restMailGegevensConverter
) {
this.zaakVariabelenService = zaakVariabelenService;
Expand All @@ -126,7 +128,7 @@ public PlanItemsRESTService(
this.configuratieService = configuratieService;
this.mailTemplateService = mailTemplateService;
this.policyService = policyService;
this.opschortenZaakHelper = opschortenZaakHelper;
this.suspensionZaakHelper = suspensionZaakHelper;
this.restMailGegevensConverter = restMailGegevensConverter;
}

Expand Down Expand Up @@ -159,23 +161,22 @@ public List<RESTPlanItem> listUserEventListenerPlanItems(@PathParam("uuid") fina
@GET
@Path("humanTaskPlanItem/{id}")
public RESTPlanItem readHumanTaskPlanItem(@PathParam("id") final String planItemId) {
final PlanItemInstance humanTaskPlanItem = cmmnService.readOpenPlanItem(planItemId);
final UUID zaakUUID = zaakVariabelenService.readZaakUUID(humanTaskPlanItem);
final UUID zaaktypeUUID = zaakVariabelenService.readZaaktypeUUID(humanTaskPlanItem);
final ZaakafhandelParameters zaakafhandelParameters = zaakafhandelParameterService.readZaakafhandelParameters(
zaaktypeUUID);
return planItemConverter.convertPlanItem(humanTaskPlanItem, zaakUUID, zaakafhandelParameters);
return convertPlanItem(planItemId);
}

@GET
@Path("processTaskPlanItem/{id}")
public RESTPlanItem readProcessTaskPlanItem(@PathParam("id") final String planItemId) {
final PlanItemInstance processTaskPlanItem = cmmnService.readOpenPlanItem(planItemId);
final UUID zaakUUID = zaakVariabelenService.readZaakUUID(processTaskPlanItem);
final UUID zaaktypeUUID = zaakVariabelenService.readZaaktypeUUID(processTaskPlanItem);
return convertPlanItem(planItemId);
}

private RESTPlanItem convertPlanItem(String planItemId) {
final PlanItemInstance planItemInstance = cmmnService.readOpenPlanItem(planItemId);
final UUID zaakUUID = zaakVariabelenService.readZaakUUID(planItemInstance);
final UUID zaaktypeUUID = zaakVariabelenService.readZaaktypeUUID(planItemInstance);
final ZaakafhandelParameters zaakafhandelParameters = zaakafhandelParameterService.readZaakafhandelParameters(
zaaktypeUUID);
return planItemConverter.convertPlanItem(processTaskPlanItem, zaakUUID, zaakafhandelParameters);
return planItemConverter.convertPlanItem(planItemInstance, zaakUUID, zaakafhandelParameters);
}

@POST
Expand All @@ -191,9 +192,14 @@ public void doHumanTaskplanItem(@Valid final RESTHumanTaskData humanTaskData) {
);

final LocalDate fatalDate = calculateFatalDate(humanTaskData, zaakafhandelParameters, planItem, zaak);
if (fatalDate != null && isZaakOpschorten(taakdata)) {
final long numberOfDays = ChronoUnit.DAYS.between(LocalDate.now(), fatalDate);
opschortenZaakHelper.opschortenZaak(zaak, numberOfDays, REDEN_OPSCHORTING);
if (fatalDate != null) {
if (isZaakOpschorten(taakdata)) {
final long numberOfDays = ChronoUnit.DAYS.between(LocalDate.now(), fatalDate);
suspensionZaakHelper.suspendZaak(zaak, numberOfDays, REDEN_OPSCHORTING);
} else if (fatalDate.isAfter(zaak.getUiterlijkeEinddatumAfdoening())) {
final long numberOfDays = ChronoUnit.DAYS.between(zaak.getUiterlijkeEinddatumAfdoening(), fatalDate);
suspensionZaakHelper.extendZaakFatalDate(zaak, numberOfDays, REDEN_PAST_FATALE_DATUM);
}
}

if (humanTaskData.taakStuurGegevens.sendMail) {
Expand Down Expand Up @@ -305,7 +311,9 @@ private LocalDate calculateFatalDate(
final LocalDate zaakFatalDate = zaak.getUiterlijkeEinddatumAfdoening();

if (humanTaskData.fataledatum != null) {
validateFatalDate(humanTaskData.fataledatum, zaakFatalDate);
if (!isAanvullendeInformatieTask(planItem)) {
validateFatalDate(humanTaskData.fataledatum, zaakFatalDate);
}
return humanTaskData.fataledatum;
} else {
if (humanTaskParameters.isPresent() && humanTaskParameters.get().getDoorlooptijd() != null) {
Expand All @@ -320,6 +328,10 @@ private LocalDate calculateFatalDate(
return null;
}

private static boolean isAanvullendeInformatieTask(PlanItemInstance planItem) {
return FormulierDefinitie.AANVULLENDE_INFORMATIE.toString().equals(planItem.getPlanItemDefinitionId());
}

private static void validateFatalDate(LocalDate taskFatalDate, LocalDate zaakFatalDate) {
if (taskFatalDate.isAfter(zaakFatalDate)) {
throw new InputValidationFailedException(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
import net.atos.zac.flowable.task.TaakVariabelenService;
import net.atos.zac.formulieren.model.FormulierVeldtype;
import net.atos.zac.identity.IdentityService;
import net.atos.zac.shared.helper.OpschortenZaakHelper;
import net.atos.zac.shared.helper.SuspensionZaakHelper;
import net.atos.zac.util.time.DateTimeConverterUtil;

public class FormulierRuntimeService {
Expand Down Expand Up @@ -71,7 +71,7 @@ public class FormulierRuntimeService {
private ReferenceTableService referenceTableService;

@Inject
private OpschortenZaakHelper opschortenZaakHelper;
private SuspensionZaakHelper suspensionZaakHelper;

@Inject
private DrcClientService drcClientService;
Expand Down Expand Up @@ -118,15 +118,15 @@ public Task submit(final RestTask restTask, Task task, final Zaak zaak) {
task = flowableTaskService.updateTask(task);
}
if (formulierData.zaakOpschorten && !zaak.isOpgeschort()) {
opschortenZaakHelper.opschortenZaak(
suspensionZaakHelper.suspendZaak(
zaak,
DAYS.between(LocalDate.now(), convertToLocalDate(task.getDueDate())),
restTask.getFormulierDefinitie() != null ?
restTask.getFormulierDefinitie().naam :
restTask.getFormioFormulier().getString(FORMIO_TITLE));
}
if (formulierData.zaakHervatten && zaak.isOpgeschort()) {
opschortenZaakHelper.hervattenZaak(zaak, REDEN_ZAAK_HERVATTEN);
suspensionZaakHelper.resumeZaak(zaak, REDEN_ZAAK_HERVATTEN);
}
markDocumentAsSent(formulierData);
markDocumentAsSigned(formulierData);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
import net.atos.zac.flowable.ZaakVariabelenService;
import net.atos.zac.policy.PolicyService;

public class OpschortenZaakHelper {
private static final String OPSCHORTING = "Opschorting";
private static final String HERVATTING = "Hervatting";
public class SuspensionZaakHelper {
private static final String SUSPENSION = "Opschorting";
private static final String RESUMING = "Hervatting";

private PolicyService policyService;
private ZrcClientService zrcClientService;
Expand All @@ -28,11 +28,11 @@ public class OpschortenZaakHelper {
/**
* Default no-arg constructor, required by Weld.
*/
public OpschortenZaakHelper() {
public SuspensionZaakHelper() {
}

@Inject
OpschortenZaakHelper(
SuspensionZaakHelper(
final PolicyService policyService,
final ZrcClientService zrcClientService,
final ZaakVariabelenService zaakVariabelenService
Expand All @@ -42,27 +42,29 @@ public OpschortenZaakHelper() {
this.zaakVariabelenService = zaakVariabelenService;
}

public Zaak opschortenZaak(Zaak zaak, final long aantalDagen, final String redenOpschorting) {
public Zaak suspendZaak(Zaak zaak, final long numberOfDays, final String suspensionReason) {
assertPolicy(policyService.readZaakRechten(zaak).opschorten());
assertPolicy(StringUtils.isEmpty(zaak.getOpschorting().getReden()));
final UUID zaakUUID = zaak.getUuid();
final String toelichting = String.format("%s: %s", OPSCHORTING, redenOpschorting);
final String toelichting = String.format("%s: %s", SUSPENSION, suspensionReason);
LocalDate einddatumGepland = null;
if (zaak.getEinddatumGepland() != null) {
einddatumGepland = zaak.getEinddatumGepland().plusDays(aantalDagen);
einddatumGepland = zaak.getEinddatumGepland().plusDays(numberOfDays);
}
final LocalDate uiterlijkeEinddatumAfdoening = zaak.getUiterlijkeEinddatumAfdoening().plusDays(aantalDagen);
final Zaak updatedZaak = zrcClientService.patchZaak(
zaakUUID,
toPatch(einddatumGepland, uiterlijkeEinddatumAfdoening, redenOpschorting, true),
toelichting
final LocalDate uiterlijkeEinddatumAfdoening = zaak.getUiterlijkeEinddatumAfdoening().plusDays(numberOfDays);
final var patchZaak = addSuspensionToZaakPatch(
createZaakPatch(einddatumGepland, uiterlijkeEinddatumAfdoening),
suspensionReason,
true
);

final Zaak updatedZaak = zrcClientService.patchZaak(zaakUUID, patchZaak, toelichting);
zaakVariabelenService.setDatumtijdOpgeschort(zaakUUID, ZonedDateTime.now());
zaakVariabelenService.setVerwachteDagenOpgeschort(zaakUUID, Math.toIntExact(aantalDagen));
zaakVariabelenService.setVerwachteDagenOpgeschort(zaakUUID, Math.toIntExact(numberOfDays));
return updatedZaak;
}

public Zaak hervattenZaak(final Zaak zaak, final String redenHervatting) {
public Zaak resumeZaak(final Zaak zaak, final String resumeReason) {
assertPolicy(policyService.readZaakRechten(zaak).hervatten());
assertPolicy(zaak.isOpgeschort());
final UUID zaakUUID = zaak.getUuid();
Expand All @@ -76,40 +78,55 @@ public Zaak hervattenZaak(final Zaak zaak, final String redenHervatting) {
}
final LocalDate uiterlijkeEinddatumAfdoening = zaak.getUiterlijkeEinddatumAfdoening().plusDays(offset);

final String toelichting = String.format("%s: %s", HERVATTING, redenHervatting);
final Zaak updatedZaak = zrcClientService.patchZaak(
zaakUUID,
toPatch(einddatumGepland, uiterlijkeEinddatumAfdoening, redenHervatting, false),
toelichting
final String toelichting = String.format("%s: %s", RESUMING, resumeReason);
final var patchZaak = addSuspensionToZaakPatch(
createZaakPatch(einddatumGepland, uiterlijkeEinddatumAfdoening),
resumeReason,
false
);

final Zaak updatedZaak = zrcClientService.patchZaak(zaakUUID, patchZaak, toelichting);
zaakVariabelenService.removeDatumtijdOpgeschort(zaakUUID);
zaakVariabelenService.removeVerwachteDagenOpgeschort(zaakUUID);
return updatedZaak;
}

/**
* @param einddatumGepland streefdatum van de zaak; may be null in which case the
* streefdatum is not patched
* @param uiterlijkeEinddatumAfdoening fataledatum van de zaak
* @param reden reden voor de opschorting
* @param isOpschorting true indien opschorten, false indien hervatten
* @return zaak voor patch
*/
private Zaak toPatch(
final LocalDate einddatumGepland,
final LocalDate uiterlijkeEinddatumAfdoening,
final String reden,
final boolean isOpschorting
public Zaak extendZaakFatalDate(final Zaak zaak, final long numberOfDays, final String description) {
var zaakRechten = policyService.readZaakRechten(zaak);
assertPolicy(zaakRechten.wijzigen() && zaakRechten.verlengenDoorlooptijd());

final UUID zaakUUID = zaak.getUuid();
LocalDate endDatePlanned = null;
if (zaak.getEinddatumGepland() != null) {
endDatePlanned = zaak.getEinddatumGepland().plusDays(numberOfDays);
}
final LocalDate finalCompletionDate = zaak.getUiterlijkeEinddatumAfdoening().plusDays(numberOfDays);

return zrcClientService.patchZaak(zaakUUID, createZaakPatch(endDatePlanned, finalCompletionDate), description);
}

private Zaak createZaakPatch(
final LocalDate endDatePlanned,
final LocalDate finalCompletionDate
) {
final Zaak zaak = new Zaak();
if (einddatumGepland != null) {
zaak.setEinddatumGepland(einddatumGepland);
if (endDatePlanned != null) {
zaak.setEinddatumGepland(endDatePlanned);
}
zaak.setUiterlijkeEinddatumAfdoening(uiterlijkeEinddatumAfdoening);
zaak.setUiterlijkeEinddatumAfdoening(finalCompletionDate);
return zaak;
}

private Zaak addSuspensionToZaakPatch(
final Zaak zaak,
final String reason,
final boolean isOpschorting
) {
final Opschorting opschorting = new Opschorting();
opschorting.setReden(reden);
opschorting.setReden(reason);
opschorting.setIndicatie(isOpschorting);
zaak.setOpschorting(opschorting);
return zaak;
}

}
6 changes: 3 additions & 3 deletions src/main/kotlin/net/atos/zac/app/task/TaskRestService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ import net.atos.zac.flowable.util.TaskUtil
import net.atos.zac.formulieren.FormulierRuntimeService
import net.atos.zac.policy.PolicyService
import net.atos.zac.policy.PolicyService.assertPolicy
import net.atos.zac.shared.helper.OpschortenZaakHelper
import net.atos.zac.shared.helper.SuspensionZaakHelper
import net.atos.zac.signalering.SignaleringService
import net.atos.zac.signalering.model.SignaleringType
import net.atos.zac.signalering.model.SignaleringZoekParameters
Expand Down Expand Up @@ -105,7 +105,7 @@ class TaskRestService @Inject constructor(
private val taakHistorieConverter: RestTaskHistoryConverter,
private val policyService: PolicyService,
private val enkelvoudigInformatieObjectUpdateService: EnkelvoudigInformatieObjectUpdateService,
private val opschortenZaakHelper: OpschortenZaakHelper,
private val opschortenZaakHelper: SuspensionZaakHelper,
private val formulierRuntimeService: FormulierRuntimeService,
private val zaakVariabelenService: ZaakVariabelenService
) {
Expand Down Expand Up @@ -260,7 +260,7 @@ class TaskRestService @Inject constructor(
val updatedTask = updateDescriptionAndDueDate(restTask)
createDocuments(restTask, zaak)
if (isZaakHervatten(restTask.taakdata)) {
opschortenZaakHelper.hervattenZaak(zaak, REDEN_ZAAK_HERVATTEN)
opschortenZaakHelper.resumeZaak(zaak, REDEN_ZAAK_HERVATTEN)
}
restTask.taakdata?.let { taakdata ->
taakdata[TAAK_DATA_DOCUMENTEN_VERZENDEN_POST]?.let {
Expand Down
8 changes: 4 additions & 4 deletions src/main/kotlin/net/atos/zac/app/zaak/ZaakRestService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ import net.atos.zac.policy.PolicyService
import net.atos.zac.policy.PolicyService.assertPolicy
import net.atos.zac.productaanvraag.InboxProductaanvraagService
import net.atos.zac.productaanvraag.ProductaanvraagService
import net.atos.zac.shared.helper.OpschortenZaakHelper
import net.atos.zac.shared.helper.SuspensionZaakHelper
import net.atos.zac.signalering.SignaleringService
import net.atos.zac.signalering.model.SignaleringType
import net.atos.zac.signalering.model.SignaleringZoekParameters
Expand Down Expand Up @@ -175,7 +175,7 @@ class ZaakRestService @Inject constructor(
private val zaakafhandelParameterService: ZaakafhandelParameterService,
private val restGeometryConverter: RestGeometryConverter,
private val healthCheckService: HealthCheckService,
private val opschortenZaakHelper: OpschortenZaakHelper,
private val opschortenZaakHelper: SuspensionZaakHelper,
private val zaakService: ZaakService,
private val restZaakHistorieRegelConverter: RESTZaakHistorieRegelConverter
) {
Expand Down Expand Up @@ -365,15 +365,15 @@ class ZaakRestService @Inject constructor(
val zaak = zrcClientService.readZaak(zaakUUID)
return if (opschortGegevens.indicatieOpschorting) {
restZaakConverter.toRestZaak(
opschortenZaakHelper.opschortenZaak(
opschortenZaakHelper.suspendZaak(
zaak,
opschortGegevens.duurDagen,
opschortGegevens.redenOpschorting
)
)
} else {
restZaakConverter.toRestZaak(
opschortenZaakHelper.hervattenZaak(zaak, opschortGegevens.redenOpschorting)
opschortenZaakHelper.resumeZaak(zaak, opschortGegevens.redenOpschorting)
)
}
}
Expand Down
Loading

0 comments on commit 939b67a

Please sign in to comment.