* Add credits section to billing * create seperate router for credits * add stripe checkout session * schema changes + code improvements * rename to creditBalance * custom quantify input with error message * add checkout session completed webhook endpoint * fix typo * UI fixes * add payCredits handler * add error toast message * allow scheduling sms up as close to 15 minutes in the future * schedule at most 2 hours in advance * webhook to pay for sent sms * continued work on twilio callback * code clean up * further implementation for credit handling * add migration * object as param for scheduleSMS * object as param for sendSMS * fix TrpcSessionUser imports * fix imports * add db changes * add cron job for price setting * twilio status callback to create expense log * remove unused code * set up low credit balance email * fixes for buying credits * fixes in api/twilio/webhook * add test to save credits to credits balance * fix typos * add new helper function chargeCredits * expand twilioProvider * fix type errors * adjust tests * type errors * clean up * clean up * fix subscription active check * remove some user/org related code * more changes to remove user/org support * send emails seperatly to admins * fixes for team billing page * fix stripe success url * fixes to creating expense log * email imrovements and more * get monthly team price from stripe * fix import * fix monthly credits calculation * finsih low credit balance warning email * credit balance limit reached email * create CreditService * cancel SMS and send as email instead * add messageDispatcher * fix type error * fix type error * fix type error * fix import * fix unit test * clean up twilioProvider * clean up chckSmsPrices/route * add missing translations * add skeleton loader * add admin check to get handler * code clean up + fixes * improve scheduling with fallback * fix type error * add bookingUid to handleSendingSMS * add unit tests for creditService * add more tests to credit-service.test.ts * add test for cancelScheduledMessagesAndScheduleEmails * fix test and type error * add back resolve * fix empty resolve * adjust limitReachedAt logic * address mrge comment on styling * add getAdminMembership to repository * twilio/webhook clean up (feedback) * feedback - clean up * remove todo comment * clean up twilio/webhook * code clean up * add use client * add createOneTimeCheckout to stripe service * refactor repository pattern * small fixes + clean up * fix type error * add missing import * fix hasAvailableCredits for user * force-dynamic * rename credits to creditBalance * fix stripe import * remove not needed code * fix e2e tests * improve low balance warning email * dynamic-import CreditService * index.ts * add user logic checkSmsPrices endpoint * fix e2e tests * remove dynamic import CreditService * Revert "remove dynamic import CreditService" This reverts commit e272978a7ff3fc5a04139e656c9f8d2c84a40dda. * no need to dynamic-import credit service * Revert "no need to dynamic-import credit service" This reverts commit ba5ae488d08979a65fb47b5d0722cda9f45d6ea0. * fix twilio webhook * add userId support in checkout.session.completed * clean up code * only select id in getAdminMembership * revert billing/package.json * fix type checks * fix type checks * adjust hasAvailableCredits function * fixes for checkout sessioned completed * add UI for user * fix type errors * adds requires credits badge * remove team check from update.handler * clean up inlcude statements * fix credit-service tests * add tests * fix type errors * fix type errors * fix and add tests * imrove badge * code clean up * add reminderScheduler test * add additional credits as title * fixes for warningSentAt and limitReachedAt * mock stripe --------- Co-authored-by: CarinaWolli <wollencarina@gmail.com> Co-authored-by: hbjORbj <sldisek783@gmail.com> Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com> Co-authored-by: Peer Richelsen <peeroke@gmail.com>
61 lines
2.0 KiB
TypeScript
61 lines
2.0 KiB
TypeScript
import type { TFunction } from "i18next";
|
|
|
|
import type { WorkflowActions } from "@calcom/prisma/enums";
|
|
import { WorkflowTemplates, WorkflowTriggerEvents } from "@calcom/prisma/enums";
|
|
|
|
import { isSMSOrWhatsappAction, isWhatsappAction, isEmailToAttendeeAction } from "./actionHelperFunctions";
|
|
import {
|
|
WHATSAPP_WORKFLOW_TEMPLATES,
|
|
WORKFLOW_ACTIONS,
|
|
BASIC_WORKFLOW_TEMPLATES,
|
|
WORKFLOW_TRIGGER_EVENTS,
|
|
ATTENDEE_WORKFLOW_TEMPLATES,
|
|
} from "./constants";
|
|
|
|
export function getWorkflowActionOptions(t: TFunction, isOrgsPlan?: boolean) {
|
|
return WORKFLOW_ACTIONS.map((action) => {
|
|
const actionString = t(`${action.toLowerCase()}_action`);
|
|
|
|
return {
|
|
label: actionString.charAt(0).toUpperCase() + actionString.slice(1),
|
|
value: action,
|
|
needsCredits: !isOrgsPlan && isSMSOrWhatsappAction(action),
|
|
};
|
|
});
|
|
}
|
|
|
|
export function getWorkflowTriggerOptions(t: TFunction) {
|
|
// TODO: remove this after workflows are supported
|
|
const filterdWorkflowTriggerEvents = WORKFLOW_TRIGGER_EVENTS.filter(
|
|
(event) =>
|
|
event !== WorkflowTriggerEvents.AFTER_HOSTS_CAL_VIDEO_NO_SHOW &&
|
|
event !== WorkflowTriggerEvents.AFTER_GUESTS_CAL_VIDEO_NO_SHOW
|
|
);
|
|
|
|
return filterdWorkflowTriggerEvents.map((triggerEvent) => {
|
|
const triggerString = t(`${triggerEvent.toLowerCase()}_trigger`);
|
|
|
|
return { label: triggerString.charAt(0).toUpperCase() + triggerString.slice(1), value: triggerEvent };
|
|
});
|
|
}
|
|
|
|
export function getWorkflowTemplateOptions(
|
|
t: TFunction,
|
|
action: WorkflowActions | undefined,
|
|
hasPaidPlan: boolean
|
|
) {
|
|
const TEMPLATES =
|
|
action && isWhatsappAction(action)
|
|
? WHATSAPP_WORKFLOW_TEMPLATES
|
|
: action && isEmailToAttendeeAction(action)
|
|
? ATTENDEE_WORKFLOW_TEMPLATES
|
|
: BASIC_WORKFLOW_TEMPLATES;
|
|
return TEMPLATES.map((template) => {
|
|
return {
|
|
label: t(`${template.toLowerCase()}`),
|
|
value: template,
|
|
needsTeamsUpgrade: !hasPaidPlan && template == WorkflowTemplates.CUSTOM,
|
|
};
|
|
}) as { label: string; value: any; needsTeamsUpgrade: boolean }[];
|
|
}
|