def backlogsprint_view(request):
    projektid = request.matchdict['projektid']
    sprintnumber = request.matchdict['sprintnumber']
    session = request.session
    username = session.get("user")
    userid = session.get("userid")
    if username is None:
        return HTTPFound('/login')
    projekt = database.readProjectByProjectid(userid, projektid)
    if type(projekt) is int:
        print("Error: " + replyCodes[projekt])
        return HTTPFound('/scrumboard/' + projektid)
    sprints = database.readSprintsOfProject(userid, projektid)
    if type(sprints) is int:
        print("Error: " + replyCodes[sprints])
        return HTTPFound('/scrumboard/' + projektid)
    #all tickets of project
    tickets = database.readTicketsOfProject(userid, projektid)
    if type(tickets) is int:
        print("Error: " + replyCodes[tickets])
        return HTTPFound('/scrumboard/' + projektid)
    for t in tickets:
        t.prioritaet = priority[t.prioritaet]
        t.typ = typ[t.typ]
        if t.sprintid:
            sprintNr = None
            for s in sprints:
                if s.id == t.sprintid:
                    sprintNr = s.number
                    break
            if sprintNr:
                t.name =  "[In Sprint " + str(sprintNr) + "] " + t.name
    #tickets of sprint
    sprinttickets = database.readTicketsOfSprint(userid, projektid, sprintnumber)
    if type(sprinttickets) is int:
        print("Error: " + replyCodes[sprinttickets])
        return HTTPFound('/scrumboard/' + projektid)
    for t in sprinttickets:
        t.prioritaet = priority[t.prioritaet]
        t.typ = typ[t.typ]
    if request.method == 'POST':
        data = request.POST
        taskid = data.get('task')
        snr = data.get('sprintnr')
        pid = data.get('pid')
        changed = database.changeTicketSprint(userid, int(taskid), int(snr))
        if changed > 0:
	    print("Error : " + replyCodes[changed])
	    return HTTPFound("/backlog/" + projektid + "/" + sprintnumber)
        
    return{'tickets' : tickets, 'projekt' : projekt, 'sprints' : sprints, 'sprinttickets' : sprinttickets, 'sprintnumber' : int(sprintnumber)}
def chart_view(request):
    session = request.session
    username = session.get("user")
    userid = session.get("userid")
    projektid = request.matchdict['projektid']
    sprintnumber = request.matchdict['sprintnumber']
    if username is None:
        return HTTPFound('/login')
      
    projekt = database.readProjectByProjectid(userid, projektid)
    if type(projekt) is int:
        print("Error! " + replyCodes[projekt])
        return HTTPFound("/scrumboard/" + projektid + "/" + sprintnumber)
      
    sprint = database.readSprintOfProject(userid, projektid, sprintnumber)
    if type(sprint) is int:
        print("Error! " + replyCodes[sprint])
        return HTTPFound("/scrumboard/" + projektid + "/" + sprintnumber)  
      
    tickets = database.readTicketsOfSprint(userid, projektid, sprintnumber)
    if type(tickets) is int:
        print("Error! " + replyCodes[tickets])
        return HTTPFound("/scrumboard/" + projektid + "/" + sprintnumber)
      
    totaleffort = 0
    for ticket in tickets:
        totaleffort = totaleffort + ticket.effort
        
    dateEffortValues = []
    curDate = sprint.start
    curEffortHeight = totaleffort
    while curDate <= sprint.end:
        for t in tickets:
	    if curDate == t.finished:
	        curEffortHeight = curEffortHeight - t.effort
        dateEffortValues.append({
	    'remainingEffort':curEffortHeight,
	    'datum':str(curDate.day) + '.' + str(curDate.month)
        })
        curDate = curDate + timedelta(days=1)
        
    ticketdata = {}
    ticketdata['totaleffort'] = totaleffort
    ticketdata['dateEffortValues'] = dateEffortValues
    ticketdata['daysNum'] = len(ticketdata['dateEffortValues'])
        
    return{'projekt' : projekt, 'sprint' : sprint, 'tickets' : tickets, 'ticketdata' : ticketdata}
def sprint_view(request):
    projektid = request.matchdict['projektid']
    sprintnumber = request.matchdict['sprintnumber']
    session = request.session
    username = session.get("user")
    userid = session.get("userid")
    session['activeprojectid'] = projektid

    if username is None:
        return HTTPFound('/login')
    #do stuff
    project = database.readProjectByProjectid(userid, projektid)
    if type(project) is int:
        print("Error:" + replyCodes[project])
        return HTTPFound('/dashboard')
        
    dbsprints = database.readSprintsOfProject(userid, projektid)
    if type(dbsprints) is int:
        print("Error: " + replyCodes[dbsprints])
        return HTTPFound('/dashboard')
    sprints = []
    activesprint = None
    for sprint in dbsprints:
        sprints.append(sprint)
        if sprint.number == int(sprintnumber):
            activesprint = sprint
    if activesprint is None:
        return HTTPFound('/scrumboard/' + projektid)
    sstart = activesprint.start
    send = activesprint.end
    #tasks for sprint
    tasks = database.readTicketsOfSprint(userid, projektid, sprintnumber)
    if type(tasks) is int:
        print("Error: " + replyCodes[tasks])
        return HTTPFound('/scrumboard/' + activeprojectid)
    ausstehend = []
    bearbeitung = []
    testphase = []
    fertig = []
    for ticket in tasks:
        ticket.prioritaet = priority[ticket.prioritaet]
        ticket.typ = typ[ticket.typ]
        if ticket.column == 1:
            ausstehend.append(ticket)
        elif ticket.column == 2:
            bearbeitung.append(ticket)
        elif ticket.column == 3:
            testphase.append(ticket)
        elif ticket.column == 4:
            fertig.append(ticket)
        
    if request.method == 'POST':
        data = request.POST
        tid = data.get('task')
        cid = data.get('column')
        changed = database.changeTicketColumn(userid, int(tid), int(cid))
        if changed > 0:
            print("Error : " + replyCodes[changed])
            return HTTPFound("/scrumboard/" + projektid + "/" + sprintnumber)
    
    return{ 'sprints' : sprints, 'project' : projektid, 'projektname' : project.name, 'sprintnumber' : int(sprintnumber), 'sprintstart' : sstart, 'sprintend' : send , 'ticketausstehend' : ausstehend, 'ticketbearbeitung' : bearbeitung, 'tickettest' : testphase, 'ticketfertig' : fertig}