from django.shortcuts import render from django.template.loader import render_to_string from django.http import HttpResponse from weasyprint import HTML from apps.fields.models import OfficialKyosaiField, OfficialChusankanField, Field from apps.plans.models import Plan def generate_kyosai_pdf(request, year): kyosai_fields = OfficialKyosaiField.objects.all() data = [] for kyosai in kyosai_fields: related_fields = kyosai.fields.all() plans = Plan.objects.filter(field__in=related_fields, year=year) crops = {} total_area = 0 for plan in plans: crop_name = plan.crop.name if crop_name not in crops: crops[crop_name] = { 'name': crop_name, 'variety': plan.variety.name, 'count': 0 } crops[crop_name]['count'] += 1 total_area += float(plan.field.area_tan) data.append({ 'kyosai': kyosai, 'fields': related_fields, 'crops': list(crops.values()), 'total_area': total_area, 'field_count': related_fields.count() }) html_string = render_to_string('reports/kyosai_template.html', { 'year': year, 'data': data }) pdf = HTML(string=html_string).write_pdf() response = HttpResponse(pdf, content_type='application/pdf') response['Content-Disposition'] = f'attachment; filename="kyosai_{year}.pdf"' return response def generate_chusankan_pdf(request, year): chusankan_fields = OfficialChusankanField.objects.all() data = [] for chusankan in chusankan_fields: related_fields = chusankan.fields.all() plans = Plan.objects.filter(field__in=related_fields, year=year) crops = {} total_area = 0 for plan in plans: crop_name = plan.crop.name if crop_name not in crops: crops[crop_name] = { 'name': crop_name, 'variety': plan.variety.name, 'count': 0 } crops[crop_name]['count'] += 1 total_area += float(plan.field.area_tan) data.append({ 'chusankan': chusankan, 'fields': related_fields, 'crops': list(crops.values()), 'total_area': total_area, 'field_count': related_fields.count() }) html_string = render_to_string('reports/chusankan_template.html', { 'year': year, 'data': data }) pdf = HTML(string=html_string).write_pdf() response = HttpResponse(pdf, content_type='application/pdf') response['Content-Disposition'] = f'attachment; filename="chusankan_{year}.pdf"' return response