def handle(self, *args, **options): subscriptions = ServiceSubscription.objects.all() for subscription in subscriptions: if not subscription.reference_number: print( f"Generating ref for service subscription {subscription}") subscription.reference_number = referencenumber.generate( settings.SERVICE_INVOICE_REFERENCE_BASE + subscription.id) subscription.save()
def custominvoice(request): days = 0 amount = 0 servicename = "" paid_invoices = CustomInvoice.objects.filter( user=request.user, payment_transaction__isnull=False) unpaid_invoices = CustomInvoice.objects.filter( user=request.user, payment_transaction__isnull=True) if request.method == "POST": form = CustomInvoiceForm(request.POST) form.fields["service"].queryset = ServiceSubscription.objects.filter( user=request.user).exclude(state=ServiceSubscription.SUSPENDED) if form.is_valid(): count = int(form.cleaned_data["count"]) if count <= 0: raise Exception("Invalid count, should never happen!") service_subscription_id = int(request.POST["service"]) subscription = ServiceSubscription.objects.get( id=service_subscription_id) days = subscription.service.days_per_payment * count amount = subscription.service.cost * count servicename = subscription.service.name if "create" in request.POST: invoice = CustomInvoice( user=request.user, subscription=subscription, amount=amount, days=days, ) invoice.save() invoice.reference_number = referencenumber.generate( settings.CUSTOM_INVOICE_REFERENCE_BASE + invoice.id) invoice.save() else: form = CustomInvoiceForm() form.fields["service"].queryset = ServiceSubscription.objects.filter( user=request.user).exclude(state=ServiceSubscription.SUSPENDED) return render( request, "www/custominvoice.html", { "form": form, "paid_invoices": paid_invoices, "unpaid_invoices": unpaid_invoices, "days": days, "amount": amount, "servicename": servicename, }, )
def updateuser(request, id): user = CustomUser.objects.get(id=id) # First, generate any missing ref numbers subscriptions = ServiceSubscription.objects.filter(user=user) for subscription in subscriptions: if not subscription.reference_number: subscription.reference_number = referencenumber.generate( settings.SERVICE_INVOICE_REFERENCE_BASE + subscription.id) subscription.save() BusinessLogic.updateuser(user) return userdetails(request, id)
def create_servicesubscription(user, service, state): """ Creates a new service subscription for wanted user and service Sets it to wanted state and generates a reference number for it. """ subscription = ServiceSubscription(user=user, service=service, state=state) subscription.save() subscription.reference_number = referencenumber.generate( settings.SERVICE_INVOICE_REFERENCE_BASE + subscription.id) subscription.save() return subscription
def service_subscription_create(sender, instance: models.ServiceSubscription, created, raw, **kwargs): if raw: return if created: if instance.reference_number is None: refnum = referencenumber.generate( settings.SERVICE_INVOICE_REFERENCE_BASE + instance.id) instance.reference_number = refnum instance.save() logger.info( f"ServiceSubscription {instance} created for user {instance.user} without reference number. Generated reference number {refnum} for it" )
def custominvoice_create(sender, instance: models.CustomInvoice, created, raw, **kwargs): """ When custominvoice is created, generate reference number automatically if it is not defined """ if raw: return if created: if instance.reference_number is None: refnum = referencenumber.generate( settings.CUSTOM_INVOICE_REFERENCE_BASE + instance.id) instance.reference_number = refnum instance.save() logger.info( f"CustomInvoice {instance} created for user {instance.user} without reference number. Generated reference number {refnum} for it" )
def application_creation(sender, instance: models.MembershipApplication, created, raw, **kwargs): """ This is for the models internal use, others should listen to create_application signal which is triggered after all the internal things have been done """ if raw: return if created: # now we have the users id and we can generate reference number from it # saving it will trigger a new post_save but created will be False (at least I hope so :) # as instance id:s start from 1 the reference numbers will be first multiplied by 100 instance.reference_number = referencenumber.generate(instance.id * 100) instance.save() logger.info("Membership application created {}".format(instance)) create_application.send(instance.__class__, instance=instance) logger.info("Membership application creation done {}".format(instance))
def generate_missing_custominvoice_reference_numbers(apps, schema_editor): CustomInvoice = apps.get_model('users', 'CustomInvoice') for invoice in CustomInvoice.objects.all(): if invoice.reference_number is None: invoice.reference_number = referencenumber.generate(settings.CUSTOM_INVOICE_REFERENCE_BASE + invoice.id) invoice.save()