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)
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)])
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 }, )
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])
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])