541 lines
11 KiB
Markdown
541 lines
11 KiB
Markdown
# Reminder Mail API Documentation
|
||
|
||
Base path for all endpoints: `/employeeRest`
|
||
|
||
**Authentication:** JWT + app signature (same filters as other `employeeRest` routes)
|
||
|
||
**Content types:** JSON body or form-urlencoded (where noted)
|
||
|
||
**HTTP status:** All responses return HTTP `200`. Check the JSON `status` and `code` fields for success or failure.
|
||
|
||
---
|
||
|
||
## Table of Contents
|
||
|
||
1. [Get Configuration](#1-get-configuration)
|
||
2. [Save / Update Configuration](#2-save--update-configuration)
|
||
3. [Send Reminder Mail (Manual)](#3-send-reminder-mail-manual)
|
||
4. [Frequency Reference](#frequency-reference)
|
||
5. [Working Days Reference](#working-days-reference)
|
||
6. [Quick Reference](#quick-reference)
|
||
|
||
---
|
||
|
||
## 1. Get Configuration
|
||
|
||
Fetch reminder mail configuration for a client policy.
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Method** | `GET` |
|
||
| **URL** | `/employeeRest/getReminderMailConfig` |
|
||
|
||
### Request Parameters
|
||
|
||
| Field | Required | Type | Description |
|
||
|-------|----------|------|-------------|
|
||
| `client_policy_id` | Yes | integer | Client policy ID |
|
||
|
||
### Sample Request
|
||
|
||
```http
|
||
GET /employeeRest/getReminderMailConfig?client_policy_id=123
|
||
```
|
||
|
||
### Success Response — Config Exists
|
||
|
||
```json
|
||
{
|
||
"status": true,
|
||
"code": 200,
|
||
"data": {
|
||
"id": 10,
|
||
"client_policy_id": 123,
|
||
"frequency": "working_days",
|
||
"reminder_days": "1,3,5",
|
||
"working_day_labels": ["Mon", "Wed", "Fri"],
|
||
"is_enabled": 1,
|
||
"is_active": 1,
|
||
"created_by": 45,
|
||
"updated_by": 45,
|
||
"created_at": "2026-06-23 10:00:00",
|
||
"updated_at": "2026-06-23 11:30:00"
|
||
},
|
||
"working_day_options": [
|
||
{ "value": 1, "label": "Mon", "key": "mon" },
|
||
{ "value": 2, "label": "Tue", "key": "tue" },
|
||
{ "value": 3, "label": "Wed", "key": "wed" },
|
||
{ "value": 4, "label": "Thu", "key": "thu" },
|
||
{ "value": 5, "label": "Fri", "key": "fri" },
|
||
{ "value": 6, "label": "Sat", "key": "sat" },
|
||
{ "value": 7, "label": "Sun", "key": "sun" }
|
||
]
|
||
}
|
||
```
|
||
|
||
### Success Response — Legacy Fallback (no config row, legacy `reminder_date` on policy)
|
||
|
||
```json
|
||
{
|
||
"status": true,
|
||
"code": 200,
|
||
"data": {
|
||
"client_policy_id": 123,
|
||
"frequency": "custom",
|
||
"reminder_days": "1,15,28",
|
||
"is_enabled": 1,
|
||
"is_active": 1,
|
||
"source": "legacy_client_policy"
|
||
},
|
||
"working_day_options": [
|
||
{ "value": 1, "label": "Mon", "key": "mon" },
|
||
{ "value": 2, "label": "Tue", "key": "tue" },
|
||
{ "value": 3, "label": "Wed", "key": "wed" },
|
||
{ "value": 4, "label": "Thu", "key": "thu" },
|
||
{ "value": 5, "label": "Fri", "key": "fri" },
|
||
{ "value": 6, "label": "Sat", "key": "sat" },
|
||
{ "value": 7, "label": "Sun", "key": "sun" }
|
||
]
|
||
}
|
||
```
|
||
|
||
### Success Response — No Config
|
||
|
||
```json
|
||
{
|
||
"status": true,
|
||
"code": 200,
|
||
"data": null,
|
||
"working_day_options": [
|
||
{ "value": 1, "label": "Mon", "key": "mon" },
|
||
{ "value": 2, "label": "Tue", "key": "tue" },
|
||
{ "value": 3, "label": "Wed", "key": "wed" },
|
||
{ "value": 4, "label": "Thu", "key": "thu" },
|
||
{ "value": 5, "label": "Fri", "key": "fri" },
|
||
{ "value": 6, "label": "Sat", "key": "sat" },
|
||
{ "value": 7, "label": "Sun", "key": "sun" }
|
||
]
|
||
}
|
||
```
|
||
|
||
### Error Responses
|
||
|
||
```json
|
||
{
|
||
"status": false,
|
||
"code": 400,
|
||
"message": "client_policy_id is required"
|
||
}
|
||
```
|
||
|
||
```json
|
||
{
|
||
"status": false,
|
||
"code": 404,
|
||
"message": "Client policy not found"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 2. Save / Update Configuration
|
||
|
||
Create or update reminder mail configuration.
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Method** | `POST` |
|
||
| **URL** | `/employeeRest/saveReminderMailConfig` |
|
||
|
||
### Insert vs Update
|
||
|
||
| Condition | Action |
|
||
|-----------|--------|
|
||
| `id` **not** sent | **Insert** new record |
|
||
| `id` **sent** | **Update** existing record by primary key |
|
||
|
||
### Request Parameters
|
||
|
||
| Field | Required | Type | Description |
|
||
|-------|----------|------|-------------|
|
||
| `client_policy_id` | Yes | integer | Client policy ID |
|
||
| `frequency` | Yes | string | `daily`, `weekly`, `monthly`, `custom`, `working_days` |
|
||
| `reminder_days` | Depends | string | Comma-separated days (see [Frequency Reference](#frequency-reference)) |
|
||
| `working_days` | No | string | Alias for `reminder_days` when `frequency` is `working_days` |
|
||
| `is_enabled` | No | integer | `1` (enabled) or `0` (disabled). Default: `1` |
|
||
| `hr_id` | No | integer | Stored as `created_by` / `updated_by`. Null if omitted |
|
||
| `id` | No | integer | Primary key — required for update |
|
||
|
||
### Sample Payload — Insert (Daily)
|
||
|
||
```json
|
||
{
|
||
"client_policy_id": 123,
|
||
"frequency": "daily",
|
||
"is_enabled": 1,
|
||
"hr_id": 45
|
||
}
|
||
```
|
||
|
||
### Sample Payload — Insert (Working Days — weekdays only)
|
||
|
||
```json
|
||
{
|
||
"client_policy_id": 123,
|
||
"frequency": "working_days",
|
||
"reminder_days": "Mon,Wed,Fri",
|
||
"is_enabled": 1,
|
||
"hr_id": 45
|
||
}
|
||
```
|
||
|
||
### Sample Payload — Insert (Working Days — including Sat/Sun)
|
||
|
||
```json
|
||
{
|
||
"client_policy_id": 123,
|
||
"frequency": "working_days",
|
||
"reminder_days": "Mon,Wed,Fri,Sat,Sun",
|
||
"is_enabled": 1,
|
||
"hr_id": 45
|
||
}
|
||
```
|
||
|
||
Or numeric: `"1,3,5,6,7"` (Sat=6, Sun=7; `0` is also accepted for Sunday).
|
||
|
||
Alternative using `working_days` alias:
|
||
|
||
```json
|
||
{
|
||
"client_policy_id": 123,
|
||
"frequency": "working_days",
|
||
"working_days": "Mon,Tue,Thu",
|
||
"hr_id": 45
|
||
}
|
||
```
|
||
|
||
### Sample Payload — Insert (Weekly)
|
||
|
||
```json
|
||
{
|
||
"client_policy_id": 123,
|
||
"frequency": "weekly",
|
||
"reminder_days": "1,3,5",
|
||
"hr_id": 45
|
||
}
|
||
```
|
||
|
||
### Sample Payload — Insert (Monthly)
|
||
|
||
```json
|
||
{
|
||
"client_policy_id": 123,
|
||
"frequency": "monthly",
|
||
"reminder_days": "1,15",
|
||
"hr_id": 45
|
||
}
|
||
```
|
||
|
||
### Sample Payload — Insert (Custom)
|
||
|
||
```json
|
||
{
|
||
"client_policy_id": 123,
|
||
"frequency": "custom",
|
||
"reminder_days": "5,10,20",
|
||
"hr_id": 45
|
||
}
|
||
```
|
||
|
||
### Sample Payload — Update
|
||
|
||
```json
|
||
{
|
||
"id": 10,
|
||
"client_policy_id": 123,
|
||
"frequency": "working_days",
|
||
"reminder_days": "Mon,Tue,Wed,Thu,Fri",
|
||
"is_enabled": 1,
|
||
"hr_id": 45
|
||
}
|
||
```
|
||
|
||
### Success Response — Created
|
||
|
||
```json
|
||
{
|
||
"status": true,
|
||
"code": 200,
|
||
"action": "created",
|
||
"message": "Reminder mail configuration saved successfully",
|
||
"data": {
|
||
"id": 10,
|
||
"client_policy_id": 123,
|
||
"frequency": "working_days",
|
||
"reminder_days": "1,3,5",
|
||
"working_day_labels": ["Mon", "Wed", "Fri"],
|
||
"is_enabled": 1,
|
||
"is_active": 1,
|
||
"created_by": 45,
|
||
"updated_by": 45,
|
||
"created_at": "2026-06-23 10:00:00",
|
||
"updated_at": "2026-06-23 10:00:00"
|
||
}
|
||
}
|
||
```
|
||
|
||
### Success Response — Updated
|
||
|
||
```json
|
||
{
|
||
"status": true,
|
||
"code": 200,
|
||
"action": "updated",
|
||
"message": "Reminder mail configuration saved successfully",
|
||
"data": {
|
||
"id": 10,
|
||
"client_policy_id": 123,
|
||
"frequency": "working_days",
|
||
"reminder_days": "1,2,3,4,5",
|
||
"working_day_labels": ["Mon", "Tue", "Wed", "Thu", "Fri"],
|
||
"is_enabled": 1,
|
||
"is_active": 1,
|
||
"created_by": 45,
|
||
"updated_by": 45,
|
||
"created_at": "2026-06-23 10:00:00",
|
||
"updated_at": "2026-06-23 12:00:00"
|
||
}
|
||
}
|
||
```
|
||
|
||
### Error Responses
|
||
|
||
```json
|
||
{
|
||
"status": false,
|
||
"code": 400,
|
||
"message": "client_policy_id is required"
|
||
}
|
||
```
|
||
|
||
```json
|
||
{
|
||
"status": false,
|
||
"code": 400,
|
||
"message": "frequency is required"
|
||
}
|
||
```
|
||
|
||
```json
|
||
{
|
||
"status": false,
|
||
"code": 404,
|
||
"message": "Client policy not found"
|
||
}
|
||
```
|
||
|
||
```json
|
||
{
|
||
"status": false,
|
||
"code": 400,
|
||
"message": "Reminder mail configuration not found"
|
||
}
|
||
```
|
||
|
||
```json
|
||
{
|
||
"status": false,
|
||
"code": 400,
|
||
"message": "client_policy_id does not match the configuration record"
|
||
}
|
||
```
|
||
|
||
```json
|
||
{
|
||
"status": false,
|
||
"code": 400,
|
||
"message": "Invalid frequency. Allowed values: daily, weekly, monthly, custom, working_days."
|
||
}
|
||
```
|
||
|
||
```json
|
||
{
|
||
"status": false,
|
||
"code": 400,
|
||
"message": "reminder_days is required. Use Mon-Sun or 1-7 (0 also accepted for Sunday)."
|
||
}
|
||
```
|
||
|
||
```json
|
||
{
|
||
"status": false,
|
||
"code": 400,
|
||
"message": "Working day reminder_days must be between 1 (Mon) and 7 (Sun)."
|
||
}
|
||
```
|
||
|
||
### Audit Fields (`hr_id`)
|
||
|
||
| Action | `created_by` | `updated_by` |
|
||
|--------|--------------|--------------|
|
||
| Insert + `hr_id` sent | `hr_id` | `hr_id` |
|
||
| Insert + `hr_id` omitted | `null` | `null` |
|
||
| Update + `hr_id` sent | unchanged | `hr_id` |
|
||
| Update + `hr_id` omitted | unchanged | `null` |
|
||
|
||
---
|
||
|
||
## 3. Send Reminder Mail (Manual)
|
||
|
||
Manually trigger reminder mail for a policy. Sends immediately regardless of schedule configuration.
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Method** | `GET` or `POST` |
|
||
| **URL** | `/employeeRest/sendReminderMail` |
|
||
|
||
### Request Parameters
|
||
|
||
| Field | Required | Type | Description |
|
||
|-------|----------|------|-------------|
|
||
| `client_policy_id` | Yes | integer | Client policy ID |
|
||
|
||
### Sample Request (POST)
|
||
|
||
```http
|
||
POST /employeeRest/sendReminderMail
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"client_policy_id": 123
|
||
}
|
||
```
|
||
|
||
### Sample Request (GET)
|
||
|
||
```http
|
||
GET /employeeRest/sendReminderMail?client_policy_id=123
|
||
```
|
||
|
||
### Success Response
|
||
|
||
```json
|
||
{
|
||
"status": true,
|
||
"code": 200,
|
||
"message": "Mail sent successfully"
|
||
}
|
||
```
|
||
|
||
### Error Responses
|
||
|
||
```json
|
||
{
|
||
"status": false,
|
||
"code": 400,
|
||
"message": "client_policy_id is required"
|
||
}
|
||
```
|
||
|
||
```json
|
||
{
|
||
"status": false,
|
||
"code": 404,
|
||
"message": "Client policy not found"
|
||
}
|
||
```
|
||
|
||
```json
|
||
{
|
||
"status": false,
|
||
"code": 200,
|
||
"message": "There is no data to send",
|
||
"message2": "Failed"
|
||
}
|
||
```
|
||
|
||
```json
|
||
{
|
||
"status": false,
|
||
"code": 200,
|
||
"message": "There is no data to send",
|
||
"message2": "No policy data found to send"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## Frequency Reference
|
||
|
||
| `frequency` | `reminder_days` required? | Format | Example |
|
||
|-------------|---------------------------|--------|---------|
|
||
| `daily` | No | — | — |
|
||
| `weekly` | Yes | Weekday `0–6` (Sun–Sat) | `"1,3,5"` |
|
||
| `monthly` | Yes | Day of month `1–31` | `"1,15,28"` |
|
||
| `custom` | Yes | Day of month `1–31` | `"5,10,20"` |
|
||
| `working_days` | Yes | Weekday `1–7` (Mon–Sun) or day names | `"Mon,Wed,Fri,Sat"` or `"1,3,5,6"` |
|
||
|
||
---
|
||
|
||
## Working Days Reference
|
||
|
||
Used when `frequency = working_days`. Select any combination of weekdays including Saturday and Sunday.
|
||
|
||
| Label | Numeric Value |
|
||
|-------|---------------|
|
||
| Mon | 1 |
|
||
| Tue | 2 |
|
||
| Wed | 3 |
|
||
| Thu | 4 |
|
||
| Fri | 5 |
|
||
| Sat | 6 |
|
||
| Sun | 7 |
|
||
|
||
Accepted input formats:
|
||
|
||
- Day names: `Mon`, `Tue`, `Wed`, `Thu`, `Fri`, `Sat`, `Sun` (case-insensitive)
|
||
- Numeric: `1`–`7` (ISO-8601, matches PHP `date('N')`)
|
||
- Sunday alias: `0` is normalized to `7`
|
||
- Comma-separated combinations: `"Mon,Wed,Sat"` or `"1,3,6"`
|
||
|
||
Stored in DB as normalized numeric string (e.g. `"1,3,6,7"`).
|
||
|
||
---
|
||
|
||
## Quick Reference
|
||
|
||
| API | Method | Purpose |
|
||
|-----|--------|---------|
|
||
| `/employeeRest/getReminderMailConfig` | GET | Fetch config by `client_policy_id` |
|
||
| `/employeeRest/saveReminderMailConfig` | POST | Create (no `id`) or update (with `id`) |
|
||
| `/employeeRest/sendReminderMail` | GET / POST | Manually send reminder mail |
|
||
|
||
---
|
||
|
||
## Notes
|
||
|
||
1. **Scheduled sends (cron)** use the saved configuration from the `reminder_mail_config` table.
|
||
2. **Manual send** via `/sendReminderMail` ignores the schedule and sends immediately.
|
||
3. **`working_day_options`** is returned on every get-config response for UI dropdown/checkbox rendering.
|
||
4. **Legacy policies** without a config row may still expose `client_policy.reminder_date` as `frequency: custom` with `source: legacy_client_policy`.
|
||
|
||
---
|
||
|
||
## Database
|
||
|
||
Configuration is stored in the `reminder_mail_config` table.
|
||
|
||
| Column | Description |
|
||
|--------|-------------|
|
||
| `id` | Primary key |
|
||
| `client_policy_id` | Unique per policy |
|
||
| `frequency` | Schedule type |
|
||
| `reminder_days` | Comma-separated day values |
|
||
| `is_enabled` | Enable/disable reminders |
|
||
| `created_by` / `updated_by` | Set from `hr_id` in API payload |
|
||
| `created_at` / `updated_at` | Timestamps |
|
||
|
||
SQL migration:
|
||
|
||
- `app/Database/reminder_mail_config.sql`
|