Changelog

What's new

  1. NewLatest

    Projects With One Invoice, Holidays & Time Off on the Calendar

    Projects
    • Group related jobs into a Project from Job > Projects, or pick the Project on the job form. A project can include jobs for different customers
    • Every project gets its own invoice number (PINV-0001, PINV-0002, and so on) and one customer link that lists all of its job invoices, paid ones included, with running totals for Total Invoiced, Paid and Amount Due
    • Customers can click any job on the project page to open that job's own invoice, and pay the whole balance at once with Pay Balance Now
    • Send Invoice emails or texts the project link, and Record Payment takes one payment for the project and splits it across the unpaid job invoices, oldest first, with the option to change the split
    • Paying a job invoice on its own still works and lowers the project's amount due. Each job invoice page shows a link back to its project
    • The project page and PDF follow your Portal Template setting, Default or Modern
    • Projects can be put On Hold, Completed or Cancelled from the project form
    Calendar
    • Add Holidays, Time Off and other events that are not jobs. They show on the Jobs calendar as striped bars and on the dashboard calendar for everyone
    • Import your country's public holidays in one click, including your state or province's own holidays, for customers in the USA and Canada. Holidays for this year and next year are also added automatically every month
    • When scheduling a job on a holiday, or with an installer who is off that day, the Schedule Job window shows a warning. The job can still be scheduled
    • The dashboard calendar's New menu now creates an Activity, Time Off or Holiday for the selected day, and its color legend sits below the calendar
    • Holidays & Time Off can also be found in the To-Do app
    Boards
    • Redesigned cards with larger, easier to read text on the Jobs, To-Do, Procurement, Services, Documents, Customers and Products boards
    • Each card shows its key details at a glance, such as the schedule, project, amounts and assigned people, with a colored edge for its stage or priority
    • The Jobs list now shows the Project column
  2. New

    Set Approved Estimates Back to Draft, With Saved Revisions

    Estimate
    • A new Set to Draft button on approved estimates moves the job back to Estimate Created, so the estimate can be edited and approved again. You are asked for a reason, which is also posted in the chatter
    • Before going back to draft, the approved estimate is saved as a locked revision (Rev 1, Rev 2, and so on) with all of its material, labour, equipment, subcontractor and permit lines, totals, terms and customer signature. Revisions can never be edited or deleted
    • When a job has earlier revisions, a single line at the top of the Estimates tab shows how many there are, with a View revisions link to open them
    • Payments already received stay on the job. The invoice is built from the revised estimate and deducts everything the customer has already paid
    • Set to Draft is available while the estimate is approved and before the job is queued, as long as no partial invoice has been created
    Multiple Estimate Options
    • Setting an approved estimate back to draft reopens its options, so any of them can be selected for approval again. Options you rejected yourself stay rejected
    • The Add Options button label now stays on one line
  3. Fixed

    Restoring Lost Jobs Works Again

    Estimate
    • Fixed an error that stopped a Lost job from being moved back to Estimate Created once its estimate had been approved
    • Restoring keeps all of your product, labour, equipment, subcontractor and permit lines; only the locked copy of the approved estimate is cleared, so the estimate can be edited and approved again
  4. Improved

    Edit Costs and Prices Straight From the Lists

    Products & Services
    • Cost, Markup Factor, Sale Price and Taxes are now visible and editable directly in the product and service lists, so a price review no longer means opening every record in turn
    • Typing a cost recalculates the sale price from the markup factor, and each row carries an arrow to open the full record when you need it
    • The separate Product Pricing screen has been retired, as the main Products list now does the same job
    Procurement
    • The Needs Ordering list shows cost, markup factor and sale price alongside the stock figures, so buyers can check pricing before raising a purchase
    Inventory
    • Adjust Inventory now opens with the product already filled in and locked, instead of asking you to pick it again
    Getting Started
    • The onboarding checklist gained two steps, customising your email templates and your SMS templates
  5. New

    Bot Protection on Website Forms & Account Safety

    Website
    • Website contact forms are now protected by Cloudflare Turnstile, which blocks bot submissions without asking real visitors to solve anything
    Users
    • Built-in system accounts are hidden from the user list and can no longer be edited or deleted, and the home dashboard gained a 'Create users' onboarding step
    Company
    • Creating extra companies is disabled, since each subscription runs a single company
  6. New

    Bot Protection on Sign In & Voucher Codes at Checkout

    Sign In & Registration
    • Login and registration are now protected by Cloudflare Turnstile, a privacy-friendly human verification that stops automated bot signups; most users simply see a brief 'Verifying...' check with no puzzle to solve
    • Verification is enforced on the server side of the authentication service, so automated scripts cannot bypass it by skipping the form
    Checkout
    • Checkout now accepts voucher / promotion codes; click 'Add promotion code' on the payment page and the discount is applied to the subscription immediately
    • When a code covers the full amount, no credit card details are required to complete the subscription
  7. New

    Timesheet Overtime Engine, Procurement Numbering & Reliable Backups

    Procurement
    • Fixed new procurement orders showing 'New' as the reference instead of a real PO number; the PO sequence (PO00001, PO00002, ...) now generates correctly, and any existing orders left as 'New' are backfilled with proper numbers on update
    Backups
    • Daily database backups now save reliably inside each instance's own data storage; this removes the folder-permission and missing-directory errors that could silently stop the nightly backup from running
    • Backups continue to be kept for 7 days on the instance, ready to be synced offsite
    Timesheet
    • Timesheets are now entered as hours only and organised as a day-sheet with Regular, Shop, and Stat lines; each day rolls up into Regular, Overtime, Shop, and Stat hour totals
    • Overtime is calculated automatically using Alberta's 8/44 rule (hours over 8 in a day or over 44 in a Sunday-to-Saturday week, whichever is greater), so staff never enter OT manually
    • Statutory holidays come seeded with Alberta dates and a daily process auto-generates an 8-hour Stat block for eligible employees; bookkeepers can add or edit the holiday list
  8. Fixed

    Procurement Email Fixes & Tenant-Branded Email / SMS Templates

    Procurement Email
    • Fixed the Send Purchase Order wizard pre-filling the greeting as 'Dear PO00009' (the order reference) instead of the supplier's name; the default body now reads 'Dear <first name>' pulled from the supplier record, with a 'Hi' fallback when the partner has no name on file
    • Fixed procurement emails being delivered twice to the recipient; the wizard now logs the message to the chatter as an internal note (mail.mt_note) and the actual send goes through a single mail.mail.create().send(), matching the pattern the estimate and invoice wizards already use
    Email & SMS Templates
    • Removed the hardcoded product-brand mentions from seeded email and SMS templates; references like 'Postech Screw Piles' and 'Thanks for choosing Postech' now use {{ company.name }} so each tenant's own company name is rendered automatically
    • Affected templates: Job Estimate - New Customer (subject + body), Job Post Job - Thank You (subject + body + signature line), Estimate Ready SMS, and the legacy Send Estimate SMS
    • Existing tenant-customised templates are not overwritten by the seed (noupdate flag), so dealers who have edited their templates keep their wording; the change only affects fresh installs and the seeded examples
  9. New

    Job Rebrand, Cleaner Portal URLs, Workflow Buttons & Customer Savings

    Job Workflow
    • New Restore to Estimate button on jobs marked Lost; reverts state to Estimate Created and clears the lost reason so a customer who comes back can pick up where they left off
    • New Return to Queue button on Job Scheduled jobs; clears the schedule dates, installer assignments, and any open Field Service todos so a delayed job goes back into the unscheduled pool without leaving stale calendar entries behind
    • Manual payment recording (Approve Estimate, Record Manual Payment, and Estimate Manual Payment wizards) now posts a Manual Payment Recorded note to the job chatter with amount, type, method, date, and any reference / notes so the audit trail is captured automatically
    Estimate & Invoice Portal
    • Customer-facing portal URLs are now /estimate/<id>/<token> and /invoice/<id>/<token>; the legacy /postech/... links from older emails keep working indefinitely so nothing already sent breaks
    • New You Saved row in the totals box on both estimate and invoice portals (legacy and modern templates) shows the total discount in dollars whenever any line carries a Disc. %, including per-option estimate cards and per-invoice totals on Invoice 2 / 3
    • Discount column on the portal now shows for both Materials and Labor whenever any line on the document has a discount; previously the Labor table could hide the column even when discounts were applied elsewhere
    Calendar
    • Job calendar event titles now render as Customer Name - Job Name (eg Jennifer Forrester - Deck Addition @ 9 Fir Close) instead of just the job name; the same format applies to Field Service and Follow-Up todos linked to a job
    Order Template
    • Applying an Order Template to an estimate no longer shuffles sections and lines around on save; sequence values are now assigned uniquely above existing lines so the order you see while editing is the order you get after saving
    Follow-Up Activities
    • Follow-up reminder activities created by Send Estimate / Send Invoice now use the date the user actually picked in the wizard; previously the reminder could land one day before the chosen due date because of how the start/end time was computed
    • Sending an estimate or invoice now closes any prior open follow-up reminder for that job before creating the new one; previously a re-send could leave stale activities behind, making it look as if the new due date had been ignored
    SMS Templates
    • Hard-coded SMS bodies for Post Job Thank You, Day Before Appointment Reminder, and Mark as Lost cancellation (installer + customer) are now editable records under Apps -> SMS Templates
    • Calendar drag-and-drop reschedule SMS now reuses the existing Field Service Schedule - Installer (Reschedule) template so wording stays consistent with the Schedule Job wizard
    Naming
    • Main app menu renamed from Postech to Job; the same rename was applied to module names (Job Theme, Job Demo Data, Job CRM, Job Main Dashboard, Job Settings, Job Documents, Job Dashboard, Job Timesheet, Job Website Bridge, Job SaaS Connector), settings section title, model descriptions, payment journal labels, sequence names, paper format, email and SMS template names, and the user-visible labels on the user-preferences and timesheet screens
    • Technical record URLs and model names (eg postech.job in /web?model=...) also migrate to fsm.* on existing databases via an automatic pre-migration script so chatter, followers, attachments, M2M relations, and tax/discount data are all preserved through the rename
  10. New

    Partial Invoices, Profit Overhead, Signature & SMS Templating

    Postech Job
    • 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