예제 #1
0
def request_list(request):
    if not can_do(request.user, 1605):  # Can access "Finance forecast"
        return render(request, 'portal/error.html',
                      {'error_message': 'Access denied.  (Code: #1605)'})

    completed_requests = None

    can_manage = can_do(request.user, 1610)

    if can_manage:
        requests = FundsRequest.objects.filter(
            completed=False).order_by('required_date')
        completed_requests = FundsRequest.objects.filter(
            completed=True).order_by('required_date')
    else:
        requests = FundsRequest.objects.filter(author=request.user).filter(
            completed=False).order_by('required_date')
        completed_requests = FundsRequest.objects.filter(
            author=request.user).filter(
                completed=True).order_by('required_date')

    return render(
        request, 'portal/finance/request_list.html', {
            'requests': requests,
            'completed_requests': completed_requests,
            'can_manage': can_manage
        })
예제 #2
0
def requests_list(request):
    # List of request belongs to current user or all requests for managers

    if not can_do(request.user, 1700):  # Can access RnD Actions
        return render(request, 'portal/error.html',
                      {'error_message': 'Access denied.  (Code: #1700)'})

    manager = can_do(request.user, 1505)
    chairman = can_do(request.user, 1506)

    completed_requests = None

    if manager or chairman:
        requests = Request.objects.filter(deleted=False).filter(
            completed=False).order_by('required_date')
    else:
        requests = Request.objects.filter(author=request.user).filter(
            deleted=False).filter(completed=False).order_by('required_date')
        completed_requests = Request.objects.filter(
            author=request.user).filter(deleted=False).filter(
                completed=True).order_by('required_date')

    return render(
        request, 'portal/rnd/requests_list.html', {
            'requests': requests,
            'completed_requests': completed_requests,
            'manager': manager,
            'chairman': chairman
        })
예제 #3
0
def ajax_task_edit(request, tid):
    # https://teamtreehouse.com/community/keep-a-modal-window-open-after-form-submission
    # https://dmorgan.info/posts/django-views-bootstrap-modals/
    # ! https://stackoverflow.com/questions/11276100/how-do-i-insert-a-django-form-in-twitter-bootstrap-modal-window

    try:
        task = Task.objects.get(id=tid)
    except models.ObjectDoesNotExist:
        return render(request, 'portal/error.html',
                      {'error_message': 'Record does not exist!'})

    selected_form = None

    # Edit tasks logic
    if request.user == task.owner:  #or can_do(request.user, 1810):
        selected_form = OwnerEditTaskForm  # can edit all fields in Task
        edit_privilege = 'owner'
    elif request.user == task.assignee:
        selected_form = AssigneeEditTaskForm
        edit_privilege = 'assignee'
        if can_do(request.user,
                  1832):  # Tasks. Can Edit Tasks Assigned to Yourself
            selected_form = OwnerEditTaskForm  # can edit all fields in Task
            edit_privilege = 'owner'
    elif can_do(request.user, 1830):  # Tasks. Can Edit Others` Tasks
        selected_form = OwnerEditTaskForm  # can edit all fields in Task
        edit_privilege = 'owner'

    else:
        edit_privilege = 'read'
        return render(request, 'portal/portal/ajax/task_ajax_form.html', {
            'task': task,
            'form': selected_form,
            'edit_privilege': edit_privilege
        })

    #if can_do(request.user, 1830):  # Tasks. Can Edit Others` Tasks
    #    selected_form = OwnerEditTaskForm  # can edit all fields in Task
    #    edit_privilege = 'owner'

    if request.method == 'POST':
        form = selected_form(request.POST, instance=task)
        # check whether it's valid:
        if form.is_valid():
            # process the data in form
            form.save()
            syslog(request, action='Updated Task #%s' % task.number)
            # return HttpResponse('Updated')
            return render(request, 'portal/portal/ajax/task_list_tr_row.html',
                          {'t': task})
    else:
        # form = AssigneeEditTaskForm(instance=task)
        form = selected_form(instance=task)

    return render(request, 'portal/portal/ajax/task_ajax_form.html', {
        'task': task,
        'form': form,
        'edit_privilege': edit_privilege
    })
예제 #4
0
def projects_create(request):
    if not can_do(request.user, 1820):  # Tasks. Can create/assign projects
        return render(request, 'portal/error.html',
                      {'error_message': 'Access denied.  (Code: #1820)'})

    if request.method == 'POST':
        # create a form instance and populate it with data from the request:
        form = CreateProjectForm(request.POST)

        if form.is_valid():
            # process the data in form.cleaned_data as required
            project = form.save(commit=False)
            project.owner = request.user
            project.save()
            project.code = "PR" + str(project.id).zfill(
                4
            )  # task.start_date.strftime('%y-%m-') + str(project.id).zfill(4)
            project.save()

            syslog(request, action='Added new Project #%s' % project.code)
            return HttpResponseRedirect('/projects/list')

    # if a GET (or any other method) we'll create a blank form
    else:
        form = CreateProjectForm()

    return render(request, 'portal/portal/project_create.html', {'form': form})
예제 #5
0
def request_create(request):

    if not can_do(request.user, 1700):  # Can access RnD Actions
        return render(request, 'portal/error.html',
                      {'error_message': 'Access denied.  (Code: #1700)'})

    if request.method == 'POST':
        # create a form instance and populate it with data from the request:
        form = AddRequestForm(request.POST)

        if form.is_valid():
            # process the data in form.cleaned_data as required
            mrequest = form.save(commit=False)
            mrequest.author = request.user
            mrequest.save()
            mrequest.number = mrequest.required_date.strftime('%y%m') + str(
                mrequest.id).zfill(5)
            mrequest.save()

            syslog(request, action='Added new Request #%s' % mrequest.number)

            return HttpResponseRedirect('/rnd/requests')

    # if a GET (or any other method) we'll create a blank form
    else:
        form = AddRequestForm()

    return render(request, 'portal/rnd/request_create.html', {'form': form})
예제 #6
0
def projects_details(request, pid):
    can_manage = False
    if can_do(request.user, 1820):  # Tasks. Can Manage projects
        can_manage = True
        # return render(request, 'portal/error.html', {'error_message': 'Access denied.  (Code: #1821)'})

    try:
        project = Project.objects.get(id=pid)
    except models.ObjectDoesNotExist:
        return render(request, 'portal/error.html',
                      {'error_message': 'Record does not exist!'})

    tasks = Task.objects.filter(project=project).order_by('start_date')

    if request.method == 'POST':
        form = EditProjectForm(request.POST, instance=project)

        if form.is_valid():
            form.save()
            syslog(request, action='Updated Project #%s' % project.code)
            return HttpResponseRedirect('/projects/list/')
    else:
        form = EditProjectForm(instance=project)

    return render(request, 'portal/portal/project_details.html', {
        'project': project,
        'form': form,
        'can_manage': can_manage,
        'tasks': tasks
    })
예제 #7
0
def payments_proceed(request, pid):

    if not can_do(request.user, 1670):  # Can manage payment requests
        return render(request, 'portal/error.html',
                      {'error_message': 'Access denied.  (Code: #1670)'})

    message = ""

    if request.method == "POST":
        # proceed with finishing requests
        message = "Select records to complete payment."
        ids = request.POST.getlist('selected_id', '')
        if ids:
            requests = FundsRequest.objects.filter(id__in=ids)
            for r in requests:
                r.completed = True
                r.save()
            message = "%s Request(s) were completed" % requests.count()

    requests = FundsRequest.objects.filter(completed=False).filter(
        payment_priority=pid)

    return render(request, 'portal/finance/proceed_payment.html', {
        'requests': requests,
        'pid': pid,
        'message': message
    })
예제 #8
0
def receivables_list(request):
    if not can_do(request.user,
                  1655):  # Can access "Can access "Income Forecast""
        return render(request, 'portal/error.html',
                      {'error_message': 'Access denied.  (Code: #1655)'})

    records = Receivables.objects.order_by('date')
    return render(request, 'portal/finance/receivables_list.html',
                  {'records': records})
예제 #9
0
def models_list(request):

    if not can_do(request.user, 1700):  # Can access RnD Actions
        return render(request, 'portal/error.html',
                      {'error_message': 'Access denied.  (Code: #1700)'})

    models = Model.objects.all()
    return render(request, 'portal/rnd/models.html', {
        'allmodels': models,
    })
예제 #10
0
def forecast(request):
    if not can_do(request.user, 1650):  # Can access "Finance forecast"
        return render(request, 'portal/error.html',
                      {'error_message': 'Access denied.  (Code: #1650)'})

    # C:\Users\Dimon\PycharmProjects\jupiter\_work\Charts\Chart.js\samples
    # combo-bar-line.html
    # make by Month!

    return render(request, 'portal/finance/forecast.html', {})
예제 #11
0
def tasks_details(request, tid):
    """
    Show / Edit Task details
    Select form depends of Task owner
    :param request:
    :param tid:
    :return:

    как Django передает параметры фильтров
    http://127.0.0.1:8000/admin/portal/task/8/change/?_changelist_filters=owner__id__exact%3D7%26assignee__id__exact%3D1

    """
    try:
        task = Task.objects.get(id=tid)
    except models.ObjectDoesNotExist:
        return render(request, 'portal/error.html',
                      {'error_message': 'Record does not exist!'})

    # getting used filter from GET params
    pfilter = request.GET.get('_filter', '')

    if request.user == task.assignee:
        selected_form = AssigneeEditTaskForm
    elif request.user == task.owner or can_do(request.user, 1810):
        selected_form = OwnerEditTaskForm  # can edit all fields in Task
    else:
        form = None
        return render(request, 'portal/portal/task_details.html', {
            'task': task,
            'form': form
        })

    if request.method == 'POST':
        # form = AssigneeEditTaskForm(request.POST, instance=task)
        form = selected_form(request.POST, instance=task)
        # check whether it's valid:
        if form.is_valid():
            # process the data in form.cleaned_data as required
            form.save()

            syslog(request, action='Updated Task #%s' % task.number)

            if filter:
                return HttpResponseRedirect('/tasks/list?%s' % pfilter)
            else:
                return HttpResponseRedirect('/tasks/list/')
    else:
        # form = AssigneeEditTaskForm(instance=task)
        form = selected_form(instance=task)

    return render(request, 'portal/portal/task_details.html', {
        'task': task,
        'form': form
    })
예제 #12
0
def request_details(request, rid):
    # shows request details
    try:
        requestObj = FundsRequest.objects.get(id=rid)
    except models.ObjectDoesNotExist:
        return render(request, 'portal/error.html',
                      {'error_message': 'Request does not exist!'})

    if request.method == 'POST':
        # id = request.POST.get('who', '')
        # who = request.POST.get('who', '')
        result = request.POST.get('result', '')
        comments = request.POST.get('comments', '')

        # RESULT: (1, 'Declined'), (2, 'Approved')

        log = FundsRequestApprovalLog(request=requestObj)

        if result == 'complete':
            requestObj.completed = True
            requestObj.save()
            log.result = 3  # completed
            log.comments = comments
            log.approved_by = request.user
            log.save()
            return HttpResponseRedirect("/finance/requests")

        if result == 'approved':
            requestObj.approved = 2
        elif result == 'declined':
            requestObj.approved = 1
        log.result = requestObj.approved

        log.comments = comments
        log.approved_by = request.user
        log.save()

    requestObj.save()

    can_aprove = can_do(request.user, 1611)

    # if not can_do(request.user, 1450):  # Can Add Unit
    #    return render(request, 'vms/error.html', {'error_message': 'Access denied.  (Code: #1450)'})

    if not can_aprove:
        if requestObj.author != request.user:
            return render(
                request, 'portal/error.html',
                {'error_message': 'You can manage only your own requests!'})

    return render(request, 'portal/finance/request_details.html', {
        'request': requestObj,
        'can_aprove': can_aprove,
    })
예제 #13
0
def model(request, id):

    if not can_do(request.user, 1700):  # Can access RnD Actions
        return render(request, 'portal/error.html',
                      {'error_message': 'Access denied.  (Code: #1700)'})

    try:
        model = Model.objects.get(id=id)
    except models.ObjectDoesNotExist:
        return render(request, 'portal/error.html',
                      {'error_message': 'Model does not exist!'})

    return render(request, 'portal/rnd/model.html', {'model': model})
예제 #14
0
def project(request, id):

    if not can_do(request.user, 1700):  # Can access RnD Actions
        return render(request, 'portal/error.html',
                      {'error_message': 'Access denied.  (Code: #1700)'})

    try:
        project = Project.objects.get(id=id)
    except models.ObjectDoesNotExist:
        return render(request, 'portal/error.html',
                      {'error_message': 'Unit does not exist!'})

    return render(request, 'portal/rnd/project.html', {'project': project})
예제 #15
0
def tasks_list_canceled(request):
    tasks = None
    can_manage = False

    if can_do(request.user, 1810):  # Tasks. Can create/assign tasks
        can_manage = True
        tasks = Task.objects.filter(status='CC')
    else:
        tasks = Task.objects.filter(assignee=request.user).filter(status='CC')

    return render(request, 'portal/portal/task_list_canceled.html', {
        'tasks': tasks,
    })
예제 #16
0
def projects(request):

    if not can_do(request.user, 1700):  # Can access RnD Actions
        return render(request, 'portal/error.html',
                      {'error_message': 'Access denied.  (Code: #1700)'})

    models = Model.objects.all()

    projects = Project.objects.filter(completed=False).order_by('due_date')

    return render(request, 'portal/rnd/projects.html', {
        'allmodels': models,
        'projects': projects
    })
예제 #17
0
def tasks_list_completed(request):
    completed_tasks = None
    can_manage = False

    if can_do(request.user, 1810):  # Tasks. Can create/assign tasks
        can_manage = True
        completed_tasks = Task.objects.filter(completed=True)
    else:
        completed_tasks = Task.objects.filter(completed=True).filter(
            assignee=request.user)

    return render(request, 'portal/portal/task_list_completed.html', {
        'completed_tasks': completed_tasks,
    })
예제 #18
0
def tasks_create(request):
    """
    Create a new task

    :param request:
    :return:
    """

    if not can_do(request.user, 1810):  # Tasks. Can create/assign tasks
        return render(request, 'portal/error.html',
                      {'error_message': 'Access denied.  (Code: #1810)'})

    project_id = request.GET.get('project', '')
    project = None
    if project_id:
        try:
            project = Project.objects.get(id=project_id)
        except models.ObjectDoesNotExist:
            project = None

    if request.method == 'POST':
        # create a form instance and populate it with data from the request:
        form = CreateTaskForm(request.POST)

        if form.is_valid():
            # process the data in form.cleaned_data as required
            task = form.save(commit=False)
            task.owner = request.user
            task.save()
            task.number = task.start_date.strftime('%y-%m-') + str(
                task.id).zfill(4)
            task.save()

            syslog(request, action='Added new Task #%s' % task.number)

            if project:
                return HttpResponseRedirect('projects/%s/details' % project.id)
            else:
                return HttpResponseRedirect('/tasks/list')

    # if a GET (or any other method) we'll create a blank form
    else:
        if project:
            form = CreateTaskForm(initial={'project': project})
        else:
            form = CreateTaskForm()

    return render(request, 'portal/portal/task_create.html', {'form': form})
예제 #19
0
def task_report(request):
    if not can_do(request.user, 1910):  # Reports
        return render(request, 'portal/error.html',
                      {'error_message': 'Access denied.  (Code: #1910)'})

    form = TasksReport()
    data = None
    total_tasks = None

    period = request.GET.get('period', '')

    if period:

        try:
            period = int(period)
        except:
            return render(request, 'portal/error.html',
                          {'error_message': 'Param Error'})

        if period < 0 or period > 13:
            return render(request, 'portal/error.html',
                          {'error_message': 'Param Error'})

        form = TasksReport(request.GET)
        if form.is_valid():
            today = datetime.now()
            last_month = today.month - 1 if today.month > 1 else 12
            #last_month_year = today.year if today.month > last_month else today.year - 1
            #Order.objects.filter(created_at__year=last_month_year, created_at__month=last_month)
            current_month = today.month
            current_year = today.year

            if period == 0:
                period = current_month

            if period == 13:
                total_tasks = Task.objects.filter(
                    target_completion_date__year=current_year)
            else:
                total_tasks = Task.objects.filter(
                    target_completion_date__month=period)

            data = []
            record = dict()
            assignees = total_tasks.values('assignee').distinct()
            for r in assignees:
                user = User.objects.get(id=r['assignee'])
                record['user'] = user
                user_tasks = total_tasks.filter(assignee=user)
                record['total'] = user_tasks.count()
                record['progress'] = user_tasks.filter(
                    status__exact='PR').count()
                # record['completed'] = user_tasks.filter(status__exact='CM').count()
                record['completed'] = user_tasks.filter(completed=True).count()
                record['blocked'] = user_tasks.filter(
                    status__exact='BL').count()  # On Hold
                record['not_started'] = user_tasks.filter(
                    status__exact='NS').count()
                record['failed'] = user_tasks.filter(
                    status__exact='FD').count()
                record['canceled'] = user_tasks.filter(
                    status__exact='CC').count()

                if record['total'] - record['canceled']:
                    record['performance'] = float(record['completed']) / (
                        record['total'] - record['canceled']) * 100.0
                else:
                    record['performance'] = 0

                data.append(record)
                record = {}

    return render(request, 'portal/portal/reports/tasks_report.html', {
        'form': form,
        'data': data,
        'total_tasks': total_tasks
    })
예제 #20
0
def payments_manage1(request):
    """

    Shows Receivables forecast by 4 weeks
    Shows Funds request by 4 weeks

    :param request:
    :return:
    """

    # Manage payments

    if not can_do(request.user,
                  1670):  # Can access "Can access "Income Forecast""
        return render(request, 'portal/error.html',
                      {'error_message': 'Access denied.  (Code: #1670)'})

    # need to find first passed Sunday (beginning of the week)
    today = datetime.today()
    #  for
    date_from = datetime.today()

    # searching for first passed Sunday
    for i in range(-6, 1):
        day = today + timedelta(days=i)
        if day.weekday(
        ) == 5:  # 6 = Sunday,  5=Saturday  # weekday returns Monday is 0 ... and Sunday is 6
            date_from = day
            break

    date_to = date_from + timedelta(weeks=4)

    week1 = (date_from + timedelta(weeks=1)).date()
    week2 = (date_from + timedelta(weeks=2)).date()
    week3 = (date_from + timedelta(weeks=3)).date()
    week4 = (date_from + timedelta(weeks=4)).date()

    data_receivables = []

    receivables = Receivables.objects.filter(received=False).filter(
        date__lte=date_to).order_by('date')

    for i in receivables:
        record = {}
        record['receivable'] = i

        if i.date < today.date():
            record['week'] = 0
        elif i.date <= week1:
            record['week'] = 1
            #week1_sum += r.amount
        elif i.date <= week2:
            record['week'] = 2
            #week2_sum += r.amount
        elif i.date <= week3:
            record['week'] = 3
            #week3_sum += r.amount
        else:
            record['week'] = 4
            #week4_sum += r.amount

        data_receivables.append(record)

    overdue_requests = FundsRequest.objects.filter(completed=False).filter(
        required_date__lt=date_from).order_by('required_date')

    requests = FundsRequest.objects.filter(completed=False).filter(required_date__gte=date_from).\
        filter(required_date__lte=date_to).order_by('required_date')

    data = []

    week1_sum = 0
    week2_sum = 0
    week3_sum = 0
    week4_sum = 0
    overdue_sum = 0

    for r in requests:
        record = {}
        record['request'] = r

        if r.required_date <= week1:
            record['week'] = 1
            week1_sum += r.amount
        elif r.required_date <= week2:
            record['week'] = 2
            week2_sum += r.amount
        elif r.required_date <= week3:
            record['week'] = 3
            week3_sum += r.amount
        else:
            record['week'] = 4
            week4_sum += r.amount

        data.append(record)
        #record = {}  #!!!!

    for r in overdue_requests:
        overdue_sum += r.amount

    week_sums = {
        'overdue': overdue_sum,
        'week1': week1_sum,
        'week2': week2_sum,
        'week3': week3_sum,
        'week4': week4_sum
    }

    # select FundsRequest for next 4 weeks

    # order by date

    # build a table

    return render(
        request,
        'portal/finance/payments_manage1.html',
        {
            'date_from': date_from,
            'date_to': date_to,
            # 'requests': requests,
            'data_requests': data,
            'week1': week1,
            'week2': week2,
            'week3': week3,
            'week4': week4,
            'week_sums': week_sums,
            'overdue_requests': overdue_requests,
            'data_receivables': data_receivables,
        })
예제 #21
0
def payments_manage(request):
    """
    Modified version of Payments management

    :param request:
    :return:
    """

    if not can_do(
            request.user, 1670
    ):  # Can access "Can manage payment requests""  # Manage payments
        return render(request, 'portal/error.html',
                      {'error_message': 'Access denied.  (Code: #1670)'})

    # need to find first passed Sunday (beginning of the week)
    today = datetime.today()
    date_from = datetime.today()

    # searching for first passed Sunday
    for i in range(-6, 1):
        day = today + timedelta(days=i)
        if day.weekday(
        ) == 5:  # 6 = Sunday,  5=Saturday  # weekday returns Monday is 0 ... and Sunday is 6
            date_from = day
            break

    date_to = date_from + timedelta(weeks=4)

    week1 = (date_from + timedelta(weeks=1)).date()
    week2 = (date_from + timedelta(weeks=2)).date()
    week3 = (date_from + timedelta(weeks=3)).date()
    week4 = (date_from + timedelta(weeks=4)).date()

    data_receivables = []

    receivables = Receivables.objects.filter(received=False).filter(
        date__lte=date_to).order_by('date')

    for i in receivables:
        record = {}
        record['receivable'] = i

        if i.date < today.date():
            record['week'] = 0
        elif i.date <= week1:
            record['week'] = 1
            #week1_sum += r.amount
        elif i.date <= week2:
            record['week'] = 2
            #week2_sum += r.amount
        elif i.date <= week3:
            record['week'] = 3
            #week3_sum += r.amount
        else:
            record['week'] = 4
            #week4_sum += r.amount

        data_receivables.append(record)

        requests = FundsRequest.objects.filter(
            completed=False).filter(required_date__lte=date_to).order_by(
                'required_date')  #.filter(required_date__gte=date_from)

        data = []

        for r in requests:
            record = {}
            record['request'] = r

            if r.required_date <= week1:
                record['week'] = 1
                #week1_sum += r.amount
            elif r.required_date <= week2:
                record['week'] = 2
                #week2_sum += r.amount
            elif r.required_date <= week3:
                record['week'] = 3
                #week3_sum += r.amount
            else:
                record['week'] = 4
                #week4_sum += r.amount

            data.append(record)
        #record = {}  #!!!!

    return render(request, 'portal/finance/payments_manage.html', {
        'data_receivables': data_receivables,
        'data_requests': data,
    })
예제 #22
0
def request_details(request, rid):

    if not can_do(request.user, 1700):  # Can access RnD Actions
        return render(request, 'portal/error.html',
                      {'error_message': 'Access denied.  (Code: #1700)'})

    # shows request details
    try:
        requestObj = Request.objects.get(id=rid)
    except models.ObjectDoesNotExist:
        return render(request, 'portal/error.html',
                      {'error_message': 'Request does not exist!'})

    if request.method == 'POST':

        #id = request.POST.get('who', '')
        who = request.POST.get('who', '')
        result = request.POST.get('result', '')
        comments = request.POST.get('comments', '')

        # RESULT: (1, 'Declined'), (2, 'Approved')

        log = RequestApprovalLog(request=requestObj)

        if who == 'admin':
            if result == 'complete':
                requestObj.completed = True
                requestObj.save()
                log.result = 3  # completed
                log.comments = comments
                log.approved_by = request.user
                log.save()
                return HttpResponseRedirect("/rnd/requests")

        #log = RequestApprovalLog(request=requestObj)
        if who == 'manager':
            if result == 'approved':
                requestObj.manager_approved = 2
            elif result == 'declined':
                requestObj.manager_approved = 1
            log.result = requestObj.manager_approved
        elif who == 'owner':
            if result == 'approved':
                requestObj.owner_approved = 2
            elif result == 'declined':
                requestObj.owner_approved = 1
            log.result = requestObj.owner_approved

        log.comments = comments
        log.approved_by = request.user
        log.save()

    requestObj.save()

    manager = can_do(request.user, 1505)
    chairman = can_do(request.user, 1506)

    #if not can_do(request.user, 1450):  # Can Add Unit
    #    return render(request, 'vms/error.html', {'error_message': 'Access denied.  (Code: #1450)'})

    if not manager and not chairman:
        if requestObj.author != request.user:
            return render(
                request, 'portal/error.html',
                {'error_message': 'You can manage only your own requests!'})

    return render(request, 'portal/rnd/request_details.html', {
        'request': requestObj,
        'manager': manager,
        'chairman': chairman
    })
예제 #23
0
def tasks_list(request):
    """

    :param request:
    :return: list of filtered tasks
    """
    can_manage = False

    assignee_id = request.GET.get('assignee', '')
    owner_id = request.GET.get('owner', '')
    assignee = None
    owner = None
    filter = False

    # params_string = request.META['QUERY_STRING']

    if can_do(request.user, 1810):  # Tasks. Can create/assign tasks

        if assignee_id:
            try:
                assignee = User.objects.get(id=assignee_id)
            except models.ObjectDoesNotExist:
                assignee = None

        if owner_id:
            try:
                owner = User.objects.get(id=owner_id)
            except models.ObjectDoesNotExist:
                owner = None

        if assignee:
            tasks = Task.objects.filter(completed=False).filter(
                assignee=assignee).order_by('id')
            filter = True
        elif owner:
            tasks = Task.objects.filter(completed=False).filter(
                owner=owner).order_by('id')
            filter = True
        else:
            tasks = Task.objects.filter(completed=False).order_by('id')

        can_manage = True
        completed_tasks = Task.objects.filter(completed=True)
    else:
        tasks = Task.objects.filter(completed=False).filter(
            assignee=request.user)
        completed_tasks = Task.objects.filter(completed=True).filter(
            assignee=request.user)

    today = datetime.now()

    return render(
        request, 'portal/portal/task_list.html', {
            'tasks': tasks.exclude(status='CC'),
            'can_manage': can_manage,
            'completed_tasks': completed_tasks,
            'filter': filter,
            'today': today,
            'owner': owner,
            'assignee': assignee
        })