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.
 
 
 
 

68 lines
1.9 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')
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_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)
def get_clean_total_price(obj):
"""
Считает стоимость без налога.
"""
if obj.parent.nds_method:
return calc_clean_price(obj) * obj.qty
else:
return calc_clean_price(obj) * obj.qty - get_total_nds(obj)
def get_total_nds(obj):
"""Считает сумму налога."""
total_price = obj.price * obj.qty
if obj.parent.nds_method:
nds_rate = get_nds(obj.parent.nds_value) / 100
total_nds = total_price * nds_rate
else:
nds_rate = get_nds(obj.parent.nds_value) / (100 + get_nds(obj.parent.nds_value))
total_nds = total_price * nds_rate
return total_nds
def get_full_total_price(obj):
"""Считает стоимость с налогом."""
if obj.parent.nds_method:
return calc_total_nds(obj) + calc_clean_total_price(obj)
else:
return calc_clean_total_price(obj)