Skip to content

Commit

Permalink
add specific license property
Browse files Browse the repository at this point in the history
dropdown emails now only show up if the license type is relevant
  • Loading branch information
benzuzu committed Jun 9, 2023
1 parent 2323438 commit 7b852e7
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,16 @@
* The EmailCategory enumeration.
*/
public enum EmailCategory {
APPROVE,
TRIAL,
DENY,
CLARIFY,
LICENSE
TRIAL("Trial"),
LICENSE("License"),
CLARIFY("Clarify"),
DENY("Deny");

String label;

EmailCategory(String label) {
this.label = label;
}

public String getLabel() { return label; }
}
51 changes: 22 additions & 29 deletions src/main/java/org/mskcc/cbio/oncokb/service/SlackService.java
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ public void sendUserRegistrationToChannel(UserDTO user, boolean trialAccountActi

@Async
public void sendLatestBlocks(String url, UserDTO userDTO, boolean trialAccountActivated, ActionId actionId, String triggerId) {
if (ActionId.isEmailAction(actionId)) {
if (ActionId.isModalEmailAction(actionId)) {
this.sendModal(triggerId, this.buildModalView(userDTO, actionId, url));
} else {
this.sendBlocks(url, this.buildBlocks(userDTO, trialAccountActivated, actionId, null));
Expand Down Expand Up @@ -249,7 +249,7 @@ public List<LayoutBlock> buildBlocks(UserDTO userDTO, boolean trialAccountActiva

if (buildCollapsed) {
// Add collapsed blocks
blocks.add(buildCollapsedBlock(userDTO, actionId));
blocks.add(buildCollapsedBlock(userDTO, trialAccountActivated, actionId));
} else {
// Add expanded blocks
blocks.addAll(buildExpandedBlocks(userDTO, trialAccountActivated, actionId, company));
Expand All @@ -261,9 +261,11 @@ public List<LayoutBlock> buildBlocks(UserDTO userDTO, boolean trialAccountActiva
return blocks;
}

private LayoutBlock buildCollapsedBlock(UserDTO userDTO, ActionId actionId) {
private LayoutBlock buildCollapsedBlock(UserDTO userDTO, boolean trialAccountActivated, ActionId actionId) {
StringBuilder sb = new StringBuilder();
sb.append(userDTO.getEmail() + "\n" + userDTO.getCompanyName() + " (" + userDTO.getLicenseType().getShortName() + (withNote(DropdownEmailOption.GIVE_TRIAL_ACCESS, userDTO, actionId) ? ", *TRIAL*)" : userDTO.isActivated() ? ")" : ")\n*NOT ACTIVATED*: "));
sb.append(userDTO.getEmail() + "\n" + userDTO.getCompanyName() + " (" + userDTO.getLicenseType().getShortName()
+ ((withNote(DropdownEmailOption.GIVE_TRIAL_ACCESS, userDTO, actionId) && !(userDTO.isActivated() && !trialAccountActivated)) ? ", *TRIAL*)" :
(userDTO.isActivated() ? ")" : ")\n*NOT ACTIVATED*: ")));
if (!userDTO.isActivated() && !withNote(DropdownEmailOption.GIVE_TRIAL_ACCESS, userDTO, actionId)) {
List<DropdownEmailOption> sentMails = new ArrayList<>();
for (DropdownEmailOption mailOption : DropdownEmailOption.values()) {
Expand Down Expand Up @@ -303,7 +305,7 @@ private List<LayoutBlock> buildExpandedBlocks(UserDTO userDTO, boolean trialAcco
blocks.add(buildCurrentLicense(userDTO));

// Add account status
blocks.add(buildAccountStatusBlock(userDTO, withNote(DropdownEmailOption.GIVE_TRIAL_ACCESS, userDTO, actionId)));
blocks.add(buildAccountStatusBlock(userDTO, withNote(DropdownEmailOption.GIVE_TRIAL_ACCESS, userDTO, actionId), trialAccountActivated));

// Add user info section
blocks.addAll(buildUserInfoBlocks(userDTO));
Expand Down Expand Up @@ -365,13 +367,13 @@ private LayoutBlock buildCurrentLicense(UserDTO userDTO) {
return SectionBlock.builder().text(MarkdownTextObject.builder().text(sb.toString()).build()).accessory(getLicenseTypeElement(userDTO)).blockId(LICENSE_TYPE.getId()).build();
}

private LayoutBlock buildAccountStatusBlock(UserDTO userDTO, boolean isTrialAccountInitiated) {
private LayoutBlock buildAccountStatusBlock(UserDTO userDTO, boolean isTrialAccountInitiated, boolean trialAccountActivated) {
List<TextObject> userInfo = new ArrayList<>();

// Add account information
userInfo.add(getTextObject("Account Status", userDTO.isActivated() ? "Activated" : (StringUtils.isNotEmpty(userDTO.getActivationKey()) ? "Email not validated" : "Not Activated")));
userInfo.add(getTextObject("Account Type", isTrialAccountInitiated ? "TRIAL" : "REGULAR"));
if (isTrialAccountInitiated) {
userInfo.add(getTextObject("Account Type", isTrialAccountInitiated && !(userDTO.isActivated() && !trialAccountActivated) ? "TRIAL" : "REGULAR"));
if (isTrialAccountInitiated && !(userDTO.isActivated() && !trialAccountActivated)) {
// There is a period of time when the user has been approved but did not activate their trial yet.
// In this case, the activationDate is null, so we need to omit this text.
Instant activationDate = userDTO.getAdditionalInfo().getTrialAccount().getActivation().getActivationDate();
Expand Down Expand Up @@ -576,43 +578,34 @@ private ButtonElement buildApproveButton(UserDTO user) {
private StaticSelectElement buildMoreActionsDropdown(UserDTO user, boolean trialAccountActivated, ActionId actionId) {
List<OptionGroupObject> optionGroups = new ArrayList<>();

// Add option group - Trial
if (user.getLicenseType() != LicenseType.ACADEMIC) {
// Add option group - Trial
List<OptionObject> trialGroup = new ArrayList<>();
// Add option - Give Trial Access
if (!withNote(DropdownEmailOption.GIVE_TRIAL_ACCESS, user, actionId) && !user.isActivated()) {
trialGroup.add(buildEmailOption(DropdownEmailOption.GIVE_TRIAL_ACCESS, user));
}
// Add option - Convert to regular
if (trialAccountActivated) {
if (user.isActivated() && trialAccountActivated) {
trialGroup.add(buildConvertToRegularAccountOption(user));
}
if (!trialGroup.isEmpty()) {
optionGroups.add(OptionGroupObject.builder().label(PlainTextObject.builder().text("Trial").build()).options(trialGroup).build());
}

// Add option group - License
List<OptionObject> licenseGroup = new ArrayList<>();
for (DropdownEmailOption licenseOption: Arrays.stream(DropdownEmailOption.values()).filter(mo -> mo.getCategory() == EmailCategory.LICENSE).collect(Collectors.toList())) {
licenseGroup.add(buildEmailOption(licenseOption, user));
}
optionGroups.add(OptionGroupObject.builder().label(PlainTextObject.builder().text("License").build()).options(licenseGroup).build());
}

// Add other option groups
if (!user.isActivated()) {
// Add option group - Clarify
List<OptionObject> clarifyGroup = new ArrayList<>();
for (DropdownEmailOption clarifyOption : Arrays.stream(DropdownEmailOption.values()).filter(mo -> mo.getCategory() == EmailCategory.CLARIFY).collect(Collectors.toList())) {
clarifyGroup.add(buildEmailOption(clarifyOption, user));
}
optionGroups.add(OptionGroupObject.builder().label(PlainTextObject.builder().text("Clarify").build()).options(clarifyGroup).build());

// Add option group - Deny
List<OptionObject> denyGroup = new ArrayList<>();
for (DropdownEmailOption denyOption : Arrays.stream(DropdownEmailOption.values()).filter(mo -> mo.getCategory() == EmailCategory.DENY).collect(Collectors.toList())) {
denyGroup.add(buildEmailOption(denyOption, user));
for (EmailCategory emailCategory : Arrays.stream(EmailCategory.values()).filter(ec -> !ec.equals(EmailCategory.TRIAL)).collect(Collectors.toList())) {
List<OptionObject> optionGroup = new ArrayList<>();
for (DropdownEmailOption emailOption : Arrays.stream(DropdownEmailOption.values()).filter(eo -> eo.getCategory().equals(emailCategory)).collect(Collectors.toList())) {
if (emailOption.getSpecificLicenses().isEmpty() || emailOption.getSpecificLicenses().contains(user.getLicenseType()))
optionGroup.add(buildEmailOption(emailOption, user));
}
if (!optionGroup.isEmpty()) {
optionGroups.add(OptionGroupObject.builder().label(PlainTextObject.builder().text(emailCategory.getLabel()).build()).options(optionGroup).build());
}
}
optionGroups.add(OptionGroupObject.builder().label(PlainTextObject.builder().text("Deny").build()).options(denyGroup).build());
}

// Add option group - Other
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package org.mskcc.cbio.oncokb.web.rest.slack;

import java.util.Arrays;
import java.util.stream.Collectors;

/**
* Created by Hongxin Zhang on 4/30/21.
*/
Expand Down Expand Up @@ -51,11 +54,11 @@ public static ActionId getById(String id) {
return null;
}

public static boolean isEmailAction(ActionId actionId) {
public static boolean isModalEmailAction(ActionId actionId) {
if (actionId == null) {
return false;
}
for (DropdownEmailOption mailOption : DropdownEmailOption.values()) {
for (DropdownEmailOption mailOption : Arrays.stream(DropdownEmailOption.values()).filter(mo -> !mo.isNotModalEmail()).collect(Collectors.toList())) {
if (actionId.equals(mailOption.getActionId()))
return true;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package org.mskcc.cbio.oncokb.web.rest.slack;

import jdk.nashorn.internal.ir.Block;
import org.mskcc.cbio.oncokb.domain.enumeration.EmailCategory;
import org.mskcc.cbio.oncokb.domain.enumeration.EmailSubject;
import org.mskcc.cbio.oncokb.domain.enumeration.LicenseType;
import org.mskcc.cbio.oncokb.domain.enumeration.MailType;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

/**
Expand All @@ -20,13 +22,15 @@ public enum DropdownEmailOption {
.mailType(MailType.ACTIVATE_FREE_TRIAL)
.category(EmailCategory.TRIAL)
.dropdownKey("Give Trial Access")
.isNotModalEmail()
.expandedNote("The trial account has been initialized and notified."))
, CLARIFY_ACADEMIC_FOR_PROFIT(new DropdownEmailOptionBuilder()
.blockId(BlockId.FOR_PROFIT_CLARIFICATION_NOTE)
.actionId(ActionId.SEND_ACADEMIC_FOR_PROFIT_EMAIL)
.confirmActionId(ActionId.CONFIRM_SEND_ACADEMIC_FOR_PROFIT_EMAIL)
.mailType(MailType.CLARIFY_ACADEMIC_FOR_PROFIT)
.category(EmailCategory.CLARIFY)
.specificLicense(LicenseType.ACADEMIC)
.dropdownKey("Send Academic For Profit Email")
.modalTitle("For Profit Clarification")
.modalSubject(EmailSubject.DEFAULT)
Expand All @@ -38,6 +42,7 @@ public enum DropdownEmailOption {
.confirmActionId(ActionId.CONFIRM_SEND_ACADEMIC_CLARIFICATION_EMAIL)
.mailType(MailType.CLARIFY_ACADEMIC_NON_INSTITUTE_EMAIL)
.category(EmailCategory.CLARIFY)
.specificLicense(LicenseType.ACADEMIC)
.dropdownKey("Send Academic Domain Clarification Email")
.modalTitle("Domain Clarification")
.modalSubject(EmailSubject.DEFAULT)
Expand Down Expand Up @@ -82,6 +87,9 @@ public enum DropdownEmailOption {
.confirmActionId(ActionId.CONFIRM_SEND_LICENSE_OPTIONS_EMAIL)
.mailType(MailType.LICENSE_OPTIONS)
.category(EmailCategory.LICENSE)
.specificLicense(LicenseType.COMMERCIAL)
.specificLicense(LicenseType.HOSPITAL)
.specificLicense(LicenseType.RESEARCH_IN_COMMERCIAL)
.dropdownKey("Send License Options Email")
.modalTitle("Send License Options")
.modalSubject(EmailSubject.COMPANY)
Expand Down Expand Up @@ -121,8 +129,10 @@ private static class DropdownEmailOptionBuilder {
private MailType mailType;
// Dropdown menu
private EmailCategory category;
private List<LicenseType> specificLicenses = new ArrayList<>();
private String dropdownKey;
// View modal
private boolean notModalEmail = false;
private Optional<String> modalTitle = Optional.empty();
private Optional<EmailSubject> modalSubject = Optional.of(EmailSubject.DEFAULT);
// Additional info block
Expand All @@ -149,6 +159,11 @@ public DropdownEmailOptionBuilder mailType(MailType mailType) {
return this;
}

public DropdownEmailOptionBuilder isNotModalEmail() {
this.notModalEmail = true;
return this;
}

public DropdownEmailOptionBuilder modalTitle(String modalTitle) {
this.modalTitle = Optional.ofNullable(modalTitle);
return this;
Expand All @@ -159,6 +174,11 @@ public DropdownEmailOptionBuilder category(EmailCategory category) {
return this;
}

public DropdownEmailOptionBuilder specificLicense(LicenseType licenseType) {
specificLicenses.add(licenseType);
return this;
}

public DropdownEmailOptionBuilder dropdownKey(String dropdownKey) {
this.dropdownKey = dropdownKey;
return this;
Expand Down Expand Up @@ -188,8 +208,10 @@ public DropdownEmailOptionBuilder expandedNote(String expandedNote) {
private MailType mailType;
// Dropdown menu
private EmailCategory category;
private List<LicenseType> specificLicenses;
private String dropdownKey;
// View modal
private boolean notModalEmail;
private Optional<String> modalTitle;
private Optional<EmailSubject> modalSubject;
// Additional info block
Expand All @@ -202,7 +224,9 @@ public DropdownEmailOptionBuilder expandedNote(String expandedNote) {
this.confirmActionId = builder.confirmActionId;
this.mailType = builder.mailType;
this.category = builder.category;
this.specificLicenses = builder.specificLicenses;
this.dropdownKey = builder.dropdownKey;
this.notModalEmail = builder.notModalEmail;
this.modalTitle = builder.modalTitle;
this.modalSubject = builder.modalSubject;
this.collapsedNote = builder.collapsedNote;
Expand All @@ -225,14 +249,16 @@ public MailType getMailType() {
return mailType;
}

public EmailCategory getCategory() {
return category;
}
public EmailCategory getCategory() { return category; }

public List<LicenseType> getSpecificLicenses() { return specificLicenses; }

public String getDropdownKey() {
return dropdownKey;
}

public boolean isNotModalEmail() { return notModalEmail; }

public Optional<String> getModalTitle() {
return modalTitle;
}
Expand Down

0 comments on commit 7b852e7

Please sign in to comment.