Allow shipment cost price to be edited

issue9911
review329841002
This commit is contained in:
Cédric Krier committed 2020-12-21 00:18:02 +01:00
1 parent 2f924098f2
commit fb9f01e23e
4 files changed
+136 -8

No files matched your search

+2
View File
@@ -1,3 +1,5 @@
* Allow shipment cost price to be edited
Version 5.8.0 - 2020-11-02
* Bug fixes (see mercurial logs for details)
* Remove support for Python 3.5
+13 -8
View File
@@ -1,5 +1,7 @@
# 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 decimal import Decimal
from trytond import backend
from trytond.i18n import gettext
from trytond.model import ModelView, Workflow, fields
@@ -206,23 +208,23 @@ class Sale(metaclass=PoolMeta):
return 0
def set_shipment_cost(self):
cost_line = None
cost = self.compute_shipment_cost()
if cost:
cost_line = self.get_shipment_cost_line(cost)
removed = []
unit_price = None
lines = list(self.lines or [])
for line in self.lines:
if line.type == 'line' and line.shipment_cost:
if line.shipment_cost == cost:
unit_price = line.unit_price * Decimal(str(line.quantity))
lines.remove(line)
removed.append(line)
if cost_line:
lines.append(cost_line)
if cost:
lines.append(self.get_shipment_cost_line(
cost, unit_price=unit_price))
self.lines = lines
return removed
def get_shipment_cost_line(self, cost):
def get_shipment_cost_line(self, cost, unit_price=None):
pool = Pool()
SaleLine = pool.get('sale.line')
@@ -245,7 +247,10 @@ class Sale(metaclass=PoolMeta):
shipment_cost=shipment_cost,
)
cost_line.on_change_product()
cost_line.unit_price = round_price(cost)
if unit_price is not None:
cost_line.unit_price = round_price(unit_price)
else:
cost_line.unit_price = round_price(cost)
cost_line.amount = cost_line.on_change_with_amount()
return cost_line
@@ -0,0 +1,116 @@
========================================
Sale Shipment Cost Modify Price Scenario
========================================
Imports::
>>> from decimal import Decimal
>>> from proteus import Model
>>> from trytond.tests.tools import activate_modules
>>> from trytond.modules.company.tests.tools import (
... create_company, get_company)
Activate modules::
>>> config = activate_modules('sale_shipment_cost')
Create company::
>>> _ = create_company()
>>> company = get_company()
Create customer::
>>> Party = Model.get('party.party')
>>> customer = Party(name='Customer')
>>> customer.save()
Create account category::
>>> ProductCategory = Model.get('product.category')
>>> account_category = ProductCategory(name="Account Category")
>>> account_category.accounting = True
>>> account_category.save()
Create product::
>>> ProductUom = Model.get('product.uom')
>>> ProductTemplate = Model.get('product.template')
>>> unit, = ProductUom.find([('name', '=', 'Unit')])
>>> template = ProductTemplate()
>>> template.name = 'Product'
>>> template.default_uom = unit
>>> template.type = 'goods'
>>> template.salable = True
>>> template.list_price = Decimal('20')
>>> template.account_category = account_category
>>> template.save()
>>> product, = template.products
>>> carrier_template = ProductTemplate()
>>> carrier_template.name = 'Carrier Product'
>>> carrier_template.default_uom = unit
>>> carrier_template.type = 'service'
>>> carrier_template.salable = True
>>> carrier_template.list_price = Decimal('3')
>>> carrier_template.account_category = account_category
>>> carrier_template.save()
>>> carrier_product, = carrier_template.products
Create carrier::
>>> Carrier = Model.get('carrier')
>>> carrier = Carrier()
>>> party = Party(name='Carrier')
>>> party.save()
>>> carrier.party = party
>>> carrier.carrier_product = carrier_product
>>> carrier.save()
Make a quote::
>>> Sale = Model.get('sale.sale')
>>> sale = Sale()
>>> sale.party = customer
>>> sale.carrier = carrier
>>> sale_line = sale.lines.new()
>>> sale_line.product = product
>>> sale_line.quantity = 5.0
>>> sale.click('quote')
>>> cost_line = sale.lines[-1]
>>> cost_line.product == carrier_product
True
>>> cost_line.quantity
1.0
>>> cost_line.amount
Decimal('3.00')
Change the shipment cost price::
>>> sale.click('draft')
>>> cost_line = sale.lines[-1]
>>> cost_line.unit_price = Decimal('2.00')
>>> sale.click('quote')
>>> cost_line = sale.lines[-1]
>>> cost_line.product == carrier_product
True
>>> cost_line.quantity
1.0
>>> cost_line.amount
Decimal('2.00')
Change the carrier price reset the cost line::
>>> carrier_template.list_price = Decimal('4')
>>> carrier_template.save()
>>> sale.click('draft')
>>> sale.click('quote')
>>> cost_line = sale.lines[-1]
>>> cost_line.product == carrier_product
True
>>> cost_line.quantity
1.0
>>> cost_line.amount
Decimal('4.00')
+5
View File
@@ -22,4 +22,9 @@ def suite():
tearDown=doctest_teardown, encoding='utf-8',
checker=doctest_checker,
optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
suite.addTests(doctest.DocFileSuite(
'scenario_sale_shipment_cost_modify_price.rst',
tearDown=doctest_teardown, encoding='utf-8',
checker=doctest_checker,
optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
return suite