Exemple #1
0
def edit_project(request, prj_id=None):
    try:
        project=Project.objects.filter(user=request.user).get(pk=prj_id)
    except Exception:
        project=None
#Получаем список проектов. которые не могут быть родителями
    child_list=hier_childs(head_projects=[project,], user=request.user)
    if not child_list:
        #Тут надо совсем опечалиться и что-то нибудь умное сделать. Например:
        project.parent=None
        project.save()
        child_list=hier_childs(head_projects=[project,], user=request.user)
    can_not_be_parrent = []
    for pr in child_list:
        can_not_be_parrent.append(pr['project'].id)
    can_be_parent=Project.objects.filter(user=request.user).exclude(pk__in=can_not_be_parrent)
    id_can_be_parent=[]
    for pr in can_be_parent:
        id_can_be_parent.append(pr.id)
#Приступаем к дальнейшей обработке
    if request.method == 'POST':
        form=ProjectForm(id_can_be_parent, request.POST, instance=project)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/tracking/%s/' %project.id)
    else:
        form=ProjectForm(id_can_be_parent, instance=project)
    return render_to_response('timerecords/edit_rec.html', {'rec': project, 'form': form,}, context_instance=RequestContext(request))
Exemple #2
0
def project_list(request):
    #Добыча записей с нулл длительностью
    null_rec_list=Record.objects.filter(user=request.user, duration=None)
    #Обработка старта/остановки треккинга
    if 'prjct' in request.POST:
        #Останавливаем текущие
        for rec in null_rec_list:
            a=timezone.now()-rec.start_time
            rec.duration=a.days*24*60*60+a.seconds
            rec.save()
        pr_answer=request.POST['prjct']
        #Если заводим запись в новый проект:
        if pr_answer=='-2' and request.POST['newprjct']:
            pr_new=Project(user=request.user, name=request.POST['newprjct'], new=True)
            pr_new.save()
            pr_answer=pr_new.id
        #Продолжаем какой-то проект:
        try:
            pr=Project.objects.get(pk=pr_answer)
        except Exception:
            rec_new=None
        else:
            rec_new = Record(user=request.user, project=pr, start_time=timezone.now())
            rec_new.save()
        #Обновление списка записей с нулл длительностью.    
        null_rec_list=Record.objects.filter(user=request.user, duration=None)
    
    #Добыча списка корневых проектов. 
    #Если установлена фокусировка на проекте, то он выступает корневым.
    #зацикленных проектов быть не может
    has_filters=0
    if 'focus_project' in request.session:
        try:
            projects=Project.objects.filter(user=request.user, pk=request.session['focus_project'])
            has_filters=1
        except Exception:
            del request.session["focus_project"]
    if not has_filters:
        projects=Project.objects.filter(user=request.user, parent=None)
    hier_projects_list=hier_childs(head_projects=projects, user=request.user)
   
   #Вычислим длительность для каждого проекта
    projects_list=[]
    for project in hier_projects_list:
        duration=format_duration(prj_duration(project['project']))
        #Текущий символ обозначения иерархии
        hier=' |'
        projects_list.append({'project': project['project'], 'level': hier*(project['level']-1), 'duration': duration, 'total_duration': format_duration(total_duration(project['project']))})
    return render_to_response('timerecords/Projects_to_start.html', {'list': projects_list, 'now_going': null_rec_list, 'filters': has_filters}, 
                                context_instance=RequestContext(request)) 
Exemple #3
0
def del_project(request, prj_id=None):
    try:
        project=Project.objects.filter(user=request.user).get(pk=prj_id)
    except Exception:
        raise Http404
    if request.method == 'POST':
        rec_list=[]
        child_list=[]
        if 'i_sure' in request.POST:
            if not('del_child' in request.POST):
                project.project_set.all().update(parent=project.parent)
            #все связанные записи и пректы удалятся автоматически
            project.delete()
            return HttpResponseRedirect('/')
        else:
            rec_list=Record.objects.filter(project=project)
            child_list=hier_childs([project,])[1:]
    else:
        raise Http404
    return render_to_response('timerecords/del_rec.html', {'rec': project, 'rec_list': rec_list, 'child_list':child_list}, context_instance=RequestContext(request))