| @@ -0,0 +1,326 @@ | |||
| # KCI Campaign Tracker — User Guide | |||
| This guide explains how to use the Campaign Tracker application day to day. | |||
| ## What the app does | |||
| Campaign Tracker helps you manage: | |||
| - **Campaign Types** — templates or categories for campaigns | |||
| - **Campaigns** — the main records you create and manage | |||
| - **Job Types** — templates or categories for jobs | |||
| - **Jobs** — work items connected to campaigns | |||
| - **Customer Types** — templates or categories for customers | |||
| - **Customers** — people or accounts tied to your workflow | |||
| The dashboard gives you a quick overview of totals, recent items, and counts by type. | |||
| --- | |||
| ## Getting started | |||
| ### Open the app | |||
| In the default Docker setup, open: | |||
| - `http://localhost:8801` | |||
| ### Sign in | |||
| If authentication is enabled, click **Login** and sign in through the configured **Keycloak** server. | |||
| If you are running locally outside Docker, make sure your Keycloak values are set in your environment first. | |||
| --- | |||
| ## Main navigation | |||
| The top navigation takes you to the main areas of the app: | |||
| - **Home** — dashboard and quick stats | |||
| - **Campaigns** — manage campaigns | |||
| - **Campaign Types** — manage campaign definitions | |||
| - **Jobs** — manage all jobs | |||
| - **Job Types** — manage job definitions | |||
| - **Customers** — manage customer records | |||
| - **Customer Types** — manage customer definitions | |||
| --- | |||
| ## Typical workflow | |||
| A common setup flow looks like this: | |||
| 1. Create **Campaign Types** | |||
| 2. Create **Job Types** | |||
| 3. Create **Customer Types** | |||
| 4. Create **Campaigns** | |||
| 5. Add **Jobs** to campaigns | |||
| 6. Create or update **Customers** | |||
| You can work in a different order, but the type records usually come first because they define the available attributes for the main records. | |||
| --- | |||
| ## Dashboard | |||
| The home page shows: | |||
| - totals for each entity type | |||
| - recent campaigns | |||
| - recent customers | |||
| - count breakdowns by type | |||
| Use the dashboard to quickly jump into the area you need. | |||
| --- | |||
| ## Campaign Types | |||
| Use **Campaign Types** when you want to define reusable campaign templates. | |||
| ### What you can do | |||
| - view all campaign types | |||
| - create a new campaign type | |||
| - edit an existing campaign type | |||
| - delete a campaign type | |||
| ### Why it matters | |||
| Campaign types define the attributes that campaigns can use. For example, a campaign type might include fields like budget, owner, region, or status. | |||
| --- | |||
| ## Campaigns | |||
| Use **Campaigns** to create and manage the main campaign records. | |||
| ### What you can do | |||
| - view the campaign directory | |||
| - create a new campaign | |||
| - edit campaign details | |||
| - delete a campaign | |||
| - open the campaign’s job list | |||
| - refresh the table | |||
| ### Campaign jobs | |||
| Each campaign can have jobs attached to it. From the campaign view, you can: | |||
| - see jobs for that campaign | |||
| - import jobs from Google Sheets | |||
| - import jobs from a file | |||
| - filter jobs by the selected campaign | |||
| --- | |||
| ## Job Types | |||
| Use **Job Types** to define reusable job templates. | |||
| ### What you can do | |||
| - create a job type | |||
| - edit a job type | |||
| - delete a job type | |||
| ### Why it matters | |||
| Job types define the attributes used when creating jobs. This makes it easier to keep job records consistent. | |||
| --- | |||
| ## Jobs | |||
| Use **Jobs** to track work items across campaigns. | |||
| ### What you can do | |||
| - view all jobs in the directory | |||
| - create a new job | |||
| - edit a job | |||
| - delete a job | |||
| - refresh the jobs table | |||
| ### Campaign-specific jobs | |||
| You can also open the job list for a single campaign to focus on just that campaign’s work. | |||
| --- | |||
| ## Customer Types | |||
| Use **Customer Types** to define reusable customer templates. | |||
| ### What you can do | |||
| - create a customer type | |||
| - edit a customer type | |||
| - delete a customer type | |||
| ### Why it matters | |||
| Customer types define the attributes available when you create customer records. | |||
| --- | |||
| ## Customers | |||
| Use **Customers** to manage customer or account records. | |||
| ### What you can do | |||
| - view all customers in the directory | |||
| - create a new customer | |||
| - edit a customer | |||
| - delete a customer | |||
| - refresh the table | |||
| --- | |||
| ## Data tables | |||
| The list pages use interactive tables. | |||
| Common table features include: | |||
| - sorting | |||
| - searching | |||
| - row selection | |||
| - drill-down into related records | |||
| - refresh buttons | |||
| If a table looks empty, try refreshing the page or the table itself. | |||
| --- | |||
| ## Importing jobs from Google Sheets | |||
| The app includes import tools for campaign jobs. | |||
| ### Basic flow | |||
| 1. Open a campaign | |||
| 2. Open the campaign’s jobs page | |||
| 3. Provide a Google Sheets URL | |||
| 4. Choose the sheet and job type | |||
| 5. Run the import | |||
| ### What the importer does | |||
| The importer looks for sheet columns that match the attribute names on the selected job type. | |||
| If the headers do not match, the import can fail or skip rows. | |||
| ### Tips | |||
| - Make sure the Google Sheet is accessible | |||
| - Make sure the columns match the job type attributes | |||
| - Use consistent header names | |||
| --- | |||
| ## Importing jobs from a file | |||
| The campaign job page also supports file-based import. | |||
| Typical steps: | |||
| 1. Open the campaign jobs page | |||
| 2. Choose a file source | |||
| 3. Pick the sheet or tab if needed | |||
| 4. Choose the job type | |||
| 5. Import the rows | |||
| This is useful when the data already exists in a spreadsheet file instead of a published Google Sheet. | |||
| --- | |||
| ## Public API endpoints | |||
| The app exposes a few public JSON endpoints: | |||
| - `GET /api/customers` | |||
| - `GET /api/customers/{id}` | |||
| - `GET /api/customer-types` | |||
| There is also an authenticated proxy endpoint: | |||
| - `GET /api/proxy?url=https://example.com/data.json` | |||
| The proxy requires login and only accepts valid `http` or `https` URLs. | |||
| --- | |||
| ## Health check | |||
| You can verify the app is running with: | |||
| - `GET /health` | |||
| In the default Docker setup, that is: | |||
| - `http://localhost:8801/health` | |||
| --- | |||
| ## Common troubleshooting | |||
| ### Login does not work | |||
| Check the Keycloak settings in your environment: | |||
| - `KEYCLOAK_BASE_URL` | |||
| - `KEYCLOAK_REALM` | |||
| - `KEYCLOAK_CLIENT_ID` | |||
| - `KEYCLOAK_CLIENT_SECRET` | |||
| - `KEYCLOAK_REDIRECT_URI` | |||
| - `KEYCLOAK_LOGOUT_REDIRECT_URI` | |||
| ### Database errors on startup | |||
| If migrations fail, wait a few seconds and try again. SQL Server may still be starting. | |||
| ### Empty or missing table data | |||
| Run migrations and make sure the database is initialized: | |||
| ```bash | |||
| docker compose exec campaign-tracker-app php scripts/migrate.php up | |||
| ``` | |||
| ### Import errors | |||
| If an import fails, check: | |||
| - campaign exists | |||
| - job type exists | |||
| - sheet URL is valid | |||
| - sheet headers match the selected type’s attributes | |||
| --- | |||
| ## Setup summary for local development | |||
| ```bash | |||
| docker compose up -d --build | |||
| docker compose exec campaign-tracker-app composer install | |||
| docker compose exec campaign-tracker-app php scripts/migrate.php up | |||
| ``` | |||
| Then open: | |||
| - `http://localhost:8801` | |||
| --- | |||
| ## Where to look in the code | |||
| - `routes/web.php` — route definitions | |||
| - `app/Controllers/` — request handling | |||
| - `app/Repositories/` — database access | |||
| - `app/Views/` — templates | |||
| - `database/migrations/` — schema setup | |||
| - `scripts/migrate.php` — migration CLI | |||
Powered by TurnKey Linux.