Fixed issue with calculating the balance on an invoice

Improvements to the invoice importer
This commit is contained in:
Tom Price
2015-02-09 17:48:59 +00:00
parent 46aa363851
commit ff1d5730a2
2 changed files with 52 additions and 46 deletions

View File

@@ -329,10 +329,12 @@ class Invoice(models.Model):
@property @property
def payment_total(self): def payment_total(self):
total = self.payment_set.aggregate(models.Sum('amount')) sum = self.payment_set.aggregate(models.Sum('amount'))['amount__sum']
# for payment in self.payment_set.all(): # for payment in self.payment_set.all():
# total += payment.amount # total += payment.amount
return total if sum:
return sum
return 0
@property @property
def balance(self): def balance(self):

View File

@@ -254,31 +254,28 @@ def import_eventitem(delete=True):
def import_nonrigs(delete=False): def import_nonrigs(delete=False):
if (delete): if (delete):
try: try:
models.Event.objects.get(is_rig=False).delete() models.Event.objects.filter(is_rig=False).delete()
except: except:
pass pass
cursor = setup_cursor() cursor = setup_cursor()
if cursor is None: if cursor is None:
return return
sql = """SELECT id, name, start_date, start_time, end_date, end_time, description, user_id FROM non_rigs WHERE active = 1;""" sql = """SELECT name, start_date, start_time, end_date, end_time, description, user_id FROM non_rigs WHERE active = 1;"""
cursor.execute(sql) cursor.execute(sql)
for row in cursor.fetchall(): for row in cursor.fetchall():
print(row) print(row)
mic = models.Profile.objects.get(pk=row[6]) mic = models.Profile.objects.get(pk=row[6])
with transaction.atomic(), reversion.create_revision(): object = models.Event()
try: object.name = row[0]
object = models.Event.objects.get(pk=row[0]) object.start_date = row[1]
except ObjectDoesNotExist: object.start_time = row[2]
object = models.Event() object.end_date = row[3]
object.name = row[1] object.end_time = row[4]
object.start_date = row[2] object.description = row[5]
object.start_time = row[3] object.is_rig = False
object.end_date = row[4] object.mic = mic
object.end_time = row[5] print(object)
object.description = row[6] object.save()
object.mic = row[7]
print(object)
object.save()
def import_invoices(delete=False): def import_invoices(delete=False):
@@ -295,10 +292,13 @@ def import_invoices(delete=False):
cursor.execute(sql) cursor.execute(sql)
for row in cursor.fetchall(): for row in cursor.fetchall():
print(row) print(row)
print row[1]
try: try:
event = models.Event.objects.get(pk=row[1]) event = models.Event.objects.get(pk=row[1])
except ObjectDoesNotExist: except ObjectDoesNotExist:
print "Event %d not found" % row[1]
continue continue
print(event)
try: try:
invoice = models.Invoice.objects.get(event=event) invoice = models.Invoice.objects.get(event=event)
@@ -307,42 +307,46 @@ def import_invoices(delete=False):
invoice.save() invoice.save()
invoice.invoice_date = row[2] invoice.invoice_date = row[2]
invoice.save() invoice.save()
print(invoice)
try: if row[3]:
payment = models.Payment.objects.get(invoice=invoice) try:
except ObjectDoesNotExist: payment = models.Payment.objects.get(invoice=invoice)
payment = models.Payment(invoice=invoice) except ObjectDoesNotExist:
if row[4] >= event.sum_total: payment = models.Payment(invoice=invoice)
payment.amount = event.sum_total if row[4] >= event.sum_total:
else: payment.amount = event.sum_total
payment.amount = row[4] else:
payment.date = row[3] payment.amount = row[4]
payment.save() payment.date = row[3]
payment.save()
print(payment)
if invoice.invoice_date < (datetime.date.today() - datetime.timedelta(days=365)) and invoice.balance: if invoice.invoice_date < (datetime.date.today() - datetime.timedelta(days=365)) and invoice.balance:
p2 = models.Payment(amount=invoice.balance) p2 = models.Payment(amount=invoice.balance)
payment.method = payment.ADJUSTMENT p2.invoice = invoice
payment.date = datetime.date.today() p2.method = payment.ADJUSTMENT
payment.save() p2.date = datetime.date.today()
p2.save()
@transaction.atomic @transaction.atomic
def main(): def main():
processs = [] # processs = []
processs.append(Process(target=import_users)) # processs.append(Process(target=import_users))
processs.append(Process(target=import_people, args=(True,))) # processs.append(Process(target=import_people, args=(True,)))
processs.append(Process(target=import_organisations, args=(True,))) # processs.append(Process(target=import_organisations, args=(True,)))
processs.append(Process(target=import_vat_rates, args=(True,))) # processs.append(Process(target=import_vat_rates, args=(True,)))
processs.append(Process(target=import_venues, args=(True,))) # processs.append(Process(target=import_venues, args=(True,)))
#
# Start all processs # # Start all processs
[x.start() for x in processs] # [x.start() for x in processs]
# Wait for all processs to finish # # Wait for all processs to finish
[x.join() for x in processs] # [x.join() for x in processs]
#
import_rigs(True) # import_rigs(True)
import_eventitem(True) # import_eventitem(True)
import_nonrigs(True)
import_invoices(True) import_invoices(True)
# import_nonrigs(False)
if __name__ == "__main__": if __name__ == "__main__":