---
title: Attachments and notes
order: 13
updated: 2026-07-12
---

# Attachments and notes

Every enquiry can carry two independent kinds of extra material: **attachments** — files that travel out with the quotation email — and **universal notes** — a private rich-text scratchpad with its own files that the customer never sees. When an enquiry becomes a sales order the same ideas carry over, with a couple of order-only twists. This page covers all of them: where each lives, the exact size limits the server enforces, what each button does, and who is allowed to do it.

Nothing here is trusted to the browser. Every upload, view, remove, and "attach" is re-checked on the backend against your permissions, the size caps, and — for the "attach from product" flow — proof that the file really belongs to this enquiry. A forged file ID or an oversized payload is rejected with an error, not quietly accepted.

## Open attachments or notes

Both open from the enquiry detail screen:

1. Open the enquiry from the *Enquiry Bank* — click *View* in the row's *Actions* column. See [View an enquiry](/docs/enquiry-bank/view-enquiry).
2. Click the actions button at the top-right of *Enquiry Details*.
3. Pick *Attachments* (*View or upload files*) or *Universal Notes*.

Which entries appear depends on your permissions:

- *Attachments* shows only if you hold *Attach Files to Offer Email* (`enquiry.addAttachMentsToSendWithOffer`).
- *Universal Notes* shows only if you hold *View Universal Notes* (`enquiry.viewUniversalNotes`). Its one-line description reads *Notes & files for reference* when you can also edit, or *View shared notes* when you are view-only.

On a **sales order** the same actions menu (on the order's *View* screen) offers *Universal Notes*, *Quotation Attachments*, and *Additional Attachments* — see [On a sales order](#on-a-sales-order) below.

## Enquiry attachments

### What they are

Attachments are files you pin to an enquiry so they go out **with the quotation email** when you send it. Typical uses: technical datasheets, certifications, drawings, brochures, or reference photos.

They are attached to the *enquiry*, not to a single send. At the moment a quotation is approved and queued, the system takes a **snapshot** of the enquiry's current attachments (only files that finished uploading) and locks that set onto that send. So:

- Files you add later ride along on the *next* quotation you send.
- A quotation already dispatched keeps exactly the files it went out with — adding or removing attachments afterward never changes an email that already left. See [Generate a quotation](/docs/enquiry-bank/generate-quotation).

### Size limits

Two caps apply, and both are enforced on the server (the browser just warns you early):

- **`50 MB` per file.** A single file bigger than this is rejected outright (the upload middleware refuses it with a "file too large" error). The drop zone reminds you: *Up to 50 MB per file*.
- **`20 MB` combined across the whole enquiry.** This deliberately sits under the ~25 MB attachment ceiling that Gmail and most mail providers impose, so your quotation email never bounces. If an upload would push the enquiry over `20 MB`, it is blocked and you are told how much is already attached versus how much you tried to add.

A usage chip next to the *Enquiry Attachments* heading shows the running total, e.g. `12.4 MB / 20 MB`. It turns red once you cross `16 MB` (80% of the limit) as an early warning.

Any file *type* is accepted — there is no format allow-list. The row icon is chosen from the file's type purely for display (`🖼️` images, `📄` PDF, `📊` spreadsheets, `📝` Word, `📎` everything else).

### The attachments table

The enquiry's own files are listed in a table with these columns:

- *File* — a type icon plus the filename (truncated with a hover tooltip if long).
- *Size* — in MB, two decimals.
- *Uploaded* — the upload date, shown as `dd Mon yyyy` (e.g. `24 Apr 2026`).
- *By* — the name of the person who uploaded it, or `—` if unknown.
- *Actions* — *View* and *Remove* buttons.

When there are no files the table reads *No attachments on this enquiry yet.*

### Upload a file

In the drop zone below the table (*Drag & drop or browse*): click it to pick files, or drag files onto it. Multiple files at once is fine. Files over `50 MB` are skipped with a message naming them; the rest upload. If the batch would breach the `20 MB` enquiry total, the whole batch is refused.

Adding, like removing, needs the enquiry-edit right server-side — a user who can *see* attachments but not edit the enquiry will get a permission error on upload.

### View a file

*View* streams the file inline through the app's built-in file viewer (PDFs, images, etc. open in place). It does not force a download.

### Remove a file

*Remove* opens a small confirm popover (*Remove this attachment?*). Confirming detaches the file from the enquiry. The backend then counts how many other records still point at that same file — other enquiries, product codes, product heads, and makes. The underlying file is permanently deleted from storage **only when this enquiry was the last thing referencing it**; if the file is also a product-spec attachment or lives on another enquiry, it is left intact and merely unlinked here. Removal requires the enquiry-edit permission.

### Product specification attachments

Below your own files is a *Product Specification Attachments* area with three tabs:

- *Product Code Attachments*
- *Product Head Attachments*
- *Make Attachments*

These surface files that were attached to the **product records used on this enquiry** — the product codes on the lines, the heads those codes belong to, and the makes/brands chosen. It saves you from hunting through the product catalogue: any datasheet already living on a product can be pulled straight onto the enquiry.

Each listed file shows its name, size, a *View* button, and either:

- an *Attach* button — copies that file's reference onto the enquiry so it too will travel with the quotation, or
- an *Attached* chip — meaning it is already on the enquiry.

*Attach* is subject to the same `20 MB` enquiry cap (a file that would overflow it is refused before anything happens). The server independently re-verifies that the file genuinely belongs to one of this enquiry's product specs before attaching — you cannot smuggle in an unrelated file by its ID. Tabs with nothing to show read *No attachments found.*

### Who can do what (permissions)

- **See the menu entry:** *Attach Files to Offer Email* (`enquiry.addAttachMentsToSendWithOffer`).
- **Load the list / product-spec files:** the enquiry-view permission (`enquiry.view`).
- **Upload, remove, or attach-from-product:** the enquiry-edit permission (`enquiry.edit`). Without it, viewing works but any change is rejected server-side.

## Universal notes

### What they are

Universal notes are an **internal** space bound to the enquiry. Firms use them for standing context — payment terms, delivery defaults, decisions, who-said-what — and for internal documents. Nothing here is ever emailed to the customer. Each enquiry has exactly one universal note (one rich-text body plus its own set of files), shared by everyone on your team who can view it.

### Who can see and edit it

- *View Universal Notes* (`enquiry.viewUniversalNotes`) lets a user open and read the note and its files.
- *Edit Universal Notes* (`enquiry.editUniversalNotes`, which itself requires the view right) lets them change the text, add files, and remove files.

Open the note without the edit right and it renders **read-only**: a *Read-only* label appears, the editor is greyed out, the upload zone and per-file remove buttons are hidden, and there is no *Save Note* button. The backend enforces the same split — a save attempt without the edit permission is rejected.

### The note text

The body is a rich-text editor (bold, lists, links, and so on), with the placeholder *Anything worth remembering about this enquiry…*. On save, the HTML is sanitised on the server; anything that looks like an injected script is stripped and logged as a security event rather than stored. There is no character counter surfaced here — keep it reasonable.

### Note attachments

The note keeps its own files, separate from the enquiry attachments above:

- **`50 MB` per file** and **`50 MB` combined** for the note (a more generous total than the 20 MB enquiry-email cap, because these files are never emailed). A usage line shows e.g. `8.0 MB / 50 MB`.
- Existing files list with a *View* button (streams inline) and, when you can edit, a small `×` to stage them for removal.
- Newly picked files (click or drag onto *Click or drag files here*) are staged in a list, each with its own `×` to drop it before saving.

### Saving

Nothing is written until you press *Save Note*. On save the app sends the current text, the new files, and the list of files you staged for removal in one request. The backend upserts the single note, applies your removals (only files the note actually owns can be removed), and garbage-collects any removed file that nothing else references. Files you removed but did not save stay put.

## On a sales order

Once an enquiry is converted to a sales order (see [Sales orders](/docs/enquiry-bank/orders)), the order's own *View* screen carries three related entries in its actions menu.

### Universal Notes (order)

The order's *Universal Notes* panel has two parts:

- **From the enquiry** — the note text and files that existed on the originating enquiry, captured at conversion. This part is **frozen**: read-only, never editable or deletable from the order, so the history of what was known at hand-off is preserved. It only appears if the enquiry actually had a note.
- **Sales order notes** — the order's *own* editable note and files, working just like the enquiry note (rich text; `50 MB` per file, `50 MB` combined; staged add/remove; single *Save Note*).

Opening the panel needs *View Sales Order Universal Notes* (`sales.viewSalesOrderUniversalNote`); the menu entry also only shows when the order actually has a note. Editing the order's own section needs *Edit Sales Order Universal Notes* (`sales.editSalesOrderUniversalNote`) — the carried enquiry part stays read-only regardless.

### Quotation Attachments (order)

A read-only list of the files that were **sent with the original quotation offer** — the snapshot described under [What they are](#what-they-are) above, preserved on the order. Each row offers only *View*; there is no upload or remove. Gated by *View Quotation Attachments* (`sales.viewQutationAttachments`).

### Additional Attachments (order)

A slot for files attached to the order **after** conversion — signed copies, scanned acknowledgements, transport documents, and the like. Rows show *File*, *Size*, *Uploaded*, *By*, and *View*; a drop zone (*Up to 50 MB per file*) allows uploads. Permissions are split three ways:

- *View Additional Attachments* (`sales.viewAdditionalAttachments`) to open and view.
- *Add Additional Attachments* (`sales.addAdditionalAttachments`) to upload — without it the drop zone is hidden.
- *Delete Additional Attachments* (`sales.deleteAdditionalAttachments`) to remove — without it the *Remove* button is hidden. Deleting here permanently removes the file from storage.

## Common questions

### What is the difference between an attachment and a universal-note file?

Enquiry attachments are dispatched to the customer with the quotation email. Universal-note files are internal — they live in the system and are never emailed. They also have different size budgets: `20 MB` total for enquiry attachments (to stay under mail-provider limits), `50 MB` total for the note.

### Is there a file size limit?

Yes. Every upload is capped at `50 MB` per file. Enquiry attachments are additionally capped at `20 MB` combined per enquiry; universal-note files at `50 MB` combined. These are enforced by the server, not just the browser. A firm-wide storage quota also applies across all documents — if it is exhausted, uploads fail until space is freed.

### Can I add attachments after the quotation has been sent?

Yes. New attachments ride along on the *next* quotation you send from the enquiry. A quotation already emailed keeps exactly the files that were snapshotted at its send time — later changes never alter it.

### Why is a file I deleted still visible somewhere else?

Removing a file only unlinks it from the current record. The actual file is deleted from storage only when nothing else points at it. If the same file is also attached to a product, another enquiry, or a note, it stays available in those places.

### I can see the attachments but the upload/remove buttons don't work — why?

Loading and viewing needs the enquiry-view right, but adding, removing, or attaching-from-product needs the enquiry-edit right (`enquiry.edit`). If you can see files but changes are rejected, you are missing the edit permission — ask your firm administrator.

### Where do the "product specification" files come from?

They are datasheets and documents already attached to the product codes, product heads, and makes used on this enquiry's lines. The *Attach* button copies such a file onto the enquiry so it travels with the quotation, without you re-uploading it.

### Why can't I edit the "From the enquiry" notes on an order?

That block is a frozen snapshot of the enquiry note taken at conversion, kept read-only so the record of what was known at hand-off is never rewritten. Add anything new in the order's own *Sales order notes* section instead.
