| @@ -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.