1. Home
  2. Blog
  3. Release Notes – July 2025

Release Notes – July 2025

1. ALL REGIONS

FEATURES 

Feature: Automate Branch Mapping 

We’ve introduced a new setting that allows branches to be automatically mapped to their Pulse Office, based on company preferences in Agresso. 

This change helps reduce manual setup and ensures that users can be created successfully without relying on manual input from our Customer Success team. Only companies marked with the new “Auto Map Branch” setting will have this automation applied. 

This update affects select EU and UK companies and improves consistency and accuracy when setting up offices and branches in Pulse. 

Project Wizard Upgrade 

We’ve moved all project creation, updates, and submissions to our new and improved V2 system. This brings a more reliable and consistent experience across all regions. 

Key improvements include: 

  • Better Activity Handling for US Projects: When creating a project and selecting “Out of Pocket” as a work category, Pulse will now correctly send all related activities to Agresso—this was previously missed. 
  • New “Network” Project Templates: We’ve introduced a new “Network” template option. This lets agencies create reusable project templates that are accessible across their network, not globally. 
  • Updated Project Emails: All project-related emails now use our new V2 template for better formatting and clarity. 
  • Fixes for Financialise Feature: Various improvements have been made to ensure the Financialise feature works as expected, without unnecessary clicks. 
  • Phantom Jobs Fixes: When Phantom Jobs are auto-approved, all required activities are now correctly created in the UK/EU. 

Coming soon: A refreshed UI that allows you to configure which field show and what defaults they will have, if any.  

[2218] Timelines Enhancements 2025 

We’ve made several upgrades to the Timeline tool: 
 

What’s new? 
 

  • Colour and Text formatting is available on the Timeline Gantt table 
    You can now apply colour and text formatting directly to rows and cells in the Gantt table, making it easier to highlight key phases, deadlines, or team responsibilities at a glance. 
  • More intuitive drag-and-drop performance with a dedicated drag handle 
    Items can now be moved more easily using a clear drag handle, reducing accidental edits and improving overall responsiveness in both single and multi-task interactions. 
  • Locked columns for important Timelines data 
    The Title, Start/End Dates, Duration, and Predecessor columns are now locked, so you can scroll across large timelines while keeping essential details in view for better planning and coordination. 
  • Single click scroll to date 
    Jump to any date on the timeline with a single click—no more endless scrolling. Ideal for navigating large projects or quickly syncing with today’s date. 
  • Copy and paste of the Gantt table to Excel, Notes, Outlook etc. 
    You can now copy table data directly from the Gantt view and paste it into tools like Excel, Outlook, or Notes for reporting, meetings, or quick reference—preserving formatting and structure. 

[2222] Task Status Configuration for Networks & Offices 

We’ve rolled out a powerful new feature for task tracking. Admins can now customise task statuses to better match real workflows. 
 

What’s new? 
 

  • Create custom status sets for different project types 
    Tailor status sets to reflect the unique stages of different project workflows—whether for creative, production, or strategy teams. Each project type can now follow its own logic. 
  • Configure statuses at the Network or Office level 
    Set up distinct status configurations based on your team’s structure. Whether you’re managing a global network or multiple offices, each group can now work with language and stages that make sense locally. 
  • Apply meaningful statuses for Network or Office level workflow 
    Empower permissioned users to define terminology that reflects how your teams actually work—no more generic labels. Make task tracking intuitive, transparent, and locally relevant. 

Next Phase: 
 
Map custom statuses to core system statuses (e.g. Not Started, In Progress, Complete) 
Maintain consistent reporting and filtering by linking your custom statuses back to core system states. This ensures dashboard views and reporting tools stay aligned, even with diverse workflows. 

[2228] Extend timesheets module by time on task – Phase 1 

Phase 1 introduces the foundational backend for Time on Task tracking. This phase focuses on capturing time logged on tasks in a new table to support future reporting, audit, and time management features. No changes were made to the current timesheet or tickethistory behavior. 

What’s new: 

  • Time logged on tasks is now saved to a new reporting table (in addition to existing timesheets). 
  • Logged hours are grouped by task, activity, and date. 
  • Comments are combined automatically when time is added in multiple entries. 
  • A new API powers the data shown in task history, timesheets, and project views. 
  • “Amend” button added for approved Non-Agresso timesheets (visible to Operations Group only). 

Phase 2 and 3 will introduce: 

  • Edit/delete capabilities for logged time 
  • A full front-end for time-on-task management 
  • Reporting 

Enhacements 

[#71605] Pulse Delinquent API Updates 

We’ve added two new data points to the Delinquent Timesheet API used by Power BI dashboards: 

  • Last Approved Timesheet Date – shows the most recent date a timesheet was approved. 
  • Approval Timestamp – shows when that last timesheet was approved. 

[#70686] FE: Enhancement: Add Project List Filters, Cols and Deep Link URL 

We have added new Filters in the Project List to support the full experience of the ‘View All Projects in Scope’ link from the Finance Snapshot. Some of the filters that exist in Finance Snapshot did not exist in the Project List, so the ‘View All Projects in Scope’ may return a different number of projects. 

The new Filters are: 

  • Period (uses job.startdate) 
  • Agresso Project Owner 
  • Project Category 
  • Project Finance Type 
  • Plan 

[#64195][#71127] Allow Bulk Edit in the Sync Schedule 

We’ve added a new time-saving feature that lets you easily enable or disable multiple Agresso syncs at once from the Sync Schedule page. 

This is especially useful during: 

  • Planned system downtime, like Agresso upgrades. 
  • New office onboarding, where syncs should remain disabled until go-live. 

You can now select one or more syncs and click “Enable All” or “Disable All” directly from the interface—no need to manage each record individually. 

[#74245][#71986] Allow updates to timesheet comments 

We’ve introduced a new permission that allows members of the Operations Group to edit comments on timesheets—even after they’ve been submitted or approved. 

Previously, once a timesheet was submitted, all comments became read-only. Now: 

  • Operations Group users can edit and save comments on any submitted or approved timesheet. 
  • All other users still have read-only access to comments once a timesheet is submitted. 

This update gives Operations teams more flexibility to keep timesheet records accurate without needing to reopen or amend the entries. 

[#72420] Feature Enhancements: Bulk Amendments 

We’ve improved the Bulk Amend Project Dates tool to reduce errors when updating project end dates. 
If a project is missing a Timesheet End Date, Pulse will now automatically set it to match the updated Project End Date—but only for non-legacy projects. 

Previously, users had to perform two separate bulk updates: one for the Project End Date and another for the Timesheet End Date. This update simplifies that process and prevents common errors like “Timesheet End Date is required.” 

[#73358] Adding Category to the Finance Detail Report V2 

We’ve added a new optional column called Category to the Estimate tab of the Finance Detail Report (V2). This lets users view estimate categories directly in the report—useful for financial teams that organize estimates by category in the Estimate Builder. 

Key Details: 

  • The Category column is hidden by default—you can enable it via the column selector. 
  • If no category was assigned, the field will simply appear blank. 
  • This update provides better visibility and filtering options for users who manage estimates by category. 

[#73622] Enhancement: FE: Update formula for Timesheet Burndown calculation 

We have applied an updated calculation of the Timesheet Burndown in the Finance Snapshot. 

The original calculation was: 
actual_time / estimate_time 

The updated calculation includes Estimated Fee: 
actual_time / (estimate_time + estimate_fee) 
 

Note: This update was just a last change relating to this calculation change. Project list has used this formula for several months already. 

[#74112] FE: Change Office API in Address Book > Users 

We’ve updated the Office Filter dropdown on the Address Book > Users page to use our latest V2 Client API. 

What’s improved: 

  • The dropdown now loads data from the V2 API. 
  • Offices are listed in alphabetical order to make them easier to find. 
  • The filter continues to work as expected when selecting an office. 

[#74114] Finance Detail Report V2 > Add Interagency Job Number column 

We’ve added a new optional column called Interagency Job Number to the Finance Detail Report V2, including its export. 

What’s new: 

  • The column pulls job numbers from other Havas agencies, when used. 
  • The column is hidden by default—you can enable it using the column selector. 
  • Export files now include this field when selected. 

[#74313] Global Worker RES ID Audit Export 

We’ve introduced an automated audit to help catch mismatches between Agresso Alien User Resource IDs and expected values based on office and resource setup. 

What it does: 

  • Runs every Monday 
  • Identifies users whose current Global Worker Resource ID does not match the expected format 
  • Emails a report to support@pulsesupport.freshdesk.com with a clear summary of affected users 

Why it matters: 

  • Helps proactively identify setup issues before they affect timesheets or billing 
  • Ensures accurate data mapping between Pulse and Agresso 
  • Clearly separates ownership: CS Success Team – US or UK/EU should action the items  

This improves data hygiene and makes resolution faster by routing the issue directly to the right team. 

FIXES 

[#73357] Set max time for checking DIH submissions 

We’ve improved how Pulse processes invoice data sent to Agresso. Previously, Pulse would continue trying to process invoice records even if they had already been marked as cancelled in Agresso—causing unnecessary system activity. 

With this update, Pulse will now automatically stop processing invoice records if they’re more than 36 hours old. This ensures our system focuses only on active, valid invoices and helps reduce noise from outdated or cancelled entries. 

[#73723] Bug: v2 Purchase Order PDF Sync not working as expected 

We’ve fixed an issue where Pulse was incorrectly marking all documents as “fetched,” causing them to be downloaded multiple times unnecessarily. This issue has been resolved, and the improved sync is now more selective. 

As part of this update, we’ve also added support for a new identifier (unique_id) that allows us to sync only the latest documents from Agresso. This greatly reduces the load on the system and improves performance—especially for offices with large volumes of financial documents. 

[#73425] JCR Download Cleanup 

We’ve implemented a new process to automatically clean up stale JCR report requests that have remained in the “ordered” status for more than 24 hours. 

What was happening: 

  • The JCR download process checks if reports are ready in Agresso. 
  • If Agresso is unavailable or delayed, requests remain stuck in the “ordered” state. 
  • Because older entries are always processed first, newer, relevant reports could be blocked indefinitely. 

What’s fixed: 

  • A new scheduled task runs daily and marks any JCR queue items older than 24 hours as “Not Processed by AGR”. 

[#73671] The “x” and “Add to Invoice” on supplier invoice composer does not work 

We’ve fixed an annoying issue in the Invoice Builder where users—particularly in Germany—had to click the “X” multiple times to close the pop-up after adding actual costs. This has now been resolved. 

What’s fixed: 

  • The “Add to Invoice” modal now closes correctly after a single click. 
  • No more repeated clicking to dismiss the window. 

This update improves usability and reduces confusion for teams creating invoices from actual costs. 

[#73810] Bug: Admin > Finance Classification data grid doesn’t load 

The admin interface for setting up the Finance Classification rules did not show any data. That has been fixed. 

[#73994] Brand search does not support apostrophe 

We’ve fixed an issue where the “Link to Master Client” search on the Brand screen didn’t return results when typing names with apostrophes (e.g. Paul’s Master Client). 

What’s fixed: 

  • The search now correctly handles apostrophes in client names. 
  • Users can now search for and select Master Clients using their full, punctuated names. 

This improves accuracy and usability when linking brands to Master Clients with names that include special characters. 

[#73996] Bug: Review Detail Flyout cannot be accessed from the Files tab 

We’ve fixed a bug that prevented the Review Detail flyout from opening when users clicked “View Review Details” in the asset detail view under the Files tab. 

What was happening: 
Clicking the “View Review Details” button had no effect—the flyout didn’t open, making it harder to access in-progress reviews directly from the file context. 

What’s fixed: 
The button now opens the Review Detail flyout as expected, providing a seamless way for users to view review status and activity without navigating away from the Files tab. This restores an important shortcut in the review workflow and reduces unnecessary clicks. 

[#74094] Inactive/blocked Product populating as available options in the brand request form 

We’ve resolved an issue where inactive or blocked products were still appearing in the dropdown on the Brand/Product Access Request page. 

What’s fixed: 

  • Products marked as inactive or blocked in the system will no longer show up when users request access. 
  • This ensures users can only select valid, active products—avoiding confusion or invalid submissions. 

[#74095] The “Request Date” field in the brand access page is incorrect 

We’ve fixed a bug where the Brand Approval page was displaying the request date as one day earlier than the actual submission date. 

What was happening: 

  • Requests submitted on May 21 were appearing as May 20 in the approval interface. 
  • The date shown in Pulse didn’t match the actual request timestamp or email notification. 

What’s fixed: 

  • The approval page now correctly displays the actual request date, ensuring consistency across all records and communications. 

[#74111] BE: Change “Change User” to include users across network 

We’ve resolved an issue where Network Superusers with multi-office access couldn’t view users from other networks in the “Change User” feature on the Timesheets page. 

What’s fixed: 

  • Superusers can now see and select users from any network office they have access to—just as expected. 
  • This ensures full visibility and flexibility for users managing timesheets across multiple offices and networks. 

[#74117] Duplicate options in the Attribute dropdown 

We’ve fixed an issue where users saw duplicate values in the Therapeutic Area and Business Unit dropdowns when requesting a new brand or product. 

What was happening: 

  • When multiple brands under the same Master Client shared the same attribute value, it appeared multiple times in the dropdown. 
  • This was caused by missing GROUP BY logic in the API. 

What’s fixed: 

  • Attribute dropdowns now display unique values only, even if shared across brands. 
  • This applies to both all attributes when marked as “Used for New Brand Request.” 

[#74207] Bug: Burn Report doesn’t pull data for multi-offices 

We’ve resolved an issue in the Burn Rate Report (V1) where users with access to multiple offices could only download data for a subset of those offices. 

What was happening: 

  • Users who had access to multiple offices were only seeing data for some of them. 
  • This issue was previously fixed in the Profitability Report and has now been applied to the Burn Report as well. 

What’s fixed: 

  • The Burn Report now correctly includes data from all offices a user is mapped to, regardless of their primary office setting. 

[#74264] Fix: Special characters in support tickets via portal 

Fix for the support tickets submitted from the Pulse Support portal where new-line characters and backslashes were included in the ticket text. 

[#74309] Incorrect validation: Ops Groups 

We’ve corrected a validation issue on the Office Settings > Timesheet tab, where users were seeing an incorrect error message when saving changes—even if the “Missing Time Email” feature was not enabled. 

What was happening: 

  • The system was incorrectly requiring an Operations Group to be set, even when the email feature wasn’t being activated. 

What’s fixed: 

  • The validation now only triggers when enabling the “Missing Timesheet Approver” email. 
  • Users can freely update other fields on the Timesheet tab without encountering this error. 

[#74335] Turning on Missing Time Report does not populate report 

We’ve resolved an issue where users weren’t appearing in the Missing Time Report after the feature was enabled for their office. 

[#74336] Turning off Missing Time Report should remove users 

We’ve fixed an issue where users continued to appear in the Missing Time Report even after their office had the “Enable Missing” setting turned off. 

[#74368] Bug: Joblist: The dropdown of some filters cannot sort options by typing 

Fix for the old Joblist when ‘search as you type’ was used. 

[#74423] Fix: Prompt for closing phantom job not popping up 

We’ve resolved an issue where the Phantom Job Closure modal did not appear when completing a project, even though the setting was configured to prompt closure. 

What was happening: 

  • Users expected a modal to appear when marking a project as “Complete” (per the Phantom Job Closure setting). 
  • Instead, they had to manually navigate to the Phantom Job Closure Status to complete the process. 

What’s fixed: 

  • The closure prompt now appears automatically when required, based on the agreement setting between offices. 
  • Manual steps are no longer needed, ensuring a smoother and more consistent experience when wrapping up projects with phantom jobs. 

[#74433] Bug: Joblist: 500/504 error when exporting from Joblist without any filter on HavasPulse 

Fixed 500/504 errors and improved export performance by resolving inefficient queries and introducing a default record limit of 5,000 (configurable via JOBLIST_EXPORT_LIMIT) to prevent memory and timeout issues.  

[#74447] Fix: UI enhancements for the Missing Time Export 

We’ve made a few small but important improvements to the Missing Time Report export to improve clarity and formatting: 

What’s improved: 

  • Removed a random semicolon that appeared in the filters and sorts section of the export. 
  • The Created At timestamp now reflects the timezone of the user who requested the export. 
  • Removed the timestamp from the Missing Start Date and Missing End Date fields—only the date is shown now for cleaner display. 

[#74366] Bug: New Project List: Always got the default results when picking any option in Job Attributes filter > Project Finance Type 

Fix for the Project Finance Type filter in the new Project List. 

[#74370] FE: Change Main Project API 

We’ve fixed an issue where users couldn’t select a Main Job during project amendments. The problem was due to the use of an outdated API that only supported jobs coming from Agresso—whereas in this case, the main job is sourced from Pulse. 

3. TECH DEBT  

[#66496] Move Project Relations Values Sync to V2 

We’ve updated how Pulse syncs “Project Relationship Values” from Agresso. This improves the reliability and performance of the data sync process across the UK, EU, and US regions. 

[#70727] Move JDR Report Ordering Sync to V2 

We’ve introduced a new background process to support the Job Costs Report (JDR) for the US Agresso instance—specifically for the HH and ED ledgers. 

This new sync automatically handles every stage of the JDR process, including ordering the report, downloading it once ready, and retrying any failed attempts. These improvements ensure greater reliability and automation, especially when reports are large or delayed. 

[#70872] Move Download Documents to V2 

We’ve upgraded how Pulse handles finance document downloads from Agresso. This refactor replaces the older process with a newer, more efficient system already used for JCR reports. 

Key improvements: 

  • More Reliable Syncing: Finance documents (like invoices and purchase orders) are now downloaded using our modern V2 structure. 
  • Better Organisation: Files are correctly linked to the relevant project and automatically stored in the right folders in Pulse. 
  • Improved Performance: Downloads now happen in batches every 15 minutes to ensure timely access with minimal load. 

[#74443] Exception Unable to action this phantom job AutoClosePhantomJobs/Adapter.php:110 

We identified and resolved an issue where an exception was being thrown during the auto-close process for phantom jobs. The error occurred when the system attempted to update a phantom job that could not be actioned.  

This caused certain phantom jobs to fail during the auto-close process, which may have led to delays in automated project clean-up. 

[#74506] QueryException Duplicate entry SQL insert into jobusers 

We identified and fixed a database error occurring when users were being added to a project team. The issue was caused by an attempt to add the same user to the same project more than once, triggering a duplicate entry error. 

[#71995] Slow Query – Audit history 

We’ve identified and addressed a major performance bottleneck affecting user pages, particularly the audit history section. A specific query was taking over 60 seconds to load in production—causing serious delays for users accessing audit records. 

[#72203] Delete failed queue entries when using Move Office Tool. 

We’ve improved the Move Office Tool to automatically clean up failed queue entries that could cause background errors in New Relic. 

What was happening: 

  • When moving a user to a new office and assigning a new resource ID, Pulse deleted the related Alien User Resource record. 
  • However, failed queue entries linked to that resource were left behind, leading to unnecessary processing attempts and New Relic errors. 

What’s fixed: 

  • When a user is moved and given a new resource ID: The associated agresso_alien_user_resources record is deleted  
  • Any related queue entries that are not marked as ‘completed’ are now also automatically removed 

[#74357] Tool: Create a tool to fix currency and rate on timesheet records 

We’ve introduced a new backend tool to automatically correct timesheet records where the rate or currency was missing or incorrectly saved. This tool addresses two specific scenarios that previously led to zero rates or incorrect financial data. 

What it fixes: 

  1. Global Worker Records: Sometimes rates were not applied when users from other offices (alien users) submitted time. 
  1. Amendments with Incorrect Currency: Amended timesheets occasionally saved with the wrong currency—particularly in UK/EU offices. 

[#74425] TypeError with message UserService::getById must be of type int 

We’ve fixed a bug that caused the Timesheet page to crash when accessing it with a direct URL containing a userId parameter. 

[#74533] Exception with message File images logo gif not found in report.php 2450 

We’ve fixed an error that caused the Vertical Gantt Report export to fail when the system attempted to attach a missing image file (logo.gif) to the Excel header. 

What was happening: 

  • The report generation process expected a file at ./images/logo.gif. 
  • If the file didn’t exist, the export crashed with an exception and no file was generated. 

What’s fixed: 

  • The export logic now checks if the logo file exists before trying to use it. 
  • If the logo is missing, the export will still proceed without it—no more errors. 

[#74686] InvalidFormatException separation symbol could not be found ProjectService.php 434 

We’ve fixed an error in the Project List that occurred when the system tried to parse an incorrectly formatted date. 

What was happening: 

  • The backend expected a valid date string with proper formatting. 
  • When unexpected or malformed input was received (e.g. missing a separator like – or /), the system threw a Carbon InvalidFormatException and failed. 

What’s fixed: 

  • The date parsing logic has been updated to validate the format before attempting to convert it
  • If the format is invalid or missing, it will now be safely ignored or defaulted, rather than crashing the system. 

[#74419] NR: Exception ‘TypeError’ with message ‘App\Services\User\UserService::getById() 

We’ve fixed an issue where entering a non-numeric user ID in the Timesheet page URL caused a system error.