Skip to content

Commit

Permalink
[IMP] Rename point_of_payment as account_cashbox. rename methods, fie…
Browse files Browse the repository at this point in the history
…lds and models acording de new name

[IMP] Some views and UX Improvements
  • Loading branch information
filoquin committed Mar 23, 2023
1 parent 336b087 commit 0102b7d
Show file tree
Hide file tree
Showing 20 changed files with 294 additions and 269 deletions.
14 changes: 7 additions & 7 deletions account_cashbox/__manifest__.py
Expand Up @@ -3,7 +3,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Cashbox management",
"summary": "Introduces concept of point of payment and accounting journal sessions",
"summary": "Introduces concept cashbox and accounting journal sessions",
"version": "16.0.1.0.1",
"category": "Accounting",
"website": "www.adhoc.com.ar",
Expand All @@ -17,18 +17,18 @@
# ya que los mismos no se usan con payment group
],
"demo": [
'demo/point_of_payment_demo.xml',
'demo/cashbox_demo.xml',
],
"data": [
'security/pop_security.xml',
'security/cashbox_security.xml',
'security/ir.model.access.csv',
'views/pop_session_views.xml',
'views/pop_config_views.xml',
'views/account_cashbox_session.xml',
'views/account_cashbox.xml',
'views/res_users_views.xml',
'views/account_payment.xml',
# 'views/templates.xml',
'wizards/pop_payment_import.xml',
'wizards/account_cashbox_payment_import.xml',
],
"installable": True,
"application": True,
"application": False,
}
Expand Up @@ -26,43 +26,43 @@
<field name="code">VIA01</field>
</record>

<!-- Sequences and pop.configs -->
<!-- Sequences and cashbox -->

<record id="sequence_pop_config_caja_1" model="ir.sequence">
<record id="sequence_account_cashbox_caja_1" model="ir.sequence">
<field name="name">Caja 01</field>
<field name="code">pop_config_sequence</field>
<field name="code">account_cashbox_sequence</field>
<field name="prefix">caja1-</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
</record>

<!-- Caja 1, para demo pero admin tambien puede usarla por ser admin -->
<record id="pop_config_caja_1" model="pop.config">
<record id="pop_config_caja_1" model="account.cashbox">
<field name="name">Caja 01 (sin cash control)</field>
<field name="sequence_id" ref="sequence_pop_config_caja_1" />
<field name="sequence_id" ref="sequence_account_cashbox_caja_1" />
<field name="journal_ids" eval="[(6, 0, [ref('journal_cajas'), ref('journal_billetera_virtual')])]"/>
<field name="cash_control_journal_ids" eval="[(6, 0, [ref('journal_cajas')])]"/>
<field name="allowed_res_users_ids" eval="[(6,0,[ref('base.user_demo')])]"/>
</record>

<record id="sequence_pop_config_caja_2" model="ir.sequence">
<record id="sequence_account_cashbox_caja_2" model="ir.sequence">
<field name="name">Caja 02</field>
<field name="code">pop_config_sequence</field>
<field name="code">account_cashbox_sequence</field>
<field name="prefix">caja2-</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
</record>

<!-- Caja 2, solo para admin y sin cash control -->
<record id="pop_config_caja_2" model="pop.config">
<record id="pop_config_caja_2" model="account.cashbox">
<field name="name">Caja 02 (con cash control)</field>
<field name="sequence_id" ref="sequence_pop_config_caja_2" />
<field name="sequence_id" ref="sequence_account_cashbox_caja_2" />
<field name="journal_ids" eval="[(6, 0, [ref('journal_billetera_virtual')])]"/>
<field name="allowed_res_users_ids" eval="[(6,0,[ref('base.user_admin')])]"/>
</record>

<!-- Viaticos, solo para admin -->
<record id="pop_config_viaticos" model="pop.config">
<record id="pop_config_viaticos" model="account.cashbox">
<field name="name">Viaticos</field>
<field name="allow_concurrent_sessions" eval="True" />
<field name="journal_ids" eval="[(6,0,[ref('journal_viaticos')])]"/>
Expand All @@ -71,17 +71,17 @@
</record>

<!-- Caja central, para probar las transferencias e importar -->
<record id="sequence_pop_config_caja_central" model="ir.sequence">
<record id="sequence_account_cashbox_caja_central" model="ir.sequence">
<field name="name">Caja Central</field>
<field name="code">pop_config_sequence</field>
<field name="code">account_cashbox_sequence</field>
<field name="prefix">CC-</field>
<field name="padding">5</field>
<field name="company_id" eval="False"/>
</record>

<record id="pop_config_caja_central" model="pop.config">
<record id="pop_config_caja_central" model="account.cashbox">
<field name="name">Caja Central</field>
<field name="sequence_id" ref="sequence_pop_config_caja_central" />
<field name="sequence_id" ref="sequence_account_cashbox_caja_central" />
<field name="journal_ids" eval="[(6,0,[ref('journal_caja_central')])]"/>
<field name="cash_control_journal_ids" eval="[(6,0,[ref('journal_caja_central')])]"/>
<field name="allowed_res_users_ids" eval="[(6,0,[ref('base.user_admin')])]"/>
Expand Down
6 changes: 3 additions & 3 deletions account_cashbox/models/__init__.py
@@ -1,5 +1,5 @@
from . import pop_config
from . import pop_session
from . import pop_session_journal_control
from . import account_cashbox
from . import account_cashbox_session
from . import account_cashbox_session_line
from . import res_users
from . import account_payment
15 changes: 12 additions & 3 deletions account_cashbox/models/account_cashbox.py
Expand Up @@ -19,7 +19,7 @@ class AccountCashbox(models.Model):
'account.journal', 'cashbox_journal_rel', 'cashbox_id', 'journal_id', required=True,
string='Payment method', domain=[('type', 'in', ['bank', 'cash'])], check_company=True)
allowed_res_users_ids = fields.Many2many(
'res.users', relation='cashbox_config_users_rel', column1='cashbox_id', column2='user_id',)
'res.users', relation='account_cashbox_users_rel', column1='cashbox_id', column2='user_id',)
cash_control_journal_ids = fields.Many2many('account.journal')
session_ids = fields.One2many('account.cashbox.session', 'cashbox_id')
sequence_id = fields.Many2one('ir.sequence', help="Numbering of cash sessions.", copy=False,)
Expand All @@ -36,9 +36,18 @@ def _compute_current_session(self):
cashbox.current_session_id = session and session[0].id or False
cashbox.current_concurrent_session_ids = session and session.ids or False

def action_open_cashbox(self):
self.ensure_one()
action = {
'name': ('Cashbox'),
'view_mode': 'form,tree',
'res_model': 'account.cashbox',
'res_id': self.id,
'type': 'ir.actions.act_window',
}
return action

def action_open_session(self):
""" open current session or to create a new one if None
"""
self.ensure_one()
action = {
'name': ('Session'),
Expand Down
26 changes: 13 additions & 13 deletions account_cashbox/models/account_cashbox_session.py
Expand Up @@ -30,7 +30,7 @@ class AccountCashboxSession(models.Model):
POP_SESSION_STATE, required=True, readonly=False, tracking=True,
index=True, copy=False, default='draft')
line_ids = fields.One2many(
'account.cashbox.session.line', 'account_cashbox_session_id', compute='_compute_line_ids', store=True, readonly=False)
'account.cashbox.session.line', 'cashbox_session_id', compute='_compute_line_ids', store=True, readonly=False)
payment_ids = fields.One2many('account.payment', 'account_cashbox_session_id')
require_cash_control = fields.Boolean('require_cash_control', compute='_compute_require_cash_control')
allow_concurrent_sessions = fields.Boolean(related='cashbox_id.allow_concurrent_sessions')
Expand All @@ -47,12 +47,12 @@ def _compute_name(self):
def _compute_line_ids(self):
for rec in self:
balance_start = {}
if rec.allow_concurrent_sessions:
if not rec.allow_concurrent_sessions:
# TODO se podria hacer un read group aunque balance_end por ahora no es stored
for journal in rec.cashbox_id.cash_control_journal_ids:
balance_start[journal.id] = rec.env['pop.session.journal_control'].sudo().search([
('account_cashbox_session_id.cashbox_id', '=', rec.cashbox_id.id),
('journal_id', '=', journal.id), ('account_cashbox_session_id.state', '=', 'closed')], limit=1).balance_end
balance_start[journal.id] = rec.env['account.cashbox.session.line'].sudo().search([
('cashbox_session_id.cashbox_id', '=', rec.cashbox_id.id),
('journal_id', '=', journal.id), ('cashbox_session_id.state', '=', 'closed')], limit=1).balance_end
rec.line_ids = [Command.clear()] + [
Command.create({
'journal_id': journal.id,
Expand All @@ -68,17 +68,17 @@ def create(self, vals_list):
return super().create(vals_list)

def action_import_payments(self):
view_id = self.env.ref('point_of_payment.pop_payment_import_view_form').id
view_id = self.env.ref('account_cashbox.cashbox_payment_import_view_form').id
view = {
"name": _("Import payment"),
"view_mode": "form",
"view_id": view_id,
"view_type": "form",
"res_model": "pop.payment.import",
"res_model": "account.cashbox.payment.import",
"res_id": False,
"type": "ir.actions.act_window",
"target": "new",
"context": {"default_cashbox_id": self.cashbox_id.id, 'default_account_cashbox_session_id': self.id},
"context": {"default_cashbox_id": self.cashbox_id.id, 'default_cashbox_session_id': self.id},
}
return view

Expand All @@ -87,10 +87,10 @@ def _compute_require_cash_control(self):
for rec in self:
rec.require_cash_control = bool(len(rec.cashbox_id.cash_control_journal_ids))

def action_pop_session_reopen(self):
def action_account_cashbox_session_reopen(self):
self.state = 'draft'

def action_pop_session_open(self):
def action_account_cashbox_session_open(self):
for session in self:
values = {}
if not session.opening_date:
Expand All @@ -106,7 +106,7 @@ def action_closing_control(self):
values['state'] = 'closing_control'
session.write(values)

def action_pop_session_close(self):
def action_account_cashbox_session_close(self):
self.write({'state': 'closed'})

@api.constrains('state')
Expand All @@ -116,10 +116,10 @@ def _check_pop_session_balance(self):
# if amounts are the same do not check
if rec.company_id.currency_id.compare_amounts(line.balance_end, line.balance_end_real) == 0:
continue
max_diff_in_currency = line.account_cashbox_session_id.cashbox_id.max_diff
max_diff_in_currency = line.cashbox_session_id.cashbox_id.max_diff
if line.journal_id.currency_id:
max_diff_in_currency = line.journal_id.currency_id._convert(
line.account_cashbox_session_id.cashbox_id.max_diff, line.account_cashbox_session_id.cashbox_id.company_id.currency_id)
line.cashbox_session_id.cashbox_id.max_diff, line.cashbox_session_id.cashbox_id.company_id.currency_id)

diff = abs(line.balance_end - line.balance_end_real)
if diff > max_diff_in_currency:
Expand Down
Expand Up @@ -7,10 +7,10 @@

class PopSessionJournalControl(models.Model):

_name = 'pop.session.journal_control'
_name = 'account.cashbox.session.line'
_description = 'session journal'

pop_session_id = fields.Many2one('pop.session', string='Session', required=True, ondelete='cascade')
cashbox_session_id = fields.Many2one('account.cashbox.session', string='Session', required=True, ondelete='cascade')
journal_id = fields.Many2one('account.journal', required=True, ondelete='cascade')
# a balance_start por ahora lo estamos almacenando y no lo hacemos computado directamente cosa de que si cambia
# algo en el orden o en el medio no se recompute todo. Balance end por ahora si lo computamos on the fly porque de
Expand All @@ -23,15 +23,15 @@ class PopSessionJournalControl(models.Model):
currency_id = fields.Many2one('res.currency', compute="_compute_curency")
require_cash_control = fields.Boolean('require_cash_control', compute='_compute_require_cash_control')

_sql_constraints = [('uniq_line', 'unique(pop_session_id, journal_id)', "Control line must be unique")]
_sql_constraints = [('uniq_line', 'unique(cashbox_session_id, journal_id)', "Control line must be unique")]

@api.depends('pop_session_id.payment_ids.state', 'balance_start')
@api.depends('cashbox_session_id.payment_ids.state', 'balance_start')
def _compute_amounts(self):
# agrupamos por session porque lo mas usual es ver todos los registors de una misma session
for session in self.mapped('pop_session_id'):
session_recs = self.filtered(lambda x: x.pop_session_id == session)
for session in self.mapped('cashbox_session_id'):
session_recs = self.filtered(lambda x: x.cashbox_session_id == session)
balance_lines = self.env['account.payment'].read_group([
('pop_session_id', '=', session.id), ('state', '=', 'posted'),
('account_cashbox_session_id', '=', session.id), ('state', '=', 'posted'),
('journal_id', 'in', session_recs.mapped('journal_id').ids)],
['amount_total_signed'], ['journal_id'], lazy=False)
for balance_line in balance_lines:
Expand All @@ -42,10 +42,10 @@ def _compute_amounts(self):
self.amount = False
self.balance_end = False

@api.depends('pop_session_id.pop_id.cash_control_journal_ids', 'journal_id')
@api.depends('cashbox_session_id.cashbox_id.cash_control_journal_ids', 'journal_id')
def _compute_require_cash_control(self):
for rec in self:
rec.require_cash_control = rec.journal_id.id in rec.pop_session_id.pop_id.cash_control_journal_ids.ids
rec.require_cash_control = rec.journal_id.id in rec.cashbox_session_id.cashbox_id.cash_control_journal_ids.ids

@api.depends('journal_id')
def _compute_curency(self):
Expand All @@ -54,4 +54,4 @@ def _compute_curency(self):

def action_session_payments(self):
view = self.env.ref('account.view_account_payment_tree')
return self.with_context(search_default_journal_id=self.journal_id.id).pop_session_id.action_session_payments()
return self.with_context(search_default_journal_id=self.journal_id.id).cashbox_session_id.action_session_payments()
4 changes: 2 additions & 2 deletions account_cashbox/models/account_payment.py
Expand Up @@ -69,10 +69,10 @@ def action_cancel(self):
def _compute_available_journal_ids(self):
super()._compute_available_journal_ids()
for pay in self.filtered('account_cashbox_session_id'):
# hacemos dominio sobre los journal_control_ids y no los diarios del pop config porque
# hacemos dominio sobre los line_ids y no los diarios del pop config porque
# puede ser que sea una sesion vieja y que el setting pop config cambie
pay.available_journal_ids = pay.available_journal_ids._origin.filtered(
lambda x: x in pay.account_cashbox_session_id.journal_control_ids.mapped('journal_id'))
lambda x: x in pay.account_cashbox_session_id.line_ids.mapped('journal_id'))

@api.onchange('account_cashbox_session_id')
def _onchange_cashbox_session(self):
Expand Down
10 changes: 5 additions & 5 deletions account_cashbox/models/res_users.py
Expand Up @@ -9,10 +9,10 @@
class ResUsers(models.Model):
_inherit = 'res.users'

allowed_pop_config_ids = fields.Many2many(
'pop.config',
relation='pop_config_users_rel',
allowed_cashbox_ids = fields.Many2many(
'account.cashbox',
relation='account_cashbox_users_rel',
column1='user_id',
column2='config_id',
column2='cashbox_id',
)
requiere_pop_session = fields.Boolean()
requiere_account_cashbox_session = fields.Boolean()
46 changes: 46 additions & 0 deletions account_cashbox/security/cashbox_security.xml
@@ -0,0 +1,46 @@
<?xml version="1.0" ?>
<odoo>

<record id="cashbox_company_rule" model="ir.rule">
<field name="name">Cashbox multi-company</field>
<field name="model_id" ref="model_account_cashbox"/>
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
</record>

<record id="cashbox_session_company_rule" model="ir.rule">
<field name="name">Cashbox Session multi-company</field>
<field name="model_id" ref="model_account_cashbox_session"/>
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
</record>

<record id="cashbox_user" model="ir.rule">
<field name="name">Cashbox Invoicing User</field>
<field name="model_id" ref="model_account_cashbox"/>
<field name="domain_force">[('allowed_res_users_ids', '=', user.id)]</field>
<field name="groups" eval="[(4, ref('account.group_account_invoice'))]"/>
</record>

<record id="cashbox_admin" model="ir.rule">
<field name="name">Cashbox Invoicing Manager</field>
<field name="model_id" ref="model_account_cashbox"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('account.group_account_manager'))]"/>
</record>

<!-- invoicing user, only sessions -->
<record id="cashbox_session_user" model="ir.rule">
<field name="name">Cashbox Session Invoicing User</field>
<field name="model_id" ref="model_account_cashbox_session"/>
<field name="domain_force">[('user_ids', '=', user.id)]</field>
<field name="groups" eval="[(4, ref('account.group_account_invoice'))]"/>
</record>

<!-- admin user, all sessions -->
<record id="cashbox_session_admin" model="ir.rule">
<field name="name">Cashbox Session Invoicing Manager</field>
<field name="model_id" ref="model_account_cashbox_session"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('account.group_account_manager'))]"/>
</record>

</odoo>

0 comments on commit 0102b7d

Please sign in to comment.