def add_worklog(request, proj_id): """ Provides a blank worklog form and accepts the data from it. """ project = Project.objects.get(id=proj_id) args = {} args.update(csrf(request)) args['project'] = project form = EditWorklogForm() args['form'] = form if (request.method == "POST") and (request.user in project.members.all() or request.user == project.manager): workLog = Worklog() form = EditWorklogForm(request.POST) if form.is_valid(): workLog = form.save(owner=request.user, project=project) event = TimelineEvent() event.member = request.user event.title = "added a new worklog to " + project.name event.description = workLog.description event.category = "work" event.related_key = workLog.id event.save() event.viewers = project.members.all() messages.info(request, "Worklog saved successfully.") return HttpResponseRedirect('/work/' + str(workLog.id) + "/") else: messages.error(request, "Form information is incorrect.") args['form'] = EditWorklogForm(request.POST) return render_to_response('worklog_create.html', RequestContext(request, args)) else: if request.user in project.members.all(): return render_to_response('worklog_create.html', RequestContext(request, args)) else: return HttpResponseRedirect('/projects/')
def edit_worklog(request, log_id=False, proj_id=False): """ Displays a worklog's data and allows for it to be edited and saved. """ worklog = Worklog.objects.get(id=log_id) if (request.method == "POST" and worklog.owner == request.user): form = EditWorklogForm(request.POST, instance=worklog) if form.is_valid(): oldTime = worklog.minutes + (worklog.hours * 60) worklog = form.save() newTime = worklog.minutes + (worklog.hours * 60) logTimeChange = newTime - oldTime messages.info(request, "Worklog updated.") return HttpResponseRedirect('/work/' + str(worklog.id) + "/") else: messages.error(request, "Invalid form information.") pageData = {} pageData['form'] = EditWorklogForm(request.POST) return render_to_response('worklog_edit.html', RequestContext(request, pageData)) else: form = EditWorklogForm(instance=worklog) args = {} args['form'] = form args['worklog'] = worklog return render_to_response('worklog_edit.html', RequestContext(request, args))
def view_worklog(request, log_id): """ Displays the selected workLog """ worklog = Worklog.objects.get(id=log_id) initialDict = { "summary": worklog.summary, "minutes": worklog.minutes, "hours": worklog.hours, "description": worklog.description, } form = EditWorklogForm() form.initial = initialDict args = {} args['form'] = form args['worklog'] = worklog args['canEdit'] = (request.user == worklog.owner) args['project'] = worklog.project return render_to_response('worklog_view.html', RequestContext(request, args))
def import_worklog_csv(request): pageData = {} if (request.method == 'POST'): form = UploadFileForm(request.POST, request.FILES) if form.is_valid() and (request.FILES['file'].size / (1024 * 1024)) < 2: reader = csv.DictReader( request.FILES['file'].read().decode().splitlines()) imported = 0 failed = 0 for row in reader: if ('name' in row): matchingProjects = Project.objects.filter( Q(manager=request.user) | Q(members=request.user)).filter(name=row['name']).count() if (matchingProjects > 0): project = Project.objects.filter( Q(manager=request.user) | Q(members=request.user)).filter(name=row['name'])[0] if ('duration' in row and row['duration'] != None): try: row['hours'] = float( row['duration'].split('.')[0]) except: row['hours'] = 0 try: if ('.' in row['duration']): row['minutes'] = float( "." + row['duration'].split('.'[1])) * 60 else: row['minutes'] = 0 except: row['minutes'] = 0 if ('datestamp' in row and row['datestamp'] != None): try: row['datestamp'] = dateutil.parser.parse( row['datestamp']) except: pass if ('description' in row and row['description'] != None): row['summary'] = " ".join( row['description'].split()[0:3]) addWorklog = EditWorklogForm(row) if (addWorklog.is_valid()): log = addWorklog.save( owner=request.user, project=project) if('datestamp' in row): log.datestamp = row['datestamp'] log.save() imported += 1 messages.info(request, "Successfully imported " + str(imported) + " worklogs. " + str(failed) + " could not be imported.") else: messages.error( request, "Unable to import worklogs from your file.") return HttpResponseRedirect('/projects/') else: pageData['form'] = UploadFileForm() pageData['sendback'] = "/projects/importcsv/work/" messages.info( request, "Import worklogs from a CSV file. The file should be well-formed \ and should contain at least two columns: the project name in the 'name' column \ and the work description in the 'description' column.") return render_to_response('upload_csv.html', RequestContext(request, pageData))