This is an automated email from the ASF dual-hosted git repository. danhaywood pushed a commit to branch v2 in repository https://gitbox.apache.org/repos/asf/causeway-app-petclinic.git
commit 51e22394a70669f2d6035fd7893275e8804d44bd Author: Dan Haywood <[email protected]> AuthorDate: Sun May 26 20:24:14 2024 +0100 adds PetOwner_bookVisit mixin action, to allow visits to be booked --- .../visit/contributions/PetOwner_bookVisit.java | 63 ++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/module-visit/src/main/java/domainapp/modules/visit/contributions/PetOwner_bookVisit.java b/module-visit/src/main/java/domainapp/modules/visit/contributions/PetOwner_bookVisit.java new file mode 100644 index 0000000..b1b539a --- /dev/null +++ b/module-visit/src/main/java/domainapp/modules/visit/contributions/PetOwner_bookVisit.java @@ -0,0 +1,63 @@ +package domainapp.modules.visit.contributions; + +import java.time.LocalDateTime; +import java.util.Set; + +import javax.inject.Inject; + +import org.apache.causeway.applib.annotation.Action; +import org.apache.causeway.applib.annotation.ActionLayout; +import org.apache.causeway.applib.annotation.MemberSupport; +import org.apache.causeway.applib.services.clock.ClockService; +import org.apache.causeway.applib.services.repository.RepositoryService; + +import lombok.RequiredArgsConstructor; + +import domainapp.modules.petowner.dom.pet.Pet; +import domainapp.modules.petowner.dom.petowner.PetOwner; +import domainapp.modules.visit.dom.visit.Visit; + +@Action +@ActionLayout(associateWith = "visits") +@RequiredArgsConstructor +public class PetOwner_bookVisit { + + private final PetOwner petOwner; + private Pet pet; + + @MemberSupport + public PetOwner act(Pet pet, LocalDateTime visitAt) { + Visit visit = new Visit(pet, visitAt); + repositoryService.persistAndFlush(visit); + return petOwner; + } + @MemberSupport + public Pet default0Act() { + Set<Pet> pets = petOwner.getPets(); + return pets.size() == 1 ? pets.iterator().next() : null; + } + @MemberSupport + public Set<Pet> choices0Act() { + return petOwner.getPets(); + } + @MemberSupport + public String validate1Act(LocalDateTime visitAt) { + if (visitAt.isBefore(officeHoursTomorrow())) { + return "Must book in the future"; + } + return null; + } + @MemberSupport + public LocalDateTime default1Act() { + return officeHoursTomorrow(); + } + + private LocalDateTime officeHoursTomorrow() { + return clockService.getClock().nowAsLocalDate().atStartOfDay().plusDays(1).plusHours(9); + } + + + @Inject ClockService clockService; + @Inject RepositoryService repositoryService; + +}
