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 })
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 })
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 })
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})
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})
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 })
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 })
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})
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, })
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', {})
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 })
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, })
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})
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})
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, })
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 })
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, })
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})
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 })
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, })
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, })
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 })
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 })