Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Tryton
Tryton
Commits
3a0bb94e297a
Commit
3a0bb94e
authored
Dec 29, 2022
by
Cédric Krier
Browse files
Notify when product is supplied on sale and has purchase order point
Closes
#11969
parent
ecf3f470e900
Pipeline
#61736
passed with stages
in 22 minutes and 27 seconds
Changes
9
Pipelines
2
Hide whitespace changes
Inline
Side-by-side
modules/sale_supply/CHANGELOG
View file @
3a0bb94e
* Notify when product is supplied on sale and has purchase order point
Version 6.6.0 - 2022-10-31
--------------------------
* Bug fixes (see mercurial logs for details)
...
...
modules/sale_supply/__init__.py
View file @
3a0bb94e
...
...
@@ -19,3 +19,6 @@
Pool
.
register
(
purchase
.
HandlePurchaseCancellationException
,
module
=
'sale_supply'
,
type_
=
'wizard'
)
Pool
.
register
(
stock
.
OrderPoint
,
module
=
'sale_supply'
,
type_
=
'model'
,
depends
=
[
'stock_supply'
])
modules/sale_supply/message.xml
0 → 100644
View file @
3a0bb94e
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data
grouped=
"1"
>
<record
model=
"ir.message"
id=
"msg_order_point_product_supply_on_sale"
>
<field
name=
"text"
>
The product "%(product)s" is supplied on sale.
</field>
</record>
<record
model=
"ir.message"
id=
"msg_template_supply_on_sale_order_point"
>
<field
name=
"text"
>
The product has purchase order points "%(order_points)s" defined.
</field>
</record>
</data>
</tryton>
modules/sale_supply/product.py
View file @
3a0bb94e
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from
trytond.i18n
import
gettext
from
trytond.model
import
fields
...
...
@@ -3,5 +5,5 @@
from
trytond.model
import
fields
from
trytond.pool
import
PoolMeta
from
trytond.pool
import
Pool
,
PoolMeta
from
trytond.pyson
import
Eval
...
...
@@ -13,6 +15,33 @@
'invisible'
:
~
Eval
(
'purchasable'
)
|
~
Eval
(
'salable'
),
})
@
fields
.
depends
(
methods
=
[
'_notify_order_point'
])
def
on_change_notify
(
self
):
notifications
=
super
().
on_change_notify
()
notifications
.
extend
(
self
.
_notify_order_point
())
return
notifications
@
fields
.
depends
(
'id'
,
'supply_on_sale'
)
def
_notify_order_point
(
self
):
pool
=
Pool
()
try
:
OrderPoint
=
pool
.
get
(
'stock.order_point'
)
except
KeyError
:
return
if
self
.
supply_on_sale
and
self
.
id
is
not
None
and
self
.
id
>=
0
:
order_points
=
OrderPoint
.
search
([
(
'product.template.id'
,
'='
,
self
.
id
),
(
'type'
,
'='
,
'purchase'
),
],
limit
=
6
)
if
order_points
:
names
=
', '
.
join
(
o
.
rec_name
for
o
in
order_points
[:
5
])
if
len
(
order_points
)
>
5
:
names
+
'...'
yield
(
'warning'
,
gettext
(
'sale_supply'
'.msg_template_supply_on_sale_order_point'
,
order_points
=
names
))
class
Product
(
metaclass
=
PoolMeta
):
__name__
=
'product.product'
modules/sale_supply/setup.py
View file @
3a0bb94e
...
...
@@ -47,7 +47,10 @@
requires
.
append
(
get_require_version
(
'trytond_%s'
%
dep
))
requires
.
append
(
get_require_version
(
'trytond'
))
tests_require
=
[
get_require_version
(
'proteus'
)]
tests_require
=
[
get_require_version
(
'proteus'
),
get_require_version
(
'trytond_stock_supply'
),
]
setup
(
name
=
name
,
version
=
version
,
...
...
modules/sale_supply/stock.py
View file @
3a0bb94e
...
...
@@ -2,7 +2,8 @@
# this repository contains the full copyright notices and license terms.
from
collections
import
defaultdict
from
trytond.model
import
Model
,
ModelView
,
Workflow
from
trytond.i18n
import
gettext
from
trytond.model
import
Model
,
ModelView
,
Workflow
,
fields
from
trytond.pool
import
Pool
,
PoolMeta
...
...
@@ -56,3 +57,22 @@
for
sale_line
in
sale_lines
:
sale_line
.
assign_supplied
(
pbl
[
sale_line
.
product
],
grouping
=
grouping
)
class
OrderPoint
(
metaclass
=
PoolMeta
):
__name__
=
'stock.order_point'
@
fields
.
depends
(
methods
=
[
'_notify_product_supply_on_sale'
])
def
on_change_notify
(
self
):
notifications
=
super
().
on_change_notify
()
notifications
.
extend
(
self
.
_notify_product_supply_on_sale
())
return
notifications
@
fields
.
depends
(
'type'
,
'product'
)
def
_notify_product_supply_on_sale
(
self
):
if
(
self
.
type
==
'purchase'
and
self
.
product
and
self
.
product
.
supply_on_sale
):
yield
(
'warning'
,
gettext
(
'sale_supply'
'.msg_order_point_product_supply_on_sale'
,
product
=
self
.
product
.
rec_name
))
modules/sale_supply/tests/scenario_sale_supply_notifications.rst
0 → 100644
View file @
3a0bb94e
=========================
Sale Supply Notifications
=========================
Imports::
>>> from proteus import Model
>>> from trytond.tests.tools import activate_modules
>>> from trytond.modules.company.tests.tools import create_company
Activate modules::
>>> config = activate_modules(['sale_supply', 'stock_supply'])
>>> Location = Model.get('stock.location')
>>> OrderPoint = Model.get('stock.order_point')
>>> ProductTemplate = Model.get('product.template')
>>> UoM = Model.get('product.uom')
Create company::
>>> _ = create_company()
Get locations::
>>> warehouse_location, = Location.find([('type', '=', 'warehouse')])
Create product::
>>> unit, = UoM.find([('name', '=', "Unit")])
>>> product_template = ProductTemplate()
>>> product_template.name = "Product"
>>> product_template.type = 'goods'
>>> product_template.default_uom = unit
>>> product_template.purchasable = True
>>> product_template.salable = True
>>> product_template.supply_on_sale = True
>>> product_template.save()
>>> product, = product_template.products
Create order point::
>>> order_point = OrderPoint()
>>> order_point.product = product
>>> order_point.warehouse_location = warehouse_location
>>> order_point.type = 'purchase'
>>> order_point.min_quantity = 0
>>> order_point.target_quantity = 5
>>> order_point.save()
Check notifications::
>>> len(product_template.notifications())
1
>>> len(order_point.notifications())
1
modules/sale_supply/tests/test_module.py
View file @
3a0bb94e
...
...
@@ -7,6 +7,7 @@
class
SaleSupplyTestCase
(
ModuleTestCase
):
'Test SaleSupply module'
module
=
'sale_supply'
extras
=
[
'stock_supply'
]
del
ModuleTestCase
modules/sale_supply/tryton.cfg
View file @
3a0bb94e
...
...
@@ -6,6 +6,8 @@
purchase_request
sale
stock
extras_depend:
stock_supply
xml:
product.xml
sale.xml
...
...
@@ -9,3 +11,4 @@
xml:
product.xml
sale.xml
message.xml
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment