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