2025 September v2.6
Blueprint Studio v2.6
Changelog
July 29, 2025
[Proposals] PublicProposalView: Handle payment toolbar if null.
July 30, 2025
[Login] LoginView: Added a logo to the application and modified LoginView to use logo and a slightly more modern look and feel.
[Client Dashboard] ClientDashboardView: Started building out the client dashboard
[Emails] Adjusted emails so that contractors and vendors do not receive the email.
July 31, 2025
[Client Dashboard] Working on the client dashboard
[PRoomView] added search filter, [UserSettingsView] added dialog to be able to edit user info, [PFinancialsView] Added Purchases KPICard
Merge remote-tracking branch 'origin/main'
[Client Dashboard] Single page application for client dashboard
[PRoomView] added check for null of room subtotal
[Client Dashboard] Added horizontal scrolling invoice cards for open invoices that require payment - added proposals
[Client Dashboard] Dont show boards section if there are no shared boards
August 01, 2025
[Mood Board] Started working on a basic mood board using fabric.js
[PaymentExportService] added rows for credApplications & paymentDetails
[PaymentExportService] fixed null check for invoice number
[PaymentExportService] fixed column orientation
[Components] Created an editable label with a value change listener
August 04, 2025
[Invoice] DataService: adjusted to handel null value when determining the invoice status
[Invoice] When creating a time invoice, only include billable items
[Images] Added a no-image placeholder png file to the project as a static resource.
[Labels] Created components for Editable labels for both string fields and number fields
[Storage] StorageService: Updated storageService to re-use the same AWS S3 Client, and not keep creating new ones.
[Storage] StorageService: Changed getImage() to use presigned URL globally
[Storage] StorageService: Added handling in getImage() routine for null values passed, or bad signed url.
[Item] ImageRenderer: Removed checks calling to database to determine if user is employee for every image rendered. Modified all calling classes to pass the current user into the call.
[Storage] StorageService: Replaced sys.out with logger.
August 05, 2025
[Images] Item: Created a formula to fetch the primary entity image key. DataService: Added warning if the fetch is getting all images. ImageRenderer: Chanegd to use the primary image key instead of a separate DB fetch for the images.
[Images] ItemCardLayout: Changed to use the primary image key from the Item
[Schedule] PScheduleListView: Updated the UI to use cards for the schedules to be more appealing to users
[Schedule] ScheduleCard: Handle null value for schedule.getTotalPrice()
August 06, 2025
[Schedule] Adding sections to schedule and drag and dropping items from one section to another.
[UI] CollapsiblePanel: Created a reusable collapsible panel
[Schedules] ScheduleView: Modified to use the new CollapsiblePanel
[UI] CollapsiblePanel: Added listener
[Schedules] ScheduleView: Changed menubar to tertiary inline
[Schedules] ScheduleItemCardView: Updated so that changes to approval status are recorded and show right away in UI
August 07, 2025
[Schedules] ScheduleView: Fixed dark mode
[Schedules] ScheduleView: Created nice overlay to move items into a schedule using either library items or project items.
[Invoicing] InvoiceReport: Made sure to refresh the invoice before generating the PDF.
[Schedules] ScheduleView: Added filter for Approval Status
[Schedules] ScheduleItemSelector: Sort items by name. ScheduleView: Removed checkbox for section since it wasnt doing anything and moved the color swatch to the beginning so it is easier to see when collapsed.
[Items] PItemListView: When an item is copied from the project item into a library item, i also null out the schedule.
[Schedules] ScheduleView: Added the ability to copy sections within a schedule, and all of the associated items and images.
[Schedules] DataService: Added ability to copy a section of a schedule to another section
August 08, 2025
[UI] Editable Label: Added ability to edit a number as a label
[Storage] DataService: Added a convenience method to get the StorageService
[Weekly Status] SchedulerService: Disabled the automatic status email update that is sent out on a schedule.
[Client Dashboard] Added items that have been proposed or invoiced into the client dashboard view
[Project] PView: Hide the client ribbon if its not an employee
[Project] PView: do not add the divider if the client ribbon is hidden
[User] UserSettingsView: Do not allow clients to get a canva token or see assigned projects.
[Security] ItemDialog: Prevent any users other than employees from opening the dialog. This is an extra check just in case the button becomes visible somewhere.
[Security] PView: Tightening security
August 09, 2025
[Security] InvoiceView: Hide the options to add products or services if user is not an employee
[Security] PInvoiceListView: Do not allow the detailed invoice register to be printed by anyone but employees.
[Quickbooks] QuickbooksSdkService: Added logic to log the Estimate payload before creating in QBO
[Quickbooks] QuickbooksSdkService: Added debugging and removed some
[Quickbooks] QuickbooksSdkService: added more precise logging for proposals, and throw a QuickbooksEXception if there is a problem adding the lines to the proposal.
[Quickbooks] QuickbooksSdkService: Throw Quickbooks exception if there is a problem adding the proposal line
[Quickbooks] QuickbooksSdkService: Log the full stacktrace when proposal fails to sync
[Quickbooks] QuickbooksSdkService: As a test im removing the addition of the shipping lines to the proposal.
August 10, 2025
[Quickbooks] QuickbooksSdkService: Attempting to log the estimate as an object before adding to quickbooks for debugging purposes.
[Logging] Configured logback to log Quickbooks messages at DEBUG level.
August 11, 2025
[Quickbooks] QuickbooksSdkService: Changing to send only the first proposal line item to see if will push through to Quickbooks.
[Quickbooks] QuickbooksSdkService: Log the proposal payload again
[Quickbooks] QuickbooksSdkService: Do not set the date on the proposal as test to see if thats the cause for error.
[Quickbooks] QuickbooksSdkService: Sync the client when sending the proposal
[Logging] Removed logback config because im not really getting anything out of it.
[Comments] Injected EmailSevice into the CommentsArea to support editing comments.
[Comments] CommentsArea, CommentDialog: Added ability to edit comments.
[Comments] EmailService:If the comment was edited, indicate in the subject.
[Comments] EmailService:Changedthe comment notification email so that if a comment was edited, it is indicated in the subject and in the header of the email body
August 12, 2025
[Schedules] Schedule: Updated the formula that counts items in a schedule to exclude component items.
[Schedules] Schedule: Cleaning up the schedule module. Removed totals from the grid to make nicer looking.
[Schedules] Schedule: Added item selector to existing schedule setup.
August 13, 2025
[Schedules] ScheduleItemGrid: Combined the image and the item info into one cell to improve readability and aesthetic.
[Schedules] ScheduleItemGrid:Trying to set image width to 90px without height so all images have the same width.
[Schedules] SharedScheduleView: Updated shared schedule to have nicer look and feel.
[Schedules] SharedScheduleView: Added some other key attributes like Vendor, Brand, Status, Status Notes, Approval Status
[Schedules] SharedScheduleView: Added column borders to Shared schedule
[Schedules] SharedScheduleView: Added action column to view details
[Schedules] SharedScheduleView: Added subtotal column
[Schedules] QRCodeGenerator: Ability to scan QR code to get to schedule
[Schedules] ScheduleReport: Making UI improvements to the report.
[Schedules] PScheduleView: Moved options into a separate menu, and added a search field to filter the items in the schedule
[Schedules] PScheduleView: Only include items where parent=null so we dont include components.
[Schedules] ScheduleItemSelectorDialog: Removed component items from the Schedule item selector
August 14, 2025
[Schedules] ScheduleItemGrid: Added Documents column with links to docs.
[Schedules] ScheduleItemSelectorDialog: Changed so that the dialog is pinned to the right side.
[Item] Item: Updated the copy constructor to handle brand.
[Item] Item: Improved UI of item library
[Item] ItemLibraryListView: Added image into same column as item. Added notes and Specs.
[Item] DataService: Added a method to copy an item to the library PItemListView: Changed to call this new copy method when adding to the library.
[Item] PItemView: Changing PItemView to be able to display library items
[Item] ItemLibraryListView: Use ItemView as the linking page so it is not tied to the project
[Schedule] SharedScheduleView: Changed to use a span instead of EditableLabel
[Items] ItemListView: Adjusted global item list so it is more in line with standard UI.
[Items] ClientDialog: Added mask on phone and fax number
[Proposal] ProposalView: Adjusted the title to format Proposal # - Name
[Item Library] ItemView: Display the brand. ItemDialog: If its a library item, do not show the schedule or room since those are tied to the project.
[Proposal] ProposalAddItemsDialog: Adjusted the UI for a nicer look and feel. Added filter to search for items by name or location.
[Proposal] ProposalAddItemsDialog: Adjusted the UI for a nicer look and feel. Added filter to search for items by name or location and schedule
August 15, 2025
[Proposal] ProposalAddItemsDialog: Added ability to add library items into the proposal
August 16, 2025
[Invoicing] CreateInvoiceDialogDialog: Modfied so grid does not auto create the columns
[Invoicing] Item: Added methods to get remaining quantity and subtotal to be invoiced. CreateInvoiceDialog: Display only the remaining amount to be invoiced, and reflect totals on the bottom as the remaining amounts.
[Invoicing] Item: Adjusted width of create invoice dialog.
[Proposal] Proposal: getBalanceDue() will try and return the actual balance left on the proposal instead of zeroing it out once it has been invoiced.
August 17, 2025
[Proposal] Proposal: Removing credit applications from being reduced from the proposal because it creates too much additional complexity when calculating balcned due.
[Invoice] CreateInvoiceDialog: Modified to pass QuickbooksService, and then to queue the invoice for sync after the invoice is created.
[Invoice] CreateDepositINvoiceDialog: Modified to trigger the Quickbooks Sync upon creation
August 18, 2025
[Quickbooks] QuickbooksSdkService: Changed to find or create the prepayment account for deposits inline while running the job instead of the initialize in the beginning.
[Quickbooks] QuickbooksSdkService: Reverted changes for liability account posting
August 20, 2025
[Billing] CreateInvoiceDialog: Only include items that have qty > 0 for invoicing
[Proposal] PublicProposalView: Modified to handle nulls for item.getApprovalStatus()
[Quickbooks] InvoiceView: Added the ability to manually force sending an invoice to Quickbooks.
[Quickbooks] InvoiceView: Force Quickbook sync and display success/error message
[Quickbooks] QuickbooksSdkService: Added option to force a sync of the QBO invoice ignoring dates.
August 21, 2025
[Quickbooks] QuickbooksSdkService, InvoiceView: Added an option to pass the forceSync attribute to tbe backend quickboosk job so it runs in the background instead of the UI thread. Also committed the Contact entity and repository.
[Quickbooks] InvoiceView: Fixed force sync option - was calling it incorrectly.
[Proposal] PublicProposalView: Removed options to approve a proposal before paying.
[Quickbooks] QuickbooksSdkService: After a forced sync job has completed, reset the forceSync flag back to false so it will not sync in the future without explicitly forcing the sync.
[Proposal] PublicProposalView: Do not show the approval columns in the detail unless proposal approvals are enabled.
[Proposal] PublicProposalView: Do not show the approval status column in the detail unless proposal approvals are enabled.
August 22, 2025
[Quickbooks] QuickbooksSdkService: After a payment is imported from Quickbooks, trigger the save of the invoice again, so that the invoice status gets updated to paid if the invoice has been completely paid.
September 02, 2025
[AR Aging] ARAgingView: Started working on AR Aging listing invoices and summarizing by project.
[AR Aging] ARAgingView: Added a column for available credits.
September 03, 2025
[Items] OItemListView: Fixed the assignment of the runnable to reset the item being refreshed after each edit.
[Rooms] RoomDialog: Removed the logic that keeps the room dialog open when adding a new room because it is cumbersome when adding rooms on the fly.
[Invoices] InvoiceSpecifications: Added a filter for InvoiceKind to the specifications filter.
[Time Billing] TimeBillingView: Added null pointer checks
September 05, 2025
[Proposals] ProposalRepository: Added a method to sort items on a proposal by sequence
September 11, 2025
[AR Aging] ArAgingView, ARAgingExportService:Export AR Aging to excel.
[AR Aging] ARAgingExportService: Removed unused imports
[Invoice] Added a method that returns the age or days past due of an invoice.
[AR Aging] ARAgingDetailDialog: Added a drill down on the AR Aging into the invoices behind the Aging.
[Proposal] ProposalView: Added logging to debug calculation of deposit amount
[Item] Item: Modified getDepositAmount() so that it will still include the amount in the deposit calculation if there is no unit price or quantity. This is when shipping is defined without a price or qty.
[Item] Item: Added proposal sequence to Item
[Item] ItemRepository: Created a new repo method to get the max proposal sequence
[Item] ProposalAddItemsDialog: Modified to populate the proposal sequence when adding a new item
[Item] DataService: Modified saveItem() method to log the sequence and proposal sequence. Created a service method to get the next sequence for proposal.
[Proposal] ProposalView: Modified the resequence logic to populate the proposal sequence. Modified create new item logic to set the proposal sequence number as the next available.
September 12, 2025
[Quickbooks] SchedulerService:Modified to not log Quickbooks start and stop of the scheduled job
[DataService] DateService: Added a convenience method to retrieve the username from the SecurityContext. Modified logging of the item to capture key old values and log the user that saved the item
[Item] Item: Switched proposal Sequence field to Integer instead of int.
[Item] ItemRepository: Added method to sort by proposal sequence and if null use item sequence. Added a method to bulk update the proposal sequence based on the item sequence for a specific proposal.
[Item] DataService: Added logging of old value for an item if changed, plus the user that modified the item Added method to call item repo method to backfill the proposal sequence based on the item Modified findItemsByproposal to use the new repo method to sort the items based on proposal sequence
[Proposal] ProposalView: Modified to backfill the proposal sequence number for the items on the proposal in beforeEnter() Modified to set the proposal sequence when the proposal is re-sequenced.
[Proposal] ProposalItemListView: Added notation in the item field for deposit percentage and also shipping charge
[Proposal] ProposalView: Modified to use the new targeted proposal sequence update logic.
September 16, 2025
[Ship To] Added Ship To entity and repository plus service methods. Added ability to assign a ship to location to a purchase order.
September 17, 2025
[Purchase Order] PurchaseOrderReport: Modified to display all the totals, and balance due, plus ship to address, plus memo.
[Purchase Order] PurchaseOrderReport: Return empty cell if ship to is null
September 18, 2025
[Purchase Order] POrderListView: Added column for Ship To
[Budget] BudgetExportService: New method to export budget details into excel.
[Quickbooks] Purchase Order Sync: Modified to sync a bill for a purchase order as 1 to 1, not allowing for multiple bills against a single purchase order.
[Quickbooks] PurchaseOrderView: Added Billed status badge when a PO is billed.
[Quickbooks] QuickbooksView: Added a startup function to populate the bill id from the payment into the purchase order.
[Purchase Orders] PurchaseOrderDialog: Added access to the Billed flag.
[Purchase Orders] PurchaseOrderView: Only allow to mark as billed when it has not already been marked.
[Purchase Orders] PurchaseOrder: Switched billed to a primitive boolean.
[Quickbooks] QuickbooksView: Function to backfill Quickbooks Bill ID
[Purchase Order] POrderLIstView, OrderListView, PurchaseOrderView: Added confirmation when marked as billed, display columns for bill info in grids
[Purchase Order] POrderListView: Fixed navigation log message and log when the po is marked as billed
[Purchase Order] PurchaseOrderView: Log the po as the entity ID when logging activity
September 19, 2025
[Purchase Order] OrderExportService: Added Ship To as a column in the excel export
[Purchase Order] GenerateOrdersDialog: Modified so the user can provide a name for the purchase order that is created.
[Quickbooks] Purchase Order Sync: Modified to map the ShipTo object to the ShipTo address on the Quickbooks purchase order.
September 22, 2025
[Purchase Order] PurchaseOrderView: Adjusted the text for viewing the bill for a po in QBO
[Bill] Bill: Updated domain model to include purchase order and project.
[Purchase Order] PurchaseOrder: Added terms to the domain model
[Purchase Order] PurchaseOrder: Added terms to the main po view, the printed document and the dialog for editing.
[Purchase Order] PurchaseOrder: Removed option to create a bill
[Proposal] ProposalReport: Adjusted the border color of the image cell to black to be consistent with the other cells in the document.
[Purchase Order] OrderListView, POrderListView: Added KPI header totals to the views.
September 23, 2025
[Stripe] StripeService: Handle a null on payment intent.
[Item] Item: Made section lazy
[Stripe] StripeService: Use the entity id and source from the checkout session instead of the meta data
[Stripe] StripeService: Added try/catch to process checkout session
[Stripe] StripeService: If balance transaction is null, just return null.
[Quickbooks] QuickbooksSdkService: Stripe out colon in addition to single quotes because Quickbooks does not allow for a colon in the item name.
[Purchase Order] PurchaseOrder: Switched Client relationship to LAZY
September 24, 2025
[Proposals] Reverted proposal details, moved NumberUtils into the correct utils package
[Item] PItemView: Removed dependency on section
[Proposal] ProposalView, ProposalDialog, ProposalItemListView: Added domain fields to control lock and unlock functions on proposal. Added logic to prevent users from removing items form a proposal when it is locked. Write activity entity when lock/unlock.
September 25, 2025
[Auditing] Added auditing to Item entity track ny important changes automatically. Added a revision grid to PItemView to display the revisions that were made.
[Auditing] PItemView: Added Unit cost and MU% to the grid.
[Stripe] StripeService: Modified StripeService to perform transfers for express accounts. Added field to CheckoutSession to capture tha ccount type at the time the checkout session is created.
September 26, 2025
[Payments] DataService: Created domain model for PaymentOptions (online payments) and added service layer.Also pre-populate the database for the company in the LoadDatabase
[Payments] CompanyView: Added ability to configure online payment methods
[Payments] CompanyView: Adjusted the method column to use an icon for better look and feel.
[Payments] CompanyView: Adjusted the method column to use an icon for better look and feel. Added more fields to payment option to control the amount being charged as a fee.
[Proposal] PublicProposalView: Removed code that was not used to use an old payment logic
[Stripe] StripeService: Created new methods to create checkout sessions for both express and standard accounts which use PaymentOption as a parm and populate the key payment option information into the CheckoutSession so it can be used later to process the payment.
[Weekly Status] Weekly Status Email: Removed the report generation so it doesnt bomb out for memory usage.
September 27, 2025
[Payments] PublicRetainerView, PublicProposalView, PublicInvoiceView: Modified to use PaymentOptions to display the list of payment cards on the public checkout pages.
September 29, 2025
[Proposals] ProposalView: Added payment info as badge to display payment history on top.
[Proposals] DataService: Started logic to copy a proposal
[Credits] CreditView, RefundDialog: Added ability to edit refund meta data and display the timeline of events for application and refund
[Credits] PItemView: Made credits clickable to drill into the actual credit of the item
[Proposals] Proposal: Created a copy constructor
[Item] Item: Updated the item copy constructor to include the commission percent.
[Proposal] ProposalView, DataService: Created function to copy a proposal
September 30, 2025
[Stripe] StripeService: Refactored createExpressCheckoutSession to make less verbose and easier to read.
Last updated