Skip to content

Commit

Permalink
[17.0][ADD] pos_cash_control_extension: New module pos_cash_control_e…
Browse files Browse the repository at this point in the history
…xtension
  • Loading branch information
peluko00 committed Dec 18, 2024
1 parent ea613a9 commit b947703
Show file tree
Hide file tree
Showing 13 changed files with 412 additions and 0 deletions.
88 changes: 88 additions & 0 deletions pos_cash_control_extension/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
======================
Cash Control Extension
======================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:2762afb29c852de29b8a1edbf0501a7dac017e1740ac9509f5b335dabbe51428
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpos-lightgray.png?logo=github
:target: https://github.com/OCA/pos/tree/17.0/pos_cash_control_extension
:alt: OCA/pos
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/pos-17-0/pos-17-0-pos_cash_control_extension
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/pos&target_branch=17.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This module allows us to always keep a cash fund and ensure that there
are no differences when opening and closing a session.

**Table of contents**

.. contents::
:local:

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/pos/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/pos/issues/new?body=module:%20pos_cash_control_extension%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
-------

* Antoni Marroig Campomar
* APSL-Nagarro

Contributors
------------

- `APSL-Nagarro <https://apsl.tech>`__:

- Antoni Marroig <amarroig@apsl.net>

Maintainers
-----------

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

.. |maintainer-peluko00| image:: https://github.com/peluko00.png?size=40px
:target: https://github.com/peluko00
:alt: peluko00

Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-peluko00|

This module is part of the `OCA/pos <https://github.com/OCA/pos/tree/17.0/pos_cash_control_extension>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
3 changes: 3 additions & 0 deletions pos_cash_control_extension/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from . import models
17 changes: 17 additions & 0 deletions pos_cash_control_extension/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Copyright 2024 Antoni Marroig(APSL-Nagarro)<amarroig@apsl.net>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Cash Control Extension",
"summary": "This module extends the cash in/out control",
"version": "17.0.1.0.0",
"category": "POS",
"author": "Antoni Marroig Campomar, APSL-Nagarro, Odoo Community Association (OCA)",
"maintainers": ["peluko00"],
"website": "https://github.com/OCA/pos",
"license": "AGPL-3",
"application": False,
"installable": True,
"depends": [
"point_of_sale",
],
}
3 changes: 3 additions & 0 deletions pos_cash_control_extension/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from . import pos_session
52 changes: 52 additions & 0 deletions pos_cash_control_extension/models/pos_session.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Copyright 2024 Antoni Marroig(APSL-Nagarro)<amarroig@apsl.net>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import models


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

def set_cashbox_pos(self, cashbox_value: int, notes: str):
self.state = "opened"
self.opening_notes = notes
self.cash_register_balance_start = cashbox_value
self._post_cash_details_message("Opening", 0.0, notes)

def get_closing_control_data(self):
res = super().get_closing_control_data()
orders = self._get_closed_orders()
cash_payment_method_ids = self.payment_method_ids.filtered(
lambda pm: pm.type == "cash"
)
default_cash_payment_method_id = (
cash_payment_method_ids[0] if cash_payment_method_ids else None
)
payments = orders.payment_ids.filtered(
lambda p: p.payment_method_id.type != "pay_later"
)
total_default_cash_payment_amount = (
sum(
payments.filtered(
lambda p: p.payment_method_id == default_cash_payment_method_id
).mapped("amount")
)
if default_cash_payment_method_id
else 0
)
if "default_cash_details" in res and res["default_cash_details"]:
res["default_cash_details"]["opening"] = self.cash_register_balance_start
res["default_cash_details"]["amount"] = (
self.cash_register_balance_start
+ total_default_cash_payment_amount
+ sum(self.sudo().statement_line_ids.mapped("amount"))
)
return res

def _post_statement_difference(self, amount, is_opening):
pass

def post_closing_cash_details(self, counted_cash):
res = super().post_closing_cash_details(counted_cash)
self.cash_register_balance_end_real = self.cash_register_balance_start or 0.0
return res
3 changes: 3 additions & 0 deletions pos_cash_control_extension/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"
2 changes: 2 additions & 0 deletions pos_cash_control_extension/readme/CONTRIBUTORS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
- [APSL-Nagarro](<https://apsl.tech>):
- Antoni Marroig \<<amarroig@apsl.net>\>
1 change: 1 addition & 0 deletions pos_cash_control_extension/readme/DESCRIPTION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This module allows us to always keep a cash fund and ensure that there are no differences when opening and closing a session.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
79 changes: 79 additions & 0 deletions pos_cash_control_extension/static/description/icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
124 changes: 124 additions & 0 deletions pos_cash_control_extension/static/description/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="oe_span12">
<h2 class="oe_slogan">Module name</h2>
<p>This module was written to extend the functionality of ... to support ... and allow you to ...</p>
</div>
</div>
</section>

<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div class="oe_span12">
<h2 class="oe_slogan">Installation</h2>
</div>
<div class="oe_span6">
<p class="oe_mt32">To install this module, you need to:
<ul>
<li>...</li>
</ul>
</p>
</div>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<a href="https://www.odoo.com/saas_master/demo?lang=en_US&module=crm">
<img src="crm_sc_01.png">
</a>
</div>
</div>
</div>
</section>

<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="oe_span12">
<h2 class="oe_slogan">Configuration</h2>
</div>
<div class="oe_span6">
<p class="oe_mt32">To configure this module, you need to:
<ul>
<li>...</li>
</ul>
</p>
</div>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<a href="https://www.odoo.com/saas_master/demo?lang=en_US&module=crm">
<img src="crm_sc_01.png">
</a>
</div>
</div>
</div>
</section>

<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<div class="oe_span12">
<h2 class="oe_slogan">Usage</h2>
</div>
<div class="oe_span6">
<p class="oe_mt32">To use this module, you need to:
<ul>
<li>...</li>
</ul>
</p>
<p class="oe_mt32">For further information, please visit:
<ul>
<li><a href="https://www.odoo.com/forum/help-1">https://www.odoo.com/forum/help-1</a></li>
</ul>
</p>
</div>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<a href="https://www.odoo.com/saas_master/demo?lang=en_US&module=crm">
<img src="crm_sc_01.png">
</a>
</div>
</div>
</div>
</section>

<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="oe_span12">
<h2 class="oe_slogan">Known issues / Roadmap</h2>
</div>
<div class="oe_span6">
<p class="oe_mt32">
<ul>
<li>...</li>
</ul>
</p>
</div>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<a href="https://www.odoo.com/saas_master/demo?lang=en_US&module=crm">
<img src="crm_sc_01.png">
</a>
</div>
</div>
</div>
</section>

<section class="oe_container oe_dark">
<div class="oe_row">
<div class="oe_span12">
<h2 class="oe_slogan">Credits</h2>
</div>
<div class="oe_span12">
<h3>Contributors</h3>
<ul>
<li>Firstname Lastname &lt;<a href="mailto:email.address@example.com">email.address@example.com</a>&gt;</li>
</ul>
</div>
<div class="oe_span12">
<h3>Maintainer</h3>
<p>
This module is maintained by the OCA.<br/>
OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.<br/>
To contribute to this module, please visit <a href="http://odoo-community.org">http://odoo-community.org</a>.<br/>
<a href="http://odoo-community.org"><img class="oe_picture oe_centered" src="http://odoo-community.org/logo.png"></a>
</p>
</div>
</div>
</section>
3 changes: 3 additions & 0 deletions pos_cash_control_extension/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from . import test_cash_control
37 changes: 37 additions & 0 deletions pos_cash_control_extension/tests/test_cash_control.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Copyright 2024 Antoni Marroig(APSL-Nagarro)<amarroig@apsl.net>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo.tests.common import TransactionCase


class SomethingCase(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.config_id = cls.env.ref("point_of_sale.pos_config_main")
cls.session_id = cls.env["pos.session"].create(
{
"config_id": cls.config_id.id,
"user_id": cls.env.ref("base.user_admin").id,
}
)
cls.session_id.set_cashbox_pos(150.0, "")
cls.session_id.try_cash_in_out("in", 20.0, "In", {"translatedType": "in"})

def test_pos_session_closing_control(self):
self.session_id.action_pos_session_closing_control(False, 170.0, None)
self.assertEqual(
self.session_id.get_closing_control_data()["default_cash_details"][
"amount"
],
170.0,
)
self.assertEqual(
self.session_id.get_closing_control_data()["default_cash_details"][
"opening"
],
150.0,
)
self.session_id.post_closing_cash_details(170.0)
self.assertEqual(self.session_id.cash_register_balance_end_real, 150.0)
self.assertEqual(self.session_id.cash_register_balance_start, 150.0)

0 comments on commit b947703

Please sign in to comment.