Project

General

Profile

« Previous | Next » 

Revision ff8d6077

Added by Mikaël Ates over 13 years ago

facturation: Change how invoicings and invoices are numbered.

  • Invoicings for the CMPP must start with an offset depending
    on the last invoicing at software switching.

    INVOICING_OFFSET is used for this purpose.

  • Invoices must start with the invoicing number. We allow 99999
    invoices per invoicing.

    eg. invoicing number 133, invoices from 13300001 to 13399999.

View differences:

calebasse/facturation/models.py
return (invoices, len_invoices, len_invoices_hors_pause,
len_acts_invoiced, len_acts_invoiced_hors_pause)
INVOICING_OFFSET = 666
class Invoicing(models.Model):
'''Represent a batch of invoices:
......
seq_id = 1
max_seq_id = Invoicing.objects.for_service(self.service) \
.aggregate(Max('seq_id'))['seq_id__max']
if max_seq_id:
seq_id = seq_id + max_seq_id
if not max_seq_id:
if self.service.name == 'CMPP':
seq_id = INVOICING_OFFSET
else:
seq_id = max_seq_id + 1
return seq_id
def list_for_billing(self):
......
return price_o
# Last invoice from the previous software
INVOICE_OFFSET = 10000
class Invoice(models.Model):
number = models.IntegerField(blank=True, null=True)
created = models.DateTimeField(u'Création', auto_now_add=True)
......
amount = models.IntegerField()
ppa = models.IntegerField()
def allocate_number(self):
number = 1
max_number = Invoice.objects.all() \
.aggregate(Max('number'))['number__max']
if max_number:
number = number + max_number
number = number + INVOICE_OFFSET
return number
def save(self, *args, **kwargs):
if not self.number:
self.number = self.allocate_number()
invoicing = self.invoicing
self.number = invoicing.seq_id * 100000 + 1
max_number = invoicing.invoice_set.aggregate(Max('number'))['number__max']
if max_number:
self.number = max_number + 1
super(Invoice, self).save(*args, **kwargs)
def __unicode__(self):

Also available in: Unified diff