Initial commit
This commit is contained in:
@@ -0,0 +1,310 @@
|
||||
from django.shortcuts import render, get_object_or_404, redirect
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from accounts.decorators import permission_required
|
||||
from .forms import ProjectForm, ProjectAddLocationForm, ProjectAddContactForm, ProjectAddForm, ProjectAddWorkerForm
|
||||
|
||||
from .models import (
|
||||
Project,
|
||||
ProjectMembership,
|
||||
ProjectContact,
|
||||
ProjectLocation,
|
||||
)
|
||||
|
||||
from invoices.models import CustomerContact, CustomerLocation
|
||||
|
||||
|
||||
|
||||
@login_required
|
||||
@permission_required("projects_add")
|
||||
def project_add(request):
|
||||
form = ProjectAddForm(request.POST or None,request.FILES or None,)
|
||||
if request.method == "POST" and form.is_valid():
|
||||
project = form.save()
|
||||
ProjectMembership.objects.create(project=project,user=request.user,role=ProjectMembership.Role.OWNER,)
|
||||
return redirect("projects:overview",project.id)
|
||||
|
||||
return render(request,"projects/add.html",{"form": form,})
|
||||
|
||||
|
||||
|
||||
@login_required
|
||||
@permission_required("projects_archived_view")
|
||||
def projects_archived(request):
|
||||
memberships = ProjectMembership.objects.select_related("project").filter(user=request.user,project__active=False)
|
||||
return render(request,"projects/archived.html",{"memberships": memberships,})
|
||||
|
||||
|
||||
|
||||
# ---------------------------
|
||||
# OVERVIEW
|
||||
# ---------------------------
|
||||
@login_required
|
||||
@permission_required("projects_view")
|
||||
def project_overview(request, project_id):
|
||||
|
||||
membership = get_object_or_404(
|
||||
ProjectMembership,
|
||||
user=request.user,
|
||||
project_id=project_id
|
||||
)
|
||||
|
||||
project = membership.project
|
||||
|
||||
return render(request, "projects/overview.html", {
|
||||
"project": project,
|
||||
"role": membership.role
|
||||
})
|
||||
|
||||
|
||||
@login_required
|
||||
@permission_required("projects_detail_view")
|
||||
def project_info(request, project_id):
|
||||
|
||||
membership = get_object_or_404(
|
||||
ProjectMembership,
|
||||
user=request.user,
|
||||
project_id=project_id
|
||||
)
|
||||
|
||||
project = membership.project
|
||||
|
||||
form = ProjectForm(
|
||||
instance=project
|
||||
)
|
||||
|
||||
workers = project.memberships.select_related(
|
||||
"user"
|
||||
).all()
|
||||
|
||||
|
||||
return render(
|
||||
request,
|
||||
"projects/info.html",
|
||||
{
|
||||
"project": project,
|
||||
"form": form,
|
||||
|
||||
"locations": project.project_locations.select_related(
|
||||
"location"
|
||||
),
|
||||
|
||||
"contacts": project.project_contacts.select_related(
|
||||
"contact"
|
||||
),
|
||||
|
||||
"workers": workers,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
@permission_required("projects_edit")
|
||||
def project_edit(request, project_id):
|
||||
|
||||
membership = get_object_or_404(
|
||||
ProjectMembership,
|
||||
user=request.user,
|
||||
project_id=project_id
|
||||
)
|
||||
|
||||
project = membership.project
|
||||
|
||||
|
||||
if request.method != "POST":
|
||||
return redirect(
|
||||
"projects:info",
|
||||
project.id
|
||||
)
|
||||
|
||||
|
||||
form = ProjectForm(
|
||||
request.POST,
|
||||
request.FILES,
|
||||
instance=project
|
||||
)
|
||||
|
||||
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
|
||||
|
||||
return redirect(
|
||||
"projects:info",
|
||||
project.id
|
||||
)
|
||||
|
||||
# ---------------------------
|
||||
# ADD CONTACT TO PROJECT
|
||||
# ---------------------------
|
||||
@login_required
|
||||
@permission_required("projects_contact_add")
|
||||
def project_contact_add(request, project_id):
|
||||
|
||||
project = get_object_or_404(Project, pk=project_id)
|
||||
|
||||
if request.method == "POST":
|
||||
form = ProjectAddContactForm(
|
||||
request.POST,
|
||||
project=project,
|
||||
)
|
||||
|
||||
if form.is_valid():
|
||||
contact = form.cleaned_data["contact"]
|
||||
|
||||
ProjectContact.objects.get_or_create(
|
||||
project=project,
|
||||
contact=contact
|
||||
)
|
||||
|
||||
return redirect("projects:info", project.id)
|
||||
|
||||
else:
|
||||
form = ProjectAddContactForm(project=project)
|
||||
|
||||
return render(request, "projects/contact_add.html", {
|
||||
"form": form,
|
||||
"project": project,
|
||||
})
|
||||
|
||||
@login_required
|
||||
@permission_required("projects_contact_delete")
|
||||
def project_contact_delete(request, project_id, contact_id):
|
||||
|
||||
membership = get_object_or_404(
|
||||
ProjectMembership,
|
||||
user=request.user,
|
||||
project_id=project_id
|
||||
)
|
||||
|
||||
project = membership.project
|
||||
|
||||
|
||||
if request.method == "POST":
|
||||
|
||||
ProjectContact.objects.filter(
|
||||
id=contact_id,
|
||||
project=project
|
||||
).delete()
|
||||
|
||||
|
||||
return redirect(
|
||||
"projects:info",
|
||||
project.id
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# ---------------------------
|
||||
# ADD LOCATION TO PROJECT
|
||||
# ---------------------------
|
||||
@login_required
|
||||
@permission_required("projects_location_add")
|
||||
def project_location_add(request, project_id):
|
||||
|
||||
project = get_object_or_404(Project, pk=project_id)
|
||||
|
||||
if request.method == "POST":
|
||||
form = ProjectAddLocationForm(
|
||||
request.POST,
|
||||
project=project,
|
||||
)
|
||||
|
||||
if form.is_valid():
|
||||
location = form.cleaned_data["location"]
|
||||
|
||||
ProjectLocation.objects.get_or_create(
|
||||
project=project,
|
||||
location=location
|
||||
)
|
||||
|
||||
return redirect("projects:info", project.id)
|
||||
|
||||
else:
|
||||
form = ProjectAddLocationForm(project=project)
|
||||
|
||||
return render(request, "projects/location_add.html", {
|
||||
"form": form,
|
||||
"project": project,
|
||||
})
|
||||
|
||||
@login_required
|
||||
@permission_required("projects_location_delete")
|
||||
def project_location_delete(request, project_id, location_id):
|
||||
|
||||
membership = get_object_or_404(
|
||||
ProjectMembership,
|
||||
user=request.user,
|
||||
project_id=project_id
|
||||
)
|
||||
|
||||
project = membership.project
|
||||
|
||||
|
||||
if request.method == "POST":
|
||||
|
||||
ProjectLocation.objects.filter(
|
||||
id=location_id,
|
||||
project=project
|
||||
).delete()
|
||||
|
||||
|
||||
return redirect(
|
||||
"projects:info",
|
||||
project.id
|
||||
)
|
||||
|
||||
|
||||
@login_required
|
||||
@permission_required("projects_user_add")
|
||||
def project_worker_add(request, project_id):
|
||||
project = get_object_or_404(Project, pk=project_id)
|
||||
get_object_or_404(ProjectMembership,project=project,user=request.user)
|
||||
form = ProjectAddWorkerForm(request.POST or None,project=project)
|
||||
|
||||
if request.method == "POST" and form.is_valid():
|
||||
membership = form.save(commit=False)
|
||||
membership.project = project
|
||||
membership.save()
|
||||
return redirect("projects:info",project.id)
|
||||
|
||||
return render(request,"projects/worker_add.html",{"form": form,"project": project,})
|
||||
|
||||
|
||||
@login_required
|
||||
@permission_required("projects_user_delete")
|
||||
def project_worker_delete(request, project_id, worker_id):
|
||||
|
||||
membership = get_object_or_404(
|
||||
ProjectMembership,
|
||||
user=request.user,
|
||||
project_id=project_id
|
||||
)
|
||||
|
||||
project = membership.project
|
||||
|
||||
|
||||
worker = get_object_or_404(
|
||||
ProjectMembership,
|
||||
id=worker_id,
|
||||
project=project
|
||||
)
|
||||
|
||||
|
||||
if request.method == "POST":
|
||||
|
||||
if worker.role != ProjectMembership.Role.OWNER:
|
||||
worker.delete()
|
||||
|
||||
|
||||
return redirect(
|
||||
"projects:info",
|
||||
project.id
|
||||
)
|
||||
Reference in New Issue
Block a user