update VAT importer

This commit is contained in:
Nico Schottelius 2020-10-08 19:54:04 +02:00
commit e03cdf214a
6 changed files with 141 additions and 79 deletions

View file

@ -1,44 +1,35 @@
from django.core.management.base import BaseCommand
from uncloud_pay.models import VATRate
import csv
import urllib
import csv
import sys
import io
class Command(BaseCommand):
help = '''Imports VAT Rates. Assume vat rates of format https://github.com/kdeldycke/vat-rates/blob/master/vat_rates.csv'''
vat_url = "https://raw.githubusercontent.com/kdeldycke/vat-rates/main/vat_rates.csv"
def add_arguments(self, parser):
parser.add_argument('csv_file', nargs='+', type=str)
parser.add_argument('--vat-url', default=self.vat_url)
def handle(self, *args, **options):
try:
for c_file in options['csv_file']:
print("c_file = %s" % c_file)
with open(c_file, mode='r') as csv_file:
csv_reader = csv.DictReader(csv_file)
line_count = 0
for row in csv_reader:
if line_count == 0:
line_count += 1
obj, created = VATRate.objects.get_or_create(
starting_date=row["start_date"],
ending_date=row["stop_date"] if row["stop_date"] is not "" else None,
territory_codes=row["territory_codes"],
currency_code=row["currency_code"],
rate=row["rate"],
rate_type=row["rate_type"],
description=row["description"]
)
if created:
self.stdout.write(self.style.SUCCESS(
'%s. %s - %s - %s - %s' % (
line_count,
obj.start_date,
obj.stop_date,
obj.territory_codes,
obj.rate
)
))
line_count+=1
vat_url = options['vat_url']
url_open = urllib.request.urlopen(vat_url)
except Exception as e:
print(" *** Error occurred. Details {}".format(str(e)))
# map to fileio using stringIO
csv_file = io.StringIO(url_open.read().decode('utf-8'))
reader = csv.DictReader(csv_file)
for row in reader:
# print(row)
obj, created = VATRate.objects.get_or_create(
starting_date=row["start_date"],
ending_date=row["stop_date"] if row["stop_date"] != "" else None,
territory_codes=row["territory_codes"],
currency_code=row["currency_code"],
rate=row["rate"],
rate_type=row["rate_type"],
description=row["description"]
)