You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

45 lines
1.4 KiB

# -*- coding: utf-8 -*-
from decimal import Decimal
from . import consts
def get_nds(key):
"""Берет значение НДС по ключу key."""
return consts.NDS_VALUE_NUMERIC.get(key, Decimal(0))
def extract_nds(obj):
"""Если НДС содержится в цене, извлекает и возвращает его."""
nds = Decimal('0.00')
if obj.parent.nds_type == consts.NDS_TYPE_IN: # ндс в сумме, извлечь его
nds_rate = get_nds(obj.parent.nds_value)/100
nds = obj.price * (1 - 1/(1+nds_rate))
return nds
def calc_clean_price(obj):
"""Считает цену без НДС."""
return obj.price - extract_nds(obj)
def calc_clean_total_price(obj):
"""Считает стоимость без налога."""
return calc_clean_price(obj) * obj.qty
def calc_total_nds(obj):
"""Считает сумму налога."""
total_nds = Decimal('0.00')
if obj.parent.nds_type == consts.NDS_TYPE_IN: # ндс в сумме
total_nds = extract_nds(obj) * obj.qty
elif obj.parent.nds_type == consts.NDS_TYPE_OUT: # ндс сверх суммы
total_price = obj.price * obj.qty
nds_rate = get_nds(obj.parent.nds_value)/100
total_nds = total_price * nds_rate
return total_nds
def calc_full_total_price(obj):
"""Считает стоимость с налогом."""
return calc_total_nds(obj) + calc_clean_total_price(obj)