Add management command to import csv and update template
This commit is contained in:
parent
38b56deeec
commit
9a4a70dfb6
5 changed files with 150 additions and 58 deletions
60
main/management/commands/import_monthly_trips.py
Normal file
60
main/management/commands/import_monthly_trips.py
Normal 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!"))
|
Loading…
Add table
Add a link
Reference in a new issue