Unify and refactor exception handling in framework and addons.
The generic `except_osv` is now deprecated, and replaced by more specialized exception subtypes:
- `UserError` (renamed from Warning, as it conflicts with the built-in `Warning`) raised when a non-technical error occurs during a business operation. It could be a missing information in the data provided by the user, or a misconfiguration.
- `AccessError`: raised when any operation is denied because the user conducting it does not have the required access rights.
- `AccessDenied`: raised when an operation that requires authenticated access is attempted via an unauthenticated request.
- `MissingError`: raised when an operation is attempted on a record that does not exist.
- `ValidationError`: raised when an operation violates a SQL or Python constraint.
- All other exceptions are internal errors due to a system problem or bug, and raised untouched to the client-side, which should display a traceback.
All exceptions take a single message argument.
The `test_exceptions` module has been updated to showcase both new and old (deprecated) exceptions.
A great many old `except_osv` had a useless title with "Error!" or "Warning", those have been removed, as this is handled by the client-side widget that displays the messages.
This commit introduces a more consistent policy for logging errors and warnings:
- All messages that do not require administrator attention should be logged at INFO level or lower. This includes all errors that are notified to the user in a friendly manner, even for access right problems or validation errors during business operations.
- All messages that indicate a likely misconfiguration or malicious use by the users should be logged at WARNING level, as they typically require administrator attention.
- All other unhandled internal errors cannot typically be handled by the user and should be logged at ERROR or higher level, as they require immediate administrator attention.
This commit fixes lots of usability problems in the reporting views.
eg: missing fields in the reports, labelling inconsistencies, broken/outdated/unused filters and group bys...
Detailed changelist
-------------------
account/Invoice Analysis:
- "Product Category" vs "Category of Product": labelling consistency
- group by Analytic Account
account_voucher/Sales Receipt Analysis:
- remove filter on Pro-forma
crm/Lead & Opportunities Analysis:
- "Exp." vs "Expected": labelluing consistency
crm/Phone Calls Analysis:
- remove Todo and My Phone Call filters
- fix My Sales Team(s) filter
crm_claim/Claims Analysis
- remove My Case(s) filter
- fix My Company(s) filter
- remove group by Sales Team
- fix label Creation Month
crm_helpdesk/Helpdesk Analysis
- remove My Case(s) filter
event/Events Analysis
- remove My Events & Show Confirmed Registrations filters
- fix labelling of Attendee / Contact group by
hr_holidays/Leaves Analysis
- remove My Requests filter
hr_recruitment/Recruitment Analysis
- remove My filter
marketing_campaign/Campaign Analysis
- fix labelling
mrp_operations/Work Order Analysis
- add fields Product Template, Product Category, Responsible, Routing
and BoM
- fix labelling group by Planned Month
point_of_sale/Orders Analysis
- add fields Product Template, Invoiced, Point of Sale, Public Category,
Warehouse and Pricelist
- fix Year filter
project/Tasks Analysis:
- remove My Task filter
project/Issues Analysis:
- remove My Issues filter
- remove Task group by
purchase/Purchase Analysis:
- fix quantity field into float
- add fields Product Template, Product Category, Partner Country, Fiscal
Position, Analytic Account and Commercial Entity
- add group by Partner Country and Fiscal Position
- fix labelling "Product Category" vs "Category of product"
sale/Sales Analysis
- fix labelling "Product Category" vs "Category of product"
- add fields Product Template, Paid, # of Paid Lines, Partner Countru
and Commercial Entity
- remove filter My Sales
- add group by Partner Country
sale_stock/Sales Analysis
- fix label name of shipped_qty_1
Credits
-------
Analysis and code courtesy of Sébastien Versailles, Quentin De Coninck,
Yannick Tivisse and Richard Mathot {sve,qdc,yti,rim}@odoo.com
(congratulations if you've read this boring commit message)
The method recompute_voucher_lines() is used by several onchange methods of
account.voucher. It used to unlink() the voucher lines before recomputing new
voucher lines. As a side effect, if you edit a voucher and discard your
changes, your voucher has lost its lines, although you did not save your
changes! Moreover, the call to unlink() is invalidating the record cache,
which screws up completely the onchange() method.
So, instead of unlinking the existing lines, the onchange generates commands
[(2, id), ...] to remove the existing lines only when saving the changes.
The conversion of currencies in vouchers are made based on payment_rate_currency_id field (instead of usual currency_id).
This field was not present in the purchase view and not correctly set when we change the journal (and thus the currency) which was leading to rates of 1. With a rate of 1, the amount is equal to the currency amount (which is rarely correct). opw 611254