* price_average is now always positive regardless of the invoice type, because it's an average and there's no point in summing those values
* price_total is now computed by using ABS() because of a migration bug of price_subtotal_signed introduced in saas-6, where in_invoice and in_refund invoices were set with a negative value while on the help tooltip it was saying that in/out refunds are negative and in/out invoices are positive. That bug was only revealed in v9 -since saas-6 wasn't using that field at all-, with the effect of having wrong values in report for migrated databases. This workaround using ABS() will be removed in a further version with a migration script to fix people's databases.
* residual field is now negative for in_invoices and out_refunds.
* These 2 points ensure that we can group by invoice type and sum the price_total or the residual fields to get the gross income of a month for example.
Since the revision bc23c92c3e,
the inventory value of the produced items could
be doubled, because the list
`total_consume_moves` could contain several time
the same move ids, e.g. when it was added by
`total_consume_moves.append(raw_material_line.id)`
and
`total_consume_moves += already_consumed_lines.ids`
The list is replaced by a set to ensure a same move
cannot be counted twice.
opw-678727
When subscribing a user to a mailing list, the `mail.mass_mailing.contact`
created is processed to identify it's name and email from the address (method
`get_name_email` called in `add_to_list` and `name_create`).
For a better consistency, the search of existing contacts should also be done
using the method `get_name_email`.
This avoids that subscribing twice `Example <example@example.com>` fails to
detect duplicates and creates two subscriptions.
Closes#12265
When computing the amount_currency, the ratio is 1.0 if the difference
between amount(computed like this -sum([x.balance for x in move.line_ids]))
and the amount set in the statement is not greater than the currency rounding.
opw:678588
Rev. 253437f81f meant to
avoid the creation of duplicate entries during translation
import, caused by existing translations created with an
empty `module` field.
But the fix was over-zealous and caused an extra side-effect:
the creation of missing translations (the blue flag icon)
now creates duplicate translations if other translations
exist with different `module` values.
(This could happen because translations are provided by
several modules, or due to manual translation entries with
no module value, etc.)
Normally when you manually add or remove money from the cashbox the
reference on the bank statement line should be set to the name of the
session. But because the wrong function names where used this didn't
happen. Introduced by f5ad251686.
Fixes#12224
xml template was using color name, because color index was empty.
It works in English, but once translated (in french e.g.) we have background-color:noir
Fix#12251
We allow users to specify QWeb in the header and footer fields of the
receipt. Because the browser receipt and the ESC/POS receipt use a
different format (HTML and ESC/POS XML respectively) we don't render
this QWeb to both receipts. Currently it is only rendered for the
ESC/POS receipt. When this is the case however, we shouldn't display the
unrendered QWeb on the regular browser receipt. This commit simply hides
it.
Perhaps in the future we can provide an additional parameter in the
<DOCTYPE declaration that allows the user to specify whether he wants
the QWeb to apply to the HTML receipt and/or the ESC/POS receipt.
opw-678170
If `probability` is not being written,
`vals.get('probability')` is `None`
`None` < 100 is `True`
While it should not remove the `date_closed` value
when the probability field is not being rewritten
on the lead, but something else is.
opw-677273
In v9, stages are not shared by default. So when you create a new job position,
you need to specify manually which stages are available for this job position.
But the field stage_ids was not available.
onchange_picking_type func now return picking_type_code
The stock.picking has an attrs to hide the partner_id for internal transfers.
It was not set as picking_type_code was not set.
Closes#12117
When creating an invoice line from a PO, if the product is linked to an Asset type
then the account used for this line must be the expense account.
When creating an invoice line from a SO, if the product is linked to an deferred revenue type
then the account used for this line must be the income account.
`all([]) = True`, therefore if there is no `matched_debit_ids` or
`matched_credit_ids` on a payment ==> boom when you access
`payment.matched_debit_ids[0]`
opw-677157
Closes#12232Closes#12242
Odoo serves files based on the mimetype imported with python module Mimetype.
In some case, mimetype on windows for svg is undefined or misconfigured and
the svg is returned as text/plain (and so xml and not img).
This commit overrides the default mimetype to render .svg file with mimetype
'image/svg+xml'.
It is similar to add/override the key from windows registry with:
```
[HKEY_CLASSES_ROOT\.svg]
@="svgfile"
"Content Type"="image/svg+xml"
```
The advantage to override it in Odoo, is to be sure that even if this key has
been updated or deleted by a cleaner software or malware, Odoo continue to work
This closesodoo/odoo#12150, closesodoo/odoo#9061, closesodoo/odoo#9118
When a user goes through the trouble of manually modifying the
depreciation lines he will lose all his work when clicking on 'reset to
draft'. Furthermore, if he then goes through the trouble of repairing
the problem by once again manually changing the depreciation lines he
will again lose his work when pressing confirm.
opw-678678
Used case:
Create a SO with invoicing policy based on delivery. Don't deliver
anything and Create invoice for all invoiceable lines.
Result:
There was no invoice created and no warning message.
After the fix:
A warning message is raised when after clicking "Create
invoice",for any reason it doesn't create an invoice.
opw:678567
The field generation is most of the time following the pattern
`field_<table name>_<field name>`
but in case of name clash (e.g. res.partner.category - id and res.partner -
category_id), the id of ir.model.field is added at the end of the external id
during the field creation.
The more flexible way to link to an ir.model.field is to use the syntax
`search=[('model', '=', <model>), ('name', '=', <field name>)]`
to avoid errors as in #12192 when the "first" external id no longer exists.
Fixes#12192Closes#12198
By default, when reading a m2m field, entries that are
deactivated in the destination table are not included.
This behavior is desirable in some cases (e.g. for
"tags" or "categories", but not for entries that
significantly impact other field values in the parent
record, such as taxes.
The problem is rather obvious: when displaying a
paid invoice that used taxes that are now deactivated,
the taxes are hidden while they still affect the
computed amount. And after cancelling + resetting
to draft, the tax is not taken into account anymore,
while still being linked.
Forcing the field-level (python) domain to include
both active and inactive entries solves the problem:
- when reading, displaying and recomputing values,
deactivated taxes will be included.
- when trying to pick a tax, deactivated entries
will still be ignored, as expected.
This commit applies the technique to all m2m
fields that refer to taxes.
Fixes#12066
opw-677751
There is no way to directly create restaurant.table records in the
backend. The only way is through adding it directly to the table_ids
one2many on restaurant.floor and when doing that floor_id is
automatically set.
Closes#8705
Symptoms: running a full reconciliation manually with that wizard was resulting in not fully reconciled aml altough the total in company currency and in secondary currency were perfectly matched. Full use case described in added test test_manual_reconcile_wizard_opw678153.
Problems:
- The system was processing by pair of aml and creating exchange rate entry/full reconciliation as soon as possible whereas in that case it needs to be postponed at the end of the manual reconciliation otherwise some entries would be excluded from processing.
- Another problem was that because of this batch processing, we ended with unconsistent amount_residual_currency values for some entries that were fully reconciled in company currency but not in foreign currency (also negative amount_residual_currency for a debit line which should never happens)... To solve that, we now process the manual full reconciliation in two steps: only in company currency first, then in secondary currency if needed. A small adaptation in the payment widget of invoices was needed for that too.
'foo %s bar' % 'alice' if False else 'bob' returns 'bob', not 'foo bob bar'
The previous strings returns '>=' when the direction is future while it should
be 'COALESCE(l.date_maturity,l.date) >= %s'
Fixes#10654Closes#10695
The code uses self.depreciation_line_ids[0] and incorrectly assumes it
is always the latest (newest) depreciation line. This sorts the
recordset to guarantee that this is true.
opw-678678