예제 #1
0
def input_milestones(request):
    project_id=request.GET.get('id')
    if project_id is None or len(project_id)==0:
        return HttpResponseRedirect('/home/')
    else:  
        #current_user = request.user
        #engineer = EngineerProfile.objects.get(user=current_user)
        project = Project.objects.get(pk=project_id)
        previous_milestones = Milestone.objects.filter(project=project).order_by('due_date')
        quarter_number=return_quarter_year()[0]
        today=datetime.today()
        year=return_quarter_year()[1]
        if request.method == 'POST':
            try:
                due_date=request.POST['date']
                percentage=request.POST['percentage']
                schedule=request.POST['schedule']
                Milestone.objects.create( 
                                      date=today,
                                      due_date=due_date,
                                      major_milestone=schedule,
                                      percentage_complete=percentage,
                                      project=project,
                                      quarter_number=quarter_number,
                                      year=year,

                )
            except ValidationError:
                pass
            return HttpResponseRedirect('/input_milestones/?id='+project_id)              
    return render(request, 'spending_tool/input_milestones.html',{'quarter_number':quarter_number ,
                                                                  'year':year,
                                                                  'project':project,
                                                                  'previous_milestones':previous_milestones})
예제 #2
0
def add_current_field(request):
    project_id=request.GET.get('id')
    if project_id is None or len(project_id)==0:
        return HttpResponseRedirect('/home/')
    else:  
        current_user=request.user

        #engineer=EngineerProfile.objects.get(user=current_user)
        project=Project.objects.get(pk=project_id)
        
        date=return_quarter_year()
        quarter_number=date[0]
        year=date[1]
        if request.method=='POST':
            try:
                name = request.POST['name']
                #department_number=request.POST.get('department_number','')
                cross_charge_actual_cost=request.POST.get('cross_charge_actual_cost','')
                direct_charge_actual_cost=request.POST.get('direct_charge_actual_cost','')
                expected_cost=0 #request.POST.get('expected_cost','')
                current=ExpensesType.objects.create(project=project,
                							expenses_type=name,
                							estimated_cost=expected_cost,
                							cross_charge_actual_cost=cross_charge_actual_cost,
                							direct_charge_actual_cost=direct_charge_actual_cost,
                							year=year,
                							quarter_number=quarter_number,)
                							#department_number=department_number)
            except ValidationError:
                return HttpResponseRedirect('/add_current_field/?id='+project_id)
            return HttpResponseRedirect('/financial_info/?id='+project_id)
    return render(request,'spending_tool/add_current_field.html',{'quarter_number':quarter_number,
                                                                  'year':year,
                                                                  'project':project})
예제 #3
0
def add_field(request):
    project_id=request.GET.get('id')
    if project_id is None or len(project_id)==0:
        return HttpResponseRedirect('/home/')
    else:
        current_user=request.user

        #engineer=EngineerProfile.objects.get(user=current_user)
        project=Project.objects.get(pk=project_id)
        
        date=return_quarter_year()
        quarter_number=date[0]
        year=date[1]

        expense_for_current_quarter=[]

        if request.method == 'POST':
            try:
                name = request.POST['name']
                expected_cost=request.POST['expected_cost']
                if quarter_number==1 or quarter_number==2 or quarter_number==3:          
                    ExpensesType.objects.create(year=year,
                                                    expenses_type=name, 
                                                    actual_cost=0,
                                                    estimated_cost=expected_cost,
                                                    project=project,
                                                    quarter_number=quarter_number+1
                                                    )

                if quarter_number==4:
                    ExpensesType.objects.create(year=year+1,
                                                    expenses_type=name, 
                                                    actual_cost=0,
                                                    estimated_cost=expected_cost,
                                                    project=project,
                                                    quarter_number=1
                                                    )
            except ValidationError:
                pass
            return HttpResponseRedirect('/financial_info/?id='+project_id)
            
        if quarter_number==1 or quarter_number==2 or quarter_number==3:
            expense_for_current_quarter=ExpensesType.objects.filter(
                                                                year=year,
                                                                quarter_number=quarter_number+1,
                                                                project=project)
        if quarter_number==4:
            expense_for_current_quarter=ExpensesType.objects.filter(
                                                                year=year+1,
                                                                quarter_number=1,
                                                                project=project)
        
    return render(request,'spending_tool/add_field.html',{'quarter_number':quarter_number,
                                                          'year':year,
                                                          'project':project, 
                                                          'expense_for_current_quarter':expense_for_current_quarter})
예제 #4
0
def edit_status(request):
    time=datetime.now()
    today=time
    project_id=request.GET.get('id')
    if project_id is None or len(project_id)==0:
        return HttpResponseRedirect('/home/')
    else:  
        #current_user = request.user
        #engineer = EngineerProfile.objects.get(user=current_user)
        project = Project.objects.get(pk=project_id)
        previous_status=DescriptionType.objects.filter(project=project).order_by('date')
        l=len(previous_status)
        index=l-1
        one_status=previous_status[index]
        previous_status=previous_status[:index]
        quarter_number=return_quarter_year()[0]
        year=return_quarter_year()[1] 
        if request.method == 'POST':
            recent_accomplishments=request.POST['recent_accomplishments']
            current_challenges=request.POST['current_challenges']
            next_steps=request.POST['next_steps']
            DescriptionType.objects.create(project=project,
                                           quarter_number=quarter_number,
                                           year=year,
                                           date=time,
                                           recent_accomplishments=recent_accomplishments,
                                           next_steps=next_steps,
                                           current_challenges=current_challenges
                )
   
            return HttpResponseRedirect('/edit_status/?id='+str(project.id))              
    return render(request, 'spending_tool/edit_status.html',{'project':project, 
                                                             'year':year,
                                                             'quarter_number':quarter_number,
                                                             'one_status':one_status,
                                                             'today':today,
                                                             'previous_status':previous_status})
예제 #5
0
def review_info(request):
    project_id=request.GET.get('id')
    if project_id is None or len(project_id)==0:
        return HttpResponseRedirect('/home/')
    else:  
    	current_user=request.user
        #engineer=EngineerProfile.objects.get(user=current_user)
        project=Project.objects.get(pk=project_id)
        total_expenses=ExpensesType.objects.filter(project=project)
        spent_cost=0
        for exp in total_expenses:
            spent_cost=spent_cost+exp.direct_charge_actual_cost+exp.cross_charge_actual_cost
            project.spent_cost=spent_cost
            project.save()
        date=return_quarter_year()
        quarter_number=date[0]
        year=date[1]
        if quarter_number==1:
            previous_quarter=ExpensesType.objects.filter(project=project, year=year-1, quarter_number=4).order_by('expenses_type')
        if quarter_number==2:
            previous_quarter=ExpensesType.objects.filter(project=project, year=year, quarter_number=1).order_by('expenses_type')
        if quarter_number==3:
            previous_quarter=ExpensesType.objects.filter(project=project, year=year, quarter_number=2).order_by('expenses_type')
        if quarter_number==4:
            previous_quarter=ExpensesType.objects.filter(project=project, year=year, quarter_number=3).order_by('expenses_type')
        current_quarter = ExpensesType.objects.filter(project=project, year=year, quarter_number=quarter_number).order_by('expenses_type')
        if quarter_number== 1 or quarter_number==2 or quarter_number == 3:
            next_quarter=ExpensesType.objects.filter(project=project, year=year, quarter_number= quarter_number+1).order_by('expenses_type')
        if quarter_number== 4:
            next_quarter=ExpensesType.objects.filter(project=project, year=year+1, quarter_number= 1).order_by('expenses_type')
        total_exp_current_direct=total_exp_current_cross=total_exp_next_direct=total_exp_next_cross=total_current=0
        for exp in current_quarter:
            total_exp_current_direct=total_exp_current_direct+exp.direct_charge_actual_cost
            total_exp_current_cross=total_exp_current_cross+exp.cross_charge_actual_cost
        
    return render(request,'spending_tool/review_info.html',{'project':project,
                                                            'year':year,
    														'quarter_number':quarter_number,
    														'previous_quarter':previous_quarter,
    													 	'current_quarter':current_quarter,
    													 	'next_quarter':next_quarter,
                                                            'total_exp_current_direct':total_exp_current_direct,
                                                            'total_exp_current_cross':total_exp_current_cross,
                                                            'spent_cost':spent_cost})
예제 #6
0
def create_default_expenses(sender, instance, created, **kwargs):
    if created:
      today=datetime.today()
      date=return_quarter_year()
      types=['Other','Travel','Intern' ,'Contractor','FTE','Capital Equipment','Equipment']
      for t in types:
          ExpensesType.objects.create(
          expenses_type= t,
          year=date[1],
          quarter_number=date[0],
          direct_charge_actual_cost=0,
          cross_charge_actual_cost=0,
          estimated_cost=0,
          project=instance
          )
      DescriptionType.objects.create(project=instance,
                                    quarter_number=date[0],
                                    year=date[1],
                                    date=today,
                                     )
예제 #7
0
def edit(request):
    time=datetime.now()
    project_id=request.GET.get('id')
    if project_id is None or len(project_id)==0:
        return HttpResponseRedirect('/home/')
    else:  
        #current_user = request.user
        id_status=request.GET['status']
        #engineer = EngineerProfile.objects.get(user=current_user)
        project = Project.objects.get(pk=project_id)
        current_status=DescriptionType.objects.get(pk=id_status)
        quarter_number=return_quarter_year()[0]
        if request.method == 'POST':
            current_status.recent_accomplishments=request.POST['recent_accomplishments']
            current_status.current_challenges=request.POST['current_challenges']
            current_status.next_steps=request.POST['next_steps']
            current_status.save()
            return HttpResponseRedirect('/edit_status/?id='+project_id)
    return render(request, 'spending_tool/edit.html', {'project':project, 
                                                       'year':year,
                                                       'quarter_number':quarter_number,
                                                       'current_status':current_status})
예제 #8
0
def create_default_expenses(sender, instance, created, **kwargs):
    if created:
        today = datetime.today()
        date = return_quarter_year()
        types = [
            'Other', 'Travel', 'Intern', 'Contractor', 'FTE',
            'Capital Equipment', 'Equipment'
        ]
        for t in types:
            ExpensesType.objects.create(expenses_type=t,
                                        year=date[1],
                                        quarter_number=date[0],
                                        direct_charge_actual_cost=0,
                                        cross_charge_actual_cost=0,
                                        estimated_cost=0,
                                        project=instance)
        DescriptionType.objects.create(
            project=instance,
            quarter_number=date[0],
            year=date[1],
            date=today,
        )
예제 #9
0
def financial_info(request):
    project_id=request.GET.get('id')
    if project_id is None or len(project_id)==0:
        return HttpResponseRedirect('/home/')
    else:
        try: 
            current_user=request.user
            cross_charge_actual_cost_specific=direct_charge_actual_cost=[]
            #engineer=EngineerProfile.objects.get(user=current_user)
            project=Project.objects.get(pk=project_id)
            expenses_for_previous_quarter, expenses_for_current_quarter, expenses_for_next_quarter=returnExpenses(project)
            date = return_quarter_year()
            quarter_number=date[0]
            year=date[1]
            month=date[2]
            list_for_cross_charge=[]
            current_cross_dept=[]
            for exp in expenses_for_current_quarter:
                if exp.cross_charge_actual_cost>0:
                    dept_related_to=DepartmentNumber.objects.filter(relates_to=exp)
                    sum_depts=0
                    for d in dept_related_to:
                        sum_depts=sum_depts+d.cross_charge_actual_cost
                    res=exp.cross_charge_actual_cost-sum_depts
                    list_for_cross_charge.append((exp, dept_related_to, sum_depts,res ))
                    for a in dept_related_to:
                        current_cross_dept.append(a)
            add_dept=request.GET.get('add_dept','')
            if len(add_dept)!=0:
                exp=ExpensesType.objects.get(pk=add_dept)
                DepartmentNumber.objects.create(relates_to=exp,cross_charge_actual_cost=0, department_number=0)
                return HttpResponseRedirect('/financial_info/?id='+project_id+'#'+str(exp.id))
            if request.method=='POST':
                i=0
                expected_cost=request.POST.getlist('expected_cost')
                direct_charge_actual_cost=request.POST.getlist('direct_charge_actual_cost')
                cross_charge_actual_cost=request.POST.getlist('cross_charge_actual_cost')

                department_number=request.POST.getlist('department_number')
                person=request.POST.getlist('person')
                cross_charge_actual_cost_specific=request.POST.getlist('cross_charge_actual_cost_specific')
                n=0
                for dept in current_cross_dept:
                    dept.department_number=department_number[n]
                    dept.cross_charge_actual_cost=cross_charge_actual_cost_specific[n]
                    dept.person=person[n]
                    dept.save()
                    n=n+1
                actual_cost=request.POST.getlist('actual_cost')
                for expense in expenses_for_current_quarter:
                    expense.direct_charge_actual_cost=direct_charge_actual_cost[i]
                    expense.cross_charge_actual_cost=cross_charge_actual_cost[i]
                    #expense.department_number=department_number[i]
                    expense.save()
                    expense_for_next_quarter=ExpensesType.objects.get(relates_to=expense)
                    expense_for_next_quarter.estimated_cost=expected_cost[i]
                    expense_for_next_quarter.save()
                    i=i+1
                return HttpResponseRedirect('/financial_info/?id='+project_id)               
        except ValidationError:
            pass   

        #info=financialInfo(request)
        updateTotal(project)
        total_current_direct, total_current_cross=returnTotal(expenses_for_current_quarter)
        totalExp=projectTotalExpenses.objects.get(project=project)
    return render(request,'spending_tool/financial_info.html',{ 'expenses_for_next_quarter':expenses_for_next_quarter,
    															'expenses_for_current_quarter':expenses_for_current_quarter,
    															'expenses_for_previous_quarter':expenses_for_previous_quarter,
    														    'project':project,
                                                                'totalExp':totalExp,
                                                                'year':year,
                                                                'month':month,
                                                                'total_current_direct':total_current_direct,
                                                                'total_current_cross':total_current_cross,
    															'quarter_number':quarter_number,
                                                                'list_for_cross_charge':list_for_cross_charge,
    															'current_cross_dept':current_cross_dept,
                                                                'cross_charge_actual_cost_specific':cross_charge_actual_cost_specific,
                                                                'direct_charge_actual_cost':direct_charge_actual_cost
                                                                })
예제 #10
0
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login as auth_login
from django.contrib.auth import logout as django_logout
from django.template import RequestContext
from datetime import *
from spending_tool.forms import *
from django.contrib.auth.forms import UserCreationForm
from utils import *
from datefunction import return_quarter_year
# Create your views here.
import smtplib
from createReport import createReport
import re

import xlsxwriter
date = return_quarter_year()
quarter_number=date[0]
year=date[1]
'''
def create_tmp_project(request):
    project_id=request.GET.get('id')
    tmProject.objects.create(project_id=project_id)
    return HttpResponseRedirect('/financial_info/')  
'''
def login(request):
    username=password=''
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username =username, password=password)
        if user is not None:
예제 #11
0
def returnExpenses(project):
    cross_charge_actual_cost_specific = direct_charge_actual_cost = []
    date = return_quarter_year()
    quarter_number = date[0]
    year = date[1]
    expenses_for_next_quarter = []
    expenses_for_current_quarter = ExpensesType.objects.filter(
        year=year, quarter_number=quarter_number,
        project=project).order_by('expenses_type')

    if quarter_number == 2 or quarter_number == 3:
        expenses_for_previous_quarter = ExpensesType.objects.filter(
            year=year, quarter_number=quarter_number - 1,
            project=project).order_by('expenses_type')
        #expenses_for_next_quarter= expenses_for_next_quarter.append(ExpensesType.objects.filter(
        #                                                       year=year,
        #                                                       quarter_number=quarter_number+1,
        #                                                       project=project) )
    if quarter_number == 1:
        expenses_for_previous_quarter = ExpensesType.objects.filter(
            year=year - 1, quarter_number=4,
            project=project).order_by('expenses_type')
        #expenses_for_next_quarter.append(ExpensesType.objects.filter(
        #                                                       year=year,
        #                                                       quarter_number=2,
        #                                                       project=project) )
    if quarter_number == 4:
        expenses_for_previous_quarter = ExpensesType.objects.filter(
            year=year, quarter_number=quarter_number - 1,
            project=project).order_by('expenses_type')
        #expenses_for_next_quarter.append(ExpensesType.objects.filter(
        #                                                       year=year+1,
        #                                                       quarter_number=1,
        #                                                       project=project) )

    for expense in expenses_for_current_quarter:
        if len(ExpensesType.objects.filter(relates_to=expense)) == 0:
            if quarter_number == 1 or quarter_number == 2 or quarter_number == 3:
                expenses_for_next_quarter.append(
                    ExpensesType.objects.create(
                        project=project,
                        relates_to=expense,
                        year=year,
                        quarter_number=quarter_number + 1,
                        expenses_type=expense.expenses_type,
                        estimated_cost=0,
                        cross_charge_actual_cost=0,
                        direct_charge_actual_cost=0))
            if quarter_number == 4:
                expenses_for_next_quarter.append(
                    ExpensesType.objects.create(
                        project=project,
                        relates_to=expense,
                        year=year + 1,
                        quarter_number=1,
                        expenses_type=expense.expenses_type,
                        estimated_cost=0,
                        cross_charge_actual_cost=0,
                        direct_charge_actual_cost=0))
        else:
            #if not ExpensesType.objects.get(relates_to=expense) in expenses_for_next_quarter:
            expenses_for_next_quarter.append(
                ExpensesType.objects.get(relates_to=expense))
    return expenses_for_previous_quarter, expenses_for_current_quarter, expenses_for_next_quarter
예제 #12
0
def returnExpenses(project):
    cross_charge_actual_cost_specific=direct_charge_actual_cost=[] 
    date = return_quarter_year()
    quarter_number=date[0]
    year=date[1]
    expenses_for_next_quarter=[]
    expenses_for_current_quarter=ExpensesType.objects.filter(
                                                            year=year,
                                                            quarter_number=quarter_number,
                                                            project=project).order_by('expenses_type')
    
    if quarter_number ==2 or quarter_number==3:
        expenses_for_previous_quarter=ExpensesType.objects.filter(
                                                                year=year,
                                                                quarter_number=quarter_number-1,
                                                                project=project).order_by('expenses_type')
        #expenses_for_next_quarter= expenses_for_next_quarter.append(ExpensesType.objects.filter(
        #                                                       year=year,
        #                                                       quarter_number=quarter_number+1,
        #                                                       project=project) )
    if quarter_number==1:
        expenses_for_previous_quarter=ExpensesType.objects.filter(
                                                                year=year-1,
                                                                quarter_number=4,
                                                                project=project).order_by('expenses_type')
        #expenses_for_next_quarter.append(ExpensesType.objects.filter(
        #                                                       year=year,
        #                                                       quarter_number=2,
        #                                                       project=project) )
    if quarter_number==4:
        expenses_for_previous_quarter=ExpensesType.objects.filter(
                                                                year=year,
                                                                quarter_number=quarter_number-1,
                                                                project=project).order_by('expenses_type')
        #expenses_for_next_quarter.append(ExpensesType.objects.filter(
        #                                                       year=year+1,
        #                                                       quarter_number=1,
        #                                                       project=project) )
        
    for expense in expenses_for_current_quarter:
        if len(ExpensesType.objects.filter(relates_to=expense)) == 0:
            if quarter_number ==1 or quarter_number==2 or quarter_number==3:
                expenses_for_next_quarter.append( ExpensesType.objects.create( project=project,
                                            relates_to=expense,
                                            year=year,
                                            quarter_number=quarter_number+1,
                                            expenses_type=expense.expenses_type,
                                            estimated_cost=0,
                                            cross_charge_actual_cost=0,
                                            direct_charge_actual_cost=0) )
            if quarter_number == 4:
                expenses_for_next_quarter.append( ExpensesType.objects.create( project=project,
                                            relates_to=expense,
                                            year=year+1,
                                            quarter_number=1,
                                            expenses_type=expense.expenses_type,
                                            estimated_cost=0,
                                            cross_charge_actual_cost=0,
                                            direct_charge_actual_cost=0) )
        else:
            #if not ExpensesType.objects.get(relates_to=expense) in expenses_for_next_quarter:
            expenses_for_next_quarter.append(ExpensesType.objects.get(relates_to=expense))
    return expenses_for_previous_quarter, expenses_for_current_quarter, expenses_for_next_quarter