Add management command to change ch vat #15
1 changed files with 93 additions and 0 deletions
93
hosting/management/commands/change_ch_vatrate_2023.py
Normal file
93
hosting/management/commands/change_ch_vatrate_2023.py
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
import datetime
|
||||||
|
import csv
|
||||||
|
import stripe
|
||||||
|
from hosting.models import VATRates
|
||||||
|
from utils.hosting_utils import get_vat_rate_for_country
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
stripe.api_key = settings.STRIPE_API_PRIVATE_KEY
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = '''CH vat rate changes on 2024-01-01 from 7.7% to 8.1%. This commands makes the necessary changes'''
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
MAKE_MODIFS=False
|
||||||
|
try:
|
||||||
|
country_to_change = 'CH'
|
||||||
|
currency_to_change = 'CHF'
|
||||||
|
new_rate = 0.081
|
||||||
|
user_country_vat_rate = get_vat_rate_for_country(country_to_change)
|
||||||
|
logger.debug("Existing VATRate for %s %s " % (country_to_change, user_country_vat_rate))
|
||||||
|
vat_rate = VATRates.objects.get(
|
||||||
|
territory_codes=country_to_change, start_date__isnull=False, stop_date=None
|
||||||
|
)
|
||||||
|
logger.debug("VAT rate for %s is %s" % (country, vat_rate.rate))
|
||||||
|
logger.debug("vat_rate object = %s" % vat_rate)
|
||||||
|
logger.debug("Create end date for the VATRate %s" % vat_rate.id)
|
||||||
|
if MAKE_MODIFS:
|
||||||
|
vat_rate.stop_date = datetime.date(2023, 12, 31)
|
||||||
|
vat_rate.save()
|
||||||
|
print("Creating a new VATRate for CH")
|
||||||
|
obj, created = VATRates.objects.get_or_create(
|
||||||
|
start_date=datetime.date(2024, 1, 1),
|
||||||
|
stop_date=None,
|
||||||
|
territory_codes=country_to_change,
|
||||||
|
currency_code=currency_to_change,
|
||||||
|
rate=new_rate,
|
||||||
|
rate_type="standard",
|
||||||
|
description="Switzerland standard VAT (added manually on %s)" % datetime.datetime.now()
|
||||||
|
)
|
||||||
|
if created:
|
||||||
|
logger.debug("Created new VAT Rate for %s with the new rate %s" % (country_to_change, new_rate))
|
||||||
|
logger.debug(obj)
|
||||||
|
else:
|
||||||
|
logger.debug("VAT Rate for %s already exists with the rate %s" % (country_to_change, new_rate))
|
||||||
|
|
||||||
|
logger.debug("Getting all subscriptions of %s that need a VAT Rate change")
|
||||||
|
subscriptions = stripe.Subscription.list(limit=100) # Increase the limit to 100 per page (maximum)
|
||||||
|
ch_subs = []
|
||||||
|
|
||||||
|
while subscriptions:
|
||||||
|
for subscription in subscriptions:
|
||||||
|
if len(subscription.default_tax_rates) > 0 and subscription.default_tax_rates[0].jurisdiction and subscription.default_tax_rates[0].jurisdiction.lower() == 'ch':
|
||||||
|
ch_subs.append(subscription)
|
||||||
|
elif len(subscription.default_tax_rates) > 0:
|
||||||
|
print("subscription %s belongs to %s" % (subscription.id, subscription.default_tax_rates[0].jurisdiction))
|
||||||
|
else:
|
||||||
|
print("subscription %s does not have a tax rate" % subscription.id)
|
||||||
|
if subscriptions.has_more:
|
||||||
|
print("FETCHING MORE")
|
||||||
|
subscriptions = stripe.Subscription.list(limit=100, starting_after=subscriptions.data[-1])
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
logger.debug("There are %s ch subscription that need VAT rate update" % len(ch_subs))
|
||||||
|
|
||||||
|
if MAKE_MODIFS:
|
||||||
|
print("Making modifications now")
|
||||||
|
tax_rate_obj = stripe.TaxRate.create(
|
||||||
|
display_name="VAT",
|
||||||
|
description="VAT for %s" % country_to_change,
|
||||||
|
jurisdiction=country_to_change,
|
||||||
|
percentage=new_rate,
|
||||||
|
inclusive=False,
|
||||||
|
)
|
||||||
|
stripe_tax_rate = StripeTaxRate.objects.create(
|
||||||
|
display_name=tax_rate_obj.display_name,
|
||||||
|
description=tax_rate_obj.description,
|
||||||
|
jurisdiction=tax_rate_obj.jurisdiction,
|
||||||
|
percentage=tax_rate_obj.percentage,
|
||||||
|
inclusive=False,
|
||||||
|
tax_rate_id=tax_rate_obj.id
|
||||||
|
)
|
||||||
|
|
||||||
|
for ch_sub in ch_subs:
|
||||||
|
ch_sub.default_tax_rates = [stripe_tax_rate.tax_rate_id]
|
||||||
|
ch_sub.save()
|
||||||
|
logger.debug("Default tax rate updated for %s" % ch_sub.id)
|
||||||
|
else:
|
||||||
|
print("Not making any modifications because MAKE_MODIFS=False")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(" *** Error occurred. Details {}".format(str(e)))
|
Loading…
Reference in a new issue