Search in sources :

Example 11 with Task

use of org.estatio.module.capex.dom.task.Task in project estatio by estatio.

the class EnforceTaskAssignmentPolicySubscriber method on.

@EventHandler
@Subscribe
public void on(Task_mixinActAbstract.ActionDomainEvent ev) {
    if (ev.getSemantics().isSafeInNature()) {
        return;
    }
    final Class stateTransitionClass = ev.getStateTransitionClass();
    final Task task = (Task) ev.getMixedIn();
    final StateTransition transition = stateTransitionService.findFor(task);
    if (transition == null) {
        // shouldn't occur
        return;
    }
    final Class taskTransitionClass = stateTransitionService.transitionClassFor(transition.getTransitionType());
    if (stateTransitionClass != taskTransitionClass) {
        // or, maybe should hide (and then we can delete code in the subtypes of the mixinAbstract
        return;
    }
    final Object domainObject = transition.getDomainObject();
    applyPolicy(stateTransitionClass, domainObject, ev);
}
Also used : Task(org.estatio.module.capex.dom.task.Task) StateTransition(org.estatio.module.capex.dom.state.StateTransition) EventHandler(org.axonframework.eventhandling.annotation.EventHandler) Subscribe(com.google.common.eventbus.Subscribe)

Example 12 with Task

use of org.estatio.module.capex.dom.task.Task in project estatio by estatio.

the class EnforceTaskAssignmentPolicySubscriber method applyPolicy.

<DO, ST extends StateTransition<DO, ST, STT, S>, STT extends StateTransitionType<DO, ST, STT, S>, S extends State<S>> Optional<String> applyPolicy(final Class<ST> stateTransitionClass, final DO entityOrViewModel) {
    if (EstatioTogglzFeature.ApproveByProxy.isActive()) {
        return Optional.empty();
    }
    final DO entity = unwrapIfRequired(entityOrViewModel);
    final ST pendingTransition = stateTransitionService.pendingTransitionOf(entity, stateTransitionClass);
    if (pendingTransition == null) {
        return Optional.empty();
    }
    final Task task = pendingTransition.getTask();
    if (task == null) {
        return Optional.empty();
    }
    final Person meAsPerson = personRepository.me();
    if (meAsPerson == null) {
        return Optional.of("Could not locate Person for current user");
    }
    // first guard: meAsPerson always needs the PartyRoleType the task is assigned to
    List<PartyRoleType> meAsPersonRoleTypes = Lists.newArrayList(meAsPerson.getRoles()).stream().map(PartyRole::getRoleType).collect(Collectors.toList());
    if (!meAsPersonRoleTypes.contains(task.getAssignedTo())) {
        return Optional.of(String.format("Task assigned to '%s' role", task.getAssignedTo().getKey()));
    }
    // second guard: if the task is assigned to a specific person it needs to be meAsPerson
    final Person taskAssignedTo = task.getPersonAssignedTo();
    if (taskAssignedTo == null || taskAssignedTo == meAsPerson) {
        return Optional.empty();
    } else {
        return Optional.of(String.format("Task assigned to %s", taskAssignedTo.getReference()));
    }
}
Also used : Task(org.estatio.module.capex.dom.task.Task) PartyRoleType(org.estatio.module.party.dom.role.PartyRoleType) Person(org.estatio.module.party.dom.Person)

Example 13 with Task

use of org.estatio.module.capex.dom.task.Task in project estatio by estatio.

the class Task_title_Test method setUp.

@Before
public void setUp() throws Exception {
    partyRoleType = PartyRoleType.builder().key("PROJECT_MANAGER").build();
    person = Person.builder().username("jcapriata@abc.loc").build();
    task = new Task(partyRoleType, person, "Feed the cat", LocalDateTime.now(), "cat.Cat") {

        @Override
        void appendTitleOfObject(final StringBuilder buf) {
            buf.append("Tiddles");
        }
    };
}
Also used : Task(org.estatio.module.capex.dom.task.Task) Before(org.junit.Before)

Example 14 with Task

use of org.estatio.module.capex.dom.task.Task in project estatio by estatio.

the class IncomingInvoiceApprovalState_IntegTest method paid_by_credit_card_skips_bank_account_verification_and_creates_check_task_for_treasury.

@Test
public void paid_by_credit_card_skips_bank_account_verification_and_creates_check_task_for_treasury() {
    // given
    PartyRoleType typeForTreasurer = partyRoleTypeRepository.findByKey(PartyRoleTypeEnum.TREASURER.getKey());
    // workaround: clear MeService#me cache
    queryResultsCache.resetForNextTransaction();
    sudoService.sudo(Person_enum.JonathanPropertyManagerGb.getRef().toLowerCase(), (Runnable) () -> wrap(incomingInvoice).changePaymentMethod(PaymentMethod.CREDIT_CARD));
    sudoService.sudo(Person_enum.JonathanPropertyManagerGb.getRef().toLowerCase(), (Runnable) () -> wrap(mixin(IncomingInvoice_complete.class, incomingInvoice)).act("PROPERTY_MANAGER", null, null));
    // workaround: clear MeService#me cache
    queryResultsCache.resetForNextTransaction();
    sudoService.sudo(Person_enum.PeterPanProjectManagerGb.getRef().toLowerCase(), (Runnable) () -> wrap(mixin(IncomingInvoice_approve.class, incomingInvoice)).act("COUNTRY_DIRECTOR", null, null, false));
    List<Task> tasksForTreasury = taskRepository.findIncompleteByRole(typeForTreasurer);
    assertThat(tasksForTreasury).isEmpty();
    BankAccount bankAccount = incomingInvoice.getBankAccount();
    assertThat(bankAccount).isNotNull();
    BankAccountVerificationState state = stateTransitionService.currentStateOf(bankAccount, BankAccountVerificationStateTransition.class);
    assertThat(state).isEqualTo(BankAccountVerificationState.NOT_VERIFIED);
    // when
    // workaround: clear MeService#me cache
    queryResultsCache.resetForNextTransaction();
    sudoService.sudo(Person_enum.OscarCountryDirectorGb.getRef().toLowerCase(), (Runnable) () -> wrap(mixin(IncomingInvoice_approveAsCountryDirector.class, incomingInvoice)).act(null, false));
    // then
    assertThat(incomingInvoice.getApprovalState()).isEqualTo(IncomingInvoiceApprovalState.PAYABLE);
    List<IncomingInvoiceApprovalStateTransition> transitions = incomingInvoiceStateTransitionRepository.findByDomainObject(incomingInvoice);
    assertThat(transitions.size()).isEqualTo(7);
    assertThat(transitions.get(0).getTransitionType()).isEqualTo(IncomingInvoiceApprovalStateTransitionType.CHECK_PAYMENT);
    tasksForTreasury = taskRepository.findIncompleteByRole(typeForTreasurer);
    assertThat(tasksForTreasury.size()).isEqualTo(1);
    assertThat(tasksForTreasury.get(0).getDescription()).isEqualTo("Check Payment");
    // and still
    state = stateTransitionService.currentStateOf(bankAccount, BankAccountVerificationStateTransition.class);
    assertThat(state).isEqualTo(BankAccountVerificationState.NOT_VERIFIED);
    // and when
    // workaround: clear MeService#me cache
    queryResultsCache.resetForNextTransaction();
    sudoService.sudo(Person_enum.EmmaTreasurerGb.getRef().toLowerCase(), (Runnable) () -> wrap(mixin(IncomingInvoice_checkPayment.class, incomingInvoice)).act(null, false));
    // then
    assertThat(incomingInvoice.getApprovalState()).isEqualTo(IncomingInvoiceApprovalState.PAID);
}
Also used : Task(org.estatio.module.capex.dom.task.Task) BankAccountVerificationState(org.estatio.module.capex.dom.bankaccount.verification.BankAccountVerificationState) IncomingInvoiceApprovalStateTransition(org.estatio.module.capex.dom.invoice.approval.IncomingInvoiceApprovalStateTransition) PartyRoleType(org.estatio.module.party.dom.role.PartyRoleType) BankAccount(org.estatio.module.financial.dom.BankAccount) BankAccountVerificationStateTransition(org.estatio.module.capex.dom.bankaccount.verification.BankAccountVerificationStateTransition) Test(org.junit.Test)

Aggregations

Task (org.estatio.module.capex.dom.task.Task)14 PartyRoleType (org.estatio.module.party.dom.role.PartyRoleType)6 Person (org.estatio.module.party.dom.Person)4 Programmatic (org.apache.isis.applib.annotation.Programmatic)3 BankAccountVerificationStateTransition (org.estatio.module.capex.dom.bankaccount.verification.BankAccountVerificationStateTransition)3 BankAccount (org.estatio.module.financial.dom.BankAccount)3 BankAccountVerificationState (org.estatio.module.capex.dom.bankaccount.verification.BankAccountVerificationState)2 IncomingInvoiceApprovalStateTransition (org.estatio.module.capex.dom.invoice.approval.IncomingInvoiceApprovalStateTransition)2 IPartyRoleType (org.estatio.module.party.dom.role.IPartyRoleType)2 LocalDateTime (org.joda.time.LocalDateTime)2 Before (org.junit.Before)2 Test (org.junit.Test)2 Subscribe (com.google.common.eventbus.Subscribe)1 EventHandler (org.axonframework.eventhandling.annotation.EventHandler)1 StateTransition (org.estatio.module.capex.dom.state.StateTransition)1 PartyRole (org.estatio.module.party.dom.role.PartyRole)1