Example #1
0
def budget_reminder_alertmail(request):
    '''
    Budget remainder mail to  project initiator
    '''
    today_date = datetime.datetime.now().date()
    bus_head_alertdays = AlertDataConfiguration.objects.get( \
            id='alertdataconfig8').days
    pjt_owner_alertdays = AlertDataConfiguration.objects.get( \
            id='alertdataconfig9').days
    budgets = ProjectBudget.objects.filter(project__is_active=True, \
            project__is_approved=True, project__ex_approval=True, \
            budget_updated=False)
    bus_head_budgets = budgets.filter( \
            project__schedules__approved_date__lte=today_date - \
            relativedelta(days=bus_head_alertdays))
    pjt_owner_budgets = budgets.filter(\
            project__schedules__approved_date__lte=today_date - \
            relativedelta(days=pjt_owner_alertdays)).values('id')
    for project_budget in bus_head_budgets:
        mail_ids = [str(project_budget.project.requested_by.email)]
        cc_mail_ids = []
        if project_budget.business_head and \
                project_budget.project.requested_by.id != project_budget.business_head.id:
            cc_mail_ids.append(str(project_budget.business_head.email))

        if project_budget.id in pjt_owner_budgets and project_budget.pjt_owner:
            cc_mail_ids.append([str(project_budget.pjt_owner.email)])
        alert_generate(request, 'ProjectBudget', 'alertdataconfig8', \
            project_budget.id, mail_ids, cc_mail_ids)
Example #2
0
def budget_alert_mail(request, pjt_id):
    project = Project.objects.get(id=pjt_id)
    project_budget = ProjectBudget.objects.filter(project__id=pjt_id)
    if len(project_budget) == 0:
        project_budget = ProjectBudget(status_id='RS1', project=project, \
                budget_updated=0, version=1, \
                modified_on=datetime.datetime.now(), \
                planned_start_date=project.schedules.planned_start_date, \
                org_end_date=project.schedules.planned_end_date, \
                revised_start_date=project.schedules.planned_start_date, \
                revised_end_date=project.schedules.planned_end_date)
        project_budget.save()
    alert_generate(request, 'ProjectBudget', 'alertdataconfig7', \
        project_budget.id, [str(project_budget.project.requested_by.email)])
Example #3
0
def ApproveAnnouncement(request):
    msg = ''

    toApprove = request.GET.get('ids', '')
    login_user = request.user

    announcement = Announcement.objects.filter(
        pk=toApprove) if toApprove != '' else ''

    announcement = announcement[0] if announcement else announcement
    approve = request.POST.get('Approve', '')
    reject = request.POST.get('Reject', '')
    title = request.POST.get('announcementname', '')
    content = request.POST.get('announcementcontent', '')
    #created_date = request.POST.get('announcementdate','')

    if approve == "Approve":
        announcement.is_approved = "1"
        announcement.title = title
        announcement.content = content
        #announcement.creation_date = created_date
        announcement.save()

        email_subject = 'New Announcement Approval Status'
        email_subject1 = 'New Announcement - ' + str(announcement.title)
        #for each in User.objects.filter(groups__name = 'Corporate Admin'):
        #    recipients = each.email

        #user = User.objects.get(username = announcement.requested_by)
        #recipients = user.email

        #template = get_template('Announcement_Mail.html')
        #data = {'Requested_by' : str(announcement.requested_by),
        #        'Title' : str(announcement.title),
        #        'Content' : str(announcement.content),
        #        'Created_on' : str(announcement.creation_date),
        #        'approved_by' : str(announcement.approved_by)
        #        }
        #email_message = template.render(Context(data))
        Title = str(announcement.title)
        email_message = 'Announcement ' + str(
            announcement.title) + ' was approved by ' + str(
                announcement.approved_by)
        template = get_template('Approved_Announcement_Mail.html')
        data = {'Title': Title}
        email_message1 = template.render(Context(data))
        try:
            #            Email().send_email(email_subject, email_message, [recipients], CONTENT_TYPE)
            ommission = "@example.com"
            for each in UserProfile.objects.filter(
                    Q(code__startswith="E") | Q(user__username='******')):
                if (each.user.is_active == True):
                    if (each.user.email.endswith(ommission) != True):
                        #Email().send_email(email_subject1, email_message1, [each.user.email], CONTENT_TYPE)
                        alert_generate(request, 'Announcement',
                                       'alertdataconfig15', announcement.pk,
                                       [each.user.email])
            msg = 'APPROVED'
        except Exception:
            errMessage = 'Email Sending failed \n %s' % (Exception)

    elif reject == "Reject":
        #import pdb; pdb.set_trace()
        announcement.is_rejected = "1"
        announcement.save()
        msg = 'REJECTED'
        user = User.objects.get(username=announcement.requested_by)
        recipients2 = user.email
        email_message = 'Your request to a new announcement was rejected by ' + str(
            announcement.approved_by)
        Email().send_email('Announcement Approval Status', email_message,
                           [recipients2], CONTENT_TYPE)
    return render(
        request,
        'CreateAnnouncement.html',
        {
            'announcement': announcement,
            'mode': 'update',
            'login_user': login_user,
            'msg': msg
        },
    )
Example #4
0
def save(request):
    '''
    Save project Budget, Efforts  and Costs
    '''
    req_data = request.POST
    pjt_bud = ProjectBudget.objects.get(id=req_data.get('bud_id'))
    status = req_data.get('status')
    # Version Control
    if pjt_bud.status.id == 'RS4':
        bud_id = ''
        version = int(pjt_bud.version) + 1
    else:
        bud_id = req_data.get('bud_id')
        version = pjt_bud.version

    # Save Project Budject
    budget_dict = ({
                    'id': bud_id,
                    'project': pjt_bud.project,
                    'planned_start_date': datetime.datetime.strptime(\
                        req_data.get('planned_start_date'), '%m-%d-%Y'),
                    'org_end_date': datetime.datetime.strptime(\
                        req_data.get('org_end_date'), '%m-%d-%Y'),
                    'revised_start_date': datetime.datetime.strptime(\
                        req_data.get('revised_start_date'), '%m-%d-%Y'),
                    'revised_end_date': datetime.datetime.strptime(\
                        req_data.get('revised_end_date'), '%m-%d-%Y'),
                    'execution_mode': req_data.get('execution_mode'),
                    'remarks': req_data.get('remarks'),
                    'version': version,
                    'status_id': 'RS3' \
                        if status == 'RS4' and \
                        str(request.user.id) == str(req_data.get('bus_head')) \
                        else status,  # Maintain 1st and 2nd level approval
                    'budget_updated': 1 if pjt_bud.budget_updated == 0 and \
                        status == 'RS2'  else pjt_bud.budget_updated,
                    'business_head_id': req_data.get('bus_head'),
                    'pjt_owner_id': req_data.get('pjt_owner'),
                    'other1_description': req_data.get('other1_desc'),
                    'other2_description': req_data.get('other2_desc'),
                    })
    if status == 'RS5':
        budget_dict.update({'rejection_reason': req_data.get('rjt_reason', \
            '')})

    project_budget = ProjectBudget(**budget_dict)
    project_budget.save()

    # Save  Activity table
    tot_effort = 0
    activity_tbl_len = req_data.get('activity_len')
    delete_effort = req_data.get("delete_effort")
    delete_effort_ids = delete_effort.split(',')
    delete_effort_details = \
            ProjectBudgetEfforts.objects.filter(id__in=delete_effort_ids)
    delete_effort_details.delete()
    if activity_tbl_len != '' and int(activity_tbl_len) > 0:
        for row in range(1, int(activity_tbl_len)):
            if req_data.get('location' + str(row)) == '' or req_data.get( \
                    'location' + str(row)) == None:
                continue
            activity_dict = ({
                            'id': '' if bud_id == '' else req_data.get( \
                                'effort_id' + str(row)),
                            'project_budget': project_budget,
                            'activity_type': req_data.get('activity_type'),
                            'phase_id': req_data.get('phase' + str(row)),
                            'module': req_data.get('module' + str(row)),
                            'location_id': req_data.get('location' + str(row)),
                            'duration_days': req_data.get('duration_days' + \
                                str(row)) if req_data.get('pm_effort' + \
                                str(row), '0') != '' else '0',
                            'pm_effort': req_data.get('pm_effort' + \
                                str(row), '0') if req_data.get('pm_effort' + \
                                str(row), '0') != '' else '0',
                            'lead_effort': req_data.get('lead_effort' + \
                                str(row), '0') if req_data.get('lead_effort' \
                                + str(row), '0') != '' else '0',
                            'developpper_effort': req_data.get('dev_effort' + \
                                str(row), '0') if req_data.get('dev_effort' + \
                                str(row), '0') != '' else '0',
                            'tester_effort': req_data.get('test_effort' + \
                                str(row), '0') if req_data.get('test_effort' \
                                + str(row), '0') != '' else '0',
                            'other1': req_data.get('oth1_effort' + str(row), \
                                '0') if req_data.get('oth1_effort' + \
                                str(row), '0') != '' else '0',
                            'other2': req_data.get('oth2_effort' + str(row), \
                                '0') if req_data.get('oth2_effort' + \
                                str(row), '0') != '' else '0',
                            })
            if status == 'RS4' or req_data.get('effort_approved' + str(row), \
                    '0') == '1':
                activity_dict.update({'effort_approved': 1})
            else:
                activity_dict.update({'effort_approved': 0})
            efforts = ProjectBudgetEfforts(**activity_dict)
            efforts.save()
            tot_effort += float(efforts.pm_effort) + float(\
                efforts.lead_effort) + float(efforts.developpper_effort) + \
                float(efforts.tester_effort) + float(efforts.other1) + \
                float(efforts.other2)

    #Save Cost table
    tot_cost = 0
    cost_tbl_len = req_data.get('cost_len')
    delete_cost = req_data.get("delete_cost")
    delete_cost_ids = delete_cost.split(',')
    delete_cost_details = \
            ProjectBudgetCost.objects.filter(id__in=delete_cost_ids)
    delete_cost_details.delete()
    if cost_tbl_len != '' and int(cost_tbl_len) > 0:
        for row in range(1, int(cost_tbl_len)):
            if req_data.get('cost' + str(row)) == '' or req_data.get('cost' + \
                    str(row)) == None:
                continue
            cost_dict = ({
                            'id': '' if bud_id == '' else req_data.get(\
                                'cost_id' + str(row)),
                            'project_budget': project_budget,
                            'cost_type_id': req_data.get('cost_type' + \
                                str(row)),
                            'cost': req_data.get('cost' + str(row))})
            if status == 'RS4' or req_data.get('cost_approved' + str(row), \
                    '0') == '1':
                cost_dict.update({'cost_approved': 1})
            else:
                cost_dict.update({'cost_approved': 0})
            ProjectBudgetCost(**cost_dict).save()
            tot_cost += float(req_data.get('cost' + str(row)))
    project_budget.total_effort = "%.2f" % tot_effort
    project_budget.total_cost = "%.2f" % tot_cost
    project_budget.save()

    # Thrershold Calculation
    prev_version = ProjectBudget.objects.filter(project__id=project_budget.\
                project.id, version=int(project_budget.version) - 1)
    dev_effort = 0
    dev_cost = 0
    threshold_effort = 0
    threshold_cost = 0
    if len(prev_version) > 0:
        dev_effort = tot_effort - float(prev_version[0].total_effort)
        dev_cost = tot_cost - float(prev_version[0].total_cost)
        if prev_version[0].total_effort > 0:
            threshold_effort = (float(dev_effort) / \
                prev_version[0].total_effort) * 100
        if prev_version[0].total_cost > 0:
            threshold_cost = (float(dev_cost) / prev_version[0].total_cost) * \
                100

    # Threshold deviation mail sending
    thresh_msg = ''
    if threshold_effort > 25 or threshold_effort < -25:
        thresh_msg += 'Efforts deviation with previous version :' + \
            str("%.2f" % threshold_effort) + ' %'
    if threshold_cost > 25 or threshold_cost < -25:
        thresh_msg += '<BR>Cost deviation with previous version :' + \
            str("%.2f" % threshold_cost) + ' %'
    thresh_msg += '<BR><BR>Best Regards,<BR>Admin<BR>'\
            'This is a system generated alert. We request you not to '\
            'reply to this message.'
    if ((threshold_effort > 25) or (threshold_cost > 25)) and status == 'RS2':
        to_mailid = [str(project_budget.pjt_owner.email)]
        cc_ids = [str(project_budget.project.requested_by.email)]
        if str(project_budget.project.requested_by.id) != \
                str(project_budget.business_head.id):
            to_mailid.append(str(project_budget.business_head.email))
        alert_generate(request, 'ProjectBudget', 'alertdataconfig6', \
                project_budget.id, to_mailid, cc_ids, thresh_msg)

    # Workflow - Send Mail to requester, Bus head or pjt owner
    requster_id = str(project_budget.project.requested_by.email)
    bus_head_id = str(project_budget.business_head.email)
    pjt_own_id = str(project_budget.pjt_owner.email)
    if status == 'RS2':
        cc_ids = [requster_id]
        if str(project_budget.project.requested_by.id) == \
                str(project_budget.business_head.id):
            to_ids = [pjt_own_id]
            alert_generate(request, 'ProjectBudget', 'alertdataconfig2', \
                    project_budget.id, to_ids, cc_ids)
        else:
            to_ids = [bus_head_id]
            cc_ids.append(pjt_own_id)
            alert_generate(request, 'ProjectBudget', 'alertdataconfig1', \
                project_budget.id, to_ids, cc_ids)
    if status == 'RS4':
        to_ids = [requster_id]
        cc_ids = [pjt_own_id]
        if str(request.user.id) == str(project_budget.business_head.id):
            cc_ids.append(bus_head_id)
            alert_generate(request, 'ProjectBudget', 'alertdataconfig2', \
                project_budget.id, to_ids, cc_ids)
        elif str(request.user.id) == str(project_budget.pjt_owner.id):
            if str(project_budget.project.requested_by.id) != str(\
                    project_budget.business_head.id):
                cc_ids.append(bus_head_id)
            alert_generate(request, 'ProjectBudget', 'alertdataconfig4', \
                project_budget.id, to_ids, cc_ids)
    if status == 'RS5':
        to_ids = [requster_id]
        cc_ids = [pjt_own_id]
        if str(request.user.id) == str(project_budget.business_head.id):
            cc_ids.append(bus_head_id)
            alert_generate(request, 'ProjectBudget', 'alertdataconfig5', \
                project_budget.id, to_ids, cc_ids)
        elif str(request.user.id) == str(project_budget.pjt_owner.id):
            if str(project_budget.project.requested_by.id) != str(\
                    project_budget.business_head.id):
                cc_ids.append(bus_head_id)
            alert_generate(request, 'ProjectBudget', 'alertdataconfig5', \
                project_budget.id, to_ids, cc_ids)
    return HttpResponseRedirect("/projectbudget/create/?pjt_id=" + \
            str(project_budget.project.id) + '&display_msg=' + \
                DISPLAY_MSG[status])
Example #5
0
def save(request):
    '''
    Save the Reimbursement Form
    '''
    to_ids = []
    req_data = request.POST
    req_usr = User.objects.filter(username=req_data.get('requested_by'))[0]
    req_to_usr = User.objects.filter(username=req_data.get('request_to'))[0]
    save_dict =({
                'id':req_data.get('reimbus_id',''),
                'name':req_data.get('reimburs_name'),
                'requested_by_id':req_usr.pk,
                'approved_by_id':req_to_usr.pk,
                'final_approver_id':req_data.get('final_approver'),
        #                'requested_date':datetime.datetime.strptime(\
        #                        req_data.get('reimbursement_date'), '%m-%d-%Y'),
                'applied_date':datetime.datetime.strptime(\
                        req_data.get('applied_date'), '%m-%d-%Y'),
                'status_id':req_data.get('reimbus_status'),
                'is_int_approved': 1 if req_data.get('reimbus_status') =='RS3' or \
                                            req_data.get('reimbus_status') == 'RS4' else 0,
                'is_ext_approved': 1 if req_data.get('reimbus_status') =='RS4' else 0,
                'total_expenditure':req_data.get('total_exp')\
                                        if req_data.get('total_exp','') != '' else 0,
                'rejection_reason': req_data.get('reject_reason')\
                        if req_data.get('reimbus_status') == 'RS5' else '',
                })
    reimbursement = Reimbursement(**save_dict)
    reimbursement.save()
    '''
    Save Expenditure data
    '''
    total_amt = 0
    expenditure_len = req_data.get('expenditure_len')
    delete_expenditure = req_data.get("delete_expenditure")
    delete_expenditure_ids = delete_expenditure.split(',')
    delete_expenditure_details = \
            Expenditure_Reimburs.objects.filter(id__in=delete_expenditure_ids)
    delete_expenditure_details.delete()
    if expenditure_len > 0:
        for row in range(1, int(expenditure_len)):
            expend_name = req_data.get('expenditure' + str(row))
            expend_amount = req_data.get('exp_amount' + str(row))
            if expend_name != ' ' and expend_amount != ' ':
                exp_dict = ({
                    'id':
                    req_data.get('expenditure_id' + str(row), ''),
                    'reimbursement_id':
                    reimbursement.id,
                    'expenditure_name':
                    req_data.get('expenditure' + str(row)),
                    'amount':
                    req_data.get('exp_amount' + str(row)),
                })
                total_amt += float(req_data.get('exp_amount' + str(row)))
                Expenditure_Reimburs(**exp_dict).save()
    reimbursement.total_expenditure = "%.2f" % total_amt
    reimbursement.save()
    msg = req_data.get('reimbus_status')
    final_approver = User.objects.filter(id=req_data.get('final_approver'))[0]
    to_ids.append(req_usr.email)
    to_ids.append(req_to_usr.email)
    to_ids.append(final_approver.email)
    if msg == "RS2":
        alert_generate(request, 'Reimbursement', 'alertdataconfig18',
                       reimbursement.id, to_ids)
    if msg == "RS3":
        alert_generate(request, 'Reimbursement', 'alertdataconfig19',
                       reimbursement.id, to_ids)
    if msg == "RS4":
        alert_generate(request, 'Reimbursement', 'alertdataconfig20',
                       reimbursement.id, to_ids)
    if msg == "RS5":
        alert_generate(request, 'Reimbursement', 'alertdataconfig21',
                       reimbursement.id, to_ids)
    return HttpResponseRedirect("/reimbursement/create/?id=" + \
            str(reimbursement.id) + '&display_msg=' + \
                DISPLAY_MSG[msg])