Move django-based uncloud to top-level
This commit is contained in:
		
					parent
					
						
							
								0560063326
							
						
					
				
			
			
				commit
				
					
						95d43f002f
					
				
			
		
					 265 changed files with 0 additions and 0 deletions
				
			
		
							
								
								
									
										31
									
								
								uncloud_pay/management/commands/charge-negative-balance.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								uncloud_pay/management/commands/charge-negative-balance.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
from django.core.management.base import BaseCommand
 | 
			
		||||
from uncloud_auth.models import User
 | 
			
		||||
from uncloud_pay.models import Order, Bill, PaymentMethod, get_balance_for_user
 | 
			
		||||
 | 
			
		||||
from datetime import timedelta
 | 
			
		||||
from django.utils import timezone
 | 
			
		||||
 | 
			
		||||
class Command(BaseCommand):
 | 
			
		||||
    help = 'Generate bills and charge customers if necessary.'
 | 
			
		||||
 | 
			
		||||
    def add_arguments(self, parser):
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    def handle(self, *args, **options):
 | 
			
		||||
        users = User.objects.all()
 | 
			
		||||
        print("Processing {} users.".format(users.count()))
 | 
			
		||||
        for user in users:
 | 
			
		||||
            balance = get_balance_for_user(user)
 | 
			
		||||
            if balance < 0:
 | 
			
		||||
                print("User {} has negative balance ({}), charging.".format(user.username, balance))
 | 
			
		||||
                payment_method = PaymentMethod.get_primary_for(user)
 | 
			
		||||
                if payment_method != None:
 | 
			
		||||
                    amount_to_be_charged = abs(balance)
 | 
			
		||||
                    charge_ok = payment_method.charge(amount_to_be_charged)
 | 
			
		||||
                    if not charge_ok:
 | 
			
		||||
                        print("ERR: charging {} with method {} failed"
 | 
			
		||||
                                .format(user.username, payment_method.uuid)
 | 
			
		||||
                                )
 | 
			
		||||
                else:
 | 
			
		||||
                    print("ERR: no payment method registered for {}".format(user.username))
 | 
			
		||||
        print("=> Done.")
 | 
			
		||||
							
								
								
									
										35
									
								
								uncloud_pay/management/commands/generate-bills.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								uncloud_pay/management/commands/generate-bills.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,35 @@
 | 
			
		|||
import logging
 | 
			
		||||
 | 
			
		||||
from django.core.management.base import BaseCommand
 | 
			
		||||
from uncloud_auth.models import User
 | 
			
		||||
from uncloud_pay.models import Order, Bill
 | 
			
		||||
from django.core.exceptions import ObjectDoesNotExist
 | 
			
		||||
 | 
			
		||||
from datetime import timedelta, date
 | 
			
		||||
from django.utils import timezone
 | 
			
		||||
from uncloud_pay.models import Bill
 | 
			
		||||
 | 
			
		||||
logger = logging.getLogger(__name__)
 | 
			
		||||
 | 
			
		||||
class Command(BaseCommand):
 | 
			
		||||
    help = 'Generate bills and charge customers if necessary.'
 | 
			
		||||
 | 
			
		||||
    def add_arguments(self, parser):
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    # TODO: use logger.*
 | 
			
		||||
    def handle(self, *args, **options):
 | 
			
		||||
        # Iterate over all 'active' users.
 | 
			
		||||
        # TODO: filter out inactive users.
 | 
			
		||||
        users = User.objects.all()
 | 
			
		||||
        print("Processing {} users.".format(users.count()))
 | 
			
		||||
 | 
			
		||||
        for user in users:
 | 
			
		||||
            now = timezone.now()
 | 
			
		||||
            Bill.generate_for(
 | 
			
		||||
                    year=now.year,
 | 
			
		||||
                    month=now.month,
 | 
			
		||||
                    user=user)
 | 
			
		||||
 | 
			
		||||
        # We're done for this round :-)
 | 
			
		||||
        print("=> Done.")
 | 
			
		||||
							
								
								
									
										23
									
								
								uncloud_pay/management/commands/handle-overdue-bills.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								uncloud_pay/management/commands/handle-overdue-bills.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,23 @@
 | 
			
		|||
from django.core.management.base import BaseCommand
 | 
			
		||||
from uncloud_auth.models import User
 | 
			
		||||
from uncloud_pay.models import Bill
 | 
			
		||||
 | 
			
		||||
from datetime import timedelta
 | 
			
		||||
from django.utils import timezone
 | 
			
		||||
 | 
			
		||||
class Command(BaseCommand):
 | 
			
		||||
    help = 'Take action on overdue bills.'
 | 
			
		||||
 | 
			
		||||
    def add_arguments(self, parser):
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    def handle(self, *args, **options):
 | 
			
		||||
        users = User.objects.all()
 | 
			
		||||
        print("Processing {} users.".format(users.count()))
 | 
			
		||||
        for user in users:
 | 
			
		||||
            for bill in Bill.get_overdue_for(user):
 | 
			
		||||
                print("/!\ Overdue bill for {}, {} with amount {}"
 | 
			
		||||
                        .format(user.username, bill.uuid, bill.amount))
 | 
			
		||||
                # TODO: take action?
 | 
			
		||||
 | 
			
		||||
        print("=> Done.")
 | 
			
		||||
							
								
								
									
										44
									
								
								uncloud_pay/management/commands/import-vat-rates.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								uncloud_pay/management/commands/import-vat-rates.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,44 @@
 | 
			
		|||
from django.core.management.base import BaseCommand
 | 
			
		||||
from uncloud_pay.models import VATRate
 | 
			
		||||
import csv
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Command(BaseCommand):
 | 
			
		||||
    help = '''Imports VAT Rates. Assume vat rates of format https://github.com/kdeldycke/vat-rates/blob/master/vat_rates.csv'''
 | 
			
		||||
 | 
			
		||||
    def add_arguments(self, parser):
 | 
			
		||||
        parser.add_argument('csv_file', nargs='+', type=str)
 | 
			
		||||
 | 
			
		||||
    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(
 | 
			
		||||
                            start_date=row["start_date"],
 | 
			
		||||
                            stop_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
 | 
			
		||||
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(" *** Error occurred. Details {}".format(str(e)))
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue