Track your time in Google Sheets and automatically generate CashCtrl orders with a single command! This project bridges the gap between your time tracking and invoicing workflows. Simply log your hours in a Google Sheet, and with one command, create professional CashCtrl orders - no manual data entry required. Perfect for freelancers and small businesses who want to streamline their billing process while keeping time tracking simple and flexible.
- Select order positions from your configured Google sheet
- Filter by date span (column A)
- Filter by client name (column B)
- Always filters by
billedflag (column H), so only unbilled positions are processed
- Select data from your CashCtrl account
- Client/associate
- Document category
- Account
- Create new order or modify existing one (replace or append order items)
- Update the Google sheet (update
billedflag)
- Go to the Google Cloud Console.
- Create a new project or select an existing one.
- Navigate to the "APIs & Services" dashboard.
- Click on "Enable APIs and Services."
- Search for "Google Sheets API" and enable it.
- Go to "Credentials" in the left sidebar.
- Click on "Create Credentials" and select "OAuth client ID."
- Configure the consent screen if prompted.
- Choose "Web application" and set the redirect URI to
http://localhost:8080. - Click "Create" and save the file as
credentials.json.
- Run the project with
deno run start. The needed information will be collected during this process. - Follow the instructions in the console to authorize the app.
- Paste the authorization code received after authorization.
- Prepare your Google Sheet with the necessary order details.
- The order will be created in CashCtrl with positions taken from the Google Sheet.
Copy this sheet as a starting point!
Your Google Sheet should have the following columns corresponding to the
SpreadsheetRow type:
| Column | Header | Description |
|---|---|---|
| 0 | date | Date of the order (in timestamp) |
| 1 | client | Name of the client |
| 2 | project | Name of the project |
| 3 | description | Description of the order |
| 4 | hours | Number of hours |
| 5 | pricePerHour | Price per hour |
| 6 | total | Total amount (ignored) |
| 7 | billed | Indicates if the order is billed |
This project depends on Deno version 2.0.0 or higher.
Before submitting a PR, please execute
deno lint
deno check main.tsand fix the issues.
