KCal::Event*
ICalReport::generateEvent(Task* task, ResourceList& resourceList)
{
    KCal::Event *event = new KCal::Event();

    QDateTime dt;

    /* Start-Time of the task */
    dt.setTime_t(task->getStart(scenarios[0]), Qt::UTC);
    event->setDtStart(dt);

    /* Due-Time of the event -> plan End  */
    dt.setTime_t(task->getEnd(scenarios[0]) + 1, Qt::UTC);
    event->setHasEndDate(true);
    event->setDtEnd(dt);

    // Make sure that the time is not ignored.
    event->setFloats(false);

    /* Description and summary -> project ID */
    event->setDescription(task->getNote());
    event->setSummary(task->getName());

    /* ICal defines priorities between 1..9 where 1 is the highest. TaskJuggler
     * uses Priority 1 - 1000, 1000 being the highest. So we have to map the
     * priorities. */
    event->setPriority(1 + ((1000 - task->getPriority()) / 100));

    /* Resources */
    ResourceListIterator rli = task->getBookedResourcesIterator(scenarios[0]);
    for (; *rli != 0; ++rli)
        // We only include resources that have not been filtered out.
        if (resourceList.find(*rli))
            event->addAttendee(new KCal::Attendee
                               ((*rli)->getName(), "", false,
                                KCal::Attendee::NeedsAction,
                                KCal::Attendee::ReqParticipant,
                                (*rli)->getId()));

    return event;
}