[6.0][purchase] wrong relational model: purchase m2O invoice; wrong invoiced status and % check
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Odoo Addons (MOVED TO GITHUB) |
Fix Released
|
Medium
|
OpenERP R&D Addons Team 2 |
Bug Description
Hello,
affects v5 and v6:
consider this very common business case: you order several items to your supplier. And just like you could do in OpenERP for sales (eg it's a matter of consistency also), your supplier delivers you the items with partial deliveries and you are invoiced upon those partial deliveries. Meaning that your purchase order is only paid when you paid all those n related invoices.
However, currently in OpenERP, purchase.order has a many2one field to account.invoice!!!
here is the code snippet from purchase/
'invoice_id': fields.
This doesn't cover that case where several invoices are related to the purchase order!
Furthermore, the
_invoiced_rate and _invoiced functions are not implemented properly as they only consider the unique invoice_id (whichone?)
see the following code:
def _invoiced(self, cursor, user, ids, name, arg, context=None):
res = {}
for purchase in self.browse(cursor, user, ids, context=context):
if purchase.
else:
return res
def _invoiced_
res = {}
for purchase in self.browse(cursor, user, ids, context=context):
tot = 0.0
if purchase.invoice_id and purchase.
tot += purchase.
if purchase.
else:
return res
Note that fortunately, it seems that the purchase order lines and the account invoice lines are properly linked through a many2many relation.
I think we should have also a purchase.order many2many account.invoice relation instead and that we should iterate over the related invoice lines (from the potentially several invoices then) to compute the "invoiced" and "invoice_rate" status instead.
Notice that on Twitter, Joel Grand Guillaume (C2C), Carlos Liebana (Ting.es), ovnicraft (Gnuthink) and NeoPolus (Borja L.S.) just confirmed the bug and proposed solution. I think we need to refactor this urgently instead of dragging it all the v6 cycle once the schema is frozen wrongly...
Hope this helps.
Related branches
- OpenERP R&D Team: Pending requested
-
Diff: 111789 lines (+88517/-2236) (has conflicts)307 files modifiedaccount/i18n/account.pot (+7/-0)
account/i18n/da.po (+9/-0)
account/i18n/de.po (+21/-1)
account/i18n/es.po (+8848/-333)
account/i18n/es_EC.po (+7610/-228)
account/i18n/fr.po (+45/-0)
account/i18n/it.po (+10/-0)
account/i18n/nl.po (+18/-0)
account/i18n/pl.po (+22/-0)
account/i18n/pt.po (+9173/-35)
account/i18n/pt_BR.po (+8827/-443)
account/i18n/ru.po (+13/-0)
account/i18n/sv.po (+9436/-31)
account/i18n/tr.po (+18757/-248)
account/i18n/vi.po (+10/-0)
account/report/account_general_ledger.py (+11/-0)
account/report/account_general_ledger.rml (+325/-0)
account/report/account_general_ledger_landscape.rml (+489/-0)
account/report/account_journal.py (+19/-0)
account/report/account_journal.rml (+101/-1)
account/report/account_partner_ledger.rml (+370/-0)
account/report/account_partner_ledger_other.rml (+372/-0)
account_accountant/i18n/de.po (+21/-0)
account_accountant/i18n/es_EC.po (+36/-0)
account_accountant/i18n/fr.po (+19/-0)
account_accountant/i18n/pt_BR.po (+23/-0)
account_accountant/i18n/ru.po (+22/-0)
account_accountant/i18n/sv.po (+36/-0)
account_accountant/i18n/tr.po (+36/-0)
account_analytic_analysis/i18n/pt_BR.po (+42/-0)
account_analytic_analysis/i18n/ru.po (+40/-0)
account_analytic_analysis/i18n/sv.po (+132/-5)
account_analytic_default/i18n/fr.po (+46/-2)
account_analytic_default/i18n/ru.po (+9/-0)
account_analytic_default/i18n/sv.po (+45/-1)
account_analytic_plans/i18n/de.po (+117/-0)
account_analytic_plans/i18n/es.po (+92/-0)
account_analytic_plans/i18n/fr.po (+328/-4)
account_analytic_plans/i18n/ru.po (+263/-3)
account_analytic_plans/i18n/sv.po (+161/-0)
account_anglo_saxon/i18n/es.po (+40/-8)
account_anglo_saxon/i18n/fr.po (+47/-5)
account_anglo_saxon/i18n/sv.po (+133/-0)
account_budget/i18n/es.po (+42/-0)
account_budget/i18n/sv.po (+122/-0)
account_cancel/i18n/pt_BR.po (+9/-0)
account_chart/i18n/pt_BR.po (+10/-0)
account_coda/i18n/fr.po (+123/-5)
account_coda/i18n/sv.po (+300/-0)
account_followup/i18n/es.po (+102/-3)
account_followup/i18n/sv.po (+111/-3)
account_invoice_layout/i18n/es.po (+44/-0)
account_invoice_layout/i18n/it.po (+38/-0)
account_invoice_layout/i18n/sv.po (+48/-0)
account_payment/i18n/de.po (+10/-0)
account_payment/i18n/es.po (+68/-6)
account_payment/i18n/fr.po (+87/-9)
account_payment/i18n/ru.po (+77/-13)
account_payment/i18n/sv.po (+218/-7)
account_tax_include/i18n/sv.po (+9/-0)
account_voucher/i18n/de.po (+49/-1)
account_voucher/i18n/es.po (+63/-9)
account_voucher/i18n/es_EC.po (+184/-6)
account_voucher/i18n/fr.po (+55/-9)
account_voucher/i18n/sv.po (+52/-7)
analytic/i18n/de.po (+9/-0)
analytic/i18n/es.po (+37/-0)
analytic/i18n/fr.po (+88/-8)
analytic/i18n/mn.po (+10/-0)
analytic_journal_billing_rate/i18n/es.po (+32/-0)
analytic_journal_billing_rate/i18n/fr.po (+40/-0)
analytic_journal_billing_rate/i18n/it.po (+10/-0)
analytic_journal_billing_rate/i18n/sv.po (+42/-0)
analytic_user_function/i18n/es.po (+55/-0)
analytic_user_function/i18n/fr.po (+66/-2)
association/i18n/es.po (+8/-0)
association/i18n/fr.po (+120/-3)
association/i18n/pt.po (+124/-0)
auction/i18n/auction.pot (+48/-0)
auction/i18n/sv.po (+63/-0)
audittrail/i18n/es.po (+39/-0)
audittrail/i18n/sv.po (+10/-0)
base_action_rule/i18n/es.po (+24/-0)
base_action_rule/i18n/mn.po (+10/-0)
base_action_rule/i18n/ru.po (+8/-0)
base_calendar/i18n/base_calendar.pot (+18/-0)
base_calendar/i18n/it.po (+20/-0)
base_calendar/i18n/mn.po (+10/-0)
base_contact/i18n/de.po (+10/-0)
base_contact/i18n/es.po (+201/-0)
base_contact/i18n/it.po (+10/-0)
base_contact/i18n/sv.po (+222/-0)
base_iban/i18n/es.po (+32/-0)
base_iban/i18n/it.po (+10/-0)
base_iban/i18n/pt_BR.po (+39/-0)
base_iban/i18n/sv.po (+50/-1)
base_module_quality/i18n/sv.po (+16/-0)
base_module_record/i18n/es.po (+30/-0)
base_module_record/i18n/sv.po (+23/-0)
base_report_creator/i18n/es.po (+36/-0)
base_report_designer/i18n/ru.po (+76/-0)
base_report_designer/i18n/sv.po (+124/-2)
base_setup/i18n/de.po (+10/-0)
base_setup/i18n/ro.po (+69/-4)
base_setup/i18n/sv.po (+59/-0)
base_synchro/i18n/ru.po (+325/-0)
base_vat/i18n/es.po (+30/-3)
base_vat/i18n/ru.po (+30/-3)
board/i18n/de.po (+9/-0)
board/i18n/it.po (+10/-0)
board/i18n/sv.po (+290/-8)
caldav/i18n/pl.po (+9/-0)
claim_from_delivery/i18n/es.po (+10/-0)
claim_from_delivery/i18n/fr.po (+10/-0)
crm/i18n/es.po (+44/-3)
crm/i18n/fr.po (+18/-0)
crm/i18n/sv.po (+633/-4)
crm_claim/i18n/es.po (+55/-8)
crm_helpdesk/i18n/es.po (+53/-9)
crm_helpdesk/i18n/pt_BR.po (+18/-0)
crm_partner_assign/i18n/es.po (+19/-0)
crm_partner_assign/i18n/fr.po (+13/-0)
crm_profiling/i18n/it.po (+28/-1)
decimal_precision/i18n/es.po (+61/-0)
decimal_precision/i18n/fr.po (+59/-0)
decimal_precision/i18n/mn.po (+31/-0)
decimal_precision/i18n/pt_BR.po (+59/-4)
delivery/delivery_view.xml (+16/-0)
delivery/i18n/es.po (+44/-0)
document/i18n/fr.po (+173/-6)
document/i18n/it.po (+9/-0)
document/i18n/mn.po (+13/-0)
document/i18n/sv.po (+230/-1)
email_template/i18n/es.po (+203/-9)
event_project/i18n/fr.po (+45/-13)
fetchmail/i18n/it.po (+9/-0)
google_map/i18n/pt_BR.po (+9/-0)
hr/i18n/es.po (+35/-0)
hr/i18n/fr.po (+11/-0)
hr/i18n/it.po (+9/-0)
hr/i18n/mn.po (+10/-0)
hr_attendance/i18n/mn.po (+10/-0)
hr_contract/i18n/es.po (+40/-0)
hr_evaluation/i18n/fr.po (+184/-13)
hr_evaluation/i18n/mn.po (+10/-0)
hr_expense/i18n/mn.po (+10/-0)
hr_holidays/i18n/fr.po (+171/-10)
hr_holidays/i18n/mn.po (+10/-0)
hr_payroll/i18n/es.po (+1673/-0)
hr_payroll/i18n/sv.po (+75/-0)
hr_payroll_account/i18n/mn.po (+10/-0)
hr_recruitment/i18n/mn.po (+10/-0)
hr_timesheet/i18n/fr.po (+23/-1)
hr_timesheet/i18n/it.po (+10/-0)
hr_timesheet/i18n/mn.po (+10/-0)
hr_timesheet_invoice/i18n/fr.po (+52/-13)
hr_timesheet_invoice/i18n/mn.po (+98/-21)
hr_timesheet_invoice/i18n/sv.po (+179/-14)
hr_timesheet_sheet/i18n/fr.po (+623/-3)
hr_timesheet_sheet/i18n/mn.po (+10/-0)
html_view/i18n/zh_CN.po (+93/-0)
idea/i18n/sv.po (+58/-0)
l10n_ch/i18n/sv.po (+32/-0)
l10n_fr/i18n/fr.po (+52/-3)
marketing/i18n/fr.po (+58/-0)
marketing_campaign/i18n/es.po (+75/-11)
marketing_campaign/i18n/fr.po (+44/-9)
marketing_campaign/i18n/marketing_campaign.pot (+17/-0)
membership/i18n/es.po (+67/-0)
membership/i18n/sv.po (+49/-0)
mrp/i18n/ca.po (+6/-0)
mrp/i18n/de.po (+6/-0)
mrp/i18n/el.po (+6/-0)
mrp/i18n/es.po (+33/-0)
mrp/i18n/fi.po (+6/-0)
mrp/i18n/fr.po (+37/-0)
mrp/i18n/it.po (+6/-0)
mrp/i18n/ko.po (+6/-0)
mrp/i18n/nl.po (+6/-0)
mrp/i18n/pl.po (+6/-0)
mrp/i18n/pt.po (+6/-0)
mrp/i18n/ru.po (+6/-0)
mrp/i18n/sk.po (+6/-0)
mrp/i18n/tr.po (+6/-0)
mrp/i18n/zh_CN.po (+6/-0)
mrp/i18n/zh_HK.po (+6/-0)
mrp/i18n/zh_TW.po (+6/-0)
mrp/mrp.py (+4/-0)
mrp/mrp_view.xml (+21/-0)
mrp_repair/i18n/es.po (+11/-0)
mrp_repair/i18n/sv.po (+30/-0)
mrp_subproduct/i18n/es.po (+33/-0)
multi_company/i18n/es.po (+9/-0)
multi_company/i18n/zh_CN.po (+10/-0)
pad/i18n/es.po (+56/-0)
point_of_sale/i18n/es.po (+21/-0)
point_of_sale/i18n/point_of_sale.pot (+7/-0)
point_of_sale/i18n/sv.po (+117/-2)
process/i18n/de.po (+9/-0)
process/i18n/mn.po (+9/-0)
procurement/i18n/es.po (+151/-6)
procurement/i18n/fr.po (+8/-0)
procurement/i18n/it.po (+8/-0)
procurement/i18n/mn.po (+10/-0)
procurement/i18n/procurement.pot (+8/-0)
procurement/i18n/ru.po (+8/-0)
product/i18n/de.po (+11/-0)
product/i18n/es.po (+155/-0)
product/i18n/mn.po (+10/-0)
product/i18n/ro.po (+10/-0)
product/i18n/ru.po (+9/-0)
product/i18n/sv.po (+183/-0)
product/i18n/vi.po (+9/-0)
product_expiry/i18n/es.po (+57/-0)
product_manufacturer/i18n/es.po (+33/-0)
product_margin/i18n/es.po (+35/-3)
product_margin/i18n/ru.po (+9/-0)
profile_tools/i18n/es.po (+113/-0)
project/i18n/es.po (+109/-3)
project/i18n/mn.po (+13/-0)
project_gtd/i18n/pt_BR.po (+10/-0)
project_mrp/i18n/es.po (+27/-3)
project_retro_planning/i18n/es.po (+30/-0)
project_scrum/i18n/es.po (+33/-0)
purchase/i18n/es.po (+96/-4)
purchase/i18n/mn.po (+1178/-151)
purchase/i18n/pl.po (+1366/-0)
purchase/i18n/pt.po (+1443/-54)
purchase/i18n/ru.po (+9/-0)
purchase/purchase.py (+5/-0)
purchase_requisition/i18n/purchase_requisition.pot (+11/-0)
report_designer/i18n/el.po (+106/-0)
report_designer/i18n/fr.po (+106/-0)
report_intrastat/i18n/es.po (+27/-3)
report_webkit/i18n/ru.po (+9/-0)
sale/i18n/ar.po (+1/-1)
sale/i18n/bg.po (+7/-1)
sale/i18n/bs.po (+7/-1)
sale/i18n/ca.po (+6/-1)
sale/i18n/cs.po (+1/-1)
sale/i18n/de.po (+13/-2)
sale/i18n/el.po (+3/-3)
sale/i18n/es.po (+176/-21)
sale/i18n/es_AR.po (+2/-2)
sale/i18n/et.po (+6/-1)
sale/i18n/fi.po (+7/-1)
sale/i18n/fr.po (+74/-3)
sale/i18n/hr.po (+7/-1)
sale/i18n/hu.po (+1/-1)
sale/i18n/id.po (+1/-1)
sale/i18n/it.po (+7/-1)
sale/i18n/ko.po (+7/-1)
sale/i18n/lt.po (+7/-1)
sale/i18n/lv.po (+1/-1)
sale/i18n/mn.po (+176/-32)
sale/i18n/nl.po (+7/-1)
sale/i18n/pl.po (+197/-33)
sale/i18n/pt.po (+19/-1)
sale/i18n/pt_BR.po (+1/-1)
sale/i18n/ro.po (+1/-1)
sale/i18n/ru.po (+1/-1)
sale/i18n/sale.pot (+1/-1)
sale/i18n/sk.po (+1/-1)
sale/i18n/sl.po (+1/-1)
sale/i18n/sq.po (+1/-1)
sale/i18n/sr.po (+5/-0)
sale/i18n/sv.po (+328/-31)
sale/i18n/tlh.po (+1/-1)
sale/i18n/tr.po (+7/-1)
sale/i18n/uk.po (+1/-1)
sale/i18n/vi.po (+29/-1)
sale/i18n/zh_CN.po (+7/-1)
sale/i18n/zh_TW.po (+1/-1)
sale/sale_view.xml (+1/-1)
sale_crm/i18n/es.po (+45/-4)
sale_journal/i18n/es.po (+141/-0)
sale_layout/i18n/es.po (+46/-2)
sale_mrp/i18n/es.po (+27/-0)
sale_mrp/i18n/fr.po (+25/-0)
stock/i18n/es.po (+801/-42)
stock/i18n/fr.po (+745/-57)
stock/i18n/mn.po (+10/-0)
stock/i18n/pl.po (+283/-2)
stock/i18n/stock.pot (+7/-0)
stock/i18n/sv.po (+2086/-100)
stock/i18n/vi.po (+168/-0)
stock/stock.py (+16/-0)
stock/stock_view.xml (+41/-11)
stock/wizard/stock_return_picking.py (+4/-0)
stock/wizard/stock_splitinto.py (+7/-0)
stock_location/i18n/es.po (+32/-0)
stock_location/i18n/pl.po (+6/-0)
stock_location/i18n/pt.po (+5/-0)
stock_location/i18n/ru.po (+6/-0)
stock_location/i18n/stock_location.pot (+5/-0)
stock_no_autopicking/i18n/es.po (+44/-0)
stock_no_autopicking/i18n/ru.po (+29/-0)
subscription/i18n/es.po (+74/-0)
thunderbird/i18n/pt_BR.po (+9/-0)
users_ldap/i18n/es.po (+93/-15)
users_ldap/i18n/it.po (+32/-0)
warning/i18n/el.po (+224/-0)
warning/i18n/es.po (+30/-0)
warning/i18n/fr.po (+32/-0)
warning/i18n/it.po (+46/-0)
warning/i18n/mn.po (+51/-1)
warning/i18n/sv.po (+32/-0)
- Mustufa Rangwala (Open ERP): Approve
-
Diff: 21 lines (+2/-2)1 file modifiedbase_iban/base_iban.py (+2/-2)
- Mustufa Rangwala (Open ERP) (community): Needs Fixing
-
Diff: 225 lines (+74/-63)4 files modifiedaccount/report/account_journal.py (+16/-4)
account/report/account_journal.rml (+56/-56)
account_voucher/account_voucher.py (+0/-1)
base_iban/base_iban.py (+2/-2)
description: | updated |
Changed in openobject-addons: | |
status: | Confirmed → In Progress |
Changed in openobject-addons: | |
status: | Fix Committed → Fix Released |
Well... I don't understand very well the problem.
This is... here in spain we usually invoice from packing. So we don't create supplier invoice from order but from packing.
If your supplier send you an invoice for each packing, I don't know how ids are linked internally but functionally it works really fine.
This is you confirm order, you obtain the pack.
You receive the first pack, make partial picking.. you could even receive goods corresponding to different purchase orders into a single pack...
At the end of the month, receiving invoice from supplier you filter by date and supplier name and easily you create a correct invoice.
I think relating purchase order itself with one single invoice or several invoices, has no relevance if line itself is good linked. It could be extremly complicated linking to order invoices including other purchase order line invoices and so on... I can't see the real utility for this functionality.
Out of question...
There is only one thing missing here and it is supplier packing reference number. It would be much more easier to make invoice from several packs identifying with supplier number and not OpenERP internal number. I made a little module published on community to solve this little problem.