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 746e85395ef5f7468646d889e42a0680fe3d875a
Author: Dan Haywood <[email protected]>
AuthorDate: Sun May 26 20:41:29 2024 +0100

    adds PetOwner_bookVisit mixin action,  to allow visits to be booked
    
    
    
    rearranges method order is all
---
 .../visit/contributions/PetOwner_bookVisit.java    | 62 ++++++++++++++++++++++
 1 file changed, 62 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..9b086de
--- /dev/null
+++ 
b/module-visit/src/main/java/domainapp/modules/visit/contributions/PetOwner_bookVisit.java
@@ -0,0 +1,62 @@
+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;
+
+    @MemberSupport
+    public PetOwner act(Pet pet, LocalDateTime visitAt) {
+        Visit visit = new Visit(pet, visitAt);
+        repositoryService.persistAndFlush(visit);
+        return petOwner;
+    }
+    @MemberSupport
+    public Set<Pet> choices0Act() {
+        return petOwner.getPets();
+    }
+    @MemberSupport
+    public Pet default0Act() {
+        Set<Pet> pets = petOwner.getPets();
+        return pets.size() == 1 ? pets.iterator().next() : null;
+    }
+    @MemberSupport
+    public LocalDateTime default1Act() {
+        return officeHoursTomorrow();
+    }
+    @MemberSupport
+    public String validate1Act(LocalDateTime visitAt) {
+        if (visitAt.isBefore(officeHoursTomorrow())) {
+            return "Must book in the future";
+        }
+        return null;
+    }
+
+    private LocalDateTime officeHoursTomorrow() {
+        return 
clockService.getClock().nowAsLocalDate().atStartOfDay().plusDays(1).plusHours(9);
+    }
+
+
+    @Inject ClockService clockService;
+    @Inject RepositoryService repositoryService;
+
+}

Reply via email to