Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pos_default_partner/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ Contributors
* FactorLibre:

* Alvaro Rollan
* Sergio Bustamante
* `Coop IT Easy SC <https://coopiteasy.be>`_:

* hugues de keyzer
Expand Down
3 changes: 3 additions & 0 deletions pos_default_partner/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
from . import pos_order
from . import pos_config
from . import res_config_settings
from . import account_move
from . import pos_payment
from . import pos_session
14 changes: 14 additions & 0 deletions pos_default_partner/models/account_move.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from odoo import api, models


class AccountMove(models.Model):
_inherit = "account.move"

@api.model_create_multi
def create(self, vals_list):
if self.env.context.get("pos_default_partner_id", False):
default_partner_id = self.env.context["pos_default_partner_id"].id
for vals in vals_list:
if not vals.get("partner_id", False):
vals["partner_id"] = default_partner_id
return super().create(vals_list)
20 changes: 20 additions & 0 deletions pos_default_partner/models/pos_payment.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from odoo import models


class PosPayment(models.Model):
_inherit = "pos.payment"

def _generate_payment_move(self, is_reverse, change_payment=None):
order = self.pos_order_id
pos_session = order.session_id
default_partner_id = pos_session.config_id.default_partner_id
return super(
PosPayment, self.with_context(pos_default_partner_id=default_partner_id)
)._generate_payment_move(is_reverse, change_payment=change_payment)

def _prepare_debit_line_payment(self, payment_move, is_reverse):
vals = super()._prepare_debit_line_payment(payment_move, is_reverse)
if self.env.context.get("pos_default_partner_id", False):
default_partner_id = self.env.context["pos_default_partner_id"].id
vals["partner_id"] = default_partner_id
return vals
20 changes: 20 additions & 0 deletions pos_default_partner/models/pos_session.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from odoo import models


class PosSession(models.Model):
_inherit = "pos.session"

def _create_account_move(
self,
balancing_account=False,
amount_to_balance=0,
bank_payment_method_diffs=None,
):
return super(
PosSession,
self.with_context(pos_default_partner_id=self.config_id.default_partner_id),
)._create_account_move(
balancing_account=balancing_account,
amount_to_balance=amount_to_balance,
bank_payment_method_diffs=bank_payment_method_diffs,
)
1 change: 1 addition & 0 deletions pos_default_partner/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
* FactorLibre:

* Alvaro Rollan
* Sergio Bustamante
* `Coop IT Easy SC <https://coopiteasy.be>`_:

* hugues de keyzer
1 change: 1 addition & 0 deletions pos_default_partner/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -421,6 +421,7 @@ <h3><a class="toc-backref" href="#toc-entry-5">Contributors</a></h3>
<li>Foram Shah &lt;<a class="reference external" href="mailto:foram.shah&#64;initos.com">foram.shah&#64;initos.com</a>&gt;</li>
<li>FactorLibre:<ul>
<li>Alvaro Rollan</li>
<li>Sergio Bustamante</li>
</ul>
</li>
<li><a class="reference external" href="https://coopiteasy.be">Coop IT Easy SC</a>:<ul>
Expand Down
54 changes: 48 additions & 6 deletions pos_default_partner/tests/test_pos_default_partner.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,48 +9,90 @@
@odoo.tests.tagged("post_install", "-at_install")
class TestPosDefaultPartner(TestPoSCommon):
@classmethod
def setUpClass(cls, chart_template_ref=None):
super().setUpClass(chart_template_ref=chart_template_ref)
def setUpClass(cls):
super().setUpClass()
if not cls.env.company.chart_template_id:
# Load a CoA if there's none in current company
coa = cls.env.ref("l10n_generic_coa.configurable_chart_template", False)
if not coa:
# Load the first available CoA
coa = cls.env["account.chart.template"].search(
[("visible", "=", True)], limit=1
)
coa.try_loading(company=cls.env.company, install_demo=False)
cls.config = cls.basic_config
cls.PosOrder = cls.env["pos.order"]
# ==== Partners ====
cls.partner_01 = cls.env["res.partner"].create({"name": "Test partner 1"})
cls.partner_02 = cls.env["res.partner"].create({"name": "Test partner 2"})
cls.partner_03 = cls.env["res.partner"].create({"name": "Test partner 3"})
# ==== Products ====
cls.product0 = cls.create_product("Product test 0", cls.categ_basic, 5.0, 0.0)
cls.product1 = cls.create_product("Product test 1", cls.categ_basic, 10.0, 5)

def _create_order(self, partner_id=False):
# ==== open a session ====
self.open_new_session()
def _create_order(self, partner_id=False, is_invoiced=False):
# ==== create order ====
orders = [
self.create_ui_order_data(
[(self.product0, 3), (self.product1, 20)], partner_id
[(self.product0, 3), (self.product1, 20)],
customer=partner_id,
is_invoiced=is_invoiced,
)
]
result = self.env["pos.order"].create_from_ui(orders)
order = self.PosOrder.browse(result[0]["id"])
return order

def test_no_default_partner(self):
self.open_new_session()
order = self._create_order()
self.assertTrue(order)
self.assertFalse(order.partner_id)

def test_no_default_partner_assigned_partner(self):
self.open_new_session()
order = self._create_order(self.partner_01)
self.assertTrue(order)
self.assertEqual(order.partner_id, self.partner_01)

def test_default_partner(self):
self.open_new_session()
self.config.default_partner_id = self.partner_02
order = self._create_order()
self.assertTrue(order)
self.assertEqual(order.partner_id, self.partner_02)

def test_default_partner_assigned_partner(self):
self.open_new_session()
self.config.default_partner_id = self.partner_02
order = self._create_order(self.partner_01)
self.assertTrue(order)
self.assertEqual(order.partner_id, self.partner_01)

def test_pos_move_default_partner(self):
self.open_new_session()
self.config.default_partner_id = self.partner_02
session = self.config.current_session_id
order = self._create_order()
self.assertTrue(order)
self.assertEqual(order.partner_id, self.partner_02)
session.action_pos_session_closing_control()
related_moves = session._get_related_account_moves()
moves_partner = related_moves.line_ids.mapped("partner_id")
self.assertEqual(moves_partner, self.partner_02)

def test_pos_move_default_partner_invoiced_order(self):
self.open_new_session()
self.config.default_partner_id = self.partner_02
session = self.config.current_session_id
order = self._create_order()
self.assertTrue(order)
self.assertEqual(order.partner_id, self.partner_02)
order2 = self._create_order(partner_id=self.partner_03, is_invoiced=True)
self.assertTrue(order2)
self.assertEqual(order2.partner_id, self.partner_03)
session.action_pos_session_closing_control()
related_moves = session._get_related_account_moves()
moves_partner = related_moves.line_ids.mapped("partner_id")
self.assertIn(self.partner_02, moves_partner)
self.assertIn(self.partner_03, moves_partner)