Search code examples
pythonodooodoo-10odoo-9

Odoo - Confirm Sales Order


Hi I am using Odoo10 and trying to create a sales order in POS, below code creates the Sales orders quotation. I want to Confirm the Sale and create Sales order not quotation.

@api.model
    def create_sales_order(self, orderline, customer_id, sign):
        sale_pool = self.env['sale.order']
        prod_pool = self.env['product.product']
        sale_line_pool = self.env['sale.order.line']
        sale_no = ''
        sale = {}
        if customer_id:
            customer_id = int(customer_id)
            sale = {'partner_id': customer_id, 
                    'partner_invoice_id': customer_id,
                    'partner_shipping_id': customer_id, 
                    'signature': sign}
            sale_id = sale_pool.create(sale)
            if sale_id:
                sale_brw = sale_id
                sale_brw.onchange_partner_id()
                #create sale order line
                for line in orderline:
                    sale_line = {}
                    if line.get('product_id'):
                        prod_rec = prod_pool.browse(line['product_id'])
                        sale_line.update({'name': prod_rec.name or False,
                                          'product_id': prod_rec.id,
                                          'product_uom_qty': line['qty'],
                                          'discount': line.get('discount'),
                                          'order_id': sale_id.id})
                        sale_line_id = sale_line_pool.create(sale_line)
                        for line in sale_line_id:
                            line.product_id_change()
        return {"name": sale_brw.name, "id": sale_brw.id } 

How do I create sales order not quotation?


Solution

  • Short answer: Set state to "sale":

    
        sale = {'partner_id': customer_id, 
                'partner_invoice_id': customer_id,
                'partner_shipping_id': customer_id, 
                'signature': sign,
                'state': 'sale'}
    

    Sale orders and Quotations are saved on the same model (namely, sale.order) you can tell whether it is a SO or a Quote by looking at its state:

    state  | Meaning
    -------|--------
    draft  | Quotation
    sent   | Quotation Sent
    sale   | Sales Order
    done   | Locked
    cancel | Cancelled
    

    Also, you can look at the function action_confirm which is triggered by clicking on the Confirm Sale button on addons/sale/models/sale.py file:

    
        445     def action_done(self):
        446         return self.write({'state': 'done'})
    ...
        451     @api.multi
        452     def action_confirm(self):
        453         for order in self:
        454             order.state = 'sale'
        455             order.confirmation_date = fields.Datetime.now()
        456             if self.env.context.get('send_email'):
        457                 self.force_quotation_send()
        458             order.order_line._action_procurement_create()
        459         if self.env['ir.values'].get_default('sale.config.settings', 'auto_done_setting'):
        460             self.action_done()
        461         return True