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