This question has been flagged
1 Reply
8251 Views


I want to create orders from backend pos. So, I made button CREATE in pos.order visible. But when clicking on button , I got this error :


The operation cannot be completed:

- Create/update: a mandatory field is not set.

- Delete: another model requires the record being deleted. If possible, archive it instead.


Model: Point of Sale Orders (pos.order), Field: Returned (amount_return)


Here is my code:

//.xml


<record id="view_pos_order_create_extend" model="ir.ui.view">

        <field name="name">view_pos_order_create_extend</field>

        <field name="model">pos.order</field>

        <field name="inherit_id" ref="point_of_sale.view_pos_order_tree"/>

        <field name="arch" type="xml">

             <xpath expr="//tree" position="attributes">

                 <attribute name="create">1</attribute>

            </xpath>

        </field>

    </record>


//.py


 class PosOrderExtend(models.Model):

    _inherit = "pos.order"

    _description = "Point of Sale Orders"

    _order = "id desc"


      @api.onchange('payment_ids', 'lines', 'partner_id')

        def _onchange_amount_all(self):

            for order in self:

                currency = self.env.company.currency_id

                if self.partner_id.property_product_pricelist.currency_id:

                    currency = self.partner_id.property_product_pricelist.currency_id

                order.amount_paid = sum(payment.amount for payment in order.payment_ids)

                order.amount_return = sum(payment.amount < 0 and payment.amount or 0 for payment in order.payment_ids)

                order.amount_tax = currency.round(

                    sum(self._amount_line_tax(line, order.fiscal_position_id) for line in order.lines))

                amount_untaxed = currency.round(sum(line.price_subtotal for line in order.lines))

                order.amount_total = order.amount_tax + amount_untaxed


What's wrong please? How can I fix it ? Thanks.

Avatar
Discard
Author

For field 'amount_return' , I added it in function of standard Odoo: def _complete_values_from_session(self, session, values):

if values.get('state') and values['state'] == 'paid':

values['name'] = session.config_id.sequence_id._next()

values.setdefault('pricelist_id', session.config_id.pricelist_id.id)

values.setdefault('fiscal_position_id', session.config_id.default_fiscal_position_id.id)

values.setdefault('company_id', session.config_id.company_id.id)

values.setdefault('amount_return', self.amount_return)

return values;

but now I got same error with field 'product_id'.

I couldn't fix it I got always error : 'pos.order' object ,has no attribute 'product_id' , How can fix it please? @Niyas Raphy

Best Answer

Hi Cristina,

  I see that your inheriting the onchange and the create function of pos.order ,

1. In your def create your returning amount_return which is a mandatory field and by default this field gets value only on onchange, but you are returning  it on create.

2. During the create button, i hope there wont be any payment_ids  because, only if there is any payment you get the value for amount_return, i got this from this loc 
order.amount_return = sum(payment.amount < 0 and payment.amount or 0 for payment in order.payment_ids)

3. I guess so the error  a mandatory field is not set delete .

4. On your convo with Mr. @Niyas Raphy

 'pos.order' object ,has no attribute 'product_id'

For your info, product_id is present in the model pos.order.line    in your code, somewhere you are referencing  product_id from  pos.order

For example : when you iterate through the one2many lines in pos.order 

for each in self:

    for line in each.lines:

        each.product_id  // must be line.product_id

Hope it helps,

Thanks


Avatar
Discard