Merge PR #814 into 13.0

Signed-off-by rousseldenis
This commit is contained in:
OCA-git-bot
2020-01-10 09:24:02 +00:00
17 changed files with 887 additions and 0 deletions

View File

@@ -0,0 +1,88 @@
====================================
Stock Account Change Quantity Reason
====================================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! 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%2Fstock--logistics--warehouse-lightgray.png?logo=github
:target: https://github.com/OCA/stock-logistics-warehouse/tree/13.0/stock_account_change_qty_reason
:alt: OCA/stock-logistics-warehouse
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/stock-logistics-warehouse-13-0/stock-logistics-warehouse-13-0-stock_account_change_qty_reason
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/153/13.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
This module extends the product stock management and allows to assign specific account
to manage changes on product quantities, either from product wizard or inventory adjustments.
**Table of contents**
.. contents::
:local:
Configuration
=============
For a properly usage of this module, you must:
- Ensure: Inventory > Settings > Inventory Adjustment > Preset Change Qty Reason is enabled
To allow an Stock Manager configure accounts in preset reasons easily, you should:
- Select Stock Manager user on: Settings > Users
- Enable: Technical Settings > Manage Stock Change Qty Preset Reasons
- Go to Inventory > Configuration > Inventory Adjustment > Change Qty Reasons
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/stock-logistics-warehouse/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/stock-logistics-warehouse/issues/new?body=module:%20stock_account_change_qty_reason%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
~~~~~~~
* ForgeFlow
Contributors
~~~~~~~~~~~~
* Héctor Villarreal <hector.villarreal@forgeflow.com>
* Adrià Gil Sorribes <adria.gil@forgeflow.com>
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.
This module is part of the `OCA/stock-logistics-warehouse <https://github.com/OCA/stock-logistics-warehouse/tree/13.0/stock_account_change_qty_reason>`_ 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,15 @@
# Copyright 2019 ForgeFlow S.L.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
"name": "Stock Account Change Quantity Reason",
"summary": """
Stock Account Change Quantity Reason """,
"author": "ForgeFlow, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/stock-logistics-warehouse",
"category": "Warehouse Management",
"version": "13.0.1.0.0",
"license": "AGPL-3",
"depends": ["stock_account", "stock_change_qty_reason"],
"data": ["views/stock_inventory_line_reason_view.xml", "views/stock_move_view.xml"],
"installable": True,
}

View File

@@ -0,0 +1,45 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * stock_account_change_qty_reason
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \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: stock_account_change_qty_reason
#: model:ir.model.fields,field_description:stock_account_change_qty_reason.field_stock_inventory_line_reason__account_reason_input_id
msgid "Input Account for Stock Valuation"
msgstr ""
#. module: stock_account_change_qty_reason
#: model:ir.model.fields,field_description:stock_account_change_qty_reason.field_stock_inventory_line_reason__account_reason_output_id
msgid "Output Account for Stock Valuation"
msgstr ""
#. module: stock_account_change_qty_reason
#: model:ir.model,name:stock_account_change_qty_reason.model_stock_inventory_line_reason
msgid "Stock Inventory Line Reason"
msgstr ""
#. module: stock_account_change_qty_reason
#: model:ir.model,name:stock_account_change_qty_reason.model_stock_move
msgid "Stock Move"
msgstr ""
#. module: stock_account_change_qty_reason
#: model:ir.model.fields,help:stock_account_change_qty_reason.field_stock_inventory_line_reason__account_reason_output_id
msgid "When set, it will be used as offsetting account when products are issued from the company."
msgstr ""
#. module: stock_account_change_qty_reason
#: model:ir.model.fields,help:stock_account_change_qty_reason.field_stock_inventory_line_reason__account_reason_input_id
msgid "When set, it will be used as offsetting account when products are received into the company."
msgstr ""

View File

@@ -0,0 +1,47 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * stock_account_change_qty_reason
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-09-19 16:33+0000\n"
"Last-Translator: 黎伟杰 <674416404@qq.com>\n"
"Language-Team: none\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 3.8\n"
#. module: stock_account_change_qty_reason
#: model:ir.model.fields,field_description:stock_account_change_qty_reason.field_stock_inventory_line_reason__account_reason_input_id
msgid "Input Account for Stock Valuation"
msgstr "库存计价进货科目"
#. module: stock_account_change_qty_reason
#: model:ir.model.fields,field_description:stock_account_change_qty_reason.field_stock_inventory_line_reason__account_reason_output_id
msgid "Output Account for Stock Valuation"
msgstr "库存计价出货科目"
#. module: stock_account_change_qty_reason
#: model:ir.model,name:stock_account_change_qty_reason.model_stock_inventory_line_reason
msgid "Stock Inventory Line Reason"
msgstr "库存盘点行原因"
#. module: stock_account_change_qty_reason
#: model:ir.model,name:stock_account_change_qty_reason.model_stock_move
msgid "Stock Move"
msgstr "库存移动"
#. module: stock_account_change_qty_reason
#: model:ir.model.fields,help:stock_account_change_qty_reason.field_stock_inventory_line_reason__account_reason_output_id
msgid "When set, it will be used as offsetting account when products are issued from the company."
msgstr "设置后,当产品从公司发出时,它将被用作冲销科目。"
#. module: stock_account_change_qty_reason
#: model:ir.model.fields,help:stock_account_change_qty_reason.field_stock_inventory_line_reason__account_reason_input_id
msgid "When set, it will be used as offsetting account when products are received into the company."
msgstr "设置后,当产品被接收到公司时,它将被用作冲销科目。"

View File

@@ -0,0 +1,2 @@
from . import stock_inventory_line_reason
from . import stock_move

View File

@@ -0,0 +1,20 @@
# Copyright 2019 ForgeFlow S.L.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import fields, models
class StockAccountInventoryChangeReason(models.Model):
_inherit = "stock.inventory.line.reason"
account_reason_input_id = fields.Many2one(
"account.account",
string="Input Account for Stock Valuation",
help="When set, it will be used as offsetting account when "
"products are received into the company.",
)
account_reason_output_id = fields.Many2one(
"account.account",
string="Output Account for Stock Valuation",
help="When set, it will be used as offsetting account when "
"products are issued from the company.",
)

View File

@@ -0,0 +1,19 @@
# Copyright 2019 ForgeFlow S.L.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import models
class StockMove(models.Model):
_inherit = "stock.move"
def _get_accounting_data_for_valuation(self):
self.ensure_one()
journal_id, acc_src, acc_dest, acc_valuation = super(
StockMove, self
)._get_accounting_data_for_valuation()
if self.preset_reason_id:
if self.preset_reason_id.account_reason_input_id:
acc_src = self.preset_reason_id.account_reason_input_id.id
if self.preset_reason_id.account_reason_output_id:
acc_dest = self.preset_reason_id.account_reason_output_id.id
return journal_id, acc_src, acc_dest, acc_valuation

View File

@@ -0,0 +1,9 @@
For a properly usage of this module, you must:
- Ensure: Inventory > Settings > Inventory Adjustment > Preset Change Qty Reason is enabled
To allow an Stock Manager configure accounts in preset reasons easily, you should:
- Select Stock Manager user on: Settings > Users
- Enable: Technical Settings > Manage Stock Change Qty Preset Reasons
- Go to Inventory > Configuration > Inventory Adjustment > Change Qty Reasons

View File

@@ -0,0 +1,2 @@
* Héctor Villarreal <hector.villarreal@forgeflow.com>
* Adrià Gil Sorribes <adria.gil@forgeflow.com>

View File

@@ -0,0 +1,2 @@
This module extends the product stock management and allows to assign specific account
to manage changes on product quantities, either from product wizard or inventory adjustments.

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.15.1: http://docutils.sourceforge.net/" />
<title>Stock Account Change Quantity Reason</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="stock-account-change-quantity-reason">
<h1 class="title">Stock Account Change Quantity Reason</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/stock-logistics-warehouse/tree/13.0/stock_account_change_qty_reason"><img alt="OCA/stock-logistics-warehouse" src="https://img.shields.io/badge/github-OCA%2Fstock--logistics--warehouse-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/stock-logistics-warehouse-13-0/stock-logistics-warehouse-13-0-stock_account_change_qty_reason"><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/153/13.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>This module extends the product stock management and allows to assign specific account
to manage changes on product quantities, either from product wizard or inventory adjustments.</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="#bug-tracker" id="id2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="id3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="id4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="id5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="id6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#id1">Configuration</a></h1>
<p>For a properly usage of this module, you must:</p>
<ul class="simple">
<li>Ensure: Inventory &gt; Settings &gt; Inventory Adjustment &gt; Preset Change Qty Reason is enabled</li>
</ul>
<p>To allow an Stock Manager configure accounts in preset reasons easily, you should:</p>
<ul class="simple">
<li>Select Stock Manager user on: Settings &gt; Users</li>
<li>Enable: Technical Settings &gt; Manage Stock Change Qty Preset Reasons</li>
<li>Go to Inventory &gt; Configuration &gt; Inventory Adjustment &gt; Change Qty Reasons</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/stock-logistics-warehouse/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/stock-logistics-warehouse/issues/new?body=module:%20stock_account_change_qty_reason%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="#id3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#id4">Authors</a></h2>
<ul class="simple">
<li>ForgeFlow</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#id5">Contributors</a></h2>
<ul class="simple">
<li>Héctor Villarreal &lt;<a class="reference external" href="mailto:hector.villarreal&#64;forgeflow.com">hector.villarreal&#64;forgeflow.com</a>&gt;</li>
<li>Adrià Gil Sorribes &lt;<a class="reference external" href="mailto:adria.gil&#64;forgeflow.com">adria.gil&#64;forgeflow.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id6">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>This module is part of the <a class="reference external" href="https://github.com/OCA/stock-logistics-warehouse/tree/13.0/stock_account_change_qty_reason">OCA/stock-logistics-warehouse</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_stock_account_change_qty_reason

View File

@@ -0,0 +1,169 @@
# Copyright 2019 ForgeFlow S.L.
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo.tests.common import SavepointCase
class TestStockAccountChangeQtyReason(SavepointCase):
@classmethod
def setUpClass(cls):
super(TestStockAccountChangeQtyReason, cls).setUpClass()
# MODELS
cls.product_product_model = cls.env["product.product"]
cls.product_category_model = cls.env["product.category"]
cls.wizard_model = cls.env["stock.change.product.qty"]
cls.stock_inventory = cls.env["stock.inventory"]
cls.preset_reason = cls.env["stock.inventory.line.reason"]
# INSTANCES
cls.stock_valuation_account = cls.env["account.account"].create(
{
"name": "Stock Valuation",
"code": "Stock Valuation",
"user_type_id": cls.env.ref(
"account.data_account_type_current_assets"
).id,
}
)
cls.category = cls.product_category_model.create(
{
"name": "Physical (test)",
"property_cost_method": "standard",
"property_valuation": "real_time",
"property_stock_valuation_account_id": cls.stock_valuation_account,
}
)
company = cls.env.ref("base.main_company")
# Instance: account type (receivable)
cls.type_recv = cls.env.ref("account.data_account_type_receivable")
# Instance: account type (payable)
cls.type_payable = cls.env.ref("account.data_account_type_payable")
# account (receivable)
cls.account_input = cls.env["account.account"].create(
{
"name": "test_account_reason_input",
"code": "1234",
"user_type_id": cls.type_recv.id,
"company_id": company.id,
"reconcile": True,
}
)
# account (payable)
cls.account_output = cls.env["account.account"].create(
{
"name": "test_account_reason_output",
"code": "4321",
"user_type_id": cls.type_payable.id,
"company_id": company.id,
"reconcile": True,
}
)
cls.reason = cls.preset_reason.create(
{
"name": "Test Reason",
"description": "Test Reason Description",
"account_reason_input_id": cls.account_input.id,
"account_reason_output_id": cls.account_output.id,
}
)
# Start Inventory with 10 units
cls.product = cls._create_product(cls, "product_product")
cls._product_change_qty(cls, cls.product, 10)
cls.inventory = cls.stock_inventory.create(
{
"name": "Inventory Adjustment Product",
"product_ids": [(4, cls.product.id)],
"preset_reason_id": cls.reason.id,
}
)
cls.inventory.action_start()
def _create_product(self, name):
return self.product_product_model.create(
{
"name": name,
"categ_id": self.category.id,
"type": "product",
"standard_price": 100,
}
)
def _product_change_qty(self, product, new_qty):
values = {
"product_tmpl_id": product.product_tmpl_id.id,
"product_id": product.id,
"new_quantity": new_qty,
}
wizard = self.wizard_model.create(values)
wizard.change_product_qty()
def _create_reason(self, name, description=None):
return self.preset_reason.create({"name": name, "description": description})
def test_product_change_qty_account_input(self):
# update qty on hand and add reason
self.inventory.line_ids[0].write({"product_qty": 100})
self.inventory.action_validate()
# check stock moves and account moves created
stock_move = self.env["stock.move"].search(
[("product_id", "=", self.product.id), ("product_qty", "=", 90)]
)
account_move = self.env["account.move"].search(
[("stock_move_id", "=", stock_move.id)]
)
# asserts
account_move_line1 = self.env["account.move.line"].search(
[
("move_id", "=", account_move.id),
("account_id", "=", self.account_input.id),
]
)
account_move_line2 = self.env["account.move.line"].search(
[
("move_id", "=", account_move.id),
("account_id", "=", self.stock_valuation_account.id),
]
)
self.assertEqual(
abs(account_move_line1.balance), abs(account_move_line2.balance)
)
def test_product_change_qty_account_output(self):
# update qty on hand and add reason
self.inventory.line_ids[0].write({"product_qty": 5})
self.inventory.action_validate()
# check stock moves and account moves created
stock_move = self.env["stock.move"].search(
[("product_id", "=", self.product.id), ("product_qty", "=", 5)]
)
account_move = self.env["account.move"].search(
[("stock_move_id", "=", stock_move.id)]
)
# asserts
account_move_line3 = self.env["account.move.line"].search(
[
("move_id", "=", account_move.id),
("account_id", "=", self.account_output.id),
]
)
account_move_line4 = self.env["account.move.line"].search(
[
("move_id", "=", account_move.id),
("account_id", "=", self.stock_valuation_account.id),
]
)
self.assertEqual(
abs(account_move_line3.balance), abs(account_move_line4.balance)
)

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2019 ForgeFlow S.L.
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="view_account_preset_reason" model="ir.ui.view">
<field name="name">Preset Reason Accounts</field>
<field name="model">stock.inventory.line.reason</field>
<field name="inherit_id" ref="stock_change_qty_reason.view_preset_reason"/>
<field name="arch" type="xml">
<field name="description" position="after">
<field name="account_reason_input_id" groups="account.group_account_user"/>
<field name="account_reason_output_id" groups="account.group_account_user"/>
</field>
</field>
</record>
</odoo>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2019 ForgeFlow S.L.
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="view_move_form" model="ir.ui.view">
<field name="name">stock.move.form</field>
<field name="model">stock.move</field>
<field name="inherit_id" ref="stock.view_move_form"/>
<field name="arch" type="xml">
<field name="origin" position="after">
<field name="preset_reason_id"
invisible="[('preset_reason_id','=',False)]"/>
</field>
</field>
</record>
</odoo>