I Have an one one2many field in Sale Order Line model in that one2many field I have a three fields in them. When I am creating a new sale order record and I am choosing a customer then I am clicking as add an item in Order Lines Page and I am choosing one product and below the product field I added one2many field and I am given the values for them then in tree view itself ... then I am save and close the one2many order lines page record.
Before I am savings the sale order record I am just changing the customer value then I am seeing the product value in that I given one2many record values are false but the record created is showing only that the record inside values get false.
I am having major issue in this...
Is there any bug in the sale order model for the version odoo10..
How can I solve this..?
https://youtu.be/By_B6uOviSU
Here above I given a youtube link that I taken demo for the one2many error.
Here Below I given a source code that I developed in sale order model
sale.py
# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo import api, fields, models, _ class SaleMandatoryAddons(models.Model): _name = "sale.mandatory.addons" _description = "Mandatory Addons" sale_order_line_id = fields.Many2one('sale.order.line', 'Sale Order Line') number = fields.Integer('Sequence', required=True) product_id = fields.Many2one('product.product', 'Item Name', required=True) quantity = fields.Float('Recommended Quantity', required=True, digits=dp.get_precision('Product Unit of Measure')) class SaleOptionalAddons(models.Model): _name = "sale.optional.addons" _description = "Optional Addons" sale_order_line_id = fields.Many2one('sale.order.line', 'Sale Order Line') number = fields.Integer('Sequence', required=True) product_id = fields.Many2one('product.product', 'Item Name', required=True) quantity = fields.Float('Actual Recommended Quantity', required=True, digits=dp.get_precision('Product Unit of Measure')) class SaleOrderLine(models.Model): _name = 'sale.order.line' _inherit = 'sale.order.line' _description = 'Sales Order Line' mandatory_addons = fields.One2many('sale.mandatory.addons', 'sale_order_line_id', 'Mandatory Addons', copy=True) optional_addons = fields.One2many('sale.optional.addons', 'sale_order_line_id', 'Optional Addons', copy=True)
sale_order_view.xml
<?xml version="1.0" encoding="utf-8"?> <odoo> <record id="view_quotation_form" model="ir.ui.view"> <field name="name">sale.order.form</field> <field name="model">sale.order</field> <field name="arch" type="xml"> <form string="Sales Order" class="o_sale_order"> <header> <button name="%(sale.action_view_sale_advance_payment_inv)d" string="Create Invoice" type="action" class="btn-primary" attrs="{'invisible': [('invoice_status', '!=', 'to invoice')]}"/> <button name="%(sale.action_view_sale_advance_payment_inv)d" string="Create Invoice" type="action" context="{'default_advance_payment_method': 'percentage'}" attrs="{'invisible': ['|',('invoice_status', '!=', 'no'), ('state', '!=', 'sale')]}"/> <button name="action_quotation_send" string="Send by Email" type="object" states="draft" class="btn-primary"/> <button name="print_quotation" string="Print" type="object" states="draft" class="btn-primary"/> <button name="action_confirm" states="sent" string="Confirm Sale" class="btn-primary o_sale_confirm" type="object" /> <button name="action_confirm" states="draft" string="Confirm Sale" class="o_sale_confirm" type="object" /> <button name="print_quotation" string="Print" type="object" states="sent,sale"/> <button name="action_quotation_send" string="Send by Email" type="object" states="sent,sale"/> <button name="action_cancel" states="draft,sent,sale" type="object" string="Cancel"/> <button name="action_draft" states="cancel" type="object" string="Set to Quotation"/> <button name="action_done" type="object" string="Lock" states="sale" help="If the sale is locked, you can not modify it anymore. However, you will still be able to invoice or deliver."/> <field name="state" widget="statusbar" statusbar_visible="draft,sent,sale"/> </header> <sheet> <div class="oe_button_box" name="button_box"> <button name="action_view_invoice" type="object" class="oe_stat_button" icon="fa-pencil-square-o" attrs="{'invisible': [('invoice_count', '=', 0)]}"> <field name="invoice_count" widget="statinfo" string="Invoices"/> </button> </div> <div class="oe_title"> <h1> <field name="name" readonly="1"/> </h1> </div> <group> <group> <field name="partner_id" domain="[('customer','=',True)]" context="{'search_default_customer':1, 'show_address': 1}" options='{"always_reload": True}'/> <field name="partner_invoice_id" groups="sale.group_delivery_invoice_address" context="{'default_type':'invoice'}"/> <field name="partner_shipping_id" groups="sale.group_delivery_invoice_address" context="{'default_type':'delivery'}"/> </group> <group> <field name="date_order" attrs="{'invisible': [('state', 'in', ['sale', 'done', 'cancel'])]}"/> <field name="validity_date" attrs="{'invisible': [('state', 'in', ['sale', 'done'])]}"/> <field name="confirmation_date" attrs="{'invisible': [('state', 'in', ['draft', 'sent', 'cancel'])]}"/> <field name="pricelist_id" groups="product.group_sale_pricelist"/> <field name="currency_id" invisible="1"/> <field name="payment_term_id" options="{'no_create': True}"/> </group> </group> <notebook> <page string="Order Lines"> <field name="order_line" mode="tree,kanban" attrs="{'readonly': [('state', 'in', ('done','cancel'))]}"> <form string="Sales Order Lines"> <group> <group> <field name="product_id" context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'uom':product_uom, 'company_id': parent.company_id}" attrs="{'readonly': ['|', ('qty_invoiced', '>', 0), ('procurement_ids', '!=', [])]}" /> <field name="layout_category_id" groups="sale.group_sale_layout"/> <field name="invoice_status" invisible="1"/> <field name="qty_to_invoice" invisible="1"/> <field name="qty_delivered_updateable" invisible="1"/> <field name="procurement_ids" invisible="1"/> <field name="price_subtotal" invisible="1"/> <label for="product_uom_qty" string="Ordered Quantity"/> <div> <field context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'uom':product_uom, 'uom_qty_change':True, 'company_id': parent.company_id}" name="product_uom_qty" class="oe_inline"/> <field name="product_uom" groups="product.group_uom" class="oe_inline oe_no_button" attrs="{'readonly': [('state', 'in', ('sale','done', 'cancel'))]}"/> </div> <label for="qty_delivered" string="Delivered Quantity" invisible="context.get('hide_sale')"/> <div invisible="context.get('hide_sale')"> <field name="qty_delivered" attrs="{'readonly': [('qty_delivered_updateable', '=', False)]}"/> </div> <label for="qty_invoiced" string="Invoiced Quantity" invisible="context.get('hide_sale')"/> <div invisible="context.get('hide_sale')"> <field name="qty_invoiced" invisible="context.get('hide_sale')"/> </div> <field name="price_unit"/> <label for="discount" groups="sale.group_discount_per_so_line"/> <div name="discount" groups="sale.group_discount_per_so_line"> <field name="discount" class="oe_inline"/> %% </div> </group> <group> <field name="tax_id" widget="many2many_tags" domain="[('type_tax_use','=','sale'),('company_id','=',parent.company_id)]" attrs="{'readonly': [('qty_invoiced', '>', 0)]}"/> <label for="customer_lead"/> <div> <field name="customer_lead" class="oe_inline"/> days </div> <label for="analytic_tag_ids"/> <div> <field name="analytic_tag_ids" widget="many2many_tags"/> </div> </group> </group> <notebook> <page string="Optional addons" name="addons_optional" > <field name="optional_addons" > <form> <group> <field name="number" /> <field name="product_id" /> <field name="quantity"/> </group> </form> <tree editable="bottom"> <field name="number" /> <field name="product_id" /> <field name="quantity" string="Quantity"/> </tree> </field> </page> <page string="Mandatory addons" name="addons_mandatory" > <field name="mandatory_addons" > <tree editable="bottom"> <field name="number" /> <field name="product_id" /> <field name="quantity" /> </tree> <form> <group> <field name="number"/> <field name="product_id"/> <field name="quantity"/> </group> </form> </field> </page> </notebook> <label for="name"/> <field name="name"/> <div groups="base.group_no_one"> <label for="invoice_lines"/> <field name="invoice_lines"/> </div> <field name="state" invisible="1"/> </form> <tree string="Sales Order Lines" decoration-info="invoice_status=='to invoice'"> <field name="product_id" attrs="{'readonly': ['|', ('qty_invoiced', '>', 0), ('procurement_ids', '!=', [])]}" context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'uom':product_uom, 'company_id': parent.company_id}" /> <field name="layout_category_id" groups="sale.group_sale_layout"/> <field name="name"/> <field name="product_uom_qty" string="Ordered Qty" context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'uom':product_uom, 'company_id': parent.company_id}" /> <field name="qty_delivered" invisible="context.get('hide_sale')" attrs="{'readonly': [('qty_delivered_updateable', '=', False)]}"/> <field name="qty_invoiced" invisible="context.get('hide_sale')"/> <field name="qty_to_invoice" invisible="1"/> <field name="product_uom" attrs="{'readonly': [('state', 'in', ('sale','done', 'cancel'))]}" context="{'company_id': parent.company_id}" groups="product.group_uom" options='{"no_open": True}'/> <field name="analytic_tag_ids" groups="analytic.group_analytic_accounting" widget="many2many_tags"/> <field name="price_unit" attrs="{'readonly': [('qty_invoiced', '>', 0)]}"/> <field name="tax_id" widget="many2many_tags" domain="[('type_tax_use','=','sale'),('company_id','=',parent.company_id)]" attrs="{'readonly': [('qty_invoiced', '>', 0)]}"/> <field name="discount" groups="sale.group_discount_per_so_line"/> <field name="price_subtotal" widget="monetary" groups="sale.group_show_price_subtotal"/> <field name="price_total" widget="monetary" groups="sale.group_show_price_total"/> <field name="qty_delivered_updateable" invisible="1"/> <field name="procurement_ids" invisible="1"/> <field name="state" invisible="1"/> <field name="invoice_status" invisible="1"/> <field name="customer_lead" invisible="1"/> <field name="currency_id" invisible="1"/> </tree> <kanban class="o_kanban_mobile"> <field name="product_id"/> <field name="product_uom_qty"/> <field name="product_uom" groups="product.group_uom"/> <field name="price_subtotal"/> <templates> <t t-name="kanban-box"> <div t-attf-class="oe_kanban_card oe_kanban_global_click"> <div class="row"> <div class="col-xs-12"> <strong><span><t t-esc="record.product_id.value"/></span></strong> </div> </div> <div class="row"> <div class="col-xs-8 text-muted"> <span><t t-esc="record.product_uom_qty.value"/> <t t-esc="record.product_uom.value"/></span> </div> <div class="col-xs-4 text-muted"> <span class="pull-right text-right"><t t-esc="record.price_subtotal.value"/></span> </div> </div> </div> </t> </templates> </kanban> </field> <group class="oe_subtotal_footer oe_right" colspan="2" name="sale_total"> <field name="amount_untaxed" widget='monetary' options="{'currency_field': 'currency_id'}"/> <field name="amount_tax" widget='monetary' options="{'currency_field': 'currency_id'}"/> <div class="oe_subtotal_footer_separator oe_inline o_td_label"> <label for="amount_total" /> <button name="button_dummy" states="draft,sent" string="(update)" type="object" class="oe_edit_only oe_link"/> </div> <field name="amount_total" nolabel="1" class="oe_subtotal_footer_separator" widget='monetary' options="{'currency_field': 'currency_id'}"/> </group> <field name="note" class="oe_inline" placeholder="Setup default terms and conditions in your company settings."/> <div class="oe_clear"/> </page> <page string="Other Information"> <group> <group string="Sales Information" name="sales_person"> <field name="user_id"/> <field name="team_id" options="{'no_create': True}"/> <field name="client_order_ref"/> <field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/> <field name="project_id" attrs="{'invisible':[('state','=','sale')]}" context="{'default_partner_id':partner_invoice_id, 'default_name':name}" groups="analytic.group_analytic_accounting"/> <field name="related_project_id" attrs="{'readonly': ['|',('project_id','!=',False),('invoice_count','!=',0),('state','=','sale')],'invisible':[('state','!=','sale')]}" context="{'default_partner_id':partner_invoice_id, 'default_name':name}" groups="analytic.group_analytic_accounting"/> </group> <group name="sale_pay" string="Invoicing"> <field name="fiscal_position_id" options="{'no_create': True}"/> <field name="invoice_status" attrs="{'invisible': [('state', 'not in', ('sale','done'))]}"/> </group> <group string="Reporting" name="technical" groups="base.group_no_one"> <field groups="base.group_no_one" name="origin"/> </group> </group> </page> </notebook> </sheet> <div class="oe_chatter"> <field name="message_follower_ids" widget="mail_followers"/> <field name="message_ids" widget="mail_thread"/> </div> </form> </field> </record> <record id="action_quotations_form" model="ir.actions.act_window.view"> <field eval="1" name="sequence"/> <field name="view_mode">form</field> <field name="view_id" ref="view_quotation_form"/> <field name="act_window_id" ref="sale.action_quotations"/> </record> <record id="action_quotations_tree" model="ir.actions.act_window.view"> <field eval="0" name="sequence"/> <field name="view_mode">tree</field> <field name="view_id" ref="sale.view_quotation_tree"/> <field name="act_window_id" ref="sale.action_quotations"/> </record> <record id="view_sale_optional_addons_form" model="ir.ui.view"> <field name="name">sale.optional.addons.form</field> <field name="model">sale.optional.addons</field> <field name="arch" type="xml"> <form string="Sales Optional Addons"> <sheet> <group> <field name="number" /> <field name="product_id" /> <field name="quantity"/> </group> </sheet> </form> </field> </record> <record id="view_sale_optional_addons_tree" model="ir.ui.view"> <field name="name">sale.optional.addons.tree</field> <field name="model">sale.optional.addons</field> <field name="arch" type="xml"> <tree string="Sales Optional Addons"> <field name="number" /> <field name="product_id" /> <field name="quantity"/> </tree> </field> </record> </odoo>
That's simply too much.