diff --git a/addons/point_of_sale/models/pos_combo_line.py b/addons/point_of_sale/models/pos_combo_line.py index 6293b2a427a..2ed444fb66c 100644 --- a/addons/point_of_sale/models/pos_combo_line.py +++ b/addons/point_of_sale/models/pos_combo_line.py @@ -5,7 +5,7 @@ class PosComboLine(models.Model): _name = "pos.combo.line" _description = "Product Combo Items" - product_id = fields.Many2one("product.product", string="Product") + product_id = fields.Many2one("product.product", string="Product", required=True) price = fields.Float("Price Extra", default=0.0) lst_price = fields.Float("Original Price", related="product_id.lst_price") combo_id = fields.Many2one("pos.combo") diff --git a/addons/point_of_sale/models/pos_order.py b/addons/point_of_sale/models/pos_order.py index 69e1f454c82..09c973f45b3 100644 --- a/addons/point_of_sale/models/pos_order.py +++ b/addons/point_of_sale/models/pos_order.py @@ -776,6 +776,7 @@ class PosOrder(models.Model): 'balance': -balance, }) + # sort self.payment_ids by is_split_transaction: for payment_id in self.payment_ids: is_split_transaction = payment_id.payment_method_id.split_transactions if is_split_transaction: @@ -783,7 +784,10 @@ class PosOrder(models.Model): else: reversed_move_receivable_account_id = payment_id.payment_method_id.receivable_account_id or self.company_id.account_default_pos_receivable_account_id - aml_vals_entry_found = [aml_entry for aml_entry in aml_vals_list_per_nature['payment_terms'] if aml_entry['account_id'] == reversed_move_receivable_account_id.id] + aml_vals_entry_found = [aml_entry for aml_entry in aml_vals_list_per_nature['payment_terms'] + if aml_entry['account_id'] == reversed_move_receivable_account_id.id + and not aml_entry['partner_id']] + if aml_vals_entry_found and not is_split_transaction: aml_vals_entry_found[0]['amount_currency'] += self.session_id._amount_converter(payment_id.amount, self.date_order, False) aml_vals_entry_found[0]['balance'] += payment_id.amount diff --git a/addons/point_of_sale/models/pos_session.py b/addons/point_of_sale/models/pos_session.py index 8eac73aa7ac..3aa1788b991 100644 --- a/addons/point_of_sale/models/pos_session.py +++ b/addons/point_of_sale/models/pos_session.py @@ -222,6 +222,17 @@ class PosSession(models.Model): else: sessions = super().create(vals_list) sessions.action_pos_session_open() + + for session in sessions: + session.env['ir.sequence'].sudo().create({ + 'name': _("PoS Order by Session"), + 'padding': 4, + 'code': f'pos.order_{session.id}', + 'number_next': 1, + 'number_increment': 1, + 'company_id': False, + }) + return sessions def unlink(self): diff --git a/addons/point_of_sale/models/res_config_settings.py b/addons/point_of_sale/models/res_config_settings.py index 3fd30d9c66a..26581e20f84 100644 --- a/addons/point_of_sale/models/res_config_settings.py +++ b/addons/point_of_sale/models/res_config_settings.py @@ -40,6 +40,7 @@ class ResConfigSettings(models.TransientModel): account_default_pos_receivable_account_id = fields.Many2one(string='Default Account Receivable (PoS)', related='company_id.account_default_pos_receivable_account_id', readonly=False) is_default_pricelist_displayed = fields.Boolean(compute="_compute_pos_pricelist_id", compute_sudo=True) barcode_nomenclature_id = fields.Many2one('barcode.nomenclature', related='company_id.nomenclature_id', readonly=False) + is_kiosk_mode = fields.Boolean(string="Is Kiosk Mode", default=False) # pos.config fields pos_module_pos_discount = fields.Boolean(related='pos_config_id.module_pos_discount', readonly=False) diff --git a/addons/point_of_sale/tests/test_point_of_sale_flow.py b/addons/point_of_sale/tests/test_point_of_sale_flow.py index 59da5aba01a..8fc9777ca6e 100644 --- a/addons/point_of_sale/tests/test_point_of_sale_flow.py +++ b/addons/point_of_sale/tests/test_point_of_sale_flow.py @@ -1598,10 +1598,11 @@ class TestPointOfSaleFlow(TestPointOfSaleCommon): original_payment = self.env['account.move'].search([('ref', '=', current_session.display_name)]) original_customer_payment_entry = original_payment.line_ids.filtered(lambda l: l.account_id.account_type == 'asset_receivable') reverser_customer_payment_entry = reverse_payment.line_ids.filtered(lambda l: l.account_id.account_type == 'asset_receivable') + #check that both use the same account self.assertEqual(len(reverser_customer_payment_entry), 2) - self.assertEqual(reverser_customer_payment_entry[0].balance, -2.0) - self.assertEqual(reverser_customer_payment_entry[1].balance, -4.0) + self.assertEqual(reverser_customer_payment_entry.filtered(lambda l: l.partner_id).balance, -4.0) + self.assertEqual(reverser_customer_payment_entry.filtered(lambda l: not l.partner_id).balance, -2.0) self.assertEqual(original_customer_payment_entry.account_id.id, reverser_customer_payment_entry.account_id.id) self.assertEqual(reverser_customer_payment_entry.partner_id, original_customer_payment_entry.partner_id) diff --git a/addons/point_of_sale/views/pos_session_view.xml b/addons/point_of_sale/views/pos_session_view.xml index 970a4789885..010f3111dbf 100644 --- a/addons/point_of_sale/views/pos_session_view.xml +++ b/addons/point_of_sale/views/pos_session_view.xml @@ -7,7 +7,7 @@