New Create Partial Invoice button on the job header, visible in Estimate Approved / Job Unscheduled / Job Scheduled, restricted to the invoice group; lets staff bill engineering, test piles or other pre-completion services without waiting for job completion
Invoice tab now appears whenever a partial invoice exists, even before the main invoice is created; Invoice 1 sub-page stays hidden until Create Invoice fires so users only see what is actually billable at each stage
Estimate / Invoice line tables (Materials and Labor, including all option tabs and Field Service / Invoice) no longer auto-create a new product or service when an unmatched internal reference is entered and Enter is pressed; users must explicitly use Create and edit to add a new record
Show Job Documents and Internal Documents fields into Field Service so installers see every attachment relevant to the job in one place
Vendor Invoice field on the procurement Other Info tab now uses a proper file-upload widget with filename preservation, replacing the broken binary input that did not surface an Upload button
Profit Calculator
New Overhead row sits between Total COGS and Revenue in all three Profit Calculator panels (Confirmed Estimate, every Option 1-5, and Invoice); reads the Target Overhead (%) field from Revenue Settings and shows the dollar amount being deducted
Profit is now Revenue minus COGS minus Overhead so the headline number reflects what actually flows to the business after indirect costs
Margin (%) renders as a coloured badge: green when current margin is at or above the Target Gross Margin (%) from Revenue Settings, red when below, no colour when the target is blank; a small 'target X%' caption sits next to the badge for quick reference
Email Signature
{{ user.signature }} placeholder is now resolved everywhere it appears in mail templates rendered by the Send Estimate, Send Invoice, Send Procurement and Send Post-Job wizards; pulls the HTML signature from the user's Preferences
Send-email wizards auto-append {{ user.signature }} to the body when a template is selected and the placeholder is not already in the template, so legacy templates carrying a hardcoded sign-off still pick up the per-user signature
Seeded mail templates (Estimate New Customer, Existing Customer, Followup, Invoice, Purchase Order, Post Job) replaced their hardcoded user.name / phone / website / company.name block with a single {{ user.signature }} block; fresh installs ship with this layout
Schedule Wizard SMS
Hardcoded installer and customer scheduling SMS bodies removed; the Schedule Job wizard now reads from postech.sms.template records so staff can edit the wording from the SMS Templates menu without touching code
Four seeded templates ship out of the box: Field Service Schedule - Installer (New), Installer (Reschedule), Customer (New), Customer (Reschedule); the wizard auto-picks the right pair based on whether the job is being scheduled for the first time or rescheduled
Wizard renders {{ first_name }}, {{ object.name }}, {{ object.client_info }}, and {{ date_range }} placeholders at send time so the messages personalise per recipient
Portal & Preview
Estimate portal sign-prompt copy updated to 'Please sign below to approve this estimate and accept the conditions of installation.' on both classic and modern templates
Estimate Preview and Invoice Preview tabs in the job-form bottom panel gain a Print button next to Refresh; opens the browser print dialog against the iframe content so staff print the customer-facing view directly without any backend chrome
Settings & UI
Preferred View setting in User Preferences gains a Calendar option alongside List and Kanban; the chosen view becomes the default for every menu action whose view list includes it, with graceful fallback for actions that do not ship a calendar view
Preferred view fix for mobile: the action service patch now reorders action.views and view_mode at load time and falls back to switchView after open, so the preference applies on small screens (emulated and real)
Issued By dropdowns on Postech Job and Estimate Options now exclude the notifications system user via a login != 'system' domain so it cannot accidentally be selected as the deal owner
Record Manual Payment Before Invoice
Update
New Record Manual Payment button on the job header, visible during Estimate Approved, Job Unscheduled, Job Scheduled, and Job Completed (before Create Invoice), restricted to users with the invoice group
Wizard shows Estimate Total, Down Payment Required, Outstanding Down Payment, Already Paid, and a highlighted Remaining Estimate Balance card to make the math easy to scan
Payment amount defaults to the remaining balance, capped at it; partial deposits are allowed and full payments are accepted as well
Recorded payment is classified as Down Payment when a deposit is configured and the amount is partial, otherwise as Estimate Payment (same rules as the Approve Estimate wizard)
Creates a postech.payment row linked to the job in Confirmed state with method, date, reference, and notes; job state is intentionally left untouched
Amount flows into Invoice 1's balance automatically once the invoice is created, so deposits collected weeks or months before the work starts reduce the final invoice without manual reconciliation
Invoice Review, Estimate PDF & Order Template Cost
Update
Postech Job
Issued By added to the Invoice tab configuration alongside Invoice Date, Completion Date, Payment Term, and Due Date
Create Invoice no longer auto-flips to Invoice Paid when the deposit already covers the balance; the user can review, modify, and send before the state transitions
Multi-Estimate Options
New Multi-Estimate Options flow lets a job present up to five alternative quotes; the customer picks their preferred option in the portal and pays it through Stripe, and staff can also accept an option manually from the backend
Estimate PDF (both default and modern templates) renders the selected option's lines, terms, and totals when the customer is still choosing, then falls back to the confirmed estimate after approval
Order Template
Materials line now has Cost and Markup fields (matching Labor / Equipment / Subcontractor / Permit), with an onchange that computes Unit Price as Cost x Markup
Estimate Signature & Invoice Auto-Paid Fixes
Fix
Fixed estimate portal crashing with a TypeError when a signed estimate was viewed; the signature image data is now decoded from bytes to a string before being embedded in the data URL so the modern portal page renders again
Fixed Create Invoice jumping straight to Invoice Paid when the deposit already covered the invoice balance; the job now stops at Invoice Created so staff can review and modify the invoice, and the state only flips to Invoice Paid after the user clicks Send Invoice
Manual Payment on Estimate Approval
Update
Added an optional Manual Payment section to the Approve Estimate wizard for customers who pay outside Stripe (cash, check, bank transfer)
Process Type (Field Service or Direct Sale) and the manual payment are now confirmed in a single step
Wizard shows estimate total, down payment required, outstanding down payment, and remaining estimate balance for context
Payment amount defaults to the remaining estimate balance and is capped at it
Full payments are recorded as a single Estimate Payment; partial payments are recorded as a Down Payment when one is configured, or an Estimate Payment when none is required
Direct Sale jobs paid in full at approval go straight to Invoice Paid with no further payment step
Field Service jobs paid in full at approval skip the Create Invoice button when the job is completed and land at Invoice Paid automatically
Partial estimate payments still flow through to the invoice; the remaining balance can be collected with the existing Pay Manually button
Fixed payment totals on the job not refreshing when a payment's type was changed
New Timesheet Module, Estimate & Invoice Improvements, Order Template Tabs
Update
Timesheet
New Postech Timesheet module for tracking employee hours
Each timesheet entry has a Type of Time dropdown (Regular Hours, OT, Shop Time, Stat, Other, Yard Work)
Regular and OT entries require an Associated Job; Other and Yard Work require a Specify text field; Shop and Stat need only date and hours
Two roles: Timesheet User (sees own entries only) and Timesheet Manager / Bookkeeper (sees all, can approve or reject)
Submit and Approve workflow: employees submit a draft entry, bookkeepers approve or reject it back to draft
Employee field auto-locks to the current user when creating from My Timesheets, editable for bookkeepers when creating from All Timesheets
Server enforces ownership: non-managers cannot create or reassign entries to other users
Grid view is the default landing view, showing rows by Employee and Job with daily hour totals
Bookkeeper-only Dashboard page with date range filter, employee dropdown, and quick range buttons (This Month, Last Month, This Quarter, This Year)
Dashboard shows four KPIs (Total Hours, Employees, Jobs, Avg Hours per Day) plus four charts: Hours by Type donut, Hours by Employee bar, Daily Hours Trend line, and Hours by Job bar
Status pill row showing Draft, Submitted, and Approved counts for the selected period
Export to Excel button generates a styled .xlsx with all entries in the selected range
Postech Job
Added Estimate Date and Estimate Expiry Date to all four estimate templates: default portal, modern portal, default PDF, and modern PDF
Renamed legacy 'Date Issued' and 'Valid Until' labels to 'Estimate Date' and 'Estimate Expiry Date' for consistency across templates
Fixed Invoice Date and Job Completed dates being reversed on the invoice portal and PDF; both now read from semantic fields stamped at the right point in the workflow
Added Payment Term dropdown on the Invoice tab with options Immediate Payment, 15 Days, 30 Days, 60 Days
Added Due Date that auto-computes from the term and stays hidden unless the term is cleared, in which case the user can pick a custom date
Added Labor, Equipment, Subcontractor, and Permits & Fees tabs to Order Template, mirroring the existing Materials tab
Selecting an order template on a job now loads all four collections into the job alongside materials
Renamed the Order Template Product List tab to Materials for consistency
Google Review Request, Portal Preview & Email Template Fix
Update
Added Google Review Request feature — a new field on the job's internal assessment section lets staff flag whether to request a review from the customer
When set to Yes and a Google Review URL is configured in Settings, customers see a "Leave a Google Review" button on their invoice portal page
Google Review URL can be configured under Settings → Postech and the Portal Template settings page
Added live portal preview panel in the job form — internal users can see the exact estimate and invoice portal view customers see, directly from the backend
Preview panel has three tabs: Chatter, Estimate Preview, and Invoice Preview
Chatter tab shows the standard chatter inside the panel, keeping the form clean
Estimate and Invoice tabs display the full customer-facing portal inside an embedded iframe
Invoice preview supports switching between Invoice 1, 2, and 3 where available
Preview auto-refreshes when the record is saved
Panel can be fully hidden with a Hide button — form expands to fill the freed space on all screen sizes
Show Panel floating button appears when panel is hidden for easy restore
Fixed email template attachments not appearing in the send estimate window — attachments defined on a mail template now load automatically when the template is selected or pre-applied
Discount Lines, Job Categories, Follow Up & Pricing Fixes
Update
Fixed discount line items disappearing from Invoice Materials tab — discount/consumable/service products now always appear in the invoice regardless of delivered quantity
Added Job Category field on job records — multi-select tags positioned directly under Job Name
Pre-populated with 17 default categories (Small Deck, Large Deck, Sunroom, Shed, Garage, Carport, Gazebo/Pergola, Cabin, House, Boardwalk, Retaining Wall, Gate, Mobile Home, Shipping Containers, Solar Panels, Signs, Light Posts)
Job Categories are fully configurable under Configuration > Job Categories
Added Follow Up button on estimate-sent jobs — opens the send wizard pre-set to Both (email + SMS) with a dedicated follow-up template
Follow Up automatically marks existing pending follow-up activities as done and creates a new reminder
Added Mark as Sent button to manually mark an estimate as sent without sending an email
Resend Estimate button changed to secondary (gray) style
Send method (Email / SMS / Both) now auto-selects based on available customer contact info
Fixed markup factor not updating sales price on product records when changed
Fixed same issue on job estimate product lines
Sales price on product records now displays with $ currency symbol
Field Service Qty Fix, Invoice Payment & Payment Info
Fix
Fixed issue where changing the Delivered Quantity in Field Service was incorrectly updating the estimate quantity
Fixed issue where the amount due on an invoice was not decreasing after a Stripe payment — balance due now correctly calculates as invoice total minus amount paid
Added invoice reference info to payment records so each payment shows which invoice it was made for
Dashboard Refresh & Onboarding Setup
Update
Revenue tab inside Postech Job can only be viewed by accounts with accounting access
Dashboard is back with a fresh new look — each component is visible based on the user's privilege level
Re-added onboarding menu inside the dashboard to help new dealers set up their instance
Multi-Invoice, Pricing Overhaul & UX Improvements
Update
"Products" renamed to "Materials" across the platform to match revenue calculation terminology
"Services" renamed to "Labor" across the platform
Automatic post job email disabled by default
Fixed Stock Forecast and "Needs Ordering" menu bug
Added multiple invoice feature — up to 3 invoices can be created per job, acting as additional invoices
Delivered quantity on field service jobs can no longer be decreased; a warning pop-up is shown if attempted. Direct sale jobs are not affected
Markup multiplier moved from global Revenue Settings into each product (Materials). When a product is added to a job, its markup factor and pricing are pulled directly from the product record
Invoice action buttons moved to the bottom tab area to accommodate the new multi-invoice layout
Added "Post Job Sent" button on fully paid invoices to mark a job as completely done
Direct Sale, SMS Controls & Portal Styling
Update
Scheduling (and rescheduling) Field Service will not send SMS by default. A checkbox is available to send SMS to the customer or installer crew separately. Automatic field service customer visit SMS removed
Added "Direct Sale" option when "Approve" button in jobs is clicked. This allows selling products or services without going through field service planning
Direct sale jobs show "Address" instead of "Service Location" and hide "Work Completed" in portal and PDF
Adjustment of font size and spacing in modern estimate and invoice portal for a more compact, aesthetic layout
Added Post Job - Thank You email template
Fixed issue where procurement email attachment (PDF) could not be opened
Attachment Permissions & Portal Signature
Fix
Fixed internal users unable to access attachments uploaded by other users
Fixed "Accept Signature" button not showing in modern estimate portal template
Unified Kanban & Role-Based Tabs (Version 6)
Update
All records now in a single kanban view with stage-based tabs: Job Request, Estimate, Field Service, Invoice
Role-based tab access,users only see tabs matching their group (Job Request, Estimate, Field Service, Invoice)
Default view preference added in user settings
"Estimate Template" renamed to "Order Template",usable from Job Request stage onward
Estimate preview button for reviewing data before sending
Emails for estimates, invoices, and field services now use portal links instead of PDF attachments
Procurement emails still attach PDF; no portal view for procurement
SMS and email combined into one "Send" button,send email, SMS, or both (except Procurement)
Attachment preview on job records for Job & Internal attachments (save required before preview)
Torque report upload with preview,locked in customer portal until invoice is fully paid
Chatter inbox syncs with email when incoming/outgoing mail servers are configured
Mass stock adjustment in Inventory app with Excel import support and template
Accounting and mass emailing temporarily disabled; Website and custom domain add-ons remain
"Purchase" rebranded to "Procurement"
Domain Change & Spam Protection
Addition
Domain change request from app menu
reCAPTCHA v3 auto-enabled on website install to prevent spam
Invoice Email & Navigation
Improvement
Customizable "Thank you" email template in invoice
Job Request, Estimates, Field Services & Invoices added to dashboard top nav
Invoice from Field Services & Flow Improvements
Update
"Create Invoice" button in field services for direct invoicing after job completion
Invoice status badge in field services view
Job Lost status hidden unless record is in that state
Invoice groups now follow flow state instead of alphabetical sort
Invoice initial status changed to "draft" instead of "pending"
Improved control button visibility in invoice header
Zero quantity field services pop-up improved
Dashboard "x Jobs to Invoice" now links to non-invoiced field services
Notes/sections removed from estimate lines when creating invoice,only products and services appear
Fixed random error on invoice menu open
Activity Calendar & Field Service Completion
Update
Completed activities now show with strikethrough in Schedule calendar instead of being deleted