Пример #1
0
    def tricky_stuff():
        for prd in data["sell"]:
            product = Key('Product',
                          int(prd['id']),
                          parent=TypeGroup.product_ancestor()).get()
            if product is None:
                raise OperationError(
                    "Product with id {} does not exist.".format(product))
            line = product.take(int(prd['amount']))
            product.put()

            for mod in prd["mods"]:
                mod_obj = Key('Mod',
                              int(mod),
                              parent=TypeGroup.product_ancestor()).get()
                if mod_obj is None:
                    raise OperationError(
                        "Mod with id {} does not exist.".format(mod))
                mod_obj.apply(line)

            t.one_to_two.append(line)

        for prd in data["buy"]:
            product = Key('Product',
                          int(prd['id']),
                          parent=TypeGroup.product_ancestor()).get()
            if product is None:
                raise OperationError(
                    "Product with id {} does not exist.".format(product))
            line = TransactionLine(product=product.key,
                                   amount=int(prd['amount']),
                                   value=int(prd['price']))

            for mod in prd["mods"]:
                mod_obj = Key('Mod',
                              int(mod),
                              parent=TypeGroup.product_ancestor()).get()
                if mod_obj is None:
                    raise OperationError(
                        "Mod with id {} does not exist.".format(mod))
                mod_obj.apply(line)

            product.give(line)
            product.put()
            t.two_to_one.append(line)
Пример #2
0
def edit_transaction(t, data):
    # Easy stuff first
    # Note, this does not take care of money in budgets, do outside! Something with transactional limitations...
    t.revision += 1

    if "deliverydate" in data:
        t.deliverydate = datetime.strptime(data["deliverydate"],
                                           "%Y-%m-%d").date()

    if "description" in data:
        t.description = data["description"]

    newsell = []
    for prd in data["sell"]:
        product = Key('Product',
                      int(prd['id']),
                      parent=TypeGroup.product_ancestor()).get()
        if product is None:
            raise OperationError(
                "Product with id {} does not exist.".format(product))

        line = TransactionLine(value=0,
                               amount=int(prd['amount']),
                               product=product.key)
        product.put()

        for mod in prd["mods"]:
            mod_obj = Key('Mod', int(mod),
                          parent=TypeGroup.product_ancestor()).get()
            if mod_obj is None:
                raise OperationError(
                    "Mod with id {} does not exist.".format(mod))
            line.mods.append(mod_obj.key)

        newsell.append(line)

    t.one_to_two = transform_collection(t.one_to_two, newsell, True)

    newbuy = []
    for prd in data["buy"]:
        product = Key('Product',
                      int(prd['id']),
                      parent=TypeGroup.product_ancestor()).get()
        if product is None:
            raise OperationError(
                "Product with id {} does not exist.".format(product))
        line = TransactionLine(product=product.key,
                               amount=int(prd['amount']),
                               value=int(prd['price']))

        for mod in prd["mods"]:
            mod_obj = Key('Mod', int(mod),
                          parent=TypeGroup.product_ancestor()).get()
            if mod_obj is None:
                raise OperationError(
                    "Mod with id {} does not exist.".format(mod))
            mod_obj.apply(line)

        newbuy.append(line)
    t.two_to_one = transform_collection(t.two_to_one, newbuy, False)

    t.services = []
    for prd in data["service"]:
        line = ServiceLine(service=prd['contenttype'],
                           amount=int(prd['amount']),
                           value=int(prd['price']))

        t.services.append(line)

    t.total = transaction_total(t)
    t.put()
    return t