Your session will expire in 10 minutes due to inactivity.

Work Orders

Active jobs and pending actions

Operator
🔔 Get notified when new work orders come in
Sort by
Report an Issue

Fill in the details below. The project manager will review your report and upload a QuickBooks estimate for accounting approval.

📷

Drag photos here, or:

All work orders
Daily Operator Log
Record plant observations and readings each shift — replaces paper logbooks
Archived Orders
Completed and closed work orders in long-term storage
⚙ First-time setup — create Supabase tables

Run this SQL once in your Supabase dashboard → SQL Editor:

create table if not exists plants (
  id bigint generated always as identity primary key,
  name text not null,
  address text default '',
  customer text default '',
  type text default '',
  created_at timestamptz default now()
);
-- If table already exists, add the type column:
alter table plants add column if not exists type text default '';
create table if not exists parts_catalog (
  id bigint generated always as identity primary key,
  name text not null,
  default_cost numeric(10,2) default 0,
  unit text default '',
  category text default '',
  created_at timestamptz default now()
);
create table if not exists customers (
  id bigint generated always as identity primary key,
  name text not null,
  contact text default '',
  email text default '',
  created_at timestamptz default now()
);
create table if not exists employees (
  id bigint generated always as identity primary key,
  name text not null,
  email text default '',
  title text default '',
  created_at timestamptz default now()
);

-- RLS for employees table
alter table employees enable row level security;

-- All signed-in users can read (needed for autofill in every form)
create policy "Employees: authenticated read"
  on employees for select
  to authenticated
  using (true);

-- Only admins can add, edit, or delete employees
create policy "Employees: admin write"
  on employees for all
  to authenticated
  using (
    exists (
      select 1 from profiles
      where profiles.id = auth.uid()
      and profiles.role = 'admin'
    )
  )
  with check (
    exists (
      select 1 from profiles
      where profiles.id = auth.uid()
      and profiles.role = 'admin'
    )
  );
Plants & Locations
Auto-suggested when creating a new work order
Plant / LocationTypeAddressCustomer
Loading…
Customers & Accounts
Auto-suggested in new orders and estimates
Customer / AccountContactEmail
Loading…
Parts & Materials Catalog
Auto-suggested in field reports and final packages — selecting a part fills in the default cost
Part / Material NameDefault CostUnitCategory
Loading…
Employee Registry
Names and emails auto-suggest in technician and operator fields across all forms
NameEmailRole / Title
Loading…
Integrations
Connect HydroTech Utilities to external tools like Microsoft Power Automate
Power Automate — Truck Inventory Sync
When a tech saves a service call and marks parts as from truck inventory, each item is automatically pushed to your Excel spreadsheet via a Power Automate HTTP flow. Parts bought on-site are excluded — only truck stock is tracked here.
📋 How to set up the Power Automate flow (step-by-step)
Step 1 — Create the Excel table in OneDrive
Open OneDrive, create (or open) an Excel workbook. In a sheet named Inventory, select row 1 and add these column headers exactly as shown:
Date | Tech | Customer | Plant | Equipment | Work Order | Item | Qty | Unit Cost | Subtotal | Summary
Select those headers + a few blank rows below, then go Insert → Table (check "My table has headers"). Name the table TruckInventory.

Step 2 — Create a new Power Automate flow
Go to make.powerautomate.com+ New flow → Instant cloud flow. When asked to choose a trigger, pick "When an HTTP request is received", then click Create.

Step 3 — Configure the HTTP trigger schema
Inside the trigger card, click "Use sample payload to generate schema" and paste this JSON, then click Done:
{"rows":[{"date":"2025-01-15","tech":"John Smith","customer":"City of Houston","plant":"North Plant","equipment":"Pump #3","workOrder":"SC-1736000000000","item":"1/2\" Ball Valve","qty":2,"unitCost":12.50,"subtotal":25.00,"summary":"Replaced inline ball valves on suction line"}]}
Step 4 — Add "Apply to each" loop
Click + New step, search for Control, select Apply to each. In the "Select an output from previous steps" field, click inside it and choose body → rows from the dynamic content panel (this loops over every item in the array).

Step 5 — Add Excel row inside the loop
Inside the loop, click Add an action, search Excel Online (Business), and select "Add a row into a table". Fill in:
  • Location: OneDrive for Business
  • Document Library: OneDrive
  • File: browse to your workbook
  • Table: TruckInventory
Map each column using dynamic content from the loop: Date→date, Tech→tech, Customer→customer, Plant→plant, Equipment→equipment, Work Order→workOrder, Item→item, Qty→qty, Unit Cost→unitCost, Subtotal→subtotal, Summary→summary

Step 6 — Save and copy the URL
Click Save. The HTTP trigger card now shows a HTTP POST URL — click the copy icon. Paste that URL into the field above and click Save URL, then click Test to verify a test row appears in your Excel table.