first commit
This commit is contained in:
55
modules/commission/stock.py
Normal file
55
modules/commission/stock.py
Normal file
@@ -0,0 +1,55 @@
|
||||
# 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.model import fields
|
||||
from trytond.modules.product import price_digits, round_price
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.transaction import Transaction
|
||||
|
||||
|
||||
class Move(metaclass=PoolMeta):
|
||||
__name__ = 'stock.move'
|
||||
|
||||
commission_price = fields.Numeric(
|
||||
"Commission Price", digits=price_digits, readonly=True)
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls._allow_modify_closed_period.add('commission_price')
|
||||
|
||||
@classmethod
|
||||
def update_unit_price(cls, moves):
|
||||
for move in moves:
|
||||
if move.state == 'done':
|
||||
commission_price = move._compute_commission_price()
|
||||
if commission_price != move.commission_price:
|
||||
move.commission_price = commission_price
|
||||
super().update_unit_price(moves)
|
||||
|
||||
def _compute_commission_price(self):
|
||||
pool = Pool()
|
||||
UoM = pool.get('product.uom')
|
||||
Currency = pool.get('currency.currency')
|
||||
total, quantity = 0, 0
|
||||
for line in self.invoice_lines:
|
||||
if line.invoice and line.invoice.state in {'posted', 'paid'}:
|
||||
for commission in line.commissions:
|
||||
with Transaction().set_context(date=self.effective_date):
|
||||
amount = Currency.compute(
|
||||
commission.currency, commission.amount,
|
||||
self.currency)
|
||||
if line.invoice.type == commission.type_:
|
||||
total -= amount
|
||||
else:
|
||||
total += amount
|
||||
if line.invoice.type == 'out' or not line.correction:
|
||||
quantity += UoM.compute_qty(
|
||||
line.unit, line.quantity, self.unit)
|
||||
if quantity:
|
||||
unit_price = round_price(total / Decimal(str(quantity)))
|
||||
else:
|
||||
unit_price = round_price(total)
|
||||
return unit_price
|
||||
Reference in New Issue
Block a user