This question has been flagged
2574 Views


Hi,

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, {

'orderno':order.order_no,

'kot_date':order.o_date,

'room_no':order.room_no.name,

'w_name':order.waiter_name.name,

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

})

for order_line in order.order_list:

o_line = {

'kot_order_list':kot_data,

'name':order_line.name.id,

'item_qty':order_line.item_qty,

}

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'),

}

hotel_restaurant_view.xml------------------------------------------------------------------------

<!--

==============================

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">

<header>

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

</header>

<sheet>

<h1>

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

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

</h1>

<group>

<group>

<field name="o_date" />

</group>

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

<field name="room_no"/>

<field name="waiter_name"/>

</group>

<newline/>

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

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

<newline/>

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

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

<form string="Order List">

<group>

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

<field name="item_qty"/>

<field name="item_rate"/>

</group>

</form>

<tree string="Order List">

<field name="name" />

<field name="item_qty"/>

<field name="item_rate"/>

<field name="price_subtotal"/>

</tree>

</field>

</group>

<newline/>

<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" />

</div>

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

</group>

<div class="oe_clear"/>

</sheet>

</form>

</field>

</record>

<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"/>

</tree>

</field>

</record>

<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>

</record>

<menuitem name="Table Order"

id="menu_open_view_hotel_restaurant_order_form_tree"

action="open_view_hotel_restaurant_order_form_tree"

sequence="11"

parent="hotel_restaurant_menu"/>

Avatar
Discard