Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
245 commits
Select commit Hold shift + click to select a range
eff83e7
Install packages for blocknote
SchrodingersGat May 18, 2026
01bc34e
Add new notes editor using blocknote
SchrodingersGat May 18, 2026
71d51ff
Add new generic "notes" model
SchrodingersGat May 18, 2026
176733d
Add basic tab group for switching notes
SchrodingersGat May 18, 2026
1078475
API / serializer updates
SchrodingersGat May 18, 2026
19c497f
Merge commit '99358eb4e7e4b051fd35c0b72c5d75e11ea5f2ec' into block-notes
SchrodingersGat May 19, 2026
8815861
Add notes fetch
SchrodingersGat May 20, 2026
6df13fe
Add note mixin support for existing models
SchrodingersGat May 20, 2026
51d8468
Fix serializer
SchrodingersGat May 20, 2026
a0e528a
Create new notes
SchrodingersGat May 20, 2026
bc197f9
Omit migration tests from code coverage
SchrodingersGat May 20, 2026
ac8e8d9
Add "no notes" item
SchrodingersGat May 20, 2026
ab0da25
Add "primary" field to Note model
SchrodingersGat May 21, 2026
c18fd25
Update serializer
SchrodingersGat May 21, 2026
d77be24
Add unit test
SchrodingersGat May 21, 2026
c7d11dc
Mark content field as 'safe'
SchrodingersGat May 21, 2026
9e8764d
Fix conflict (for now)
SchrodingersGat May 21, 2026
fd3d64d
Merge branch 'master' into block-notes
SchrodingersGat May 21, 2026
df340e3
Load notes into editor
SchrodingersGat May 21, 2026
689bd1f
Refactor save UX
SchrodingersGat May 21, 2026
36e81c4
Sanitize before uploading
SchrodingersGat May 21, 2026
136c925
remove old editor
SchrodingersGat May 21, 2026
0c1aa65
Remove old deps
SchrodingersGat May 21, 2026
7315c34
Merge branch 'block-notes' of github.com:SchrodingersGat/InvenTree in…
SchrodingersGat May 21, 2026
5cd7bfa
Merge commit '27ca0836e7c7e46ebb41ea98d507972ae7a6b018' into block-notes
SchrodingersGat May 23, 2026
38e3c86
Merge commit '749c4715ee022bdb39b500f5c3776c1ee18411e3' into block-notes
SchrodingersGat May 23, 2026
4338920
Merge commit 'dd1edce2e59172c86e85fdd09d6ed01d3fcfefe4' into block-notes
SchrodingersGat May 24, 2026
754a4c2
Fix migration conflict
SchrodingersGat May 24, 2026
8377f53
Run nh3 cleaner over backend notes
SchrodingersGat May 24, 2026
9e91663
Update note accessors
SchrodingersGat May 24, 2026
5813c4b
edit / delete existing notes from the UI
SchrodingersGat May 24, 2026
d798aac
Layout tweaks
SchrodingersGat May 24, 2026
407ba3f
Display note info
SchrodingersGat May 24, 2026
d99487b
Support user locale
SchrodingersGat May 25, 2026
488f558
Add unit testing for HTML content
SchrodingersGat May 25, 2026
29202f6
Observe color mode
SchrodingersGat May 25, 2026
8b99c33
Merge branch 'master' into block-notes
SchrodingersGat May 25, 2026
4fff7ed
Add link between Note and NotesImage
SchrodingersGat May 25, 2026
0df677d
Ensure image file is deleted when NotesImage is deleted
SchrodingersGat May 25, 2026
8f36287
Add support for image upload in editor
SchrodingersGat May 25, 2026
d305ec2
Skeleton for data migration
SchrodingersGat May 25, 2026
1260de6
Updates
SchrodingersGat May 25, 2026
24e8fad
Update data migration
SchrodingersGat May 25, 2026
c2e1893
Remove validator
SchrodingersGat May 25, 2026
d93d5f9
Updated API endpoints for NotesImage model
SchrodingersGat May 25, 2026
725ef04
Update server side sanitizing
SchrodingersGat May 25, 2026
c58b7b8
Specify max field length
SchrodingersGat May 25, 2026
618e368
Remove old fields from NotesImage model
SchrodingersGat May 25, 2026
cdd1b1d
Refactor clean_string
SchrodingersGat May 25, 2026
be132bf
Remove obsolete task
SchrodingersGat May 25, 2026
256cae2
Remove legacy "notes" field from older models
SchrodingersGat May 25, 2026
9f77ae2
Adjust search params when switching notes
SchrodingersGat May 25, 2026
50b67ff
Remove NotesFieldMixin
SchrodingersGat May 25, 2026
36bc444
Change editor
SchrodingersGat May 26, 2026
c37c1e6
Resizable image support
SchrodingersGat May 26, 2026
5c4f082
Support tables
SchrodingersGat May 26, 2026
799e57c
Add table style
SchrodingersGat May 26, 2026
277e22a
Adjust header actions
SchrodingersGat May 26, 2026
8396a9d
Add data migration for SalesOrderShipment notes
SchrodingersGat May 26, 2026
73a3218
Adjust back-end sanitizing
SchrodingersGat May 26, 2026
f754444
Adjust
SchrodingersGat May 26, 2026
2b57413
Use subtle editor variant
SchrodingersGat May 26, 2026
664eed1
Move undo/redo
SchrodingersGat May 26, 2026
36006c6
Enhance editing logic
SchrodingersGat May 26, 2026
d1b3746
Merge branch 'master' into block-notes
SchrodingersGat May 26, 2026
6a5e606
Add report tags for notes
SchrodingersGat May 26, 2026
dc9e23c
Add unit test for note image cleanup
SchrodingersGat May 26, 2026
9ecaf2c
Render note to HTML
SchrodingersGat May 26, 2026
c0deb92
Merge commit 'bc03f349085582e99606b94ff9c4cded905aeb1b' into block-notes
SchrodingersGat May 26, 2026
42931fd
Fix migration order
SchrodingersGat May 26, 2026
48cd60b
Adjust migration text
SchrodingersGat May 26, 2026
09ab375
Merge commit '00ad041e1b65754460c9fb9b6242f6e4e9295d2c' into block-notes
SchrodingersGat May 27, 2026
8d4c201
Fix "dirty" trigger on notes
SchrodingersGat May 27, 2026
55a39b2
Prevent navigate from dirty notes
SchrodingersGat May 27, 2026
bf675f1
Add documentation
SchrodingersGat May 27, 2026
b4bd688
Prevent image clicking if not in editing mode
SchrodingersGat May 27, 2026
2d8fd18
Merge branch 'master' into block-notes
SchrodingersGat May 27, 2026
40c2775
Merge commit '956468eb847754e701d207bae2a51a6a00ca7d56' into block-notes
SchrodingersGat Jun 1, 2026
4f41ebb
Merge branch 'master' into block-notes
SchrodingersGat Jun 1, 2026
8bf2152
Merge commit 'd38af61ba2fb3c87143da57ddd92bc4845f85a7c' into block-notes
SchrodingersGat Jun 1, 2026
d7af743
Merge branch 'block-notes' of github.com:SchrodingersGat/InvenTree in…
SchrodingersGat Jun 1, 2026
38d8965
Merge commit '47c6906a74f41eed5b56f4dc43ea0d4e20415237' into block-notes
SchrodingersGat Jun 2, 2026
a7ae8c0
Update API
SchrodingersGat Jun 2, 2026
8bd9aa7
Update migration files
SchrodingersGat Jun 2, 2026
11e55fc
Merge branch 'master' into block-notes
SchrodingersGat Jun 3, 2026
05514ec
Fix migrations
SchrodingersGat Jun 3, 2026
b2cece1
Merge branch 'block-notes' of github.com:SchrodingersGat/InvenTree in…
SchrodingersGat Jun 3, 2026
2456101
remove notes from test fixtures
matmair Jun 3, 2026
5d49051
remove notes field that does not exsist anymore
matmair Jun 3, 2026
4bc9913
add missing ruleset
matmair Jun 3, 2026
1366da4
fix assertation
matmair Jun 3, 2026
856389b
fix assertation
matmair Jun 3, 2026
bb0b82d
Update docs/docs/concepts/notes.md
SchrodingersGat Jun 4, 2026
df9786f
Remove blocknote deps
SchrodingersGat Jun 4, 2026
09c1aaa
Merge branch 'master' into block-notes
SchrodingersGat Jun 4, 2026
550a7ab
Move old helper functions
SchrodingersGat Jun 4, 2026
f6cde30
Revert change
SchrodingersGat Jun 4, 2026
a46bb39
Fix note image URL
SchrodingersGat Jun 4, 2026
b33e229
Merge commit '3393ef4e65267f4f8c5a5a87798553dbe0160a39' into block-notes
SchrodingersGat Jun 5, 2026
002a0b3
Merge branch 'master' into block-notes
SchrodingersGat Jun 5, 2026
7fae4e2
Fix migration conflicts
SchrodingersGat Jun 5, 2026
9f01910
Merge commit '4c4e0eb202059b83f208065e7f48660f97148956' into block-notes
SchrodingersGat Jun 6, 2026
3c7a65e
Merge commit '6c13d9f2a2db210b8318420b7783f402b3522054' into block-notes
SchrodingersGat Jun 7, 2026
6d3259e
Merge commit '7f1f2dbad24c6f1fe2b034fbb64c950f24318d50' into block-notes
SchrodingersGat Jun 7, 2026
ab3372d
Merge branch 'master' into block-notes
SchrodingersGat Jun 7, 2026
fb621c3
Merge branch 'master' into block-notes
SchrodingersGat Jun 8, 2026
f927635
Fix migrations
SchrodingersGat Jun 8, 2026
1205bc5
Merge commit 'ca6f73e91922c8faed1f495e7ecac2ad1101f65d' into block-notes
SchrodingersGat Jun 9, 2026
0e54fe0
Merge branch 'master' into block-notes
SchrodingersGat Jun 10, 2026
d98a57f
Merge commit '3309032b261e891944db5270a305a3ecf9f926ce' into block-notes
SchrodingersGat Jun 11, 2026
2ee1016
Merge commit '457fe16f9c31d08fbb6f3493f17105aac2638e86' into block-notes
SchrodingersGat Jun 13, 2026
94ae783
Fix delete call
SchrodingersGat Jun 13, 2026
f0cb694
Fix content mixin
SchrodingersGat Jun 13, 2026
5b18401
Fix note duplication
SchrodingersGat Jun 13, 2026
fdef49c
Make save method atomic
SchrodingersGat Jun 13, 2026
f5ca46e
Fix double-save
SchrodingersGat Jun 13, 2026
cf43ff3
Add "template" field to Note model
SchrodingersGat Jun 13, 2026
e31a242
Adjust migrations
SchrodingersGat Jun 13, 2026
9a38642
Frontend updates
SchrodingersGat Jun 13, 2026
b06f478
Fix for NotesEditor
SchrodingersGat Jun 14, 2026
cc36bfb
Render Note instance in forms
SchrodingersGat Jun 14, 2026
dff26b9
Fix button-within-button
SchrodingersGat Jun 14, 2026
54da8ea
Merge commit '0b5db2f16a9dee9a6127c9757cc7f843dbe45f57' into block-notes
SchrodingersGat Jun 14, 2026
d7efe02
Merge commit 'd951638e75b4b6fd8dce07ea71ac11bf3ba20a9f' into block-notes
SchrodingersGat Jun 15, 2026
20970d9
Merge commit '5c95dfe484b0e01b8a3f95e7413f0f6f71cdc3cd' into block-notes
SchrodingersGat Jun 16, 2026
b6bf053
Merge branch 'master' into block-notes
SchrodingersGat Jun 16, 2026
33b7d60
Merge branch 'master' into block-notes
SchrodingersGat Jun 17, 2026
edaf810
Merge commit '546958a1cb02125b96365e7fedda75610fed46ec' into block-notes
SchrodingersGat Jun 17, 2026
7b7cf8e
Merge branch 'block-notes' of github.com:SchrodingersGat/InvenTree in…
SchrodingersGat Jun 17, 2026
cec678f
Merge commit '9e125be07e94e0997ce03fd905673c44aad81c00' into block-notes
SchrodingersGat Jun 18, 2026
dfdba9a
Merge commit '6285a11a6538d9a4ff86e68b8d4f0af614f607bf' into block-notes
SchrodingersGat Jun 19, 2026
ad8fbcf
Merge commit '01fb74af254d29c5f58ee10e352c7e2bb13b23dc' into block-notes
SchrodingersGat Jun 19, 2026
a42217f
Merge commit 'ec845c61cda2d9fd458906aef7e2871f7a09a188' into block-notes
SchrodingersGat Jun 22, 2026
44e42f3
Merge branch 'master' into block-notes
SchrodingersGat Jun 24, 2026
e6b86fb
asfd
SchrodingersGat Jun 25, 2026
1e6af4d
Merge commit 'e5fa67ca9f021c14e9340619fe4a807f0c012ae2' into block-notes
SchrodingersGat Jun 25, 2026
f496343
Merge commit '12825aa1f4f6b47fabc47dda980d74df50d7dad4' into block-notes
SchrodingersGat Jun 29, 2026
cc6dc60
Merge branch 'master' into block-notes
SchrodingersGat Jun 30, 2026
0db3dd5
Merge commit '6865b0b6e6ed5464c25b4ccca7e3c523ce1876c5' into block-notes
SchrodingersGat Jul 1, 2026
6fb4bdd
Fix migrations
SchrodingersGat Jul 1, 2026
e3afed7
Fix missing import
SchrodingersGat Jul 1, 2026
856aa36
add docs
SchrodingersGat Jul 1, 2026
6f7c3ff
docs for rendering notes in reports
SchrodingersGat Jul 1, 2026
f89b608
Restrict queryset based on user view permissions
SchrodingersGat Jul 1, 2026
63e23bd
APi unit tests for note permissions
SchrodingersGat Jul 2, 2026
51988d2
Duplicate embedded images when copying notes
SchrodingersGat Jul 2, 2026
eab023d
Add unit test for note duplication
SchrodingersGat Jul 2, 2026
1c4f865
Merge commit '4895fbc9fed2c7df28729e3b38929fc26f767ae9' into block-notes
SchrodingersGat Jul 3, 2026
ec0f070
Add CHANGELOG
SchrodingersGat Jul 3, 2026
102091c
Merge commit 'f656ac72635b16eb8140680b9260f8b6b0e012d1' into block-notes
SchrodingersGat Jul 3, 2026
fc5fbde
Add 'copy_note' option to duplicate serializer
SchrodingersGat Jul 3, 2026
0fe4979
Add unit tests for data migrations
SchrodingersGat Jul 3, 2026
fa44747
Merge branch 'block-notes' of github.com:SchrodingersGat/InvenTree in…
SchrodingersGat Jul 3, 2026
18ea4b5
implement note duplication serializers
SchrodingersGat Jul 3, 2026
f4ae4a4
frontend UI elements
SchrodingersGat Jul 3, 2026
c86f36e
Merge commit '5df2adae6da3eba4fe7b7df1d8515a689f940e60' into block-notes
SchrodingersGat Jul 4, 2026
592a4ab
Fix migration conflicts
SchrodingersGat Jul 4, 2026
ebabc33
Use branch for playwrigh testing
SchrodingersGat Jul 4, 2026
427eb6d
Implement duplicate action for stock item
SchrodingersGat Jul 4, 2026
77114ca
Fix import
SchrodingersGat Jul 4, 2026
f52e76a
Updated playwright tests
SchrodingersGat Jul 4, 2026
1e293b3
Bug fix for receiving stock items
SchrodingersGat Jul 5, 2026
60a8b10
Add screenshot
SchrodingersGat Jul 5, 2026
ccc68f1
Fix api_version
SchrodingersGat Jul 5, 2026
cf1d9eb
Update unit tests
SchrodingersGat Jul 5, 2026
4e73e2f
Merge branch 'master' into block-notes
SchrodingersGat Jul 6, 2026
50fa444
Fix docs
SchrodingersGat Jul 6, 2026
f6e6b8a
Remove defunct tests
SchrodingersGat Jul 6, 2026
a48421f
Merge branch 'block-notes' of github.com:SchrodingersGat/InvenTree in…
SchrodingersGat Jul 6, 2026
c447f89
Merge commit 'e6a12564f3c5b5de8f2c6ac11911348102ff016d' into block-notes
SchrodingersGat Jul 6, 2026
fa5cc1c
Fix migration order
SchrodingersGat Jul 6, 2026
d6bd41c
Adjust import/export workflow
SchrodingersGat Jul 6, 2026
fedcf9e
Manual cleaning update
SchrodingersGat Jul 6, 2026
ed70559
Merge commit '1dd261e918e35fbfbc4d0797611967a450a5d756' into block-notes
SchrodingersGat Jul 15, 2026
00e0ed3
Fix migrations
SchrodingersGat Jul 15, 2026
112c417
Merge commit '4c4c86e180cc9e07ccc440851f401e8fb65529f0' into block-notes
SchrodingersGat Jul 21, 2026
3332535
Fix migration files
SchrodingersGat Jul 21, 2026
3e2f6f8
Fix for note save
SchrodingersGat Jul 21, 2026
0538b12
Adjust save ordering
SchrodingersGat Jul 21, 2026
b42bc95
Skip constraint checking in NoteSerializer
SchrodingersGat Jul 22, 2026
d588862
Merge branch 'master' into block-notes
SchrodingersGat Jul 22, 2026
ec81ba4
Custom validate_constraints on Note model
SchrodingersGat Jul 22, 2026
79e7139
Revert "Skip constraint checking in NoteSerializer"
SchrodingersGat Jul 22, 2026
14f66ad
Fix for note search
SchrodingersGat Jul 22, 2026
dc5ae6a
Fix for receive_line_items
SchrodingersGat Jul 22, 2026
d3bcac4
Shim model renderer for NoteTemplate
SchrodingersGat Jul 22, 2026
b7314ca
Fix playwright tests
SchrodingersGat Jul 22, 2026
cf88bbe
Adjust frontend CI
SchrodingersGat Jul 22, 2026
c70b9b6
Fix import/export CI job
SchrodingersGat Jul 22, 2026
c667fe4
Fix for data migration test
SchrodingersGat Jul 22, 2026
d56a391
Merge branch 'master' into block-notes
SchrodingersGat Jul 22, 2026
6f18c37
Fix migration test
SchrodingersGat Jul 23, 2026
8585754
Merge branch 'block-notes' of github.com:SchrodingersGat/InvenTree in…
SchrodingersGat Jul 23, 2026
dbe96ee
Merge commit '346d7e0a700eefdcd706e0a14ce5066da8fa7a3e' into block-notes
SchrodingersGat Jul 23, 2026
509f143
Adjust unit test
SchrodingersGat Jul 23, 2026
1af02bc
Merge commit '829a4462c7d82fbeabe5700729ad0adaf2244b45' into block-notes
SchrodingersGat Jul 23, 2026
6b32cbb
Merge commit '2a24dcfad95af2b585c6e9e715cebcd2a5d5ddd3' into block-notes
SchrodingersGat Jul 26, 2026
8010ba9
Merge commit '1cee1bdefbb13ee2476f3504ef94cca511b2637c' into block-notes
SchrodingersGat Jul 28, 2026
099a9dd
Fix conflicting migration
SchrodingersGat Jul 28, 2026
811e049
Merge commit 'e6d1ceb20b3e052382b1d5160ea100287c5a4617' into block-notes
SchrodingersGat Jul 28, 2026
7fc31b6
Merge commit 'bd1321c21f7a5d8a00ac702a5bbfb4848e9ecc44' into block-notes
SchrodingersGat Jul 31, 2026
3dbf0e2
Merge branch 'master' into block-notes
SchrodingersGat Jul 31, 2026
abf497d
Merge branch 'master' into block-notes
SchrodingersGat Aug 1, 2026
0e22efc
Merge commit '175bfda22f417f2dcb482d94a8b9a1bff73895a7' into block-notes
SchrodingersGat Aug 1, 2026
b065458
Fix unit test
SchrodingersGat Aug 2, 2026
a111da2
Merge branch 'master' into block-notes
SchrodingersGat Aug 2, 2026
f11685a
Run migration tests in parallel
SchrodingersGat Aug 2, 2026
8afa315
Robustify migration test
SchrodingersGat Aug 2, 2026
76249bf
Disable parallel options
SchrodingersGat Aug 2, 2026
1916591
Merge commit '4a7970b61f6894a037457fd137bf4032d2223062' into block-notes
SchrodingersGat Aug 7, 2026
3777152
Merge commit 'c0ed42549f8de26d75dd0db8b12a3bda6bc4af19' into block-notes
SchrodingersGat Aug 8, 2026
0be1978
Merge branch 'master' into block-notes
SchrodingersGat Aug 8, 2026
f32f655
Merge commit 'edae1564399139dff4903960c0fb45967b0cb22a' into block-notes
SchrodingersGat Aug 10, 2026
4f38ed6
Merge branch 'master' into block-notes
SchrodingersGat Aug 10, 2026
b70df71
Merge commit '42165a776751bfac38d497e97bddb96b3a811856' into block-notes
SchrodingersGat Aug 10, 2026
c681a7a
Merge branch 'master' into block-notes
SchrodingersGat Aug 11, 2026
8998a3c
Fix conflicting migration
SchrodingersGat Aug 11, 2026
831535f
Remove extraneous unit test
SchrodingersGat Aug 11, 2026
e5271eb
Merge commit '695b9c1dc24ba8bacacc99bc9c9eccd0090e29b0' into block-notes
SchrodingersGat Aug 13, 2026
bc1357e
Fix conflicting migrations
SchrodingersGat Aug 13, 2026
32d2328
Merge commit '9844a4805e5dfc8641039ea75a940b23611c12c9' into block-notes
SchrodingersGat Aug 13, 2026
8fa6e8a
Merge commit '4767edfe1b891f2e1a792fcba54d4d5a248f6a9e' into block-notes
SchrodingersGat Aug 13, 2026
11a12f2
Additional regression tests
SchrodingersGat Aug 14, 2026
6e4f537
Check permissions before deleting Note instance
SchrodingersGat Aug 14, 2026
9040735
Updated docs
SchrodingersGat Aug 14, 2026
8205e0a
Validate note model type
SchrodingersGat Aug 14, 2026
c6da120
Prevent discard of unsaved changes in note editor
SchrodingersGat Aug 14, 2026
1577227
Clean up dead code
SchrodingersGat Aug 14, 2026
b9b7978
Merge branch 'master' into block-notes
SchrodingersGat Aug 15, 2026
8945e79
Merge commit 'ee4ad7fd1051a033a3536145b94409ea663ef6f8' into block-notes
SchrodingersGat Aug 16, 2026
8b3038d
Fix migration conflict
SchrodingersGat Aug 16, 2026
0814c22
Merge branch 'master' into block-notes
SchrodingersGat Aug 16, 2026
f7d921a
Improved data migration
SchrodingersGat Aug 16, 2026
888238a
Merge branch 'block-notes' of github.com:SchrodingersGat/InvenTree in…
SchrodingersGat Aug 17, 2026
bcf83dc
Prefetch role groups
SchrodingersGat Aug 17, 2026
8194920
UI refactoring
SchrodingersGat Aug 17, 2026
c423c3b
Refactor permission checking code
SchrodingersGat Aug 17, 2026
44a7a75
Further code refactoring
SchrodingersGat Aug 17, 2026
b0d3e43
use DuplicateField helper
SchrodingersGat Aug 17, 2026
11b92d0
Refactoring
SchrodingersGat Aug 17, 2026
c38ff79
Add prefetch
SchrodingersGat Aug 18, 2026
05a5ed9
Throw exception rather than assert
SchrodingersGat Aug 18, 2026
a419839
Logic fix for notes editor
SchrodingersGat Aug 18, 2026
f537720
reimplement old background task
SchrodingersGat Aug 18, 2026
a7b298f
Merge branch 'master' into block-notes
SchrodingersGat Aug 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/frontend.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@
pip-dependency: psycopg2
- name: Set up test data
run: |
invoke dev.setup-test -iv
invoke dev.setup-test -iv -b multi-note # TODO: Fix this before merging

Check warning on line 139 in .github/workflows/frontend.yaml

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Complete the task associated to this "TODO" comment.

See more on https://sonarcloud.io/project/issues?id=inventree_InvenTree&issues=AZ-C4ybk9RJath4CVOfX&open=AZ-C4ybk9RJath4CVOfX&pullRequest=11971
invoke int.rebuild-thumbnails
- name: Install dependencies
run: invoke int.frontend-compile --extract
Expand Down Expand Up @@ -218,7 +218,7 @@
pip-dependency: psycopg2
- name: Set up test data
run: |
invoke dev.setup-test -iv
invoke dev.setup-test -iv -b multi-note # TODO: Fix this before merging

Check warning on line 221 in .github/workflows/frontend.yaml

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Complete the task associated to this "TODO" comment.

See more on https://sonarcloud.io/project/issues?id=inventree_InvenTree&issues=AZ-C4ybk9RJath4CVOfY&open=AZ-C4ybk9RJath4CVOfY&pullRequest=11971
invoke int.rebuild-thumbnails
- name: Install dependencies
run: invoke int.frontend-compile --extract
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/import_export.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@
- name: Setup Postgres Database
run: |
invoke migrate
invoke dev.setup-test -i
invoke dev.setup-test -i -b multi-note # TODO: remove the -b option once the multi-notes migration is merged into master

Check warning on line 93 in .github/workflows/import_export.yaml

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Complete the task associated to this "TODO" comment.

See more on https://sonarcloud.io/project/issues?id=inventree_InvenTree&issues=AZ-C4yjF9RJath4CVOfZ&open=AZ-C4yjF9RJath4CVOfZ&pullRequest=11971
- name: Create Plugin Data
run: |
pip install -U inventree-dummy-app-plugin==0.1.0
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Breaking Changes

- [#11971](https://github.com/inventree/InvenTree/pull/11971) is a major refactor of how notes are handled. Notes are now stored in a separate database table (in line with how attachments are handled), and each model instance can have multiple notes associated with it. The `notes` field has been removed from the individual models (and their associated API endpoints), and notes are now accessed via the new `/api/note/` endpoint. Existing notes data (and any embedded images) are automatically migrated to the new notes table, with the markdown content converted to HTML. Any external client applications which read or write the `notes` field via the API will need to be updated to use the new endpoint.
- [#12507](https://github.com/inventree/InvenTree/pull/12507) calling an invalid or repeated state transition now raises a ValidationError. Plugins implementing state transitions should evaluate the PR and adapt their usage of transitions to gain the new safeguards.

### Added
Expand Down
Binary file removed docs/docs/assets/images/build/build_notes.png
Binary file not shown.
Binary file added docs/docs/assets/images/concepts/notes-tab.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
147 changes: 147 additions & 0 deletions docs/docs/concepts/notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
---
title: Notes
---

## Notes

*Notes* allow free-form rich-text content to be written and stored against a specific object within InvenTree. Notes can be used to record observations, instructions, historical context, or any other information associated with a model instance.

!!! note "Business Logic"
Notes are not to be used for any core business logic within InvenTree. They are intended to provide supplementary documentation and context for objects, which can be useful for reference, communication, or reporting purposes. Plugins should not use them for storage and opt for object metadata or custom models instead.

Notes can be associated with various InvenTree models, and each model can have multiple notes associated with it. The user interface provides a dedicated "Notes" tab on the detail page of any model that supports notes, allowing users to easily view and manage notes for that object.

### Notes Tab

Any model which supports notes will have a "Notes" tab on its detail page. This tab displays the content of the currently selected note, along with a sidebar listing all notes for that object by title:

{{ image("concepts/notes-tab.png", "Notes Tab Example") }}

## Note Fields

Each note has the following attributes:

| Field | Description |
| --- | --- |
| Title | A short title for the note (*required*) |
| Description | An optional brief description of the note's purpose |
| Content | The rich-text body of the note |
| Primary | Marks this note as the default note for the object |

## Primary Note

When a model has multiple notes, one may be designated as the *primary* note. The primary note is indicated by a {{ icon("star") }} icon in the note sidebar.

- When the first note is created for a model instance, it is automatically set as the primary note.
- Only one note per model instance can be marked as primary at any time.
- The primary note is opened by default when navigating to the Notes tab.

## Rich Text Editing

Note content is edited using a rich-text (WYSIWYG) editor. The following formatting options are available:

- **Text formatting**: Bold, italic, underline, strikethrough, inline code, code blocks
- **Headings**: H1 through H4
- **Structure**: Blockquotes, horizontal rules
- **Lists**: Bullet lists and ordered lists
- **Links**: Insert and remove hyperlinks
- **Tables**: Insert tables; add/remove rows and columns; toggle header rows
- **Images**: Embed images uploaded directly into the note

### Inserting Images

Images can be embedded in note content in the following ways:

- Click the {{ icon("photo") }} button in the editor toolbar to select a file from your device
- Paste an image directly from the clipboard
- Drag and drop an image file into the editor

Uploaded images are stored on the server and linked to the note. If a note is edited or deleted, any images that are no longer referenced by any note are automatically removed.

## Adding a Note

To add a note to an object:

1. Navigate to the object's detail page
2. Click on the **Notes** tab
3. Click the **Add Note** button
4. Fill in the `Title` (required) and optional `Description` fields
5. Click **Submit**

The new note will appear in the sidebar ready for editing.

## Editing Note Content

Note content is shown in read-only mode by default. To make changes:

1. Click the {{ icon("pencil") }} icon in the note header to enter edit mode
2. Use the toolbar to format content, insert images, or add tables
3. Click the {{ icon("device-floppy") }} icon, or press **Ctrl+S** / **Cmd+S**, to save changes
4. Click the {{ icon("check") }} icon to exit edit mode once all changes are saved

!!! warning "Unsaved Changes"
If you navigate away from the Notes panel or leave the page while in edit mode with unsaved changes, InvenTree will prompt you to confirm before proceeding.

### Resetting Changes

While in edit mode, clicking the {{ icon("reload") }} icon discards any unsaved changes and reloads the last saved version of the note.

## Editing Note Properties

To change a note's title or description, open the actions menu in the note header and select **Edit Note**.

## Deleting a Note

To delete a note, open the actions menu in the note header and select **Delete Note**.

!!! danger "Permanent Action"
Deleting a note is permanent and cannot be undone. Any images embedded in the note that are not referenced elsewhere will also be removed.

## Note Templates

Note templates are pre-defined notes that can be used as a starting point when adding a new note to any model instance. They allow administrators to standardize common note structures and reduce repetitive data entry.

### Creating Notes from Templates

When adding a new note to an object, an optional **From Template** field is available. Selecting a template pre-fills the **Title**, **Description**, and **Content** fields with the template's content. These fields can then be edited before saving.

To create a note from a template:

1. Navigate to the object's detail page and open the **Notes** tab
2. Click the **Add Note** button
3. In the **From Template** field, select an existing template from the dropdown
4. The **Title**, **Description**, and **Content** fields are automatically populated from the template
5. Edit any fields as needed
6. Click **Submit** to save the note

!!! info "Template Filters"
The template dropdown only shows templates that are applicable to the current model type, plus any templates that are not restricted to a specific model type.

### Managing Note Templates

Note templates are managed by staff users via the **Admin Center**.

To access note templates:

1. Navigate to **Settings** > **Admin Center**
2. Select the **Note Templates** panel

This panel provides the same rich-text editor interface used for regular notes. Templates created here are available to all users when adding notes across the system.

#### Creating a Template

1. In the **Note Templates** panel, click **Add Note Template**
2. Enter a **Title** (required) and optional **Description**
3. Optionally select a **Model Type** to restrict the template to a specific kind of object (e.g. *Part*, *Build Order*). Leave blank to make the template available for all model types
4. Click **Submit**, then edit the template content in the editor

#### Editing a Template

Select a template from the sidebar, then use the same edit workflow as for regular notes: click the {{ icon("pencil") }} icon, make changes, and save with {{ icon("device-floppy") }} or **Ctrl+S** / **Cmd+S**.

#### Deleting a Template

Open the actions menu in the template header and select **Delete Note Template**.

!!! note
Deleting a template does not affect any notes that were previously created from it.
4 changes: 2 additions & 2 deletions docs/docs/manufacturing/build.md
Original file line number Diff line number Diff line change
Expand Up @@ -211,9 +211,9 @@ Files attachments can be uploaded against the build order, and displayed in the

### Notes

Build order notes (which support markdown formatting) are displayed in the *Notes* tab:
One or more rich-text notes can be attached to a build order, and are displayed in the *Notes* tab.

{{ image("build/build_notes.png", title="Notes") }}
[Read about notes](../concepts/notes.md).

## External Build Orders

Expand Down
4 changes: 3 additions & 1 deletion docs/docs/part/views.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,4 +149,6 @@ The *Part Attachments* tab displays file attachments associated with the selecte

### Notes

A part may have notes attached, which support markdown formatting.
A part may have one or more rich-text notes attached.

[Read about notes](../concepts/notes.md).
2 changes: 1 addition & 1 deletion docs/docs/plugins/develop.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Consider the use-case for your plugin and define the exact function of the plugi
- Do you need to run in the background ([ScheduleMixin](./mixins/schedule.md)) or when things in InvenTree change ([EventMixin](./mixins/event.md))?
- Does the plugin need configuration that should be user changeable ([SettingsMixin](./mixins/settings.md)) or static (just use a yaml in the config dir)?
- You want to receive webhooks? Do not code your own untested function, use the WebhookEndpoint model as a base and override the perform_action method.
- Do you need the full power of Django with custom models and all the complexity that comes with that welcome to the danger zone and [AppMixin](./mixins/app.md). The plugin will be treated as a app by django and can maybe rack the whole instance.
- Do you need the full power of Django with custom models and all the complexity that comes with that - welcome to the danger zone and [AppMixin](./mixins/app.md). The plugin will be treated as a app by django and can maybe rack the whole instance.

### Define Metadata

Expand Down
95 changes: 92 additions & 3 deletions docs/docs/report/helpers.md
Original file line number Diff line number Diff line change
Expand Up @@ -979,9 +979,98 @@ Length: {{ length_value }}
{% endraw %}
```

## Notes

[Notes](../concepts/notes.md) are rich-text documents that can be attached to most InvenTree model instances. Two template tags are available for accessing note content in a report.

### note

The `note` tag returns the rendered HTML content of a note, ready to embed directly in a report. Any images embedded in the note are automatically resolved to their base64-encoded data so that they appear in the generated PDF.

::: report.templatetags.report.note
options:
show_docstring_description: false
show_source: False

If no `title` argument is given, the [primary note](../concepts/notes.md#primary-note) is returned. If a `title` is given, the note whose title matches (case-insensitively) is returned instead. An empty string is returned when no matching note exists.

#### Example

```html
{% raw %}
{% load report %}

<!-- Render the primary note for the part -->
{% note part as part_note %}
<div>{{ part_note }}</div>

<!-- Render a note by title -->
{% note part "Assembly Instructions" as instructions %}
<div>{{ instructions }}</div>
{% endraw %}
```

!!! info "Safe HTML Output"
The `note` tag returns pre-sanitized HTML and is marked safe for direct template rendering. Do **not** additionally wrap it with `| safe` or `| markdownify` — the content has already been processed.

### note_instance

The `note_instance` tag returns the `Note` object itself, giving access to its individual fields. This is useful when you need to display the note title, description, or metadata alongside its content.

::: report.templatetags.report.note_instance
options:
show_docstring_description: false
show_source: False

A `Note` object exposes the following attributes:

| Attribute | Description |
| --- | --- |
| `title` | The title of the note |
| `description` | An optional short description of the note |
| `content` | The raw HTML content of the note |
| `primary` | `True` if this is the primary note for the model instance |
| `updated` | Timestamp of the last modification |
| `updated_by` | The user who last modified the note |

#### Example

```html
{% raw %}
{% load report %}

{% note_instance part as primary_note %}
{% if primary_note %}
<h3>{{ primary_note.title }}</h3>
{% if primary_note.description %}<p><em>{{ primary_note.description }}</em></p>{% endif %}
{% note part as note_content %}
<div>{{ note_content }}</div>
{% endif %}
{% endraw %}
```

### Iterating Over All Notes

When a model has multiple notes and you want to render all of them, access the `notes` queryset directly:

```html
{% raw %}
{% load report %}

{% for n in part.notes.all %}
<h3>{{ n.title }}</h3>
{% note part n.title as note_content %}
<div>{{ note_content }}</div>
{% endfor %}
{% endraw %}
```

## Rendering Markdown

Some data fields (such as the *Notes* field available on many internal database models) support [markdown formatting](https://en.wikipedia.org/wiki/Markdown). To render markdown content in a custom report, there are template filters made available through the [django-markdownify](https://github.com/erwinmatijsen/django-markdownify) library. This library provides functionality for converting markdown content to HTML representation, allowing it to be then rendered to PDF by the InvenTree report generation pipeline.
Some data fields (such as those provided by custom plugin models) may support [markdown formatting](https://en.wikipedia.org/wiki/Markdown). To render markdown content in a custom report, there are template filters made available through the [django-markdownify](https://github.com/erwinmatijsen/django-markdownify) library. This library provides functionality for converting markdown content to HTML representation, allowing it to be then rendered to PDF by the InvenTree report generation pipeline.

!!! info "Notes"
[Notes](../concepts/notes.md) content is rich-text (stored as HTML) rather than markdown, and is already sanitized. Use the [note](#note) tag to render it - do not pass it through `markdownify`.

To render markdown content in a report, consider the following simplified example:

Expand All @@ -990,9 +1079,9 @@ To render markdown content in a report, consider the following simplified exampl

{% load markdownify %}

<h3>Part Notes</h3>
<h3>Description</h3>
<p>
{{ part.notes | markdownify }}
{{ some_markdown_field | markdownify }}
</p>
{% endraw %}
```
Expand Down
1 change: 1 addition & 0 deletions docs/mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ nav:
- Project Codes: concepts/project_codes.md
- Attachments: concepts/attachments.md
- Parameters: concepts/parameters.md
- Notes: concepts/notes.md
- Tags: concepts/tags.md
- Barcodes:
- Barcode Support: barcodes/index.md
Expand Down
9 changes: 7 additions & 2 deletions src/backend/InvenTree/InvenTree/api_version.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
"""InvenTree API version information."""

# InvenTree API version
INVENTREE_API_VERSION = 532
INVENTREE_API_VERSION = 533
"""Increment this API version number whenever there is a significant change to the API that any clients need to know about."""

INVENTREE_API_TEXT = """

v533 -> 2026-08-16 : https://github.com/inventree/InvenTree/pull/11971
- Removes direct "notes" field from any models which previously supported markdown notes
- Adds a generic "Note" model which can be attached to any model type via a generic foreign key relationship
- Allow multiple notes to be attached to a single object, and for notes to be created / edited / deleted via the API

v532 -> 2026-08-15 : https://github.com/inventree/InvenTree/pull/12422
- Adds "piece_count" field to the BomItem model and API endpoints (for cut-to-length parts)

Expand Down Expand Up @@ -49,7 +54,7 @@
- Adds new "disassemble" API endpoint for stock items
- Allows a stock item to be broken down into component parts, based on its Bill of Materials

v519 -> 2026-07-09 : https://github.com/inventree/InvenTree/pull/TODO
v519 -> 2026-07-09 : https://github.com/inventree/InvenTree/pull/12334
- Adds optional "roles" and "permissions" fields to the /user/me/ API endpoint, via the "?roles=true" query parameter

v518 -> 2026-07-09 : https://github.com/inventree/InvenTree/pull/12341
Expand Down
4 changes: 2 additions & 2 deletions src/backend/InvenTree/InvenTree/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,11 @@ def ready(self):
def remove_obsolete_tasks(self):
"""Delete any obsolete scheduled tasks in the database."""
obsolete = [
'data_exporter.tasks.cleanup_old_export_outputs',
'InvenTree.tasks.delete_expired_sessions',
'stock.tasks.delete_old_stock_items',
'label.tasks.cleanup_old_label_outputs',
'report.tasks.cleanup_old_report_outputs',
'data_exporter.tasks.cleanup_old_export_outputs',
'stock.tasks.delete_old_stock_items',
]

try:
Expand Down
Loading
Loading