From f727b8f0b57aad49f2ea8c54600ab73bbd02570f Mon Sep 17 00:00:00 2001 From: RomainLibert Date: Thu, 25 Oct 2018 16:43:19 +0200 Subject: [PATCH] [IMP] lunch: automatize lunch orders We would like to automatize lunch as currently all orders are manually ordered and validated, and a cash move has to be manually created each time you want to credit the wallet of some user. In this commit we add a new widget that comes with the kanban view and will allow to take orders in a friendly manner. We also add a lunch.supplier model and an integration with the hr module in order to filter what products you can order depending on your working location, this also allows you to configure an automatic ordering via email. TaskID: 1856876 --- addons/lunch/__init__.py | 3 +- addons/lunch/__manifest__.py | 7 +- addons/lunch/controllers/__init__.py | 1 + addons/lunch/controllers/main.py | 67 ++++ addons/lunch/data/ir_cron_data.xml | 17 + addons/lunch/data/lunch_data.xml | 15 +- addons/lunch/data/lunch_demo.xml | 155 ++++++--- addons/lunch/models/__init__.py | 2 +- addons/lunch/models/lunch_alert.py | 85 ----- addons/lunch/models/lunch_cashmove.py | 7 +- addons/lunch/models/lunch_order.py | 297 +++++------------- addons/lunch/models/lunch_product.py | 87 ++--- addons/lunch/models/lunch_supplier.py | 180 +++++++++++ addons/lunch/security/ir.model.access.csv | 4 +- addons/lunch/static/img/4formaggio.png | Bin 0 -> 8362 bytes addons/lunch/static/img/Coke.png | Bin 0 -> 7469 bytes addons/lunch/static/img/bacon_burger.png | Bin 0 -> 8027 bytes addons/lunch/static/img/brie.png | Bin 0 -> 6794 bytes addons/lunch/static/img/cheeseburger.png | Bin 0 -> 7020 bytes addons/lunch/static/img/chicken_curry.png | Bin 0 -> 7147 bytes addons/lunch/static/img/chirashi.png | Bin 0 -> 7221 bytes addons/lunch/static/img/club.png | Bin 0 -> 7011 bytes addons/lunch/static/img/coke_zero.png | Bin 0 -> 7153 bytes addons/lunch/static/img/fanta.png | Bin 0 -> 5855 bytes addons/lunch/static/img/fuze_black.png | Bin 0 -> 5623 bytes addons/lunch/static/img/fuze_green.png | Bin 0 -> 4724 bytes addons/lunch/static/img/gouda.png | Bin 0 -> 7864 bytes addons/lunch/static/img/italiana.png | Bin 0 -> 11549 bytes addons/lunch/static/img/lipton.png | Bin 0 -> 6784 bytes addons/lunch/static/img/maki.png | Bin 0 -> 8806 bytes addons/lunch/static/img/mozza.png | Bin 0 -> 6191 bytes addons/lunch/static/img/napoli.png | Bin 0 -> 9099 bytes addons/lunch/static/img/pasta_bolognese.png | Bin 0 -> 6727 bytes addons/lunch/static/img/pizza_funghi.png | Bin 0 -> 9213 bytes addons/lunch/static/img/pizza_margherita.png | Bin 0 -> 8597 bytes addons/lunch/static/img/pizza_veggie.png | Bin 0 -> 7354 bytes addons/lunch/static/img/salmon_sushi.png | Bin 0 -> 6885 bytes addons/lunch/static/img/temaki.png | Bin 0 -> 9244 bytes addons/lunch/static/img/tuna_sandwich.png | Bin 0 -> 6425 bytes addons/lunch/static/src/js/lunch.js | 94 ------ .../static/src/js/lunch_kanban_controller.js | 190 +++++++++++ .../lunch/static/src/js/lunch_kanban_model.js | 19 ++ .../static/src/js/lunch_kanban_record.js | 22 ++ .../static/src/js/lunch_kanban_renderer.js | 29 ++ .../lunch/static/src/js/lunch_kanban_view.js | 42 +++ .../static/src/js/lunch_kanban_widget.js | 87 +++++ .../static/src/js/lunch_payment_dialog.js | 24 ++ addons/lunch/static/src/scss/lunch.scss | 14 - .../lunch/static/src/scss/lunch_kanban.scss | 48 +++ addons/lunch/static/src/xml/lunch_kanban.xml | 118 +++++++ addons/lunch/static/tests/lunch_tests.js | 145 --------- .../lunch/static/tests/test_lunch_kanban.js | 207 ++++++++++++ addons/lunch/tests/__init__.py | 3 +- addons/lunch/tests/common.py | 75 +++++ addons/lunch/tests/test_lunch.py | 143 --------- addons/lunch/tests/test_supplier.py | 158 ++++++++++ addons/lunch/views/lunch_alert_views.xml | 134 -------- addons/lunch/views/lunch_orders_views.xml | 31 +- addons/lunch/views/lunch_product_views.xml | 92 ++++-- addons/lunch/views/lunch_supplier_views.xml | 113 +++++++ addons/lunch/views/lunch_templates.xml | 17 +- addons/lunch/views/lunch_views.xml | 8 +- addons/lunch/wizard/__init__.py | 2 +- addons/lunch/wizard/lucky_order.py | 44 --- addons/lunch/wizard/lucky_order_view.xml | 35 --- addons/lunch/wizard/lunch_line_wizard.py | 77 +++++ .../lunch/wizard/lunch_line_wizard_views.xml | 35 +++ addons/lunch_hr/__init__.py | 4 + addons/lunch_hr/__manifest__.py | 19 ++ addons/lunch_hr/data/lunch_hr_demo.xml | 28 ++ addons/lunch_hr/models/__init__.py | 5 + addons/lunch_hr/models/lunch_product.py | 33 ++ addons/lunch_hr/models/lunch_supplier.py | 10 + addons/lunch_hr/views/lunch_product_views.xml | 13 + .../lunch_hr/views/lunch_supplier_views.xml | 13 + 75 files changed, 1975 insertions(+), 1083 deletions(-) create mode 100644 addons/lunch/controllers/__init__.py create mode 100644 addons/lunch/controllers/main.py create mode 100644 addons/lunch/data/ir_cron_data.xml delete mode 100644 addons/lunch/models/lunch_alert.py create mode 100644 addons/lunch/models/lunch_supplier.py create mode 100644 addons/lunch/static/img/4formaggio.png create mode 100644 addons/lunch/static/img/Coke.png create mode 100644 addons/lunch/static/img/bacon_burger.png create mode 100644 addons/lunch/static/img/brie.png create mode 100644 addons/lunch/static/img/cheeseburger.png create mode 100644 addons/lunch/static/img/chicken_curry.png create mode 100644 addons/lunch/static/img/chirashi.png create mode 100644 addons/lunch/static/img/club.png create mode 100644 addons/lunch/static/img/coke_zero.png create mode 100644 addons/lunch/static/img/fanta.png create mode 100644 addons/lunch/static/img/fuze_black.png create mode 100644 addons/lunch/static/img/fuze_green.png create mode 100644 addons/lunch/static/img/gouda.png create mode 100644 addons/lunch/static/img/italiana.png create mode 100644 addons/lunch/static/img/lipton.png create mode 100644 addons/lunch/static/img/maki.png create mode 100644 addons/lunch/static/img/mozza.png create mode 100644 addons/lunch/static/img/napoli.png create mode 100644 addons/lunch/static/img/pasta_bolognese.png create mode 100644 addons/lunch/static/img/pizza_funghi.png create mode 100644 addons/lunch/static/img/pizza_margherita.png create mode 100644 addons/lunch/static/img/pizza_veggie.png create mode 100644 addons/lunch/static/img/salmon_sushi.png create mode 100644 addons/lunch/static/img/temaki.png create mode 100644 addons/lunch/static/img/tuna_sandwich.png delete mode 100644 addons/lunch/static/src/js/lunch.js create mode 100644 addons/lunch/static/src/js/lunch_kanban_controller.js create mode 100644 addons/lunch/static/src/js/lunch_kanban_model.js create mode 100644 addons/lunch/static/src/js/lunch_kanban_record.js create mode 100644 addons/lunch/static/src/js/lunch_kanban_renderer.js create mode 100644 addons/lunch/static/src/js/lunch_kanban_view.js create mode 100644 addons/lunch/static/src/js/lunch_kanban_widget.js create mode 100644 addons/lunch/static/src/js/lunch_payment_dialog.js delete mode 100644 addons/lunch/static/src/scss/lunch.scss create mode 100644 addons/lunch/static/src/scss/lunch_kanban.scss create mode 100644 addons/lunch/static/src/xml/lunch_kanban.xml delete mode 100644 addons/lunch/static/tests/lunch_tests.js create mode 100644 addons/lunch/static/tests/test_lunch_kanban.js create mode 100644 addons/lunch/tests/common.py delete mode 100644 addons/lunch/tests/test_lunch.py create mode 100644 addons/lunch/tests/test_supplier.py delete mode 100644 addons/lunch/views/lunch_alert_views.xml create mode 100644 addons/lunch/views/lunch_supplier_views.xml delete mode 100644 addons/lunch/wizard/lucky_order.py delete mode 100644 addons/lunch/wizard/lucky_order_view.xml create mode 100644 addons/lunch/wizard/lunch_line_wizard.py create mode 100644 addons/lunch/wizard/lunch_line_wizard_views.xml create mode 100644 addons/lunch_hr/__init__.py create mode 100644 addons/lunch_hr/__manifest__.py create mode 100644 addons/lunch_hr/data/lunch_hr_demo.xml create mode 100644 addons/lunch_hr/models/__init__.py create mode 100644 addons/lunch_hr/models/lunch_product.py create mode 100644 addons/lunch_hr/models/lunch_supplier.py create mode 100644 addons/lunch_hr/views/lunch_product_views.xml create mode 100644 addons/lunch_hr/views/lunch_supplier_views.xml diff --git a/addons/lunch/__init__.py b/addons/lunch/__init__.py index b6f07433380..88710707227 100644 --- a/addons/lunch/__init__.py +++ b/addons/lunch/__init__.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from . import wizard +from . import controllers from . import models +from . import wizard diff --git a/addons/lunch/__manifest__.py b/addons/lunch/__manifest__.py index e28b88a82f2..5268ecca6a7 100644 --- a/addons/lunch/__manifest__.py +++ b/addons/lunch/__manifest__.py @@ -27,16 +27,17 @@ If you want to save your employees' time and avoid them to always have coins in 'report/lunch_order_views.xml', 'report/lunch_order_templates.xml', 'views/lunch_templates.xml', - 'wizard/lucky_order_view.xml', - 'views/lunch_alert_views.xml', + 'wizard/lunch_line_wizard_views.xml', 'views/lunch_cashmove_views.xml', 'views/lunch_orders_views.xml', 'views/lunch_product_views.xml', + 'views/lunch_supplier_views.xml', 'views/lunch_views.xml', 'data/lunch_data.xml', + 'data/ir_cron_data.xml' ], 'demo': ['data/lunch_demo.xml'], - 'qweb': ['static/src/xml/lunch.xml', ], + 'qweb': ['static/src/xml/lunch_kanban.xml', ], 'installable': True, 'application': True, 'certificate': '001292377792581874189', diff --git a/addons/lunch/controllers/__init__.py b/addons/lunch/controllers/__init__.py new file mode 100644 index 00000000000..12a7e529b67 --- /dev/null +++ b/addons/lunch/controllers/__init__.py @@ -0,0 +1 @@ +from . import main diff --git a/addons/lunch/controllers/main.py b/addons/lunch/controllers/main.py new file mode 100644 index 00000000000..314cf5ad292 --- /dev/null +++ b/addons/lunch/controllers/main.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import http, fields +from odoo.http import request + + +class LunchController(http.Controller): + @http.route('/lunch/infos', type='json', auth='user') + def infos(self, user_id=None): + user = request.env['res.users'].browse(user_id) if user_id else request.env.user + + infos = { + 'order': False, + 'wallet': request.env['lunch.cashmove'].get_wallet_balance(user), + 'username': user.sudo().name, + 'userimage': '/web/image?model=res.users&id=%s&field=image_small' % user.id, + 'is_manager': request.env.user.has_group('lunch.group_lunch_manager'), + 'users': request.env['res.users'].search_read([('groups_id', 'not in', [request.env.ref('base.group_portal').id])], ['name']), + } + + order = self._get_current_order(user.id) + if order: + lines = [{'id': line.id, + 'product': (line.product_id.name, line.product_id.price), + 'toppings': [(topping.name, topping.price) for topping in line.topping_ids], + 'quantity': line.quantity, + 'price': line.price} for line in order.order_line_ids] + infos.update({ + 'order': order.id, + 'total': order.total, + 'state': order.state, + 'lines': lines, + }) + return infos + + @http.route('/lunch/trash', type='json', auth='user') + def trash(self, user_id=None): + user = request.env['res.users'].browse(user_id) if user_id else request.env.user + + order = self._get_current_order(user.id) + order.unlink() + + @http.route('/lunch/pay', type='json', auth='user') + def pay(self, user_id=None): + user = request.env['res.users'].browse(user_id) if user_id else request.env.user + + order = self._get_current_order(user.id) + if order: + wallet_balance = request.env['lunch.cashmove'].get_wallet_balance(user) + + if order.state == 'new' and order.total <= wallet_balance: + return self._make_payment(order) + + return False + + @http.route('/lunch/payment_message', type='json', auth='user') + def payment_message(self): + return {'message': request.env['ir.qweb'].render('lunch.lunch_payment_dialog', {})} + + def _get_current_order(self, user_id): + order = request.env['lunch.order'].search([('user_id', '=', user_id), ('date', '=', fields.Date.today())], limit=1) + return order + + def _make_payment(self, order): + order.action_order() + return True diff --git a/addons/lunch/data/ir_cron_data.xml b/addons/lunch/data/ir_cron_data.xml new file mode 100644 index 00000000000..19275e67f21 --- /dev/null +++ b/addons/lunch/data/ir_cron_data.xml @@ -0,0 +1,17 @@ + + + + + Lunch: automatic email send + + code + model._auto_email_send() + + + 10 + minutes + -1 + + + + diff --git a/addons/lunch/data/lunch_data.xml b/addons/lunch/data/lunch_data.xml index 2332d2e5272..0f269f42d0c 100644 --- a/addons/lunch/data/lunch_data.xml +++ b/addons/lunch/data/lunch_data.xml @@ -1,23 +1,12 @@ - - Lunch: Order meals - - - code - -if records: - action = records.order() - - - Lunch: Receive meals code - records.confirm() + records.action_confirm() @@ -25,7 +14,7 @@ if records: code - records.cancel() + records.action_cancel() diff --git a/addons/lunch/data/lunch_demo.xml b/addons/lunch/data/lunch_demo.xml index bd36db1f0af..f91a57a183d 100644 --- a/addons/lunch/data/lunch_demo.xml +++ b/addons/lunch/data/lunch_demo.xml @@ -28,7 +28,7 @@ Chirashi - + Coin gourmand Tirana @@ -37,7 +37,13 @@ coin.gourmand@yourcompany.example.com - + + + 8 + 23 + + + Pizza Inn New Delhi TN @@ -56,6 +62,12 @@ info@corner.com + + + 8 + 23 + + Sushi Shop Paris @@ -65,178 +77,228 @@ order@sushi.com + + + 8 + 23 + + Bacon 7.5 - + Beef, Bacon, Salad, Cheddar, Fried Onion, BBQ Sauce + Cheese Burger 7.0 - + Beef, Cheddar, Salad, Fried Onions, BBQ Sauce + Chicken Curry 3.0 - + + Spicy Tuna 3.0 - + + Mozzarella 3.9 - + Mozzarella, Pesto, Tomatoes + Club 3.4 - + Ham, Cheese, Vegetables + Lunch Maki 18pc 12.0 - + 6 Maki Salmon - 6 Maki Tuna - 6 Maki Shrimp/Avocado + Lunch Salmon 20pc 13.80 - + 4 Sushi Salmon - 6 Maki Salmon - 4 Sashimi Salmon + Lunch Temaki mix 3pc 14.0 - - 1 Avocado/Cooked Tuna - 1 Salmon/Eggs - 1 Salmon/Avocado - 1 Tuna/Mango + + 1 Avocado - 1 Salmon - 1 Eggs - 1 Tuna + Salmon and Avocado 9.25 - - Shrimp Tempura, Yam Tempura, Chinese Cabbage, Pickled Onions, Sesame Sauce + + 2 Tempuras, Cabbages, Onions, Sesame Sauce + + + + + + mail + + 11 + 8 + 23 + reccurent + + + + + Cheese And Ham 3.30 - + Cheese, Ham, Salad, Tomatoes, cucumbers, eggs + The Country 3.30 - + Brie, Honey, Walnut Kernels + Tuna 2.50 - + Tuna, Mayonnaise + Gouda Cheese 2.50 - + + Chicken Curry 2.60 - + + Pizza Margherita 6.90 - + Tomatoes, Mozzarella + Pizza Funghi 7.00 - + Tomatoes, Mushrooms, Mozzarella + Pizza Vegetarian 7.00 - + Tomatoes, Mozzarella, Mushrooms, Peppers, Olives + Pizza Italiana 7.40 - + Fresh Tomatoes, Basil, Mozzarella + Bolognese Pasta 7.70 - + + Napoli Pasta 7.70 - + Tomatoes, Basil + + + + + Olives + 0.30 + + 4 Formaggi 5.50 - + Tomato sauce, Olive oil, Fresh Tomatoes, Onions, Vegetables, Parmesan + @@ -244,6 +306,7 @@ new + @@ -251,6 +314,7 @@ confirmed + @@ -258,6 +322,7 @@ confirmed + @@ -273,9 +338,9 @@ 7.70 new - - +Emmental + + 1 @@ -284,9 +349,9 @@ 7.40 confirmed - - +Mushrooms + + 1 @@ -295,9 +360,9 @@ 2.50 cancelled - - +Salad +Tomatoes +Cucumbers + + 1 @@ -306,9 +371,9 @@ 2.60 confirmed - - +Salad +Tomatoes +Eggs + + 1 @@ -317,7 +382,7 @@ 5.50 confirmed - + @@ -326,7 +391,7 @@ Pizza Italiana -7.40 - + order @@ -335,7 +400,7 @@ Chicken curry -2.60 - + order @@ -360,22 +425,8 @@ Pasta 4 Formaggi -5.50 - + order - - - week - - - - - - - - 7 - 23 - Lunch must be ordered before 10:30 AM - diff --git a/addons/lunch/models/__init__.py b/addons/lunch/models/__init__.py index f99750c87d0..58a34e7891b 100644 --- a/addons/lunch/models/__init__.py +++ b/addons/lunch/models/__init__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -from . import lunch_alert from . import lunch_cashmove from . import lunch_order from . import lunch_product +from . import lunch_supplier diff --git a/addons/lunch/models/lunch_alert.py b/addons/lunch/models/lunch_alert.py deleted file mode 100644 index 325a64f4385..00000000000 --- a/addons/lunch/models/lunch_alert.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -import datetime - -from odoo import api, fields, models, _ - - -class LunchAlert(models.Model): - """ Alerts to display during a lunch order. An alert can be specific to a - given day, weekly or daily. The alert is displayed from start to end hour. """ - _name = 'lunch.alert' - _description = 'Lunch Alert' - _rec_name = 'message' - - display = fields.Boolean(compute='_compute_display_get') - message = fields.Text('Message', required=True) - alert_type = fields.Selection([('specific', 'Specific Day'), - ('week', 'Every Week'), - ('days', 'Every Day')], - string='Recurrence', required=True, index=True, default='specific') - partner_id = fields.Many2one('res.partner', string="Vendor", - help="If specified, the selected vendor can be ordered only on selected days") - specific_day = fields.Date('Day', default=fields.Date.context_today) - monday = fields.Boolean('Monday') - tuesday = fields.Boolean('Tuesday') - wednesday = fields.Boolean('Wednesday') - thursday = fields.Boolean('Thursday') - friday = fields.Boolean('Friday') - saturday = fields.Boolean('Saturday') - sunday = fields.Boolean('Sunday') - start_hour = fields.Float('Between', oldname='active_from', required=True, default=7) - end_hour = fields.Float('And', oldname='active_to', required=True, default=23) - active = fields.Boolean(default=True) - - @api.multi - def name_get(self): - return [(alert.id, '%s %s' % (_('Alert'), '#%d' % alert.id)) for alert in self] - - @api.depends('alert_type', 'specific_day', 'monday', 'tuesday', 'thursday', - 'friday', 'saturday', 'sunday', 'start_hour', 'end_hour') - def _compute_display_get(self): - """ - This method check if the alert can be displayed today - if alert type is specific : compare specific_day(date) with today's date - if alert type is week : check today is set as alert (checkbox true) eg. self['monday'] - if alert type is day : True - return : Message if can_display_alert is True else False - """ - days_codes = {'0': 'sunday', - '1': 'monday', - '2': 'tuesday', - '3': 'wednesday', - '4': 'thursday', - '5': 'friday', - '6': 'saturday'} - fullday = False - now = datetime.datetime.now() - if self.env.context.get('lunch_date'): - # lunch_date is a fields.Date -> 00:00:00 - lunch_date = fields.Datetime.from_string(self.env.context['lunch_date']) - # if lunch_date is in the future, planned lunch, ignore hours - fullday = lunch_date > now - now = max(lunch_date, now) - mynow = fields.Datetime.context_timestamp(self, now) - - for alert in self: - can_display_alert = { - 'specific': (str(alert.specific_day) == fields.Date.to_string(mynow)), - 'week': alert[days_codes[mynow.strftime('%w')]], - 'days': True - } - - if can_display_alert[alert.alert_type]: - hour_to = int(alert.end_hour) - min_to = int((alert.end_hour - hour_to) * 60) - to_alert = datetime.time(hour_to, min_to) - hour_from = int(alert.start_hour) - min_from = int((alert.start_hour - hour_from) * 60) - from_alert = datetime.time(hour_from, min_from) - - if fullday or (from_alert <= mynow.time() <= to_alert): - alert.display = True - else: - alert.display = False diff --git a/addons/lunch/models/lunch_cashmove.py b/addons/lunch/models/lunch_cashmove.py index 7d4a6b56ae4..2cb71a77c69 100644 --- a/addons/lunch/models/lunch_cashmove.py +++ b/addons/lunch/models/lunch_cashmove.py @@ -2,6 +2,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from odoo import api, fields, models, _ +from odoo.tools import float_round class LunchCashMove(models.Model): @@ -14,10 +15,14 @@ class LunchCashMove(models.Model): date = fields.Date('Date', required=True, default=fields.Date.context_today) amount = fields.Float('Amount', required=True, help='Can be positive (payment) or negative (order or payment if user wants to get his money back)') description = fields.Text('Description', help='Can be an order or a payment') - order_id = fields.Many2one('lunch.order.line', 'Order', ondelete='cascade') + order_line_id = fields.Many2one('lunch.order.line', 'Order', ondelete='cascade') state = fields.Selection([('order', 'Order'), ('payment', 'Payment')], 'Is an order or a payment', default='payment') @api.multi def name_get(self): return [(cashmove.id, '%s %s' % (_('Lunch Cashmove'), '#%d' % cashmove.id)) for cashmove in self] + + @api.model + def get_wallet_balance(self, user): + return float_round(sum(move['amount'] for move in self.search_read([('user_id', '=', user.id)], ['amount'])), precision_digits=2) diff --git a/addons/lunch/models/lunch_order.py b/addons/lunch/models/lunch_order.py index f4354913db8..623a9cada50 100644 --- a/addons/lunch/models/lunch_order.py +++ b/addons/lunch/models/lunch_order.py @@ -1,19 +1,15 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from collections import OrderedDict - -import json - from odoo import api, fields, models, _ -from odoo.exceptions import AccessError, ValidationError +from odoo.exceptions import UserError, ValidationError from odoo.addons import decimal_precision as dp class LunchOrder(models.Model): """ A lunch order contains one or more lunch order line(s). It is associated to a user for a given - date. When creating a lunch order, applicable lunch alerts are displayed. + date. """ _name = 'lunch.order' _description = 'Lunch Order' @@ -39,24 +35,29 @@ class LunchOrder(models.Model): states={'new': [('readonly', False)], False: [('readonly', False)]}) total = fields.Float(compute='_compute_total', string="Total", store=True) state = fields.Selection([('new', 'New'), + ('ordered', 'Ordered'), ('confirmed', 'Received'), ('cancelled', 'Cancelled')], - 'Status', readonly=True, index=True, copy=False, - compute='_compute_order_state', store=True) - alerts = fields.Text(compute='_compute_alerts_get', string="Alerts") + 'Status', readonly=True, index=True, copy=False, default='new') company_id = fields.Many2one('res.company', related='user_id.company_id', store=True, readonly=False) currency_id = fields.Many2one('res.currency', related='company_id.currency_id', readonly=True, store=True) cash_move_balance = fields.Monetary(compute='_compute_cash_move_balance', multi='cash_move_balance') balance_visible = fields.Boolean(compute='_compute_cash_move_balance', multi='cash_move_balance') - previous_order_ids = fields.Many2many('lunch.order.line', compute='_compute_previous_order') - previous_order_widget = fields.Text(compute='_compute_previous_order') - @api.one - @api.depends('order_line_ids') + mail_sent = fields.Boolean('Mail Sent', readonly=True) + supplier_ids = fields.Many2many('lunch.supplier', compute='_compute_supplier_ids', store=True) + + @api.depends('order_line_ids', 'order_line_ids.supplier_id', 'order_line_ids.product_id') + def _compute_supplier_ids(self): + for order in self: + order.supplier_ids = order.mapped('order_line_ids.supplier_id') + + @api.depends('order_line_ids', 'order_line_ids.quantity', 'order_line_ids.price') def _compute_total(self): """ get and sum the order lines' price """ + self.ensure_one() self.total = sum( orderline.price for orderline in self.order_line_ids) @@ -64,96 +65,55 @@ class LunchOrder(models.Model): def name_get(self): return [(order.id, '%s %s' % (_('Lunch Order'), '#%d' % order.id)) for order in self] - @api.depends('state') - def _compute_alerts_get(self): - """ - get the alerts to display on the order form - """ - alert_msg = [alert.message - for alert in self.env['lunch.alert'].search([]) - if alert.display] - - if self.state == 'new': - self.alerts = alert_msg and '\n'.join(alert_msg) or False - - @api.multi - @api.depends('user_id', 'state') - def _compute_previous_order(self): - self.ensure_one() - self.previous_order_widget = json.dumps(False) - - prev_order = self.env['lunch.order.line'].search([('user_id', '=', self.env.uid), ('product_id.active', '!=', False)], limit=20, order='date desc, id desc') - # If we use prev_order.ids, we will have duplicates (identical orders). - # Therefore, this following part removes duplicates based on product_id and note. - self.previous_order_ids = list({ - (order.product_id, order.note): order.id - for order in prev_order - }.values()) - - if self.previous_order_ids: - lunch_data = {} - for line in self.previous_order_ids: - lunch_data[line.id] = { - 'line_id': line.id, - 'product_id': line.product_id.id, - 'product_name': line.product_id.name, - 'supplier': line.supplier.name, - 'note': line.note, - 'price': line.price, - 'date': fields.Date.to_string(line.date), - 'currency_id': line.currency_id.id, - } - # sort the old lunch orders by (date, id) - lunch_data = OrderedDict(sorted(lunch_data.items(), key=lambda t: (t[1]['date'], t[0]), reverse=True)) - self.previous_order_widget = json.dumps(lunch_data) - - @api.one @api.depends('user_id') def _compute_cash_move_balance(self): + self.ensure_one() domain = [('user_id', '=', self.user_id.id)] lunch_cash = self.env['lunch.cashmove'].read_group(domain, ['amount', 'user_id'], ['user_id']) - if len(lunch_cash): + if lunch_cash: self.cash_move_balance = lunch_cash[0]['amount'] self.balance_visible = (self.user_id == self.env.user) or self.user_has_groups('lunch.group_lunch_manager') - @api.one @api.constrains('date') def _check_date(self): """ Prevents the user to create an order in the past """ + self.ensure_one() date_order = self.date date_today = fields.Date.context_today(self) if date_order < date_today: raise ValidationError(_('The date of your order is in the past.')) - @api.one - @api.depends('order_line_ids.state') - def _compute_order_state(self): - """ - Update the state of lunch.order based on its orderlines. Here is the logic: - - if at least one order line is cancelled, the order is set as cancelled - - if no line is cancelled but at least one line is not confirmed, the order is set as new - - if all lines are confirmed, the order is set as confirmed - """ - if not self.order_line_ids: - self.state = 'new' - else: - isConfirmed = True - for orderline in self.order_line_ids: - if orderline.state == 'cancelled': - self.state = 'cancelled' - return - elif orderline.state == 'confirmed': - continue - else: - isConfirmed = False + def action_order(self): + for order in self: + for line in order.order_line_ids: + self.env['lunch.cashmove'].sudo().create({ + 'user_id': line.user_id.id, + 'amount': -line.price, + 'description': line.product_id.name, + 'order_line_id': line.id, + 'state': 'order', + 'date': line.date, + }) - if isConfirmed: - self.state = 'confirmed' + self.mapped('order_line_ids').write({'state': 'ordered'}) + self.write({'state': 'ordered'}) + + def action_confirm(self, supplier=None): + for order in self: + if supplier: + order.order_line_ids.filtered(lambda line: line.state == 'ordered' and line.supplier_id == supplier).write({'state': 'confirmed'}) else: - self.state = 'new' - return + order.order_line_ids.filtered(lambda line: line.state == 'ordered').write({'state': 'confirmed'}) + order.write({'state': 'confirmed', + 'mail_sent': True}) + + def action_cancel(self): + for order in self: + # RLI FIXME maybe we don't need to filter + order.order_line_ids.filtered(lambda line: line.state != 'confirmed').action_cancel() + order.write({'state': 'cancelled'}) class LunchOrderLine(models.Model): @@ -163,153 +123,58 @@ class LunchOrderLine(models.Model): name = fields.Char(related='product_id.name', string="Product Name", readonly=True) order_id = fields.Many2one('lunch.order', 'Order', ondelete='cascade', required=True) - product_id = fields.Many2one('lunch.product', 'Product', required=True, - domain=[('available', '=', True)]) + topping_ids = fields.Many2many('lunch.product', string='Toppings') + product_id = fields.Many2one('lunch.product', string="Product", domain=[('is_topping', '=', False)], required=True) category_id = fields.Many2one('lunch.product.category', string='Product Category', related='product_id.category_id', readonly=True, store=True) date = fields.Date(string='Date', related='order_id.date', readonly=True, store=True) - supplier = fields.Many2one('res.partner', string='Vendor', related='product_id.supplier', - readonly=True, store=True) + supplier_id = fields.Many2one('lunch.supplier', string='Vendor', related='product_id.supplier_id', + readonly=True, store=True, index=True) user_id = fields.Many2one('res.users', string='User', related='order_id.user_id', readonly=True, store=True) note = fields.Text('Note') - price = fields.Float(related='product_id.price', readonly=True, store=True, + price = fields.Float('Total Price', compute='_compute_total_price', readonly=True, store=True, digits=dp.get_precision('Account')) state = fields.Selection([('new', 'New'), - ('confirmed', 'Received'), ('ordered', 'Ordered'), + ('confirmed', 'Received'), ('cancelled', 'Cancelled')], 'Status', readonly=True, index=True, default='new') - cashmove = fields.One2many('lunch.cashmove', 'order_id', 'Cash Move') + cashmove = fields.One2many('lunch.cashmove', 'order_line_id', 'Cash Move') currency_id = fields.Many2one('res.currency', related='order_id.currency_id', readonly=False) + quantity = fields.Float('Quantity', required=True, default=1) - def _check_supplier_availibility(self): - products = self.mapped('product_id') - if not all(product.available for product in products): - supplier_name = ", ".join(product.supplier.display_name for product in products if not product.available) - raise ValidationError(_("Vendor(s) '%s' is not available today") % supplier_name) + @api.depends('topping_ids', 'product_id', 'quantity') + def _compute_total_price(self): + for line in self: + line.price = line.quantity * sum(product.price for product in line.product_id | line.topping_ids) - @api.model - def create(self, vals): - """ Override as an onchange would not apply if using the history buttons """ - res = super(LunchOrderLine, self).create(vals) - res.with_context(lunch_date=res.order_id.date)._check_supplier_availibility() - return res + def update_quantity(self, increment): + for line in self: + old_cost = line.price + line.quantity += increment + new_cost = line.price + if new_cost - old_cost > self.env['lunch.cashmove'].get_wallet_balance(line.user_id): + raise UserError(_('Your wallet does not contain enough money to order that.' + 'To add some money to your wallet, please contact your lunch manager.')) + cashmove = self.env['lunch.cashmove'].search([('order_line_id', '=', line.id)], limit=1) + if cashmove: + cashmove.amount = -new_cost + if line.quantity <= 0: + order_id = line.order_id + line.sudo().unlink() + if not order_id.order_line_ids: + order_id.sudo().unlink() - @api.model - def write(self, vals): - """ Override as an onchange would not apply if using the history buttons """ - res = super(LunchOrderLine, self).write(vals) - if vals.get('product_id'): - for line in self: - line.with_context(lunch_date=line.order_id.date)._check_supplier_availibility() - return res + def action_confirm(self): + self.write({'state': 'confirmed'}) - def order(self): - """ - The order_line is ordered to the vendor but isn't received yet - """ - if self.user_has_groups("lunch.group_lunch_manager"): - self.write({'state': 'ordered'}) + for order in self.mapped('order_id'): + if all(line.state == 'confirmed' for line in order.order_line_ids): + order.write({'state': 'confirmed', 'mail_sent': True}) - order = { - 'supplier': False, - 'company': False, - 'currency': False, - } - group_lines = {} - for line in self: - if not line.supplier: - # do not send emails for products with no suppliers - continue + def action_cancel(self): + for line in self: + line.cashmove.sudo().unlink() - if order['supplier'] and line.supplier != order['supplier']: - raise ValidationError(_("Validate order for one supplier at a time to send emails (mixed orders from %s and %s)") % ( - order['supplier'].display_name, line.supplier.display_name)) - order['supplier'] = line.supplier - - if order['company'] and line.order_id.company_id != order['company']: - raise ValidationError(_("Validate order for one company at a time to send emails (mixed orders from %s and %s)") % ( - order['company'].name, line.order_id.company_id.name)) - order['company'] = line.order_id.company_id - - if order['currency'] and line.currency_id != order['currency']: - raise ValidationError(_("Validate order for one currency at a time to send emails (mixed orders from %s and %s)") % ( - order['currency'].name, line.currency_id.name)) - order['currency'] = line.currency_id - - # group the order by products and note - key = (line.product_id, line.note) - group_lines.setdefault(key, 0) - group_lines[key] += 1 - - order['company_name'] = order['company'].name - order['currency_id'] = order['currency'].id - order['supplier_id'] = order['supplier'].id - order['supplier_name'] = order['supplier'].name - order['supplier_email'] = order['supplier'].email_formatted - - lines = [] - # sort by product name, note - for product, note in sorted(group_lines, key=lambda k: (k[0].name, bool(k[1]))): - quantity = group_lines[(product, note)] - lines.append({ - 'product': product.name, - 'note': note or '', - 'quantity': quantity, - 'price': product.price * quantity, - }) - - order['amount_total'] = sum(l['price'] for l in lines) - - template = self.env.ref('lunch.lunch_order_mail_supplier', raise_if_not_found=False) - ctx = dict( - default_composition_mode='mass_mail', - default_use_template=bool(template), - default_template_id=template.id, - default_lang=order['supplier'].lang or self.env.user.lang, - order=order, - lines=lines, - ) - return { - 'type': 'ir.actions.act_window', - 'view_type': 'form', - 'view_mode': 'form', - 'res_model': 'mail.compose.message', - 'target': 'new', - 'context': ctx, - } - - else: - raise AccessError(_("Only your lunch manager processes the orders.")) - - @api.one - def confirm(self): - """ - confirm one or more order line, update order status and create new cashmove - """ - if self.user_has_groups("lunch.group_lunch_manager"): - if self.state != 'confirmed': - values = { - 'user_id': self.user_id.id, - 'amount': -self.price, - 'description': self.product_id.name, - 'order_id': self.id, - 'state': 'order', - 'date': self.date, - } - self.env['lunch.cashmove'].create(values) - self.state = 'confirmed' - else: - raise AccessError(_("Only your lunch manager sets the orders as received.")) - - @api.one - def cancel(self): - """ - cancel one or more order.line, update order status and unlink existing cashmoves - """ - if self.user_has_groups("lunch.group_lunch_manager"): - self.state = 'cancelled' - self.cashmove.unlink() - else: - raise AccessError(_("Only your lunch manager cancels the orders.")) + self.write({'state': 'cancelled'}) diff --git a/addons/lunch/models/lunch_product.py b/addons/lunch/models/lunch_product.py index 8ded108fc81..1751ea7a6e1 100644 --- a/addons/lunch/models/lunch_product.py +++ b/addons/lunch/models/lunch_product.py @@ -1,10 +1,11 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import api, fields, models, _ +from dateutil.relativedelta import relativedelta + +from odoo import api, fields, models, tools, _ from odoo.addons import decimal_precision as dp -from odoo.osv import expression class LunchProductCategory(models.Model): @@ -20,44 +21,52 @@ class LunchProduct(models.Model): _name = 'lunch.product' _description = 'Lunch Product' - name = fields.Char('Product', required=True) - category_id = fields.Many2one('lunch.product.category', 'Product Category', required=True) + name = fields.Char('Name', required=True) + category_id = fields.Many2one('lunch.product.category', 'Product Category') description = fields.Text('Description') - price = fields.Float('Price', digits=dp.get_precision('Account')) - supplier = fields.Many2one('res.partner', 'Vendor') + price = fields.Float('Price', digits=dp.get_precision('Account'), required=True) + supplier_id = fields.Many2one('lunch.supplier', 'Vendor', required=True) active = fields.Boolean(default=True) - available = fields.Boolean(compute='_get_available_product', search='_search_available_products') + is_topping = fields.Boolean("This product is an extra garniture") - @api.depends('supplier') - def _get_available_product(self): + # image: all image fields are base64 encoded and PIL-supported + image = fields.Binary( + "Image", attachment=True, + help="This field holds the image used as image for the product, limited to 1024x1024px.") + image_medium = fields.Binary( + "Medium-sized image", attachment=True, + help="Medium-sized image of the product. It is automatically " + "resized as a 128x128px image, with aspect ratio preserved, " + "only when the image exceeds one of those sizes. Use this field in form views or some kanban views.") + image_small = fields.Binary( + "Small-sized image", attachment=True, + help="Small-sized image of the product. It is automatically " + "resized as a 64x64px image, with aspect ratio preserved. " + "Use this field anywhere a small image is required.") + + already_ordered = fields.Boolean('Has Already Been Ordered', compute='_compute_already_ordered') + + @api.model + def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None): + res = super(LunchProduct, self).search_read(domain, fields, offset, limit, order) + + if not order and 'already_ordered' in fields: + res = sorted(res, key=lambda x: x['already_ordered'], reverse=True) + + return res + + @api.model_create_multi + def create(self, vals_list): + for values in vals_list: + tools.image_resize_images(values) + return super(LunchProduct, self).create(vals_list) + + def write(self, values): + tools.image_resize_images(values) + return super(LunchProduct, self).write(values) + + def _compute_already_ordered(self): + last_ordered = fields.Date.today() - relativedelta(weeks=2) for product in self: - if not product.supplier: - product.available = True - else: - alerts = self.env['lunch.alert'].search([ - ('partner_id', '=', self.supplier.id) - ]) - if alerts and not any(alert.display for alert in alerts): - # every alert is not available - product.available = False - else: - # no alert for the supplier or at least one is not available - product.available = True - - def _search_available_products(self, operator, value): - alerts = self.env['lunch.alert'].search([]) - supplier_w_alerts = alerts.mapped('partner_id') - available_suppliers = alerts.filtered(lambda a: a.display).mapped('partner_id') - available_products = self.search([ - '|', - ('supplier', 'not in', supplier_w_alerts.ids), - ('supplier', 'in', available_suppliers.ids) - ]) - - if (operator in expression.NEGATIVE_TERM_OPERATORS and value) or \ - (operator not in expression.NEGATIVE_TERM_OPERATORS and not value): - # e.g. (available = False) or (available != True) - return [('id', 'not in', available_products.ids)] - else: - # e.g. (available = True) or (available != False) - return [('id', 'in', available_products.ids)] + product.already_ordered = bool(self.env['lunch.order.line'].search_count( + [('product_id', '=', product.id), ('date', '>=', last_ordered), ('user_id', '=', self.env.user.id)])) diff --git a/addons/lunch/models/lunch_supplier.py b/addons/lunch/models/lunch_supplier.py new file mode 100644 index 00000000000..07286aa1ff0 --- /dev/null +++ b/addons/lunch/models/lunch_supplier.py @@ -0,0 +1,180 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import math +import pytz + +from datetime import datetime, time + +from odoo import api, fields, models +from odoo.osv import expression +from odoo.tools import float_round + +from odoo.addons.base.models.res_partner import _tz_get + + +WEEKDAY_TO_NAME = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'] + +def float_to_time(hours, tz=None): + """ Convert a number of hours into a time object. """ + if hours == 24.0: + return time.max + fractional, integral = math.modf(hours) + res = time(int(integral), int(float_round(60 * fractional, precision_digits=0)), 0) + if tz: + res = res.replace(tzinfo=pytz.timezone(tz)) + return res + +def time_to_float(t): + return float_round(t.hour + t.minute/60 + t.second/3600, precision_digits=2) + +class LunchSupplier(models.Model): + _name = 'lunch.supplier' + _description = 'Lunch Supplier' + + partner_id = fields.Many2one('res.partner', string='Linked partner', required=True) + + name = fields.Char('Name', related='partner_id.name') + description = fields.Text('Description') + + email = fields.Char(related='partner_id.email') + email_formatted = fields.Char(related='partner_id.email_formatted', readonly=True) + phone = fields.Char(related='partner_id.phone') + street = fields.Char(related='partner_id.street') + street2 = fields.Char(related='partner_id.street2') + zip_code = fields.Char(related='partner_id.zip') + city = fields.Char(related='partner_id.city') + state_id = fields.Many2one("res.country.state", related='partner_id.state_id') + country_id = fields.Many2one('res.country', related='partner_id.country_id') + + vat = fields.Char(related='partner_id.vat') + + image = fields.Binary(related='partner_id.image', readonly=False) + image_medium = fields.Binary(related='partner_id.image_medium', readonly=False) + image_small = fields.Binary(related='partner_id.image_small', readonly=False) + + send_by = fields.Selection([ + ('phone', 'Phone'), + ('mail', 'Email'), + ], 'Send Order By', default='phone') + automatic_email_send = fields.Boolean('Automatic Email Sending') + automatic_email_time = fields.Float('Hour') + + recurrency = fields.Selection([('once', 'Specific Day'), ('reccurent', 'Reccurent')], 'Recurrency', default='once') + recurrency_from = fields.Float('From') + recurrency_to = fields.Float('To') + recurrency_date = fields.Date('Day', default=fields.Date.today()) + recurrency_date_from = fields.Datetime('from', compute='_compute_recurrency_date_from', store=True) + recurrency_date_to = fields.Datetime('to', compute='_compute_recurrency_date_to', store=True) + recurrency_monday = fields.Boolean('Monday') + recurrency_tuesday = fields.Boolean('Tuesday') + recurrency_wednesday = fields.Boolean('Wednesday') + recurrency_thursday = fields.Boolean('Thursday') + recurrency_friday = fields.Boolean('Friday') + recurrency_saturday = fields.Boolean('Saturday') + recurrency_sunday = fields.Boolean('Sunday') + + available_today = fields.Boolean('This is True when if the supplier is available today', + compute='_compute_available_today', search='_search_available_today') + + tz = fields.Selection(_tz_get, string='Timezone', required=True, default='UTC') + + _sql_constraints = [ + ('automatic_email_time_range', 'CHECK(automatic_email_time >= 0 AND automatic_email_time <= 24)', 'Automatic Email Sending Time should be between 0 and 24'), + ('recurrency_from', 'CHECK(recurrency_from >= 0 AND recurrency_from <= 24)', 'Recurrency From should be between 0 and 24'), + ('recurrency_to', 'CHECK(recurrency_to >= 0 AND recurrency_to <= 24)', 'Recurrency To should be between 0 and 24') + ] + + @api.model + def _auto_email_send(self): + """ + This method is called every 10 minutes via a cron. + Its job is simply to get all the orders made for each supplier and send an email + automatically to the supplier if the supplier is configured for it and we are ready + to send it (usually at 11am or so) + """ + records = self.search([('automatic_email_send', '=', True)]) + + for supplier in records: + send_at = datetime.combine(fields.Date.today(), float_to_time(supplier.automatic_email_time, supplier.tz)).astimezone(pytz.UTC).replace(tzinfo=None) + if supplier.available_today and fields.Datetime.now() > send_at: + orders = self.env['lunch.order'].search([('mail_sent', '=', False), ('supplier_ids', 'in', [supplier.id]), ('state', '=', 'ordered')]) + + if orders: + order = { + 'company_name': orders[0].company_id.name, + 'currency_id': orders[0].currency_id.id, + 'supplier_id': supplier.partner_id.id, + 'supplier_name': supplier.name, + 'supplier_email': supplier.email_formatted + } + + lines = orders.mapped('order_line_ids').filtered(lambda line: line.supplier_id == supplier) + lines = [{'product': line.product_id.name, 'note': line.note, 'quantity': line.quantity, 'price': line.price} for line in lines] + + order['amount_total'] = sum(line['price'] for line in lines) + + self.env.ref('lunch.lunch_order_mail_supplier').with_context(order=order, lines=lines).send_mail(supplier.id) + + orders.action_confirm(supplier) + + @api.depends('recurrency_date', 'recurrency_from') + def _compute_recurrency_date_from(self): + for supplier in self: + if supplier.recurrency_date and supplier.recurrency_from: + supplier.recurrency_date_from = datetime.combine(supplier.recurrency_date, float_to_time(supplier.recurrency_from)) + + @api.depends('recurrency_date', 'recurrency_to') + def _compute_recurrency_date_to(self): + for supplier in self: + if supplier.recurrency_date and supplier.recurrency_to: + supplier.recurrency_date_to = datetime.combine(supplier.recurrency_date, float_to_time(supplier.recurrency_to)) + + @api.depends('recurrency', 'recurrency_date', 'recurrency_from', 'recurrency_to', 'recurrency_monday', + 'recurrency_tuesday', 'recurrency_wednesday', 'recurrency_thursday', + 'recurrency_friday', 'recurrency_saturday', 'recurrency_sunday') + def _compute_available_today(self): + now = fields.Datetime.now().replace(tzinfo=pytz.UTC) + + for supplier in self: + now = now.astimezone(pytz.timezone(supplier.tz)) + time_from = float_to_time(supplier.recurrency_from) + time_to = float_to_time(supplier.recurrency_to) + + if supplier.recurrency == 'once': + supplier.available_today = (supplier.reccurrency_date_from <= now <= supplier.reccurrency_date_to) + else: + fieldname = 'recurrency_%s' % (WEEKDAY_TO_NAME[now.weekday()]) + supplier.available_today = supplier[fieldname] and (time_from <= now.time() <= time_to) + + def _search_available_today(self, operator, value): + if (not operator in ['=', '!=']) or (not value in [True, False]): + return [] + + searching_for_true = (operator == '=' and value) or (operator == '!=' and not value) + now = fields.Datetime.now() + float_now = time_to_float(now.time()) + fieldname = 'recurrency_%s' % (WEEKDAY_TO_NAME[now.weekday()]) + + if searching_for_true: + specific = expression.AND([ + [('recurrency', '=', 'once')], + [('recurrency_date_from', '<=', now)], + [('recurrency_date_to', '>=', now)] + ]) + else: + specific = expression.AND([ + [('recurrency', '=', 'once')], + expression.OR([ + [('recurrency_date_from', '>=', now)], + [('recurrency_date_to', '<=', now)] + ]) + ]) + + recurrence = expression.AND([ + [(fieldname, operator, value)], + [('recurrency_from', '<=' if searching_for_true else '>=', float_now)], + [('recurrency_to', '>=' if searching_for_true else '<=', float_now)] + ]) + + return expression.OR([specific, recurrence]) diff --git a/addons/lunch/security/ir.model.access.csv b/addons/lunch/security/ir.model.access.csv index 244fbf11f18..1efb5be6c6d 100644 --- a/addons/lunch/security/ir.model.access.csv +++ b/addons/lunch/security/ir.model.access.csv @@ -4,10 +4,10 @@ order_line_manager,"Order Line user",model_lunch_order_line,group_lunch_manager, cashmove_manager,"Cashmove user",model_lunch_cashmove,group_lunch_manager,1,1,1,1 product_manager,"Product user",model_lunch_product,group_lunch_manager,1,1,1,1 product_category_manager,"Product category user",model_lunch_product_category,group_lunch_manager,1,1,1,1 -alert_manager,"Alert user",model_lunch_alert,group_lunch_manager,1,1,1,1 order_user,"Order user",model_lunch_order,group_lunch_user,1,1,1,0 order_line_user,"Order Line user",model_lunch_order_line,group_lunch_user,1,1,1,1 cashmove_user,"Cashmove user",model_lunch_cashmove,group_lunch_user,1,0,0,0 product_user,"Product user",model_lunch_product,group_lunch_user,1,0,0,0 product_category_user,"Product category user",model_lunch_product_category,group_lunch_user,1,0,0,0 -alert_user,"Alert user",model_lunch_alert,group_lunch_user,1,0,0,0 +lunch_supplier_user,"Lunch Supplier User Rights",model_lunch_supplier,group_lunch_user,1,0,0,0 +lunch_supplier_manager,"Lunch Supplier Manager Rights",model_lunch_supplier,group_lunch_manager,1,1,1,1 diff --git a/addons/lunch/static/img/4formaggio.png b/addons/lunch/static/img/4formaggio.png new file mode 100644 index 0000000000000000000000000000000000000000..f19c95ac934cb4eacc0593a8ab5e061c858d1bec GIT binary patch literal 8362 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≪eL#IFXFqC&bqEKJnM)M*zj4z5NE zHOlMz*;bB##%0bxAc5s&YO>=QdcRmbWZob`atvv}WT|GJnw&&`YARcOdIBLVrpeQ7 zqqL!+km0XAGUE9!79x7{_x!!~rXQszJe%zHmI zjfPB{@$aFIWT|LkSm(W@8XAJeE~biTrb)@D7Gc2?A%s63AQu*koe#o*^zW0jU_w+$ zEC~P^0)m6I@D}7SEGDu+7b6l*!iNy8A2n1P15Q_q8e?2rm59 z?%Ih;_;LSmf5!R5)cYiy5ObfAsYTaZay=a~McZeTXHz-b5RBsLXv^Z}1g{yDTtrv7~Rc(^?8C=mJCoN1rFv2=?3s54a=v=N}Hlp*k zs+X-|T(%E4`EbWu@aC^qeZRPY>Z|6eHxdm3gN`I$XsE)l#F41>C@ARTnL=9=us!}A PZUJ&q%96F>rXl|aSn6r~ literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/Coke.png b/addons/lunch/static/img/Coke.png new file mode 100644 index 0000000000000000000000000000000000000000..e822a2656ac540f141412b85819afc29010a7075 GIT binary patch literal 7469 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 literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/bacon_burger.png b/addons/lunch/static/img/bacon_burger.png new file mode 100644 index 0000000000000000000000000000000000000000..ad4177d8ac2fb4014e691fd2294908c61b18d70e GIT binary patch literal 8027 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 qBTru$(_mr;0 literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/cheeseburger.png b/addons/lunch/static/img/cheeseburger.png new file mode 100644 index 0000000000000000000000000000000000000000..f9d5a3e5c01567d6172ca96feac8c7db9e1f2831 GIT binary patch literal 7020 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 literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/chirashi.png b/addons/lunch/static/img/chirashi.png new file mode 100644 index 0000000000000000000000000000000000000000..651437118481a32b702ca4971fd45bd5f3da75bd GIT binary patch literal 7221 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 UOC`2{M-G6JoVskiv_-^!0b%%*M*si- literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/club.png b/addons/lunch/static/img/club.png new file mode 100644 index 0000000000000000000000000000000000000000..5f3e36f3f375562bd6fcef3323ff58d9072929fc GIT binary patch literal 7011 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 JtCBSf{V%(`^KJkD literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/fanta.png b/addons/lunch/static/img/fanta.png new file mode 100644 index 0000000000000000000000000000000000000000..b7a48332e0d9686c81787d1bbe7d3eb6972df084 GIT binary patch literal 5855 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 literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/fuze_black.png b/addons/lunch/static/img/fuze_black.png new file mode 100644 index 0000000000000000000000000000000000000000..1daac338d906216ae9da5161159fb79040a0848b GIT binary patch literal 5623 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 literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/fuze_green.png b/addons/lunch/static/img/fuze_green.png new file mode 100644 index 0000000000000000000000000000000000000000..9a274ab6796cae525404271f4f843461328a502b GIT binary patch literal 4724 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 JS|ywC{{a_l`T+m{ literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/gouda.png b/addons/lunch/static/img/gouda.png new file mode 100644 index 0000000000000000000000000000000000000000..c50d6d8dfbf2fdafe4c777427da35815e1b28f88 GIT binary patch literal 7864 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 literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/italiana.png b/addons/lunch/static/img/italiana.png new file mode 100644 index 0000000000000000000000000000000000000000..2f8c4244436d8f2020d42d7c6b6c1d207d079f82 GIT binary patch literal 11549 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 literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/maki.png b/addons/lunch/static/img/maki.png new file mode 100644 index 0000000000000000000000000000000000000000..c92dd8c83a4bc5ff719dff4b8ba2c88eab35bc33 GIT binary patch literal 8806 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

Li+wtWujyc6$gcZWt*=30M=77= zu&BT`)&iUL8xZ37uS*)KUMYvxY>?zNP|iM|z>zZGHcu*z@+n)k`&;egGGY76bO$?} zu9Y^VR@qU#J@4GYr=@t4$9qk4rRVGJh<;bSH!j>HiGGCz z2*@3~`=g_QyYX|$fJBdY#%pQVdq}jei%2kM;Jku}uXF5WczfITUFPw$X=y8lh#3w| zvfjOsey*C{Jy{wa?ZzVi&J;#A$kLD{F-f)@AY_q^73c2m$b{G8@SgLg~DSdY54BD+rSvfvb;RqP|?CCu~+$cS=o5$wIx_fUB%tpMIe3#2gLfl6#QNGW6!Rv`9G@T9vi@@PQ8sJidVGcotn~IeZUO<~pKjAqp zZ^@s!C8iUp<M3kMYtzm#@rUvYMqO-e&OI&l_6pmL!6NZiJ_{UP-sdm|b;|e4 zWuk3bRF0I+Gg_9uEd+b0I?$mSV{I7q%9Mt)%@7&`7z7Xrf9AP=9XkQd7hrtVBfxF_ zWo>=lFC>Al+k{RFTmCD%5Ih#V5Xdreoh-<0|1AYigJBQFWIgzX&!~tY+5aytr?IEpb}M>S!PZ zjLKhQ8pYaCyBVOWn@Q9FLRfxSY*cDQ99+m-qyWF&!nq!Dwa;UdvvU=zvv>-U zjUL~l+jr!PdrrBIOqr=7Wu&qbCej&l(R%_zKxBP${iG@a1r5EQ;=)><&XG7KL}t_t zY+tMtB>gC8`2=A*!>!m>*83Z$%b$<$#w}O6b_`jiDUx;q7=HMKmw%CJeNK?4O^eMU zS=8_FiV!n~flQ(%)lK`rK1z+m18Zuje8r$WO#<%Yo6Ja}R(5`Vn8nkiXQZE>o>yAZ zL!qomGSmZ336}=j2TTZ@;*9G|c+u_kIcCJieYOP!7_=rqAZj<+bJ}JPA{H~ z@7Y#3)f)jm9N zxNoRvKn6oVxio#mJ+Y@ihd1JB;1b2r(TKqpGaGi2P@s84D7vM-m;xr4nOP&hEj?l0 zxhnM%Q+%Pi1A;d%5l2%o_Ksw%wj~-5N74h3q{_ zWF-=@&*Yz8%GVyWKNPiUy_{F7*DT{@WI-~BtmWpyhM2Nq(g^nj9%wO`*$UL%=2{ir ztYx%}l>5xOpO_+;(jcg+_HC-n>l9CfZ5F-xdWVSLMi2WanabAs4jD`!lHu?048e=O zR(REgm!nO`Am-e^ki>AR*f?`4k^=;GEUudI8&RkYq_!+wBZ{W|{Zwd0TtfEQ=+ColtG6!y|hZRLeu|#E%Lim+|Xn`iUUTyf1G>MxjE5UIG5Qum=Z@@12puWP_{8MIW}T6%Fk+Y!9XFL}N;4M{$V7_(Q?|MC~19 zJZ(=hC7Mn#WhtvzV!jC^4$cNrL64x*;burPQToVfI;;&vSo(%siE_DVwCN<(CTPvB^mT2Ch!v`>g*Cdylt1< z{l*~{M2#w$B*|{^JU=lDWV89!a*^x)prv8AVkAC@7es#2dH4*a3zGY7h3~uw^DW-sei+~VR|5U4@yGDw>Ad?CsJ4J7-il_L=0gv(;ay55hb^w zGWAw;a;H&2AH@poyZPRq7zqKzM8|P>J~VhcLFFN4Yu$UA*}`XCHXp7gA5jGR0Nzn3 zE3R&}rSBcYR2e}34tnGodLhDK2=wpP@tJqb$Ds#2joB`<^)}1qgqjZ~Ro?HDWY8Mk z>C((P0hV@n#CD>z=mDSALr4JHVDPzTYn!d)8yvCj&v8xM zbdl%yIAZ&TSIm(MUO$iQ%^XlbU~3$;oK&2i>>7J)(PhFe-+DEchS>H1Amn45WkZd^ z&(y)2>4xb++#F?ypo+dRM7`MzMYC9Lx(ZNP%CE&MyVT>Gza{~)2Sxm?Kx^>;_$~%o zvf)<3CZvzuYq6fd2xq!Pcq( literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/mozza.png b/addons/lunch/static/img/mozza.png new file mode 100644 index 0000000000000000000000000000000000000000..8820fbb9cd5fd91741af06c269cc5e11a3bbf9df GIT binary patch literal 6191 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 X6th5hA^Y#d03aiwDE>#(DCoZcGzO)^ literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/pasta_bolognese.png b/addons/lunch/static/img/pasta_bolognese.png new file mode 100644 index 0000000000000000000000000000000000000000..64f9972e5c249de31c2b5543d1e2b90fa122ff1a GIT binary patch literal 6727 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 literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/pizza_funghi.png b/addons/lunch/static/img/pizza_funghi.png new file mode 100644 index 0000000000000000000000000000000000000000..00bceba96b60d16b41c19039f406f89a09cc679c GIT binary patch literal 9213 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 TBticB3IULjP!O*XH3I%0u0YU0 literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/pizza_margherita.png b/addons/lunch/static/img/pizza_margherita.png new file mode 100644 index 0000000000000000000000000000000000000000..0e3172655245f4630935854ba1e2d8df1f37672d GIT binary patch literal 8597 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 a=3z2`;a|#u^6x?o_#&kwSto8B`u_l0w3v$k literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/pizza_veggie.png b/addons/lunch/static/img/pizza_veggie.png new file mode 100644 index 0000000000000000000000000000000000000000..950afb54a12486f11ac544511e52da4ae40704e3 GIT binary patch literal 7354 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 literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/temaki.png b/addons/lunch/static/img/temaki.png new file mode 100644 index 0000000000000000000000000000000000000000..8f47e7c035a8c6f054a91d141d94a6726a4a4124 GIT binary patch literal 9244 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 CkB0yN literal 0 HcmV?d00001 diff --git a/addons/lunch/static/img/tuna_sandwich.png b/addons/lunch/static/img/tuna_sandwich.png new file mode 100644 index 0000000000000000000000000000000000000000..b616d6156a5351a15548f77678cade93b4afe742 GIT binary patch literal 6425 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 + +

+ +
+ + + + + + + +
+
+ Your order + + Edit + Save +
+
+
+
+
+
+ + + +
+
+ +
+
+ + + + +
+
+
+
+ + +
+
+ + + + +
+
+
+ +
+
+ +
+
+ Total +
+
+ + + + +
+
+ +
+
+
+ + + + + + + + + + + + + + + +
+ +
+ diff --git a/addons/lunch/static/tests/lunch_tests.js b/addons/lunch/static/tests/lunch_tests.js deleted file mode 100644 index 3ae1e3491cb..00000000000 --- a/addons/lunch/static/tests/lunch_tests.js +++ /dev/null @@ -1,145 +0,0 @@ -odoo.define('lunch.tests', function (require) { -"use strict"; - -var FormView = require('web.FormView'); -var testUtils = require('web.test_utils'); - -var createView = testUtils.createView; - -QUnit.module('lunch', { - beforeEach: function () { - this.data = { - order: { - fields: { - previous_order_widget: {type: 'text'}, - order_line_ids: {type: 'many2many', relation: 'order_line'} - }, - records: [{ - id: 1, - name: 'coucou', - }, { - id: 2, - name: 'coucou', - }, { - id: 11, - }], - }, - order_line: { - fields: { - product_id: {type: 'many2one', relation: 'product'}, - note: {type: 'text'}, - price: {type: 'float'}, - }, - }, - supplier: { - fields: {}, - records: [{ - id: 1, - display_name: "Coin Gourmant", - }, { - id: 2, - display_name: "Pizza Inn", - }] - }, - product: { - fields: {}, - records: [{ - id: 1, - name: 'Pizza Margherita', - }], - } - }; - }, -}, function () { - - QUnit.test("empty previous_order widget", function (assert) { - assert.expect(2); - - var form = createView({ - View: FormView, - arch: '
' + - '' + - '' + - '' + - '' + - '
', - data: this.data, - model: 'order', - archs: { - "order_line,false,list": '' + - '' + - '' + - '' + - '', - }, - }); - - var widgetText = form.$('.o_field_widget[name="previous_order_widget"]').text(); - assert.ok(widgetText.indexOf('This is the first time you order a meal') !== -1, - "the widget should display its no content text"); - assert.containsNone(form, '.o_lunch_vignette', - "there should be no vignette"); - - form.destroy(); - }); - - QUnit.test("add an order line with previous_order widget", function (assert) { - assert.expect(4); - - var form = createView({ - View: FormView, - arch: '
' + - '' + - '' + - '' + - '' + - '
', - data: this.data, - model: 'order', - mockRPC: function (route, args) { - if (args.method === 'default_get') { - return $.when({ - previous_order_widget: '{' + - '"8": {' + - '"note": "coucou",' + - '"line_id": 8,' + - '"digits": [69, 2],' + - '"product_id": 1,' + - '"currency": "$",' + - '"supplier": "Pizza Inn",' + - '"position": "before",' + - '"price": 6.9,' + - '"product_name": "Pizza Margherita"' + - '}' + - '}' - }); - } - return this._super.apply(this, arguments); - }, - archs: { - "order_line,false,list": '' + - '' + - '' + - '' + - '', - }, - }); - - assert.containsNone(form, '.o_list_view tr.o_data_row', - "there should be no row in the one2many list"); - - assert.containsOnce(form, '.o_lunch_vignette', - "there should be a vignette"); - - // add an order - testUtils.dom.click(form.$('.o_lunch_vignette .o_add_button')); - - assert.containsOnce(form, '.o_list_view tr.o_data_row', - "there should be one new row in the one2many list"); - assert.strictEqual(form.$('.o_list_view tr.o_data_row').text(), "Pizza Margheritacoucou6.90", - "the line should contain the correct data"); - - form.destroy(); - }); -}); -}); diff --git a/addons/lunch/static/tests/test_lunch_kanban.js b/addons/lunch/static/tests/test_lunch_kanban.js new file mode 100644 index 00000000000..b2062609974 --- /dev/null +++ b/addons/lunch/static/tests/test_lunch_kanban.js @@ -0,0 +1,207 @@ +odoo.define('lunch.lunchKanbanTests', function (require) { +"use strict"; + +var LunchKanbanView = require('lunch.LunchKanbanView'); +var testUtils = require('web.test_utils'); + +var createView = testUtils.createView; + +QUnit.module('Views', { + beforeEach: function () { + this.data = { + product: { + fields: { + id: {string: 'ID', type: 'integer'}, + }, + records: [ + {id: 1, name: 'Tuna sandwich', price: 3.0}, + ] + }, + }; + }, +}, function () { + QUnit.module('LunchKanbanView'); + + QUnit.test('Simple rendering of LunchKanbanView', function (assert) { + assert.expect(8); + + var lunchKanban = createView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: '' + + '
' + + '
' + + '
', + mockRPC: function(route, args) { + if (route === '/lunch/infos') { + return $.when({ + order: 1, + wallet: 20, + username: 'Marc Demo', + userimage: '', + is_manager: false, + users: [ + {id: 1, name: 'Mitchell Admin'}, + {id: 2, name: 'Marc Demo'}, + ], + total: 7.4, + state: 'new', + lines: [ + {id: 1, product: ['Pizza Italiana', 7.4], toppings: [], quantity: 1.0, price: 7.4} + ] + }); + } else if (route.startsWith('data:image/png;base64,')) { + return $.when(); + } + return this._super(route, args); + }, + }); + + var $section = $(lunchKanban.$('.o_lunch_widget_info')[0]); + // username + assert.strictEqual($section.find('div:eq(1) div:eq(0)').text().trim(), 'Marc Demo', 'Username should have been Marc Demo'); + // wallet_balance + assert.strictEqual($section.find('div:eq(1) div:eq(1) span:eq(0)').text().trim(), '20.00', 'Wallet balance should have been 20'); + // your order section + $section = $(lunchKanban.$('.o_lunch_widget_info')[1]); + // only one line + assert.strictEqual($section.find('div:eq(2) div.d-flex').length, 1, 'There should be only one line'); + // quantity = 1 + assert.strictEqual($section.find('div:eq(2) div:eq(0) span:eq(0)').text().trim(), '1', 'The line should contain only one product'); + // buttons to remove and to add product + assert.strictEqual($section.find('.o_remove_product').length, 1, 'There should be a remove product button'); + assert.strictEqual($section.find('.o_add_product').length, 1, 'There should be a add product button'); + + $section = $(lunchKanban.$('.o_lunch_widget_info')[2]); + // total + assert.strictEqual($section.find('div:eq(0) div:eq(1)').text().trim(), '7.4', 'total should be of 7.4'); + // order now button + assert.strictEqual($section.find('button').length, 1, 'order now button should be available'); + + lunchKanban.destroy(); + }); + + QUnit.test('User interactions', function (assert) { + assert.expect(8); + + var state = 'new'; + + var lunchKanban = createView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: '' + + '
' + + '
' + + '
', + mockRPC: function(route, args) { + if (route === '/lunch/infos') { + return $.when({ + order: 1, + wallet: 20, + username: 'Marc Demo', + userimage: '', + is_manager: false, + users: [ + {id: 1, name: 'Mitchell Admin'}, + {id: 2, name: 'Marc Demo'}, + ], + total: 7.4, + state: state, + lines: [ + {id: 1, product: ['Pizza Italiana', 7.4], toppings: [], quantity: 1.0, price: 7.4} + ] + }); + } else if (route === '/lunch/payment_message') { + return $.when({message: 'Hello'}); + } else if (route === '/lunch/pay') { + return $.when(true); + } else if (args.method === 'update_quantity') { + assert.step(args.args); + return $.when(); + } else if (route.startsWith('data:image/png;base64,')) { + return $.when(); + } + return this._super(route, args); + }, + }); + + lunchKanban.$('.o_add_money').click(); + var modal = $('.modal-dialog'); + assert.strictEqual(modal.find('.modal-body').text().trim(), 'Hello', 'Message should have been Hello'); + modal.find('.btn.btn-primary').click(); + + lunchKanban.$('.o_add_product').click(); + lunchKanban.$('.o_remove_product').click(); + + state = 'ordered'; + lunchKanban.$('.o_lunch_widget_order_button').click(); + // state is shown + assert.strictEqual(lunchKanban.$('.o_lunch_ordered').length, 1, 'state should be shown as ordered'); + // no more buttons + assert.strictEqual(lunchKanban.$('.o_remove_product').length, 0, 'button to remove product should not be shown anymore'); + assert.strictEqual(lunchKanban.$('.o_add_product').length, 0, 'button to add product should not be shown anymore'); + state = 'confirmed'; + lunchKanban.reload(); + // state is updated + assert.strictEqual(lunchKanban.$('.o_lunch_confirmed').length, 1, 'state should be shown as confirmed'); + + assert.verifySteps([ + [[1], 1], + [[1], -1], + ]); + + lunchKanban.destroy(); + }); + + QUnit.test('Manager interactions', function (assert) { + assert.expect(5); + + var lunchKanban = createView({ + View: LunchKanbanView, + model: 'product', + data: this.data, + arch: '' + + '
' + + '
' + + '
', + mockRPC: function(route, args) { + if (route === '/lunch/infos') { + return $.when({ + order: 1, + wallet: 20, + username: 'Marc Demo', + userimage: '', + is_manager: true, + users: [ + {id: 1, name: 'Mitchell Admin'}, + {id: 2, name: 'Marc Demo'}, + ], + total: 7.4, + state: 'new', + lines: [ + {id: 1, product: ['Pizza Italiana', 7.4], toppings: [], quantity: 1.0, price: 7.4} + ] + }); + } else if (route.startsWith('data:image/png;base64,')) { + return $.when(); + } + return this._super(route, args); + }, + }); + + var select = lunchKanban.$('select.o_input'); + var options = select.find('option'); + + assert.strictEqual(select.length, 1, 'There should be a selection field'); + assert.strictEqual(options.length, 2, 'Select should have two options'); + assert.strictEqual(options.text().trim(), 'Mitchell AdminMarc Demo', 'Options should be the name of the users'); + assert.strictEqual($(options[0]).data('user-id'), 1, 'user id should be on option'); + assert.strictEqual($(options[1]).data('user-id'), 2, 'user id should be on option'); + + lunchKanban.destroy(); + }); +}); + +}); diff --git a/addons/lunch/tests/__init__.py b/addons/lunch/tests/__init__.py index f9d697d7b2c..08959c769be 100644 --- a/addons/lunch/tests/__init__.py +++ b/addons/lunch/tests/__init__.py @@ -1,3 +1,4 @@ # -*- coding: utf-8 -*- -from . import test_lunch +from . import common +from . import test_supplier diff --git a/addons/lunch/tests/common.py b/addons/lunch/tests/common.py new file mode 100644 index 00000000000..f38b9c547ec --- /dev/null +++ b/addons/lunch/tests/common.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.tests import common + + +class TestsCommon(common.TransactionCase): + + def setUp(self): + super(TestsCommon, self).setUp() + + self.partner_pizza_inn = self.env['res.partner'].create({ + 'name': 'Pizza Inn', + }) + + self.supplier_pizza_inn = self.env['lunch.supplier'].create({ + 'partner_id': self.partner_pizza_inn.id, + 'send_by': 'mail', + 'automatic_email_send': True, + 'automatic_email_time': 11, + 'recurrency': 'reccurent', + 'recurrency_from': 8, + 'recurrency_to': 23, + 'recurrency_monday': True, + 'recurrency_tuesday': True, + 'recurrency_wednesday': True, + 'recurrency_thursday': True, + 'recurrency_friday': True, + }) + + self.partner_coin_gourmand = self.env['res.partner'].create({ + 'name': 'Coin Gourmand', + }) + + self.supplier_coin_gourmand = self.env['lunch.supplier'].create({ + 'partner_id': self.partner_coin_gourmand.id, + 'send_by': 'phone', + 'recurrency': 'reccurent', + 'recurrency_from': 8, + 'recurrency_to': 23, + 'recurrency_monday': True, + 'recurrency_tuesday': True, + 'recurrency_wednesday': True, + 'recurrency_thursday': True, + 'recurrency_friday': True, + }) + + self.category_pizza = self.env['lunch.product.category'].create({ + 'name': 'Pizza', + }) + + self.category_sandwich = self.env['lunch.product.category'].create({ + 'name': 'Sandwich', + }) + + self.product_pizza = self.env['lunch.product'].create({ + 'name': 'Pizza', + 'category_id': self.category_pizza.id, + 'price': 9, + 'supplier_id': self.supplier_pizza_inn.id, + }) + + self.product_sandwich_tuna = self.env['lunch.product'].create({ + 'name': 'Tuna Sandwich', + 'category_id': self.category_sandwich.id, + 'price': 3, + 'supplier_id': self.supplier_coin_gourmand.id, + }) + + self.topping_olives = self.env['lunch.product'].create({ + 'name': 'Olives', + 'price': 0.3, + 'supplier_id': self.supplier_pizza_inn.id, + 'is_topping': True, + }) diff --git a/addons/lunch/tests/test_lunch.py b/addons/lunch/tests/test_lunch.py deleted file mode 100644 index c6325a3f19c..00000000000 --- a/addons/lunch/tests/test_lunch.py +++ /dev/null @@ -1,143 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from odoo.exceptions import ValidationError -from odoo.tests import common - -from datetime import date, datetime -from dateutil import relativedelta - -class Test_Lunch(common.TransactionCase): - - def setUp(self): - """*****setUp*****""" - super(Test_Lunch, self).setUp() - - self.demo_user = self.env['res.users'].search([('name', '=', 'Marc Demo')]) - self.product_Bolognese_id = self.env.ref('lunch.product_Bolognese') - self.new_id_order = self.env['lunch.order'].create({ - 'user_id': self.demo_user.id, - 'order_line_ids': '[]', - }) - self.new_id_order_line = self.env['lunch.order.line'].create({ - 'order_id': self.new_id_order.id, - 'product_id': self.product_Bolognese_id.id, - 'note': '+Emmental', - 'cashmove': [], - 'price': self.product_Bolognese_id.price, - }) - - def test_00_lunch_order(self): - """Change the state of an order line from 'new' to 'ordered'. Check that there are no cashmove linked to that order line""" - self.order_one = self.new_id_order_line - #we check that our order_line is a 'new' one and that there are no cashmove linked to that order_line: - self.assertEqual(self.order_one.state, 'new') - self.assertEqual(list(self.order_one.cashmove), []) - #we order that orderline so it's state will be 'ordered' - self.order_one.order() - self.order_one = self.new_id_order_line - #we check that our order_line is a 'ordered' one and that there are no cashmove linked to that order_line: - self.assertEqual(self.order_one.state, 'ordered') - self.assertEqual(list(self.order_one.cashmove), []) - - def test_01_lunch_order(self): - """Change the state of an order line from 'new' to 'ordered' then to 'confirmed'. Check that there is a cashmove linked to the order line""" - self.test_00_lunch_order() - #We receive the order so we confirm the order line so it's state will be 'confirmed' - #A cashmove will be created and we will test that the cashmove amount equals the order line price - self.order_one.confirm() - self.order_one = self.new_id_order_line - #we check that our order_line is a 'confirmed' one and that there are a cashmove linked to that order_line with an amount equals to the order line price: - self.assertEqual(self.order_one.state, 'confirmed') - self.assertTrue(self.order_one.cashmove) - self.assertTrue(self.order_one.cashmove[0].amount == -self.order_one.price) - - def test_02_lunch_order(self): - """Change the state of an order line from 'confirmed' to 'cancelled' and check that the cashmove linked to that order line will be deleted""" - self.test_01_lunch_order() - #We have a confirmed order with its associate cashmove - #We execute the cancel function - self.order_one.cancel() - self.order_one = self.new_id_order_line - #We check that the state is cancelled and that the cashmove has been deleted - self.assertEqual(self.order_one.state, 'cancelled') - self.assertFalse(self.order_one.cashmove) - - def test_03_lunch_alert(self): - """ specify a lunch alert and make sure it is not possible to make an - order that day - """ - alert_01 = self.env['lunch.alert'].create({ - 'message': 'Order Bolognese only on Tuesday', - 'partner_id': self.product_Bolognese_id.supplier.id, - 'alert_type': 'week', - 'tuesday': True - }) - wednesday = date.today() + relativedelta.relativedelta(days=7, weekday=2) - next_tuesday = datetime.today() + relativedelta.relativedelta(days=14, weekday=1) - next_wednesday = datetime.today() + relativedelta.relativedelta(days=14, weekday=2) - - # We check that we can make an order on a Tuesday - order_01 = self.env['lunch.order'].create({ - 'user_id': self.demo_user.id, - 'date': date.today() + relativedelta.relativedelta(days=7, weekday=1), - 'order_line_ids': [(0, 0, { - 'product_id': self.product_Bolognese_id.id, - })] - }) - order_01.order_line_ids.order() - - with self.assertRaises(ValidationError): - # Planning an order to an non-authorized day must not be possible - order_02 = self.env['lunch.order'].create({ - 'user_id': self.demo_user.id, - 'date': wednesday, - 'order_line_ids': [(0, 0, { - 'product_id': self.product_Bolognese_id.id, - })] - }) - - alert_02 = self.env['lunch.alert'].create({ - 'message': 'Working one more day', - 'partner_id': self.product_Bolognese_id.supplier.id, - 'alert_type': 'specific', - 'specific_day': wednesday, - }) - - # should now be possible to order tomorrow - order_03 = self.env['lunch.order'].create({ - 'user_id': self.demo_user.id, - 'date': wednesday, - 'order_line_ids': [(0, 0, { - 'product_id': self.product_Bolognese_id.id, - })] - }) - - # should be possible to planned on an allowed day - order_04 = self.env['lunch.order'].create({ - 'user_id': self.demo_user.id, - 'date': next_tuesday, - 'order_line_ids': [(0, 0, { - 'product_id': self.product_Bolognese_id.id, - })] - }) - order_04.order_line_ids.order() - - # combinaision of alerts should work - alert_03 = self.env['lunch.alert'].create({ - 'message': 'Order Bolognese also on Wednesday', - 'partner_id': self.product_Bolognese_id.supplier.id, - 'alert_type': 'week', - 'wednesday': True - }) - # Planning an order Wednesday must now be possible - order_05 = self.env['lunch.order'].create({ - 'user_id': self.demo_user.id, - 'date': next_wednesday, - 'order_line_ids': [(0, 0, { - 'product_id': self.product_Bolognese_id.id, - })] - }) - order_05.order_line_ids.order() - - diff --git a/addons/lunch/tests/test_supplier.py b/addons/lunch/tests/test_supplier.py new file mode 100644 index 00000000000..55c57c8e744 --- /dev/null +++ b/addons/lunch/tests/test_supplier.py @@ -0,0 +1,158 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from datetime import datetime +from unittest.mock import patch + +from odoo import fields + +from odoo.addons.lunch.tests.common import TestsCommon + + +class TestSupplier(TestsCommon): + def setUp(self): + super(TestSupplier, self).setUp() + + self.monday_3am = datetime(2018, 10, 29, 3, 0, 0) + self.monday_10am = datetime(2018, 10, 29, 10, 0, 0) + self.monday_1pm = datetime(2018, 10, 29, 13, 0, 0) + self.monday_8pm = datetime(2018, 10, 29, 20, 0, 0) + + self.saturday_3am = datetime(2018, 11, 3, 3, 0, 0) + self.saturday_10am = datetime(2018, 11, 3, 10, 0, 0) + self.saturday_1pm = datetime(2018, 11, 3, 13, 0, 0) + self.saturday_8pm = datetime(2018, 11, 3, 20, 0, 0) + + def test_compute_available_today(self): + tests = [(self.monday_3am, False), (self.monday_10am, True), + (self.monday_1pm, True), (self.monday_8pm, True), + (self.saturday_3am, False), (self.saturday_10am, False), + (self.saturday_1pm, False), (self.saturday_8pm, False)] + + for value, result in tests: + with patch.object(fields.Datetime, 'now', return_value=value) as _: + assert self.supplier_pizza_inn.available_today == result,\ + 'supplier pizza inn should %s considered available on %s' % ('be' if result else 'not be', value) + + self.env['lunch.supplier'].invalidate_cache(['available_today'], [self.supplier_pizza_inn.id]) + + def test_search_available_today(self): + Supplier = self.env['lunch.supplier'] + + tests = [(self.monday_3am, 3.0, 'monday'), (self.monday_10am, 10.0, 'monday'), + (self.monday_1pm, 13.0, 'monday'), (self.monday_8pm, 20.0, 'monday'), + (self.saturday_3am, 3.0, 'saturday'), (self.saturday_10am, 10.0, 'saturday'), + (self.saturday_1pm, 13.0, 'saturday'), (self.saturday_8pm, 20.0, 'saturday')] + + assert Supplier._search_available_today('>', 7) == [] + assert Supplier._search_available_today('>', True) == [] + + for value, rvalue, dayname in tests: + with patch.object(fields.Datetime, 'now', return_value=value) as _: + assert Supplier._search_available_today('=', True) == ['|', '&', '&', ('recurrency', '=', 'once'), ('recurrency_date_from', '<=', value), + ('recurrency_date_to', '>=', value), '&', '&', ('recurrency_%s' % (dayname), '=', True), + ('recurrency_from', '<=', rvalue), ('recurrency_to', '>=', rvalue)], 'Wrong domain generated for values (%s, %s)' % (value, rvalue) + + assert self.supplier_pizza_inn in Supplier.search([('available_today', '=', True)]) + + def test_auto_email_send(self): + order = self.env['lunch.order'].create({}) + line = self.env['lunch.order.line'].create({ + 'order_id': order.id, + 'product_id': self.product_pizza.id, + }) + + assert len(order.supplier_ids) == 1 and self.supplier_pizza_inn in order.supplier_ids + + order.action_order() + assert order.state == 'ordered' + assert line.state == 'ordered' + + with patch.object(fields.Datetime, 'now', return_value=self.monday_1pm): + with patch.object(fields.Date, 'today', return_value=self.monday_1pm.date()): + self.supplier_pizza_inn._auto_email_send() + + assert order.state == 'confirmed' + assert line.state == 'confirmed' + assert order.mail_sent + + # Do the same but this time order contains multiple lines with products from at least two suppliers + # Check if the lines for pizza_inn have been sent, and put in state='confirmed' only those lines should be + # moreover the order should not yet be in state='confirmed' as there still are some lines to confirm + order = self.env['lunch.order'].create({}) + line = self.env['lunch.order.line'].create({ + 'order_id': order.id, + 'product_id': self.product_pizza.id, + 'topping_ids': [(6, 0, [self.topping_olives.id])], + }) + line2 = self.env['lunch.order.line'].create({ + 'order_id': order.id, + 'product_id': self.product_sandwich_tuna.id, + }) + + assert len(order.supplier_ids) == 2 and self.supplier_coin_gourmand in order.supplier_ids and self.supplier_pizza_inn in order.supplier_ids + + order.action_order() + assert order.state == 'ordered' + assert line.state == 'ordered' + assert line2.state == 'ordered' + + with patch.object(fields.Datetime, 'now', return_value=self.monday_1pm): + with patch.object(fields.Date, 'today', return_value=self.monday_1pm.date()): + self.supplier_pizza_inn._auto_email_send() + + assert order.state == 'confirmed' + assert line.state == 'confirmed' + assert line2.state == 'ordered' + + assert order.mail_sent + + # Check with multiple orders + order_1 = self.env['lunch.order'].create({}) + + line_1_1 = self.env['lunch.order.line'].create({ + 'order_id': order_1.id, + 'product_id': self.product_pizza.id, + }) + + line_1_2 = line_1_1 = self.env['lunch.order.line'].create({ + 'order_id': order_1.id, + 'product_id': self.product_pizza.id, + 'topping_ids': [(6, 0, [self.topping_olives.id])] + }) + + order_2 = self.env['lunch.order'].create({}) + + line_2_1 = self.env['lunch.order.line'].create({ + 'order_id': order_2.id, + 'product_id': self.product_sandwich_tuna.id + }) + + line_2_2 = self.env['lunch.order.line'].create({ + 'order_id': order_2.id, + 'product_id': self.product_pizza.id, + }) + + order_3 = self.env['lunch.order'].create({}) + + line_3_1 = self.env['lunch.order.line'].create({ + 'order_id': order_3.id, + 'product_id': self.product_sandwich_tuna.id + }) + + (order_1 | order_2 | order_3).action_order() + + assert all(order.state == 'ordered' for order in [order_1, order_2, order_3]) + assert all(line.state == 'ordered' for line in [line_1_1, line_1_2, line_2_1, line_2_2, line_3_1]) + + with patch.object(fields.Datetime, 'now', return_value=self.monday_1pm): + with patch.object(fields.Date, 'today', return_value=self.monday_1pm.date()): + self.supplier_pizza_inn._auto_email_send() + + assert all(order.state == 'confirmed' for order in [order_1, order_2]) + assert order_3.state == 'ordered' + assert all(line.state == 'confirmed' for line in [line_1_1, line_1_2, line_2_2]) + assert all(line.state == 'ordered' for line in [line_2_1, line_3_1]) + + assert all(order.mail_sent for order in [order_1, order_2]) + assert not order_3.mail_sent diff --git a/addons/lunch/views/lunch_alert_views.xml b/addons/lunch/views/lunch_alert_views.xml deleted file mode 100644 index bb6d807a9ff..00000000000 --- a/addons/lunch/views/lunch_alert_views.xml +++ /dev/null @@ -1,134 +0,0 @@ - - - - lunch.alert.search - lunch.alert - - - - - - - - - - lunch.alert.tree - lunch.alert - - - - - - - - - - - - lunch.alert.form - lunch.alert - -
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - -
- Products from this vendor can not be ordered at that moment. -
-
- Products from this vendor can be ordered at that moment. -
-
-
- - - -
-
-
-
- - - lunch.alert.kanban - lunch.alert - - - - - - - - -
-
- -
-
-
- Between: - - -
-
- - - -
-
-
-
-
-
-
-
- - - Alerts - lunch.alert - tree,kanban,form - - -

- Create a new lunch alert -

- Alerts are used to warn employee from possible issues concerning the lunch orders. - To create a lunch alert you have to define its recurrence, the time interval during which the alert should be executed and the message to display. -

- Example:
- Recurency: Everyday,
- Time interval: from 00h00 am to 11h59 pm,
- Message: "You must order before 10h30 am". -

-
-
-
diff --git a/addons/lunch/views/lunch_orders_views.xml b/addons/lunch/views/lunch_orders_views.xml index 8cd4658a8cb..b8665398153 100644 --- a/addons/lunch/views/lunch_orders_views.xml +++ b/addons/lunch/views/lunch_orders_views.xml @@ -19,7 +19,6 @@
-
@@ -43,24 +42,15 @@ -
- -
-
- -
- - + @@ -95,7 +85,7 @@ - + @@ -108,15 +98,14 @@ - + -
+ +