"""
Отчет по материалам тома рабочей документации.
1. Делаем запрос для определения материалов конструкций
"""
construction_materials = SpecificationMaterial.objects.filter(specification__in=Specification.objects.filter(constructionspecification__specification__design=args[0])).\
values('specification__constructionspecification__construction__name', 'material', 'amount', 'specification__amount', 'specification__constructionspecification__amount')
"""
2. Считаем объем материалов конструкций по формуле:
"объем конструкции" / "объем спецификации" * "объем материалов спецификации"
"""
for p in construction_materials:
p['construction_material'] = p['specification__constructionspecification__amount'] / p['specification__amount'] * p['amount']
"""
3. Выбираем уникальные материалы
"""
report = construction_materials.\
values('material', 'material__name', 'material__price', 'material__unit_measure__name').\
distinct()
"""
4. Суммируем объем материалов
"""
summa = 0 # общая стоимость всех материалов
for r in report:
"""
4.1 Каждому материалу задаем нулевое количество
"""
r['amount'] = 0
for p in construction_materials:
"""
4.2 Ищем нужный материал и прибавляем его объем
"""
if r['material'] == p['material']:
r['amount'] += p['construction_material']
r['total_price'] = r['amount'] * r['material__price'] # общая стоимость одного материала
summa += r['total_price']
context['report'] = report
context['summa'] = summa