Exemple #1
0
def start_processing(request):

    if (request.method == 'POST'):
        userprofile = UserProfile.objects.get(user=request.user)
        user_type = userprofile.user_type
        application_id = request.POST.get('id')
        application = Application.objects.get(pk=application_id)
        to_json = {}
        notes = request.POST.get('notes', "")

        if application.status == 1 and isClerk(request.user):

            application.status = 2
            application.save()
            activity = "Processing started "
            log_entry = ApplicationLog(application=application,
                                       time=datetime.now(),
                                       activity=activity,
                                       notes=notes)
            log_entry.save()
            to_json['result'] = 1
            to_json['message'] = 'Application marked as processing'
            messages.success(request, 'Application marked as processing')
        else:
            to_json['result'] = 0
            to_json['message'] = 'error'
            messages.error(request,
                           'Error: Could not change status. Try again.')
        return HttpResponse(json.dumps(to_json))
    else:
        raise PermissionDenied
Exemple #2
0
def delete_application(request):
    if request.method == 'POST':
        userprofile = UserProfile.objects.get(user=request.user)
        application_id = request.POST.get('id')
        application = Application.objects.get(pk=application_id)
        if application.employee.dept == userprofile.dept and application.status == 1:

            application.status = 0

            #Think , Think , Think :P
            if not application.is_new:
                application.original.original = None
                application.original.save()
                # Because now, no Cancel requests going on for that particular application

            application.save()

            activity = "Application deleted by " + userprofile.get_user_type_display(
            )
            log_entry = ApplicationLog(application=application,
                                       time=datetime.now(),
                                       activity=activity)
            log_entry.save()
            messages.success(request, 'Application Deleted.')

        else:
            messages.error(
                request, 'Some error occured: Could not delete application.')

        return redirect(reverse('details', args=(application.pk, )))
    else:
        raise PermissionDenied
Exemple #3
0
def delete_application(request):
    if request.method == 'POST':
        userprofile = UserProfile.objects.get(user=request.get)
        application_id = request.POST.get('id')
        application = Application.objects.get(pk=application_id)
        if application.employee.dept == userprofile.dept and application.status == 1:
            application.status = 0

            if not application.is_new:
                application.original = None
                application.original.save()

            application.save()

            activity = "Application Deleted by" + userprofile.get_user_type_display(
            )
            log_entry = ApplicationLog(application=application,
                                       time=datetime.now,
                                       activity=activity)
            log_entry.save()
            messages.success(request, "Application Deleted")

        else:
            messages.error("Some error occured,Cannot delete application")
        return redirect(reverse(details, args=(application.pk, )))
    else:
        raise PermissionDenied
Exemple #4
0
def cancel(request, id):
    userprofile = UserProfile.objects.get(user=request.user)
    try:
        application = Application.objects.get(pk=id)
    except Application.DoesNotExist:
        raise Http404

    if application.employee.dept != userprofile.dept:
        raise PermissionDenied

    if not application.is_new:
        return HttpResponse("Cancel requests can't be cancelled!")
    if application.is_credit:
        return HttpResponse("Credit requests can't be cancelled!")

    if application.status != 3:
        return HttpResponse(
            "This application is now " + application.get_status_display() +
            ", Cancellation request can be initiated only for APPROVED applications "
        )

    if application.original:
        messages.error(
            request,
            "There already exists a cancel request for this application ")
        return redirect(reverse('details', args=(application.original.pk, )))

    new_form = CancelForm()
    context = {
        'user_type': userprofile.user_type,
        'form': new_form,
        'application': application,
    }

    if request.method == 'POST':
        form = CancelForm(request.POST, request.FILES)
        if form.is_valid():
            reason = form.cleaned_data['reason']
            att1 = form.cleaned_data['attachment1']
            att2 = form.cleaned_data['attachment2']
            att3 = form.cleaned_data['attachment3']
            cancel_application = application.CancelRequest(
                reason, att1, att2, att3)
            activity = "Application generated by " + userprofile.get_user_type_display(
            )
            log_entry = ApplicationLog(application=cancel_application,
                                       time=datetime.now(),
                                       activity=activity)
            log_entry.save()
            messages.success(request, "Cancellation request created")
            return redirect(reverse('details', args=(cancel_application.pk, )))
        else:
            context['form'] = form

    return render(request, 'leave/cancel.html', context)
Exemple #5
0
def new_application(request, type):

    #Information specific to the user

    userprofile = UserProfile.objects.get(user=request.user)

    context = {
        'name': request.user.username,
        'dept': userprofile.dept.name,
        'user_type': userprofile.user_type,
        'is_credit': isCredit(type)
    }

    if (request.method == 'POST'):
        if isCredit(type):
            form = CreditApplicationForm(userprofile.dept, request.POST,
                                         request.FILES)
        else:
            form = ApplicationForm(userprofile.dept, request.POST,
                                   request.FILES)
        if (form.is_valid()):
            new_application = form.save()

            if not isCredit(type):
                new_application.new_date_from = new_application.date_from
                new_application.new_date_to = new_application.date_to
                new_application.save()
            #These three lines shouldn't be here

            activity = "Application generated by " + userprofile.get_user_type_display(
            )
            log_entry = ApplicationLog(application=new_application,
                                       time=datetime.now(),
                                       activity=activity)
            log_entry.save()
            messages.success(request, 'Application added successfully')
            return redirect(reverse('details', args=(new_application.pk, )))
        else:
            context['form'] = form

            return render(request, 'leave/new_application.html', context)

    else:
        if isCredit(type):
            form = CreditApplicationForm(userprofile.dept)
        else:
            form = ApplicationForm(userprofile.dept)
        context['form'] = form
        return render(request, 'leave/new_application.html', context)
Exemple #6
0
def new_application(request, type):
    #information particular to each user
    userprofile = UserProfile.objects.get(user=request.user)
    context = {
        'name': request.user.username,
        'dept': userprofile.dept.name,
        'user_type': userprofile.user_type,
        'is_credit': isCredit(type)
    }
    if request.method == 'POST':
        if isCredit(type):
            form = CreditApplicationForm(userprofile.dept, request.POST,
                                         request.FILES)
        else:
            form = ApplicationForm(userprofile.dept, request.POST,
                                   request.FILES)

        if form.is_valid():
            new_application = form.save()
            if not isCredit(type):
                new_application.new_date_from = new_application.date_from
                new_application.new_date_to = new_application.date_to
                new_application.save()

            activity = "Application generated by" + userprofile.get_user_type_display(
            )
            log_entry = ApplicationLog(Application=Application,
                                       time=datetime.now,
                                       activity=activity)
            log_entry.save()
            messages.success(request, 'Application')
            return redirect(reverse(details, args=(new_application.pk, )))

        else:
            context['form'] = form

    else:
        if isCredit(type):
            form = CreditApplicationForm(userprofile.dept)
        else:
            form = ApplicationForm(userprofile.dept)
        context['form'] = form
        return render(request, 'leave/new_application.html', context)
Exemple #7
0
def details(request, id):
    userprofile = UserProfile.objects.get(user=request.user)
    try:
        application = Application.objects.get(pk=id)
    except Application.DoesNotExist:
        raise Http404
    if isDept(request.user) and application.employee.dept != userprofile.dept:
        raise PermissionDenied
    if isClerk(request.user) and not application.time_received:
        application.time_received = datetime.now()
        application.save()
        activity = "Application Received at Est.Office"
        log_entry = ApplicationLog(application=application,
                                   time=datetime.now(),
                                   activity=activity)
        log_entry.save()

    application_log = ApplicationLog.objects.filter(
        application=application).order_by("time")

    approved_days_count = None
    if application.is_credit:
        days_count = application.days
        approved_days_count = application.days
    else:
        days_count = (application.date_to - application.date_from).days + 1
        approved_days_count = (application.new_date_to -
                               application.new_date_from).days + 1

    context = {
        'name': request.user.username,
        'application': application,
        'days_count': days_count,
        'user_type': userprofile.user_type,
        'approved_days_count': approved_days_count,
        'user_display_name': userprofile.get_user_type_display,
        #'dept': userprofile.dept.name,
        'application_log': application_log
    }
    return render(request, 'leave/application.html', context)
Exemple #8
0
def complete(request):
    if (request.method == 'POST'):
        userprofile = UserProfile.objects.get(user=request.user)
        application_id = request.POST.get('id')
        status = request.POST.get('status')
        status = int(status)
        date_from = request.POST.get('date_from', "")
        date_to = request.POST.get('date_to', "")
        notes = request.POST.get('notes', "")
        application = Application.objects.get(pk=application_id)
        employee = application.employee
        to_json = {}
        valid = True
        if not application.is_credit:
            if not application.is_new:
                date_to = application.new_date_to
                date_from = application.new_date_from

            else:

                try:

                    date_to = datetime.strptime(date_to, "%m/%d/%Y").date()
                    date_from = datetime.strptime(date_from, "%m/%d/%Y").date()

                except ValueError:
                    valid = False
                    to_json['message'] = 'Invalid dates entered.'
                else:
                    if date_from > date_to or date_to > application.new_date_to or date_from < application.new_date_from:
                        valid = False
                        to_json[
                            'message'] = 'Selected dates out of range. Please select valid dates.'
                if not valid:
                    to_json['result'] = 0
                    messages.error(request, to_json['message'])
                    return HttpResponse(json.dumps(to_json))
            days = (date_to - date_from).days + 1

        else:
            days = application.days

        if application.status == 2 and 3 <= status <= 4:

            if application.is_credit or (
                    not application.is_new
            ) or status == 4 or employee.isLeaveLeft(days,
                                                     application.leave_type):
                application.status = status
                application.time_approved = datetime.now()
                if status == 3 and not application.is_credit:
                    if (application.new_date_from != date_from
                            or application.new_date_to != date_to):
                        if notes and notes != "":
                            notes += '\n'
                        notes += userprofile.get_user_type_display(
                        ) + " updated  date  : " + str(
                            date_from) + " to " + str(date_to)
                    application.new_date_from = date_from
                    application.new_date_to = date_to
                else:
                    if not application.is_new:
                        application.original.original = None
                        application.original.save()
                        #IMPORTANT  Set original to Null in case of rejecting Cancel Application

                application.save()

                if application.status == 3:
                    if application.is_credit:
                        if application.is_new:
                            action_type = 1
                        else:
                            action_type = -1
                    else:
                        if application.is_new:
                            action_type = -1
                        else:
                            action_type = 1

                    employee.approveTransaction(days, application.leave_type,
                                                action_type)
                    TransactionLog().ApplicationTransaction(
                        employee, application)
                    #Danger!

                activity = "Application " + application.get_status_display()
                log_entry = ApplicationLog(application=application,
                                           time=datetime.now(),
                                           activity=activity,
                                           notes=notes)
                log_entry.save()
                messages.success(
                    request, 'Application ' +
                    application.get_status_display() + ' successfully')

                to_json['result'] = 1
                to_json[
                    'message'] = 'Application ' + application.get_status_display(
                    ) + ' successfully'

            else:
                to_json['result'] = 0
                to_json['message'] = "Insufficient number of leaves left!"
                messages.error(request, 'Insufficient number of leaves left!')

        else:
            to_json['result'] = 0
            to_json['message'] = 'Some error occured. Please try again'
        return HttpResponse(json.dumps(to_json))
    else:
        raise PermissionDenied