Add Recurring Payment - Cospend

Add Recurring Payment

← Back to Cospend

Payment Details

Recurring Schedule

{#if formData.frequency === 'custom'}

Cron format: minute hour day-of-month month day-of-week

Examples:

  • 0 9 * * * - Every day at 9:00 AM
  • 0 9 1 * * - Every 1st of the month at 9:00 AM
  • 0 9 * * 1 - Every Monday at 9:00 AM
  • 0 9 1,15 * * - 1st and 15th of every month at 9:00 AM
{#if cronError}
Invalid cron expression
{/if}
{/if}
Leave blank for indefinite recurring payments
{#if nextExecutionPreview}

Next Execution

{nextExecutionPreview}

{getFrequencyDescription(formData)}

{/if}

Split Between Users

{#if predefinedMode}

Splitting between predefined users:

{#each users as user}
{user} {#if user === data.session?.user?.nickname} You {/if}
{/each}
{:else}
{#each users as user}
{user} {#if user !== data.session.user.nickname} {/if}
{/each}
e.key === 'Enter' && (e.preventDefault(), addUser())} />
{/if}

Split Method

{#if formData.splitMethod === 'proportional'}

Custom Split Amounts

{#each users as user}
{/each}
{/if} {#if formData.splitMethod === 'personal_equal'}

Personal Amounts

Enter personal amounts for each user. The remainder will be split equally.

{#each users as user}
{/each} {#if formData.amount}
Total Personal: CHF {Object.values(personalAmounts).reduce((sum, val) => sum + (parseFloat(val) || 0), 0).toFixed(2)} Remainder to Split: CHF {Math.max(0, parseFloat(formData.amount) - Object.values(personalAmounts).reduce((sum, val) => sum + (parseFloat(val) || 0), 0)).toFixed(2)} {#if personalTotalError}
⚠️ Personal amounts exceed total payment amount!
{/if}
{/if}
{/if} {#if Object.keys(splitAmounts).length > 0}

Split Preview

{#each users as user}
{user}
0}> {#if splitAmounts[user] > 0} owes CHF {splitAmounts[user].toFixed(2)} {:else if splitAmounts[user] < 0} is owed CHF {Math.abs(splitAmounts[user]).toFixed(2)} {:else} even {/if}
{/each}
{/if}
{#if error}
{error}
{/if}