49 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
from apps.fim.models import FeeSet, Fee, PriceSet
 | 
						|
from apps.mtm.models import Mgroup, Material
 | 
						|
import datetime
 | 
						|
 | 
						|
def get_cost_unit(mgroup: Mgroup, fee: Fee, year: int = 0, month: int = 0):
 | 
						|
    """
 | 
						|
    获取某工段某费用的月成本, 默认本月
 | 
						|
    """
 | 
						|
    now = datetime.datetime.now()
 | 
						|
    if year and month:
 | 
						|
        params = {'mgroup': mgroup, 'fee': fee, 'year': year, 'month': month}
 | 
						|
    else:
 | 
						|
        params = {'mgroup': mgroup, 'fee': fee, 'year': now.year, 'month': now.month}
 | 
						|
    qs = FeeSet.objects.filter(**params)
 | 
						|
    if qs.exists():
 | 
						|
        feeset = qs.first()
 | 
						|
        return feeset.cost_unit
 | 
						|
    else:
 | 
						|
        feeset_last = FeeSet.objects.filter(mgroup=mgroup, fee=fee).order_by('year', 'month').last()
 | 
						|
        if feeset_last:
 | 
						|
            params.update({'cost_unit': feeset_last.cost_unit})
 | 
						|
        else:
 | 
						|
            params.update({'cost_unit': 0})
 | 
						|
        feeset = FeeSet.objects.create(**params)
 | 
						|
        return feeset.cost_unit
 | 
						|
        
 | 
						|
 | 
						|
def get_price_unit(material: Material, year: int = 0, month: int = 0):
 | 
						|
    """
 | 
						|
    获取某物料的月成本, 默认本月
 | 
						|
    """
 | 
						|
    now = datetime.datetime.now()
 | 
						|
    if year and month:
 | 
						|
        params = {'material': material, 'year': year, 'month': month}
 | 
						|
    else:
 | 
						|
        params = {'material': material, 'year': now.year, 'month': now.month}
 | 
						|
    qs = PriceSet.objects.filter(**params)
 | 
						|
    if qs.exists():
 | 
						|
        ps = qs.first()
 | 
						|
        return ps.price_unit
 | 
						|
    else:
 | 
						|
        ps_last = PriceSet.objects.filter(material=material).order_by('year', 'month').last()
 | 
						|
        if ps_last:
 | 
						|
            params.update({'price_unit': ps_last.price_unit})
 | 
						|
        else:
 | 
						|
            params.update({'price_unit': 0})
 | 
						|
        ps = PriceSet.objects.create(**params)
 | 
						|
        return ps.price_unit
 |