Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
228 commits
Select commit Hold shift + click to select a range
c618d6d
[FIX] html_builder, *: set contenteditable attribute on correct elements
loco-odoo Oct 8, 2025
914a209
[FIX] mrp: non-deterministic duration fail assertion in backorder test
mma1377 Oct 15, 2025
4b3569e
[REF] point_of_sale, pos_*: improve tax computation in PoS
davidmonnom Oct 2, 2025
a71a799
[REM] l10n_fr_pos_cert: remove obsolete migration deprecated POS sequ…
bda-odoo Oct 9, 2025
245e589
[FIX] account_edi_ubl_cii: missing parenthesis in invoice_edi_format
svfu-odoo Aug 28, 2025
9c09304
[FIX] account_peppol: disallow disabling services
svfu-odoo May 16, 2025
0c616a0
[FIX] purchase_stock: prevent type mismatch error on valuation report
bhna-odoo Oct 13, 2025
075ae3b
[IMP] hr_recruitment: copy attachments from pool to applicant
dbeguin Jun 25, 2025
5009d2d
[IMP] hr_attendance: improve presence state logic and tooltips
Oct 22, 2025
dfdefa3
[FIX] project_timesheet_holidays: skip validation for flexible hours
SaraBriki Aug 29, 2025
eb438af
[IMP] hr_attendance: add record rule to limit country access
amah-odoo Oct 1, 2025
cad5f65
[IMP] hr_attendance: add SA overtime ruleset data
amah-odoo Oct 1, 2025
bd30fa4
[REM] point_of_sale,*: remove python dead code
manv-afk Aug 28, 2025
29b3bf5
[IMP] spreadsheet: update o_spreadsheet to latest version
rrahir Oct 30, 2025
bc377d3
[FIX] website: create test menu for test_website_edit_menus_delete_pa…
khaj-odoo Oct 16, 2025
a54a305
[IMP] mrp,purchase,repair,stock: hardcode width for priority fields
lugr-odoo Apr 25, 2025
04df42c
[IMP] mail: allow adding more poll options before filling them
tsm-odoo Oct 30, 2025
80d043b
[IMP] mail: refactor message previewText
phenix-factory Oct 28, 2025
d75f103
[IMP] account: use better management of invalid statements
proose Dec 31, 2024
f839250
[FIX] mail: prevent traceback when adding emojis to a poll option
nees-odoo Oct 29, 2025
c8d81a7
[IMP] hr: format private and emergency phone numbers on employee
SaraBriki Sep 4, 2025
ca47a9e
[FIX] hr_expense: Broken access rights
Jul 15, 2025
e0aecbd
[FIX] website_sale: make "Add to Cart" translatable
metu-odoo Oct 30, 2025
4ec2814
[IMP] hr_skills: Make resume section consider contract dates
YassinWalid Sep 22, 2025
783ea2d
[FIX] hr_attendance: gaurd the unusual_days keys access
amah-odoo Sep 24, 2025
c593675
[IMP] pos_glory_cash: changes for certification
MaxTheWhale Sep 2, 2025
8affa00
[FIX] html_editor: prevent unformatted typing at link edges
walidsahli Sep 30, 2025
5548043
[FIX] mail: search panel in mailbox takes whole screen width in mobile
alexkuhn Oct 28, 2025
7b78b7f
[FIX] website_blog, *: allow editing blog landing title
SergeBayet Oct 27, 2025
9ab89c2
[IMP] web: sample data backpedaling
PiaCOS Oct 27, 2025
664876d
[FIX] mrp: workorder duration inverse matching compute logic
mma1377 Oct 7, 2025
6ee721d
[IMP] web: calendar view wrong end time at create
PiaCOS Oct 8, 2025
58392e9
[FIX] stock: prevent error when horizon days field is empty
adip-odoo Oct 13, 2025
8772a6e
[FIX] tools: prevent error when uploading invalid pdf file
utma-odoo Oct 27, 2025
0f13ce9
[FIX] hr: traceback when archiving employee
iada-odoo Oct 2, 2025
54ebb4c
[FIX] project_todo: reset context to avoid adding additional todo vals
xavierbol Oct 28, 2025
9d5efd1
[FIX] im_livechat, *: last agent leaving from chat window ends convo
alexkuhn Oct 30, 2025
c377613
[FIX] pos_imin: iMin cashbox not working
tong-odoo Oct 28, 2025
6f91f3f
[FIX] mrp: prevent error on splitting multiple manufacturing orders a…
adip-odoo Oct 27, 2025
f29066b
[FIX] im_livechat: fix operator not able to pin message in LC session
xavieralt Oct 29, 2025
76c891e
[IMP] html_builder, website: reset crop after shape removal
bvr-odoo Oct 16, 2025
c85df20
[FIX] mrp_subcontracting: prevent unbuild subcontracted MO
plha-odoo Oct 3, 2025
2235a3a
[FIX] pos_self_order: remove call to resetTableIdentifier
pedrambiria Oct 21, 2025
0c8ff49
[FIX] pos_sale: prevent setting lot when user cancels lot selection
pedrambiria Oct 27, 2025
d298773
[FIX] mass_mailing: ensure MassMailingHtmlField works on Safari
Ephoniz Oct 28, 2025
bf434be
[IMP] cloud_storage: disable cloud storage for chats with ai agents
schoffeniels Oct 15, 2025
eaea723
[PERF] orm: skip nary optimization if nothing changed
kmagusiak Oct 17, 2025
f0d9af7
[IMP] orm: doamin |, & with bool
kmagusiak Oct 21, 2025
0a3eaa1
[IMP] hr_payroll: edit scaffold for payroll localization
dhka-odoo Aug 4, 2025
dfcdfed
[FIX] website: missing flush in fuzzy search
kmagusiak Oct 21, 2025
8ceea09
[IMP] website*: remove useless invisible fields
Gorash Oct 31, 2025
1c86772
[IMP] hr_attendance: enhance inheritability
amah-odoo Sep 4, 2025
6edf180
[IMP] survey: remove unnecessary sudo
pyduf Oct 2, 2025
b898831
[IMP] survey: prevent submission after showing answers
pyduf Oct 20, 2025
e2995b7
[FIX] html_builder, website: prevent removing last list item in form
bso-odoo Oct 9, 2025
5b4f5a2
[FIX] hr: move admin structure
jjmaksoud Oct 13, 2025
d8fb676
[FIX] hr_recruitment_skill: prevent ZeroDivisionError in job_total
arkp-odoo Oct 6, 2025
d4c68ab
[FIX] website: correct wrong resources
loco-odoo Oct 30, 2025
aa7b4c6
[FIX] account_edi_ubl_cii: Fix BIS3 product price
antoine162 Sep 12, 2025
21fe9a9
[IMP] website: add description input field in map snippet
dtda-odoo May 27, 2025
8f97cba
[FIX] website: fix get a google map Api key option
dtda-odoo Mar 28, 2025
c2100d0
[IMP] website: adds color options in description of map snippet
dtda-odoo May 29, 2025
65bd1c8
[IMP] website: add Hoot test for description in map snippet
dtda-odoo Oct 16, 2025
d46c437
[FIX] hr_recruitment_skills: fix talent's skills disappearing when cr…
Xiran-Kali Sep 26, 2025
a9a237f
[FIX] html_editor: fix video url handling for facebook videos
rahg-odoo Oct 16, 2025
6d37794
[FIX] hr: fixed available hours on week bug
djsh-odoo Aug 5, 2025
19a0304
[IMP] iot_drivers: restart odoo from all protocols
loouis-t Oct 17, 2025
36f7417
[IMP] website,*: improve API of the builder option
Goaman Jul 28, 2025
320bda1
[FIX] website: restore header options in sidebar
romo-odoo Oct 29, 2025
168fc83
[FIX] website_sale: remove bad applyTo
FrancoisGe Oct 29, 2025
8f7735e
[FIX] hr_holidays: Test failing with dynamic dates
Megaaaaaa Aug 27, 2025
9e3b9bd
[FIX] mail: prevent crash when showing result of unknown poll
tsm-odoo Oct 31, 2025
e75c5e0
[FIX] hr_timesheet: add freeze_time to assume timesheets created in w…
xavierbol Oct 31, 2025
b92876d
[FIX] mail: fix use foward refs to parent
tsm-odoo Oct 31, 2025
18b1a03
[FIX] hr_holidays: Add back a well-formatted "Extra Hours" section in…
BeBel42 Aug 21, 2025
773b222
[FIX] pos_self_order: fix table sharing between devices
davidmonnom Oct 22, 2025
f1f7c9d
[CLA] signature for Vitor29Narciso
Vitor29Narciso Oct 28, 2025
1ad63fc
[FIX] mail: prevent error when disabling blur background in CallPreview
nmak-odoo Oct 31, 2025
58af74f
[PERF] hr: Speed-up `voip_hr` record rule.
pivi-odoo Oct 24, 2025
1db938f
[FIX] purchase: prevent deletion of UoM when it is in use
aamo-odoo Oct 14, 2025
fb8f397
[FIX] web: review datetime_picker hover and darkmode
mano-odoo Oct 29, 2025
2a64c29
[FIX] sale_gelato: truncate too long address fields
anko-odoo Oct 24, 2025
ad7c7ba
[FIX] website_sale: fix rtl product list card
mamr-odoo Oct 30, 2025
b3fa87c
[IMP] mail: reduce call permission dialog size
akap-odoo Oct 31, 2025
e384439
[FIX] pos_online_payment: sync partner after adding online payment line
pedrambiria Oct 21, 2025
d6364f5
[FIX] point_of_sale: allow searching product with dynamic attribute
pedrambiria Oct 23, 2025
501f0cc
[FIX] l10n_tr_nilvera_einvoice: refresh BytesIO for file resubmission
alkh-odoo Oct 24, 2025
8606e8f
[FIX] base_import: reset start line after test import
hubvd Oct 2, 2025
782a0fc
[IMP] mail: add favorite channels
seb-odoo Oct 29, 2025
bb1d1b2
[FIX] mail: prevent traceback on adding reaction from pinned message …
nees-odoo Oct 10, 2025
b620b20
[FIX] point_of_sale: Auto-trigger IndexedDB upgrade for missing tables
pedrambiria Oct 27, 2025
760082c
[FIX] pos{,_restaurant}_stripe: fix tip after payment
andg-odoo Oct 31, 2025
659655a
[FIX] project: hide slider options in project sharing view
kthe-odoo Oct 31, 2025
3434845
[FIX] purchase: get currency of current order
Abridbus Oct 28, 2025
ca6096e
[FIX] mail: replace `new meeting` icon with an SVG
chgo-odoo Oct 29, 2025
cc5919c
[FIX] account: exclude archived res_partner_bank records when computi…
orzh-odoo Oct 14, 2025
b7fc1ec
[FIX] mass_mailing: add mail contact to mail list through wizard
pajo-odoo Oct 7, 2025
06545b4
[FIX] account: fix tax string computation issue
kcv-odoo Oct 30, 2025
5f226ed
[IMP] im_livechat: add line break when author changes in session history
rapr-odoo Sep 6, 2025
f65d9a8
[IMP] web: datetime_picker: new way to toggle range
adr-odoo Oct 27, 2025
5f3fe82
[FIX] website: fix countdown boxes background color removal issue
dtda-odoo Aug 25, 2025
703eb2c
[FIX] sale_project: prevent error when creating sale order for project
assh-odoo Oct 17, 2025
224c4ba
[FIX] web_editor: Make modify_image controller robust to missing data
jeevanism Oct 26, 2025
b0996aa
[FIX] html_editor: Add test for modify_image without data
jeevanism Oct 26, 2025
98becce
[IMP] base,all: remove deprecated 't-raw' ir.qweb directive
Gorash Oct 2, 2025
b936796
[IMP] html_builder, website: enable vertical alignment in snippets
shsa-odoo Sep 23, 2025
f4fdfb7
[FIX] mail: id in mail_composer_plugin
zel-odoo Oct 30, 2025
25560d6
[FIX] account: Recompute narration language on partner language change.
Alpha9584 Oct 9, 2025
69590e8
[FIX] point_of_sale, pos_*: ensure local records are kept when syncing
davidmonnom Sep 12, 2025
ce3eb4f
[IMP] mass_mailing: handle visual assets in builder
thjo-odoo Oct 8, 2025
438ec1a
[IMP] mass_mailing, web: add conditional visibility on snippets
thjo-odoo Oct 2, 2025
51a183c
[FIX] crm: we don't have `/crm` in the URL anymore
std-odoo Oct 31, 2025
07e34e7
[IMP] mail: enable filtering by activities done_date
Sep 22, 2025
e825d03
[FIX] l10n_kh: fix duplicated tax names
vin-odoo Oct 24, 2025
31ebcbf
[FIX] point_of_sale, pos_hr: prevent gaps in session names
pedrambiria Oct 27, 2025
3b99af0
[FIX] html_builder, website: no o_editable on non-translatable nodes
nle-odoo Oct 22, 2025
f92ea73
[FIX] mail: fix sub-channel search tour
tsm-odoo Oct 31, 2025
b9b16c7
[FIX] mail: prevent crash when scrolling to poll
tsm-odoo Nov 3, 2025
3012395
[FIX] im_livechat: fix race condition
phenix-factory Oct 29, 2025
9a09173
[REF] test_translation_import: rename into test_translation
rugo-odoo Oct 15, 2025
a098f7e
[MOV] test_orm: constraint.js to test_translation
rugo-odoo Oct 20, 2025
3c41766
[MOV] test_orm: x2many.js to test_web
rugo-odoo Oct 20, 2025
89d4519
[REM] test_orm: remove `web` dependency
rugo-odoo Oct 20, 2025
6ac6e67
[IMP] im_livechat: add live chat channels configuration menu
nees-odoo Jul 10, 2025
4cc6a74
[REF] mail, *: replace core/common/record imports by model/export
alexkuhn Nov 3, 2025
0372b79
[FIX] html_editor: fix `is_node_editable_predicates` check.
walidsahli Sep 12, 2025
86b8107
[FIX] website_sale: unescape placeholder for search
aksi-odoo Oct 10, 2025
a795450
[FIX] l10n_sa_edi: Check for misconfigured invoice if empty country
jacw-odoo Oct 10, 2025
a947016
[FIX] sale, web: adapt section on report and portal
mano-odoo Oct 28, 2025
c76746b
[IMP] point_of_sale: redesign dialogs for POS
Oct 21, 2025
d9ff731
[IMP] product, website_sale(_comparison): Quick clean on attribute view
fmalfroid Oct 9, 2025
cc67c9a
[IMP] mail: Typing use channel directly
phenix-factory Oct 22, 2025
0d4c18f
[IMP] website: improve UI of HTML/CSS Editor warning modal
chdh-odoo Oct 27, 2025
5be5896
[FIX] account: load CoA data from other modules with demo
william-andre Nov 3, 2025
bc1294d
[IMP] pos_loyalty: show loyalty points on customer display
abhk-odoo Oct 27, 2025
e7aa671
[IMP] mail: introduce MentionPlugin
zel-odoo Oct 30, 2025
270e35b
[FIX] base: fix date formats
bastien-ipb Oct 28, 2025
fb438b4
[FIX] mass_mailing: use overlay offset for basic editor
abd-msyukyu-odoo Oct 28, 2025
b230481
[FIX] mass_mailing: ensure correct editor instance on record switch
abd-msyukyu-odoo Oct 28, 2025
06f767e
[FIX] mass_mailing: fix HtmlField usages in Form view
robodoo Nov 3, 2025
80a887b
[FIX] sale_gelato: remove 'upgrade_boolean' from Gelato setting
anko-odoo Oct 9, 2025
7ce495b
[FIX] website: make menu appear active only if path matches exactly
Dj0ulo Oct 16, 2025
7e22920
[FIX] sale: product catalog price with discounts enabled
Feyensv Oct 23, 2025
719529d
[IMP] web: whitelist website and website blog for the linter
loco-odoo Oct 15, 2025
04b80d4
[LINT] html_builder, *: lint website related files
loco-odoo Sep 24, 2025
5b3d1ae
[FIX] website: fix bg color selector
FrancoisGe Oct 30, 2025
8f64292
[FIX] hr: Remove dead field from whitelist
tivisse Oct 7, 2025
7d16ea7
[FIX] website_sale: ProductsListPageOption should be always visible
FrancoisGe Oct 29, 2025
5df1d4b
[FIX] analytic: fix error when grouping by any field in analytic acco…
reka-odoo Oct 28, 2025
aa64683
[FIX] web: datetime: avoid double picker
rfr-odoo Oct 31, 2025
7bc5efa
[IMP] l10n_in: improve GSTR section assignment logic
jasa-odoo Oct 29, 2025
2819c2d
[FIX] mail: fa-user(s)-plus should be oi-user
alexkuhn Nov 3, 2025
a8d2a17
[FIX] account: Add a test to ensure the product description is correct
iada-odoo Aug 1, 2025
90aa32c
[ADD] l10n_tr_nilvera_einvoice_extended, l10n_tr_nilvera_einvoice: Ad…
alkh-odoo Jul 22, 2025
ac9a925
[FIX] l10n_in: Use partner autocomplete data to set GST Treatment
hamo-odoo Nov 3, 2025
0141da4
[ADD] l10n_in: introduce new 40% GST tax rates
masm-odoo Sep 26, 2025
e517235
[FIX] base: incorrect address format for Chile
khsr-odoo Oct 10, 2025
edd93e6
[FIX] web: refine ribbon position in modal forms with statusbar
sauc-odoo Sep 9, 2025
943ea19
[FIX] point_of_sale: hide total on payment buttons without cash rounding
jipr-odoo Oct 29, 2025
80c5cf1
[IMP] mail, *: use `count` pseudo in tests when it's possible
maki-odoo Sep 25, 2025
b936cfb
[FIX] partner_autocomplete: logo not fetching on search and enrich
hamo-odoo Oct 10, 2025
13d0841
[FIX] web: remaining days use formatter
bastien-ipb Nov 3, 2025
d5d9c69
[FIX] l10n_sa_edi: correct placeholder of street2 field
masm-odoo Oct 10, 2025
8e4b39a
[FIX] html_editor: preserve cursor on single backtick
dhba-odoo Jun 5, 2025
a1aac0a
[IMP] html_editor: wrap selected text in inline code
dhba-odoo Feb 19, 2025
8223a9e
[IMP] html_editor: replace ZWS with feffs in inline code elements
dhba-odoo Aug 1, 2025
d1b6181
[FIX] html_editor: empty inline code formatting with backticks
dhba-odoo Apr 17, 2025
0d66e96
[REM] html_editor: remove deprecated padLinkWithZwnbsp method
dhba-odoo Oct 31, 2025
5c787f7
[FIX] mrp: reference correct dest move for split backorders
vandroogenbd Aug 21, 2025
c4b2dd8
[FIX] website: remove duplicate text highlight from ancestors
walidsahli Aug 13, 2025
d8d5869
[FIX] core: fix migration order
aj-fuentes Nov 3, 2025
993b644
[IMP] stock_picking_batch: allow to extend auto wave conditions
chienandalu Sep 19, 2025
41e4892
[IMP] mail,im_livechat: avoid delete param
phenix-factory Nov 3, 2025
d5e389c
[FIX] web: align close icon on badges
estoj Oct 22, 2025
812652a
[FIX] html_builder: use BaseOptionComponent in test
FrancoisGe Oct 30, 2025
baa8a76
[FIX] hr: fix employee avatar display in mobile UI
Nov 4, 2025
278216a
[PERF] hr_recruitment: Speed-up recruitment views
pivi-odoo Oct 20, 2025
e8f48bd
[FIX] website: loader progress bar color
estoj Oct 23, 2025
1a78a43
[IMP] website_hr_recruitment: show remote jobs with country filter
Aug 14, 2025
2fcaa20
[IMP] fleet: add engine option for bike-type vehicles
rmun-odoo Apr 15, 2025
74634dc
[IMP] fleet: warnings on contract type specific
amga-odoo Jun 23, 2025
81da455
[FIX] hr_recruitement: scope kanban styles to prevent UI conflicts
Oct 17, 2025
2c513d6
[IMP] web: display app icon header
sami-odoo Sep 18, 2025
ef03fc7
[FIX] web: tests - restore mock fields defaults
jum-odoo Nov 3, 2025
5e66b26
[FIX] mass_mailing: notify user of obsolete snippets
abd-msyukyu-odoo Oct 31, 2025
8d9f79b
[FIX] mass_mailing(_themes): increment mass_mailing snippets vxml
abd-msyukyu-odoo Sep 26, 2025
d0439e6
[FIX] mass_mailing: ensure unknown email format is displayed
abd-msyukyu-odoo Oct 31, 2025
17bcf2b
[FIX] mass_mailing: ensure codeView commitChanges succeeds
abd-msyukyu-odoo Oct 31, 2025
704763e
[FIX] mass_mailing: post-fresh-options fixes
abd-msyukyu-odoo Oct 31, 2025
205b35b
[IMP] mass_mailing(_themes): increment mass_mailing snippets vxml
robodoo Nov 4, 2025
c001d7e
[IMP] web, mail *: improve states of systray items
chgo-odoo Oct 6, 2025
79b369a
[IMP] (website_)payment, sale: move onboarding logic to res.company
shrm-odoo Oct 3, 2025
84fed79
[REM] iot_base: merge iot_base with iot
loouis-t Oct 15, 2025
16680fd
[REF] mail: move Rtc.state props to Rtc + add types
alexkuhn Nov 3, 2025
0e2c946
[IMP] spreadsheet: update o_spreadsheet to latest version
pro-odoo Nov 3, 2025
3b74d9f
[FIX] spreadsheet: odoo pivot unused
pro-odoo Nov 3, 2025
17a7673
[IMP] spreadsheet: update o_spreadsheet to latest version
robodoo Nov 4, 2025
366b8a8
[FIX] html_editor: getAdjacentCharacter for non-collapsed selection
deso-odoo Nov 4, 2025
72ff948
[FIX] product: pricelist report
Feyensv Nov 3, 2025
c128c80
[IMP] hr: redirect version fields to correct view
romaincarlier4 Oct 17, 2025
9f2b9e2
[IMP] tools: reimplement frozendict
thle-odoo Oct 10, 2025
0b19a07
[IMP] account: reports text engine POC
h4818 Oct 30, 2025
585cccc
[IMP] mail: introduce BusSyncMixin
zel-odoo Nov 4, 2025
f859f93
[FIX] point_of_sale: configurable product access rights issue
hahu-odoo Oct 10, 2025
5861759
[FIX] website_sale_collect: subtract the line qty only
vchu-odoo Oct 29, 2025
03cae30
[REF] mail, *: simplify code of message confirm delete slightly
alexkuhn Nov 3, 2025
e8115b7
[FIX] mrp: update BoM on scrap when product is changed
prri-odoo Oct 16, 2025
2d35d99
[FIX] l10n_be,point_of_sale: exclude non-trade receivable partners fr…
shgabr Oct 8, 2025
c48e8f7
[FIX] account: update reconciliation model data
shgabr Oct 16, 2025
ab63489
[FIX] hr_work_entry: Fix work entry type domain in multiselect
karygauss03 Oct 9, 2025
eaaf8d1
[FIX] stock: fix 230199 PR test
nouraellm Oct 8, 2025
fdc6047
[FIX] l10n_in_hr_payroll: fixed the sandwich leave duration
yava-odoo Jan 10, 2025
374fa4c
[FIX] hr_attendance: typo error
ammu-odoo Oct 31, 2025
f4a63a3
[FIX] sale_product_matrix: variant grid combo filter
dere-odoo Nov 3, 2025
1547a3c
[FIX] l10n_fr_account: put account for rounding differences
gawa-odoo Oct 23, 2025
6974d53
[FIX] payment_paypal: cny currency removal
barracudapps Oct 17, 2025
48ceb62
[IMP] mail: add on user a direct method to send webpush notif
res-odoo Jul 23, 2025
bd3a580
[IMP] mail: SW: Extract handle notification click inside its own method
res-odoo Oct 1, 2025
9c19a4c
[IMP] mail: avoid cron job to send incoming call notification.
res-odoo Oct 14, 2025
00f66f7
[IMP] voip: wip
brboi Nov 3, 2025
9827ec1
[IMP] voip: wip
brboi Nov 4, 2025
2b7e672
fixup! [IMP] voip: wip
brboi Nov 4, 2025
fab11f3
wip
Polymorphe57 Nov 4, 2025
0c21f5e
wip
Polymorphe57 Nov 4, 2025
3f3edae
wip
brboi Nov 5, 2025
c9eb161
wip
brboi Nov 6, 2025
e5d81f1
wip
brboi Nov 7, 2025
44fae79
wip
brboi Nov 10, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
418 changes: 241 additions & 177 deletions addons/account/i18n/account.pot

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions addons/account/models/account_bank_statement.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@ class AccountBankStatement(models.Model):
search='_search_is_valid',
)

journal_has_invalid_statements = fields.Boolean(
related='journal_id.has_invalid_statements',
)

problem_description = fields.Text(
compute='_compute_problem_description',
)
Expand Down
6 changes: 6 additions & 0 deletions addons/account/models/account_bank_statement_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,12 @@ def action_undo_reconciliation(self):
# HELPERS
# -------------------------------------------------------------------------

@api.ondelete(at_uninstall=False)
def _check_allow_unlink(self):
if self.statement_id.filtered(lambda stmt: stmt.is_valid and stmt.is_complete):
raise UserError(_("You can not delete a transaction from a valid statement.\n"
"If you want to delete it, please remove the statement first."))

def _find_or_create_bank_account(self):
self.ensure_one()

Expand Down
11 changes: 11 additions & 0 deletions addons/account/models/account_journal.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,7 @@ def _get_default_account_domain(self):
)
accounting_date = fields.Date(compute='_compute_accounting_date')
display_alias_fields = fields.Boolean(compute='_compute_display_alias_fields')
has_invalid_statements = fields.Boolean(compute='_compute_has_invalid_statements')

show_fetch_in_einvoices_button = fields.Boolean(
string="Show E-Invoice Buttons",
Expand All @@ -287,6 +288,16 @@ def _get_default_account_domain(self):
'Journal codes must be unique per company.',
)

def _compute_has_invalid_statements(self):
journals_with_invalid_statements = self.env['account.bank.statement'].search([
('journal_id', 'in', self.ids),
'|',
('is_valid', '=', False),
('is_complete', '=', False),
]).journal_id
journals_with_invalid_statements.has_invalid_statements = True
(self - journals_with_invalid_statements).has_invalid_statements = False

def _compute_display_alias_fields(self):
self.display_alias_fields = self.env['mail.alias.domain'].search_count([], limit=1)

Expand Down
13 changes: 13 additions & 0 deletions addons/account/models/account_journal_dashboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ def _compute_last_bank_statement(self):
SELECT id, company_id
FROM account_bank_statement
WHERE journal_id = journal.id
AND first_line_index IS NOT NULL
ORDER BY first_line_index DESC
LIMIT 1
) statement ON TRUE
Expand Down Expand Up @@ -526,6 +527,11 @@ def _fill_bank_cash_dashboard_data(self, dashboard_data):
'image': '/account/static/src/img/bank.svg' if journal.type in ('bank', 'credit') else '/web/static/img/rfq.svg',
'text': _('Drop to import transactions'),
}
last_statement_visible = (
not journal.company_id.fiscalyear_lock_date
or journal.last_statement_id.date
and journal.company_id.fiscalyear_lock_date < journal.last_statement_id.date
)

dashboard_data[journal.id].update({
'number_to_check': number_to_check,
Expand All @@ -538,6 +544,8 @@ def _fill_bank_cash_dashboard_data(self, dashboard_data):
'nb_lines_outstanding_pay_account_balance': has_outstanding,
'last_balance': currency.format(journal.last_statement_id.balance_end_real),
'last_statement_id': journal.last_statement_id.id,
'last_statement_visible': last_statement_visible,
'has_invalid_statements': journal.has_invalid_statements,
'bank_statements_source': journal.bank_statements_source,
'is_sample_data': journal.has_statement_lines,
'nb_misc_operations': number_misc,
Expand Down Expand Up @@ -802,6 +810,7 @@ def _get_journal_dashboard_bank_running_balance(self):
FROM account_bank_statement
WHERE journal_id = journal.id
AND company_id = ANY(%s)
AND first_line_index IS NOT NULL
ORDER BY date DESC, id DESC
LIMIT 1
) statement ON TRUE
Expand Down Expand Up @@ -1119,6 +1128,10 @@ def open_bank_difference_action(self):
}
return action

def open_invalid_statements_action(self):
self.ensure_one()
return self.env["ir.actions.act_window"]._for_xml_id('account.action_bank_statement_tree')

def _show_sequence_holes(self, domain):
return {
'type': 'ir.actions.act_window',
Expand Down
7 changes: 4 additions & 3 deletions addons/account/models/account_move.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import ast
import calendar
from collections import Counter, defaultdict
from collections.abc import Mapping
from contextlib import ExitStack, contextmanager
from datetime import date, timedelta
from dateutil.relativedelta import relativedelta
Expand Down Expand Up @@ -1925,7 +1926,7 @@ def _compute_access_url(self):
for move in self.filtered(lambda move: move.is_invoice()):
move.access_url = '/my/invoices/%s' % (move.id)

@api.depends('move_type', 'partner_id', 'company_id')
@api.depends('move_type', 'partner_id', 'partner_id.lang', 'company_id')
def _compute_narration(self):
use_invoice_terms = self.env['ir.config_parameter'].sudo().get_bool('account.use_invoice_terms')
invoice_to_update_terms = self.filtered(lambda m: use_invoice_terms and m.is_sale_document(include_receipts=True))
Expand Down Expand Up @@ -4848,7 +4849,7 @@ def tax_details_grouping_function(base_line, tax_data):
for grouping_key, values in aggregated_values.items():
if not grouping_key:
continue
if isinstance(grouping_key, dict):
if isinstance(grouping_key, Mapping):
values.update(grouping_key)
tax_details[grouping_key] = values

Expand All @@ -4857,7 +4858,7 @@ def tax_details_grouping_function(base_line, tax_data):
for grouping_key, values in values_per_grouping_key.items():
if not grouping_key:
continue
if isinstance(grouping_key, dict):
if isinstance(grouping_key, Mapping):
values.update(grouping_key)
tax_details[grouping_key] = values

Expand Down
1 change: 1 addition & 0 deletions addons/account/models/account_report.py
Original file line number Diff line number Diff line change
Expand Up @@ -588,6 +588,7 @@ class AccountReportExpression(models.Model):
('account_codes', "Prefix of Account Codes"),
('external', "External Value"),
('custom', "Custom Python Function"),
('text', "Plain Text"),
],
required=True
)
Expand Down
12 changes: 7 additions & 5 deletions addons/account/models/chart_template.py
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,8 @@ def _pre_reload_data(self, company, template_data, data, force_create=True, forc
for prop in list(template_data):
if prop.startswith('property_'):
template_data.pop(prop)
data.pop('account.reconcile.model', None)
if not force_update:
data.pop('account.reconcile.model', None)
if 'res.company' in data and not force_update:
data['res.company'][company.id].clear()
data['res.company'][company.id].setdefault('anglo_saxon_accounting', company.anglo_saxon_accounting)
Expand Down Expand Up @@ -409,10 +410,11 @@ def tax_template_changed(tax, template):
if rename_idx:
tax_to_rename.name = f"[old{rename_idx - 1 if rename_idx > 1 else ''}] {tax_to_rename.name}"
else:
fiscal_position_ids = values.get('fiscal_position_ids')
original_tax_ids = values.get('original_tax_ids')
repartition_lines = values.get('repartition_line_ids')
values.clear()
fiscal_position_ids = values.pop('fiscal_position_ids', None)
original_tax_ids = values.pop('original_tax_ids', None)
repartition_lines = values.pop('repartition_line_ids', None)
if not force_update:
values.clear()
# taxes will always be (re)linked to fiscal positions (unless the fp doesn't exist and won't be created)
if fiscal_position_ids:
link_commands = [
Expand Down
2 changes: 1 addition & 1 deletion addons/account/models/product.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def _compute_tax_string(self):

def _construct_tax_string(self, price):
currency = self.currency_id
res = self.taxes_id.filtered(lambda t: t.company_id == self.env.company).compute_all(
res = self.taxes_id._filter_taxes_by_company(self.env.company).compute_all(
price, product=self, partner=self.env['res.partner']
)
joined = []
Expand Down
2 changes: 2 additions & 0 deletions addons/account/models/res_partner_bank.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,10 @@ def _compute_duplicate_bank_partner_ids(self):
FROM res_partner_bank this
LEFT JOIN res_partner_bank other ON this.acc_number = other.acc_number
AND this.id != other.id
AND other.active = TRUE
WHERE this.id = ANY(%(ids)s)
AND other.partner_id IS NOT NULL
AND this.active = TRUE
AND (
((this.company_id = other.company_id) OR (this.company_id IS NULL AND other.company_id IS NULL))
OR
Expand Down
62 changes: 61 additions & 1 deletion addons/account/static/tests/account_move_form.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
triggerHotkey,
} from "@mail/../tests/mail_test_helpers";
import { expect, test } from "@odoo/hoot";
import { contains, onRpc } from "@web/../tests/web_test_helpers";
import { contains, defineModels, fields, onRpc, models} from "@web/../tests/web_test_helpers";
import { defineAccountModels } from "./account_test_helpers";

defineAccountModels();
Expand Down Expand Up @@ -61,3 +61,63 @@ test("Confirmation dialog on delete contains a warning", async () => {
{ message: "warning message has been added in the dialog" }
);
});
class AccountMove extends models.Model {
line_ids = fields.One2many({
string: "Invoice Lines",
relation: "account.move.line",
})

_records = [{ id: 1, name: "account.move" }]
}
class AccountMoveLine extends models.Model {
name = fields.Char();
product_id = fields.Many2one({
string:"Product",
relation:"product",
});
move_id = fields.Many2one({
string: "Account Move",
relation: "account.move",
})
}
class Product extends models.Model {
name = fields.Char();
_records = [{ id: 1, name: "testProduct" }];
}

defineModels({ Product, AccountMoveLine, AccountMove });

test("Update description on product line", async() => {
const pyEnv = await startServer();
const productId = pyEnv["product"].browse([1]);
const accountMove = pyEnv["account.move"].browse([1]);
pyEnv["account.move.line"].create({ name: productId[0].name, product_id: productId[0].id, move_id: accountMove[0].id });
await start();
onRpc("account.move", "web_save", () => { expect.step("save")});
await openFormView("account.move", accountMove[0].id, {
arch: `<form js_class="account_move_form">
<sheet>
<notebook>
<page id="invoice_tab" name="invoice_tab" string="Invoice Lines">
<field name="invoice_line_ids" mode="list" widget="product_label_section_and_note_field_o2m">
<list name="journal_items" editable="bottom" string="Journal Items">
<field name="product_id" widget="product_label_section_and_note_field" readonly="0"/>
<field name="name" widget="section_and_note_text" optional="show"/>
</list>
</field>
</page>
</notebook>
</sheet>
</form>`,
});

await click(".o_many2one");
await contains("#labelVisibilityButtonId").click()
await insertText("textarea[placeholder='Enter a description']", "testDescription");
await click(".o_form_button_save");
await expect.waitForSteps(["save"]);

const line = pyEnv["account.move.line"].browse([1])[0];
expect(line.name).toBe("testProduct\ntestDescription");

});
26 changes: 26 additions & 0 deletions addons/account/tests/test_account_move_out_invoice.py
Original file line number Diff line number Diff line change
Expand Up @@ -4733,6 +4733,32 @@ def test_narration_preserved_when_use_invoice_terms_disabled(self):
"Narration should be preserved after partner change when invoice terms are disabled"
)

def test_narration_translation_on_partner_language_change(self):
"""Ensure narration translates when partner.lang changes (HTML terms link)."""
self.env['ir.config_parameter'].sudo().set_bool('account.use_invoice_terms', True)
self.env['res.lang']._activate_lang('fr_FR')

self.env.company.terms_type = 'html'

# Baseline: en_US user/partner
self.partner_a.lang = 'en_US'

# Create invoice
invoice = self.init_invoice(move_type='out_invoice', partner=self.partner_a)

baseurl = self.env.company.get_base_url() + '/terms'

# Check the initial narration is in English
expected_en = f"<p>Terms &amp; Conditions: {baseurl}</p>"
self.assertEqual(invoice.narration, expected_en)

# Switch to fr_FR
self.partner_a.lang = 'fr_FR'

# Check the narration is in French
expected_fr = f"<p>Conditions générales : {baseurl}</p>"
self.assertEqual(invoice.narration, expected_fr)

def test_multiple_currency_change(self):
"""
Test amount currency and balance are correctly recomputed when switching currency multiple times
Expand Down
4 changes: 4 additions & 0 deletions addons/account/tests/test_duplicate_res_partner_bank.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,7 @@ def test_remove_bank_account_from_partner(self):
partner_form.bank_ids.remove(0)

self.assertEqual(len(partner.bank_ids), 0)

def test_duplicate_acc_number_inactive_bank_account(self):
self.partner_bank_b.active = False
self.assertFalse(self.partner_bank_a.duplicate_bank_partner_ids)
12 changes: 11 additions & 1 deletion addons/account/views/account_journal_dashboard_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@
<span dir="ltr"><t t-out="dashboard.account_balance"/></span>
</div>
</div>
<t t-if="dashboard.has_at_least_one_statement and dashboard.account_balance != dashboard.last_balance">
<t t-if="dashboard.has_at_least_one_statement and dashboard.account_balance != dashboard.last_balance and dashboard.last_statement_visible">
<div class="row" name="latest_statement">
<div class="col overflow-hidden text-start">
<span title="Latest Statement">Last Statement</span>
Expand Down Expand Up @@ -290,6 +290,16 @@
</div>
</div>
<t t-call="JournalChecks"/>
<t t-if="dashboard.has_invalid_statements">
<div class="row">
<a type="object"
name="open_invalid_statements_action"
title="Invalid Statement(s)"
class="text-danger">
Invalid Statement(s)
</a>
</div>
</t>
</div>
</t>
<t t-name="JournalBodySalePurchase" id="account.JournalBodySalePurchase">
Expand Down
2 changes: 1 addition & 1 deletion addons/account/wizard/account_automatic_entry_wizard.py
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ def _get_move_dict_vals_change_account(self):
'partner_id': partner.id or None,
'currency_id': currency.id,
'amount_currency': (account_balance > 0 and -1 or 1) * abs(account_amount_currency),
'analytic_distribution': analytic_distribution,
'analytic_distribution': analytic_distribution and dict(analytic_distribution),
})

# Get the lowest child company based on accounts used to avoid access error
Expand Down
7 changes: 4 additions & 3 deletions addons/account_edi_ubl_cii/models/account_edi_xml_ubl_bis3.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from odoo import models, _
from odoo.addons.account.tools import dict_to_xml
from odoo.addons.account_edi_ubl_cii.models.account_edi_xml_ubl_20 import UBL_NAMESPACES
from odoo.addons.account_edi_ubl_cii.models.account_edi_xml_ubl_20 import FloatFmt, UBL_NAMESPACES

from stdnum.no import mva

Expand Down Expand Up @@ -290,8 +290,9 @@ def _add_document_line_tax_category_nodes(self, line_node, vals):

def _add_document_line_price_nodes(self, line_node, vals):
super()._add_document_line_price_nodes(line_node, vals)
if vals['base_line']['price_unit'] < 0.0:
line_node['cac:Price']['cbc:PriceAmount']['_text'] = -line_node['cac:Price']['cbc:PriceAmount']['_text']
currency_suffix = vals['currency_suffix']
sign = 1 if vals['base_line']['price_unit'] >= 0.0 else -1
line_node['cac:Price']['cbc:PriceAmount']['_text'] = FloatFmt(sign * vals[f'gross_price_unit{currency_suffix}'], 1, 8)

# -------------------------------------------------------------------------
# EXPORT: Constraints
Expand Down
4 changes: 2 additions & 2 deletions addons/account_edi_ubl_cii/models/res_partner.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ class ResPartner(models.Model):
('ubl_bis3', "EU Standard (Peppol Bis 3.0)"),
('xrechnung', "Germany (XRechnung)"),
('nlcius', "Netherlands (NLCIUS)"),
('ubl_a_nz', "Australia BIS Billing 3.0 A-NZ"),
('ubl_sg', "Singapore BIS Billing 3.0 SG"),
('ubl_a_nz', "Australia (BIS Billing 3.0 A-NZ)"),
('ubl_sg', "Singapore (BIS Billing 3.0 SG)"),
],
)
is_ubl_format = fields.Boolean(compute='_compute_is_ubl_format')
Expand Down
Loading