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)
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