Merge PR #937 into 13.0

Signed-off-by gurneyalex
This commit is contained in:
OCA-git-bot
2020-12-08 07:48:12 +00:00
19 changed files with 854 additions and 0 deletions

View File

@@ -0,0 +1,96 @@
=======================================
Account Fiscal Position Allowed Journal
=======================================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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%2Faccount--financial--tools-lightgray.png?logo=github
:target: https://github.com/OCA/account-financial-tools/tree/13.0/account_fiscal_position_allowed_journal
:alt: OCA/account-financial-tools
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/account-financial-tools-13-0/account-financial-tools-13-0-account_fiscal_position_allowed_journal
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/92/13.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
Allow defining allowed journals on fiscal positions.
Related invoices can only use one of the allowed journals on the fiscal position.
**Table of contents**
.. contents::
:local:
Configuration
=============
On a fiscal position, a new field allows to select one or several accounting journals.
Usage
=====
When creating an invoice, if a fiscal position with allowed journal(s) is set,
only one of these journal can be used on the invoice.
If there is no fiscal position on the invoice or no allowed journal on the selected fiscal position,
the standard behavior is preserved.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-financial-tools/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/account-financial-tools/issues/new?body=module:%20account_fiscal_position_allowed_journal%0Aversion:%2013.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
~~~~~~~
* ACSONE SA/NV
Contributors
~~~~~~~~~~~~
* Thomas Binsfeld <thomas.binsfeld@acsone.eu> (https://www.acsone.eu/)
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-ThomasBinsfeld| image:: https://github.com/ThomasBinsfeld.png?size=40px
:target: https://github.com/ThomasBinsfeld
:alt: ThomasBinsfeld
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-ThomasBinsfeld|
This module is part of the `OCA/account-financial-tools <https://github.com/OCA/account-financial-tools/tree/13.0/account_fiscal_position_allowed_journal>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@@ -0,0 +1 @@
from . import models

View File

@@ -0,0 +1,20 @@
# Copyright 2020 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Account Fiscal Position Allowed Journal",
"summary": """
Allow defining allowed journals on fiscal positions.
Related invoices can only use one of the allowed journals on the
fiscal position.""",
"version": "13.0.1.0.0",
"development_status": "Beta",
"category": "Accounting/Accounting",
"license": "AGPL-3",
"author": "ACSONE SA/NV, Odoo Community Association (OCA)",
"maintainers": ["ThomasBinsfeld"],
"website": "https://github.com/OCA/account-financial-tools",
"depends": ["account"],
"data": ["views/account_fiscal_position.xml"],
"demo": [],
}

View File

@@ -0,0 +1,37 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_fiscal_position_allowed_journal
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-02-03 12:29+0000\n"
"PO-Revision-Date: 2020-02-03 12:29+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: account_fiscal_position_allowed_journal
#: model:ir.model.fields,field_description:account_fiscal_position_allowed_journal.field_account_fiscal_position__allowed_journal_ids
msgid "Allowed journals"
msgstr ""
#. module: account_fiscal_position_allowed_journal
#: model:ir.model,name:account_fiscal_position_allowed_journal.model_account_fiscal_position
msgid "Fiscal Position"
msgstr ""
#. module: account_fiscal_position_allowed_journal
#: model:ir.model,name:account_fiscal_position_allowed_journal.model_account_move
msgid "Journal Entries"
msgstr ""
#. module: account_fiscal_position_allowed_journal
#: code:addons/account_fiscal_position_allowed_journal/models/account_move.py:0
#, python-format
msgid "The journal is not allowed on the fiscal position."
msgstr ""

View File

@@ -0,0 +1,37 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * account_fiscal_position_allowed_journal
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-02-03 12:31+0000\n"
"PO-Revision-Date: 2020-02-03 12:31+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: account_fiscal_position_allowed_journal
#: model:ir.model.fields,field_description:account_fiscal_position_allowed_journal.field_account_fiscal_position__allowed_journal_ids
msgid "Allowed journals"
msgstr "Journaux autorisés"
#. module: account_fiscal_position_allowed_journal
#: model:ir.model,name:account_fiscal_position_allowed_journal.model_account_fiscal_position
msgid "Fiscal Position"
msgstr "Position fiscale"
#. module: account_fiscal_position_allowed_journal
#: model:ir.model,name:account_fiscal_position_allowed_journal.model_account_move
msgid "Journal Entries"
msgstr "Pièces comptables"
#. module: account_fiscal_position_allowed_journal
#: code:addons/account_fiscal_position_allowed_journal/models/account_move.py:0
#, python-format
msgid "The journal is not allowed on the fiscal position."
msgstr "Le journal n'est pas autorisé sur la position fiscale."

View File

@@ -0,0 +1,2 @@
from . import account_fiscal_position
from . import account_move

View File

@@ -0,0 +1,21 @@
# Copyright 2020 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class AccountFiscalPosition(models.Model):
_inherit = "account.fiscal.position"
allowed_journal_ids = fields.Many2many(
string="Allowed journals", comodel_name="account.journal"
)
def _get_allowed_journal(self, journal_type):
"""
Returns the journal matching the given type only if there is only one.
:return: account.journal record
"""
self.ensure_one()
journals = self.allowed_journal_ids.filtered(lambda j: j.type == journal_type)
return journals if len(journals) == 1 else self.env["account.journal"].browse()

View File

@@ -0,0 +1,54 @@
# Copyright 2020 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, models
from odoo.exceptions import UserError
class AccountMove(models.Model):
_inherit = "account.move"
@api.onchange("fiscal_position_id")
def _onchange_fiscal_position_allowed_journal(self):
self.ensure_one()
journal_domain = [
("company_id", "=", self.company_id.id),
("type", "=?", self.invoice_filter_type_domain),
]
if self.fiscal_position_id:
journal_type = "sale" if self.is_sale_document() else "purchase"
allowed_journal = self.fiscal_position_id._get_allowed_journal(journal_type)
if allowed_journal:
self.journal_id = allowed_journal
journal_domain.append(
("id", "in", self.fiscal_position_id.allowed_journal_ids.ids)
)
return {"domain": {"journal_id": journal_domain}}
def _check_journal_allowed_fiscal_position(self):
"""
This method checks whether the journal of the invoice is allowed for the
selected fiscal position.
If no fiscal position or no allowed journal on the fiscal position, always OK.
:raise: UserError if not allowed
"""
for rec in self:
if (
rec.is_invoice(include_receipts=True)
and self.fiscal_position_id
and self.fiscal_position_id.allowed_journal_ids
and rec.journal_id not in self.fiscal_position_id.allowed_journal_ids
):
raise UserError(
_(
"Journal {journal_name} is not allowed for fiscal position "
"{fp_name}."
).format(
journal_name=rec.journal_id.display_name,
fp_name=rec.fiscal_position_id.display_name,
)
)
def post(self):
self._check_journal_allowed_fiscal_position()
return super().post()

View File

@@ -0,0 +1 @@
On a fiscal position, a new field allows to select one or several accounting journals.

View File

@@ -0,0 +1 @@
* Thomas Binsfeld <thomas.binsfeld@acsone.eu> (https://www.acsone.eu/)

View File

@@ -0,0 +1,2 @@
Allow defining allowed journals on fiscal positions.
Related invoices can only use one of the allowed journals on the fiscal position.

View File

@@ -0,0 +1,5 @@
When creating an invoice, if a fiscal position with allowed journal(s) is set,
only one of these journal can be used on the invoice.
If there is no fiscal position on the invoice or no allowed journal on the selected fiscal position,
the standard behavior is preserved.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@@ -0,0 +1,435 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.14: http://docutils.sourceforge.net/" />
<title>Account Fiscal Position Allowed Journal</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="account-fiscal-position-allowed-journal">
<h1 class="title">Account Fiscal Position Allowed Journal</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/account-financial-tools/tree/13.0/account_fiscal_position_allowed_journal"><img alt="OCA/account-financial-tools" src="https://img.shields.io/badge/github-OCA%2Faccount--financial--tools-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/account-financial-tools-13-0/account-financial-tools-13-0-account_fiscal_position_allowed_journal"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/92/13.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>Allow defining allowed journals on fiscal positions.
Related invoices can only use one of the allowed journals on the fiscal position.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="id1">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="id2">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id3">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id4">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id5">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id6">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id7">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#id1">Configuration</a></h1>
<p>On a fiscal position, a new field allows to select one or several accounting journals.</p>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#id2">Usage</a></h1>
<p>When creating an invoice, if a fiscal position with allowed journal(s) is set,
only one of these journal can be used on the invoice.</p>
<p>If there is no fiscal position on the invoice or no allowed journal on the selected fiscal position,
the standard behavior is preserved.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id3">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/account-financial-tools/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/account-financial-tools/issues/new?body=module:%20account_fiscal_position_allowed_journal%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#id4">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#id5">Authors</a></h2>
<ul class="simple">
<li>ACSONE SA/NV</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#id6">Contributors</a></h2>
<ul class="simple">
<li>Thomas Binsfeld &lt;<a class="reference external" href="mailto:thomas.binsfeld&#64;acsone.eu">thomas.binsfeld&#64;acsone.eu</a>&gt; (<a class="reference external" href="https://www.acsone.eu/">https://www.acsone.eu/</a>)</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id7">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>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.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external" href="https://github.com/ThomasBinsfeld"><img alt="ThomasBinsfeld" src="https://github.com/ThomasBinsfeld.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/account-financial-tools/tree/13.0/account_fiscal_position_allowed_journal">OCA/account-financial-tools</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1 @@
from . import test_account_fiscal_position_allowed_journal

View File

@@ -0,0 +1,117 @@
# Copyright 2020 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.exceptions import UserError
from odoo.tests.common import SavepointCase
class TestAccountFiscalPositionAllowedJournal(SavepointCase):
@classmethod
def setUpClass(cls):
super(TestAccountFiscalPositionAllowedJournal, cls).setUpClass()
# MODELS
cls.account_model = cls.env["account.account"]
cls.fiscal_position_model = cls.env["account.fiscal.position"]
cls.invoice_model = cls.env["account.move"]
cls.journal_model = cls.env["account.journal"]
cls.partner_model = cls.env["res.partner"]
# INSTANCES
cls.account_account_01 = cls.account_model.search(
[("code", "ilike", "4%")], limit=1
)
cls.fiscal_position_01 = cls.fiscal_position_model.create(
{"name": "Fiscal position 01"}
)
cls.journal_01 = cls.journal_model.search([("type", "=", "sale")], limit=1)
cls.journal_02 = cls.journal_01.copy()
cls.partner_01 = cls.partner_model.search([], limit=1)
cls.invoice_01 = cls.invoice_model.create(
{
"type": "out_invoice",
"partner_id": cls.partner_01.id,
"journal_id": cls.journal_01.id,
"fiscal_position_id": cls.fiscal_position_01.id,
"invoice_line_ids": [
(
0,
None,
{
"name": "Invoice line 01",
"price_unit": 1,
"quantity": 1,
"account_id": cls.account_account_01.id,
},
)
],
}
)
def test_01(self):
"""
Data:
- A draft invoice with a journal and a fiscal position
- The fiscal position has no allowed journal
Test case:
- Validate the invoice
Expected result:
- The invoice is validated
"""
self.assertEqual(self.invoice_01.state, "draft")
self.invoice_01.post()
self.assertEqual(self.invoice_01.state, "posted")
def test_02(self):
"""
Data:
- A draft invoice with a journal and a fiscal position
- The fiscal position has an allowed journal, which is not
the one selected on the invoice
Test case:
- Validate the invoice
Expected result:
- UseError is raised
"""
self.fiscal_position_01.allowed_journal_ids = [(6, 0, self.journal_02.ids)]
self.assertEqual(self.invoice_01.state, "draft")
with self.assertRaises(UserError):
self.invoice_01.post()
self.assertEqual(self.invoice_01.state, "draft")
def test_03(self):
"""
Data:
- A draft invoice with a journal and a fiscal position
- The fiscal position has an allowed journal, which is the one
selected on the invoice
Test case:
- Validate the invoice
Expected result:
- This invoice is validated
"""
self.fiscal_position_01.allowed_journal_ids = [(6, 0, self.journal_01.ids)]
self.assertEqual(self.invoice_01.state, "draft")
self.invoice_01.post()
self.assertEqual(self.invoice_01.state, "posted")
def test_04(self):
"""
Data:
- A draft invoice with a journal and no fiscal position
- The fiscal position has an allowed journal, which is not the one
selected on the invoice
Test case:
- Set the fiscal position on the invoice, trigger the onchange
Expected result:
- The journal is replaced by the on on the fiscal position
"""
self.fiscal_position_01.allowed_journal_ids = [(6, 0, self.journal_02.ids)]
self.assertEqual(self.invoice_01.state, "draft")
self.assertNotIn(
self.invoice_01.journal_id, self.fiscal_position_01.allowed_journal_ids
)
self.invoice_01._onchange_fiscal_position_allowed_journal()
self.assertEqual(
self.invoice_01.journal_id, self.fiscal_position_01.allowed_journal_ids[0]
)

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2020 ACSONE SA/NV
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record model="ir.ui.view" id="account_fiscal_position_form_view">
<field
name="name"
>account.fiscal.position.form (in account_fiscal_position_allowed_journal)</field>
<field name="model">account.fiscal.position</field>
<field name="inherit_id" ref="account.view_account_position_form" />
<field name="arch" type="xml">
<field name="auto_apply" position="after">
<field name="allowed_journal_ids" widget="many2many_tags" />
</field>
</field>
</record>
</odoo>

View File

@@ -0,0 +1 @@
../../../../account_fiscal_position_allowed_journal

View File

@@ -0,0 +1,6 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)