Marine Fluid Technology Release Notes
Current: v3.9 Open FLOW

Release Notes

Detailed descriptions of every feature, fix, and field change in each production build. For a quick overview, see the Release Highlights.

New v3.9 — Landed Cost & Cost Integrity

8 September 2026

Average Landed Cost (ALC/EUR) is now calculated

Until now a product’s cost was its purchase price alone, which hides the freight and handling it took to get the goods into stock and overstates margin. FLOW now calculates a second figure, Average Landed Cost, alongside the existing Weighted Average Cost.

  • ALC/EUR is the purchase price plus the product’s share of the inbound freight and handling recorded on the purchase order
  • Both WAC/EUR and ALC/EUR are calculated at one moment only — when the purchase order is set to Closed. Nothing is calculated at goods receipt, so a cost never locks in on unverified freight
  • Where an order covers several products, the freight and handling pool is split across the lines in proportion to their purchase value
  • Cross-trade lines (goods sent direct from vendor to customer) count towards WAC/EUR but are excluded from landed cost, since they never enter the warehouse
  • Only closed purchase orders contribute. Open, cancelled, or received-but-not-closed orders do not

Visible on the Product form (Pricing section) and the Products Report. Job costing and margin continue to use WAC/EUR in this release; the switch to ALC/EUR follows later.

Starting costs for existing and new products

Landed cost only fills in when a purchase order closes, so without a starting value every existing product would have been blocked from quoting and selling on day one.

  • At go-live every physical product was given a starting landed cost: its existing WAC/EUR where one existed, otherwise both figures were seeded from the product’s most recent vendor price — a still-valid price first, an expired one only if nothing valid exists
  • Products that have never had any vendor price recorded stay empty on purpose and remain blocked until a price is gathered
  • A brand-new product now receives a provisional cost the moment its first RFQ is marked Received, so it can be sold before its first purchase order arrives. A zero quoted price never seeds a cost
  • Every seeded value is flagged with the “WAC/ALC Override” marker and is replaced outright — not blended — when the product’s next purchase order closes
  • Consolidated Products are excluded; their cost rolls up from their sub-products

Visible on the Product form (Pricing section).

More accurate cost averages

Three corrections to how the averages are built.

  • Mixed currencies — each purchase line is converted to EUR at its own order-date rate before it enters the average. Previously lines in different currencies were summed as if they were the same unit, so any product bought in more than one currency carried a wrong cost
  • Free-of-charge lines — a line with a zero price, or a real price fully cancelled by a 100% discount, is left out of both WAC/EUR and ALC/EUR and out of provisional seeding. A free delivery is not a price. Normal discounts still count in full
  • One exchange-rate date — every conversion on the cost path uses the rate for the day before the purchase order was created. A line with no rate for that date is skipped rather than silently valued at zero, and shipping and handling costs already held in EUR are no longer converted a second time

Existing figures correct themselves the next time a product’s cost recalculates.

System-calculated cost fields are read-only

A hand-typed cost silently replaces a calculated one and feeds straight into margin and kit costs.

  • WAC/EUR, ALC/EUR and the “WAC/ALC Override” flag can no longer be edited on the Product form
  • The override checkbox in Product Settings has been relabelled from the retired “WAPP” wording to match the WAC/ALC terminology used everywhere else

Visible on the Product form.

Consolidated Product costs calculated automatically

Kit costs were maintained by hand while being treated as the authoritative cost for quoting and job costing.

  • A scheduled job runs twice a day (06:00 and 14:00) and sets each kit’s WAC/EUR and ALC/EUR to the sum of every sub-product’s cost multiplied by its quantity in the kit
  • If any sub-product is missing the cost concerned, the kit’s figure is cleared rather than showing a partial total, and an email naming the kit, the sub-products and the cost type goes to the person who last edited the kit and to the orders mailbox. The emails stop once the data is complete

Visible on the Product form for Consolidated Products. Known gap: a sub-product with a genuine cost of zero is currently treated as missing; a follow-up corrects this.

Products with unknown cost block the save

A warning previously appeared when a product without a known cost was added to a quote or order, but it could be clicked past. It is now a real block.

  • On save of a Sales Quote, Sales Order or Additive Order, every line is checked. If any product has no purchase cost (WAC/EUR) or no landed cost (ALC/EUR) on record, the save is refused
  • All problem lines are listed in one message so they can be fixed in a single pass. The message asks for an RFQ to be raised so a cost can be established
  • The check also fires when an existing quote or order is edited and re-saved, and a standalone Sales Order enforces it on its own
  • A cost of exactly zero is still allowed — only an empty cost blocks

Visible on Sales Quote, Sales Order and Additive Order line items.

Sales Price/EUR is converted automatically

The euro sales price on the product record existed but never calculated, so products priced in other currencies had no comparable figure.

  • Whenever the sales price or the sales currency on a product changes, Sales Price/EUR is recalculated from the rate-of-exchange table. A product priced in euro carries straight across
  • The field cannot be typed into by hand

Visible on the Product form (Pricing section).

MFT person in charge copied on Order Confirmations

  • When an Order Confirmation is sent from a Sales Order, the MFT person in charge named on that order is added to the Cc line automatically, using the address on their employee record
  • All existing recipients are unchanged. If the order has no person in charge, or the employee record has no email address, the Cc entry is simply skipped

Visible on the Order Confirmation email sent from the Sales Order form.

Lead time appears on the Additive Order document

  • The lead time recorded on an Additive Order is now passed into the generated A/O document. Previously it was captured on the order but missing from the paperwork

Visible on the Additive Order document generated from the Additive Order form.

Unit purchase price required on every PO line

The unit price is what freight and handling are shared out against; a zero or blank line breaks that distribution and corrupts the product’s cost.

  • Entering 0 or leaving the unit purchase price blank gives an immediate on-screen alert; a negative value is rejected at the field
  • Saving the order is blocked outright while any line still has a zero or empty unit price. The message names every line and product that needs correcting, and applies equally when an existing order is edited
  • Genuinely free deliveries, such as a warranty replacement, are entered with the real unit price and a 100% discount on the line. The line total is zero, the unit price stays true, and the order saves normally

Visible on the Purchase Order form, Product Line Items.

Vendor price picker limited to the right vendor and real prices

The price list on a PO line offered every active price for the product regardless of vendor, still listed zero-value entries, and the pre-filled default could come from an expired record.

  • The Product Vendor dropdown on a line now offers only price records that are Active, above zero, and belong to the vendor on the purchase order header. This applies when a line is added and when it is edited
  • The vendor and price pre-filled when a product is added follow the same rule, so an expired, zero or other-vendor price can no longer land on an order unnoticed
  • Where the order’s vendor has no current price for the product, the dropdown offers nothing rather than falling back to another vendor. The buyer enters the price on the line and it is captured to price history on confirmation
  • Each option now reads vendor article name / EUR price / T&C: terms. The vendor name segment was removed to make room and the spacing corrected

Visible on the Purchase Order form, Product Line Items. Known limitation: the vendor reference on a line is set when the line is added, so changing the vendor on an existing order does not refresh lines already entered.

Terms & Conditions captured on the RFQ line

Buyers could not tell two active prices from the same vendor apart in the dropdown because the descriptive segment was always empty.

  • A single-line Terms & Conditions field has been added to the RFQ line items. Its value is written to the price history record when the RFQ creates one, and from there appears in the PO price dropdown
  • Minimum-quantity or discount conditions can now be seen at the moment a purchase price is chosen

Visible on the RFQ form (line items) and the Purchase Order price dropdown.

A PO cannot be closed until every shipment cost is resolved

Closing the order is the single moment the final product cost locks in. If freight is still unknown at that point, landed cost locks on incomplete numbers.

  • Setting a purchase order to Closed is refused while any linked shipment has a blank shipping cost, or a cost above zero that has not been ticked as verified. Cancelled and Lost in Transit shipments are ignored
  • The message explains that each shipment needs either a verified cost or 0 entered to confirm there is none
  • Once everything is resolved the close proceeds and triggers the cost calculation

Visible on the Purchase Order form when changing status to Closed. Known gap: a Lost in Transit shipment whose cost is unresolved can still block the close in some cases; verify the cost or enter 0 as a workaround until the follow-up ships.

A closed PO calculates cost exactly once

Opening a closed purchase order to fix a typo or attach a document used to rerun the cost calculation, moving the product’s cost and adding duplicate rows to the cost log.

  • A hidden marker is set the first time an order’s cost is calculated. Re-saving the order, or taking it out of Closed and closing it again, now writes nothing
  • All purchase orders already closed before this release were marked at deployment, so historical orders are covered too
  • Consequence: an order that is genuinely changed after closing will re-close carrying its original cost. Reopening as a supported path is not part of this release

Effect visible in the WAC/ALC Log and on product cost.

Purchase prices expire automatically; reminder email retired

  • A nightly job finds every price record still marked Active whose Valid To date has passed and sets it to Expired
  • Once Expired, the record’s fields are locked when opened. Copy Row remains available so an old price can be the starting point for a new one
  • The email that warned the last editor a few days before a price expired has been retired. Users did not act on it, and with landed cost providing the cost basis there is no longer a reason to prompt for price maintenance. Nothing replaces it

Visible on Product Purchase Price History records, reached from the Product form and the Purchase Order price picker.

Total Shipping Costs/EUR on the PO corrected

Two faults inflated the shipping total that feeds landed cost.

  • Only Inbound shipments now contribute to a purchase order’s Total Shipping Costs/EUR, alongside the supplier shipping cost entered on the order itself. Cross-trade shipment freight is excluded, since those goods never reach the warehouse
  • Typing a supplier shipping cost on a not-yet-saved order no longer adds in the cost of unrelated shipments. A one-time correction recomputed the total on all existing purchase orders

Visible on the Purchase Order form (Economy & Costs).

Shipping cost must be entered once a shipment is under way

A blank shipping cost was ambiguous — nobody could tell whether a freight invoice was still coming or there simply was not one.

  • Once a shipment is Booked, In Transit or Received, it cannot be saved with a blank shipping cost. Enter the real cost, or 0 to confirm none is expected
  • Blank is still allowed in Pending and Packed, where the cost genuinely is not known yet. Cancelled and Lost in Transit shipments are exempt
  • The Shipping Cost Verified checkbox is hidden until a cost above zero is entered, so there is nothing to tick when there is nothing to verify

Visible on the Shipment form.

Shipment freight flows to the purchase order

Freight entered on an inbound shipment previously reached the purchase order only in certain statuses, and shipments created straight at Received never passed their cost across at all.

  • Whenever an Inbound shipment linked to a purchase order is saved, the order’s Total Shipping Costs/EUR is recalculated from scratch: the supplier shipping cost on the order plus the cost of every Inbound shipment linked to it, converted to EUR. This happens in any shipment status
  • Because a purchase order cannot close until every shipment cost is verified or set to 0, only settled freight ever reaches landed cost
  • Values replace rather than accumulate, so a cost corrected later by Finance does not double up

Visible on the Purchase Order form (Total Shipping Costs/EUR) after saving a linked Inbound shipment.

“Lost in Transit” can now be selected

  • The status existed but had been left out of the per-type status lists the form builds on opening. It is now selectable on Inbound, Outbound and Cross shipments alike
  • What the platform does once the status is set was not part of this change and is handled separately

Visible on the Shipment form (Status).

Completed shipments protected from order edits

Changing the consignee on an order pushed the change to every linked shipment, including ones already dispatched, so a late edit could rewrite the paperwork of a shipment that had already gone.

  • Shipments in In Transit, Delivered, Received or Cancelled are now left untouched when the consignee or incoterms change on the Sales Order. Pending, Booked and Packed shipments still update
  • The check is made per shipment, so on an order with mixed statuses the open shipments update and the completed ones are skipped in the same run
  • The same guard applies to the Additive Order form. Vessel, customer PO and project are not guarded because they do not vary per shipment

Visible on the Shipment form after editing the linked Sales Order or Additive Order.

Shipment notifications are never silently skipped

A bulk release of 35 shipments produced no notifications at all, because the send was abandoned whenever no customer address resolved — and the copy to the orders mailbox was lost with it.

  • If no customer recipient can be found, the notification is sent with the orders mailbox in the To field. If at least one customer recipient resolves, the existing behaviour continues with the orders mailbox on blind copy
  • The change sits in the shared notification routine, so single-shipment saves and bulk parent/child releases both inherit it

Known limitation: the notification is only attempted when the shipment has a linked Sales Order. A shipment with no Sales Order still sends nothing.

“Parent Shipment” naming aligned

  • On the Shipment Bulk Operation Schedules form, the field pointing to the shipment a schedule belongs to was labelled “Main Shipment”. It now reads “Parent Shipment”, matching the Shipment form. Wording only; nothing else changed

Visible on the Shipment Bulk Operation Schedules form.

Stock figures refreshed on a schedule

Stock figures only recalculated when a related order or shipment was saved, so a product with no recent activity could show a figure that was weeks out of date. This closes the known limitation noted in v2.66.

  • A scheduled job runs twice a day (12:00 and 22:00) and steps through every product, refreshing Stock On Hand, Stock Inbound and Stock Projected
  • It calls exactly the same routines the save triggers call, so a scheduled refresh and a manual save produce the same numbers. Saves still update in real time as before
  • Consolidated Products are still not given a projected stock figure of their own, in line with the existing design

Visible on the Product form and the Products Report. Known limitation: the run log records only that the job fired, not how many products it covered; coverage of the full catalogue as it grows is being addressed separately.

“Stock Product” renamed “Physical Product”

The old label suggested a physical product could be permanently opted out of stock and cost tracking, when in reality that is a per-shipment matter. The flag actually decides whether an item is physical at all.

  • The checkbox on the Product form now reads Physical Product, with help text: tick for goods that can be received, stocked and cost-tracked; untick only for non-physical items such as services, labour or fees
  • The flag itself is unchanged and still governs Stock On Hand, Stock Projected and open demand from inbound purchase orders. Consolidated Products continue not to carry it
  • Action required: the field defaults to ticked, so most products are already correct, but every product that was unticked under the old meaning must be reviewed. If it is genuinely physical it must be ticked, or it will be left out of inventory and cost tracking

Visible on the Product form.

WAC/ALC Log — a permanent record of every cost calculation

Cost figures used to be overwritten, so the history of how a product’s cost moved was lost. Finance needs that history to see cost and margin trends and adjust selling prices before gross profit slips.

  • Each time a purchase order closes, one row is written for WAC/EUR and one for ALC/EUR, capturing the resulting value, the purchase price behind it, the shipping and handling pool and this product’s share of it, quantity, and the source purchase order. Provisional seeds get a row of their own
  • Rows can never be changed once written. The report is read-only and the underlying form is not reachable from navigation
  • All amounts are shown in EUR. Currency and exchange-rate columns were removed because a row summarising a rolling window across several currencies cannot honestly carry a single rate. A seed row is written only when a starting cost was genuinely set

Visible as the WAC/ALC Log report under Finance & Statistics.

Job costing drill-down

The order-level costing figure did not show which lines drove the margin.

  • The S/O Job Costing report now has a Line Items button on each order’s detail view. It opens the L/I Job Costing report in a pop-up, already filtered to that order
  • Both reports remain reachable directly from the menu. Totals at the foot of a report require the records to be grouped; a summary row on a flat list is not supported on the platform

Visible in the S/O Job Costing report under Finance & Statistics.

Project Cost report excludes cancelled purchase orders

The report added up every purchase order tagged to a project, including cancelled ones, so project direct cost was overstated. This closes the known limitation noted in v2.66.

  • The report now counts only purchase orders that carry a project reference and are not in Cancelled status
  • This depends on purchase orders being cancelled properly rather than closed, so correct use of the Cancelled status matters

Visible in the Project Cost report under Finance & Statistics (Projects).

Document generation restored and kept alive

Every document type in every environment stopped producing output overnight, with no error shown, because the stored access key to the external PDF service had expired. It was the second time the same expiry had taken documents offline.

  • A fresh key was issued and document generation restored the same day
  • The key is now renewed automatically by a scheduled job, so it can no longer age out unattended

Affects every “generate document” action in FLOW. No change to how documents are used.

New application theme

  • FLOW has a new layout giving more usable horizontal space on every screen, with the most-used reports reachable directly from the navigation rather than through nested menu sections
  • This is a first pass. Not all menu sections have been reworked to match, and the section structure will be refined once users have given feedback

Platform-wide.

⚠ Known Limitations

Job costing and margin still run on WAC/EUR; the switch to ALC/EUR follows in a later release. A Lost in Transit shipment with an unresolved cost can still block a PO from closing in some cases — verify the cost or enter 0 as a workaround. The Consolidated Product cost check treats a genuine zero cost on a sub-product as missing. The scheduled stock refresh logs that it ran but not how many products it covered. A shipment with no linked Sales Order sends no notification. Changing the vendor on an existing purchase order does not refresh the vendor reference on lines already entered.

v2.66 — Stock & Cost Accuracy

23 June 2026

Stock Inbound — counts only outstanding purchase orders

Stock Inbound on the Product page previously counted purchase-order lines in almost every status, so orders that were already Closed or Received still added to the inbound figure and overstated what was actually on the way.

  • Stock Inbound now counts a purchase-order line only while its order is still outstanding — Pending, Sent, Confirmed, or Partially Received
  • Lines on Received, Closed, or Cancelled orders are excluded
  • The rule is built as an inclusion list, so any purchase-order status added in future will not silently count towards inbound
  • Because Stock Inbound feeds Stock Projected, projected figures will also adjust for affected products — this is the corrected behaviour, not a new discrepancy

Visible on the Product form and the Products Report (Stock Inbound).

Free-of-charge products can be quoted and ordered

The cost check that blocks adding a product without a known purchase cost was also blocking products with a cost of exactly zero. This closes the matching known limitation noted in v2.64.

  • Products with a WAC/EUR of zero — used for free-of-charge deliveries — can now be added to both Sales Quotations and Sales Orders
  • Products with no purchase cost on record at all remain blocked, as intended — users are still directed to raise an RFQ first

Visible on Sales Quotation and Sales Order line items.

RFQ “Accepted” status is now system-controlled

The RFQ Status dropdown previously let a user select “Accepted” by hand at any stage, which could bypass the vendor-quote receipt and the Convert-to-PO step, weakening the audit trail.

  • “Accepted” has been removed from the selectable Status options on the RFQ form
  • It is now set automatically only when an RFQ in “Received” status is converted to a Purchase Order, preserving “Accepted” as a true record of conversion

Visible on the RFQ form (Status field), Purchasing menu.

Calculated Consolidated Stock — read-only and shown only where relevant

On the Product page, the Calculated Consolidated Stock field was editable and appeared on every product.

  • The field is now read-only — its value is always derived by the system and should never be typed in
  • It appears only on Consolidated Products, where the figure is meaningful, and is hidden on regular products

Visible on the Product form (Consolidated Products).

Open a sub-product from a Consolidated Product

Consolidated Products can contain several sub-products. A button is now available to open an individual sub-product’s record directly.

  • Each row in the Product Consolidated Items report carries a button that opens the matching sub-product record
  • The button lives in the report view; a button inside the subform itself is not supported on the platform

Visible in the Product Consolidated Items report.

⚠ Known Limitations

Project Cost report includes cancelled POs — fix pending. Stock values only refresh on triggering events; a scheduled daily refresh is planned. ALC/EUR field is visible but not yet active. Calculated Consolidated Stock visibility resolves on form load — if the Consolidated flag is changed on an already-open form, the field updates after save and reopen (the flag is set once at creation in normal use).

B171 v2.64 — Stock Planning Suite

02 June 2026 · Builds 171 – 171.3

Stock Projected

Products now show a Stock Projected figure that answers a simple question: how much stock do we effectively have once we account for what’s on order and what’s already committed to customers?

Stock Projected = Stock On Hand + Stock Inbound − Open Sales Order quantity

A positive value means the product is covered. A negative value means demand exceeds what’s available and on order — a purchasing action may be needed.

What counts as open demand:

  • All Sales Order line items that have not yet shipped, been delivered, invoiced, or cancelled
  • Line items on partially shipped orders are included — until a line item has physically left on a shipment, it counts as open demand
  • Line items already on a shipment that is in transit or delivered are excluded — the stock adjustment has already happened

When does it update:

  • When a Purchase Order line item is added or changed
  • When an inbound shipment is received
  • When a Sales Order line item is added, changed, or removed
  • When a Sales Order is cancelled
  • When an outbound shipment is dispatched

Visible on the Product form and in the Products Report. Applies to Stock Products only. Negative values are highlighted on the Products list view. The field is read-only.

Consolidated Product Demand in Stock Projected

Stock Projected now also accounts for demand that reaches components through Consolidated Product sales. Previously, if a customer ordered a Consolidated Product, the demand was only visible against the consolidated product itself — the individual components showed no reduction in their Stock Projected, which could lead to over-committing stock.

  • When a Consolidated Product is on an open Sales Order, each of its components now sees that demand reflected in its own Stock Projected, adjusted by how many of that component are needed per unit
  • Example: a Consolidated Product requires 3 units of Component A. If 8 units are on open orders, Component A’s Stock Projected deducts 24 units (8 × 3)
  • If a component belongs to multiple Consolidated Products, the demand from all of them is combined
  • A component that appears both on its own Sales Order and within a Consolidated Product on another order is handled correctly without double-counting

Visible on the Product form and Products Report for any Stock Product that is part of a Consolidated Product.

Calculated Consolidated Stock

Consolidated Products now show a Calculated Consolidated Stock figure — the maximum number of units that can be assembled from the sub-products currently in stock.

  • The calculation takes each sub-product’s Stock On Hand, divides by how many are needed per consolidated unit, and takes the lowest result. The weakest link determines the buildable quantity
  • Example: a product kit requires 1 Monitor, 1 CPU, and 2 RAM Blocks. Stock is 10 Monitors, 8 CPUs, and 10 RAM Blocks. Buildable kits = 5 (limited by RAM: 10 ÷ 2 = 5)
  • If any sub-product has zero stock, the result is 0
  • Updates automatically when sub-product stock changes
  • A one-click recalculation is available via right-click in the Products Report to set initial values for existing records

Visible on the Consolidated Product detail view and in the Products Report. The field is read-only.

Product Form: New Pricing Section

The Product form has been reorganised with a new Pricing section bringing together cost and profitability information in one place:

  • Sales Price/CCY and Sales Price/EUR — the sales price is now shown in both the original currency and in EUR
  • WAC/EUR — the Weighted Average Cost in EUR, as introduced in Build #169
  • ALC/EUR — a placeholder for the future All-in Landed Cost metric (not yet active)
  • Total Value (WAC/EUR) — the total stock value, calculated as Stock On Hand multiplied by WAC/EUR
  • GP/EUR and GP% — Gross Profit in EUR and as a percentage, based on Sales Price and WAC
  • “Consolidated Items” has been renamed to “Sub-Products” throughout the application for clarity

Fix: Additive Order Details on Shipping Documents

When creating a Shipment from an Additive Order, the Vessel name, Customer PO reference, and Incoterms were not being carried across. Additionally, generating a Commercial Invoice produced an error. All four issues have been resolved. Visible in the Additive Order report and on the resulting Delivery Note and Commercial Invoice.

Fix: Lost In Transit Status

The “Lost In Transit” option was missing from the Shipment Status dropdown. This has been corrected and is now available on the Shipment form.

Fix: Stock Inbound Showing Doubled Quantities

In certain cases, Stock Inbound was showing double the expected quantity — for example, 480 units instead of 240. This occurred when Purchase Order line items without a linked Shipment were being counted twice. The calculation has been corrected for both Stock Inbound and Stock Projected. Visible on the Product form and Products Report.

Fix: Order Dashboard Search Bar

The Sales Order search bar on the main Order Dashboard was not working. This has been fixed — users can now search by Customer PO, Reference, or Vessel as intended.

Updated Document Templates

The Shipping Label, Packing List, and Commercial Invoice generated from Sales Orders have been refreshed with updated layouts. The header section now includes the Customer Reference and Delivery Date. Available via Sales Order document generation.

⚠ Known Limitations

Project Cost report includes cancelled POs — fix pending. Stock values only refresh on triggering events; a scheduled daily refresh is planned. ALC/EUR field is visible but not yet active.

B170 Approved Vendors & Stock Inbound

28 April 2026 · Builds 170 – 170.6

Approved Vendor Governance

A new Approved Vendors mechanism controls which products can be added to a Purchase Order for a given Vendor. Available in the Product form (Approved Vendors field) and the Purchase Order form (line item product dropdown).

  • Each Product now has an Approved Vendors field listing the Vendors authorised to supply it. Users can add or remove Vendors manually on the Product form
  • When an RFQ reaches “Received” status, the Vendor is automatically added to Approved Vendors on the relevant Product
  • When creating a Purchase Order, the product dropdown shows only products approved for the selected Vendor
  • When a PO is confirmed, the unit price and discount are written to Product Price History. If the PO was converted from an RFQ and the price is unchanged, the write is skipped to avoid duplicates
  • A one-click backfill function in the Products Report populates Approved Vendors from historical data for existing records

Stock Inbound

The Product form now displays an automated Inbound Stock figure showing the total quantity on open Purchase Orders that have not yet been received. Visible on the Product form and Products Report.

  • Applies to Stock Products only — Consolidated Products and non-stock products are excluded
  • Updates automatically when a PO line item is added, changed, or when a shipment is received
  • The field is read-only and shows 0 when no outstanding items exist
  • Current Stock has been renamed to Stock On Hand as part of the FLOW stock naming convention

Consolidated Inbound Shipping Costs

Purchase Order shipping costs now consolidate both vendor-arranged and internally-arranged shipping into a single total. Available in the Purchase Order form and reports.

  • Vendor-arranged shipping: entered manually on the PO. The field has been renamed from “Shipping Cost/CCY” to “Supplier Shipping Cost/CCY”
  • Internally-arranged shipping: cost entered on the Shipment record is automatically passed to the PO once the Shipment reaches “Booked” status
  • The total field “Total Shipping Costs/EUR” is the sum of both sources and updates automatically

Fix: PO Document — Manual Unit Price

When a user manually entered a unit price on a PO line item (introduced in Build #168), the value was not appearing in the PO PDF. The document was still reading from Product Price History. This has been corrected. Available in PO document generation from the Purchase Order report.

B169 WAC/EUR Cost Base Logic

16 April 2026 · Builds 169 – 169.2

New Cost Base: WAC/EUR for Sales Quotations and Sales Orders

This release establishes WAC/EUR (Weighted Average Cost in EUR) as the single source of truth for purchase cost across the SQ and SO lifecycle.

WAC/EUR is captured per line item as a read-only snapshot at four lifecycle events. Each trigger is independent — a recalculation at a later stage does not alter earlier snapshots.

  • SQ Creation: WAC/EUR is fetched and stored when a Sales Quotation is created
  • SQ Acceptance: WAC/EUR is re-fetched when a Sales Quotation is accepted — costs may have moved since creation
  • SQ to SO Conversion: WAC/EUR is re-fetched when converting a Sales Quotation to a Sales Order
  • SO Status to Shipped: WAC/EUR is re-fetched when the Sales Order reaches Shipped status — this represents the final cost basis

Product Selection Validation

A product without a Product Price History entry cannot be added to a Sales Quotation or Sales Order. The rationale: if there is no known purchase cost for the product, it cannot be quoted. Users are directed to raise an RFQ first, which writes to Product Price History on receipt. Visible on SQ and SO line items.

Sales Quote: With or Without Sub-products

Users can now choose to generate a Sales Quote with or without sub-products listed for Consolidated Products. Both options are available in the SQ In Progress and SQ Accepted reports.

New Reports

  • Project Cost Report — Consolidates all POs tagged to a Project, providing a view of direct expenses. Available under the Projects menu
  • PO | Closed Report — Dedicated view of Purchase Orders that have completed their lifecycle. Available under the Purchasing menu

B168 Manual PO Pricing

31 March 2026 · Builds 168 – 168.2

Manual Purchase Order Pricing

PO line item pricing is now fully editable. This removes the constraint that required a matching Product Price History record before a price could be entered, enabling spot purchases, web-sourced orders, and manual price entry. Available in the Purchase Order form (Purchasing menu).

  • A new Unit Purchase Price field has been added to PO line items — always editable
  • When a Product + Vendor combination exists in Product Price History, the price defaults from the latest record. Users can override any defaulted value
  • When no history exists, the field is blank for manual entry
  • “Purchase Price” has been renamed to “Total Purchase Price” on PO and RFQ line items and reports
  • “Unit Price” on RFQ line items has been renamed to “Unit Purchase Price” for consistency

Bug Fixes

  • RFQ → PO Discount %: Discount % now transfers correctly when converting an RFQ to a Purchase Order. Available via Convert to PO in the RFQ report
  • Parent > Child batch processing: Follow-up fix. Batch scheduling for large Parent Shipments (10+ Children) now processes all children correctly
  • PO save error: Purchase Orders without an associated Shipment can now be saved without error

Build 168.1 — Patch

RFQ currency validation: Currency must now be defined on Line Item #1 before submitting an RFQ. Once set, it auto-applies to all subsequent line items.

B167.1 RFQ / PO Patch

23 March 2026 · Build 167.1

RFQ and Purchase Order Fixes

  • RFQ-to-PO traceability: a relationship lookup is now available in both forms and reports
  • Convert-to-PO is now available at “Received” status (previously only at “Accepted”)
  • Manufacturer and Manufacturer Article Number fields added to Product Price History
  • RFQ PDF generation now available via the RFQ report
  • Field mapping corrected: Vendor Reference and Order Status now pass correctly on RFQ-to-PO conversion
  • Vendor Address confirmed passing correctly to PO documents
  • Required field validation on status change to “Received” with user-facing alert listing any missing fields

Bug Fixes

  • Parent Shipment cancellation: Cancelling a Parent Shipment no longer cancels its Children. Children are automatically disassociated and retain their current status. Visible in SHP | Pending report
  • Material Movement on edit: Editing a Delivered Shipment no longer triggers unintended stock movements. 136 pre-Build #164 records retrospectively corrected
  • RFQ duplicate numbering: Concurrent RFQ creation no longer produces duplicate numbers. Uniqueness check applied on save

B167 RFQ Module + WAC Rename

16 March 2026 · Build 167

Request for Quote (RFQ) Module

A new RFQ form is available under the Purchasing menu. RFQs allow users to formally request pricing from Vendors, capture their responses, and optionally convert accepted quotes into Purchase Orders. This replaces the need to manually create Product Price History records — Product Price History is now populated automatically when an RFQ is received.

  • Status flow: Draft → Sent → Received → Accepted (Converted to PO). Available in the Create RFQ Report
  • When an RFQ status changes to “Received”, the system writes a Product Price History entry for each line item
  • RFQ line items include Vendor Article Number and Vendor Article Name as mandatory fields. When a Product + Vendor combination already exists in Product Price History, these auto-populate
  • An accepted RFQ can be converted to a Purchase Order via the “Convert to PO” button in the RFQ report
  • All line items on an RFQ must use the same currency
  • RFQ numbering follows the series 30YYYY

Terminology Change: WAPP Renamed to WAC

The cost metric previously known as WAPP (Weighted Average Purchase Price) has been renamed to WAC (Weighted Average Cost). Where the rename has not yet been applied, WAPP and WAC refer to the same value.

WAC/EUR reflects the actual weighted average purchase price calculated from Purchase Order receipts. It does not include overhead costs such as handling, packing or shipping — an additional all-in cost metric covering these will be introduced in a future release. The calculation validity period is configurable under Admin Settings > Finance.

Bug Fixes

  • Child Shipment costs: Shipping costs from Child Shipments are now correctly passed to the associated Sales Order. Visible in Sales Order Detailed View
  • Large Parent Shipments: Parent Shipments with many Children (35+) now process correctly via batch scheduling

B156–166 Consolidated Releases (v2.23 – v2.42)

5 March 2026 · 44 tasks across Builds 156 – 166

Consolidated Shipments (Parent > Child)

It is now possible to group multiple Shipments under a single Parent Shipment. The Parent manages shared logistics data — tracking link, carrier, forwarding agent, tracking number, status and costs. These fields cascade to Children automatically. Shipping costs are distributed evenly across Children. When the Parent status changes, all Children and their downstream workflows are triggered automatically.

Stock Pick Registration with Automatic Shipment

A new form-based workflow for registering product movements without a linked Sales Order or Purchase Order. Three directions: Check-out (outbound), Check-in (inbound), Stock Movement (internal transfer). The system creates a linked Shipment automatically — stock adjusts when the Shipment status changes. Works on mobile and desktop.

Order Confirmation Email

An automated Order Confirmation email is sent when a Sales Order is confirmed. Right-click in the Sales Order report to trigger. Includes a link to the Order Confirmation PDF. Sent from orders@marinefluid.dk with CC to update recipients.

Additives Module — Workflow Overhaul

Blueprints removed (incompatible with Kanban). Status managed via dropdown. Document generation in Kanban view. Shipment generation enabled. Duplicate function retains Customer, Vessel and Contact. Auto-copy on Close → Forecast.

Other Key Changes

  • Handling Units — Multiply function to create many identical H/U records in one action
  • Organisation Entity ID (99YYYY) across all address forms
  • Company Settings section in Admin Settings — starting with WAC calculation validity period
  • Dynamic stock levels on active order line items (scheduled update)
  • Product Notes passed to line items (read-only)
  • Not-for-Sale products excluded from SQ and SO dropdowns
  • Delivery Note (A4 vertical) from Shipment pop-up; old horizontal version retired
  • Auto tracking links with suffix support for carriers like UPS
  • Partial Shipment auto-flagged when line items are excluded
  • Material Movement logging extended to X-type (cross) shipments
  • PIC fields updated to use logged-in user identity
  • Number prefixes removed from form fields — clean 6-digit numbers in reports and dropdowns