2025 July v2.5

Blueprint Studio v2.5

Changelog

March 21, 2025

  • [Project Financials] Created a tab to show the financials for a project.

  • [Project Financials] handle null value for Budget

  • [Project Financials]Added border around the kpi card

March 22, 2025

  • [Project Financials] Fixed some text issues on PFinancialView

  • [Weekly Status Email] Adjusted hte logic that determines an open proposal since proposals can be partially approved, or not approved at all. The check is now to look at the items on the proposal, and if any item is in REVIEW status, the proposal will be deemed open.

  • [Invoices] PInvoiceListView: Added columns for Cost of Sales, Gross Profit and Gross Margin, as well as totals -Modified Financials Tab for cost of sales to use the same logic so it matches the invoice listing.

  • [Invoices] Added another method to calculate the markup percentage on a invoice. This will help to avoid the challenges when designers are pricing ising a markup, but running financials with a margin.

  • [Invoices] InvoiceListView: Added column for cost of sales, profit, markup, margin

  • [Invoices] Added methods to InvoiceDetail to getProfit and getMarkupPercent

  • [Cleanup] Cleaned up some commented code

  • [Proposal] Send Proposal: Give a warning to the user if a markup for an item is less than the target markup setup in the company.

March 23, 2025

  • [Financials] Introduced the Vaadin Charts API and testing production deployment

  • [Financials] Added dollar labels to the proposals chart

  • [Financials] Added animation to charts

March 24, 2025

  • [Clients] Added new logic to generate a 10 position random code associated to the client because UUID is too long for the field.

  • [Financials] Added more charts and KPIs to the Financials Tab of the Project

  • [Quickbooks] Working on processing payment details

  • [Quickbooks] PublicInvoiceView: Modified so that if the invoice has been paid in quickbooks it will show as paid on the PublicInvoiceView. This is so that it is not confusing to the user if they pay in QB and then come back to the app and it still shows open.

  • [Quickbooks] Started working on Purchases

  • [Attachmnets] Allow all users to upload to a folder if they have access to it.

  • [Attachmnets] -Allow clients to add attachments to folders -Do not allow clients to create new folders

March 25, 2025

  • [ItemLibrary] - Created an item library which does not associate an item to a project. ItemLibraryListView - the main option to get to the library ItemView - the view used to display or work on library items

  • [Attachments] - Added the ability to allow contractors to view and upload into folders.

March 26, 2025

  • [Tasks] - Created a new module of Flat tasks for a project for a simpler way of managing tasks outside of the checklist -Added priority field for the task -Added state attribute to the TaskDialog so it can be controlled from within (just pending/complete)

  • [Tasks] - Fixed TaskDialog after renaming taskPriority to priority

  • [Tasks] - PTaskListView: Changed to only dsplay tasks that have parent=null because we dont want the children showing at the top level.

  • [Tasks] - PTaskListView: Added checkboxes for subtasks and when selected, mark the task as closed.

  • [Tasks] - PTaskListView: Display a meaningful message when there are no Tasks in the state.

March 27, 2025

  • [Tasks] - Moved Tasks to the first tab on the project tabs

  • [Tearsheet] - Added an option to print the tearsheet with 3 images

  • [Tasks] - Added master task list

  • [Tasks] - Changed from tasks by section using details to a filter by the state of the task.

  • [Tasks] - PTaskListView: Added an alternate view to display tasks as cards in a flow layout, or display in a traditional grid layout. Filter for State, and removed the sections. Extracted TaskCard into its own class.

March 28, 2025

  • [Tasks] - TaskDialog: Improved the layout of TaskDialog so it is not just vertical, and has logical groupings of fields.

  • [Tasks] - PTaskLIstView: Added subtasks into the notes column, and allow to check off tasks in the grid

  • [Tasks] - PTaskLIstView: Added action column to control the tasks functions in the grid

  • [Tasks] - PTaskListView, TaskListView: Refactored standard column logic

  • [Tasks] - TaskListView: Added dynamic filters using Specifications API filter for project, state and assignee.

  • [Tasks] - Initialize TaskState for null states when the app boots up

  • [Tasks] - Save the users task view in the session and reload it when the view opens

  • [Tasks] - TaskListView: do not show archived projects

March 29, 2025

  • [Tearsheet] - TearsheetConfig: Added fields for specifications label and logo height/size. PrintTearsheetDialog: Added ability to configure these fields at runtime FooterPageEvent: Handle logo resizing TearsheetReport: Changed font to poppins light Fonts: Installed poppins light into the application and use it in tearsheet

  • [Tasks] - TaskNotificationService: Send tasks every 10 minutes instead of every minute to allow for the tasks email to batch together more tasks

March 30, 2025

  • [Tasks] - TaskView: New stand alone view to tasks

  • [Tasks] - TaskView: Added menubar with edit and subtasks

March 31, 2025

  • [Tasks] - Created a stand-alone view for a task -Added subtask display -added attachments and email notification -added comments and email notification

  • [Tasks] - Added images to Task with screenshots

  • [Tasks] - Added Due date to TaskView

  • [Tearsheet] - Added an additional price type for Total which is going to be the total plus sales tax and shipping

  • [Tasks] - TaskListView: Implemented FormLayout on filter to better accommodate small screen sizes

  • [Tasks] - TaskCard: Use TaskUtils standard display for Due Date/Date Range

  • [Tasks] - Changed getChildren() method to always sort by sequence

April 01, 2025

  • [Health] - Rolled out a HealthCheckController which I wac use in AWS to check the health of the app

April 02, 2025

  • [Web Clipper] - Changed to use encoded string of the image to upload the bytes into the app, instead of the Url, but keep old logic in place as well.

  • [Tasks] - Refactored TaskDialog and SubTaskListDialog into the task package

  • [Invoicing] - edit invoice detail. -Added flag to InvoiceDetail to indicate Taxable -Calculate tax based on this flag -Modified create invoice and deposit invoice to populate this flag in the invoice detail -Initialize the taxable field in LoadDatabase at app startup

  • [Credits] - Added the ability to issue a credit for sales tax only -modified invoice printout to reduce the balance due by the credit applied

  • [Invoicing] - Show balance due when there are credit applied

  • [Credits] - Started working on pushing credits into quickbooks

  • [Invoice] - Invoice Register: Added column for Balance due so it is reduced when there is a credit applied.

  • [Credits] - CreditDialog: Added ability to edit create name and note.

April 03, 2025

  • [Invoices] - InvoiceView: Added ability to edit invoice details

  • [Quickbooks] - QuickbooksSdkService: Removed the logic that adds credits applied as discounts because the integration was failing.

  • [Quickbooks] - QuickbooksView: Added Tax codes and Tax Rates for reference

  • [Quickbooks] - Credits: Worked on pushing credits to quickbooks

  • [Item] - PItemView: Changed the layout by organizing the pricing section in a more logical manner. Changed title to Financials instead of Pricing.

April 04, 2025

  • [Item] - PItemListView: Added the ability to drag and drop grid rows for items to resequence them

  • [Item] - PItemListView: Working hard on Item Card Layout to delight users.

  • [Item] - PItemListView: Created a new card view of the item list. -Added filters to the item list for both views for Search term (Name and location), and schedule

  • [Schedules] - Added option to print tearsheets from schedule

  • [Weekly Status Email] - Added error handling when generating the email

April 05, 2025

  • [Payment Providers] - Added Freedom Merchants as a payment provider through quickbooks -Modified Company entity to make PaymentProvider a Varchar instead of an Enum definition

  • [Freedom Merchants] - Added Freedom Merchants slug as a configurable attribute -PublicInvoiceView: Incorporated freedom merchants logic to redirect to their payment page -CompantView: Added options for Payment provider of freedom merchants and included the slug to build the url.

  • [Public Invoice] Refactored by moving into the invoices package. -Changed added box shadow to the panels on the layout

  • [Item List] ItemCardLayout: Added Schedule and converted Location and Schedule into Badges.

  • [Invoice] InvoiceView: Added ability to remove an item from an invoice -Added logging for an invoice upon removal of an item or deleting the entire invoice

April 06, 2025

  • [Items] Only display the first 25 positions of statusNotes in the card layout to prevent overflow -Creeated StringUtils helper method to truncate strings

  • [Invoices] Export invoices to excel

April 08, 2025

  • [Invoices] Created a dialog to add items to invoice, but decided not to implement. Keeping in source in case the requirement re-emerges

  • [Tasks] Created a task list report and allow to run it from TaskListView

April 09, 2025

  • [Email] Modified SesService to support sending emails with multiple attachments

  • [Proposals] Modified the send proposal function to optionally include tearsheets in the proposal email as a separate attachment -Modified Tearsheet report to try/catch display of the images in case there is an issue reading the bytes

  • [Payments] PPaymentListView: Added a column for QuickBooks payment ID

  • [Tasks] TaskListReport: Switched Task column width to 2

  • [Tasks] TaskListView: Added hyperlink to TaskView on the grid view. Cards already had it.

  • [Tasks] TaskListView: Added option to close or reopen tasks from the grid

  • [Activity] ActivityCleanupService: Implemented a new scheduled task that will run every monday at 3AM and will purge any activity data that is older than 60 days.

  • [Tearsheet] TearsheetDialog: added ability to save the tearsheet configuration without printing it

  • [Proposals] SendProposalDialog: Added ability to configure the tearsheet in the process of emailing the proposal

  • [Tearsheet] Added option to change the label for the price displayed on the Tearsheet. This was changed in TearsheetConfig, TearsheetDialog and TearsheetReport

  • [Payments] Added a new Payment list which shows all payments across all projects.

April 10, 2025

  • [Payments] Changed Quickbooks Payment retrieval to get all payments in the last 60 days to limit the amount of data returned.

  • [Payments] Order quickbooks payments by the last updated time descending so the most recently updated payments are first in the list

  • [Payments] Populate the quickbooks payment date into the blueprint payment date in the payment entity in blueprint

  • [Images] Pdf documents to convert webp images into jpg images for display in Pdf documents

  • [Images] Pdf documents to convert webp images into jpg images for display in Pdf documents -ItemSpecSheet changed to support WebP

April 11, 2025

  • [Item] PItemView: Conditioned the display of Credits and Invoices so that they are suppressed if there are no credits ot invoices for the item. PItemListView: removed unused imports

  • [Item] PItemView: Only display commission if commission is enabled

April 13, 2025

  • [Tasks] Created logic and prompt for a user to generate a Task list for a project using AI

  • [Tasks] After AI Generates the task list, refresh the screen

April 14, 2025

  • [Tasks] Added warning that tasks already exist when using AI to generate a new task list

  • [Tasks] Added start and due dates to help AI assign dates to the task list

April 15, 2025

  • [Items] Modified schedules to only show parent items, not all of the component items

April 16, 2025

  • [Bundles] rebranded composite items as bundles and added functionality -Create new bundle -Add to existing bundle -Remove item from bundle -ALl bundle financial fields are derived from the underlying componenets

  • [Bundles] Added vendor the the components grid in PItemView

April 17, 2025

  • [Tearsheet] Added ability to show Care Instructions and/or Custom Specs

  • [Other Costs] Init Other Costs in the database OtherCost entity, repo and Dialog to maintain OtherCosts for an item.

  • [Archive Items] Added ability to Archive items and drop them from the main item list and added a filter in case they still want to see or activate those items

April 18, 2025

  • [Reports] Sales Tax Liability Report

April 19, 2025

  • [Reports] Sales Tax Liability Report - break out by individual tax rates

  • [Proposal] Added a memo area where more details about the proposal can be provided

  • [Proposal] ProposalReport: Added memo to the footer of the proposal report

April 21, 2025

  • [Item List] Bundles: Changed verbiage when bundling items via multi select to say "Bundle" instead of "Group"

  • [Invoices] Invoice List: Added filters for date range and project. Added totals for subtotl, commission, shipping, sales tax, total, paid, due

  • [Invoices] Invoice List: set toolbar to setWidthFull() to fix horizontal scrolling. set min height of grid to 400px so it renders on mobile.

April 27, 2025

  • [Retainers] Building out retainers module

  • [Retainers] Download retainer as Pdf

  • [Retainers] Set payment date as now, and title to Retainer when creating new

  • [Payments] Allow null value for amount and null for Date [Retainer] send retainer through email

  • [Retainer] Autoselect price and quantity

  • [Retainer] Retainers and Credits list - added some UI improvements

  • [Retainer] Allow to delete a retainer as long as there are no paid payments against it

April 28, 2025

  • [Retainer] Pay retainer online through a stripe checkout session

  • [Startup] Company code changed default to CPY

  • [Startup] Added last retainer number to the company setup

  • [Retainer] Adjusted box shadow

  • [Retainer] Adjusted box shadow to small

  • [Retainer] Allow public access to retainer

  • [Retainer] Allow public access to retainer from the email that is sent

  • [Retainer] Reverted back to accepting payment against the retainer and not the payment schedule

  • [Retainer] Store transaction fee in the retainer when checkout session created. Subtract from the payment when processed. Update the fee into the final payment.

  • [Retainer] If retainer is paid, make the form read only.

  • [Retainer] Handle description in stripe checkout session

  • [Retainer]Status badge for a retainer

  • [Quickbooks] Added filter when searching for Quickbooks clients to make the link

April 29, 2025

  • [Proposals] Added the ability to collect payments against proposals up until the point the proposal has been invoiced.

  • [Retainers] Added columns to retainer view to show how much has been used and how much is available

  • [Proposal] Ability to pay a proposal with a retainer

  • [Invoice] Ability to pay an invoice with a retainer

  • [Purchase Orders] Added ability to generate purchase orders from the Proposal.

April 30, 2025

  • [State Entity] Added unique constraint on the state to prevent duplication by accident

  • [Data Import] Added function to import vendors and clients

  • [Data Import] initialize florida state as a tax code. Added logic to client import to try and figure out the tax code.

  • [Client List] Added address column

  • [Client List & Vendor List] added column borders since the data is getting more

  • [Client List & Vendor List] Added search filters to find data more easily

  • [Retainers] Import retainers from excel

  • [Retainers] Added list to display all retainers

  • [Retainers] removed box shadows on the retainer view

  • [Retainers] Added screenshots, images and attachments to the retainerview

  • [Retainers] Added logic to import purchase order headers

  • [Purchase Order Import] String the .0 from the Quickbooks document number

  • [Purchase Order Import] String the .0 from the houzz po number

May 01, 2025

  • [Projects] -Only list first 20 projects in side nav based on sequence -Added address attributes to the project file -Alternate avatar colors for the project

  • [Projects] Added filter to project list for name

  • [Projects] Line through if project is archived

  • [Projects] Handle null sequence in main layout when loading projects

  • [Purchase Orders] Generate purchase orders from the item list

  • [Purchase Orders] Updated PO Import

  • [Purchase Orders] added financial data to po list

  • [Purchase Orders] Added memo to purchase order view

  • [Purchase Orders] Show first 50 chars of memo on the po list

  • [Purchase Orders] Cleaned up PO List for project

  • [Item List] Fixed sorting by vendor in the item list

  • [Item List] Added Vendor filter to Item List

  • [Import Data] Option to import proposals

  • [Import Data] proposal import and display errors

  • [Import Data] Import Invoice headers

  • [Import Data] Log proposal error messages

  • [Import Data] more error logging

  • [Import Data] fixed excel import

  • [Import Data] handle saving invoice

  • [Import Data] set invoice kind when creating the invoice

  • [Import Data] Import items

  • [Import Data] Import items - fixed vendor name

  • [Import Data] Import items - added proposal, order and invoice mappings

  • [Import Data] Reformatting the proposal view for larger item client descriptions

  • [Proposal] Adjusting the grid view UI to be better looking

May 02, 2025

  • [Import Data] - modified import item data to handle importing the Url

  • [Import Data] - Added additional check for price to check for duplicate items

  • [Import Data] -removed validation on Item entity for price must not be negative

  • [Import Data] -fixed sorting on price column in item grid

  • [Import Data] Added quantity into duplicate check

  • [Import Data] Added shipping price, shippping cost and shpping markup percent to my domain model for the item and on the import

  • [Import Data] Sales tax rounding issue

  • [Import Data] calculate item sales tax and shipping sales tax separately before adding up and populating into total tax to prevent loss of precision

  • [Import Data] set sales tax from the client if missing or null

  • [Import Data] new import orders minimal mapping

May 03, 2025

  • [Import Data] Import retainers from new experience file and auto pay

  • [Import Data] Allow to import duplicated items from the tracker

May 04, 2025

  • [Import Data] Added logic to populate the invoide detail from the invoice if there is an invoice present in the tracker

  • [Import Data] Replaced invoice view with image renderer

  • [Import Data] Show column borders on InvoiceView

  • [Import Data] Started payments import and added time entries to main layout

  • [Proposals] Added Kpi headers to proposal list view

  • [Proposals] Added Kpi headers to proposal list view and PProposal List View

  • [Proposals] Added commission to Kpi header on the proposal lists

May 05, 2025

  • [Projects] Changed project list so that if running grid view, the images are not loaded to make it much faster in grid view mode

  • [Time Entry] Time entry by project instead of client

  • [Projects] Added drag and drop to project list (grid view)

  • [Orders] Added badge for order status in list

  • [Orders] Changed Proposal date heading to Date on proposal list view

  • [Invoices] Added Kpi Header to Invoice list inside the project and extracted KPI Card in both invoice lists

  • [Item] Added logic to calculate the sales tax on commission and add into the total sales tax for an item.

  • [Purchase Order] When adding items to an order, default to the vendor of the purchase order, but allow to remove it and search for all items

  • [Purchase Order]do not auto create columns in dialog when adding item

May 06, 2025

  • [Import Data]Mapping for old experience retainers

  • [Import Data]save retainer before creating payment

  • [Import Data] Updated to import purchase orders layout

  • [Import Data] Fixed the check on purchase order number

  • [Import Data] import old experience proposals

  • [Import Data] import old experience invoices

  • [Import Data] populate invoice kind on old experience invoice import

May 07, 2025

  • [Time Activities] Introduced a new time activity entity and maintenance programs

  • [Time Activities] Logic ti import time entries, associate with an invoice and create the invoice detail and create the Activity record if it doesnt exist.

  • [Time Activities] Added time entries to the import options

  • [Time Activities] Fixed issue parsing invoice number

  • [Time Activities] Convert HH:MM to decimals for database.

  • [Time Activities] Parse date correctly

  • [Import Data] Run the imports in their own thread

  • [Import Data] Return blanche as the default user if we could not find a user.

  • [Import Data] Added filters to the time entry list

  • [Time entries] Set filters to first day of month as default. Reorganized the columns in the grid.

  • [Time entries] Fixed title on header

  • [Time entries] sort activities combo by name

  • [Users] Added function to assign many projects to a user at once

  • [Notifications] Removed notification bell for clients

  • [Import Data] Old experience item import

May 08, 2025

  • [Purchase Order] When adding items to a purchase order,

  • [Purchase Order] When adding items to a purchase order, added location as a column

  • [Purchase Order] Sort on location when adding order

  • [Time] Added a tab for time to the project

May 09, 2025

  • [Invoice] Added the ability to add line items on the invoice directly to affect the balance

  • [Invoice] Invoice report to handle miscellaneous line items

  • [Images Area] Handle null values for getFullName of user

  • [Item] Added shipping cost to PItemView and ItemDialog

  • [Item] Added shipping cost to PItemListView

  • [Invoice] Removed cost details from grid [Item] Function to add item to library

  • [Item] Added ability to add items from the item library into a project

  • [Item] removed unused functions from main layout

  • [Item] Fixed a few things in ItemDialog related to reusing it for library items

  • [Proposal] In public view fixed the message to remot payment

  • [Proposal] Changed sending of the proposal for BGD to use the public proposal view

  • [Proposal] Allow to change an invoice detail if the invoice is not fully paid

  • [Images] Changed image renderer to return a empty span if the item is null

  • [Categories] Repurposed product types as categories

  • [Items] Increased the column width of the item in PItemListView

  • [Home] Fixed the timestamp the user logged in

  • [Proposals] On details, changed Invoice column to Documents and display the PO# also if there is a PO issued

  • [Proposals] Added column for Documents documents to purchase order view

  • [Proposals] Added a field to ItemDialog for Shipping markup, and calculate the shipping price based on the markup. In addition, if the shipping cost = 0 and the shipping price > 0, set the shipping cost to the equal the price.

  • [Purchase Order] Added purchase order status of ISSUED to the status enum for some old data that had issued in the database, so it doesnt throw an exception

  • [Item] ItemDialog: updated helper text on shipping fields

May 10, 2025

  • [Item] ItemDialog: Added purchase sales tax to the dialog for entry, and reorganized the fields in a more logical manner

  • [Item] ItemDialog: Added subtle headings to create separation and identification for each part of the financials section on the dialog

  • [Item] CompanyView: added a default shipping markup percent and populate into item

  • [Item] Item List: Added deposit percent to the grid

  • [Harvest] Started working on harvest integration. Built Harvest dialog and view, mapping for tasks.

  • [Import Data] Modified data import to find invoices by project and invoice since there are duplicates. Hopefully this will create the invoice headers for the missing invoices and not create any extra records

  • [Import Data] Added a function to fix the invoice for blanche where the details ended up under the wrong invoice header.

  • [Import Data] removed invoice fix program after fixing the data

May 12, 2025

  • [Harvest] Introduced a new mapping entity to setup mappings from one id to another for any type of integration. Modified user interface in Harvest to setup the mapping.

  • [Harvest] Working on time entry logic to import time entries from harvest into blueprint, and logging and error handling

  • [Harvest] default user and time entry. added field to track the user that performed the work.

  • [Time Entry] Added a filter for billable

  • [Time Entry] Changed breadcrumb by removing the projects link because it is misleading

  • [Time Entry] Added enums to InvoiceStatus for Draft and Sent, add unit to InvoiceDetail

  • [Time Entry] ADded unit to invoice detail and created startup routine to populate it for old invoices if missing

  • [Time Entry] Calculate the total time entry amount when saved, allow to edit the rate and hours and project, until it is invoiced then its read only.

  • [Time Entry] Changed default sorting of the grid to most recent first

  • [Quickbooks] Modified the payment processing from quickbooks to try for invoices statuses in an enum since I added additional invoice statuses.

May 13, 2025

  • [Time Entries] Added link to project time entries.

  • [Time Entries] Schedule harvest to run every night at 9PM

  • [Invoice] Added options to PublicInvoiceView to show the Fee associated with the transaction when paying through Stripe.

  • [Stripe] Added Credit card and ACH payment methods with different fees for processing the transactions. While an ACH is processing we flag the invoice as processing, and then poll the created CheckoutSession entity to see when an invocie is paid. Once paid we pay it, capture the subtotal, total and fee and mark the invoice as paid.

  • [Stripe]Changed stripe polling to check the company to see if stripe is setup as the payment provider

  • [Stripe] Updated reatiner payment processing to work with new Stripe payment flow

May 14, 2025

  • [Stripe] Code cleanup

  • [Stripe] Refactored Stripe Service -Introduced reusable CheckoutCard -Introduced a PaymentUtils class to retrieve transaction fees and calculate amounts.

  • [Invoices & Retainers]Refactored by pulling the company info out into a utility method to reuse in both places

  • [Invoices] Removing dead code

  • [Retainers] Added retainer status to the top right of the retainer so it indicates a payment is processing. Modified invoice and retainer to attempt to process the payment as soon as the checkout is complete so credit cards show as paid right away.

  • [Stripe] Changed processing to use enum for source (i.e.: retainer vs invoice) instead of a string.

  • [Proposal] Refactored company info on public proposal view

  • [Proposal] Cleanup dead code in public proposal view

  • [Proposal] Only allow one payment against a proposal online because I am not sure how to handle preventing the same payment from processing again.

  • [Stripe] Added error handling to Stripe connect methods

  • [Stripe] Created a dialog to connect to Stripe

May 15, 2025

  • [Stripe] Stripe onboarding work

  • [Data Migration] Added an option to backfill time entries into a selected invoice

  • [Data Migration] removing function to backfill time entries since I ran the option already.

  • [Data Migration] Created function to import payments for old experience

  • [Data Migration] Added date to payment detail for the date it was applied and changed import program to populate teh payment date and the detail date

  • [Stripe] added null checks in stripe view

  • [Payments] Created a payment detail dialog to see how a payment was applied

  • [Payments] fixed date column width

  • [Payments] Modified retainer payments to populate only the payment details for the applied payment. added a date into payment detail to capture the date applied, and changed the retainer subselect for Available to handle this

  • [Project] Default list view is now card

  • [Project] Filter out the payments for purchase orders on the payment list

May 16, 2025

  • [Invoice] Started working on adding items directly to an invoice

  • [Invoice] Add item as a product or a service

  • [Invoice] Removed deposit invoice functions from proposal

  • [Invoice] Adjusted invoice list to show name and number in the same column. Hide ref number when paying with retainer.

  • [Invoice] removed extra Hr() from Invoice Detail actions

  • [Proposal] During proposal creation, do not allow user to choose items that have already been invoiced, or are on another proposal.

  • [Item] Created a standard Specs column with just the general item specs and added to proposal list and item list

  • [Invoice] When an invoice is sent, update the status to sent as long as it is not paid or processing

  • [Invoice] PublicInvoiceView: Fixed width of payment toolbar

  • [Invoice] Save checkout session payment method with the enum name

  • [Invoice] Populate date into the paymentdetail when processing from stripe

  • [Invoice] Populate the payment name in pattern Stripe Invoice Payment

  • [Invoice] Fixed issue displaying the item description on the invoice

  • [Invoice] Added attachments and images to InvoiceView

  • [Invoice] Added a tooltip to the invoice status enum and implemented it.

  • [Invoice] Handle null value for date cell in invoice register

  • [Invoice] Added receipt # to payment lists

  • [Payment] Created a payment receipt Pdf document

  • [Purchase Order] POrderListView: Added filters for number and vendor

  • [Purchase Order] OrderListView: Added filters for number and vendor

  • [Purchase Order] Change default sort sequence to id descending

  • [Invoice] DetailedInvoiceRegister: Fixed the date column when date is null so it doesnt blow up

  • [Harvest] Respect the active flag

  • [Harvest] Created a routine that will create Activities in blueprint that match Harvest when starting up.

  • [Harvest] Allow to change the date in the date we pull in harvest entries

  • [Harvest] Created ability to invoice from the project time entry view

  • [Harvest] clear buttons on time entry filters

  • [Lists] Updated lists to include new list options

May 17, 2025

  • [Time Entries] Added KPI Totals to the header

  • [Time Entries] Fixed horizontal scrolling on mobile

  • [Time Entries] Trying date range picker on Time Entries

May 18, 2025

  • [Item] Changed bundle components to use the actual quantity field for the quantity and then use the component quantity field for the quantity needed per bundle

  • [Item] Added rounding to the logic that calculates the item cost and price for the bundle item

  • [Item] PItemListView: Save the last item kind searched on and pre-populate on enter

  • [Item] PItemView: Moved sales tax value in financials down to end so it hints at including commission

May 19, 2025

  • [Orders] Added a field to item in order to enter the vendors document number. Later, use this as a way to easily add those same items to the purchase order, and lastly, added vendorDocumentNumber to the purchase order header as well.

  • [Orders] Added filter for doc number to purchase order lists

  • [Orders] PurchaseOrderView: Switched the UI to show the header info as textfield in a form layout

  • [Proposal] ProposalView: added a field to display the total amount invoiced against the proposal and reduce the balance due by what has been invoiced so it cannot also be paid against the proposal.

  • [Proposal] ProposalView: Added invoice totals to proposal view, adjusted balance due to handle paid amounts and invoices that get applied.

  • [Proposal] PProposalListView: Changed the color of the invoiced card to teal.

  • [Quickbooks] Working on synchronizing the purchase order to Quickbooks

May 20, 2025

  • [Quickbooks] Sync to Quickbooks when email is sent or payment added.

  • [Quickbooks] Link the bill and the purchase order togteher

  • [Quickbooks] Update the expense account for the item before synchronizing the po or bill, so it uses the correct account mapping when creating the quickbooks transaction.

  • [Quickbooks] only update the expense account if it doesnt match

  • [Quickbooks] Map the quickbooks income and expense accounts upon item creation

  • [Quickbooks] Added a toggle to set teh Quickbooks sync to active or disabled

  • [Quickbooks] do not allow to delete a purchase order if there are payments against it.

  • [Payments] PayPurchaseOrderDialog: Switched to binder and added validation on amount and payment, and disable button on click top prevent double clicking during quickbooks sync

  • [Quickbooks] PurchaseOrderSync: Populate the customer reference into the purchase order and bill details.

May 21, 2025

  • [Square] Worked on square integration to work in the same way as Stripe with CheckoutSession entity and batch processing and real time processing.

  • [Square] Only run the square job one time per day as a cleanup job

  • [Square] null checks in square view and log the access token

  • [Quickbooks] Working on syncing retainer payments as sales receipts

  • [Quickbooks]Sales receipt sync for retainers. Added Retainer Item Id to Quickbooks setup.

  • [Quickbooks] Sales receipt for retainer payments

  • [Quickbooks] Added logging to OAUth for debugging

  • [Quickbooks] Proposal to Estimate Sync

May 22, 2025

  • [Quickbooks] Purchase order and Bill sync to use the new category based Blueprint items instead of summary lines for shipping and sales tax

  • [Quickbooks] Added link on proposal to see estimate in Quickbooks

  • [Quickbooks] Deposits made against a proposal will create a sales receipt to a Deposit liability account and then will add a credit to the estimate, but this does fail if its a 100% deposit.

  • [Invoice] Modified logic to create deposit and final invoice to use the deposi percent required in order to pro-rate the quantity for the subtotal and the rest of the dollar amounts

  • [Invoice] Handled partial billing in regard to purchase sales tax

  • [Quickbooks] Implemented Client sync to quickbooks customer

  • [Quickbooks] Disabled the auto sync to QBO with customers

  • [Quickbooks] Deactivate customer in QB if deleted in Blueprint if they are tied together

  • [Quickbooks] Created option to sync vendor to quickbooks

  • [Quickbooks]delete quickbooks vendor when bp vendor deleted.

  • [Quickbooks] Retainer payments changed to use an ie assigned to category BP_DEPOSITS and generate a unique item per payment

May 23, 2025

  • [Ledger] Introduced a new LedgerEntry entity to track client balances

  • [Ledger] Updated system to use ledger instead of payment details -Invoice amount paid calcualted from ledger -Retainer amount used calcualted from ledger -$0 payment made when paying an invoice with a retainer -Pay retainer and pay invoice dialogs updated to honor the ledger -Delete payments to honor the ledger

  • [Ledger] Started a function to generate ledger entries based system activity for the old way using payment details

  • [Ledger] Logic to populate the ledger when an invoice is paid for with a Proposal deposit

  • [Invoice] When paying an invoice allow them to enter the reference number since now we are creating a proper $0 payment when using a retainer for payment

  • [Invoice] Changed Ledger enum to INVOICE_PAID when an invoice is paid

  • [Invoice]Adjusted enums for ledger entry, added validation to deleting a payment, fixed deposit application when creating an invoice to have double sided entry (Pay the invoice, and pay the deposit)

May 24, 2025

  • [Payment] Added a method to translate payment type to a Quickbooks name

  • [Payment] Changed the whole retainer and deposit application logic to directly apply the credit to the invoice, instead of relying on the Ledger entry. This greatly simplifies everyting. Im storing the usedPayment in the invoice detail (credit) that was created as a result of the retainer or deposit application.

  • [Quickbooks] Working on Quickbooks sync with credit lines on an invoice

  • [Payments] Fixed bug when applying a retainer to an invoice

May 25, 2025

  • [Proposals] PProposalListView: Changed default sort order to display most recent at the top.

  • [Quickbooks] Added logic to remove apostrophes from Item names so they dont fail when querying for Quickbooks

  • [Quickbooks] Invoice sync and some UI changes to the invoice

  • [Quickbooks] Handle credits for deposits on teh invoice

  • [Quickbooks] Added a function to link the quickbooks vendor and the Blueprint vendor

  • [Quickbooks] Added a function to automatically link the quickbooks vendor and the blueprint vendor based on an exact name match

  • [Vendor] Added account number for Vendor Dialog

  • [Quickbooks] Added pagination to get all accounts in the chart of accounts.

May 26, 2025

  • [Quickbooks] Changed hte logic of the system to link quickbooks items to the item in blueprint -Generate an item when a pre-payment is taken, so it can be used on the invoice as a negative line

  • [Quickbooks] Added ability to add a new item to an invoice

May 27, 2025

  • [Quickbooks] Added columns to iem display in QB View

  • [Quickbooks] Adjusted integration for retainers and deposits to use a standard item to book the sales receipts into and also the credit applied to the invoice

  • [Quickbooks]Removed credit item associated to the Item since we are not using anymore

  • [Invoice] Do not allow to edit prepayment credit lines

  • [Proposal] Fixed null pointer when displaying the proposal.

  • [Proposal] Fixed pay invoice dialog to use the date entered by the user

  • [Invoice] Fixed to allow payment meta data to be edited

  • [Quickbooks] Allow to sync a one off invoice payment to quickbooks in the event a invoice was created before the go live date, but we need to sync a payment that was added after

  • [Clients] Refresh the clients grid after the client is sync'd to Quickbooks

  • [Invoice] Added date of work performed to various invoice displays

  • [Invoice] Added description to public invoice

  • [Time Entries] Time entries that have already been invoiced will be skipped during billing even if selected

  • [Time Entries] Display a warning about the amount to be invoiced when generating time invoices

  • [Time Entries] Harvest scheduler added logging to make sure its running

  • [Time Entries] Added a filter to filter on the invoice status of a time entry

May 28, 2025

  • [Stripe] Changed the stripe scheduled job to run Every hour from 8 AM to 6 PM, Monday–Friday

  • [Project] Reduced spacing in AbstractProjectView

  • [Quickbooks] Created a process to queue Quickbooks sync tasks so they run in the background instead of online

  • Added Export to Excel button for Orders tab

  • [Invoice] Disable void invoice if connected to Quickbooks since we dont know if it works.

  • [Quickbooks] Added logic to check if QB is connected and if the date is set and it is active before processing any SyncJobs

  • Added Export to Excel Button for Orders

  • [Quickbooks] Queue quickbooks sync when po header is edited

  • [Quickbooks] Added logic to Harvest Integration to use a rate table to find the correct rates in a hierarchy

  • [Quickbooks] Added a reserved item for time billing pointing to the account they need.

  • [Quickbooks] Added field for rate source for a time entry to giv an idea if it came from Harvest of an override

May 29, 2025

  • [Harvest] Cleaned up logs Stripe: Cleaned up logging and omit expired checkout sessions

  • [Quickbooks] Throw exception when creating an invoice for a time billing when there is no time billing item setup

  • [Quickbooks] When a purchase order is deleted in blueprint, also delete the purchase order in quickbooks

  • [Invoice] Sort invoices by the date created descending so most recent at the top

  • [Invoice] Sort invoice sub list by the date created descending so most recent at the top

  • Merge remote-tracking branch 'origin/main'

  • Created TimeEntryExportService

  • [Settings] Reverted application.properties to before dylan's commit state

  • [Rate List] try/catch the setting of the project in the combo

  • [Excel Exports] PTimeEntryListView, TimeEntryExportService, TimeEntryListView: added excel export buttons

  • [Quickbooks] Added ability to create a time activity item on the fly or look it up when creating a Time invoice

  • [Rates] Fixed sorting on user column in Rate List

  • [Quickbooks] Added a new enum to control Sync mode for Invoice payments. the options are PULL or PUSH

  • [Quickbooks] Modified the sync of invoice payments to respect the push/pull flag in the quickbooks configuration

  • [Quickbooks] Display error message if saving quickbooks fails

  • [Excel] Item export to excel allow for a null project

May 30, 2025

  • [Time Entries] TimeEntryReport: Created time entry report with 4 versions. Flat, Project, User, Date.

  • [Time Entries] TimeEntryReport: Adjusted column widths

  • [Proposal] ProposalView: Added null check when displaying approval date

  • [Harvest] HarvestService: Cleaned up logging

  • [Side Menu] Reduced spacing between items, reduced font size, added hover effect on the links and animation on expansion of the menu

  • [Excel Exports] Added RateExportService, Added submenu to OrderListView and POrderListView to be able to export order items, added excel icon beside exports in OrderListView and POrderListView

  • [Excel Service] Changed project name line so that null can be passed

  • [Quickbooks] QuickbooksSdkService refactoring

  • [Quickbooks] Store a queued At field in SyncJob so we can know when this record was originally set to queue, and display the duration since it was queued in the SyncStatusBadge

  • [Quickbooks] Changed QBO Categories to Lower case

May 31, 2025

  • [Quickbooks] Changed Quickbooks sync to reuse existing items by name and category. Refactored some methods to make logic easier to read. Modified delete function to delete the Quickbooks invoice if it exists. Mapped Activity for time billing to a new item using the same lookup logic for the clean name.

  • [Quickbooks] Changed sync'd to synced on invoice view

  • [Quickbooks] Updated quickbooks invoice document number logic to follow the rules in the Quickbooks setup

  • [Quickbooks] Delete Quickbooks purchase order in deletePurchaseOrder service method

  • [Quickbooks] Adjusted sync status badge to display the last sync in the timezone of the company

  • [Purchase Order] PurchaseOrderView: Moved into orders package

  • [Stripe] PublicInvoiceView: Modified Stripe to attempt to process the payment right away if complete and paid.

  • [Stripe] Fixed issue in stripe service where polling will not get statuses = null.

  • [Stripe] PublicInvoiceView: Update teh payment status right

  • [Stripe] Removed query on expired because im having trouble with it

  • [Invoice] Fixed so paid gets value from InvoiceDetail

June 01, 2025

  • [Quickbooks] Added debugging to item creation

  • [Quickbooks] added try/catch when syncing the client and throw Quickbooks Exception if fails

June 02, 2025

  • [Quickbooks] Added button to InvoiceView to sync Quickbooks immediately

  • [Quickbooks] QuickbooksView: Changed so that the Purchases do not load when the page opens

  • [Quickbooks] QuickbooksView: Changed so that the Purchases do not load when the page opens -do not load payments until refresh pressed

  • [Invoice] InvoiceView: Added transaction fee to the invoice payment grid

  • [Excel Exports] Cleaned up TimeEntryListView by adding submenus, added a header for Order # in ExcelService

  • [Payment] Payment: Changed applied amount entity to use the paymetn details instead of the Ledger

  • [Excel Exports] Fixed formatting issues in TimeEntryListView, Added export to excel logic for ClientListView and VendorListView

  • [Credits] Allowed for partial credits to be created by creating the whole credit, but then allowing the user to adjust the quantity and price.

  • [Invoice] Round the subtotal when working with hours and rates

  • [Invoice] InvoiceView: Changed so the grid does not do a complete refresh when an item is edited, and instead just refreshes the specific row.

  • [Payments] PayInvoiceDialog: Display the retainer number when a retainer is applied to an invoice

  • [Invoice] InvoiceDetailListView: Select the line item when edit an invoice detail

June 03, 2025

  • [Quickbooks] QuickbooksSdkService: Handled null values for Due Date

  • [Excel Exports] Added Excel Functionality to InvoiceListView, VendorListView, PaymentListView, ProposalListView, RetainerListView- Added methods for Excel exports in UIUtils

  • [Payments] Changed the whole deposit and retainer system to use credit_applications as the source of where all credit are applied, including retainers and deposits

  • [Invoices] PInvoiceListView: Moved Credits applied column before balance due

  • [Invoices] PInvoiceListView: Increased width of Invoice column

  • [Invoices] PayInvoiceDialog: Handled applying the deposit on the proposal against the invoice when created.

  • [Payments] Added validation when deleting a payment if it has applications against it.

June 04, 2025

  • [Invoice] When a payment is added to an invoice, there is no need to refresh the grid. This improves response time.

  • [Client] Removed rate from ClientDialog since we are not using this at this level

  • [Invoice] PInvoiceListView: Highlight negative balance due in red and positive in green.

  • [Invoice] InvoiceListView: Highlight negative balance due in red and positive in green.

  • [Invoice] InvoiceListView: Added sorting on all the dollar values, and added Paid and credit applied columns

  • [Project] DataService:Sort project by name as default sort sequence

  • [Invoice] InvoiceView: added option to create a new product or service instead of just an item.

  • [Invoice] CreateInvoiceDialog & CreateDepositInvoiceDialog: Round the sales tax to 2 decimal places when creating the invoice

  • [Stripe] Modified Stripe so that it will always create a payment record when a checkout session is in complete status, and then update it when it has been completed.

  • [Stripe] Payment default status = COMPLETE and RetainerView added column for Payment Status to indicate if it is processing.

  • [Payment] PaymentNotificationService: Added Status to the email notification

  • [Payment] Added payment name to the email

  • [Payment] Dont sync payment to qbo if still processing

  • [Stripe] Queue quickbooks sync if the payment was processed completely

  • [Stripe] Changed stripe to always initially create the payment as PROCESSING, and then check to see if paid and flip it to PAID. This prevents constant updates of the Payment entity each time the job runs

  • [Quickbooks] QuickbooksSdkService: Changed the QB Sync so that payments that are still processing will not sync to Quickbooks

  • [Stripe] Added payment notification email into the Stripe processing

  • [Stripe] extracted the logic to get the payment method into its own method

  • [Stripe] from all public views, attempt to process the checkout session right away, so it will get flagged as paid when payment is complete

  • [Stripe] Set the payment status to the real payment status on the initial processing so when it is a credit card payment, it will report correctly in the email

  • [Stripe] Allow documents to process even if they are paid, since now with teh new method, they will always be paid when the session is complete, so we need to let it process so we can update the status to COMPLETE

June 05, 2025

  • [Attachments] Added more EntityTypes to help with Add Attachment Dialog

  • [Comments] Created the ability to add attachments to a comment to streamline the number of emails being sent.

  • [Quickbooks] Added flag and logic to control of were charging shipping in quickbooks by adding a line item for each shipping charge item or if were using the reserved quickbooks shipping_item_id logic

  • [Quickbooks] When syncing the vendor, if we dont have a matching if reference, try to find the vendor by name, if it exists link it, otherwise move to create the new vendor

  • [Quickbooks] Remove single quotes from the vendor name before pushing to quickbooks

June 06, 2025

  • [Quickbooks] QuicbooksDialog: Added option to summarize the shipping amount on the invoice footer

  • [Quickbooks] QuicbooksSdkService: Sync the customer bill to information on the Quickbooks Invoice

  • [Quickbooks] QuicbooksSdkService: Sync invoice logic to include Ship to, Bill to and ship from address

  • [Mapping] Switched type to an enum and updated for Quickbooks and Harvest. Changed TimeEntry to allow null values. Added mapping function right from TimeEntryListView

  • [Harvest] Added ability to link a project to harves from the Time Entry screen when the project is not linked. Also it will assign any missing projects based on this.

  • [Excel Exports] updated ClientExportService, InvoiceExportService, PaymentExportService, ProposalExportService, RetainerExportService, VendorExportService, InvoiceView, UIUtils Added InvoiceDetailExcelService

  • [Time Entries] TimeEntryListView: Cleaned up the UI, consolidated all actions into one Actions menu except for the Invoice option

  • [Time Entries] TimeEntryListView: Increased the width of the project column

  • [MainLayout] Moved Clients and Vendors higher up the list in the settings menu

  • [Time Entries] TimeEntryListView: Only show first 50 characters of description

  • [Retainers] RetainerListView: Changed retainers to have a scrollable grid

June 09, 2025

  • [Time Billing] Created a summary page for Time Billing where useds can easily see whats pending billing and drill into each to create invoices

  • [Time Entries] Round the amount that is calculated in the pre_save routine to 2 decimal places

  • [Harvest] HarvestLinkProjectDialog: Do not allow to link if the harvest project Id is null

  • [Items] ExcelService: Fixed item export to excel to handle null value for purchase order

  • [Harvest Imports] Added HarvestImportDialog for Harvest Imports to HarvestView, TimeEntryListView, and TimeBillingView [TimeBillingView] Added Actions Dropdown Menu

  • [Items] PDF Export options

  • [Items] Ssanitized excel project name

June 10, 2025

  • [TimeEntry] Round hours to 2 decimapl places to prevent floating point rounding issues

  • [TimeEntry] TimeEntryListView: save the last used date range in the session and populate when the user goes into the page

  • [Item Excel] Changed the export to excel to omit images since im getting a out of memory error

  • [Item Excel] Added option to export to excel with or without images

  • [Item Excel] Added emojis to the export options in PItemListView

  • [Item Excel] Added commission to item excel export

  • [Item Excel] Added invoiced total and invoiced quantity

  • [ItemReport] Trying to write directly to a file instead of a byte[] to reduce memory overhead.

  • [Cleanup] Created a scheduled task that will cleanup the pdf files created into the temp folder directory

  • [Startup] Do not process checkout sessions in LoadDatabase because an error was caused due to EntityType.invoice

  • [Item] ExcelService: Do not auto-resize columns when displaying images because this can take up a lot of memory

  • [Storage] StorageService: Changed to handle storing the content type with the uploaded file in aws s3. Also changed ImagesArea and AttachmentsArea to pass the mime type in.

  • [Item] ExcelService:Reduce the quality of the image when adding into an excel sheet to avoid out of memory issues.

  • [Quickbooks] Setup the job scheduler to run the Quickbooks import payments if PULL mode

June 11, 2025

  • [Time Billing] CreateTimeInvoiceDialog: Changed Date to be the first column

  • [Harvest] Changed harvest to update time entries if the hours have changed. Changed HarvestTimeEntryDTO to use BigDecimal for hours. Changed TimeEntryListView to display total hours as decimals instead of HH:MM

  • [Harvest] HarvestService: Added ability to import time entries from the last updated date SchedulerService: Import from harvest using updated date going back 2 days HarvestImportDialog: Continue to use the spent date to import entries [Quickbooks] SchedulerService: Added scheduled task to import payments from Quickbooks if using PULL mode and create the payment and apply it

  • [Quickbooks] Modified import payments to only work if ull mode, and modified delete payment to only delete from Quickbooks if using PUSH mode

  • [Quickbooks] Run payment pull daily at 10PM

  • [Payments] Added transaction fee to PaymentListView

June 12, 2025

  • [Payments] Added edit payment to actions menu on PurchaseOrderView

  • [Payments] PaymentDialog: Added ability to edit the payment name

  • [Orders] OrderListView: Added emojis to expot options, and added ability to export purchase order items to excel with images or without images

  • [Excel Exports] Added MU %, Notes, Vendor Desc., Shipping Cost, Shipping MU %, Vendor Sales Tax to ExcelService for Items Added Transaction Fee to PaymentExportService

  • [Payments] CompanyView: Added option to indicate flat vs percentage fee for ACH Bank Transfer Payments CheckoutCard: Moved all calculation logic into the Card itself to centralize the logic and make it easier to re-use the component Modified Retainer, Invoice and Proposal to use the new logic

  • [Quickbooks] QuickbooksSdkService: When syncing the invoice, during the building of the shipping line, the expense account was being populated with the income account, so sales tax calcuation was failing

  • [Quickbooks] QuickbooksSdkService: Added logic to create a sales receipt for the transaction fee that nets to zero, but havent yet implemented.

  • [Quickbooks] QuickbooksSdkService: Implemented logic to create sales receipts for transaction fees

June 13, 2025

  • [Quickbooks] QuickbooksSdkService: Use rounded shipping when pushing shipping line items

  • [Quickbooks] QuickbooksSdkService: Log invoice payload

  • [Quickbooks] QuickbooksSdkService: Added logic so that if an invoice payment was pulled from quickbooks, it will not push the payment from blueprint

  • [Payments] PaymentNotificationService:added reference information and switched to thymeleaf template

  • [Quickbooks] QuickbooksSdkService: use the sanitized name to create new items

  • [Stripe] StripeService: Updated polling of the checkout sessions to only create the payment_detail records when the payment is processed, not on subsequent polling

  • [Payments] Added payment status to Invoice, proposal and retainer view

  • [Quickbooks] SANITIZE ITEM NAME IN ANOTHER PLACE

June 14, 2025

  • [Invoice] InvoiceView: Added total before tax to the display

  • [Project] Project, ProjectDialog: Added tax code to project level to support one client with projects in multiple tax jurisdictions

  • [Sales Tax] Created a recalculation routine to loop through the invoice details and calculate the sales tax based on the tax code on the invoice or the project

  • [Sales Tax] Round to 2 decimal places for each jurisdiction

June 16, 2025

  • [Sales Tax] Added a function to recalculate sales tax on an invoice

  • [Sales Tax] Changed percent in InvoiceDetailTax to 5,4 precision

  • [Sales Tax] Populate the name of the invoice detail for reference

  • [Sales Tax] Added a dialog which displays the invoice detail sales tax breakdown for a invoice detail

  • [Heap] Increased Heap size as follows "-Xms512m -Xmx1024m"

  • [Heap] Log the max heap size when application starts up

  • [Heap] Updated procfile to make the java max heap bigger

June 17, 2025

  • [Sales Tax] Hide commission on tax breakdown dialog if not active

  • [Sales Tax] Added BillingService dependency to all the places that call CreateInvoiceDialog

  • [Sales Tax] Call calculateSalesTax from CreateInvoiceDialog

  • [Sales Tax] Call calculateSalesTax from CreateDepositInvoiceDialog

  • [Sales Tax] Modified Liability report to show a one row summary per jurisdiction

  • [Sales Tax] Modified Liability report to include a date range picker

  • [Sales Tax] Added totals to sales tax liability report

  • [Project] Added the project size in square feet to the project entity and dialog

June 18, 2025

  • [Project] Split TaxJurisdictionSummary into its own class

  • [NavigationBar] Added navigation bar to move fron one Invoice to another

  • [NavigationBar] Added navigation bar to move fron one InvoiceListView

  • [NavigationBar] Added to ProposalView, and implemented through ProposalListView and PProposalListView

  • [NavigationBar] Added to PItemView, and implemented through PItemListView

  • [NavigationBar] Added to PurchaseOrderView, and implemented through POrderListView and OrderListView

  • [NavigationBar] Added to RetainerView, and implemented through CreditListView and RetainerListView

  • [Payment] Added stand along PaymentView, and called from the two paymente lists with NavigationBar

June 19, 2025

  • [Invoice] Public Invoice View, handle null Due Date Value

  • [Invoice] DataService: Modified save invoice method to try and find the best available TaxCode and Term for the invoice, handling null values along the way.

  • [Quickbooks] QuickbooksSdkService: Added logging to initialize routine.

  • [Invoice] DataService: Delete Invoice method changed to delete invoice detail tax lines before deleting the rest of the data

  • [Proposal] ProposalListView:Changed sort sequence to show most recently created proposals first

  • [Quickbooks] QuickbooksSdkService: Added logging to createBasicItem logic

  • [Quickbooks] QuickbooksSdkService: Introduced QuickbooksEnum for standard categories and items

  • [Quickbooks] QuickbooksSdkService: Transaction fee set the income and expense accounts for the Transaction item

  • [Quickbooks] QuickbooksSdkService: Transaction fee updated memo

  • [Quickbooks] QuickbooksSdkService: Added a smart document number for the sales receipt created for transaction fees.

  • [Quickbooks] ProposalView: Added links to view Transaction Fee in QBO

  • [Quickbooks] QuickbooksSdkService: sync retainer paymetn doc number as PY-paymentId

  • [Stripe] StripeService: REomved duplicate call to notify employees

  • [Proposal] ProposalListView: Added proposal status badge to the grid

  • [Proposal] ProposalListView: removed invoice # from the grid since there can be multiple

  • [Proposal] ProposalListView: added critical columns to the list

June 20, 2025

  • [Credits] Added CreditListView

  • [Excel Exports] Tax Services

June 21, 2025

  • [Sales Tax] Modified Billing service calculate sales tax to adjust for drift when comparing header level sales tax to detail

  • [Quickbooks] Removed old logic to send invoice to Quickbooks and replaced with the sync logic

  • [Invoice] Removed header level menu option to Issue and apply a credit

  • [Invoice] Queue quickbooks sync when a credit is applied to an invoice

  • [Quickbooks] Sync credits to quickbooks

June 23, 2025

  • [Excel Exports] Fixed Format issues with TaxDetailExportService, SalesTaxExportService, and ProposalExportService

  • [Financials] Added Credit Pie Chart to PFinancials

  • [Credit] Updated appliedAmount formula

  • [Quickbooks] Calculate sales tax on credits.

  • [Quickbooks] Added utility method to get the credit memo url

  • [Quickbooks] Added utility method to get the credit memo url and display in credit view

June 24, 2025

  • [SyncJob] Added a repo method to retrieve all sync jobs by integration and implemented in DataService

  • [Quickbooks Dashboard] Created a view to be able to access quickbooks sync jobs

June 25, 2025

  • [Invoice] Added a field to the Invoice entity to store the Quickbooks Credit Payment Id used for Credit applications

  • [Invoice] InvoiceView: Added protection against null return value from Quickbooks API when retrieving the invoice. Added logic to queue the qyuckbooks sync when a credit application is added or deleted. QuickbooksSdkService: Added logic to push credit applications to Quickbooks that were applied in Blueprint to reduce the balance owed on an invoice.

  • [Invoice] InvoiceView: Added a link on InvoiceView to view the $0 Credit payment pushed to Quickbooks

  • [Invoice] QuickbooksSdkService: Added a method to retrieve the Payment URL for the $0 payment pushed to Quickbooks for Credit Applications

  • [Invoice] QuickbooksSdkService: Modified so that we only push the credit applications for credit applications created from actual credits

  • [Stripe] StripeService: Modified the reference number used in the payment to reference the corresponding document #.

  • [Quickbooks] QuickbooksSdkService: Improved error logging when trying findOrCreateItem()

  • [Quickbooks] QuickbooksSdkService: Call initialize() before running the sync jobs

  • [Quickbooks] QuickbooksSdkService: Adding defensive checks for credit applications

  • [Quickbooks] QuickbooksSdkService: Store project in the credit application when making a payment

  • [Quickbooks Dashboard] Added Entity link and status badge

  • [Quickbooks Dashboard] Added Settings Button for QuickBooks Dialog

  • [Quickbooks Dashboard] Adjusted column widths

  • [Quickbooks] QuickbooksSdkService: Modified Credit paymnt to always delete and then re-push a fresh credit payment when the invoice is synced

  • [Quickbooks] QuickbooksSdkService: When using a shipping in the footer, try to set the item as NON taxable so it doesnt double the shipping sales tax

June 26, 2025

  • [Quickbooks] QuickbooksSdkService: Started working on logic that will push a retainer to Quckbooks as an invoice that impacts liability so it can be paid through Quickbooks/Freedom merchants

  • [Quickbooks] QuickbooksSdkService: Added retainer item to Quickbooks Enum

  • [Quickbooks] SyncStatusBadge: Modified so the update method is public and I can directly call to update the UI right after an action

June 27, 2025

  • [Quickbooks] Retainers: added an option to be able to send retainers to quickbooks as invoices and collect payment through quickbooks.Added fields to Retainer entity and created new repository methods and DataService layer methods to support this. PublicRetainerView: Modified to support payment provide freedom merchants

  • [Proposals] UIUtils: tolerance to .01 for rounding discrepancies due to sales tax drift calculations on final invoice. this is so when the total invoiced is within .01 it will still show as Invoiced

  • [Retainer] RetainerView: Updated retainer view. Added available and used to the totals section. Added grid to display the invoices the retainer has been applied to. Consolidated all options under Actions menu to make the UI cleaner

  • [Document List] PDocumentListSubView:Worked on a consolidated view of all financial documents in a project in an effort to organize the Project view UI.

  • [Document List] PView, PDocumentListSubView: Added financial documents to the end of PView so i can get the code committed without impacting users

  • [Project] PView: Added an action menu with all options under it to clean up the UI. Added a true breadcrumb like the other pages to be consistent

  • [Retainers] Fixed breadcrumb

  • [Project] Modified ProjectListView to use a Specification to query the projects, and included the client name as part of the filter text

  • [Import Items] Added Ability to import excel items inside PItemListView (Needs work so that vendor and price are populated)

June 29, 2025

  • [Search] Started building a global search dialog and service to search the entire system

June 30, 2025

  • [Search] Added date to the search dialog. Added ability to search numbers also for proposal, invoices and purchase orders

July 01, 2025

  • [Payments] Added transaction fees expense to the payment entity from the stripe feed, and also updated the grids to show both, and the dialog to allow editing the fee amounts.

  • [Stripe] Updated Stripe to populate the transaction fee expense into the payment after completion.

  • [Quickbooks] Modified the feed for retainer payments to add lines to the sales receipt for the income and expense of the transaction fee, and removed the additional transaction feel sales receipt that was being created.

  • [Payment] Modified PaymentListView and PPaymentLIstView to include one column for the referring document number

  • [Payment] Modified PaymentListView and PPaymentLIstView to increase width of document column

  • [Search] SearchService: Modified to find retainers by number

  • [Payment] PaymentDialog: Working on issue where dialog wont open because we are setting the value of a combobox with a value when the box is not populated.

  • [Quickbooks] QuickbooksSdkService: Modified syncProposalPayment to add the fee charge and expense to the sales receipt so it can be matched to a bank deposit

  • [Quickbooks] QuickbooksSdkService: Modified syncProposalPayment so populate the doc number of the sales receipt with the proposal number

  • [Quickbooks] QuickbooksSdkService: Modified invoice sync to send a sales receipt for the transacion fee price and cost so it nets out to the difference on the deposit for matching

  • [Quickbooks] Payments: Modified payment lists to include a link to any associated quickbooks transactions

  • [Payments] Grids on Invoice, Proposal and Retainer. Added a utility column which displays the ID and a link to get the the payment details, the name underneath

  • [Quickbooks] QuickbooksSdkService: Modified invoice sync so if the price is null it will send zero.

July 02, 2025

  • [Search] SearchDialog: Updated css to work with standard colors so it will work in dark or light mode

  • [Excel Import] Added Item Import from Excel functionality

  • [Excel Import] added accepted titles text to top of ImportItemsView

  • [Vendor & Client View]

  • [Item Exports to Excel] Fixed commissionCell placement and value

  • [PView] Extracted Client Ribbon into its own UI component

  • [Billing] Time Billing: Created a new method that will generate a list of InvoiceDetail entities summarized by name, price and performed by

July 03, 2025

  • [Invoice] InvoiceView: Added total quantity only for Time Invoices

  • [Harvest] Added a flag in harvest to control if we are using the rate lookup table or not. if we are, then we always use it and populate null in cases where there is no rate established

  • [PurchaseOrder] Adjusted purchase order view to display linked documents with a hyphen

  • [Proposal] ProposalView: Adjusted view to display linked documents with a hyphen

  • [Client] ClientView: Started building out a consolidated client view.

  • [Client] ClientView: Added KPIs to client view

  • [Harvest] When importing time entries auto create the activities so there is no mapping needed.

  • [Invoice] PublicInvoiceView: Only fetch the summary list when it is a time invoice.

  • [Quickbooks] QuickbooksSdkService: Get a fresh invoice from he database before updating the Quickbooks invoice ID into it.

  • [Vendor View] Added Order grid, Payments grid, and kpi cards to Vendor View

July 04, 2025

  • [Invoice] PublicInvoiceView: Invoice should still show as open if there is a balance applied.

  • [Invoice] PublicInvoiceView: Changed Payment heading to Payment Received

July 07, 2025

  • [Invoice] InvoiceExportService: Changed column headings to Invoice # and Invoice Name

  • [Invoice] InvoiceExportService: Removed Didcount since we dont use it

  • [Invoice] InvoiceListView: Updated the project session to use only the project selected from that screen instead of a project selected from other screens. Switched the from/to date to a date range picker

  • [Invoice] BillingService: Adding protections against null big decimals

  • [Invoice] InvoiceExportService: Added column for Tax Code with percent formatted into the description -Added columns for taxable subtotal, shipping, commission and taxable total.

  • [Invoice] InvoiceExportService: Moved proposal column out of the middle of all the financials

  • [Invoice] InvoiceExportService: Added headers to the excel export t0 show the sate range selected and the report name

  • [Invoice] InvoiceListView: Removed non-taxable and replaced taxable amount with the new taxable total field

  • [CustomDateRangePicker] Introduced a new component that allows user to control pre-set date range selections. InvoiceListView: Added CustomDateRangePicker

  • [Sales Tax Liability Report] Replaced EnhancedDateRangePicker with CustomDateRangePicker

  • [Sales Tax BillingService: Modified to always populate sales tax detail entity even when the items are not taxable

  • Fixed bug in CustomDateRangePicker

  • [Invoice] InvoiceDetail: created a method getTotalBeforeTax

  • [Invoice] Sales Tax Liability Report: Export to excel in detail. Changed the export to better calculate the taxable amount by looking at the taxable flag in the invoice detail

  • [No Results] InvoiceListView, SalesTaxLiabilityView: Added a Span to let the user know there are no results to the given timeframe

July 08, 2025

  • [Sales Tax] ItemDialog: Changed the on screen calculation to include commission in the calculation of the total tax

  • [Quickbooks] QuickbooksSdkService:Modified payment pull from QBO to store QBO in the payment name instead of Quickbooks

  • [Payments] UIUtils: Adjusted paymetn status column badge to use a smaller font

  • [Payments] PaymentMethod: Added emojis for the payment method

  • [Payments] PaymentListView: Adjusted the columns, added emoji for payment method. Added KPIs to the top.

  • [Vendor View] Added router links around the system for vendors, tidied up VendorView

  • [Date Range Picker] Added a focus() method

  • [Reports] TransactionsReportView: Created a new view to run any transaction report to excel.

  • [Item] PItemListView: Added logic that will recalculate sales tax for all selected items.

  • [Item] ExcelService: Added parent to the excel export for items

  • [Item] ExcelService: Added parent to the excel export for items and fetch the data if present since its lazy

  • [Item] Sales Tax: Modified logic to globally recalculate sales tax so it will recalculate the component items of a bundle before recalculating the parent

  • [Item] Item: Added a method to item entity that returns the total before tax. ExcelService: Added columns for Total before tax, tax code, tax rate for easy reconciliation.

  • [Item] Item: Added a method to item entity that returns the total taxable amount for an item. In the item excel, if the item is a bundle, sum the components to get the total taxable amount since some of the components may not be taxable.

  • [Financials] financials KPI card to Balance Due

  • [Proposal] Changed the domain model so that if a proposal has any invoices against it the balance due = 0

July 09, 2025

  • [Excel Exports] Added Title to CreditExportService, ExcelService, PaymentExportService, InvoiceExportService, created ExcelUtils class

  • [Credits] Issue when going into credit view because of null item.

July 10, 2025

  • [Item] PItemListView: Added null safe check for the getActiveFilter before running the switch logic ItemDialog: Fixed issue when adding a new brand on the fly, it was updating the vendor combo

  • [Item] Item Entity: Added fields to capture sales tax for item, commission and shipping separately.

  • [Expense] Created Expense entity and repo

  • [Excel Service] fixed a bug with item exports

  • [Expenses] Item: Added Expense as a field DataService: Added logic to fetch all items for an expense.

  • [Harvest] HarvestDialog: Added the email address to send error notifications related to harvest

  • [Sales Tax] ItemTaxBreakdownDialog: Added calculation for Commission

  • [Item] ExcelService: Added fields for item sales tax, shipping sales tax and commission sales tax

  • [Harvest] Email Notification: Send email notification daily if there is an unmapped project.

July 11, 2025

  • [Credits] CreditView: Added a link for the invoice.

  • [Invoices] InvoiceView: Changed credit applications so that the name and description are displayed for better reference point. Changed format of document # to XX-number

  • [Quickbooks] CreditView: Added a section to display the QBO live credit information

  • [Expense Entity] Created Expense Entity, ExpenseListView, ExpenseView, ExpenseDialog | [VendorView] Added emojis, made actions one button, gen. info smaller, and POGrid and PaymentGrid bigger

  • [Expenses] ExpenseView: Fixed issue where expense info was not showing on the page because it was extending AbstractProjectView ExpenseListView: Added subtotal, shipping, sales tax, total.

  • [Expenses] ExpenseView: Set list of expenses from the ExpenseListView into the session so it works on ExpenseView

July 12, 2025

  • [Purchases] Renamed the domain model and all associated classes from Expense to Purchase to fall in line with Quickbooks data model and more user friendly verbiage for designers.

  • [Purchases] QBO Sync started for Purchases

July 14, 2025

  • [Excel Exports] Added Title row to Order, Client, Proposal, Rate, Retainer, SaleTax, TaxDetail, TimeEntry, and Vendor. Created PurchaseExportService | [TimeEntryListView] Fixed rounding error in kpi cards for non currency doubles | [VendorListView & VendorView] Added Pagination | [UIUtils] Added exportPurchasesToExcel method | [TransactionsReportView] added Purchases as an option

  • [Rooms] Bringing rooms back from the dead.

  • [Rooms] PView: Added option to add a new room or a new schedule from the project home page.

  • [Rooms]ItemDialog: Added room selection and ability to create a room on the fly. Changed default sort sequence of rooms to be by name. Added validation so duplicate room names are not allowed within a project.

  • [Composite Items]ItemDialog: Removed the composite checkbox since we migrated to ItemKind = BUNDLE

July 15, 2025

  • [Rooms]Rolling out new implementation of rooms. Added rooms to Item Dialog. Added rooms to PView. Worked on Room List.

  • [TransactionsReportView] Added filtering to all report methods

  • [Rooms] Added standard rooms card to PView instead of cards laid out horizontally.

  • [Credit Export Service] Fixed currency formatting issue and added Shipping, Commission, and Sales Tax columns

  • [Items] ItemReport: Modified so it can group by Schedule or Room. Added options to PItemListView export menu.

  • [Items] PItemListView: Changed to refresh only the item being edited in the grid after edit instead of refreshing the entire grid

  • [Items] PItemListView: Added a column for Room and filter

July 16, 2025

  • [Items] PItemView: When a component is added to an item, set the room the same as the parent

  • [Web Clipper] ClipperController: Modified to support fetching rooms for a selected project and also to save the room back to the item through the API

  • [Quickbooks] SyncJob: Added fields for number and project so we can show on the dashboard.

  • [Quickbooks] SyncJob: Updated all calling quickbooks sync jobs to populate the project and the number

  • [Quickbooks] Quickbooks Dashboard: Wired in the new columns for project and number into the dashboard. Updated RetainerView to handle exception if the retainer was deleted or no longer exists

  • [Search] Implemented Rooms into the global search

  • [Project Switcher] Added ability to switch projects from the top menu.

  • [Search Dialog] Added ability to switch projects from the top menu.

  • [Client Ribbon] Enabled client ribbon to edit the client right from the ribbon, and refresh the ribbon data when complete.

July 17, 2025

  • [Time Billing] BillingService: For time billing invoices, need to handle negative line items added to the invoice for credits. Perfomed by is null, so we need to handle that situation.

  • [Credits] CreditView: Display the credit applications before the refunds since it is used more often.

  • [Buildspec] Updated vaadin offline key

  • [Quickbooks] QuickbooksSdkService: Updated invoice payment sync so that that payments created in blueprint are pushed into quickbooks, and payments that re imported are bypassed.

  • [Invoice] InvoiceView: Adjusted created at column for payment to use timezone aware renderer

  • [Invoice] PayInvoiceDialog: When paying with a credit, prefix the document with CM instead of CR

  • [Invoice] InvoiceView: Fixed the display of the credit applied to the invoice in the timeline section

  • [Invoice] InvoiceListView: Throw an exception if the user is not authorized to the project

July 18, 2025

  • [Quickbooks] QuickbooksSdkService: When an invoice is being synced, if there are credit applications from a credit memo, and the credit memo has not been synced to quickbooks, we need to sync the credit memo first before applying to the invoice

  • [Quickbooks] CreditView: trigger sync of credit memo to quickbooks when the credit is created, and also when lines are edited or deleted.

  • [Project] ProjectUser: Added a field for lastViewedAt to store the last time the user viewed the project AbstractProjectView: Save the last viewed at when the user accesses the project

  • [PRoomView & PRoomListView]

  • [PRoomListView] Removed add button

July 19, 2025

  • [Quickbooks] QuickbooksSdkService: Removed message populated into proposal sync when success to maintain conststency with other successful syncs

  • [Invoice] InvoiceDetailDialog: Changed to set the header title to edit invoice detail instead of charge or credit.

July 20, 2025

  • [Invoice] InvoiceView: Implemented project level security when accessing an invoice directly.

  • [Proposal] SignatureDialog: Added functionality to sign a proposal using signature pad.

  • [Proposal] SignatureDialog: After signature complete update the view to show the signature.

  • [Proposal] SignatureDialog: Added a new field for signedAt and update the field upon successful signature.

July 21, 2025

  • [Proposal] ProposalReport: Display the signature and date on the proposal report if it exists.

  • [Proposal] PublicProposalView: Added functionality to require a signature before submitting the proposal feedback. Adjusted ApprovalStatusEnum to display declined instead of rejected.

  • [Proposal] Sales Tax: Created the ability to override sales tax on a proposal, this sales tax code would be applied to all of the items on the proposal

  • [Proposal] ProposalDialog: Do not allow to change the sales tax code if the proposal has already been invoiced.

  • [PRoomView] Reformatted item grid, fixed kpiCard issue that displayed wrong totals

  • [BillingService] When calculating sales tax for an invoice, use the tax code from the proposal if it exists.

  • [Sales Tax] ItemDialog: Check for a tax code on the proposal if the item is assigned and use it, otherwise follow project client company hierarchy.

  • [PRoomView] Rerouted user to PRoomListView after deleting a room

  • [Proposal] ProposalDialog: Fixed issue where we were refreshig the proposal with a null id.

July 22, 2025

  • [Payments] PayProposalDialog, PayRetainerDialog: Do not allow selection of Retainer, Credit or Deposit as payment methods

  • [PRoomView & PRoomListView] Formatted Currency Columns and changed actions button to tertiary inline, [ExistingItemDialog] added service.saveItem() to logic, added images to grid

  • [PRoomView] Made item grid check for nulls in all fields

  • [Payments] Modified the system to allow credits (retainers or credits) to be applied to a proposal. This creates the CreditApplication entity and flags it as applied to a PROPOSAL. When the invoice is generated it will transfer the credit application to the invoice and delete the original credit application that was transferred to the invoice to make the balance available to be applied to other transactions

  • [Payments] PayProposalDialog: When paying a proposal, do not allow the user to choose DEPOSIT as an option as that would be a reference to another deposit against a proposal

  • [PRoomView] Fixed Status Badge and actions menu order of items

  • [ExistingItemDialog] Adjusted height and width of dialog

July 23, 2025

  • [Item] ItemDialog: When adding another flag is on, initialize the room with the value from the previous room.

  • [Quickbooks] QuickbooksSdkService: If there is a manual tax code override for example NYC Design Fees, we need to push that tax code to Quickbooks online

  • [Invoice] InvoiceView: When invoice is queued for sync display a message to the user.

  • [Quickbooks] QuickbooksSdkService: Modified syncInvoicePayment to send the invoice # as the reference number because Quickbooks errors out when the reference number is longer than 21 characters. Updated thd private note to provide more detail about the blueprint payment

July 24, 2025

  • [PRoomView, PRoomListView, RoomDialog, and RoomAddItemsDialog] updates from 7/23 email

  • [Stripe] StripeView: Added account type as a displayed field in Stripe View

  • [Stripe] StripeService: -Changed onboarding to always create connected accounts as EXPRESS accounts going forward -Added account type in StripeView -If connected account = express, create a new kind of checkount session where the net amount is setup as a transfer to the connected account -If account = express, do not store the expense side, or even try to read payment intent, charge and balance transaction -> not needed -Testing method to create a payment intent with stripe elements (just testing) -Built logic to create the express checkout session and setup the transfer of the net amount to the connected account.

  • [Proposals] EmailService: Modified EmailService so that if there is no logged in user, the sender will be adjusted to the company name instead of the user that actually entered it.

  • [Stripe] CheckoutDialog: Started developing a prototype which uses stripe elements to build an internal checkout page.

  • [Proposals] ProposalView: Added button and logic to remove the approval for a proposal -If an invoice exists for a proposal, do not allow a credit to be applied to the proposal.

  • [Quickbooks] QuickbooksSdkService: When retainer payment is synced, sync the client to the QB customer.

July 25, 2025

  • [Quickbooks] QuickbooksSdkService: Do not populate the transaction fee if it is a transaction for an express account.

  • [Proposals] Signatures & Approvals: Added ability for users to digitally sign a proposal and submit their response

  • [Proposals] Changed email link in proposal to send the public link by default and the internal link for colette interiors

  • [Proposals] PublicProposalView: Added name in addition to signature. Signature is not required but the name is required to save the approval.

  • [PRoomView, PRoomListView, and RoomExportService]

  • [Proposals] PublicProposalView: Added the ability to store the clients name as the author for a new comment. This allows anonymous users to enter comments but will still capture the names of the person entering the comment, as they are the client.

  • [PRoomView]

  • [Invoice] DataService: When saving an invoice, determine the invoice status and update it.

  • [Invoice] DataService: When saving an invoice, determine the invoice status and update it. - fixed looping bug.

Last updated