function orders_create($dishid, $input_data = array())
{
    global $tpl;
    if (!isset($input_data['quantity'])) {
        $input_data['quantity'] = 1;
        echo '<br>quantity not set!';
    }
    $existing = 0;
    if (isset($input_data['priority']) && $input_data['priority']) {
        $existing = order_find_incrementable($dishid, $input_data['priority']);
    }
    if ($existing) {
        // the order already exists, so updates the old one instead of creating a new identical
        $existing = (int) $existing;
        $ord = new order($existing);
        $data_old = $ord->data;
        $data_old['quantity'] = $data_old['quantity'] + $input_data['quantity'];
        if ($err = orders_update($data_old)) {
            return 0;
        }
        return $ord->id;
    }
    $ord = new order();
    $ord->prepare_default_array($dishid);
    if ($err = $ord->create()) {
        return 0;
    }
    // insert all the modules interfaces for order creation here
    toplist_insert($dishid, $input_data['quantity']);
    //don't move stock from here!
    if (class_exists('stock_object') && isset($input_data['quantity'])) {
        $stock = new stock_object();
        $stock->silent = true;
        $stock->remove_from_waiter($ord->id, $input_data['quantity']);
    }
    // end interfaces
    $ord->data['associated_id'] = $ord->id;
    $ord->data['quantity'] = $input_data['quantity'];
    if (isset($input_data['priority']) && $input_data['priority']) {
        $ord->data['priority'] = $input_data['priority'];
    }
    if ($dishid == SERVICE_ID) {
        $ord->data['priority'] = 0;
    }
    if ($err = $ord->set()) {
        return 0;
    }
    return $ord->id;
}
function toplist_update($dishid, $old, $new)
{
    $err = 0;
    $quantity_diff = $new - $old;
    if ($quantity_diff > 0) {
        $err = toplist_insert($dishid, abs($quantity_diff));
    }
    if ($quantity_diff < 0) {
        $err = toplist_delete($dishid, abs($quantity_diff));
    }
    return $err;
}