Odoo Help


How to create an Invoice for a Restaurant

Kapil More
on 6/21/15, 2:22 AM 922 views


I am creating the module for Restaurant Management. I added the tabs like Table Booking, Orders, Kitchen Order Ticket(KOT)

where, Orders are taken and KOT is generated.

Now, I want to generate Invoice after generating KOT. I just want the value of TOTAL (amount_total) field on Orders tab should get invoiced and the TOTAL gets added. After that, It should creates Invoice on clicking the Generate Invoice Button.

Here is my code,

hotel_restaurant.py -------------------------------------------------------------------

class hotel_restaurant_order(osv.Model):

def _sub_total(self, cr, uid, ids, field_name, arg, context=None):

res = {}

for sale in self.browse(cr, uid, ids, context=context):

res[sale.id] = sum(line.price_subtotal for line in sale.order_list)

return res

def _total(self, cr, uid, ids, field_name, arg, context=None):

res = {}

for line in self.browse(cr, uid, ids, context=context):

res[line.id] = line.amount_subtotal + (line.amount_subtotal * line.tax) / 100

return res

def generate_kot(self, cr, uid, ids, part):

order_tickets_obj = self.pool.get('hotel.restaurant.kitchen.order.tickets')

restaurant_order_list_obj = self.pool.get('hotel.restaurant.order.list')

for order in self.browse(cr, uid, ids):

table_ids = [x.id for x in order.table_no]

kot_data = order_tickets_obj.create(cr, uid, {





'tableno':[(6, 0, table_ids)],


for order_line in order.order_list:

o_line = {





restaurant_order_list_obj.create(cr, uid, o_line)

return True

_name = "hotel.restaurant.order"

_description = "Includes Hotel Restaurant Order"

_columns = {

'order_no':fields.char('Order Number', size=64, required=True),

'o_date':fields.datetime('Date', required=True),

'room_no':fields.many2one('hotel.room', 'Room No'),

'waiter_name':fields.many2one('res.partner', 'Waiter Name'),

'table_no':fields.many2many('hotel.restaurant.tables', 'temp_table2', 'table_no', 'name', 'Table Number'),

'order_list':fields.one2many('hotel.restaurant.order.list', 'o_list', 'Order List'),

'tax': fields.float('Tax (%) '),

'amount_subtotal': fields.function(_sub_total, method=True, string='Subtotal'),

'amount_total':fields.function(_total, method=True, string='Total'),


_defaults = {

'order_no': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'hotel.restaurant.order'),





Table Order



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

<field name="name">hotel_restaurant_order.form</field>

<field name="model">hotel.restaurant.order</field>

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

<form string="Order" version="7.0">


<button string="Generate KOT" name="generate_kot" type="object" icon="gtk-go-forward"/>




<label string="Table Order" colspan="4" />

<field name="order_no" colspan="4"/>




<field name="o_date" />


<group colspan="2" col="4">

<field name="room_no"/>

<field name="waiter_name"/>



<separator colspan='4' string='Table List'/>

<field name="table_no" colspan="4" nolabel='1'/>


<separator colspan='4' string='Order List'/>

<field name="order_list" colspan="4" nolabel='1'>

<form string="Order List">


<field name="name" on_change="on_change_item_name(name)"/>

<field name="item_qty"/>

<field name="item_rate"/>



<tree string="Order List">

<field name="name" />

<field name="item_qty"/>

<field name="item_rate"/>

<field name="price_subtotal"/>





<group col="2" class="oe_subtotal_footer oe_right">

<field name="amount_subtotal" widget="monetary"/>

<field name="tax" widget='monetary'/>

<div class="oe_subtotal_footer_separator oe_inline">

<label for="amount_total" />


<field name="amount_total" nolabel="1" widget='monetary'/>


<div class="oe_clear"/>





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

<field name="name">hotel_restaurant_order.tree</field>

<field name="model">hotel.restaurant.order</field>

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

<tree string="Order">

<field name="order_no"/>

<field name="o_date"/>

<field name="table_no"/>

<field name="room_no"/>

<field name="waiter_name"/>

<field name="order_list"/>




<record model="ir.actions.act_window" id="open_view_hotel_restaurant_order_form_tree">

<field name="name">Order Generate</field>

<field name="res_model">hotel.restaurant.order</field>

<field name="view_type">form</field>

<field name="view_mode">tree,form</field>


<menuitem name="Table Order"





About This Community

This platform is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.


Odoo Training Center

Access to our E-learning platform and experience all Odoo Apps through learning videos, exercises and Quizz.

Test it now

Question tools

1 follower(s)


Asked: 6/21/15, 2:22 AM
Seen: 922 times
Last updated: 6/21/15, 2:22 AM