예제 #1
0
    def backwards(self, orm):
        from mongoengine import Document, fields
        class InvoiceBaseGroup(Document):
            quotation = fields.ReferenceField("Quotation")
            down_payment_invoices = fields.ListField(fields.ReferenceField("DownPaymentInvoice"))
            invoice = fields.ReferenceField("Invoice")
            invoices_cancelled = fields.ListField(fields.ReferenceField("Invoice"))
            credit_notes = fields.ListField(fields.ReferenceField("CreditNote"))

        for group in InvoiceBaseGroup.objects():
            if group.quotation:
                kwargs = dict()
                if group.invoice:
                    kwargs.update(set__related_invoice=group.invoice)
                if group.invoices_cancelled:
                    kwargs.update(set__related_invoices_cancelled=group.invoices_cancelled)
                if group.down_payment_invoices:
                    kwargs.update(set__down_payments=group.down_payment_invoices)
                if kwargs:
                    group.quotation.update(**kwargs)
            if group.down_payment_invoices or group.invoice:
                kwargs = dict()
                if group.credit_notes:
                    kwargs.update(set__related_credit_note=group.credit_notes[0])
                if kwargs:
                    for down_payment_invoice in group.down_payment_invoices:
                        down_payment_invoice.update(**kwargs)
                    if group.invoice:
                        group.invoice.update(**kwargs)
            if group.credit_notes:
                for credit_note in group.credit_notes:
                    if credit_note._data.get('related_to'):
                        credit_note.update(set__related_invoice=dereference(credit_note._data.get('related_to'), Invoice))
                    else:
                        credit_note.update(set__related_invoice=group.invoice)