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 17, 2024
1 parent ea613a9 commit 16a05c0
Show file tree
Hide file tree
Showing 15 changed files with 461 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
35 changes: 35 additions & 0 deletions pos_cash_control_extension/models/pos_session.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# 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
26 changes: 26 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,26 @@
# 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)

26 changes: 26 additions & 0 deletions pos_cash_control_extension/views/model_name_view.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright <YEAR(S)> <AUTHOR(S)>
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->

<odoo>

<record id="model_name_view_form" model="ir.ui.view">
<field name="name">My view description</field>
<field name="model">model.name</field>
<field name="arch" type="xml">
<form string="My Data">
<!-- My view content -->
</form>
</field>
</record>

<record id="form_view" model="ir.ui.view">
<field name="name">My view description</field>
<field name="model">model.name</field>
<field name="inherit_id" ref="othermodule.form_view"/>
<field name="arch" type="xml">
<!-- My view modifications -->
</field>
</record>

</odoo>
51 changes: 51 additions & 0 deletions pos_cash_control_extension/views/report_name.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright <YEAR(S)> <AUTHOR(S)>
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->

<odoo>

<!-- Templates -->
<template id="name_report">
<t t-call="report.html_container">
<t t-foreach="doc_ids" t-as="doc_id">
<t t-raw="translate_doc(doc_id, doc_model, 'partner_id.lang',
'module.name_report_translatable')"/>
</t>
</t>
</template>

<template id="name_report_styles" inherit_id="report.style">
<xpath expr=".">
<t>
/* Additional CSS rules for my report if needed */
.something p {
font-size: 42pt;
}
</t>
</xpath>
</template>

<template id="name_report_translatable">
<t t-call="report.external_layout">
<div class="page something">
<p>Here goes something.</p>
</div>
</t>
</template>

<!-- Report action -->
<report
id="name_action"
model="module.some_model"
name="module.name_report"
string="Do something"
report_type="qweb-pdf"
groups="user_group"
attachment="object.state == 'done' and 'something.pdf'"
multi="False"/>

<record id="name_action" model="ir.actions.report.xml">
<field name="paperformat_id" ref="name_paperformat"/>
</record>

</odoo>

0 comments on commit 16a05c0

Please sign in to comment.