Add management command to import csv and update template

This commit is contained in:
Nyymix 2025-08-10 17:23:46 +03:00
parent 38b56deeec
commit 9a4a70dfb6
5 changed files with 150 additions and 58 deletions

View file

@ -0,0 +1,60 @@
import csv
from django.core.management.base import BaseCommand
from main.models import MonthlyTrip
class Command(BaseCommand):
help = "Import fuel purchases from a CSV file"
def add_arguments(self, parser):
parser.add_argument('csv_file', type=str, help='Path to the CSV file')
def handle(self, *args, **kwargs):
csv_file = kwargs['csv_file']
MONTH_MAP = {
'Tammikuu': 1,
'Helmikuu': 2,
'Maaliskuu': 3,
'Huhtikuu': 4,
'Toukokuu': 5,
'Kesäkuu': 6,
'Heinäkuu': 7,
'Elokuu': 8,
'Syyskuu': 9,
'Lokakuu': 10,
'Marraskuu': 11,
'Joulukuu': 12,
}
with open(csv_file, newline='', encoding='utf-8') as f:
reader = csv.reader(f, delimiter=';')
headers = next(reader)
for line_number, row in enumerate(reader, start=2):
if len(row) < 3:
self.stdout.write(self.style.WARNING(f"Skipped broken row {line_number}: {row}"))
continue
try:
year_str, month_name, value_str = row
year = int(year_str.strip())
month = MONTH_MAP.get(month_name.strip())
value = int(value_str.strip())
MonthlyTrip.objects.update_or_create(
year=year,
month=month,
kilometers=value,
)
self.stdout.write(self.style.SUCCESS(f"Imported: {year} {month} {value}"))
except Exception as e:
self.stdout.write(self.style.ERROR(f"Error on row {line_number}: {row}"))
self.stdout.write(self.style.ERROR(str(e)))
self.stdout.write(self.style.SUCCESS("All imported successfully!"))