| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/19.0/lunch |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Human Resources/Lunch |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Odoo S.A. |
| MAINTAINERS | |
| MAINTAINERS | Odoo S.A. |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Thibault Delavallée, Xavier Morel, Aaron Bohy, Yannick Tivisse, Alexandre Kühn, Julien Castiaux, Julien Mougenot, Prakash Prajapati, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, William Braeckman, luvi, alsh-odoo, Louis Wicket (wil), Victor Piryns (pivi), Dylan Kiss (dyki), omra-odoo, Mélanie, mano-odoo, Shaan Thakkar (THSH), Pierre Pulinckx (PIPU), Pierre Pulinckx, Bastien PIERRE, Vincent Sevestre, Krzysztof Magusiak (krma), pajo, Elliot ELCO, saurabh, chpa-odoo |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 01:51:46 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - base_setup - web - bus - web_tour - html_editor |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
The base module to manage lunch.
================================
Many companies order sandwiches, pizzas and other, from usual vendors, for their employees to offer them more facilities.
However lunches management within the company requires proper administration especially when the number of employees or vendors is important.
The “Lunch Order” module has been developed to make this management easier but also to offer employees more tools and usability.
In addition to a full meal and vendor management, this module offers the possibility to display warning and provides quick order selection based on employee’s preferences.
If you want to save your employees' time and avoid them to always have coins in their pockets, this module is essential.
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
lunch_alert_view_form |
lunch.alert.form | lunch.alert | form | New |
lunch_alert_view_kanban |
lunch.alert.kanban | lunch.alert | kanban | New |
lunch_alert_view_search |
lunch.alert.search | lunch.alert | search | New |
lunch_alert_view_tree |
lunch.alert.list | lunch.alert | list | New |
lunch_cashmove_report_view_form |
lunch.cashmove.report.form | lunch.cashmove.report | form | New |
lunch_cashmove_report_view_search |
lunch.cashmove.report.search | lunch.cashmove.report | search | New |
lunch_cashmove_report_view_search_2 |
lunch.cashmove.report.search | lunch.cashmove.report | search | New |
lunch_cashmove_report_view_tree |
lunch.cashmove.report.list | lunch.cashmove.report | list | New |
lunch_cashmove_report_view_tree_2 |
lunch.cashmove.report.list | lunch.cashmove.report | list | New |
lunch_cashmove_view_form |
lunch.cashmove.form | lunch.cashmove | form | New |
lunch_cashmove_view_search |
lunch.cashmove.search | lunch.cashmove | search | New |
lunch_cashmove_view_tree |
lunch.cashmove.list | lunch.cashmove | list | New |
lunch_location_form_view |
lunch.location.view.form | lunch.location | form | New |
lunch_location_kanban_view |
lunch.location.view.kanban | lunch.location | kanban | New |
lunch_location_tree_view |
lunch.location.view.form | lunch.location | list | New |
lunch_location_view_search |
lunch.location.view.search | lunch.location | search | New |
lunch_order_view_form |
lunch.order.view.form | lunch.order | form | New |
lunch_order_view_graph |
lunch.order.graph | lunch.order | graph | New |
lunch_order_view_kanban |
lunch.order.kanban | lunch.order | kanban | New |
lunch_order_view_pivot |
lunch.order.pivot | lunch.order | pivot | New |
lunch_order_view_search |
lunch.order.search | lunch.order | search | New |
lunch_order_view_tree |
lunch.order.list | lunch.order | list | New |
lunch_payment_dialog |
Lunch Payment Dialog | ir.ui.view | qweb | New |
lunch_product_category_view_form |
Product category Form | lunch.product.category | form | New |
lunch_product_category_view_kanban |
Product category Kanban | lunch.product.category | kanban | New |
lunch_product_category_view_search |
lunch.product.category.search | lunch.product.category | search | New |
lunch_product_category_view_tree |
Product category List | lunch.product.category | list | New |
lunch_product_view_form |
lunch.product.form | lunch.product | form | New |
lunch_product_view_search |
lunch.product.search | lunch.product | search | New |
lunch_product_view_tree |
lunch.product.list | lunch.product | list | New |
lunch_product_view_tree_order |
lunch.product.list.order | lunch.product | xpath | Inherits lunch_product_view_tree |
lunch_supplier_view_form |
lunch.supplier.view.form | lunch.supplier | form | New |
lunch_supplier_view_kanban |
lunch.supplier.view.kanban | lunch.supplier | kanban | New |
lunch_supplier_view_search |
lunch.supplier.view.search | lunch.supplier | search | New |
lunch_supplier_view_tree |
lunch.supplier.view.list | lunch.supplier | list | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.lunch | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
view_lunch_cashmove_kanban |
lunch.cashmove.kanban | lunch.cashmove | kanban | New |
view_lunch_cashmove_report_kanban |
lunch.cashmove.report.kanban | lunch.cashmove.report | kanban | New |
view_lunch_product_kanban |
lunch.product.kanban | lunch.product | kanban | New |
view_lunch_product_kanban_order |
lunch.product.kanban | lunch.product | kanban | New |
active
Boolean
default=True
args: 'Active'
available_today
Boolean
compute='_compute_available_today'
search='_search_available_today'
args: 'Is Displayed Today'
cron_id
Many2one → ir.cron
ondelete='cascade'
readonly=True
required=True
args: 'ir.cron'
fri
Boolean
default=True
location_ids
Many2many → lunch.location
string='Location'
args: 'lunch.location'
message
Html
required=True
translate=True
args: 'Message'
mode
Selection
default='alert'
string='Display'
args: [('alert', 'Alert in app'), ('chat', 'Chat notification')]
mon
Boolean
default=True
name
Char
required=True
translate=True
args: 'Alert Name'
notification_moment
Selection
default='am'
required=True
args: [('am', 'AM'), ('pm', 'PM')]
notification_time
Float
default=10.0
string='Notification Time'
recipients
Selection
default='everyone'
string='Recipients'
args: [('everyone', 'Everyone'), ('last_week', 'Employee who ordered last week'), ('last_month', 'Employee who ordered last month'), ('last_year', 'Employee who ordered last year')]
sat
Boolean
default=True
sun
Boolean
default=True
thu
Boolean
default=True
tue
Boolean
default=True
tz
Selection
default=<expr>
required=True
string='Timezone'
args: _tz_get
until
Date
wed
Boolean
default=True
create(self, vals_list)
unlink(self)
write(self, vals)
amount
Float
required=True
args: 'Amount'
currency_id
Many2one → res.currency
default=<expr>
required=True
args: 'res.currency'
date
Date
default=fields.Date.context_today
required=True
args: 'Date'
description
Text
user_id
Many2one → res.users
default=<expr>
args: 'res.users', 'User'
get_wallet_balance(self, user, include_config=True)
amount
Float
currency_id
Many2one → res.currency
string='Currency'
args: 'res.currency'
date
Date
description
Text
id
Id
string='ID'
user_id
Many2one → res.users
string='User'
args: 'res.users'
init(self)
address
Text
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
name
Char
required=True
args: 'Location Name'
No public methods.
active
Boolean
default=True
args: 'Active'
available_on_date
Boolean
compute='_compute_available_on_date'
available_today
Boolean
related='supplier_id.available_today'
available_toppings_1
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
available_toppings_2
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
available_toppings_3
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
category_id
Many2one
related='product_id.category_id'
store=True
string='Product Category'
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
currency_id
Many2one
related='company_id.currency_id'
store=True
date
Date
default=fields.Date.context_today
readonly=False
required=True
args: 'Order Date'
display_add_button
Boolean
compute='_compute_display_add_button'
display_reorder_button
Boolean
compute='_compute_display_reorder_button'
display_toppings
Text
compute='_compute_display_toppings'
store=True
args: 'Extras'
image_128
Image
compute='_compute_product_images'
image_1920
Image
compute='_compute_product_images'
lunch_location_id
Many2one → lunch.location
default=<expr>
args: 'lunch.location'
name
Char
readonly=True
related='product_id.name'
string='Product Name'
note
Text
notified
Boolean
default=False
order_deadline_passed
Boolean
compute='_compute_order_deadline_passed'
price
Monetary
compute='_compute_total_price'
readonly=True
store=True
args: 'Total Price'
product_description
Html
related='product_id.description'
args: 'Description'
product_id
Many2one → lunch.product
required=True
string='Product'
args: 'lunch.product'
quantity
Float
default=1
required=True
args: 'Quantity'
state
Selection
default='new'
index=True
readonly=True
args: [('new', 'To Order'), ('ordered', 'Ordered'), ('sent', 'Sent'), ('confirmed', 'Received'), ('cancelled', 'Cancelled')], 'Status'
supplier_id
Many2one
index=True
related='product_id.supplier_id'
store=True
string='Vendor'
topping_ids_1
Many2many → lunch.topping
domain=[('topping_category', '=', 1)]
string='Extras 1'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_ids_2
Many2many → lunch.topping
domain=[('topping_category', '=', 2)]
string='Extras 2'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_ids_3
Many2many → lunch.topping
domain=[('topping_category', '=', 3)]
string='Extras 3'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_label_1
Char
related='product_id.supplier_id.topping_label_1'
topping_label_2
Char
related='product_id.supplier_id.topping_label_2'
topping_label_3
Char
related='product_id.supplier_id.topping_label_3'
topping_quantity_1
Selection
related='product_id.supplier_id.topping_quantity_1'
topping_quantity_2
Selection
related='product_id.supplier_id.topping_quantity_2'
topping_quantity_3
Selection
related='product_id.supplier_id.topping_quantity_3'
user_id
Many2one → res.users
default=<expr>
args: 'res.users', 'User'
action_cancel(self)
action_confirm(self)
action_notify(self)
action_order(self)
action_reorder(self)
action_reset(self)
action_send(self)
add_to_cart(self)
create(self, vals_list)
update_quantity(self, increment)
write(self, vals)
active
Boolean
default=True
category_id
Many2one → lunch.product.category
check_company=True
required=True
args: 'lunch.product.category', 'Product Category'
company_id
Many2one → res.company
readonly=False
related='supplier_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
description
Html
translate=True
args: 'Description'
favorite_user_ids
Many2many → res.users
check_company=True
args: 'res.users', 'lunch_product_favorite_user_rel', 'product_id', 'user_id'
is_available_at
Many2one → lunch.location
compute='_compute_is_available_at'
search='_search_is_available_at'
args: 'lunch.location', 'Product Availability'
is_favorite
Boolean
compute='_compute_is_favorite'
inverse='_inverse_is_favorite'
is_new
Boolean
compute='_compute_is_new'
last_order_date
Date
compute='_compute_last_order_date'
name
Char
required=True
translate=True
args: 'Product Name'
new_until
Date
price
Float
digits='Account'
required=True
args: 'Price'
product_image
Image
compute='_compute_product_image'
supplier_id
Many2one → lunch.supplier
check_company=True
required=True
args: 'lunch.supplier', 'Vendor'
write(self, vals)
active
Boolean
default=True
string='Active'
company_id
Many2one → res.company
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
image_1920
Image
default=_default_image
name
Char
required=True
translate=True
args: 'Product Category'
product_count
Integer
compute='_compute_product_count'
help='The number of products related to this category'
action_archive(self)
action_unarchive(self)
active
Boolean
default=True
automatic_email_time
Float
default=12.0
required=True
args: 'Order Time'
available_location_ids
Many2many → lunch.location
string='Location'
args: 'lunch.location'
available_today
Boolean
compute='_compute_available_today'
search='_search_available_today'
args: 'This is True when if the supplier is available today'
city
Char
readonly=False
related='partner_id.city'
company_id
Many2one → res.company
readonly=False
related='partner_id.company_id'
store=True
args: 'res.company'
country_id
Many2one → res.country
readonly=False
related='partner_id.country_id'
args: 'res.country'
cron_id
Many2one → ir.cron
ondelete='cascade'
readonly=True
required=True
args: 'ir.cron'
delivery
Selection
default='no_delivery'
args: [('delivery', 'Delivery'), ('no_delivery', 'No Delivery')]
email
Char
readonly=False
related='partner_id.email'
email_formatted
Char
readonly=True
related='partner_id.email_formatted'
fri
Boolean
default=True
moment
Selection
default='am'
required=True
args: [('am', 'AM'), ('pm', 'PM')]
mon
Boolean
default=True
name
Char
readonly=False
related='partner_id.name'
args: 'Name'
order_deadline_passed
Boolean
compute='_compute_order_deadline_passed'
partner_id
Many2one → res.partner
required=True
string='Vendor'
args: 'res.partner'
phone
Char
readonly=False
related='partner_id.phone'
recurrency_end_date
Date
help='This field is used in order to '
args: 'Until'
responsible_id
Many2one → res.users
default=<expr>
domain=<expr>
help="The responsible is the person that will order lunch for everyone. It will be used as the 'from' when sending the automatic email."
string='Responsible'
args: 'res.users'
sat
Boolean
send_by
Selection
default='phone'
args: [('phone', 'Phone'), ('mail', 'Email')], 'Send Order By'
show_confirm_button
Boolean
compute='_compute_buttons'
show_order_button
Boolean
compute='_compute_buttons'
state_id
Many2one → res.country.state
readonly=False
related='partner_id.state_id'
args: 'res.country.state'
street
Char
readonly=False
related='partner_id.street'
street2
Char
readonly=False
related='partner_id.street2'
sun
Boolean
thu
Boolean
default=True
topping_ids_1
One2many → lunch.topping
domain=[('topping_category', '=', 1)]
args: 'lunch.topping', 'supplier_id'
topping_ids_2
One2many → lunch.topping
domain=[('topping_category', '=', 2)]
args: 'lunch.topping', 'supplier_id'
topping_ids_3
One2many → lunch.topping
domain=[('topping_category', '=', 3)]
args: 'lunch.topping', 'supplier_id'
topping_label_1
Char
default='Extras'
required=True
args: 'Extra 1 Label'
topping_label_2
Char
default='Beverages'
required=True
args: 'Extra 2 Label'
topping_label_3
Char
default='Extra Label 3'
required=True
args: 'Extra 3 Label'
topping_quantity_1
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 1 Quantity'
topping_quantity_2
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 2 Quantity'
topping_quantity_3
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 3 Quantity'
tue
Boolean
default=True
tz
Selection
default=<expr>
required=True
string='Timezone'
args: _tz_get
wed
Boolean
default=True
zip_code
Char
readonly=False
related='partner_id.zip'
action_confirm_orders(self)
action_send_orders(self)
create(self, vals_list)
unlink(self)
write(self, vals)
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
name
Char
required=True
args: 'Name'
price
Monetary
required=True
args: 'Price'
supplier_id
Many2one → lunch.supplier
index='btree_not_null'
ondelete='cascade'
args: 'lunch.supplier'
topping_category
Integer
default=1
required=True
args: 'Topping Category'
No public methods.
lunch_minimum_threshold
Float
lunch_notify_message
Html
default='Your lunch has been delivered.\nEnjoy your meal!'
translate=True
No public methods.
company_lunch_minimum_threshold
Float
readonly=False
related='company_id.lunch_minimum_threshold'
string='Maximum Allowed Overdraft'
company_lunch_notify_message
Html
readonly=False
related='company_id.lunch_notify_message'
string='Lunch notification message'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
No public methods.
favorite_lunch_product_ids
Many2many → lunch.product
copy=False
groups='lunch.group_lunch_user'
args: 'lunch.product', 'lunch_product_favorite_user_rel', 'user_id', 'product_id'
last_lunch_location_id
Many2one → lunch.location
copy=False
groups='lunch.group_lunch_user'
args: 'lunch.location'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/18.0/lunch |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Human Resources/Lunch |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Christophe Simonis, Aaron Bohy, Odoo Online, Jorge Pinna Puissant, Julien Mougenot, Tiffany Chang (tic), Gorash, William Braeckman, Florian Damhaut, alsh-odoo, Louis Wicket (wil), Victor Piryns (pivi), Mahamadasif Ansari, Dylan Kiss (dyki), Xavier Bol (xbo), omra-odoo, Mélanie, bary, Maryam Kia, reka-odoo, Julien Carion (juca), Tanguy Quéguineur, sami odoo, Louis (wil), mano-odoo, Shaan Thakkar (THSH), Pierre Pulinckx (PIPU), Pierre Pulinckx (pipu), Bastien PIERRE, Vincent Sevestre, pajo, romc-odoo, Feeedeee |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 01:26:00 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - base_setup - web - bus - web_tour - html_editor |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
The base module to manage lunch.
================================
Many companies order sandwiches, pizzas and other, from usual vendors, for their employees to offer them more facilities.
However lunches management within the company requires proper administration especially when the number of employees or vendors is important.
The “Lunch Order” module has been developed to make this management easier but also to offer employees more tools and usability.
In addition to a full meal and vendor management, this module offers the possibility to display warning and provides quick order selection based on employee’s preferences.
If you want to save your employees' time and avoid them to always have coins in their pockets, this module is essential.
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
lunch_alert_view_form |
lunch.alert.form | lunch.alert | form | New |
lunch_alert_view_kanban |
lunch.alert.kanban | lunch.alert | kanban | New |
lunch_alert_view_search |
lunch.alert.search | lunch.alert | search | New |
lunch_alert_view_tree |
lunch.alert.list | lunch.alert | list | New |
lunch_cashmove_report_view_form |
lunch.cashmove.report.form | lunch.cashmove.report | form | New |
lunch_cashmove_report_view_search |
lunch.cashmove.report.search | lunch.cashmove.report | search | New |
lunch_cashmove_report_view_search_2 |
lunch.cashmove.report.search | lunch.cashmove.report | search | New |
lunch_cashmove_report_view_tree |
lunch.cashmove.report.list | lunch.cashmove.report | list | New |
lunch_cashmove_report_view_tree_2 |
lunch.cashmove.report.list | lunch.cashmove.report | list | New |
lunch_cashmove_view_form |
lunch.cashmove.form | lunch.cashmove | form | New |
lunch_cashmove_view_search |
lunch.cashmove.search | lunch.cashmove | search | New |
lunch_cashmove_view_tree |
lunch.cashmove.list | lunch.cashmove | list | New |
lunch_location_form_view |
lunch.location.view.form | lunch.location | form | New |
lunch_location_kanban_view |
lunch.location.view.kanban | lunch.location | kanban | New |
lunch_location_tree_view |
lunch.location.view.form | lunch.location | list | New |
lunch_location_view_search |
lunch.location.view.search | lunch.location | search | New |
lunch_order_view_form |
lunch.order.view.form | lunch.order | form | New |
lunch_order_view_graph |
lunch.order.graph | lunch.order | graph | New |
lunch_order_view_kanban |
lunch.order.kanban | lunch.order | kanban | New |
lunch_order_view_pivot |
lunch.order.pivot | lunch.order | pivot | New |
lunch_order_view_search |
lunch.order.search | lunch.order | search | New |
lunch_order_view_tree |
lunch.order.list | lunch.order | list | New |
lunch_payment_dialog |
Lunch Payment Dialog | ir.ui.view | qweb | New |
lunch_product_category_view_form |
Product category Form | lunch.product.category | form | New |
lunch_product_category_view_kanban |
Product category Kanban | lunch.product.category | kanban | New |
lunch_product_category_view_search |
lunch.product.category.search | lunch.product.category | search | New |
lunch_product_category_view_tree |
Product category List | lunch.product.category | list | New |
lunch_product_view_form |
lunch.product.form | lunch.product | form | New |
lunch_product_view_search |
lunch.product.search | lunch.product | search | New |
lunch_product_view_tree |
lunch.product.list | lunch.product | list | New |
lunch_product_view_tree_order |
lunch.product.list.order | lunch.product | xpath | Inherits lunch_product_view_tree |
lunch_supplier_view_form |
lunch.supplier.view.form | lunch.supplier | form | New |
lunch_supplier_view_kanban |
lunch.supplier.view.kanban | lunch.supplier | kanban | New |
lunch_supplier_view_search |
lunch.supplier.view.search | lunch.supplier | search | New |
lunch_supplier_view_tree |
lunch.supplier.view.list | lunch.supplier | list | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.lunch | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
view_lunch_cashmove_kanban |
lunch.cashmove.kanban | lunch.cashmove | kanban | New |
view_lunch_cashmove_report_kanban |
lunch.cashmove.report.kanban | lunch.cashmove.report | kanban | New |
view_lunch_product_kanban |
lunch.product.kanban | lunch.product | kanban | New |
view_lunch_product_kanban_order |
lunch.product.kanban | lunch.product | kanban | New |
active
Boolean
default=True
args: 'Active'
available_today
Boolean
compute='_compute_available_today'
search='_search_available_today'
args: 'Is Displayed Today'
cron_id
Many2one → ir.cron
ondelete='cascade'
readonly=True
required=True
args: 'ir.cron'
fri
Boolean
default=True
location_ids
Many2many → lunch.location
string='Location'
args: 'lunch.location'
message
Html
required=True
translate=True
args: 'Message'
mode
Selection
default='alert'
string='Display'
args: [('alert', 'Alert in app'), ('chat', 'Chat notification')]
mon
Boolean
default=True
name
Char
required=True
translate=True
args: 'Alert Name'
notification_moment
Selection
default='am'
required=True
args: [('am', 'AM'), ('pm', 'PM')]
notification_time
Float
default=10.0
string='Notification Time'
recipients
Selection
default='everyone'
string='Recipients'
args: [('everyone', 'Everyone'), ('last_week', 'Employee who ordered last week'), ('last_month', 'Employee who ordered last month'), ('last_year', 'Employee who ordered last year')]
sat
Boolean
default=True
sun
Boolean
default=True
thu
Boolean
default=True
tue
Boolean
default=True
tz
Selection
default=<expr>
required=True
string='Timezone'
args: _tz_get
until
Date
wed
Boolean
default=True
create(self, vals_list)
unlink(self)
write(self, values)
amount
Float
required=True
args: 'Amount'
currency_id
Many2one → res.currency
default=<expr>
required=True
args: 'res.currency'
date
Date
default=fields.Date.context_today
required=True
args: 'Date'
description
Text
user_id
Many2one → res.users
default=<expr>
args: 'res.users', 'User'
get_wallet_balance(self, user, include_config=True)
amount
Float
currency_id
Many2one → res.currency
string='Currency'
args: 'res.currency'
date
Date
description
Text
id
Integer
user_id
Many2one → res.users
string='User'
args: 'res.users'
init(self)
address
Text
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
name
Char
required=True
args: 'Location Name'
No public methods.
active
Boolean
default=True
args: 'Active'
available_on_date
Boolean
compute='_compute_available_on_date'
available_today
Boolean
related='supplier_id.available_today'
available_toppings_1
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
available_toppings_2
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
available_toppings_3
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
category_id
Many2one
related='product_id.category_id'
store=True
string='Product Category'
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
currency_id
Many2one
related='company_id.currency_id'
store=True
date
Date
default=fields.Date.context_today
readonly=False
required=True
args: 'Order Date'
display_add_button
Boolean
compute='_compute_display_add_button'
display_reorder_button
Boolean
compute='_compute_display_reorder_button'
display_toppings
Text
compute='_compute_display_toppings'
store=True
args: 'Extras'
image_128
Image
compute='_compute_product_images'
image_1920
Image
compute='_compute_product_images'
lunch_location_id
Many2one → lunch.location
default=<expr>
args: 'lunch.location'
name
Char
readonly=True
related='product_id.name'
string='Product Name'
note
Text
notified
Boolean
default=False
order_deadline_passed
Boolean
compute='_compute_order_deadline_passed'
price
Monetary
compute='_compute_total_price'
readonly=True
store=True
args: 'Total Price'
product_description
Html
related='product_id.description'
args: 'Description'
product_id
Many2one → lunch.product
required=True
string='Product'
args: 'lunch.product'
quantity
Float
default=1
required=True
args: 'Quantity'
state
Selection
default='new'
index=True
readonly=True
args: [('new', 'To Order'), ('ordered', 'Ordered'), ('sent', 'Sent'), ('confirmed', 'Received'), ('cancelled', 'Cancelled')], 'Status'
supplier_id
Many2one
index=True
related='product_id.supplier_id'
store=True
string='Vendor'
topping_ids_1
Many2many → lunch.topping
domain=[('topping_category', '=', 1)]
string='Extras 1'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_ids_2
Many2many → lunch.topping
domain=[('topping_category', '=', 2)]
string='Extras 2'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_ids_3
Many2many → lunch.topping
domain=[('topping_category', '=', 3)]
string='Extras 3'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_label_1
Char
related='product_id.supplier_id.topping_label_1'
topping_label_2
Char
related='product_id.supplier_id.topping_label_2'
topping_label_3
Char
related='product_id.supplier_id.topping_label_3'
topping_quantity_1
Selection
related='product_id.supplier_id.topping_quantity_1'
topping_quantity_2
Selection
related='product_id.supplier_id.topping_quantity_2'
topping_quantity_3
Selection
related='product_id.supplier_id.topping_quantity_3'
user_id
Many2one → res.users
default=<expr>
args: 'res.users', 'User'
action_cancel(self)
action_confirm(self)
action_notify(self)
action_order(self)
action_reorder(self)
action_reset(self)
action_send(self)
add_to_cart(self)
create(self, vals_list)
init(self)
update_quantity(self, increment)
write(self, values)
active
Boolean
default=True
category_id
Many2one → lunch.product.category
check_company=True
required=True
args: 'lunch.product.category', 'Product Category'
company_id
Many2one → res.company
readonly=False
related='supplier_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
description
Html
translate=True
args: 'Description'
favorite_user_ids
Many2many → res.users
check_company=True
args: 'res.users', 'lunch_product_favorite_user_rel', 'product_id', 'user_id'
is_available_at
Many2one → lunch.location
compute='_compute_is_available_at'
search='_search_is_available_at'
args: 'lunch.location', 'Product Availability'
is_favorite
Boolean
compute='_compute_is_favorite'
inverse='_inverse_is_favorite'
is_new
Boolean
compute='_compute_is_new'
last_order_date
Date
compute='_compute_last_order_date'
name
Char
required=True
translate=True
args: 'Product Name'
new_until
Date
price
Float
digits='Account'
required=True
args: 'Price'
product_image
Image
compute='_compute_product_image'
supplier_id
Many2one → lunch.supplier
check_company=True
required=True
args: 'lunch.supplier', 'Vendor'
toggle_active(self)
write(self, vals)
active
Boolean
default=True
string='Active'
company_id
Many2one → res.company
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
image_1920
Image
default=_default_image
name
Char
required=True
translate=True
args: 'Product Category'
product_count
Integer
compute='_compute_product_count'
help='The number of products related to this category'
toggle_active(self)
active
Boolean
default=True
automatic_email_time
Float
default=12.0
required=True
args: 'Order Time'
available_location_ids
Many2many → lunch.location
string='Location'
args: 'lunch.location'
available_today
Boolean
compute='_compute_available_today'
search='_search_available_today'
args: 'This is True when if the supplier is available today'
city
Char
readonly=False
related='partner_id.city'
company_id
Many2one → res.company
readonly=False
related='partner_id.company_id'
store=True
args: 'res.company'
country_id
Many2one → res.country
readonly=False
related='partner_id.country_id'
args: 'res.country'
cron_id
Many2one → ir.cron
ondelete='cascade'
readonly=True
required=True
args: 'ir.cron'
delivery
Selection
default='no_delivery'
args: [('delivery', 'Delivery'), ('no_delivery', 'No Delivery')]
email
Char
readonly=False
related='partner_id.email'
email_formatted
Char
readonly=True
related='partner_id.email_formatted'
fri
Boolean
default=True
moment
Selection
default='am'
required=True
args: [('am', 'AM'), ('pm', 'PM')]
mon
Boolean
default=True
name
Char
readonly=False
related='partner_id.name'
args: 'Name'
order_deadline_passed
Boolean
compute='_compute_order_deadline_passed'
partner_id
Many2one → res.partner
required=True
string='Vendor'
args: 'res.partner'
phone
Char
readonly=False
related='partner_id.phone'
recurrency_end_date
Date
help='This field is used in order to '
args: 'Until'
responsible_id
Many2one → res.users
default=<expr>
domain=<expr>
help="The responsible is the person that will order lunch for everyone. It will be used as the 'from' when sending the automatic email."
string='Responsible'
args: 'res.users'
sat
Boolean
send_by
Selection
default='phone'
args: [('phone', 'Phone'), ('mail', 'Email')], 'Send Order By'
show_confirm_button
Boolean
compute='_compute_buttons'
show_order_button
Boolean
compute='_compute_buttons'
state_id
Many2one → res.country.state
readonly=False
related='partner_id.state_id'
args: 'res.country.state'
street
Char
readonly=False
related='partner_id.street'
street2
Char
readonly=False
related='partner_id.street2'
sun
Boolean
thu
Boolean
default=True
topping_ids_1
One2many → lunch.topping
domain=[('topping_category', '=', 1)]
args: 'lunch.topping', 'supplier_id'
topping_ids_2
One2many → lunch.topping
domain=[('topping_category', '=', 2)]
args: 'lunch.topping', 'supplier_id'
topping_ids_3
One2many → lunch.topping
domain=[('topping_category', '=', 3)]
args: 'lunch.topping', 'supplier_id'
topping_label_1
Char
default='Extras'
required=True
args: 'Extra 1 Label'
topping_label_2
Char
default='Beverages'
required=True
args: 'Extra 2 Label'
topping_label_3
Char
default='Extra Label 3'
required=True
args: 'Extra 3 Label'
topping_quantity_1
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 1 Quantity'
topping_quantity_2
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 2 Quantity'
topping_quantity_3
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 3 Quantity'
tue
Boolean
default=True
tz
Selection
default=<expr>
required=True
string='Timezone'
args: _tz_get
wed
Boolean
default=True
zip_code
Char
readonly=False
related='partner_id.zip'
action_confirm_orders(self)
action_send_orders(self)
create(self, vals_list)
toggle_active(self)
unlink(self)
write(self, values)
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
name
Char
required=True
args: 'Name'
price
Monetary
required=True
args: 'Price'
supplier_id
Many2one → lunch.supplier
ondelete='cascade'
args: 'lunch.supplier'
topping_category
Integer
default=1
required=True
args: 'Topping Category'
No public methods.
lunch_minimum_threshold
Float
lunch_notify_message
Html
default='Your lunch has been delivered.\nEnjoy your meal!'
translate=True
No public methods.
company_lunch_minimum_threshold
Float
readonly=False
related='company_id.lunch_minimum_threshold'
string='Maximum Allowed Overdraft'
company_lunch_notify_message
Html
readonly=False
related='company_id.lunch_notify_message'
string='Lunch notification message'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
No public methods.
favorite_lunch_product_ids
Many2many → lunch.product
last_lunch_location_id
Many2one → lunch.location
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/17.0/lunch |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Human Resources/Lunch |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Géry Debongnie, Aaron Bohy, Damien Bouvy, Yannick Tivisse, Odoo Online, Jorge Pinna Puissant, Xavier-Do, Victor Feyens, Samuel Degueldre, Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Pierre Paridans, William Braeckman, Kevin Baptiste, Florian Damhaut, Abdelouahab (abla), Hubert Van De Walle, Dossogne Bertrand, Renaud Thiry, niyasraphy, Louis Wicket (wil), althaf shaik, Mahamadasif Ansari, Dylan Kiss (dyki), Bruno Boi, Michael (mcm), Chong Wang (cwg), Brieuc-brd, rajh-odoo, stefanorigano (SRI), ravb-odoo, dasz, Mélanie, bary, reka-odoo, Julien Carion (juca), Tanguy Quéguineur, Chrysanthe (chgo), Louis (wil), Elisabeth Dickinson, Pierre Pulinckx (pipu), Bastien PIERRE |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 01:02:11 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
The base module to manage lunch.
================================
Many companies order sandwiches, pizzas and other, from usual vendors, for their employees to offer them more facilities.
However lunches management within the company requires proper administration especially when the number of employees or vendors is important.
The “Lunch Order” module has been developed to make this management easier but also to offer employees more tools and usability.
In addition to a full meal and vendor management, this module offers the possibility to display warning and provides quick order selection based on employee’s preferences.
If you want to save your employees' time and avoid them to always have coins in their pockets, this module is essential.
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
lunch_alert_view_form |
lunch.alert.form | lunch.alert | form | New |
lunch_alert_view_kanban |
lunch.alert.kanban | lunch.alert | kanban | New |
lunch_alert_view_search |
lunch.alert.search | lunch.alert | search | New |
lunch_alert_view_tree |
lunch.alert.tree | lunch.alert | tree | New |
lunch_cashmove_report_view_form |
lunch.cashmove.report.form | lunch.cashmove.report | form | New |
lunch_cashmove_report_view_search |
lunch.cashmove.report.search | lunch.cashmove.report | search | New |
lunch_cashmove_report_view_search_2 |
lunch.cashmove.report.search | lunch.cashmove.report | search | New |
lunch_cashmove_report_view_tree |
lunch.cashmove.report.tree | lunch.cashmove.report | tree | New |
lunch_cashmove_report_view_tree_2 |
lunch.cashmove.report.tree | lunch.cashmove.report | tree | New |
lunch_cashmove_view_form |
lunch.cashmove.form | lunch.cashmove | form | New |
lunch_cashmove_view_search |
lunch.cashmove.search | lunch.cashmove | search | New |
lunch_cashmove_view_tree |
lunch.cashmove.tree | lunch.cashmove | tree | New |
lunch_location_form_view |
lunch.location.view.form | lunch.location | form | New |
lunch_location_kanban_view |
lunch.location.view.kanban | lunch.location | kanban | New |
lunch_location_tree_view |
lunch.location.view.form | lunch.location | tree | New |
lunch_location_view_search |
lunch.location.view.search | lunch.location | search | New |
lunch_order_view_form |
lunch.order.view.form | lunch.order | form | New |
lunch_order_view_graph |
lunch.order.graph | lunch.order | graph | New |
lunch_order_view_kanban |
lunch.order.kanban | lunch.order | kanban | New |
lunch_order_view_pivot |
lunch.order.pivot | lunch.order | pivot | New |
lunch_order_view_search |
lunch.order.search | lunch.order | search | New |
lunch_order_view_tree |
lunch.order.tree | lunch.order | tree | New |
lunch_payment_dialog |
Lunch Payment Dialog | ir.ui.view | qweb | New |
lunch_product_category_view_form |
Product category Form | lunch.product.category | form | New |
lunch_product_category_view_kanban |
Product category Kanban | lunch.product.category | kanban | New |
lunch_product_category_view_search |
lunch.product.category.search | lunch.product.category | search | New |
lunch_product_category_view_tree |
Product category Tree | lunch.product.category | tree | New |
lunch_product_view_form |
lunch.product.form | lunch.product | form | New |
lunch_product_view_search |
lunch.product.search | lunch.product | search | New |
lunch_product_view_tree |
lunch.product.tree | lunch.product | tree | New |
lunch_product_view_tree_order |
lunch.product.tree.order | lunch.product | xpath | Inherits lunch_product_view_tree |
lunch_supplier_view_form |
lunch.supplier.view.form | lunch.supplier | form | New |
lunch_supplier_view_kanban |
lunch.supplier.view.kanban | lunch.supplier | kanban | New |
lunch_supplier_view_search |
lunch.supplier.view.search | lunch.supplier | search | New |
lunch_supplier_view_tree |
lunch.supplier.view.tree | lunch.supplier | tree | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.lunch | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
view_lunch_cashmove_kanban |
lunch.cashmove.kanban | lunch.cashmove | kanban | New |
view_lunch_cashmove_report_kanban |
lunch.cashmove.report.kanban | lunch.cashmove.report | kanban | New |
view_lunch_product_kanban |
lunch.product.kanban | lunch.product | kanban | New |
view_lunch_product_kanban_order |
lunch.product.kanban | lunch.product | kanban | New |
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
args: 'Active'
available_today
Boolean
compute='_compute_available_today'
search='_search_available_today'
args: 'Is Displayed Today'
cron_id
Many2one → ir.cron
ondelete='cascade'
readonly=True
required=True
args: 'ir.cron'
fri
Boolean
default=True
location_ids
Many2many → lunch.location
string='Location'
args: 'lunch.location'
message
Html
required=True
translate=True
args: 'Message'
mode
Selection
default='alert'
string='Display'
args: [('alert', 'Alert in app'), ('chat', 'Chat notification')]
mon
Boolean
default=True
name
Char
required=True
translate=True
args: 'Alert Name'
notification_moment
Selection
default='am'
required=True
args: [('am', 'AM'), ('pm', 'PM')]
notification_time
Float
default=10.0
string='Notification Time'
recipients
Selection
default='everyone'
string='Recipients'
args: [('everyone', 'Everyone'), ('last_week', 'Employee who ordered last week'), ('last_month', 'Employee who ordered last month'), ('last_year', 'Employee who ordered last year')]
sat
Boolean
default=True
sun
Boolean
default=True
thu
Boolean
default=True
tue
Boolean
default=True
tz
Selection
default=<expr>
required=True
string='Timezone'
args: _tz_get
until
Date
wed
Boolean
default=True
create(self, vals_list)
unlink(self)
write(self, values)
amount
Float
required=True
args: 'Amount'
currency_id
Many2one → res.currency
default=<expr>
required=True
args: 'res.currency'
date
Date
default=fields.Date.context_today
required=True
args: 'Date'
description
Text
user_id
Many2one → res.users
default=<expr>
args: 'res.users', 'User'
get_wallet_balance(self, user, include_config=True)
amount
Float
currency_id
Many2one → res.currency
string='Currency'
args: 'res.currency'
date
Date
description
Text
id
Integer
user_id
Many2one → res.users
string='User'
args: 'res.users'
init(self)
No new fields.
Public methods (0)No public methods.
address
Text
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
name
Char
required=True
args: 'Location Name'
No public methods.
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
args: 'Active'
available_today
Boolean
related='supplier_id.available_today'
available_toppings_1
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
available_toppings_2
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
available_toppings_3
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
category_id
Many2one
related='product_id.category_id'
store=True
string='Product Category'
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
currency_id
Many2one
related='company_id.currency_id'
store=True
date
Date
default=fields.Date.context_today
readonly=False
required=True
args: 'Order Date'
display_reorder_button
Boolean
compute='_compute_display_reorder_button'
display_toppings
Text
compute='_compute_display_toppings'
store=True
args: 'Extras'
image_128
Image
compute='_compute_product_images'
image_1920
Image
compute='_compute_product_images'
lunch_location_id
Many2one → lunch.location
default=<expr>
args: 'lunch.location'
name
Char
readonly=True
related='product_id.name'
string='Product Name'
note
Text
notified
Boolean
default=False
order_deadline_passed
Boolean
related='supplier_id.order_deadline_passed'
price
Monetary
compute='_compute_total_price'
readonly=True
store=True
args: 'Total Price'
product_description
Html
related='product_id.description'
args: 'Description'
product_id
Many2one → lunch.product
required=True
string='Product'
args: 'lunch.product'
quantity
Float
default=1
required=True
args: 'Quantity'
state
Selection
default='new'
index=True
readonly=True
args: [('new', 'To Order'), ('ordered', 'Ordered'), ('sent', 'Sent'), ('confirmed', 'Received'), ('cancelled', 'Cancelled')], 'Status'
supplier_id
Many2one
index=True
related='product_id.supplier_id'
store=True
string='Vendor'
topping_ids_1
Many2many → lunch.topping
domain=[('topping_category', '=', 1)]
string='Extras 1'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_ids_2
Many2many → lunch.topping
domain=[('topping_category', '=', 2)]
string='Extras 2'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_ids_3
Many2many → lunch.topping
domain=[('topping_category', '=', 3)]
string='Extras 3'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_label_1
Char
related='product_id.supplier_id.topping_label_1'
topping_label_2
Char
related='product_id.supplier_id.topping_label_2'
topping_label_3
Char
related='product_id.supplier_id.topping_label_3'
topping_quantity_1
Selection
related='product_id.supplier_id.topping_quantity_1'
topping_quantity_2
Selection
related='product_id.supplier_id.topping_quantity_2'
topping_quantity_3
Selection
related='product_id.supplier_id.topping_quantity_3'
user_id
Many2one → res.users
default=<expr>
readonly=False
args: 'res.users', 'User'
action_cancel(self)
action_confirm(self)
action_notify(self)
action_order(self)
action_reorder(self)
action_reset(self)
action_send(self)
add_to_cart(self)
create(self, vals_list)
init(self)
update_quantity(self, increment)
write(self, values)
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
category_id
Many2one → lunch.product.category
check_company=True
required=True
args: 'lunch.product.category', 'Product Category'
company_id
Many2one → res.company
readonly=False
related='supplier_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
description
Html
translate=True
args: 'Description'
favorite_user_ids
Many2many → res.users
check_company=True
args: 'res.users', 'lunch_product_favorite_user_rel', 'product_id', 'user_id'
is_available_at
Many2one → lunch.location
compute='_compute_is_available_at'
search='_search_is_available_at'
args: 'lunch.location', 'Product Availability'
is_favorite
Boolean
compute='_compute_is_favorite'
inverse='_inverse_is_favorite'
is_new
Boolean
compute='_compute_is_new'
last_order_date
Date
compute='_compute_last_order_date'
name
Char
required=True
translate=True
args: 'Product Name'
new_until
Date
price
Float
digits='Account'
required=True
args: 'Price'
product_image
Image
compute='_compute_product_image'
supplier_id
Many2one → lunch.supplier
check_company=True
required=True
args: 'lunch.supplier', 'Vendor'
toggle_active(self)
write(self, vals)
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
string='Active'
company_id
Many2one → res.company
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
image_1920
Image
default=_default_image
name
Char
required=True
translate=True
args: 'Product Category'
product_count
Integer
compute='_compute_product_count'
help='The number of products related to this category'
toggle_active(self)
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
automatic_email_time
Float
default=12.0
required=True
args: 'Order Time'
available_location_ids
Many2many → lunch.location
string='Location'
args: 'lunch.location'
available_today
Boolean
compute='_compute_available_today'
search='_search_available_today'
args: 'This is True when if the supplier is available today'
city
Char
readonly=False
related='partner_id.city'
company_id
Many2one → res.company
readonly=False
related='partner_id.company_id'
store=True
args: 'res.company'
country_id
Many2one → res.country
readonly=False
related='partner_id.country_id'
args: 'res.country'
cron_id
Many2one → ir.cron
ondelete='cascade'
readonly=True
required=True
args: 'ir.cron'
delivery
Selection
default='no_delivery'
args: [('delivery', 'Delivery'), ('no_delivery', 'No Delivery')]
email
Char
readonly=False
related='partner_id.email'
email_formatted
Char
readonly=True
related='partner_id.email_formatted'
fri
Boolean
default=True
moment
Selection
default='am'
required=True
args: [('am', 'AM'), ('pm', 'PM')]
mon
Boolean
default=True
name
Char
readonly=False
related='partner_id.name'
args: 'Name'
order_deadline_passed
Boolean
compute='_compute_order_deadline_passed'
partner_id
Many2one → res.partner
required=True
string='Vendor'
args: 'res.partner'
phone
Char
readonly=False
related='partner_id.phone'
recurrency_end_date
Date
help='This field is used in order to '
args: 'Until'
responsible_id
Many2one → res.users
default=<expr>
domain=<expr>
help="The responsible is the person that will order lunch for everyone. It will be used as the 'from' when sending the automatic email."
string='Responsible'
args: 'res.users'
sat
Boolean
send_by
Selection
default='phone'
args: [('phone', 'Phone'), ('mail', 'Email')], 'Send Order By'
show_confirm_button
Boolean
compute='_compute_buttons'
show_order_button
Boolean
compute='_compute_buttons'
state_id
Many2one → res.country.state
readonly=False
related='partner_id.state_id'
args: 'res.country.state'
street
Char
readonly=False
related='partner_id.street'
street2
Char
readonly=False
related='partner_id.street2'
sun
Boolean
thu
Boolean
default=True
topping_ids_1
One2many → lunch.topping
domain=[('topping_category', '=', 1)]
args: 'lunch.topping', 'supplier_id'
topping_ids_2
One2many → lunch.topping
domain=[('topping_category', '=', 2)]
args: 'lunch.topping', 'supplier_id'
topping_ids_3
One2many → lunch.topping
domain=[('topping_category', '=', 3)]
args: 'lunch.topping', 'supplier_id'
topping_label_1
Char
default='Extras'
required=True
args: 'Extra 1 Label'
topping_label_2
Char
default='Beverages'
required=True
args: 'Extra 2 Label'
topping_label_3
Char
default='Extra Label 3'
required=True
args: 'Extra 3 Label'
topping_quantity_1
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 1 Quantity'
topping_quantity_2
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 2 Quantity'
topping_quantity_3
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 3 Quantity'
tue
Boolean
default=True
tz
Selection
default=<expr>
required=True
string='Timezone'
args: _tz_get
wed
Boolean
default=True
zip_code
Char
readonly=False
related='partner_id.zip'
action_confirm_orders(self)
action_send_orders(self)
create(self, vals_list)
toggle_active(self)
unlink(self)
write(self, values)
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
name
Char
required=True
args: 'Name'
price
Monetary
required=True
args: 'Price'
supplier_id
Many2one → lunch.supplier
ondelete='cascade'
args: 'lunch.supplier'
topping_category
Integer
default=1
required=True
args: 'Topping Category'
No public methods.
lunch_minimum_threshold
Float
lunch_notify_message
Html
default='Your lunch has been delivered.\nEnjoy your meal!'
translate=True
No public methods.
company_lunch_minimum_threshold
Float
readonly=False
related='company_id.lunch_minimum_threshold'
string='Maximum Allowed Overdraft'
company_lunch_notify_message
Html
readonly=False
related='company_id.lunch_notify_message'
string='Lunch notification message'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
No public methods.
favorite_lunch_product_ids
Many2many → lunch.product
last_lunch_location_id
Many2one → lunch.location
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/16.0/lunch |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Human Resources/Lunch |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Thibault Francois, Géry Debongnie, Aaron Bohy, Yannick Tivisse, Jorge Pinna Puissant, Julien Castiaux, Xavier-Do, Romeo Fragomeli, Victor Feyens, alt-odoo, Samuel Degueldre, Tiffany Chang (tic), Gorash, Pierre Paridans, William Braeckman, Kevin Baptiste, Florian Damhaut, Audric Onockx (auon), Abdelouahab (abla), Dossogne Bertrand, niyasraphy, Louis Wicket (wil), althaf shaik, stefanorigano (SRI), Mélanie, Aktiv Software, Tanguy Quéguineur, Martin Trigaux (mat), Vincent Sevestre |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:40:55 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
The base module to manage lunch.
================================
Many companies order sandwiches, pizzas and other, from usual vendors, for their employees to offer them more facilities.
However lunches management within the company requires proper administration especially when the number of employees or vendors is important.
The “Lunch Order” module has been developed to make this management easier but also to offer employees more tools and usability.
In addition to a full meal and vendor management, this module offers the possibility to display warning and provides quick order selection based on employee’s preferences.
If you want to save your employees' time and avoid them to always have coins in their pockets, this module is essential.
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
lunch_alert_view_form |
lunch.alert.form | lunch.alert | form | New |
lunch_alert_view_kanban |
lunch.alert.kanban | lunch.alert | kanban | New |
lunch_alert_view_search |
lunch.alert.search | lunch.alert | search | New |
lunch_alert_view_tree |
lunch.alert.tree | lunch.alert | tree | New |
lunch_cashmove_report_view_form |
lunch.cashmove.report.form | lunch.cashmove.report | form | New |
lunch_cashmove_report_view_search |
lunch.cashmove.report.search | lunch.cashmove.report | search | New |
lunch_cashmove_report_view_search_2 |
lunch.cashmove.report.search | lunch.cashmove.report | search | New |
lunch_cashmove_report_view_tree |
lunch.cashmove.report.tree | lunch.cashmove.report | tree | New |
lunch_cashmove_report_view_tree_2 |
lunch.cashmove.report.tree | lunch.cashmove.report | tree | New |
lunch_cashmove_view_form |
lunch.cashmove.form | lunch.cashmove | form | New |
lunch_cashmove_view_search |
lunch.cashmove.search | lunch.cashmove | search | New |
lunch_cashmove_view_tree |
lunch.cashmove.tree | lunch.cashmove | tree | New |
lunch_location_form_view |
lunch.location.view.form | lunch.location | form | New |
lunch_location_kanban_view |
lunch.location.view.kanban | lunch.location | kanban | New |
lunch_location_tree_view |
lunch.location.view.form | lunch.location | tree | New |
lunch_location_view_search |
lunch.location.view.search | lunch.location | search | New |
lunch_order_view_form |
lunch.order.view.form | lunch.order | form | New |
lunch_order_view_graph |
lunch.order.graph | lunch.order | graph | New |
lunch_order_view_kanban |
lunch.order.kanban | lunch.order | kanban | New |
lunch_order_view_pivot |
lunch.order.pivot | lunch.order | pivot | New |
lunch_order_view_search |
lunch.order.search | lunch.order | search | New |
lunch_order_view_tree |
lunch.order.tree | lunch.order | tree | New |
lunch_payment_dialog |
Lunch Payment Dialog | ir.ui.view | qweb | New |
lunch_product_category_view_form |
Product category Form | lunch.product.category | form | New |
lunch_product_category_view_kanban |
Product category Kanban | lunch.product.category | kanban | New |
lunch_product_category_view_search |
lunch.product.category.search | lunch.product.category | search | New |
lunch_product_category_view_tree |
Product category Tree | lunch.product.category | tree | New |
lunch_product_view_form |
lunch.product.form | lunch.product | form | New |
lunch_product_view_search |
lunch.product.search | lunch.product | search | New |
lunch_product_view_tree |
lunch.product.tree | lunch.product | tree | New |
lunch_product_view_tree_order |
lunch.product.tree.order | lunch.product | xpath | Inherits lunch_product_view_tree |
lunch_supplier_view_form |
lunch.supplier.view.form | lunch.supplier | form | New |
lunch_supplier_view_kanban |
lunch.supplier.view.kanban | lunch.supplier | kanban | New |
lunch_supplier_view_search |
lunch.supplier.view.search | lunch.supplier | search | New |
lunch_supplier_view_tree |
lunch.supplier.view.tree | lunch.supplier | tree | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.lunch | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
view_lunch_cashmove_kanban |
lunch.cashmove.kanban | lunch.cashmove | kanban | New |
view_lunch_cashmove_report_kanban |
lunch.cashmove.report.kanban | lunch.cashmove.report | kanban | New |
view_lunch_product_kanban |
lunch.product.kanban | lunch.product | kanban | New |
view_lunch_product_kanban_order |
lunch.product.kanban | lunch.product | kanban | New |
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
args: 'Active'
available_today
Boolean
compute='_compute_available_today'
search='_search_available_today'
args: 'Is Displayed Today'
cron_id
Many2one → ir.cron
ondelete='cascade'
readonly=True
required=True
args: 'ir.cron'
fri
Boolean
default=True
location_ids
Many2many → lunch.location
string='Location'
args: 'lunch.location'
message
Html
required=True
translate=True
args: 'Message'
mode
Selection
default='alert'
string='Display'
args: [('alert', 'Alert in app'), ('chat', 'Chat notification')]
mon
Boolean
default=True
name
Char
required=True
translate=True
args: 'Alert Name'
notification_moment
Selection
default='am'
required=True
args: [('am', 'AM'), ('pm', 'PM')]
notification_time
Float
default=10.0
string='Notification Time'
recipients
Selection
default='everyone'
string='Recipients'
args: [('everyone', 'Everyone'), ('last_week', 'Employee who ordered last week'), ('last_month', 'Employee who ordered last month'), ('last_year', 'Employee who ordered last year')]
sat
Boolean
default=True
sun
Boolean
default=True
thu
Boolean
default=True
tue
Boolean
default=True
tz
Selection
default=<expr>
required=True
string='Timezone'
args: _tz_get
until
Date
wed
Boolean
default=True
create(self, vals_list)
unlink(self)
write(self, values)
amount
Float
required=True
args: 'Amount'
currency_id
Many2one → res.currency
default=<expr>
required=True
args: 'res.currency'
date
Date
default=fields.Date.context_today
required=True
args: 'Date'
description
Text
user_id
Many2one → res.users
default=<expr>
args: 'res.users', 'User'
get_wallet_balance(self, user, include_config=True)
name_get(self)
amount
Float
currency_id
Many2one → res.currency
string='Currency'
args: 'res.currency'
date
Date
description
Text
id
Integer
user_id
Many2one → res.users
string='User'
args: 'res.users'
init(self)
name_get(self)
No new fields.
Public methods (0)No public methods.
address
Text
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
name
Char
required=True
args: 'Location Name'
No public methods.
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
args: 'Active'
available_today
Boolean
related='supplier_id.available_today'
available_toppings_1
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
available_toppings_2
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
available_toppings_3
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
category_id
Many2one
related='product_id.category_id'
store=True
string='Product Category'
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
currency_id
Many2one
related='company_id.currency_id'
store=True
date
Date
default=fields.Date.context_today
readonly=True
required=True
states={'new': [('readonly', False)]}
args: 'Order Date'
display_reorder_button
Boolean
compute='_compute_display_reorder_button'
display_toppings
Text
compute='_compute_display_toppings'
store=True
args: 'Extras'
image_128
Image
compute='_compute_product_images'
image_1920
Image
compute='_compute_product_images'
lunch_location_id
Many2one → lunch.location
default=<expr>
args: 'lunch.location'
name
Char
readonly=True
related='product_id.name'
store=True
string='Product Name'
note
Text
notified
Boolean
default=False
order_deadline_passed
Boolean
related='supplier_id.order_deadline_passed'
price
Monetary
compute='_compute_total_price'
readonly=True
store=True
args: 'Total Price'
product_description
Html
related='product_id.description'
args: 'Description'
product_id
Many2one → lunch.product
required=True
string='Product'
args: 'lunch.product'
quantity
Float
default=1
required=True
args: 'Quantity'
state
Selection
default='new'
index=True
readonly=True
args: [('new', 'To Order'), ('ordered', 'Ordered'), ('sent', 'Sent'), ('confirmed', 'Received'), ('cancelled', 'Cancelled')], 'Status'
supplier_id
Many2one
index=True
related='product_id.supplier_id'
store=True
string='Vendor'
topping_ids_1
Many2many → lunch.topping
domain=[('topping_category', '=', 1)]
string='Extras 1'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_ids_2
Many2many → lunch.topping
domain=[('topping_category', '=', 2)]
string='Extras 2'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_ids_3
Many2many → lunch.topping
domain=[('topping_category', '=', 3)]
string='Extras 3'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_label_1
Char
related='product_id.supplier_id.topping_label_1'
topping_label_2
Char
related='product_id.supplier_id.topping_label_2'
topping_label_3
Char
related='product_id.supplier_id.topping_label_3'
topping_quantity_1
Selection
related='product_id.supplier_id.topping_quantity_1'
topping_quantity_2
Selection
related='product_id.supplier_id.topping_quantity_2'
topping_quantity_3
Selection
related='product_id.supplier_id.topping_quantity_3'
user_id
Many2one → res.users
default=<expr>
readonly=True
states={'new': [('readonly', False)]}
args: 'res.users', 'User'
action_cancel(self)
action_confirm(self)
action_notify(self)
action_order(self)
action_reorder(self)
action_reset(self)
action_send(self)
add_to_cart(self)
create(self, vals_list)
init(self)
update_quantity(self, increment)
write(self, values)
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
category_id
Many2one → lunch.product.category
check_company=True
required=True
args: 'lunch.product.category', 'Product Category'
company_id
Many2one → res.company
readonly=False
related='supplier_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
description
Html
translate=True
args: 'Description'
favorite_user_ids
Many2many → res.users
check_company=True
args: 'res.users', 'lunch_product_favorite_user_rel', 'product_id', 'user_id'
is_available_at
Many2one → lunch.location
compute='_compute_is_available_at'
search='_search_is_available_at'
args: 'lunch.location', 'Product Availability'
is_favorite
Boolean
compute='_compute_is_favorite'
inverse='_inverse_is_favorite'
is_new
Boolean
compute='_compute_is_new'
last_order_date
Date
compute='_compute_last_order_date'
name
Char
required=True
translate=True
args: 'Product Name'
new_until
Date
price
Float
digits='Account'
required=True
args: 'Price'
product_image
Image
compute='_compute_product_image'
supplier_id
Many2one → lunch.supplier
check_company=True
required=True
args: 'lunch.supplier', 'Vendor'
toggle_active(self)
write(self, vals)
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
string='Active'
company_id
Many2one → res.company
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
image_1920
Image
default=_default_image
name
Char
required=True
translate=True
args: 'Product Category'
product_count
Integer
compute='_compute_product_count'
help='The number of products related to this category'
toggle_active(self)
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
automatic_email_time
Float
default=12.0
required=True
args: 'Order Time'
available_location_ids
Many2many → lunch.location
string='Location'
args: 'lunch.location'
available_today
Boolean
compute='_compute_available_today'
search='_search_available_today'
args: 'This is True when if the supplier is available today'
city
Char
readonly=False
related='partner_id.city'
company_id
Many2one → res.company
readonly=False
related='partner_id.company_id'
store=True
args: 'res.company'
country_id
Many2one → res.country
readonly=False
related='partner_id.country_id'
args: 'res.country'
cron_id
Many2one → ir.cron
ondelete='cascade'
readonly=True
required=True
args: 'ir.cron'
delivery
Selection
default='no_delivery'
args: [('delivery', 'Delivery'), ('no_delivery', 'No Delivery')]
email
Char
readonly=False
related='partner_id.email'
email_formatted
Char
readonly=True
related='partner_id.email_formatted'
fri
Boolean
default=True
moment
Selection
default='am'
required=True
args: [('am', 'AM'), ('pm', 'PM')]
mon
Boolean
default=True
name
Char
readonly=False
related='partner_id.name'
args: 'Name'
order_deadline_passed
Boolean
compute='_compute_order_deadline_passed'
partner_id
Many2one → res.partner
required=True
string='Vendor'
args: 'res.partner'
phone
Char
readonly=False
related='partner_id.phone'
recurrency_end_date
Date
help='This field is used in order to '
args: 'Until'
responsible_id
Many2one → res.users
default=<expr>
domain=<expr>
help="The responsible is the person that will order lunch for everyone. It will be used as the 'from' when sending the automatic email."
string='Responsible'
args: 'res.users'
sat
Boolean
send_by
Selection
default='phone'
args: [('phone', 'Phone'), ('mail', 'Email')], 'Send Order By'
show_confirm_button
Boolean
compute='_compute_buttons'
show_order_button
Boolean
compute='_compute_buttons'
state_id
Many2one → res.country.state
readonly=False
related='partner_id.state_id'
args: 'res.country.state'
street
Char
readonly=False
related='partner_id.street'
street2
Char
readonly=False
related='partner_id.street2'
sun
Boolean
thu
Boolean
default=True
topping_ids_1
One2many → lunch.topping
domain=[('topping_category', '=', 1)]
args: 'lunch.topping', 'supplier_id'
topping_ids_2
One2many → lunch.topping
domain=[('topping_category', '=', 2)]
args: 'lunch.topping', 'supplier_id'
topping_ids_3
One2many → lunch.topping
domain=[('topping_category', '=', 3)]
args: 'lunch.topping', 'supplier_id'
topping_label_1
Char
default='Extras'
required=True
args: 'Extra 1 Label'
topping_label_2
Char
default='Beverages'
required=True
args: 'Extra 2 Label'
topping_label_3
Char
default='Extra Label 3'
required=True
args: 'Extra 3 Label'
topping_quantity_1
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 1 Quantity'
topping_quantity_2
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 2 Quantity'
topping_quantity_3
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 3 Quantity'
tue
Boolean
default=True
tz
Selection
default=<expr>
required=True
string='Timezone'
args: _tz_get
wed
Boolean
default=True
zip_code
Char
readonly=False
related='partner_id.zip'
action_confirm_orders(self)
action_send_orders(self)
create(self, vals_list)
name_get(self)
toggle_active(self)
unlink(self)
write(self, values)
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
name
Char
required=True
args: 'Name'
price
Monetary
required=True
args: 'Price'
supplier_id
Many2one → lunch.supplier
ondelete='cascade'
args: 'lunch.supplier'
topping_category
Integer
default=1
required=True
args: 'Topping Category'
name_get(self)
lunch_minimum_threshold
Float
lunch_notify_message
Html
default='Your lunch has been delivered.\nEnjoy your meal!'
translate=True
No public methods.
company_lunch_minimum_threshold
Float
readonly=False
related='company_id.lunch_minimum_threshold'
string='Maximum Allowed Overdraft'
company_lunch_notify_message
Html
readonly=False
related='company_id.lunch_notify_message'
string='Lunch notification message'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
No public methods.
favorite_lunch_product_ids
Many2many → lunch.product
last_lunch_location_id
Many2one → lunch.location
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/15.0/lunch |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Human Resources/Lunch |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Christophe Simonis, Xavier Morel, Thibault Francois, Yannick Tivisse, wan, Julien Castiaux, Xavier-Do, Victor Feyens, alt-odoo, Julien Mougenot, Achraf (abz), IEL, Mathieu Duckerts-Antoine, Kevin Baptiste, Florian Damhaut, Audric Onockx (auon), Nicolas Bayet, Michael Mattiello (mcm), dht-odoo, Francois (fge), Louis Wicket (wil), althaf shaik, Leonardo Pavan Rocha, Aktiv Software, Tanguy Quéguineur |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:25:30 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
The base module to manage lunch.
================================
Many companies order sandwiches, pizzas and other, from usual vendors, for their employees to offer them more facilities.
However lunches management within the company requires proper administration especially when the number of employees or vendors is important.
The “Lunch Order” module has been developed to make this management easier but also to offer employees more tools and usability.
In addition to a full meal and vendor management, this module offers the possibility to display warning and provides quick order selection based on employee’s preferences.
If you want to save your employees' time and avoid them to always have coins in their pockets, this module is essential.
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
lunch_alert_view_form |
lunch.alert.form | lunch.alert | form | New |
lunch_alert_view_kanban |
lunch.alert.kanban | lunch.alert | kanban | New |
lunch_alert_view_search |
lunch.alert.search | lunch.alert | search | New |
lunch_alert_view_tree |
lunch.alert.tree | lunch.alert | tree | New |
lunch_cashmove_report_view_form |
lunch.cashmove.report.form | lunch.cashmove.report | form | New |
lunch_cashmove_report_view_search |
lunch.cashmove.report.search | lunch.cashmove.report | search | New |
lunch_cashmove_report_view_search_2 |
lunch.cashmove.report.search | lunch.cashmove.report | search | New |
lunch_cashmove_report_view_tree |
lunch.cashmove.report.tree | lunch.cashmove.report | tree | New |
lunch_cashmove_report_view_tree_2 |
lunch.cashmove.report.tree | lunch.cashmove.report | tree | New |
lunch_cashmove_view_form |
lunch.cashmove.form | lunch.cashmove | form | New |
lunch_cashmove_view_search |
lunch.cashmove.search | lunch.cashmove | search | New |
lunch_cashmove_view_tree |
lunch.cashmove.tree | lunch.cashmove | tree | New |
lunch_location_form_view |
lunch.location.view.form | lunch.location | form | New |
lunch_location_kanban_view |
lunch.location.view.kanban | lunch.location | kanban | New |
lunch_location_tree_view |
lunch.location.view.form | lunch.location | tree | New |
lunch_location_view_search |
lunch.location.view.search | lunch.location | search | New |
lunch_order_view_form |
lunch.order.view.form | lunch.order | form | New |
lunch_order_view_graph |
lunch.order.graph | lunch.order | graph | New |
lunch_order_view_kanban |
lunch.order.kanban | lunch.order | kanban | New |
lunch_order_view_pivot |
lunch.order.pivot | lunch.order | pivot | New |
lunch_order_view_search |
lunch.order.search | lunch.order | search | New |
lunch_order_view_tree |
lunch.order.tree | lunch.order | tree | New |
lunch_payment_dialog |
Lunch Payment Dialog | ir.ui.view | qweb | New |
lunch_product_category_view_form |
Product category Form | lunch.product.category | form | New |
lunch_product_category_view_kanban |
Product category Kanban | lunch.product.category | kanban | New |
lunch_product_category_view_search |
lunch.product.category.search | lunch.product.category | search | New |
lunch_product_category_view_tree |
Product category Tree | lunch.product.category | tree | New |
lunch_product_view_form |
lunch.product.form | lunch.product | form | New |
lunch_product_view_search |
lunch.product.search | lunch.product | search | New |
lunch_product_view_tree |
lunch.product.tree | lunch.product | tree | New |
lunch_product_view_tree_order |
lunch.product.tree.order | lunch.product | xpath | Inherits lunch_product_view_tree |
lunch_supplier_view_form |
lunch.supplier.view.form | lunch.supplier | form | New |
lunch_supplier_view_kanban |
lunch.supplier.view.kanban | lunch.supplier | kanban | New |
lunch_supplier_view_search |
lunch.supplier.view.search | lunch.supplier | search | New |
lunch_supplier_view_tree |
lunch.supplier.view.tree | lunch.supplier | tree | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.lunch | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
view_lunch_cashmove_kanban |
lunch.cashmove.kanban | lunch.cashmove | kanban | New |
view_lunch_cashmove_report_kanban |
lunch.cashmove.report.kanban | lunch.cashmove.report | kanban | New |
view_lunch_product_kanban |
lunch.product.kanban | lunch.product | kanban | New |
view_lunch_product_kanban_order |
lunch.product.kanban | lunch.product | kanban | New |
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
args: 'Active'
available_today
Boolean
compute='_compute_available_today'
search='_search_available_today'
args: 'Is Displayed Today'
cron_id
Many2one → ir.cron
ondelete='cascade'
readonly=True
required=True
args: 'ir.cron'
fri
Boolean
default=True
location_ids
Many2many → lunch.location
string='Location'
args: 'lunch.location'
message
Html
required=True
translate=True
args: 'Message'
mode
Selection
default='alert'
string='Display'
args: [('alert', 'Alert in app'), ('chat', 'Chat notification')]
mon
Boolean
default=True
name
Char
required=True
translate=True
args: 'Alert Name'
notification_moment
Selection
default='am'
required=True
args: [('am', 'AM'), ('pm', 'PM')]
notification_time
Float
default=10.0
string='Notification Time'
recipients
Selection
default='everyone'
string='Recipients'
args: [('everyone', 'Everyone'), ('last_week', 'Employee who ordered last week'), ('last_month', 'Employee who ordered last month'), ('last_year', 'Employee who ordered last year')]
sat
Boolean
default=True
sun
Boolean
default=True
thu
Boolean
default=True
tue
Boolean
default=True
tz
Selection
default=<expr>
required=True
string='Timezone'
args: _tz_get
until
Date
wed
Boolean
default=True
create(self, vals_list)
unlink(self)
write(self, values)
amount
Float
required=True
args: 'Amount'
currency_id
Many2one → res.currency
default=<expr>
required=True
args: 'res.currency'
date
Date
default=fields.Date.context_today
required=True
args: 'Date'
description
Text
user_id
Many2one → res.users
default=<expr>
args: 'res.users', 'User'
get_wallet_balance(self, user, include_config=True)
name_get(self)
amount
Float
currency_id
Many2one → res.currency
string='Currency'
args: 'res.currency'
date
Date
description
Text
id
Integer
user_id
Many2one → res.users
string='User'
args: 'res.users'
init(self)
name_get(self)
No new fields.
Public methods (0)No public methods.
address
Text
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
name
Char
required=True
args: 'Location Name'
No public methods.
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
args: 'Active'
available_toppings_1
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
available_toppings_2
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
available_toppings_3
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
category_id
Many2one
related='product_id.category_id'
store=True
string='Product Category'
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
currency_id
Many2one
related='company_id.currency_id'
store=True
date
Date
default=fields.Date.context_today
readonly=True
required=True
states={'new': [('readonly', False)]}
args: 'Order Date'
display_reorder_button
Boolean
compute='_compute_display_reorder_button'
display_toppings
Text
compute='_compute_display_toppings'
store=True
args: 'Extras'
image_128
Image
compute='_compute_product_images'
image_1920
Image
compute='_compute_product_images'
lunch_location_id
Many2one → lunch.location
default=<expr>
args: 'lunch.location'
name
Char
readonly=True
related='product_id.name'
store=True
string='Product Name'
note
Text
price
Monetary
compute='_compute_total_price'
readonly=True
store=True
args: 'Total Price'
product_description
Html
related='product_id.description'
args: 'Description'
product_id
Many2one → lunch.product
required=True
string='Product'
args: 'lunch.product'
quantity
Float
default=1
required=True
args: 'Quantity'
state
Selection
default='new'
index=True
readonly=True
args: [('new', 'To Order'), ('ordered', 'Ordered'), ('confirmed', 'Received'), ('cancelled', 'Cancelled')], 'Status'
supplier_id
Many2one
index=True
related='product_id.supplier_id'
store=True
string='Vendor'
topping_ids_1
Many2many → lunch.topping
domain=[('topping_category', '=', 1)]
string='Extras 1'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_ids_2
Many2many → lunch.topping
domain=[('topping_category', '=', 2)]
string='Extras 2'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_ids_3
Many2many → lunch.topping
domain=[('topping_category', '=', 3)]
string='Extras 3'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_label_1
Char
related='product_id.supplier_id.topping_label_1'
topping_label_2
Char
related='product_id.supplier_id.topping_label_2'
topping_label_3
Char
related='product_id.supplier_id.topping_label_3'
topping_quantity_1
Selection
related='product_id.supplier_id.topping_quantity_1'
topping_quantity_2
Selection
related='product_id.supplier_id.topping_quantity_2'
topping_quantity_3
Selection
related='product_id.supplier_id.topping_quantity_3'
user_id
Many2one → res.users
default=<expr>
readonly=True
states={'new': [('readonly', False)]}
args: 'res.users', 'User'
action_cancel(self)
action_confirm(self)
action_order(self)
action_reorder(self)
action_reset(self)
add_to_cart(self)
create(self, values)
init(self)
update_quantity(self, increment)
write(self, values)
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
category_id
Many2one → lunch.product.category
check_company=True
required=True
args: 'lunch.product.category', 'Product Category'
company_id
Many2one → res.company
readonly=False
related='supplier_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
description
Html
translate=True
args: 'Description'
favorite_user_ids
Many2many → res.users
check_company=True
args: 'res.users', 'lunch_product_favorite_user_rel', 'product_id', 'user_id'
is_available_at
Many2one → lunch.location
compute='_compute_is_available_at'
search='_search_is_available_at'
args: 'lunch.location', 'Product Availability'
is_favorite
Boolean
compute='_compute_is_favorite'
inverse='_inverse_is_favorite'
is_new
Boolean
compute='_compute_is_new'
last_order_date
Date
compute='_compute_last_order_date'
name
Char
required=True
translate=True
args: 'Product Name'
new_until
Date
price
Float
digits='Account'
required=True
args: 'Price'
product_image
Image
compute='_compute_product_image'
supplier_id
Many2one → lunch.supplier
check_company=True
required=True
args: 'lunch.supplier', 'Vendor'
toggle_active(self)
write(self, vals)
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
string='Active'
company_id
Many2one → res.company
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
image_1920
Image
default=_default_image
name
Char
required=True
translate=True
args: 'Product Category'
product_count
Integer
compute='_compute_product_count'
help='The number of products related to this category'
toggle_active(self)
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
automatic_email_time
Float
default=12.0
required=True
args: 'Order Time'
available_location_ids
Many2many → lunch.location
string='Location'
args: 'lunch.location'
available_today
Boolean
compute='_compute_available_today'
search='_search_available_today'
args: 'This is True when if the supplier is available today'
city
Char
readonly=False
related='partner_id.city'
company_id
Many2one → res.company
readonly=False
related='partner_id.company_id'
store=True
args: 'res.company'
country_id
Many2one → res.country
readonly=False
related='partner_id.country_id'
args: 'res.country'
cron_id
Many2one → ir.cron
ondelete='cascade'
readonly=True
required=True
args: 'ir.cron'
delivery
Selection
default='no_delivery'
args: [('delivery', 'Delivery'), ('no_delivery', 'No Delivery')]
email
Char
readonly=False
related='partner_id.email'
email_formatted
Char
readonly=True
related='partner_id.email_formatted'
fri
Boolean
default=True
moment
Selection
default='am'
required=True
args: [('am', 'AM'), ('pm', 'PM')]
mon
Boolean
default=True
name
Char
readonly=False
related='partner_id.name'
args: 'Name'
partner_id
Many2one → res.partner
required=True
string='Vendor'
args: 'res.partner'
phone
Char
readonly=False
related='partner_id.phone'
recurrency_end_date
Date
help='This field is used in order to '
args: 'Until'
responsible_id
Many2one → res.users
default=<expr>
domain=<expr>
help="The responsible is the person that will order lunch for everyone. It will be used as the 'from' when sending the automatic email."
string='Responsible'
args: 'res.users'
sat
Boolean
send_by
Selection
default='phone'
args: [('phone', 'Phone'), ('mail', 'Email')], 'Send Order By'
state_id
Many2one → res.country.state
readonly=False
related='partner_id.state_id'
args: 'res.country.state'
street
Char
readonly=False
related='partner_id.street'
street2
Char
readonly=False
related='partner_id.street2'
sun
Boolean
thu
Boolean
default=True
topping_ids_1
One2many → lunch.topping
domain=[('topping_category', '=', 1)]
args: 'lunch.topping', 'supplier_id'
topping_ids_2
One2many → lunch.topping
domain=[('topping_category', '=', 2)]
args: 'lunch.topping', 'supplier_id'
topping_ids_3
One2many → lunch.topping
domain=[('topping_category', '=', 3)]
args: 'lunch.topping', 'supplier_id'
topping_label_1
Char
default='Extras'
required=True
args: 'Extra 1 Label'
topping_label_2
Char
default='Beverages'
required=True
args: 'Extra 2 Label'
topping_label_3
Char
default='Extra Label 3'
required=True
args: 'Extra 3 Label'
topping_quantity_1
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 1 Quantity'
topping_quantity_2
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 2 Quantity'
topping_quantity_3
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 3 Quantity'
tue
Boolean
default=True
tz
Selection
default=<expr>
required=True
string='Timezone'
args: _tz_get
wed
Boolean
default=True
zip_code
Char
readonly=False
related='partner_id.zip'
create(self, vals_list)
name_get(self)
toggle_active(self)
unlink(self)
write(self, values)
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
name
Char
required=True
args: 'Name'
price
Monetary
required=True
args: 'Price'
supplier_id
Many2one → lunch.supplier
ondelete='cascade'
args: 'lunch.supplier'
topping_category
Integer
default=1
help='This field is a technical field'
required=True
args: 'Topping Category'
name_get(self)
lunch_minimum_threshold
Float
No public methods.
company_lunch_minimum_threshold
Float
readonly=False
related='company_id.lunch_minimum_threshold'
string='Maximum Allowed Overdraft'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
No public methods.
favorite_lunch_product_ids
Many2many → lunch.product
last_lunch_location_id
Many2one → lunch.location
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/14.0/lunch |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Human Resources/Lunch |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Aaron Bohy, Lucas Perais (lpe), Barad Mahendra, Yannick Tivisse, Xavier-Do, Victor Feyens, Sébastien Theys, alt-odoo, Julien Mougenot, fw-bot, Achraf (abz), Lucas Lefèvre, IEL, Mathieu Duckerts-Antoine, Kevin Baptiste, Audric Onockx (auon), Louis Wicket (wil) |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:14:31 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
The base module to manage lunch.
================================
Many companies order sandwiches, pizzas and other, from usual vendors, for their employees to offer them more facilities.
However lunches management within the company requires proper administration especially when the number of employees or vendors is important.
The “Lunch Order” module has been developed to make this management easier but also to offer employees more tools and usability.
In addition to a full meal and vendor management, this module offers the possibility to display warning and provides quick order selection based on employee’s preferences.
If you want to save your employees' time and avoid them to always have coins in their pockets, this module is essential.
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
lunch assets | ir.ui.view | qweb | Inherits web.assets_backend |
lunch_alert_view_form |
lunch.alert.form | lunch.alert | form | New |
lunch_alert_view_kanban |
lunch.alert.kanban | lunch.alert | kanban | New |
lunch_alert_view_search |
lunch.alert.search | lunch.alert | search | New |
lunch_alert_view_tree |
lunch.alert.tree | lunch.alert | tree | New |
lunch_cashmove_report_view_form |
lunch.cashmove.report.form | lunch.cashmove.report | form | New |
lunch_cashmove_report_view_search |
lunch.cashmove.report.search | lunch.cashmove.report | search | New |
lunch_cashmove_report_view_search_2 |
lunch.cashmove.report.search | lunch.cashmove.report | search | New |
lunch_cashmove_report_view_tree |
lunch.cashmove.report.tree | lunch.cashmove.report | tree | New |
lunch_cashmove_report_view_tree_2 |
lunch.cashmove.report.tree | lunch.cashmove.report | tree | New |
lunch_cashmove_view_form |
lunch.cashmove.form | lunch.cashmove | form | New |
lunch_cashmove_view_search |
lunch.cashmove.search | lunch.cashmove | search | New |
lunch_cashmove_view_tree |
lunch.cashmove.tree | lunch.cashmove | tree | New |
lunch_location_form_view |
lunch.location.view.form | lunch.location | form | New |
lunch_location_kanban_view |
lunch.location.view.kanban | lunch.location | kanban | New |
lunch_location_tree_view |
lunch.location.view.form | lunch.location | tree | New |
lunch_location_view_search |
lunch.location.view.search | lunch.location | search | New |
lunch_order_view_form |
lunch.order.view.form | lunch.order | form | New |
lunch_order_view_graph |
lunch.order.graph | lunch.order | graph | New |
lunch_order_view_kanban |
lunch.order.kanban | lunch.order | kanban | New |
lunch_order_view_pivot |
lunch.order.pivot | lunch.order | pivot | New |
lunch_order_view_search |
lunch.order.search | lunch.order | search | New |
lunch_order_view_tree |
lunch.order.tree | lunch.order | tree | New |
lunch_payment_dialog |
Lunch Payment Dialog | ir.ui.view | qweb | New |
lunch_product_category_view_form |
Product category Form | lunch.product.category | form | New |
lunch_product_category_view_kanban |
Product category Kanban | lunch.product.category | kanban | New |
lunch_product_category_view_search |
lunch.product.category.search | lunch.product.category | search | New |
lunch_product_category_view_tree |
Product category Tree | lunch.product.category | tree | New |
lunch_product_report_view_search |
lunch.product.report.search | lunch.product.report | search | New |
lunch_product_report_view_tree |
lunch.product.tree | lunch.product.report | tree | New |
lunch_product_view_form |
lunch.product.form | lunch.product | form | New |
lunch_product_view_search |
lunch.product.search | lunch.product | search | New |
lunch_product_view_tree |
lunch.product.tree | lunch.product | tree | New |
lunch_supplier_view_form |
lunch.supplier.view.form | lunch.supplier | form | New |
lunch_supplier_view_kanban |
lunch.supplier.view.kanban | lunch.supplier | kanban | New |
lunch_supplier_view_search |
lunch.supplier.view.search | lunch.supplier | search | New |
lunch_supplier_view_tree |
lunch.supplier.view.tree | lunch.supplier | tree | New |
qunit_mobile_suite |
lunch mobile tests | ir.ui.view | qweb | Inherits web.qunit_mobile_suite_tests |
qunit_suite |
lunch tests | ir.ui.view | qweb | Inherits web.qunit_suite_tests |
res_config_settings_view_form |
res.config.settings.view.form.inherit.lunch | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
view_lunch_cashmove_kanban |
lunch.cashmove.kanban | lunch.cashmove | kanban | New |
view_lunch_cashmove_report_kanban |
lunch.cashmove.report.kanban | lunch.cashmove.report | kanban | New |
view_lunch_product_kanban |
lunch.product.kanban | lunch.product | kanban | New |
view_lunch_product_kanban_order |
lunch.product.kanban | lunch.product.report | kanban | New |
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
args: 'Active'
available_today
Boolean
compute='_compute_available_today'
search='_search_available_today'
args: 'Is Displayed Today'
location_ids
Many2many → lunch.location
string='Location'
args: 'lunch.location'
message
Html
required=True
translate=True
args: 'Message'
mode
Selection
default='alert'
string='Display'
args: [('alert', 'Alert in app'), ('chat', 'Chat notification')]
name
Char
required=True
translate=True
args: 'Alert Name'
notification_moment
Selection
default='am'
required=True
args: [('am', 'AM'), ('pm', 'PM')]
notification_time
Float
default=10.0
string='Notification Time'
recipients
Selection
default='everyone'
string='Recipients'
args: [('everyone', 'Everyone'), ('last_week', 'Employee who ordered last week'), ('last_month', 'Employee who ordered last month'), ('last_year', 'Employee who ordered last year')]
recurrency_friday
Boolean
default=True
args: 'Friday'
recurrency_monday
Boolean
default=True
args: 'Monday'
recurrency_saturday
Boolean
default=True
args: 'Saturday'
recurrency_sunday
Boolean
default=True
args: 'Sunday'
recurrency_thursday
Boolean
default=True
args: 'Thursday'
recurrency_tuesday
Boolean
default=True
args: 'Tuesday'
recurrency_wednesday
Boolean
default=True
args: 'Wednesday'
tz
Selection
default=<expr>
required=True
string='Timezone'
args: _tz_get
until
Date
No public methods.
amount
Float
required=True
args: 'Amount'
currency_id
Many2one → res.currency
default=<expr>
args: 'res.currency'
date
Date
default=fields.Date.context_today
required=True
args: 'Date'
description
Text
user_id
Many2one → res.users
default=<expr>
args: 'res.users', 'User'
get_wallet_balance(self, user, include_config=True)
name_get(self)
amount
Float
currency_id
Many2one → res.currency
string='Currency'
args: 'res.currency'
date
Date
description
Text
id
Integer
user_id
Many2one → res.users
string='User'
args: 'res.users'
init(self)
name_get(self)
No new fields.
Public methods (0)No public methods.
address
Text
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
name
Char
required=True
args: 'Location Name'
No public methods.
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
args: 'Active'
available_toppings_1
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
available_toppings_2
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
available_toppings_3
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
category_id
Many2one
related='product_id.category_id'
store=True
string='Product Category'
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
currency_id
Many2one
related='company_id.currency_id'
store=True
date
Date
default=fields.Date.context_today
readonly=True
required=True
states={'new': [('readonly', False)]}
args: 'Order Date'
display_toppings
Text
compute='_compute_display_toppings'
store=True
args: 'Extras'
image_128
Image
compute='_compute_product_images'
image_1920
Image
compute='_compute_product_images'
name
Char
readonly=True
related='product_id.name'
string='Product Name'
note
Text
price
Float
compute='_compute_total_price'
digits='Account'
readonly=True
store=True
args: 'Total Price'
product_description
Text
related='product_id.description'
args: 'Description'
product_id
Many2one → lunch.product
required=True
string='Product'
args: 'lunch.product'
quantity
Float
default=1
required=True
args: 'Quantity'
state
Selection
default='new'
index=True
readonly=True
args: [('new', 'To Order'), ('ordered', 'Ordered'), ('confirmed', 'Received'), ('cancelled', 'Cancelled')], 'Status'
supplier_id
Many2one
index=True
related='product_id.supplier_id'
store=True
string='Vendor'
topping_ids_1
Many2many → lunch.topping
domain=[('topping_category', '=', 1)]
string='Extras 1'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_ids_2
Many2many → lunch.topping
domain=[('topping_category', '=', 2)]
string='Extras 2'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_ids_3
Many2many → lunch.topping
domain=[('topping_category', '=', 3)]
string='Extras 3'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_label_1
Char
related='product_id.category_id.topping_label_1'
topping_label_2
Char
related='product_id.category_id.topping_label_2'
topping_label_3
Char
related='product_id.category_id.topping_label_3'
topping_quantity_1
Selection
related='product_id.category_id.topping_quantity_1'
topping_quantity_2
Selection
related='product_id.category_id.topping_quantity_2'
topping_quantity_3
Selection
related='product_id.category_id.topping_quantity_3'
user_id
Many2one → res.users
default=<expr>
readonly=True
states={'new': [('readonly', False)]}
args: 'res.users', 'User'
action_cancel(self)
action_confirm(self)
action_order(self)
add_to_cart(self)
create(self, values)
init(self)
update_quantity(self, increment)
write(self, values)
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
category_id
Many2one → lunch.product.category
check_company=True
required=True
args: 'lunch.product.category', 'Product Category'
company_id
Many2one → res.company
readonly=False
related='supplier_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
description
Text
translate=True
args: 'Description'
favorite_user_ids
Many2many → res.users
check_company=True
args: 'res.users', 'lunch_product_favorite_user_rel', 'product_id', 'user_id'
name
Char
required=True
translate=True
args: 'Product Name'
new_until
Date
price
Float
digits='Account'
required=True
args: 'Price'
supplier_id
Many2one → lunch.supplier
check_company=True
required=True
args: 'lunch.supplier', 'Vendor'
toggle_active(self)
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
string='Active'
company_id
Many2one → res.company
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
image_1920
Image
default=_default_image
name
Char
required=True
translate=True
args: 'Product Category'
product_count
Integer
compute='_compute_product_count'
help='The number of products related to this category'
topping_ids_1
One2many → lunch.topping
domain=[('topping_category', '=', 1)]
args: 'lunch.topping', 'category_id'
topping_ids_2
One2many → lunch.topping
domain=[('topping_category', '=', 2)]
args: 'lunch.topping', 'category_id'
topping_ids_3
One2many → lunch.topping
domain=[('topping_category', '=', 3)]
args: 'lunch.topping', 'category_id'
topping_label_1
Char
default='Extras'
required=True
args: 'Extra 1 Label'
topping_label_2
Char
default='Beverages'
required=True
args: 'Extra 2 Label'
topping_label_3
Char
default='Extra Label 3'
required=True
args: 'Extra 3 Label'
topping_quantity_1
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 1 Quantity'
topping_quantity_2
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 2 Quantity'
topping_quantity_3
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 3 Quantity'
create(self, vals)
toggle_active(self)
write(self, vals)
active
Boolean
category_id
Many2one → lunch.product.category
company_id
Many2one → res.company
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
description
Text
related='product_id.description'
args: 'Description'
id
Integer
image_128
Image
compute='_compute_image_128'
is_available_at
Many2one → lunch.location
compute='_compute_is_available_at'
search='_search_is_available_at'
args: 'lunch.location', 'Product Availability'
is_favorite
Boolean
is_new
Boolean
last_order_date
Date
name
Char
related='product_id.name'
args: 'Product Name'
price
Float
product_id
Many2one → lunch.product
supplier_id
Many2one → lunch.supplier
user_id
Many2one → res.users
compute_concurrency_field(self)
init(self)
write(self, values)
No new fields.
Public methods (0)No public methods.
active
Boolean
default=True
automatic_email_time
Float
default=12.0
required=True
args: 'Order Time'
available_location_ids
Many2many → lunch.location
string='Location'
args: 'lunch.location'
available_today
Boolean
compute='_compute_available_today'
search='_search_available_today'
args: 'This is True when if the supplier is available today'
city
Char
readonly=False
related='partner_id.city'
company_id
Many2one → res.company
readonly=False
related='partner_id.company_id'
store=True
args: 'res.company'
country_id
Many2one → res.country
readonly=False
related='partner_id.country_id'
args: 'res.country'
delivery
Selection
default='no_delivery'
args: [('delivery', 'Delivery'), ('no_delivery', 'No Delivery')]
email
Char
readonly=False
related='partner_id.email'
email_formatted
Char
readonly=True
related='partner_id.email_formatted'
moment
Selection
default='am'
required=True
args: [('am', 'AM'), ('pm', 'PM')]
name
Char
readonly=False
related='partner_id.name'
args: 'Name'
partner_id
Many2one → res.partner
required=True
string='Vendor'
args: 'res.partner'
phone
Char
readonly=False
related='partner_id.phone'
recurrency_end_date
Date
help='This field is used in order to '
args: 'Until'
recurrency_friday
Boolean
default=True
args: 'Friday'
recurrency_monday
Boolean
default=True
args: 'Monday'
recurrency_saturday
Boolean
recurrency_sunday
Boolean
recurrency_thursday
Boolean
default=True
args: 'Thursday'
recurrency_tuesday
Boolean
default=True
args: 'Tuesday'
recurrency_wednesday
Boolean
default=True
args: 'Wednesday'
responsible_id
Many2one → res.users
default=<expr>
domain=<expr>
help="The responsible is the person that will order lunch for everyone. It will be used as the 'from' when sending the automatic email."
string='Responsible'
args: 'res.users'
send_by
Selection
default='phone'
args: [('phone', 'Phone'), ('mail', 'Email')], 'Send Order By'
state_id
Many2one → res.country.state
readonly=False
related='partner_id.state_id'
args: 'res.country.state'
street
Char
readonly=False
related='partner_id.street'
street2
Char
readonly=False
related='partner_id.street2'
tz
Selection
default=<expr>
required=True
string='Timezone'
args: _tz_get
zip_code
Char
readonly=False
related='partner_id.zip'
name_get(self)
toggle_active(self)
category_id
Many2one → lunch.product.category
ondelete='cascade'
args: 'lunch.product.category'
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
name
Char
required=True
args: 'Name'
price
Float
digits='Account'
required=True
args: 'Price'
topping_category
Integer
default=1
help='This field is a technical field'
required=True
args: 'Topping Category'
name_get(self)
lunch_minimum_threshold
Float
No public methods.
company_lunch_minimum_threshold
Float
readonly=False
related='company_id.lunch_minimum_threshold'
string='Maximum Allowed Overdraft'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
No public methods.
favorite_lunch_product_ids
Many2many → lunch.product
last_lunch_location_id
Many2one → lunch.location
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/13.0/lunch |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Human Resources/Lunch |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Joren Van Onder, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Aaron Bohy, GitHub, Lucas Perais (lpe), Yannick Tivisse, Odoo Online, Nicolas Seinlet, RomainLibert, Jorge Pinna Puissant, Toufik Ben Jaa, Adrian Torres, Xavier-Do, Florimond Husquinet (fhu), Sébastien Theys, Julien Mougenot, Lucas Lefèvre, Prakash Prajapati, IEL, Mathieu Duckerts-Antoine, Pierre Paridans, Yenthe666, Kevin Baptiste |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:06:44 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
The base module to manage lunch.
================================
Many companies order sandwiches, pizzas and other, from usual vendors, for their employees to offer them more facilities.
However lunches management within the company requires proper administration especially when the number of employees or vendors is important.
The “Lunch Order” module has been developed to make this management easier but also to offer employees more tools and usability.
In addition to a full meal and vendor management, this module offers the possibility to display warning and provides quick order selection based on employee’s preferences.
If you want to save your employees' time and avoid them to always have coins in their pockets, this module is essential.
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
lunch assets | ir.ui.view | qweb | Inherits web.assets_backend |
lunch_alert_view_form |
lunch.alert.form | lunch.alert | form | New |
lunch_alert_view_search |
lunch.alert.search | lunch.alert | search | New |
lunch_alert_view_tree |
lunch.alert.tree | lunch.alert | tree | New |
lunch_cashmove_report_view_form |
lunch.cashmove.report.form | lunch.cashmove.report | form | New |
lunch_cashmove_report_view_search |
lunch.cashmove.report.search | lunch.cashmove.report | search | New |
lunch_cashmove_report_view_search_2 |
lunch.cashmove.report.search | lunch.cashmove.report | search | New |
lunch_cashmove_report_view_tree |
lunch.cashmove.report.tree | lunch.cashmove.report | tree | New |
lunch_cashmove_report_view_tree_2 |
lunch.cashmove.report.tree | lunch.cashmove.report | tree | New |
lunch_cashmove_view_form |
lunch.cashmove.form | lunch.cashmove | form | New |
lunch_cashmove_view_search |
lunch.cashmove.search | lunch.cashmove | search | New |
lunch_cashmove_view_tree |
lunch.cashmove.tree | lunch.cashmove | tree | New |
lunch_location_form_view |
lunch.location.view.form | lunch.location | form | New |
lunch_location_tree_view |
lunch.location.view.form | lunch.location | tree | New |
lunch_location_view_search |
lunch.location.view.search | lunch.location | search | New |
lunch_order_view_graph |
lunch.order.graph | lunch.order | graph | New |
lunch_order_view_kanban |
lunch.order.kanban | lunch.order | kanban | New |
lunch_order_view_pivot |
lunch.order.pivot | lunch.order | pivot | New |
lunch_order_view_search |
lunch.order.search | lunch.order | search | New |
lunch_order_view_tree |
lunch.order.tree | lunch.order | tree | New |
lunch_payment_dialog |
Lunch Payment Dialog | ir.ui.view | qweb | New |
lunch_product_category_view_form |
Product category Form | lunch.product.category | form | New |
lunch_product_category_view_tree |
Product category Tree | lunch.product.category | tree | New |
lunch_product_report_view_search |
lunch.product.report.search | lunch.product.report | search | New |
lunch_product_view_form |
lunch.product.form | lunch.product | form | New |
lunch_product_view_search |
lunch.product.search | lunch.product | search | New |
lunch_product_view_tree |
lunch.product.tree | lunch.product | tree | New |
lunch_supplier_view_form |
lunch.supplier.view.form | lunch.supplier | form | New |
lunch_supplier_view_kanban |
lunch.supplier.view.kanban | lunch.supplier | kanban | New |
lunch_supplier_view_search |
lunch.supplier.view.search | lunch.supplier | search | New |
lunch_supplier_view_tree |
lunch.supplier.view.tree | lunch.supplier | tree | New |
qunit_mobile_suite |
lunch mobile tests | ir.ui.view | qweb | Inherits web.qunit_mobile_suite |
qunit_suite |
lunch tests | ir.ui.view | qweb | Inherits web.qunit_suite |
res_config_settings_view_form |
res.config.settings.view.form.inherit.lunch | res.config.settings | xpath | Inherits base.res_config_settings_view_form |
view_lunch_cashmove_kanban |
lunch.cashmove.kanban | lunch.cashmove | kanban | New |
view_lunch_cashmove_report_kanban |
lunch.cashmove.report.kanban | lunch.cashmove.report | kanban | New |
view_lunch_order_temp |
view.lunch.order.temp | lunch.order.temp | form | New |
view_lunch_product_kanban |
lunch.product.kanban | lunch.product | kanban | New |
view_lunch_product_kanban_order |
lunch.product.kanban | lunch.product.report | kanban | New |
active
Boolean
default=True
args: 'Active'
available_today
Boolean
compute='_compute_available_today'
search='_search_available_today'
args: 'Is Displayed Today'
location_ids
Many2many → lunch.location
string='Location'
args: 'lunch.location'
message
Html
required=True
args: 'Message'
mode
Selection
default='alert'
string='Display'
args: [('alert', 'Alert in app'), ('chat', 'Chat notification')]
name
Char
required=True
args: 'Alert Name'
notification_moment
Selection
default='am'
required=True
args: [('am', 'AM'), ('pm', 'PM')]
notification_time
Float
default=10.0
string='Notification Time'
recipients
Selection
default='everyone'
string='Recipients'
args: [('everyone', 'Everyone'), ('last_week', 'Employee who ordered last week'), ('last_month', 'Employee who ordered last month'), ('last_year', 'Employee who ordered last year')]
recurrency_friday
Boolean
default=True
args: 'Friday'
recurrency_monday
Boolean
default=True
args: 'Monday'
recurrency_saturday
Boolean
default=True
args: 'Saturday'
recurrency_sunday
Boolean
default=True
args: 'Sunday'
recurrency_thursday
Boolean
default=True
args: 'Thursday'
recurrency_tuesday
Boolean
default=True
args: 'Tuesday'
recurrency_wednesday
Boolean
default=True
args: 'Wednesday'
tz
Selection
default=<expr>
required=True
string='Timezone'
args: _tz_get
until
Date
No public methods.
amount
Float
required=True
args: 'Amount'
currency_id
Many2one → res.currency
default=<expr>
args: 'res.currency'
date
Date
default=fields.Date.context_today
required=True
args: 'Date'
description
Text
user_id
Many2one → res.users
default=<expr>
args: 'res.users', 'User'
get_wallet_balance(self, user, include_config=True)
name_get(self)
amount
Float
currency_id
Many2one → res.currency
string='Currency'
args: 'res.currency'
date
Date
description
Text
id
Integer
user_id
Many2one → res.users
string='User'
args: 'res.users'
init(self)
name_get(self)
address
Text
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
name
Char
required=True
args: 'Location Name'
No public methods.
active
Boolean
default=True
args: 'Active'
category_id
Many2one → lunch.product.category
readonly=True
related='product_id.category_id'
store=True
string='Product Category'
args: 'lunch.product.category'
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
currency_id
Many2one → res.currency
readonly=True
related='company_id.currency_id'
store=True
args: 'res.currency'
date
Date
default=fields.Date.context_today
readonly=True
required=True
states={'new': [('readonly', False)]}
args: 'Order Date'
display_toppings
Text
compute='_compute_display_toppings'
store=True
args: 'Extras'
name
Char
readonly=True
related='product_id.name'
string='Product Name'
note
Text
price
Float
compute='_compute_total_price'
digits='Account'
readonly=True
store=True
args: 'Total Price'
product_id
Many2one → lunch.product
required=True
string='Product'
args: 'lunch.product'
quantity
Float
default=1
required=True
args: 'Quantity'
state
Selection
default='new'
index=True
readonly=True
args: [('new', 'To Order'), ('ordered', 'Ordered'), ('confirmed', 'Received'), ('cancelled', 'Cancelled')], 'Status'
supplier_id
Many2one → lunch.supplier
index=True
readonly=True
related='product_id.supplier_id'
store=True
string='Vendor'
args: 'lunch.supplier'
topping_ids_1
Many2many → lunch.topping
domain=[('topping_category', '=', 1)]
string='Extras 1'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_ids_2
Many2many → lunch.topping
domain=[('topping_category', '=', 2)]
string='Extras 2'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
topping_ids_3
Many2many → lunch.topping
domain=[('topping_category', '=', 3)]
string='Extras 3'
args: 'lunch.topping', 'lunch_order_topping', 'order_id', 'topping_id'
user_id
Many2one → res.users
default=<expr>
readonly=True
states={'new': [('readonly', False)]}
args: 'res.users', 'User'
action_cancel(self)
action_confirm(self)
action_order(self)
init(self)
update_quantity(self, increment)
available_toppings_1
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
available_toppings_2
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
available_toppings_3
Boolean
compute='_compute_available_toppings'
help='Are extras available for this product'
currency_id
Many2one → res.currency
default=<expr>
args: 'res.currency'
edit
Boolean
default=<expr>
args: 'Edit Mode'
image_128
Image
related='product_id.image_128'
image_1920
Image
related='product_id.image_1920'
note
Text
default=<expr>
args: 'Special Instructions'
price_total
Float
compute='_compute_price_total'
args: 'Total Price'
product_category
Many2one → lunch.product.category
related='product_id.category_id'
args: 'lunch.product.category'
product_description
Text
related='product_id.description'
args: 'Description'
product_id
Many2one → lunch.product
string='Product'
args: 'lunch.product'
product_name
Char
related='product_id.name'
args: 'Product Name'
quantity
Float
default=1
args: 'Quantity'
topping_ids_1
Many2many → lunch.topping
default=<expr>
domain="[('category_id', '=', product_category), ('topping_category', '=', 1)]"
string='Extra Garniture'
args: 'lunch.topping', 'lunch_order_temp_topping', 'order_id', 'topping_id'
topping_ids_2
Many2many → lunch.topping
default=<expr>
domain="[('category_id', '=', product_category), ('topping_category', '=', 2)]"
string='Extra Garniture 2'
args: 'lunch.topping', 'lunch_order_temp_topping', 'order_id', 'topping_id'
topping_ids_3
Many2many → lunch.topping
default=<expr>
domain="[('category_id', '=', product_category), ('topping_category', '=', 3)]"
string='Extra Garniture 3'
args: 'lunch.topping', 'lunch_order_temp_topping', 'order_id', 'topping_id'
topping_label_1
Char
related='product_id.category_id.topping_label_1'
topping_label_2
Char
related='product_id.category_id.topping_label_2'
topping_label_3
Char
related='product_id.category_id.topping_label_3'
topping_quantity_1
Selection
related='product_id.category_id.topping_quantity_1'
topping_quantity_2
Selection
related='product_id.category_id.topping_quantity_2'
topping_quantity_3
Selection
related='product_id.category_id.topping_quantity_3'
user_id
Many2one → res.users
default=<expr>
args: 'res.users'
add_to_cart(self)
active
Boolean
default=True
category_id
Many2one → lunch.product.category
required=True
args: 'lunch.product.category', 'Product Category'
company_id
Many2one → res.company
related='supplier_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
description
Text
favorite_user_ids
Many2many → res.users
name
Char
required=True
args: 'Product Name'
new_until
Date
price
Float
digits='Account'
required=True
args: 'Price'
supplier_id
Many2one → lunch.supplier
required=True
args: 'lunch.supplier', 'Vendor'
No public methods.
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
name
Char
required=True
args: 'Product Category'
product_count
Integer
compute='_compute_product_count'
help='The number of products related to this category'
topping_ids_1
One2many → lunch.topping
domain=[('topping_category', '=', 1)]
ondelete='cascade'
args: 'lunch.topping', 'category_id'
topping_ids_2
One2many → lunch.topping
domain=[('topping_category', '=', 2)]
ondelete='cascade'
args: 'lunch.topping', 'category_id'
topping_ids_3
One2many → lunch.topping
domain=[('topping_category', '=', 3)]
ondelete='cascade'
args: 'lunch.topping', 'category_id'
topping_label_1
Char
default='Extras'
required=True
args: 'Extra 1 Label'
topping_label_2
Char
default='Beverages'
required=True
args: 'Extra 2 Label'
topping_label_3
Char
default='Extra Label 3'
required=True
args: 'Extra 3 Label'
topping_quantity_1
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 1 Quantity'
topping_quantity_2
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 2 Quantity'
topping_quantity_3
Selection
default='0_more'
required=True
args: [('0_more', 'None or More'), ('1_more', 'One or More'), ('1', 'Only One')], 'Extra 3 Quantity'
create(self, vals)
write(self, vals)
active
Boolean
category_id
Many2one → lunch.product.category
company_id
Many2one → res.company
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
description
Text
id
Integer
image_128
Image
compute='_compute_image_128'
is_available_at
Many2one → lunch.location
compute='_compute_is_available_at'
search='_search_is_available_at'
args: 'lunch.location', 'Product Availability'
is_favorite
Boolean
is_new
Boolean
last_order_date
Date
name
Char
price
Float
product_id
Many2one → lunch.product
supplier_id
Many2one → lunch.supplier
user_id
Many2one → res.users
compute_concurrency_field(self)
init(self)
write(self, values)
active
Boolean
default=True
automatic_email_time
Float
default=12.0
required=True
args: 'Order Time'
available_location_ids
Many2many → lunch.location
string='Location'
args: 'lunch.location'
available_today
Boolean
compute='_compute_available_today'
search='_search_available_today'
args: 'This is True when if the supplier is available today'
city
Char
readonly=False
related='partner_id.city'
company_id
Many2one → res.company
readonly=False
related='partner_id.company_id'
args: 'res.company'
country_id
Many2one → res.country
readonly=False
related='partner_id.country_id'
args: 'res.country'
delivery
Selection
default='no_delivery'
args: [('delivery', 'Delivery'), ('no_delivery', 'No Delivery')]
email
Char
readonly=False
related='partner_id.email'
email_formatted
Char
readonly=True
related='partner_id.email_formatted'
moment
Selection
default='am'
required=True
args: [('am', 'AM'), ('pm', 'PM')]
name
Char
readonly=False
related='partner_id.name'
args: 'Name'
partner_id
Many2one → res.partner
required=True
string='Vendor'
args: 'res.partner'
phone
Char
readonly=False
related='partner_id.phone'
recurrency_end_date
Date
help='This field is used in order to '
args: 'Until'
recurrency_friday
Boolean
default=True
args: 'Friday'
recurrency_monday
Boolean
default=True
args: 'Monday'
recurrency_saturday
Boolean
recurrency_sunday
Boolean
recurrency_thursday
Boolean
default=True
args: 'Thursday'
recurrency_tuesday
Boolean
default=True
args: 'Tuesday'
recurrency_wednesday
Boolean
default=True
args: 'Wednesday'
responsible_id
Many2one → res.users
default=<expr>
domain=<expr>
help="The responsible is the person that will order lunch for everyone. It will be used as the 'from' when sending the automatic email."
string='Responsible'
args: 'res.users'
send_by
Selection
default='phone'
args: [('phone', 'Phone'), ('mail', 'Email')], 'Send Order By'
state_id
Many2one → res.country.state
readonly=False
related='partner_id.state_id'
args: 'res.country.state'
street
Char
readonly=False
related='partner_id.street'
street2
Char
readonly=False
related='partner_id.street2'
tz
Selection
default=<expr>
required=True
string='Timezone'
args: _tz_get
zip_code
Char
readonly=False
related='partner_id.zip'
name_get(self)
category_id
Many2one → lunch.product.category
company_id
Many2one → res.company
default=<expr>
args: 'res.company'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
name
Char
required=True
args: 'Name'
price
Float
digits='Account'
required=True
args: 'Price'
topping_category
Integer
default=1
help='This field is a technical field'
required=True
args: 'Topping Category'
name_get(self)
lunch_minimum_threshold
Float
No public methods.
company_lunch_minimum_threshold
Float
readonly=False
related='company_id.lunch_minimum_threshold'
string='Maximum Allowed Overdraft'
currency_id
Many2one → res.currency
related='company_id.currency_id'
args: 'res.currency'
No public methods.
favorite_lunch_product_ids
Many2many → lunch.product
last_lunch_location_id
Many2one → lunch.location
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/12.0/lunch |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Thibault Delavallée, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Lempereur, Richard Mathot, Géry Debongnie, GitHub, Lucas Perais (lpe), Yannick Tivisse, Alexandre Kühn, qsm-odoo, Nicolas Seinlet, Adrien Dieudonne, Adrian Torres, Xavier-Do, jvm-odoo, Parth Choksi |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:57:02 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - decimal_precision - base - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
The base module to manage lunch.
================================
Many companies order sandwiches, pizzas and other, from usual vendors, for their employees to offer them more facilities.
However lunches management within the company requires proper administration especially when the number of employees or vendors is important.
The “Lunch Order” module has been developed to make this management easier but also to offer employees more tools and usability.
In addition to a full meal and vendor management, this module offers the possibility to display warning and provides quick order selection based on employee’s preferences.
If you want to save your employees' time and avoid them to always have coins in their pockets, this module is essential.
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
lunch assets | ir.ui.view | qweb | Inherits web.assets_backend |
lunch_alert_view_form |
lunch.alert.form | lunch.alert | form | New |
lunch_alert_view_search |
lunch.alert.search | lunch.alert | search | New |
lunch_alert_view_tree |
lunch.alert.tree | lunch.alert | tree | New |
lunch_cashmove_view_form |
lunch.cashmove.form | lunch.cashmove | form | New |
lunch_cashmove_view_search |
lunch.cashmove.search | lunch.cashmove | search | New |
lunch_cashmove_view_search_2 |
lunch.cashmove.search | lunch.cashmove | search | New |
lunch_cashmove_view_tree |
lunch.cashmove.tree | lunch.cashmove | tree | New |
lunch_cashmove_view_tree_2 |
lunch.cashmove.tree | lunch.cashmove | tree | New |
lunch_order_line_view_kanban |
lunch.order.line.kanban | lunch.order.line | kanban | New |
lunch_order_line_view_search |
lunch.order.line.search | lunch.order.line | search | New |
lunch_order_line_view_tree |
lunch.order.line.tree | lunch.order.line | tree | New |
lunch_order_view_form |
lunch.order.form | lunch.order | form | New |
lunch_order_view_tree |
lunch.order.tree | lunch.order | tree | New |
lunch_product_category_view_form |
Product category Form | lunch.product.category | form | New |
lunch_product_view_form |
lunch.product.form | lunch.product | form | New |
lunch_product_view_search |
lunch.product.search | lunch.product | search | New |
lunch_product_view_tree |
lunch.product.tree | lunch.product | tree | New |
qunit_suite |
lunch tests | ir.ui.view | qweb | Inherits web.qunit_suite |
report_lunch_order |
report_lunch_order | ir.ui.view | qweb | New |
view_lunch_alert_kanban |
lunch.alert.kanban | lunch.alert | kanban | New |
view_lunch_cashmove_kanban |
lunch.cashmove.kanban | lunch.cashmove | kanban | New |
view_lunch_order_line_lucky |
view.lunch.order.line.lucky | lunch.order.line.lucky | form | New |
view_lunch_product_kanban |
lunch.product.kanban | lunch.product | kanban | New |
active
Boolean
default=True
alert_type
Selection
default='specific'
index=True
required=True
string='Recurrence'
args: [('specific', 'Specific Day'), ('week', 'Every Week'), ('days', 'Every Day')]
display
Boolean
compute='_compute_display_get'
end_hour
Float
default=23
oldname='active_to'
required=True
args: 'And'
friday
Boolean
message
Text
required=True
args: 'Message'
monday
Boolean
partner_id
Many2one → res.partner
help='If specified, the selected vendor can be ordered only on selected days'
string='Vendor'
args: 'res.partner'
saturday
Boolean
specific_day
Date
default=fields.Date.context_today
args: 'Day'
start_hour
Float
default=7
oldname='active_from'
required=True
args: 'Between'
sunday
Boolean
thursday
Boolean
tuesday
Boolean
wednesday
Boolean
name_get(self)
amount
Float
help='Can be positive (payment) or negative (order or payment if user wants to get his money back)'
required=True
args: 'Amount'
date
Date
default=fields.Date.context_today
required=True
args: 'Date'
description
Text
help='Can be an order or a payment'
args: 'Description'
order_id
Many2one → lunch.order.line
ondelete='cascade'
args: 'lunch.order.line', 'Order'
state
Selection
default='payment'
args: [('order', 'Order'), ('payment', 'Payment')], 'Is an order or a payment'
user_id
Many2one → res.users
default=<expr>
args: 'res.users', 'User'
name_get(self)
alerts
Text
compute='_compute_alerts_get'
string='Alerts'
balance_visible
Boolean
compute='_compute_cash_move_balance'
multi='cash_move_balance'
cash_move_balance
Monetary
compute='_compute_cash_move_balance'
multi='cash_move_balance'
company_id
Many2one → res.company
readonly=False
related='user_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
readonly=True
related='company_id.currency_id'
store=True
args: 'res.currency'
date
Date
default=fields.Date.context_today
readonly=True
required=True
states={'new': [('readonly', False)]}
args: 'Date'
order_line_ids
One2many → lunch.order.line
copy=True
readonly=True
states={'new': [('readonly', False)], False: [('readonly', False)]}
args: 'lunch.order.line', 'order_id', 'Products'
previous_order_ids
Many2many → lunch.order.line
compute='_compute_previous_order'
args: 'lunch.order.line'
previous_order_widget
Text
compute='_compute_previous_order'
state
Selection
compute='_compute_order_state'
copy=False
index=True
readonly=True
store=True
args: [('new', 'New'), ('confirmed', 'Received'), ('cancelled', 'Cancelled')], 'Status'
total
Float
compute='_compute_total'
store=True
string='Total'
user_id
Many2one → res.users
default=<expr>
readonly=True
states={'new': [('readonly', False)]}
args: 'res.users', 'User'
name_get(self)
cashmove
One2many → lunch.cashmove
category_id
Many2one → lunch.product.category
readonly=True
related='product_id.category_id'
store=True
string='Product Category'
args: 'lunch.product.category'
currency_id
Many2one → res.currency
readonly=False
related='order_id.currency_id'
args: 'res.currency'
date
Date
readonly=True
related='order_id.date'
store=True
string='Date'
name
Char
readonly=True
related='product_id.name'
string='Product Name'
note
Text
order_id
Many2one → lunch.order
ondelete='cascade'
required=True
args: 'lunch.order', 'Order'
price
Float
digits=dp.get_precision('Account')
readonly=True
related='product_id.price'
store=True
product_id
Many2one → lunch.product
domain=[('available', '=', True)]
required=True
args: 'lunch.product', 'Product'
state
Selection
default='new'
index=True
readonly=True
args: [('new', 'New'), ('confirmed', 'Received'), ('ordered', 'Ordered'), ('cancelled', 'Cancelled')], 'Status'
supplier
Many2one → res.partner
readonly=True
related='product_id.supplier'
store=True
string='Vendor'
args: 'res.partner'
user_id
Many2one → res.users
readonly=True
related='order_id.user_id'
store=True
string='User'
args: 'res.users'
cancel(self)
confirm(self)
create(self, vals)
order(self)
write(self, vals)
is_max_budget
Boolean
help='Enable this option to set a maximal budget for your lucky order.'
store=True
args: "I'm not feeling rich"
max_budget
Float
store=True
args: 'Max Budget'
product_id
Many2one → lunch.product
store=True
args: 'lunch.product', 'Product'
supplier_ids
Many2many → res.partner
comodel_name='res.partner'
domain=<expr>
string='Vendor'
random_pick(self)
active
Boolean
default=True
available
Boolean
compute='_get_available_product'
search='_search_available_products'
category_id
Many2one → lunch.product.category
required=True
args: 'lunch.product.category', 'Product Category'
description
Text
name
Char
required=True
args: 'Product'
price
Float
digits=dp.get_precision('Account')
args: 'Price'
supplier
Many2one → res.partner
No public methods.
name
Char
required=True
args: 'Product Category'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/11.0/lunch |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Jérome Maes, Richard Mathot, Aaron Bohy, GitHub, Olivier Colson, Yannick Tivisse, qsm-odoo, Martin Geubelle, Odoo Online, Laurent Smet, Adrien Dieudonne |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:53:44 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - web - decimal_precision |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
The base module to manage lunch.
================================
Many companies order sandwiches, pizzas and other, from usual vendors, for their employees to offer them more facilities.
However lunches management within the company requires proper administration especially when the number of employees or vendors is important.
The “Lunch Order” module has been developed to make this management easier but also to offer employees more tools and usability.
In addition to a full meal and vendor management, this module offers the possibility to display warning and provides quick order selection based on employee’s preferences.
If you want to save your employees' time and avoid them to always have coins in their pockets, this module is essential.
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
lunch assets | ir.ui.view | qweb | Inherits web.assets_backend |
lunch_alert_view_form |
lunch.alert.form | lunch.alert | form | New |
lunch_alert_view_search |
lunch.alert.search | lunch.alert | search | New |
lunch_alert_view_tree |
lunch.alert.tree | lunch.alert | tree | New |
lunch_cashmove_view_form |
lunch.cashmove.form | lunch.cashmove | form | New |
lunch_cashmove_view_search |
lunch.cashmove.search | lunch.cashmove | search | New |
lunch_cashmove_view_search_2 |
lunch.cashmove.search | lunch.cashmove | search | New |
lunch_cashmove_view_tree |
lunch.cashmove.tree | lunch.cashmove | tree | New |
lunch_cashmove_view_tree_2 |
lunch.cashmove.tree | lunch.cashmove | tree | New |
lunch_order_line_view_kanban |
lunch.order.line.kanban | lunch.order.line | kanban | New |
lunch_order_line_view_search |
lunch.order.line.search | lunch.order.line | search | New |
lunch_order_line_view_tree |
lunch.order.line.tree | lunch.order.line | tree | New |
lunch_order_view_form |
lunch.order.form | lunch.order | form | New |
lunch_order_view_tree |
lunch.order.tree | lunch.order | tree | New |
lunch_product_category_view_form |
Product category Form | lunch.product.category | form | New |
lunch_product_view_form |
lunch.product.form | lunch.product | form | New |
lunch_product_view_search |
lunch.product.search | lunch.product | search | New |
lunch_product_view_tree |
lunch.product.tree | lunch.product | tree | New |
qunit_suite |
lunch tests | ir.ui.view | qweb | Inherits web.qunit_suite |
report_lunch_order |
report_lunch_order | ir.ui.view | qweb | New |
view_lunch_alert_kanban |
lunch.alert.kanban | lunch.alert | kanban | New |
view_lunch_cashmove_kanban |
lunch.cashmove.kanban | lunch.cashmove | kanban | New |
view_lunch_order_line_lucky |
view.lunch.order.line.lucky | lunch.order.line.lucky | form | New |
view_lunch_product_kanban |
lunch.product.kanban | lunch.product | kanban | New |
active
Boolean
default=True
alert_type
Selection
default='specific'
index=True
required=True
string='Recurrence'
args: [('specific', 'Specific Day'), ('week', 'Every Week'), ('days', 'Every Day')]
display
Boolean
compute='_compute_display_get'
end_hour
Float
default=23
oldname='active_to'
required=True
args: 'And'
friday
Boolean
message
Text
required=True
args: 'Message'
monday
Boolean
saturday
Boolean
specific_day
Date
default=fields.Date.context_today
args: 'Day'
start_hour
Float
default=7
oldname='active_from'
required=True
args: 'Between'
sunday
Boolean
thursday
Boolean
tuesday
Boolean
wednesday
Boolean
name_get(self)
amount
Float
help='Can be positive (payment) or negative (order or payment if user wants to get his money back)'
required=True
args: 'Amount'
date
Date
default=fields.Date.context_today
required=True
args: 'Date'
description
Text
help='Can be an order or a payment'
args: 'Description'
order_id
Many2one → lunch.order.line
ondelete='cascade'
args: 'lunch.order.line', 'Order'
state
Selection
default='payment'
args: [('order', 'Order'), ('payment', 'Payment')], 'Is an order or a payment'
user_id
Many2one → res.users
default=<expr>
args: 'res.users', 'User'
name_get(self)
alerts
Text
compute='_compute_alerts_get'
string='Alerts'
balance_visible
Boolean
compute='_compute_cash_move_balance'
multi='cash_move_balance'
cash_move_balance
Monetary
compute='_compute_cash_move_balance'
multi='cash_move_balance'
company_id
Many2one → res.company
related='user_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
readonly=True
related='company_id.currency_id'
store=True
args: 'res.currency'
date
Date
default=fields.Date.context_today
readonly=True
required=True
states={'new': [('readonly', False)]}
args: 'Date'
order_line_ids
One2many → lunch.order.line
copy=True
readonly=True
states={'new': [('readonly', False)], False: [('readonly', False)]}
args: 'lunch.order.line', 'order_id', 'Products'
previous_order_ids
Many2many → lunch.order.line
compute='_compute_previous_order'
args: 'lunch.order.line'
previous_order_widget
Text
compute='_compute_previous_order'
state
Selection
compute='_compute_order_state'
copy=False
index=True
readonly=True
store=True
args: [('new', 'New'), ('confirmed', 'Received'), ('cancelled', 'Cancelled')], 'Status'
total
Float
compute='_compute_total'
store=True
string='Total'
user_id
Many2one → res.users
default=<expr>
readonly=True
states={'new': [('readonly', False)]}
args: 'res.users', 'User'
name_get(self)
cashmove
One2many → lunch.cashmove
category_id
Many2one → lunch.product.category
readonly=True
related='product_id.category_id'
store=True
string='Product Category'
args: 'lunch.product.category'
currency_id
Many2one → res.currency
related='order_id.currency_id'
args: 'res.currency'
date
Date
readonly=True
related='order_id.date'
store=True
string='Date'
name
Char
readonly=True
related='product_id.name'
string='Product Name'
note
Text
order_id
Many2one → lunch.order
ondelete='cascade'
required=True
args: 'lunch.order', 'Order'
price
Float
digits=dp.get_precision('Account')
readonly=True
related='product_id.price'
store=True
product_id
Many2one → lunch.product
required=True
args: 'lunch.product', 'Product'
state
Selection
default='new'
index=True
readonly=True
args: [('new', 'New'), ('confirmed', 'Received'), ('ordered', 'Ordered'), ('cancelled', 'Cancelled')], 'Status'
supplier
Many2one → res.partner
readonly=True
related='product_id.supplier'
store=True
string='Vendor'
args: 'res.partner'
user_id
Many2one → res.users
readonly=True
related='order_id.user_id'
store=True
string='User'
args: 'res.users'
cancel(self)
confirm(self)
order(self)
is_max_budget
Boolean
help='Enable this option to set a maximal budget for your lucky order.'
store=True
args: "I'm not feeling rich"
max_budget
Float
store=True
args: 'Max Budget'
product_id
Many2one → lunch.product
store=True
args: 'lunch.product', 'Product'
supplier_ids
Many2many → res.partner
comodel_name='res.partner'
domain=<expr>
string='Vendor'
random_pick(self)
active
Boolean
default=True
category_id
Many2one → lunch.product.category
required=True
args: 'lunch.product.category', 'Category'
description
Text
name
Char
required=True
args: 'Product'
price
Float
digits=dp.get_precision('Account')
args: 'Price'
supplier
Many2one → res.partner
No public methods.
name
Char
required=True
args: 'Category'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/10.0/lunch |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Nicolas Lempereur, Julien Legros, qdp-odoo, Jeremy Kersten, Olivier Colson, Yannick Tivisse, Pierre Masereel |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:50:49 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - web - decimal_precision |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
The base module to manage lunch.
================================
Many companies order sandwiches, pizzas and other, from usual vendors, for their employees to offer them more facilities.
However lunches management within the company requires proper administration especially when the number of employees or vendors is important.
The “Lunch Order” module has been developed to make this management easier but also to offer employees more tools and usability.
In addition to a full meal and vendor management, this module offers the possibility to display warning and provides quick order selection based on employee’s preferences.
If you want to save your employees' time and avoid them to always have coins in their pockets, this module is essential.
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
lunch assets | ir.ui.view | qweb | Inherits web.assets_backend |
lunch_alert_view_form |
lunch.alert.form | lunch.alert | form | New |
lunch_alert_view_search |
lunch.alert.search | lunch.alert | search | New |
lunch_alert_view_tree |
lunch.alert.tree | lunch.alert | tree | New |
lunch_cashmove_view_form |
lunch.cashmove.form | lunch.cashmove | form | New |
lunch_cashmove_view_search |
lunch.cashmove.search | lunch.cashmove | search | New |
lunch_cashmove_view_search_2 |
lunch.cashmove.search | lunch.cashmove | search | New |
lunch_cashmove_view_tree |
lunch.cashmove.tree | lunch.cashmove | tree | New |
lunch_cashmove_view_tree_2 |
lunch.cashmove.tree | lunch.cashmove | tree | New |
lunch_order_line_view_search |
lunch.order.line.search | lunch.order.line | search | New |
lunch_order_line_view_tree |
lunch.order.line.tree | lunch.order.line | tree | New |
lunch_order_view_form |
lunch.order.form | lunch.order | form | New |
lunch_order_view_tree |
lunch.order.tree | lunch.order | tree | New |
lunch_product_category_view_form |
Product category Form | lunch.product.category | form | New |
lunch_product_view_form |
lunch.product.form | lunch.product | form | New |
lunch_product_view_search |
lunch.product.search | lunch.product | search | New |
lunch_product_view_tree |
lunch.product.tree | lunch.product | tree | New |
report_lunch_order |
report_lunch_order | ir.ui.view | qweb | New |
view_lunch_order_line_lucky |
view.lunch.order.line.lucky | lunch.order.line.lucky | form | New |
active
Boolean
default=True
alert_type
Selection
default='specific'
index=True
required=True
string='Recurrence'
args: [('specific', 'Specific Day'), ('week', 'Every Week'), ('days', 'Every Day')]
display
Boolean
compute='_compute_display_get'
end_hour
Float
default=23
oldname='active_to'
required=True
args: 'And'
friday
Boolean
message
Text
required=True
args: 'Message'
monday
Boolean
saturday
Boolean
specific_day
Date
default=fields.Date.context_today
args: 'Day'
start_hour
Float
default=7
oldname='active_from'
required=True
args: 'Between'
sunday
Boolean
thursday
Boolean
tuesday
Boolean
wednesday
Boolean
name_get(self)
amount
Float
help='Can be positive (payment) or negative (order or payment if user wants to get his money back)'
required=True
args: 'Amount'
date
Date
default=fields.Date.context_today
required=True
args: 'Date'
description
Text
help='Can be an order or a payment'
args: 'Description'
order_id
Many2one → lunch.order.line
ondelete='cascade'
args: 'lunch.order.line', 'Order'
state
Selection
default='payment'
args: [('order', 'Order'), ('payment', 'Payment')], 'Is an order or a payment'
user_id
Many2one → res.users
default=<expr>
args: 'res.users', 'User'
name_get(self)
alerts
Text
compute='_compute_alerts_get'
string='Alerts'
balance_visible
Boolean
compute='_compute_cash_move_balance'
multi='cash_move_balance'
cash_move_balance
Monetary
compute='_compute_cash_move_balance'
multi='cash_move_balance'
company_id
Many2one → res.company
related='user_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
readonly=True
related='company_id.currency_id'
store=True
args: 'res.currency'
date
Date
default=fields.Date.context_today
readonly=True
required=True
states={'new': [('readonly', False)]}
args: 'Date'
order_line_ids
One2many → lunch.order.line
copy=True
readonly=True
states={'new': [('readonly', False)], False: [('readonly', False)]}
args: 'lunch.order.line', 'order_id', 'Products'
previous_order_ids
Many2many → lunch.order.line
compute='_compute_previous_order_ids'
default=<expr>
args: 'lunch.order.line'
state
Selection
compute='_compute_order_state'
copy=False
index=True
readonly=True
store=True
args: [('new', 'New'), ('confirmed', 'Received'), ('cancelled', 'Cancelled')], 'Status'
total
Float
compute='_compute_total'
store=True
string='Total'
user_id
Many2one → res.users
default=<expr>
readonly=True
states={'new': [('readonly', False)]}
args: 'res.users', 'User'
name_get(self)
cashmove
One2many → lunch.cashmove
category_id
Many2one → lunch.product.category
readonly=True
related='product_id.category_id'
store=True
string='Product Category'
args: 'lunch.product.category'
currency_id
Many2one → res.currency
related='order_id.currency_id'
args: 'res.currency'
date
Date
readonly=True
related='order_id.date'
store=True
string='Date'
name
Char
readonly=True
related='product_id.name'
string='Product Name'
note
Text
order_id
Many2one → lunch.order
ondelete='cascade'
required=True
args: 'lunch.order', 'Order'
price
Float
digits=dp.get_precision('Account')
readonly=True
related='product_id.price'
store=True
product_id
Many2one → lunch.product
required=True
args: 'lunch.product', 'Product'
state
Selection
default='new'
index=True
readonly=True
args: [('new', 'New'), ('confirmed', 'Received'), ('ordered', 'Ordered'), ('cancelled', 'Cancelled')], 'Status'
supplier
Many2one → res.partner
readonly=True
related='product_id.supplier'
store=True
string='Vendor'
args: 'res.partner'
user_id
Many2one → res.users
readonly=True
related='order_id.user_id'
store=True
string='User'
args: 'res.users'
cancel(self)
confirm(self)
order(self)
is_max_budget
Boolean
help='Enable this option to set a maximal budget for your lucky order.'
store=True
args: "I'm not feeling rich"
max_budget
Float
store=True
args: 'Max Budget'
product_id
Many2one → lunch.product
store=True
args: 'lunch.product', 'Product'
supplier_ids
Many2many → res.partner
comodel_name='res.partner'
domain=<expr>
string='Vendor'
random_pick(self)
active
Boolean
default=True
category_id
Many2one → lunch.product.category
required=True
args: 'lunch.product.category', 'Category'
description
Text
name
Char
required=True
args: 'Product'
price
Float
digits=dp.get_precision('Account')
args: 'Price'
supplier
Many2one → res.partner
No public methods.
name
Char
required=True
args: 'Category'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/9.0/lunch |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Human Resources |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Christophe Simonis, David Monjoie, Nicolas Martinelli, Jérome Maes, Richard Mathot, Géry Debongnie, Olivier Colson, Yannick Tivisse, qsm-odoo, Valerie Pirenne |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:48:31 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - web - decimal_precision |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
The base module to manage lunch.
================================
Many companies order sandwiches, pizzas and other, from usual vendors, for their employees to offer them more facilities.
However lunches management within the company requires proper administration especially when the number of employees or vendors is important.
The “Lunch Order” module has been developed to make this management easier but also to offer employees more tools and usability.
In addition to a full meal and vendor management, this module offers the possibility to display warning and provides quick order selection based on employee’s preferences.
If you want to save your employees' time and avoid them to always have coins in their pockets, this module is essential.
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
assets_backend |
lunch assets | ir.ui.view | qweb | Inherits web.assets_backend |
lunch_alert_view_form |
lunch.alert.form | lunch.alert | form | New |
lunch_alert_view_search |
lunch.alert.search | lunch.alert | search | New |
lunch_alert_view_tree |
lunch.alert.tree | lunch.alert | tree | New |
lunch_cashmove_view_form |
lunch.cashmove.form | lunch.cashmove | form | New |
lunch_cashmove_view_search |
lunch.cashmove.search | lunch.cashmove | search | New |
lunch_cashmove_view_search_2 |
lunch.cashmove.search | lunch.cashmove | search | New |
lunch_cashmove_view_tree |
lunch.cashmove.tree | lunch.cashmove | tree | New |
lunch_cashmove_view_tree_2 |
lunch.cashmove.tree | lunch.cashmove | tree | New |
lunch_order_line_view_search |
lunch.order.line.search | lunch.order.line | search | New |
lunch_order_line_view_tree |
lunch.order.line.tree | lunch.order.line | tree | New |
lunch_order_view_form |
lunch.order.form | lunch.order | form | New |
lunch_order_view_search |
lunch.order.search | lunch.order | search | New |
lunch_order_view_tree |
lunch.order.tree | lunch.order | tree | New |
lunch_product_category_view_form |
Product category Form | lunch.product.category | form | New |
lunch_product_view_form |
lunch.product.form | lunch.product | form | New |
lunch_product_view_search |
lunch.product.search | lunch.product | search | New |
lunch_product_view_tree |
lunch.product.tree | lunch.product | tree | New |
report_lunch_order |
report_lunch_order | ir.ui.view | qweb | New |
view_lunch_order_line_lucky |
view.lunch.order.line.lucky | lunch.order.line.lucky | form | New |
alert_type
Selection
default='specific'
index=True
required=True
string='Recurrence'
args: [('specific', 'Specific Day'), ('week', 'Every Week'), ('days', 'Every Day')]
display
Boolean
compute='_compute_display_get'
end_hour
Float
default=23
oldname='active_to'
required=True
args: 'And'
friday
Boolean
message
Text
required=True
args: 'Message'
monday
Boolean
saturday
Boolean
specific_day
Date
default=fields.Date.context_today
args: 'Day'
start_hour
Float
default=7
oldname='active_from'
required=True
args: 'Between'
sunday
Boolean
thursday
Boolean
tuesday
Boolean
wednesday
Boolean
name_get(self)
amount
Float
help='Can be positive (payment) or negative (order or payment if user wants to get his money back)'
required=True
args: 'Amount'
date
Date
default=fields.Date.context_today
required=True
args: 'Date'
description
Text
help='Can be an order or a payment'
args: 'Description'
order_id
Many2one → lunch.order.line
ondelete='cascade'
args: 'lunch.order.line', 'Order'
state
Selection
default='payment'
args: [('order', 'Order'), ('payment', 'Payment')], 'Is an order or a payment'
user_id
Many2one → res.users
default=<expr>
required=True
args: 'res.users', 'User'
name_get(self)
alerts
Text
compute='_compute_alerts_get'
string='Alerts'
balance_visible
Boolean
compute='_compute_cash_move_balance'
multi='cash_move_balance'
cash_move_balance
Monetary
compute='_compute_cash_move_balance'
multi='cash_move_balance'
company_id
Many2one → res.company
related='user_id.company_id'
store=True
args: 'res.company'
currency_id
Many2one → res.currency
readonly=True
related='company_id.currency_id'
store=True
args: 'res.currency'
date
Date
default=fields.Date.context_today
readonly=True
required=True
states={'new': [('readonly', False)]}
args: 'Date'
order_line_ids
One2many → lunch.order.line
copy=True
ondelete='cascade'
readonly=True
states={'new': [('readonly', False)], False: [('readonly', False)]}
args: 'lunch.order.line', 'order_id', 'Products'
previous_order_ids
Many2many → lunch.order.line
compute='_compute_previous_order_ids'
default=<expr>
args: 'lunch.order.line'
state
Selection
compute='_compute_order_state'
copy=False
default='new'
index=True
readonly=True
store=True
args: [('new', 'New'), ('confirmed', 'Received'), ('cancelled', 'Cancelled')], 'Status'
total
Float
compute='_compute_total'
store=True
string='Total'
user_id
Many2one → res.users
default=<expr>
readonly=True
required=True
states={'new': [('readonly', False)]}
args: 'res.users', 'User'
name_get(self)
cashmove
One2many → lunch.cashmove
category_id
Many2one → lunch.product.category
readonly=True
related='product_id.category_id'
store=True
string='Product Category'
args: 'lunch.product.category'
currency_id
Many2one → res.currency
related='order_id.currency_id'
args: 'res.currency'
date
Date
readonly=True
related='order_id.date'
store=True
string='Date'
name
Char
readonly=True
related='product_id.name'
note
Text
order_id
Many2one → lunch.order
ondelete='cascade'
required=True
args: 'lunch.order', 'Order'
price
Float
digits=dp.get_precision('Account')
readonly=True
related='product_id.price'
store=True
product_id
Many2one → lunch.product
required=True
args: 'lunch.product', 'Product'
state
Selection
default='new'
index=True
readonly=True
args: [('new', 'New'), ('confirmed', 'Received'), ('ordered', 'Ordered'), ('cancelled', 'Cancelled')], 'Status'
supplier
Many2one → res.partner
readonly=True
related='product_id.supplier'
store=True
string='Vendor'
args: 'res.partner'
user_id
Many2one → res.users
readonly=True
related='order_id.user_id'
store=True
string='User'
args: 'res.users'
cancel(self)
confirm(self)
order(self)
is_max_budget
Boolean
help='Enable this option to set a maximal budget for your lucky order.'
store=True
args: "I'm not feeling rich"
max_budget
Float
store=True
args: 'Max Budget'
product_id
Many2one → lunch.product
store=True
args: 'lunch.product', 'Product'
supplier_ids
Many2many → res.partner
comodel_name='res.partner'
domain=<expr>
string='Vendor'
random_pick(self)
category_id
Many2one → lunch.product.category
required=True
args: 'lunch.product.category', 'Category'
description
Text
name
Char
required=True
args: 'Product'
price
Float
digits=dp.get_precision('Account')
args: 'Price'
supplier
Many2one → res.partner
No public methods.
name
Char
required=True
args: 'Category'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/8.0/lunch |
| VERSION | |
| VERSION | 0.2 |
| CATEGORY | |
| CATEGORY | Tools |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | OpenERP SA |
| MAINTAINERS | |
| MAINTAINERS | OpenERP SA |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Tejas Tank, Thibault Delavallée, Vo Minh Thu, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Fabien Meghazi, Christophe Simonis, Xavier Morel, Simon Lejeune, Richard Mathot, Géry Debongnie, Aaron Bohy, bth-openerp, Richard Mathot (OpenERP), ged-odoo, openerp-sle, Rakesh Sindhav (OpenERP) |
| WEBSITE | |
| WEBSITE | https://www.odoo.com/page/employees |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:45:40 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base - report - web |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
The base module to manage lunch.
================================
Many companies order sandwiches, pizzas and other, from usual suppliers, for their employees to offer them more facilities.
However lunches management within the company requires proper administration especially when the number of employees or suppliers is important.
The “Lunch Order” module has been developed to make this management easier but also to offer employees more tools and usability.
In addition to a full meal and supplier management, this module offers the possibility to display warning and provides quick order selection based on employee’s preferences.
If you want to save your employees' time and avoid them to always have coins in their pockets, this module is essential.
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
alert_form_view |
alert form | lunch.alert | form | New |
alert_search_view |
Search | lunch.alert | search | New |
alert_tree_view |
alert tree | lunch.alert | tree | New |
assets_backend |
lunch assets | ir.ui.view | qweb | Inherits web.assets_backend |
cancel_order_lines_view |
cancel order lines | lunch.cancel | form | New |
casmove_form_view |
cashmove form | lunch.cashmove | form | New |
casmove_tree |
cashmove tree | lunch.cashmove | tree | New |
casmove_tree_view |
cashmove tree | lunch.cashmove | tree | New |
lunch_order_line_search_view |
Search | lunch.order.line | search | New |
order_order_lines_view |
Order meal | lunch.order.order | form | New |
orders_form_view |
Lunch Order | lunch.order | form | New |
orders_order_lines_tree_view |
Order lines Tree | lunch.order.line | tree | New |
orders_tree_view |
Orders Tree View | lunch.order | tree | New |
product_category_form_view |
Product category Form | lunch.product.category | form | New |
products_form_view |
Products Form | lunch.product | form | New |
products_tree_view |
Products Tree | lunch.product | tree | New |
report_lunchorder |
report_lunchorder | ir.ui.view | qweb | New |
validate_order_lines_view |
validate order lines | lunch.validation | form | New |
view_lunch_cashmove_filter |
lunch cashmove | lunch.cashmove | search | New |
view_lunch_employee_payment_filter |
lunch employee payment | lunch.cashmove | search | New |
view_search_my_order |
lunch orders | lunch.order | search | New |
No new fields.
Public methods (1)cancel(self, cr, uid, ids, context=None)
No new fields.
Public methods (1)order(self, cr, uid, ids, context=None)
No new fields.
Public methods (1)confirm(self, cr, uid, ids, context=None)
No new fields.
Public methods (0)No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/7.0/lunch |
| VERSION | |
| VERSION | 0.2 |
| CATEGORY | |
| CATEGORY | Tools |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | Yes |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | OpenERP SA |
| MAINTAINERS | |
| MAINTAINERS | OpenERP SA |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Jagdish Panchal (Open ERP), Twinkle Christian (OpenERP), Cecile Tonglet, Atul Patel (OpenERP), Randhir Mayatra (OpenERP), Odoo Translation Bot, Turkesh Patel (Open ERP), Numerigraphe - Lionel Sausin, DBR (OpenERP), Antonin Bourguignon, pankita shah (Open ERP), ajay javiya (OpenERP), Martin Trigaux, Ajay Chauhan (OpenERP), Purnendu Singh (OpenERP), Saurang Suthar (OpenERP), Fabien Pinckaers, Antony Lesuisse, Bharat Devnani (OpenERP), Meera Trambadia (OpenERP), Olivier Dony, Twinkle (OpenERP), Divyesh Makwana (Open ERP), Thibault Delavallée, Vo Minh Thu, Hardik, Arnaud Pineux, Amit Patel (OpenERP), Launchpad Translations on behalf of openerp, vta vta@openerp.com, Quentin (OpenERP), Nimesh (Open ERP), Mayur Maheshwari (OpenERP), Jigar Amin - OpenERP, Sanjay Gohel (Open ERP), Christophe Simonis, Xavier Morel, Khushboo Bhatt (Open ERP), Cedric Snauwaert, Jigar Amin, csn-openerp |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:43:11 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
The base module to manage lunch.
================================
Many companies order sandwiches, pizzas and other, from usual suppliers, for their employees to offer them more facilities.
However lunches management within the company requires proper administration especially when the number of employees or suppliers is important.
The “Lunch Order” module has been developed to make this management easier but also to offer employees more tools and usability.
In addition to a full meal and supplier management, this module offers the possibility to display warning and provides quick order selection based on employee’s preferences.
If you want to save your employees' time and avoid them to always have coins in their pockets, this module is essential.
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
alert_form_view |
alert form | lunch.alert | form | New |
alert_search_view |
Search | lunch.alert | search | New |
alert_tree_view |
alert tree | lunch.alert | tree | New |
cancel_order_lines_view |
cancel order lines | lunch.cancel | form | New |
casmove_form_view |
cashmove form | lunch.cashmove | form | New |
casmove_tree |
cashmove tree | lunch.cashmove | tree | New |
casmove_tree_view |
cashmove tree | lunch.cashmove | tree | New |
lunch_order_line_search_view |
Search | lunch.order.line | search | New |
order_order_lines_view |
Order meal | lunch.order.order | form | New |
orders_form_view |
Lunch Order | lunch.order | form | New |
orders_order_lines_tree_view |
Order lines Tree | lunch.order.line | tree | New |
orders_tree_view |
Orders Tree View | lunch.order | tree | New |
product_category_form_view |
Product category Form | lunch.product.category | form | New |
products_form_view |
Products Form | lunch.product | form | New |
products_tree_view |
Products Tree | lunch.product | tree | New |
validate_order_lines_view |
validate order lines | lunch.validation | form | New |
view_lunch_cashmove_filter |
lunch cashmove | lunch.cashmove | search | New |
view_lunch_employee_payment_filter |
lunch employee payment | lunch.cashmove | search | New |
view_search_my_order |
lunch orders | lunch.order | search | New |
No new fields.
Public methods (1)cancel(self, cr, uid, ids, context=None)
No new fields.
Public methods (1)order(self, cr, uid, ids, context=None)
No new fields.
Public methods (1)confirm(self, cr, uid, ids, context=None)
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/6.1/lunch |
| VERSION | |
| VERSION | 0.1 |
| CATEGORY | |
| CATEGORY | Tools |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | OpenERP SA |
| MAINTAINERS | |
| MAINTAINERS | OpenERP SA |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Rucha (Open ERP), Stephane Wirtel, Numerigraphe - Lionel Sausin, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Launchpad Translations on behalf of openerp, Quentin (OpenERP), Mayur Maheshwari (OpenERP), vro, niv-openerp, Christophe Simonis, Xavier Morel, Khushboo Bhatt (Open ERP), Minh Tran, Thibault Francois, Carlos Vásquez, ksa (Open ERP), Israel Fermin Montilla, mayur maheshwari (Open ERP), Hardik Ansodariy (OpenERP), aag (OpenERP) |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-05 23:41:35 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - base_tools - base |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION |
The base module to manage lunch
keep track for the Lunch Order ,Cash Moves ,CashBox ,Product.
Apply Different Category for the product.
|
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
view_lunch_cashbox_clean |
lunch.cashbox.clean.form | lunch.cashbox.clean | form | New |
view_lunch_cashbox_form |
Cashboxes | lunch.cashbox | form | New |
view_lunch_cashbox_tree |
Cashboxes | lunch.cashbox | tree | New |
view_lunch_cashmove_filter |
lunch.cashmove.list.select | lunch.cashmove | search | New |
view_lunch_cashmove_form |
CashMove | lunch.cashmove | form | New |
view_lunch_cashmove_tree |
CashMove | lunch.cashmove | tree | New |
view_lunch_category_form |
Category of product | lunch.category | form | New |
view_lunch_category_tree |
Category | lunch.category | tree | New |
view_lunch_order_cancel |
lunch.order.cancel.form | lunch.order.cancel | form | New |
view_lunch_order_confirm |
lunch.order.confirm.form | lunch.order.confirm | form | New |
view_lunch_order_filter |
lunch.order.list.select | lunch.order | search | New |
view_lunch_order_form |
Order | lunch.order | form | New |
view_lunch_order_tree |
Order | lunch.order | tree | New |
view_lunch_product_form |
Products | lunch.product | form | New |
view_lunch_product_search |
Products | lunch.product | search | New |
view_lunch_product_tree |
Products | lunch.product | tree | New |
view_report_lunch_amount_form |
Lunch amount | report.lunch.amount | form | New |
view_report_lunch_amount_search |
Lunch amount | report.lunch.amount | search | New |
view_report_lunch_amount_tree |
Lunch amount | report.lunch.amount | tree | New |
view_report_lunch_order_search |
report.lunch.order.search | report.lunch.order | search | New |
view_report_lunch_order_tree |
report.lunch.order.tree | report.lunch.order | tree | New |
No models found for this module.