Esempio n. 1
0
def createInvoice(inv_data, supplier_id, user):
    groups = defaultdict(lambda: defaultdict(lambda: defaultdict(list)))
    for c in inv_data:
        if c.amount > 0:
            groups[c.product][c.price]['+'].append(c)
        else:
            groups[c.product][c.price]['-'].append(c)

    invoice = Invoice(user=user,
                      sent=(user.id == supplier_id),
                      paid=(user.id == supplier_id),
                      date=datetime.datetime.utcnow(),
                      positions=[],
                      supplier_id=supplier_id)

    for product, pricedict in groups.items():
        for price, consumptions in pricedict.items():
            if len(consumptions['+']) > 0:
                summe = sum((c.price * c.amount) for c in consumptions['+'])
                amount = sum(c.amount for c in consumptions['+'])
                p = Position(amount=amount,
                             price=price,
                             sum=summe,
                             invoice=invoice,
                             product=product)
                invoice.positions.append(p)
            if len(consumptions['-']) > 0:
                summe = sum((c.price * c.amount) for c in consumptions['-'])
                amount = sum(c.amount for c in consumptions['-'])
                p = Position(amount=amount,
                             price=price,
                             sum=summe,
                             invoice=invoice,
                             product=product)
                invoice.positions.append(p)

    for c in inv_data:
        c.invoice = invoice
        c.billed = True

    invsum = float("{0:.2f}".format(sum(p.sum for p in invoice.positions)))
    invoice.sum = invsum
    db.session.add(invoice)