def agent_index(request, response_format='html'): "All available Agents" if not request.user.get_profile().is_admin('treeio.services'): return user_denied( request, message= "You don't have administrator access to the Service Support module" ) if request.GET: query = _get_filter_query(request.GET, ServiceAgent) agents = Object.filter_by_request(request, ServiceAgent.objects.filter(query)) else: agents = Object.filter_by_request(request, ServiceAgent.objects) filters = AgentFilterForm(request.user.get_profile(), '', request.GET) context = _get_default_context(request) context.update({'agents': agents, 'filters': filters}) return render_to_response('services/agent_index', context, context_instance=RequestContext(request), response_format=response_format)
def get_events(request): "Return a list of EventRenderers from available Tasks and Milestones" events = [] query = (Q(start_date__isnull=False) | Q(end_date__isnull=False)) & Q( status__hidden=False) tasks = Object.filter_by_request( request, manager=Task.objects.filter(query)) for task in tasks: if task.end_date: event = EventRenderer( task.name, task.start_date, task.end_date, task.get_absolute_url()) else: event = EventRenderer( task.name, None, task.start_date, task.get_absolute_url()) event.css_class += " projects-calendar-task" events.append(event) query = (Q(start_date__isnull=False) | Q(end_date__isnull=False)) & Q( status__hidden=False) milestones = Object.filter_by_request( request, manager=Milestone.objects.filter(query)) for milestone in milestones: name = " " + milestone.name if milestone.end_date: event = EventRenderer(name, milestone.start_date, milestone.end_date, milestone.get_absolute_url()) else: event = EventRenderer( name, None, milestone.start_date, milestone.get_absolute_url()) event.css_class += " projects-calendar-milestone" events.append(event) return events
def contact_view(request, contact_id, attribute='', response_format='html'): "Contact view" contact = get_object_or_404(Contact, pk=contact_id) if not request.user.get_profile().has_permission(contact): return user_denied(request, message="You don't have access to this Contact") types = Object.filter_by_request(request, ContactType.objects.order_by('name')) subcontacts = Object.filter_by_request(request, contact.child_set) contact_values = contact.contactvalue_set.order_by('field__name') objects = get_contact_objects(request.user.get_profile(), contact, preformat=True) module = None for key in objects: if not attribute: if objects[key]['count']: #attribute = objects[key]['objects'].keys()[0] module = objects[key]['module'] else: if attribute in objects[key]['objects'].keys(): module = objects[key]['module'] break return render_to_response('identities/contact_view', {'contact': contact, 'subcontacts': subcontacts, 'objects': objects, 'current_module': module, 'attribute': attribute, 'types': types, 'contact_values': contact_values}, context_instance=RequestContext(request), response_format=response_format)
def project_view(request, project_id, response_format='html'): "Single project view page" project = get_object_or_404(Project, pk=project_id) if not request.user.get_profile().has_permission(project): return user_denied(request, message="You don't have access to this Project") query = Q(parent__isnull=True, project=project) if request.GET: if 'status' in request.GET and request.GET['status']: query = query & _get_filter_query(request.GET) else: query = query & Q(status__hidden=False) & _get_filter_query(request.GET) else: query = query & Q(status__hidden=False) if request.user.get_profile().has_permission(project, mode='r'): if request.POST: record = UpdateRecord() record.record_type = 'manual' form = TaskRecordForm(request.user.get_profile(), request.POST, instance=record) if form.is_valid(): record = form.save() record.set_user_from_request(request) record.save() record.about.add(project) project.set_last_updated() return HttpResponseRedirect(reverse('projects_project_view', args=[project.id])) else: form = TaskRecordForm(request.user.get_profile()) else: form = None tasks = Object.filter_by_request(request, Task.objects.filter(query)) tasks_progress = float(0) tasks_progress_query = Object.filter_by_request(request, Task.objects.filter(Q(parent__isnull=True, project=project))) if tasks_progress_query: for task in tasks_progress_query: if not task.status.active: tasks_progress += 1 tasks_progress = (tasks_progress / len(tasks_progress_query)) * 100 tasks_progress = round(tasks_progress, ndigits=1) filters = FilterForm(request.user.get_profile(), 'project', request.GET) milestones = Object.filter_by_request(request, Milestone.objects.filter(project=project).filter(status__hidden=False)) subprojects = Project.objects.filter(parent=project) context = _get_default_context(request) context.update({'project': project, 'milestones': milestones, 'tasks':tasks, 'tasks_progress':tasks_progress, 'record_form':form, 'subprojects':subprojects, 'filters': filters}) return render_to_response('projects/project_view', context, context_instance=RequestContext(request), response_format=response_format)
def get_events(request): "Return a list of EventRenderers from available Tasks and Milestones" events = [] query = (Q(start_date__isnull=False) | Q(end_date__isnull=False)) & Q(status__hidden=False) tasks = Object.filter_by_request(request, manager=Task.objects.filter(query)) for task in tasks: if task.end_date: event = EventRenderer(task.name, task.start_date, task.end_date, task.get_absolute_url()) else: event = EventRenderer(task.name, None, task.start_date, task.get_absolute_url()) event.css_class += " projects-calendar-task" events.append(event) query = (Q(start_date__isnull=False) | Q(end_date__isnull=False)) & Q(status__hidden=False) milestones = Object.filter_by_request( request, manager=Milestone.objects.filter(query)) for milestone in milestones: name = " " + milestone.name if milestone.end_date: event = EventRenderer(name, milestone.start_date, milestone.end_date, milestone.get_absolute_url()) else: event = EventRenderer(name, None, milestone.start_date, milestone.get_absolute_url()) event.css_class += " projects-calendar-milestone" events.append(event) return events
def index_by_status(request, status_id, response_format='html'): "Sort tasks by status" status = get_object_or_404(TaskStatus, pk=status_id) if not request.user.get_profile().has_permission(status): return user_denied(request, message="You don't have access to this Task Status") query = Q(parent__isnull=True, status=status) if request.GET: query = query & _get_filter_query(request.GET) tasks = Object.filter_by_request(request, Task.objects.filter(query)) milestones = Object.filter_by_request( request, Milestone.objects.filter(task__status=status).distinct()) filters = FilterForm(request.user.get_profile(), 'status', request.GET) context = _get_default_context(request) context.update({'milestones': milestones, 'tasks': tasks, 'status': status, 'filters': filters}) return render_to_response('projects/index_by_status', context, context_instance=RequestContext(request), response_format=response_format)
def index(request, response_format='html'): "Project Management index page" query = Q(parent__isnull=True) if request.GET: if 'status' in request.GET and request.GET['status']: query = query & _get_filter_query(request.GET) else: query = query & Q( status__hidden=False) & _get_filter_query(request.GET) else: query = query & Q(status__hidden=False) tasks = Object.filter_by_request(request, Task.objects.filter(query)) milestones = Object.filter_by_request( request, Milestone.objects.filter(status__hidden=False)) filters = FilterForm(request.user.get_profile(), '', request.GET) context = _get_default_context(request) context.update({'milestones': milestones, 'tasks': tasks, 'filters': filters}) return render_to_response('projects/index', context, context_instance=RequestContext(request), response_format=response_format)
def index(request, response_format='html'): "All available tickets" if request.GET: if 'status' in request.GET and request.GET['status']: query = _get_filter_query(request.GET) else: query = Q(status__hidden=False) & _get_filter_query(request.GET) tickets = Object.filter_by_request(request, Ticket.objects.filter(query)) else: tickets = Object.filter_by_request( request, Ticket.objects.filter(status__hidden=False)) filters = FilterForm(request.user.get_profile(), '', request.GET) context = _get_default_context(request) context.update({ 'tickets': tickets, 'filters': filters, }) return render_to_response('services/index', context, context_instance=RequestContext(request), response_format=response_format)
def queue_view(request, queue_id, response_format='html'): "Queue view" queue = get_object_or_404(TicketQueue, pk=queue_id) if not request.user.get_profile().has_permission(queue): return user_denied(request, message="You don't have access to this Queue") query = Q(queue=queue) if request.GET: if 'status' in request.GET and request.GET['status']: query = query & _get_filter_query(request.GET) else: query = query & Q( status__hidden=False) & _get_filter_query(request.GET) else: query = query & Q(status__hidden=False) tickets = Object.filter_by_request(request, Ticket.objects.filter(query)) filters = FilterForm(request.user.get_profile(), 'queue', request.GET) subqueues = Object.filter_by_request( request, TicketQueue.objects.filter(parent=queue)) context = _get_default_context(request) context.update({'queue': queue, 'subqueues': subqueues, 'filters': filters, 'tickets': tickets}) return render_to_response('services/queue_view', context, context_instance=RequestContext(request), response_format=response_format)
def task_time_slot_add(request, task_id, response_format='html'): "Time slot add to preselected task" task = get_object_or_404(Task, pk=task_id) if not request.user.get_profile().has_permission(task, mode='x'): return user_denied(request, message="You don't have access to this Task") if request.POST: task_time_slot = TaskTimeSlot( task=task, time_to=datetime.now(), user=request.user.get_profile()) form = TaskTimeSlotForm( request.user.get_profile(), task_id, request.POST, instance=task_time_slot) if 'cancel' in request.POST: return HttpResponseRedirect(reverse('projects_task_view', args=[task.id])) elif form.is_valid(): task_time_slot = form.save() task_time_slot.set_user_from_request(request) return HttpResponseRedirect(reverse('projects_task_view', args=[task.id])) else: form = TaskTimeSlotForm(request.user.get_profile(), task_id) subtasks = Object.filter_by_request( request, Task.objects.filter(parent=task)) time_slots = Object.filter_by_request( request, TaskTimeSlot.objects.filter(task=task)) context = _get_default_context(request) context.update({'form': form, 'task': task, 'subtasks': subtasks, 'time_slots': time_slots}) return render_to_response('projects/task_time_add', context, context_instance=RequestContext(request), response_format=response_format)
def queue_delete(request, queue_id, response_format='html'): "Queue delete" queue = get_object_or_404(TicketQueue, pk=queue_id) if not request.user.get_profile().has_permission(queue, mode='w'): return user_denied(request, message="You don't have access to this Queue") if request.POST: if 'delete' in request.POST: if 'trash' in request.POST: queue.trash = True queue.save() else: queue.delete() return HttpResponseRedirect(reverse('services_settings_view')) elif 'cancel' in request.POST: return HttpResponseRedirect(reverse('services_queue_view', args=[queue.id])) query = Q(queue=queue) & Q(status__hidden=False) tickets = Object.filter_by_request(request, Ticket.objects.filter(query)) subqueues = Object.filter_by_request( request, TicketQueue.objects.filter(parent=queue)) context = _get_default_context(request) context.update({'queue': queue, 'subqueues': subqueues, 'tickets': tickets}) return render_to_response('services/queue_delete', context, context_instance=RequestContext(request), response_format=response_format)
def index(request, response_format='html'): "Index page: displays all Documents" query = Q(object_type='treeio.documents.models.Document') | \ Q(object_type='treeio.documents.models.File') | \ Q(object_type='treeio.documents.models.WebLink') if request.GET: query = _get_filter_query(request.GET) & query objects = Object.filter_by_request( request, Object.objects.filter(query).order_by('-last_updated')) else: objects = Object.filter_by_request( request, Object.objects.filter(query).order_by('-last_updated')) filters = FilterForm(request.user.get_profile(), 'title', request.GET) context = _get_default_context(request) context.update({'filters': filters, 'objects': objects}) return render_to_response('documents/index', context, context_instance=RequestContext(request), response_format=response_format)
def folder_view(request, folder_id, response_format='html'): "Single folder view page" folder = get_object_or_404(Folder, pk=folder_id) if not request.user.get_profile().has_permission(folder): return user_denied(request, message="You don't have access to this Folder") query = Q( object_type='treeio.documents.models.Document') | Q( object_type='treeio.documents.models.File') | Q( object_type='treeio.documents.models.WebLink') query = query & (Q(document__folder=folder) | Q(file__folder=folder) | Q(weblink__folder=folder)) if request.GET: query = query & _get_filter_query(request.GET) objects = Object.filter_by_request(request, Object.objects.filter(query).order_by('-last_updated')) # objects = objects.order_by('-last_updated') else: objects = Object.filter_by_request(request, Object.objects.filter(query).order_by('-last_updated')) # objects = objects.order_by('-last_updated') subfolders = Folder.objects.filter(parent=folder) filters = FilterForm(request.user.get_profile(), 'title', request.GET) context = _get_default_context(request) context.update({'folder': folder, 'objects':objects, 'subfolders':subfolders, 'filters':filters}) return render_to_response('documents/folder_view', context, context_instance=RequestContext(request), response_format=response_format)
def index_in_progress(request, response_format='html'): "A page with a list of tasks in progress" query = Q(parent__isnull=True) if request.GET: query = query & Q( status__hidden=False) & _get_filter_query(request.GET) else: query = query & Q(status__hidden=False) tasks = Object.filter_by_request(request, Task.objects.filter(query)) milestones = Object.filter_by_request( request, Milestone.objects.filter(status__hidden=False)) filters = FilterForm(request.user.get_profile(), 'status', request.GET) time_slots = Object.filter_by_request( request, TaskTimeSlot.objects.filter(time_from__isnull=False, time_to__isnull=True)) context = _get_default_context(request) context.update({'milestones': milestones, 'tasks': tasks, 'filters': filters, 'time_slots': time_slots}) return render_to_response('projects/index_in_progress', context, context_instance=RequestContext(request), response_format=response_format)
def task_delete(request, task_id, response_format='html'): "Task delete" task = get_object_or_404(Task, pk=task_id) if not request.user.get_profile().has_permission(task, mode='w'): return user_denied(request, message="You don't have access to this Task") if request.POST: if 'delete' in request.POST: if 'trash' in request.POST: task.trash = True task.save() else: task.delete() return HttpResponseRedirect(reverse('projects_index')) elif 'cancel' in request.POST: return HttpResponseRedirect(reverse('projects_task_view', args=[task.id])) subtasks = Object.filter_by_request( request, Task.objects.filter(parent=task)) time_slots = Object.filter_by_request( request, TaskTimeSlot.objects.filter(task=task)) context = _get_default_context(request) context.update({'task': task, 'subtasks': subtasks, 'time_slots': time_slots}) return render_to_response('projects/task_delete', context, context_instance=RequestContext(request), response_format=response_format)
def queue_view(request, queue_id, response_format='html'): "Queue view" queue = get_object_or_404(TicketQueue, pk=queue_id) if not request.user.get_profile().has_permission(queue): return user_denied(request, message="You don't have access to this Queue") query = Q(queue=queue) if request.GET: if 'status' in request.GET and request.GET['status']: query = query & _get_filter_query(request.GET) else: query = query & Q(status__hidden=False) & _get_filter_query( request.GET) else: query = query & Q(status__hidden=False) tickets = Object.filter_by_request(request, Ticket.objects.filter(query)) filters = FilterForm(request.user.get_profile(), 'queue', request.GET) subqueues = Object.filter_by_request( request, TicketQueue.objects.filter(parent=queue)) context = _get_default_context(request) context.update({ 'queue': queue, 'subqueues': subqueues, 'filters': filters, 'tickets': tickets }) return render_to_response('services/queue_view', context, context_instance=RequestContext(request), response_format=response_format)
def index(request, response_format='html'): "Messaging index page" query = Q(reply_to__isnull=True) streams = False st = MessageStream.objects.all() for row in st: if request.user.get_profile().has_permission(row): if streams: streams = streams | Q(stream=row) else: streams = Q(stream=row) if streams: query = query & streams if request.GET: query = query & _get_filter_query(request.GET) messages = Object.filter_by_request(request, Message.objects.filter(query)) else: messages = Object.filter_by_request(request, Message.objects.filter(query)) filters = FilterForm(request.user.get_profile(), 'title', request.GET) context = _get_default_context(request) context.update({'filters': filters, 'messages': messages}) return render_to_response('messaging/index', context, context_instance=RequestContext(request), response_format=response_format)
def _get_default_context(request): "Returns default context as a dict()" projects = Object.filter_by_request(request, Project.objects) statuses = Object.filter_by_request(request, TaskStatus.objects) massform = MassActionForm(request.user.get_profile()) context = {'projects': projects, 'statuses': statuses, 'massform': massform} return context
def group_view(request, group_id, response_format="html"): "Group view" group = get_object_or_404(Group, pk=group_id) contacts = Object.filter_by_request(request, Contact.objects.filter(related_user=group).order_by("name")) members = User.objects.filter(Q(default_group=group) | Q(other_groups=group)).distinct() subgroups = Group.objects.filter(parent=group) types = Object.filter_by_request(request, ContactType.objects.order_by("name")) return render_to_response( "identities/group_view", {"group": group, "subgroups": subgroups, "members": members, "contacts": contacts, "types": types}, context_instance=RequestContext(request), response_format=response_format, )
def status_view(request, status_id, response_format='html'): "Status view" status = get_object_or_404(ChangeSetStatus, pk=status_id) if not request.user.get_profile().has_permission(status) \ and not request.user.get_profile().is_admin('treeio.changes'): return user_denied(request, "You don't have access to this Change Set Status.", response_format=response_format) query = Q( object__in=Object.filter_by_request(request, Object.objects)) & Q( status=status) if request.GET: query = query & _get_filter_query(request.GET) filters = FilterForm(request.user.get_profile(), 'status', request.GET) else: filters = FilterForm(request.user.get_profile(), 'status') changesets = ChangeSet.objects.filter(query) context = _get_default_context(request) context.update({ 'status': status, 'changesets': changesets, 'filters': filters }) return render_to_response('changes/status_view', context, context_instance=RequestContext(request), response_format=response_format)
def settings_view(request, response_format='html'): "Settings" if not request.user.get_profile().is_admin('treeio.identities'): return user_denied(request, message="You are not an Administrator of the Identities module", response_format=response_format) contact_types = ContactType.objects.all().filter(trash=False) contact_fields = ContactField.objects.all().filter(trash=False) contacts = Object.filter_by_request(request, Contact.objects.order_by('name')) context = _get_default_context(request) context.update({'contact_types': contact_types, 'contact_fields': contact_fields, 'contacts':contacts}) if request.POST: if 'file' in request.FILES: csv_file = request.FILES['file'] # TODO: check file extension content = csv_file.read() import_c = ProcessContacts() import_c.import_contacts(content) return HttpResponseRedirect(reverse('identities_index')) return render_to_response('identities/settings_view', context, context_instance=RequestContext(request), response_format=response_format)
def index(request, response_format='html'): "Index page: displays all Items" query = Q(status__hidden=False) if request.GET: if 'status' in request.GET and request.GET['status']: query = _get_filter_query(request.GET) else: query = query & _get_filter_query(request.GET) if request.GET: query = query & _get_filter_query(request.GET) items = Object.filter_by_request( request, Item.objects.filter(query).order_by('name')) filters = FilterForm(request.user.get_profile(), '', request.GET) context = _get_default_context(request) context.update({'items': items, 'filters': filters}) return render_to_response('infrastructure/index', context, context_instance=RequestContext(request), response_format=response_format)
def contact_edit(request, contact_id, response_format='html'): "Contact edit" contact = get_object_or_404(Contact, pk=contact_id) if not request.user.get_profile().has_permission(contact, mode='w'): return user_denied(request, message="You don't have write access to this Contact") if request.POST: if not 'cancel' in request.POST: form = ContactForm(request.user.get_profile(), contact.contact_type, request.POST, files=request.FILES, instance=contact) if form.is_valid(): contact = form.save(request) return HttpResponseRedirect(reverse('identities_contact_view', args=[contact.id])) else: return HttpResponseRedirect(reverse('identities_contact_view', args=[contact.id])) else: form = ContactForm(request.user.get_profile(), contact.contact_type, instance=contact) types = Object.filter_by_request(request, ContactType.objects.order_by('name')) return render_to_response('identities/contact_edit', {'contact': contact, 'types': types, 'form': form}, context_instance=RequestContext(request), response_format=response_format)
def index(request, response_format='html'): "Homepage" trash = Object.filter_by_request(request, manager=Object.objects.filter(trash=True), mode='r', filter_trash=False).count() user = request.user.get_profile() perspective = user.get_perspective() widget_objects = Widget.objects.filter(user=user, perspective=perspective) clean_widgets = [] for widget_object in widget_objects: try: module = perspective.get_modules().filter( name=widget_object.module_name)[0] widget = _get_widget(request, module, widget_object.widget_name) if 'view' in widget: try: content = unicode( widget['view'](request, response_format=response_format).content, 'utf_8') widget_content = _get_widget_content( content, response_format=response_format) except Exception, e: widget_content = "" if settings.DEBUG: widget_content = str(e) widget['content'] = widget_content if widget: widget_object.widget = widget clean_widgets.append(widget_object) except IndexError: widget_object.delete()
def contact_add_typed(request, type_id, response_format='html'): "Contact add with preselected type" contact_type = get_object_or_404(ContactType, pk=type_id) if not request.user.get_profile().has_permission(contact_type, mode='x'): return user_denied(request, message="You don't have access to create " + unicode(contact_type)) if request.POST: if not 'cancel' in request.POST: form = ContactForm(request.user.get_profile(), contact_type, request.POST, files=request.FILES) if form.is_valid(): contact = form.save(request, contact_type) contact.set_user_from_request(request) return HttpResponseRedirect(reverse('identities_contact_view', args=[contact.id])) else: return HttpResponseRedirect(reverse('identities_index')) else: form = ContactForm(request.user.get_profile(), contact_type) types = Object.filter_by_request(request, ContactType.objects.order_by('name')) return render_to_response('identities/contact_add_typed', {'type': contact_type, 'types': types, 'form': form}, context_instance=RequestContext(request), response_format=response_format)
def wrap(request, *args, **kwargs): "Wrap" if 'massform' in request.POST: if 'delete_all' in request.POST.values(): try: object = Object.filter_by_request(request, manager=Object.objects.filter(trash=True), mode='r', filter_trash=False) form = MassActionForm(request.POST, instance=object) if form.is_valid() and request.user.get_profile().has_permission(object, mode='w'): form.save() except: pass else: for key in request.POST: if 'mass-object' in key: try: object = Object.objects.get(pk=request.POST[key]) form = MassActionForm( request.POST, instance=object) if form.is_valid() and request.user.get_profile().has_permission(object, mode='w'): form.save() except: pass return f(request, *args, **kwargs)
def status_view(request, status_id, response_format='html'): "Status view" status = get_object_or_404(ChangeSetStatus, pk=status_id) if not request.user.get_profile().has_permission(status) \ and not request.user.get_profile().is_admin('treeio.changes'): return user_denied(request, "You don't have access to this Change Set Status.", response_format=response_format) query = Q(object__in=Object.filter_by_request(request, Object.objects)) & Q( status=status) if request.GET: query = query & _get_filter_query(request.GET) filters = FilterForm(request.user.get_profile(), 'status', request.GET) else: filters = FilterForm(request.user.get_profile(), 'status') changesets = ChangeSet.objects.filter(query) context = _get_default_context(request) context.update({'status': status, 'changesets': changesets, 'filters': filters}) return render_to_response('changes/status_view', context, context_instance=RequestContext(request), response_format=response_format)
def index_assigned(request, response_format='html'): "Tickets assigned to current user" context = _get_default_context(request) agent = context['agent'] if agent: query = Q(assigned=agent) if request.GET: if 'status' in request.GET and request.GET['status']: query = query & _get_filter_query(request.GET) else: query = query & Q(status__hidden=False) & _get_filter_query( request.GET) else: query = query & Q(status__hidden=False) tickets = Object.filter_by_request(request, Ticket.objects.filter(query)) else: return user_denied(request, "You are not a Service Support Agent.", response_format=response_format) filters = FilterForm(request.user.get_profile(), 'assigned', request.GET) context.update({'tickets': tickets, 'filters': filters}) return render_to_response('services/index_assigned', context, context_instance=RequestContext(request), response_format=response_format)
def index_owned(request, response_format='html'): "Tickets owned by current user" context = _get_default_context(request) query = Q(caller__related_user=request.user.get_profile()) if request.GET: if 'status' in request.GET and request.GET['status']: query = query & _get_filter_query(request.GET) else: query = query & Q(status__hidden=False) & _get_filter_query( request.GET) else: query = query & Q(status__hidden=False) tickets = Object.filter_by_request(request, Ticket.objects.filter(query)) filters = FilterForm(request.user.get_profile(), 'caller', request.GET) context.update({'tickets': tickets, 'filters': filters}) return render_to_response('services/index_owned', context, context_instance=RequestContext(request), response_format=response_format)
def ical_all_event(request, response_format='ical'): "Export upcoming events " query = Q() events = Object.filter_by_request(request, Event.objects.filter(query)) icalstream = """BEGIN:VCALENDAR VERSION:2.0 CALSCALE:GREGORIAN METHOD:PUBLISH PRODID:-//PYVOBJECT//NONSGML Version 1//EN """ vevent = "" for event in events: vevent += "BEGIN:VEVENT\n" if event.start: vevent += "DTSTART;VALUE=DATE:%s\n" % str((datetime.strptime(str(event.start)[0:10], '%Y-%m-%d')))[0:10].replace("-", "") vevent += "DTEND;VALUE=DATE:%s\n" % str((datetime.strptime(str(event.end)[0:10], '%Y-%m-%d')))[0:10].replace("-", "") if not event.details: vevent += "SUMMARY:%s\n" % strip_tags(event.name) else: vevent += "SUMMARY:%s\n" % strip_tags(event.details) vevent += "UID:%s\n" % (event.name) vevent += "END:VEVENT\n" icalstream += vevent icalstream += """X-WR-CALDESC:Tree.io Calendar X-WR-CALNAME:Tree.io X-WR-TIMEZONE:London/UK END:VCALENDAR """ response = HttpResponse(icalstream, mimetype='text/calendar') response['Filename'] = 'events.ics' # IE needs this response['Content-Disposition'] = 'attachment; filename=events.ics' return response
def _get_default_context(request): "Returns default context for all views as dict()" types = Object.filter_by_request(request, ItemType.objects.filter(parent__isnull=True)) statuses = Object.filter_by_request(request, ItemStatus.objects) locations = Object.filter_by_request(request, Location.objects) massform = MassActionForm(request.user.get_profile()) context = { 'statuses': statuses, 'types': types, 'massform': massform, 'locations': locations } return context
def status_view(request, status_id, response_format='html'): "ItemStatus view" item_status = get_object_or_404(ItemStatus, pk=status_id) if not request.user.get_profile().has_permission(item_status): return user_denied(request, message="You don't have access to this Item Status", response_format=response_format) query = Q(status=item_status) if request.GET: query = query & _get_filter_query(request.GET) items = Object.filter_by_request( request, Item.objects.filter(query).order_by('name')) filters = FilterForm(request.user.get_profile(), ['status'], request.GET) context = _get_default_context(request) context.update({ 'items': items, 'filters': filters, 'item_status': item_status }) return render_to_response('infrastructure/item_status_view', context, context_instance=RequestContext(request), response_format=response_format)
def type_edit(request, type_id, response_format='html'): "ContactType edit" contact_type = get_object_or_404(ContactType, pk=type_id) if not request.user.get_profile().has_permission(contact_type, mode='w'): return user_denied(request, message="You don't have access to this Contact Type", response_format=response_format) identities = Object.filter_by_request(request, Contact.objects.filter(contact_type=contact_type).order_by('name')) if request.POST: if not 'cancel' in request.POST: form = ContactTypeForm(request.user.get_profile(), request.POST, instance=contact_type) if form.is_valid(): contact_type = form.save(request) return HttpResponseRedirect(reverse('identities_type_view', args=[contact_type.id])) else: return HttpResponseRedirect(reverse('identities_type_view', args=[contact_type.id])) else: form = ContactTypeForm(request.user.get_profile(), instance=contact_type) context = _get_default_context(request) context.update({'identities': identities, 'form': form, 'type': contact_type}) return render_to_response('identities/contact_type_edit', context, context_instance=RequestContext(request), response_format=response_format)
def folder_edit(request, knowledgeType_id, response_format='html'): "Knowledge folder edit page" folder = get_object_or_404(KnowledgeFolder, pk=knowledgeType_id) items = Object.filter_by_request( request, manager=KnowledgeItem.objects.filter(folder=folder)) if not request.user.get_profile().has_permission(folder, mode="w"): return user_denied(request, message="You don't have access to this Knowledge Type") if request.POST: if not 'cancel' in request.POST: form = KnowledgeFolderForm( request.user.get_profile(), None, request.POST, instance=folder) if form.is_valid(): folder = form.save() return HttpResponseRedirect(reverse('knowledge_folder_view', args=[folder.treepath])) else: return HttpResponseRedirect(reverse('knowledge_folder_view', args=[folder.treepath])) else: form = KnowledgeFolderForm( request.user.get_profile(), None, instance=folder) context = _get_default_context(request) context.update({'items': items, 'folder': folder, 'form': form}) return render_to_response('knowledge/folder_edit', context, context_instance=RequestContext(request), response_format=response_format)
def wrap(request, *args, **kwargs): "Wrap" if 'massform' in request.POST: if 'delete_all' in request.POST.values(): try: object = Object.filter_by_request( request, manager=Object.objects.filter(trash=True), mode='r', filter_trash=False) form = MassActionForm(request.POST, instance=object) if form.is_valid() and request.user.get_profile( ).has_permission(object, mode='w'): form.save() except Exception, e: pass else: for key in request.POST: if 'mass-object' in key: try: object = Object.objects.get(pk=request.POST[key]) form = MassActionForm(request.POST, instance=object) if form.is_valid() and request.user.get_profile( ).has_permission(object, mode='w'): form.save() except Exception, e: pass
def folder_delete(request, knowledgeType_id, response_format='html'): "Type delete" folder = get_object_or_404(KnowledgeFolder, pk=knowledgeType_id) items = Object.filter_by_request(request, manager=KnowledgeItem.objects.filter(folder=folder)) if not request.user.get_profile().has_permission(folder, mode='w'): return user_denied(request, message="You don't have access to this Knowledge Type") if request.POST: if 'delete' in request.POST: if 'trash' in request.POST: folder.trash = True folder.save() else: folder.delete() return HttpResponseRedirect(reverse('knowledge_index')) elif 'cancel' in request.POST: return HttpResponseRedirect(reverse('knowledge_folder_view', args=[folder.treepath])) context = _get_default_context(request) context.update({'items': items, 'folder':folder}) return render_to_response('knowledge/folder_delete', context, context_instance=RequestContext(request), response_format=response_format)
def milestone_delete(request, milestone_id, response_format='html'): "Milestone delete" milestone = get_object_or_404(Milestone, pk=milestone_id) project = milestone.project if not request.user.get_profile().has_permission(milestone, mode='w'): return user_denied(request, message="You don't have access to this Milestone") query = Q(milestone=milestone, parent__isnull=True) if request.GET: query = query & _get_filter_query(request.GET) tasks = Object.filter_by_request(request, Task.objects.filter(query)) if request.POST: if 'delete' in request.POST: if 'trash' in request.POST: milestone.trash = True milestone.save() else: milestone.delete() return HttpResponseRedirect(reverse('projects_index')) elif 'cancel' in request.POST: return HttpResponseRedirect(reverse('projects_milestone_view', args=[milestone.id])) context = _get_default_context(request) context.update({'milestone': milestone, 'tasks': tasks, 'project': project}) return render_to_response('projects/milestone_delete', context, context_instance=RequestContext(request), response_format=response_format)
def folder_view(request, folderPath, response_format='html'): "Single knowledge folder view page" folder = KnowledgeFolder.by_path(folderPath) if not folder: raise Http404 if not request.user.get_profile().has_permission(folder): return user_denied( request, message="You don't have access to this Knowledge Type") items = Object.filter_by_request( request, manager=KnowledgeItem.objects.filter(folder=folder)) subfolders = KnowledgeFolder.objects.filter(parent=folder) context = _get_default_context(request) context.update({ 'items': items, 'folder': folder, 'subfolders': subfolders }) return render_to_response('knowledge/folder_view', context, context_instance=RequestContext(request), response_format=response_format)
def type_edit(request, type_id, response_format='html'): "ItemType edit" item_type = get_object_or_404(ItemType, pk=type_id) if not request.user.get_profile().has_permission(item_type, mode='w'): return user_denied(request, message="You don't have access to this Item Type", response_format=response_format) infrastructure = Object.filter_by_request(request, Item.objects.filter(item_type=item_type).order_by('name')) if request.POST: if not 'cancel' in request.POST: form = ItemTypeForm( request.user.get_profile(), request.POST, instance=item_type) if form.is_valid(): item_type = form.save(request) return HttpResponseRedirect(reverse('infrastructure_type_view', args=[item_type.id])) else: return HttpResponseRedirect(reverse('infrastructure_type_view', args=[item_type.id])) else: form = ItemTypeForm(request.user.get_profile(), instance=item_type) context = _get_default_context(request) context.update({'infrastructure': infrastructure, 'form': form, 'item_type': item_type}) return render_to_response('infrastructure/item_type_edit', context, context_instance=RequestContext(request), response_format=response_format)
def task_status_delete(request, status_id, response_format='html'): "TaskStatus delete" status = get_object_or_404(TaskStatus, pk=status_id) if not request.user.get_profile().has_permission(status, mode='w'): return user_denied(request, message="You don't have access to this Task Status") if request.POST: if 'delete' in request.POST: if 'trash' in request.POST: status.trash = True status.save() else: status.delete() return HttpResponseRedirect(reverse('projects_index')) elif 'cancel' in request.POST: return HttpResponseRedirect(reverse('projects_index_by_status', args=[status.id])) milestones = Object.filter_by_request(request, Milestone.objects) context = _get_default_context(request) context.update({'status': status, 'milestones': milestones}) return render_to_response('projects/status_delete', context, context_instance=RequestContext(request), response_format=response_format)
def folder_delete(request, knowledgeType_id, response_format='html'): "Type delete" folder = get_object_or_404(KnowledgeFolder, pk=knowledgeType_id) items = Object.filter_by_request( request, manager=KnowledgeItem.objects.filter(folder=folder)) if not request.user.get_profile().has_permission(folder, mode='w'): return user_denied( request, message="You don't have access to this Knowledge Type") if request.POST: if 'delete' in request.POST: if 'trash' in request.POST: folder.trash = True folder.save() else: folder.delete() return HttpResponseRedirect(reverse('knowledge_index')) elif 'cancel' in request.POST: return HttpResponseRedirect( reverse('knowledge_folder_view', args=[folder.treepath])) context = _get_default_context(request) context.update({'items': items, 'folder': folder}) return render_to_response('knowledge/folder_delete', context, context_instance=RequestContext(request), response_format=response_format)
def index_assigned(request, response_format='html'): "Tickets assigned to current user" context = _get_default_context(request) agent = context['agent'] if agent: query = Q(assigned=agent) if request.GET: if 'status' in request.GET and request.GET['status']: query = query & _get_filter_query(request.GET) else: query = query & Q( status__hidden=False) & _get_filter_query(request.GET) else: query = query & Q(status__hidden=False) tickets = Object.filter_by_request( request, Ticket.objects.filter(query)) else: return user_denied(request, "You are not a Service Support Agent.", response_format=response_format) filters = FilterForm(request.user.get_profile(), 'assigned', request.GET) context.update({'tickets': tickets, 'filters': filters}) return render_to_response('services/index_assigned', context, context_instance=RequestContext(request), response_format=response_format)
def contact_delete(request, contact_id, response_format='html'): "Contact delete" contact = get_object_or_404(Contact, pk=contact_id) if not request.user.get_profile().has_permission(contact, mode='w'): return user_denied(request, message="You don't have access to this Contact") if request.POST: if 'delete' in request.POST: if 'trash' in request.POST: contact.trash = True contact.save() else: contact.delete() return HttpResponseRedirect(reverse('identities_index')) elif 'cancel' in request.POST: return HttpResponseRedirect( reverse('identities_contact_view', args=[contact.id])) types = Object.filter_by_request(request, ContactType.objects.order_by('name')) return render_to_response('identities/contact_delete', { 'contact': contact, 'types': types }, context_instance=RequestContext(request), response_format=response_format)
def contact_add_typed(request, type_id, response_format='html'): "Contact add with preselected type" contact_type = get_object_or_404(ContactType, pk=type_id) if not request.user.get_profile().has_permission(contact_type, mode='x'): return user_denied(request, message="You don't have access to create " + unicode(contact_type)) if request.POST: if not 'cancel' in request.POST: form = ContactForm(request.user.get_profile(), contact_type, request.POST, files=request.FILES) if form.is_valid(): contact = form.save(request, contact_type) contact.set_user_from_request(request) return HttpResponseRedirect( reverse('identities_contact_view', args=[contact.id])) else: return HttpResponseRedirect(reverse('identities_index')) else: form = ContactForm(request.user.get_profile(), contact_type) types = Object.filter_by_request(request, ContactType.objects.order_by('name')) return render_to_response('identities/contact_add_typed', { 'type': contact_type, 'types': types, 'form': form }, context_instance=RequestContext(request), response_format=response_format)
def folder_edit(request, knowledgeType_id, response_format='html'): "Knowledge folder edit page" folder = get_object_or_404(KnowledgeFolder, pk=knowledgeType_id) items = Object.filter_by_request(request, manager=KnowledgeItem.objects.filter(folder=folder)) if not request.user.get_profile().has_permission(folder, mode="w"): return user_denied(request, message="You don't have access to this Knowledge Type") if request.POST: if not 'cancel' in request.POST: form = KnowledgeFolderForm(request.user.get_profile(), None, request.POST, instance=folder) if form.is_valid(): folder = form.save() return HttpResponseRedirect(reverse('knowledge_folder_view', args=[folder.treepath])) else: return HttpResponseRedirect(reverse('knowledge_folder_view', args=[folder.treepath])) else: form = KnowledgeFolderForm(request.user.get_profile(), None, instance=folder) context = _get_default_context(request) context.update({'items': items, 'folder': folder, 'form': form}) return render_to_response('knowledge/folder_edit', context, context_instance=RequestContext(request), response_format=response_format)
def group_view(request, group_id, response_format='html'): "Group view" group = get_object_or_404(Group, pk=group_id) contacts = Object.filter_by_request(request, Contact.objects.filter(related_user=group).order_by('name')) members = User.objects.filter(Q(default_group=group) | Q(other_groups=group)).distinct() subgroups = Group.objects.filter(parent=group) types = Object.filter_by_request(request, ContactType.objects.order_by('name')) return render_to_response('identities/group_view', {'group': group, 'subgroups': subgroups, 'members': members, 'contacts': contacts, 'types': types}, context_instance=RequestContext(request), response_format=response_format)
def contact_me(request, attribute='', response_format='html'): "My Contact card" contact = request.user.get_profile().get_contact() if not request.user.get_profile().has_permission(contact): return user_denied(request, message="You don't have access to this Contact") types = Object.filter_by_request(request, ContactType.objects.order_by('name')) if not contact: return render_to_response('identities/contact_me_missing', {'types': types}, context_instance=RequestContext(request), response_format=response_format) subcontacts = Object.filter_by_request(request, contact.child_set) contact_values = contact.contactvalue_set.order_by('field__name') objects = get_contact_objects(request.user.get_profile(), contact, preformat=True) module = None for key in objects: if not attribute: if objects[key]['count']: #attribute = objects[key]['objects'].keys()[0] module = objects[key]['module'] else: if attribute in objects[key]['objects'].keys(): module = objects[key]['module'] break return render_to_response('identities/contact_me', { 'contact': contact, 'types': types, 'subcontacts': subcontacts, 'objects': objects, 'current_module': module, 'attribute': attribute, 'types': types, 'contact_values': contact_values }, context_instance=RequestContext(request), response_format=response_format)
def _get_default_context(request): "Returns default context for all views as dict()" types = Object.filter_by_request( request, ItemType.objects.filter(parent__isnull=True)) statuses = Object.filter_by_request(request, ItemStatus.objects) locations = Object.filter_by_request(request, Location.objects) massform = MassActionForm(request.user.get_profile()) context = { 'statuses': statuses, 'types': types, 'massform': massform, 'locations': locations } return context
def folder_delete(request, folder_id, response_format='html'): "Folder delete" folder = get_object_or_404(Folder, pk=folder_id) if not request.user.get_profile().has_permission(folder, mode='w'): return user_denied(request, message="You don't have access to this Folder") if request.POST: if 'delete' in request.POST: if 'trash' in request.POST: folder.trash = True folder.save() else: folder.delete() return HttpResponseRedirect(reverse('document_index')) elif 'cancel' in request.POST: return HttpResponseRedirect( reverse('documents_folder_view', args=[folder.id])) query = Q(object_type='treeio.documents.models.Document') | Q( object_type='treeio.documents.models.File') | Q( object_type='treeio.documents.models.WebLink') query = query & (Q(document__folder=folder) | Q(file__folder=folder) | Q(weblink__folder=folder)) if request.GET: query = _get_filter_query(request.GET) objects = Object.filter_by_request(request, Object.objects.filter(query)) # objects = objects.order_by('-last_updated') else: objects = Object.filter_by_request(request, Object.objects.filter(query)) # objects = objects.order_by('-last_updated') context = _get_default_context(request) context.update({'folder': folder, 'objects': objects}) return render_to_response('documents/folder_delete', context, context_instance=RequestContext(request), response_format=response_format)
def _get_default_context(request): "Returns Default context applicable to all views" all_statuses = Object.filter_by_request(request, ChangeSetStatus.objects) massform = MassActionForm(request.user.get_profile()) context = {'all_statuses': all_statuses, 'massform': massform} return context
def contact_add(request, response_format='html'): "Contact add" types = Object.filter_by_request(request, ContactType.objects.order_by('name')) return render_to_response('identities/contact_add', {'types': types}, context_instance=RequestContext(request), response_format=response_format)
def _get_default_context(request): "Returns default context as a dict()" streams = Object.filter_by_request(request, MessageStream.objects) mlists = MailingList.objects.all() massform = MassActionForm(request.user.get_profile()) context = {'streams': streams, 'mlists': mlists, 'massform': massform} return context
def week_view(request, response_format='html'): "Week view - each slot represents an hour" events = Object.filter_by_request(request, Event.objects) date_current = now = datetime.now() istoday = True gotoform = GoToDateForm(now, request.GET) if request.GET: if 'date_year' in request.GET and 'date_month' in request.GET and 'date_day' in request.GET: try: day = int(request.GET['date_day']) year = int(request.GET['date_year']) month = int(request.GET['date_month']) if year >= 1900 and month >= 1 and month <= 12 and day >= 1 and day <= 31: date_current = datetime(year, month, day) istoday = date_current == now except Exception: pass if gotoform.is_valid() and gotoform.cleaned_data['goto']: date_current = gotoform.cleaned_data['goto'] istoday = date_current == now date_current = now = datetime(date_current.year, date_current.month, date_current.day) date_previous = date_current - relativedelta(weeks=+1) date_next = date_current + relativedelta(weeks=+1) weeks = calendar.Calendar().monthdatescalendar(date_current.year, date_current.month) current_week = [] for week in weeks: if date_current.date() in week: current_week = week break wrapped_events = EventCollection(events, START_HOUR, END_HOUR) wrapped_events.collect_events(request) hours = range(START_HOUR, END_HOUR + 1) return render_to_response('events/week_view', { 'events': wrapped_events, 'week': current_week, 'start_date': current_week[0], 'end_date': current_week[6], 'date_previous': date_previous, 'date_next': date_next, 'date_current': date_current, 'gotoform': gotoform.as_ul(), 'istoday': istoday, 'hours': hours, 'now': now }, context_instance=RequestContext(request), response_format=response_format)
def _get_default_context(request): "Returns default context as a dict()" folders = Object.filter_by_request(request, Folder.objects, mode="r") massform = MassActionForm(request.user.get_profile()) context = {'folders': folders, 'massform': massform} return context
def wrap(request, *args, **kwargs): "Wrap" user = request.user.get_profile() if 'massform' in request.POST: for key in request.POST: if 'mass-object' in key: try: query = Q(object_type='treeio.documents.models.Document') | \ Q(object_type='treeio.documents.models.File') | \ Q(object_type='treeio.documents.models.WebLink') objects = Object.filter_by_request( request, Object.objects.filter(query)) object = objects.get(pk=request.POST[key]) form = MassActionForm(user, request.POST, instance=object) if form.is_valid() and user.has_permission(object, mode='w'): form.save() except Exception: pass if 'mass-file' in key: try: file = File.objects.get(pk=request.POST[key]) form = MassActionForm(user, request.POST, instance=file) if form.is_valid() and user.has_permission(file, mode='w'): form.save() except Exception: pass if 'mass-weblink' in key: try: link = WebLink.objects.get(pk=request.POST[key]) form = MassActionForm(user, request.POST, instance=link) if form.is_valid() and user.has_permission(link, mode='w'): form.save() except Exception: pass if 'mass-document' in key: try: document = Document.objects.get(pk=request.POST[key]) form = MassActionForm(user, request.POST, instance=document) if form.is_valid() and user.has_permission(document, mode='w'): form.save() except Exception: pass return f(request, *args, **kwargs)
def _get_default_context(request): "Preprocess context" context = {} types = Object.filter_by_request(request, ContactType.objects.order_by('name')) massform = MassActionForm(request.user.get_profile()) context.update({'types': types, 'massform': massform}) return context
def index(request, response_format='html'): "Knowledge base index page" if request.GET: query = _get_filter_query(request.GET) items = Object.filter_by_request(request, KnowledgeItem.objects.filter(query)) else: items = Object.filter_by_request(request, KnowledgeItem.objects) filters = FilterForm(request.user.get_profile(), 'name', request.GET) context = _get_default_context(request) context.update({'filters': filters, 'items': items}) return render_to_response('knowledge/index', context, context_instance=RequestContext(request), response_format=response_format)
def sla_index(request, response_format='html'): "All available Service Level Agreements" if request.GET: query = _get_filter_query(request.GET, ServiceLevelAgreement) slas = Object.filter_by_request( request, ServiceLevelAgreement.objects.filter(query)) else: slas = Object.filter_by_request(request, ServiceLevelAgreement.objects) filters = SLAFilterForm(request.user.get_profile(), '', request.GET) context = _get_default_context(request) context.update({'slas': slas, 'filters': filters}) return render_to_response('services/sla_index', context, context_instance=RequestContext(request), response_format=response_format)
def folder_view(request, folder_id, response_format='html'): "Single folder view page" folder = get_object_or_404(Folder, pk=folder_id) if not request.user.get_profile().has_permission(folder): return user_denied(request, message="You don't have access to this Folder") query = Q(object_type='treeio.documents.models.Document') | Q( object_type='treeio.documents.models.File') | Q( object_type='treeio.documents.models.WebLink') query = query & (Q(document__folder=folder) | Q(file__folder=folder) | Q(weblink__folder=folder)) if request.GET: query = query & _get_filter_query(request.GET) objects = Object.filter_by_request( request, Object.objects.filter(query).order_by('-last_updated')) # objects = objects.order_by('-last_updated') else: objects = Object.filter_by_request( request, Object.objects.filter(query).order_by('-last_updated')) # objects = objects.order_by('-last_updated') subfolders = Folder.objects.filter(parent=folder) filters = FilterForm(request.user.get_profile(), 'title', request.GET) context = _get_default_context(request) context.update({ 'folder': folder, 'objects': objects, 'subfolders': subfolders, 'filters': filters }) return render_to_response('documents/folder_view', context, context_instance=RequestContext(request), response_format=response_format)