diff --git a/addons/point_of_sale/models/pos_config.py b/addons/point_of_sale/models/pos_config.py
index b8952136ea0..00c22a7b8fc 100644
--- a/addons/point_of_sale/models/pos_config.py
+++ b/addons/point_of_sale/models/pos_config.py
@@ -5,7 +5,7 @@ from datetime import datetime
from uuid import uuid4
import pytz
-from odoo import api, fields, models, _
+from odoo import api, fields, models, _, Command
from odoo.osv.expression import OR
from odoo.exceptions import ValidationError, UserError
@@ -669,6 +669,34 @@ class PosConfig(models.Model):
domain = OR([domain, [('id', '=', self.tip_product_id.id)]])
return domain
+ def _link_same_non_cash_payment_methods_if_exists(self, source_config_ref_id):
+ src_cfg = self.env.ref(source_config_ref_id, raise_if_not_found=False)
+ if src_cfg and src_cfg.company_id == self.company_id:
+ self._link_same_non_cash_payment_methods(src_cfg)
+
+ def _link_same_non_cash_payment_methods(self, source_config):
+ pms = source_config.payment_method_ids.filtered(lambda pm: not pm.is_cash_count)
+ if pms:
+ self.payment_method_ids = [Command.link(pm.id) for pm in pms]
+
+ def _ensure_cash_payment_method(self, journal_code, name):
+ self.ensure_one()
+ if not self.company_id.chart_template or self.payment_method_ids.filtered('is_cash_count'):
+ return
+ company_id = self.company_id.id
+ cash_journal = self.env['account.journal'].create({
+ 'name': name,
+ 'code': journal_code,
+ 'type': 'cash',
+ 'company_id': company_id,
+ })
+ cash_pm = self.env['pos.payment.method'].create({
+ 'name': name,
+ 'journal_id': cash_journal.id,
+ 'company_id': company_id,
+ })
+ self.payment_method_ids = [Command.link(cash_pm.id)]
+
def get_limited_products_loading(self, fields):
tables, where_clause, params = self.env['product.product']._where_calc(
self._get_available_product_domain()
diff --git a/addons/pos_restaurant/data/pos_restaurant_data.xml b/addons/pos_restaurant/data/pos_restaurant_data.xml
index a12752b99da..fd81fdab134 100644
--- a/addons/pos_restaurant/data/pos_restaurant_data.xml
+++ b/addons/pos_restaurant/data/pos_restaurant_data.xml
@@ -12,7 +12,7 @@
False
-
+
diff --git a/addons/pos_restaurant/data/pos_restaurant_demo.xml b/addons/pos_restaurant/data/pos_restaurant_demo.xml
index 767a8164201..bdc26f446de 100644
--- a/addons/pos_restaurant/data/pos_restaurant_demo.xml
+++ b/addons/pos_restaurant/data/pos_restaurant_demo.xml
@@ -4,12 +4,12 @@
Drinks
-
+
Food
-
+
Food
diff --git a/addons/pos_restaurant/models/pos_config.py b/addons/pos_restaurant/models/pos_config.py
index dfffc56bc4d..c94e250b1d0 100644
--- a/addons/pos_restaurant/models/pos_config.py
+++ b/addons/pos_restaurant/models/pos_config.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from odoo import api, fields, models
+from odoo import api, fields, models, _
import json
from collections import defaultdict
@@ -93,6 +93,7 @@ class PosConfig(models.Model):
self = self.sudo()
if not companies:
companies = self.env['res.company'].search([])
+ super(PosConfig, self).post_install_pos_localisation(companies)
for company in companies.filtered('chart_template'):
pos_configs = self.search([
*self.env['account.journal']._check_company_domain(company),
@@ -109,4 +110,21 @@ class PosConfig(models.Model):
})
pos_configs.setup_defaults(company)
- super(PosConfig, self).post_install_pos_localisation(companies)
+
+ def setup_defaults(self, company):
+ main_restaurant = self.env.ref('pos_restaurant.pos_config_main_restaurant', raise_if_not_found=False)
+ main_restaurant_is_present = main_restaurant and self.filtered(lambda cfg: cfg.id == main_restaurant.id)
+ if main_restaurant_is_present:
+ non_main_restaurant_configs = self - main_restaurant
+ non_main_restaurant_configs.assign_payment_journals(company)
+ main_restaurant._setup_main_restaurant_defaults()
+ self.generate_pos_journal(company)
+ self.setup_invoice_journal(company)
+ else:
+ super().setup_defaults(company)
+
+ def _setup_main_restaurant_defaults(self):
+ self.ensure_one()
+ self._set_tips_after_payment_if_country_custom()
+ self._link_same_non_cash_payment_methods_if_exists('point_of_sale.pos_config_main')
+ self._ensure_cash_payment_method('MRCSH', _('Cash Restaurant'))