From 57a5e05262c13694abbd093b3b5bb0f5a9a096be Mon Sep 17 00:00:00 2001 From: David de los Santos Boix Date: Mon, 24 Apr 2017 16:32:40 +0200 Subject: [PATCH] Fixed potential bugs from QuantifiedCode --- Metronus-Project/metronus/urls.py | 14 ++++---- .../controllers/departmentController.py | 28 +++++++-------- .../controllers/employeeController.py | 36 +++++++++---------- .../controllers/projectController.py | 20 +++++------ .../projectDepartmentController.py | 4 +-- .../controllers/taskController.py | 28 +++++++-------- 6 files changed, 65 insertions(+), 65 deletions(-) diff --git a/Metronus-Project/metronus/urls.py b/Metronus-Project/metronus/urls.py index d9e6d34..b2443e1 100644 --- a/Metronus-Project/metronus/urls.py +++ b/Metronus-Project/metronus/urls.py @@ -42,11 +42,11 @@ url(r'^$', views.index), url(r'^index.html/$', views.index, name='home'), url(r'^app/$', appController.index, name='app_index'), - + # Department url(r'^department/create$', departmentController.create, name='department_create'), url(r'^department/createAsync$', departmentController.create_async), - url(r'^department/list$', departmentController.list, name='department_list'), + url(r'^department/list$', departmentController.list_departments, name='department_list'), url(r'^department/edit/(?P\w{0,50})/$', departmentController.edit, name='department_edit'), url(r'^department/view/(?P\w{0,50})/$', departmentController.view, name='department_view'), url(r'^department/delete/(?P\w{0,50})/$', departmentController.delete, name='department_delete'), @@ -59,7 +59,7 @@ # Task url(r'^task/create$', taskController.create, name='task_create'), url(r'^task/createAsync$', taskController.create_async), - url(r'^task/list$', taskController.list, name='task_list'), + url(r'^task/list$', taskController.list_tasks, name='task_list'), url(r'^task/view/(?P\w{0,50})/$', taskController.view, name='task_view'), url(r'^task/edit/(?P\w{0,50})/$', taskController.edit, name='task_edit'), url(r'^task/delete/(?P\w{0,50})/$', taskController.delete, name='task_delete'), @@ -68,7 +68,7 @@ url(r'^task/ajaxProfit/(?P\w{0,50})/$', taskController.ajax_profit_per_date, name='task_profit_per_date'), # Project - url(r'^project/list$', projectController.list, name='project_list'), + url(r'^project/list$', projectController.list_projects, name='project_list'), url(r'^project/edit/(?P\w{0,50})/$', projectController.edit, name='project_edit'), url(r'^project/view/(?P\w{0,50})/$', projectController.show, name='project_view'), url(r'^project/delete/(?P\w{0,50})/$', projectController.delete, name='project_delete'), @@ -84,12 +84,12 @@ # Project-Department relationship url(r'^projectdepartment/create$', projectDepartmentController.create, name='projectdepartment_create'), - url(r'^projectdepartment/list$', projectDepartmentController.list, name='projectdepartment_list'), + url(r'^projectdepartment/list$', projectDepartmentController.list_project_department, name='projectdepartment_list'), url(r'^projectdepartment/delete$', projectDepartmentController.delete, name='projectdepartment_delete'), # Employee url(r'^employee/create$', employeeController.create, name='employee_create'), - url(r'^employee/list$', employeeController.list, name='employee_list'), + url(r'^employee/list$', employeeController.list_employees, name='employee_list'), url(r'^employee/view/(?P\w{0,50})/$', employeeController.view, name='employee_view'), url(r'^employee/edit/(?P\w{0,50})/$', employeeController.edit, name='employee_edit'), url(r'^employee/updatePassword/(?P\w{0,50})/$', employeeController.update_password, @@ -132,7 +132,7 @@ name='dashboard_departments_per_project'), url(r'^dashboard/ajaxTasksPerProject$', dashboardController.ajax_tasks_per_project, name='dashboard_tasks_per_project'), - + # Login url(r'^login/$', loginController.login, {'template_name': 'login.html', }, name="login"), url(r'^logout/$', loginController.logout, {'next_page': '/', }, name="logout"), diff --git a/Metronus-Project/metronus_app/controllers/departmentController.py b/Metronus-Project/metronus_app/controllers/departmentController.py index bf9d2c3..844b493 100644 --- a/Metronus-Project/metronus_app/controllers/departmentController.py +++ b/Metronus-Project/metronus_app/controllers/departmentController.py @@ -106,7 +106,7 @@ def create_async(request): return JsonResponse(data) -def list(request): +def list_departments(request): """ returns: @@ -142,7 +142,7 @@ def view(request, department_id): tasks = Task.objects.filter(active=True, projectDepartment_id__department_id__id=department_id) employees = Employee.objects.filter( projectdepartmentemployeerole__projectDepartment_id__department_id=department).distinct() - + return render(request, 'department/department_view.html', {'department': department, 'employees': employees, 'tasks': tasks, 'coordinator': coordinator}) @@ -173,7 +173,7 @@ def edit(request, department_id): # ... # redirect to a new URL: department = get_object_or_404(Department, pk=form.cleaned_data['department_id']) - + dep = find_name(form.cleaned_data['name'], admin) # dep does not exists or it's the same if dep is None or dep.id == department.id: @@ -203,7 +203,7 @@ def delete(request, department_id): deparment_list.html """ department = get_object_or_404(Department, pk=department_id) - + # Check that the current user is an administrator check_department(department, request) delete_department(department) @@ -250,7 +250,7 @@ def ajax_time_per_task(request): # Parámetros obligatorios: # department_id - ID del departamento - # Parámetros opcionales: + # Parámetros opcionales: # start_date - fecha en formato YYYY-MM-DD que indica el inicio de la medición. Por defecto, 30 días antes de la fecha actual. # end_date - fecha en formato YYYY-MM-DD que indica el final de la medición. Por defecto, fecha actual. # offset - desplazamiento (huso) horario en formato +/-HH:MM - Por defecto +02:00 @@ -293,7 +293,7 @@ def ajax_time_per_task(request): task_id=task, workDate__range=[start_date, end_date]).aggregate(Sum('duration'))["duration__sum"] - if time_total is None: + if time_total is None: time_total = 0 data['names'].append(task.name) @@ -311,7 +311,7 @@ def ajax_profit_per_date(request, department_id): # Parámetro obligatorio: ninguno - # Parámetros opcionales: + # Parámetros opcionales: # start_date - fecha en formato YYYY-MM-DD que indica el inicio de la medición. Por defecto, 30 días antes de la fecha actual. # end_date - fecha en formato YYYY-MM-DD que indica el final de la medición. Por defecto, fecha actual. # offset - desplazamiento (huso) horario en formato +/-HH:MM - Por defecto +00:00 @@ -320,12 +320,12 @@ def ajax_profit_per_date(request, department_id): #Ejemplo #/department/ajaxAcumProfit/1/ - + #devuelve lo siguiente - #{"acumExpenses": [0, 1457.18015695298, 3071.32603956358, 4438.9463044226895, 6465.819587171869, 7912.658013249849, 9791.46399488711, 11615.32872003681, 13494.726436052111, 15102.72092592163, 16718.442225021892, 18327.93613617256, 20841.87940297534, 22953.949544558982, 24314.625169466122, 25683.231076691303, 27287.16055422502, 28760.84364198999, 31104.25163724206, 32808.89759982555, 34747.27999087272, 36150.9847742294, 37523.6098087571, 38600.05927001698, 40953.76583717958, 42469.88703139726, 44081.49130458021, 45420.3135021882, 47945.57927018715, 49368.262834629466, 51133.932803674485], - "acumIncome": [0, 155861.848663544, 262457.90948135697, 396454.85575838294, 572637.4741922909, 703418.0032829699, 889130.2419483919, 1057821.248373874, 1259349.275922576, 1393310.956579081, 1539441.608896949, 1700420.3827038072, 1955067.034572835, 2187486.6539142523, 2300530.309442004, 2429378.038836404, 2615789.2939997134, 2742614.2371285204, 3004214.3219032744, 3205025.4834073624, 3363963.7766520614, 3552325.908039063, 3718850.184141958, 3833661.86021891, 4044009.6991582112, 4159278.365569177, 4285423.634163346, 4417334.086840815, 4692230.750316469, 4819759.243153938, 4997733.5628708275], - "dates": ["2017-03-21", "2017-03-22", "2017-03-23", "2017-03-24", "2017-03-25", "2017-03-26", "2017-03-27", "2017-03-28", "2017-03-29", "2017-03-30", "2017-03-31", "2017-04-01", "2017-04-02", "2017-04-03", "2017-04-04", "2017-04-05", "2017-04-06", "2017-04-07", "2017-04-08", "2017-04-09", "2017-04-10", "2017-04-11", "2017-04-12", "2017-04-13", "2017-04-14", "2017-04-15", "2017-04-16", "2017-04-17", "2017-04-18", "2017-04-19", "2017-04-20"], - "income": [0, 155861.848663544, 106596.060817813, 133996.946277026, 176182.618433908, 130780.529090679, 185712.238665422, 168691.006425482, 201528.027548702, 133961.680656505, 146130.652317868, 160978.773806858, 254646.651869028, 232419.619341417, 113043.655527752, 128847.7293944, 186411.255163309, 126824.943128807, 261600.084774754, 200811.161504088, 158938.293244699, 188362.131387002, 166524.276102895, 114811.676076952, 210347.838939301, 115268.666410966, 126145.268594169, 131910.452677469, 274896.663475654, 127528.492837469, 177974.319716889], + #{"acumExpenses": [0, 1457.18015695298, 3071.32603956358, 4438.9463044226895, 6465.819587171869, 7912.658013249849, 9791.46399488711, 11615.32872003681, 13494.726436052111, 15102.72092592163, 16718.442225021892, 18327.93613617256, 20841.87940297534, 22953.949544558982, 24314.625169466122, 25683.231076691303, 27287.16055422502, 28760.84364198999, 31104.25163724206, 32808.89759982555, 34747.27999087272, 36150.9847742294, 37523.6098087571, 38600.05927001698, 40953.76583717958, 42469.88703139726, 44081.49130458021, 45420.3135021882, 47945.57927018715, 49368.262834629466, 51133.932803674485], + "acumIncome": [0, 155861.848663544, 262457.90948135697, 396454.85575838294, 572637.4741922909, 703418.0032829699, 889130.2419483919, 1057821.248373874, 1259349.275922576, 1393310.956579081, 1539441.608896949, 1700420.3827038072, 1955067.034572835, 2187486.6539142523, 2300530.309442004, 2429378.038836404, 2615789.2939997134, 2742614.2371285204, 3004214.3219032744, 3205025.4834073624, 3363963.7766520614, 3552325.908039063, 3718850.184141958, 3833661.86021891, 4044009.6991582112, 4159278.365569177, 4285423.634163346, 4417334.086840815, 4692230.750316469, 4819759.243153938, 4997733.5628708275], + "dates": ["2017-03-21", "2017-03-22", "2017-03-23", "2017-03-24", "2017-03-25", "2017-03-26", "2017-03-27", "2017-03-28", "2017-03-29", "2017-03-30", "2017-03-31", "2017-04-01", "2017-04-02", "2017-04-03", "2017-04-04", "2017-04-05", "2017-04-06", "2017-04-07", "2017-04-08", "2017-04-09", "2017-04-10", "2017-04-11", "2017-04-12", "2017-04-13", "2017-04-14", "2017-04-15", "2017-04-16", "2017-04-17", "2017-04-18", "2017-04-19", "2017-04-20"], + "income": [0, 155861.848663544, 106596.060817813, 133996.946277026, 176182.618433908, 130780.529090679, 185712.238665422, 168691.006425482, 201528.027548702, 133961.680656505, 146130.652317868, 160978.773806858, 254646.651869028, 232419.619341417, 113043.655527752, 128847.7293944, 186411.255163309, 126824.943128807, 261600.084774754, 200811.161504088, 158938.293244699, 188362.131387002, 166524.276102895, 114811.676076952, 210347.838939301, 115268.666410966, 126145.268594169, 131910.452677469, 274896.663475654, 127528.492837469, 177974.319716889], "expenses": [0, 1457.18015695298, 1614.1458826106, 1367.62026485911, 2026.87328274918, 1446.83842607798, 1878.80598163726, 1823.8647251497, 1879.3977160153, 1607.99448986952, 1615.72129910026, 1609.49391115067, 2513.94326680278, 2112.07014158364, 1360.67562490714, 1368.60590722518, 1603.92947753372, 1473.68308776497, 2343.40799525207, 1704.64596258349, 1938.38239104717, 1403.70478335668, 1372.6250345277, 1076.44946125988, 2353.7065671626, 1516.12119421768, 1611.60427318295, 1338.82219760799, 2525.26576799895, 1422.68356444232, 1765.66996904502]} "expected_productivity": [9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 4.0, 4.0, 2.0, 2.0, 2.0]}} """ @@ -373,7 +373,7 @@ def ajax_profit_per_date(request, department_id): expenses = expenses if expenses is not None else 0 income = logs.aggregate(total_income=Sum(F("task_id__price_per_unit")*F("produced_units")))["total_income"] income = income if income is not None else 0 - + data['expenses'].append(expenses) data['income'].append(income) if index == 0: @@ -527,7 +527,7 @@ def get_list_for_role(request): else: departments = Department.objects.filter(company_id=actor.company_id, active=True) - return departments + return departments def get_coordinator(department): diff --git a/Metronus-Project/metronus_app/controllers/employeeController.py b/Metronus-Project/metronus_app/controllers/employeeController.py index 69af6ad..caaf6b0 100644 --- a/Metronus-Project/metronus_app/controllers/employeeController.py +++ b/Metronus-Project/metronus_app/controllers/employeeController.py @@ -41,7 +41,7 @@ def create(request): formNotValid: el formulario contiene errores priceNotValid: el precio debe ser mayor que 0 emailNotUnique:si el correo no es úinco - + template: employee_register.html """ @@ -106,7 +106,7 @@ def create(request): raise PermissionDenied -def list(request): +def list_employees(request): """ parameters/returns: employees: lista de objetos employee a los que tiene acceso el administrador (los que están en su empresa) @@ -184,7 +184,7 @@ def edit(request, username): elif request.method == "POST": # Process the received form - + form = EmployeeEditForm(request.POST) if form.is_valid(): errors = [] @@ -197,7 +197,7 @@ def edit(request, username): employee.phone = form.cleaned_data["phone"] # New log if the salary has changed new_log = employee.price_per_hour != form.cleaned_data["price_per_hour"] - + employee.price_per_hour = form.cleaned_data["price_per_hour"] # Update user data @@ -208,7 +208,7 @@ def edit(request, username): user.save() employee.save() - + # New log if the salary has changed if new_log: EmployeeLog.objects.create(employee_id=employee, event="C", @@ -272,7 +272,7 @@ def update_password(request, username): else: # Invalid form return JsonResponse({'success': False, 'errors': ['employeeCreation_formNotValid']}) - + def delete(request, username): """ @@ -303,12 +303,12 @@ def delete(request, username): def ajax_productivity_per_task(request, username): """ # url = employee/ajax_productivity_per_task/ - # Devuelve un objeto cuyas claves son las ID de los proyectos y sus valores un objeto + # Devuelve un objeto cuyas claves son las ID de los proyectos y sus valores un objeto #{'name': ..., 'total_productivity': X,'expected_productivity':Y} (X e Y en unidades goal_description/hora) - + #Ejemplo: #/employee/ajax_productivity_per_task/JoseGavilan - + #devuelve lo siguiente #{"3": {"total_productivity": 0.7125, "expected_productivity": 2.0, "name": "Hacer cosas de front"}} """ @@ -329,7 +329,7 @@ def ajax_productivity_per_task(request, username): data = {} # Save productivity for each task for task in tasks: - + total_produced_units = task.total_produced_units total_duration = task.total_duration if total_duration is None or total_produced_units is None or total_duration == 0: @@ -356,7 +356,7 @@ def ajax_productivity_per_task_and_date(request, username): # Parámetro obligatorio: # task_id: el id de la tarea en cuestión - # Parámetros opcionales: + # Parámetros opcionales: # start_date - fecha en formato YYYY-MM-DD que indica el inicio de la medición. Por defecto, 30 días antes de la fecha actual. # end_date - fecha en formato YYYY-MM-DD que indica el final de la medición. Por defecto, fecha actual. # offset - desplazamiento (huso) horario en formato +/-HH:MM - Por defecto +00:00 @@ -365,13 +365,13 @@ def ajax_productivity_per_task_and_date(request, username): #Ejemplo #/employee/ajax_productivity_per_task_and_date/JoseGavilan?task_id=3&start_date=2017-02-05&end_date=2017-02-16 - + #devuelve lo siguiente - #{"dates": - # ["2017-02-05", "2017-02-06", "2017-02-07", "2017-02-08", "2017-02-09", "2017-02-10", "2017-02-11", "2017-02-12", "2017-02-13", "2017-02-14", "2017-02-15", "2017-02-16"], - #"task": {"name": "Hacer cosas de front", - # "real_productivity": [0, 0, 0, 0, 0, 0, 0, 1.2, 0, 0.225, 0, 0], - # "task_id": 3, + #{"dates": + # ["2017-02-05", "2017-02-06", "2017-02-07", "2017-02-08", "2017-02-09", "2017-02-10", "2017-02-11", "2017-02-12", "2017-02-13", "2017-02-14", "2017-02-15", "2017-02-16"], + #"task": {"name": "Hacer cosas de front", + # "real_productivity": [0, 0, 0, 0, 0, 0, 0, 1.2, 0, 0.225, 0, 0], + # "task_id": 3, # "expected_productivity": [9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 4.0, 4.0, 2.0, 2.0, 2.0]}} """ @@ -443,7 +443,7 @@ def ajax_productivity_per_task_and_date(request, username): else: # Duration is in minutes, so we multiply by 60 (duration is in the denominator) total_productivity = 60*total_produced_units/total_duration - + # Find the registry date of production goal evolution which is closest to the date expected_productivity = GoalEvolution.objects.filter(task_id_id=task.id, registryDate__gte=logDate).first() diff --git a/Metronus-Project/metronus_app/controllers/projectController.py b/Metronus-Project/metronus_app/controllers/projectController.py index 2e5ac7f..5154959 100644 --- a/Metronus-Project/metronus_app/controllers/projectController.py +++ b/Metronus-Project/metronus_app/controllers/projectController.py @@ -109,7 +109,7 @@ def create_async(request): return JsonResponse(data) -def list(request): +def list_projects(request): """ returns: projectos: lista de proyectos de la compañía logeada @@ -281,7 +281,7 @@ def ajax_time_per_department(request): # Parámetros obligatorios: # project_id - ID del proyecto - # Parámetros opcionales: + # Parámetros opcionales: # start_date - fecha en formato YYYY-MM-DD que indica el inicio de la medición. Por defecto, 30 días antes de la fecha actual. # end_date - fecha en formato YYYY-MM-DD que indica el final de la medición. Por defecto, fecha actual. # offset - desplazamiento (huso) horario en formato +/-HH:MM - Por defecto +00:00 @@ -326,7 +326,7 @@ def ajax_time_per_department(request): task_id__projectDepartment_id__project_id=project, task_id__projectDepartment_id__department_id=dpmt, workDate__range=[start_date, end_date]).aggregate(Sum('duration'))["duration__sum"] - if time_total is None: + if time_total is None: time_total = 0 data['names'].append(dpmt.name) @@ -344,7 +344,7 @@ def ajax_profit_per_date(request, project_id): # Parámetro obligatorio: ninguno - # Parámetros opcionales: + # Parámetros opcionales: # start_date - fecha en formato YYYY-MM-DD que indica el inicio de la medición. Por defecto, 30 días antes de la fecha actual. # end_date - fecha en formato YYYY-MM-DD que indica el final de la medición. Por defecto, fecha actual. # offset - desplazamiento (huso) horario en formato +/-HH:MM - Por defecto +00:00 @@ -353,12 +353,12 @@ def ajax_profit_per_date(request, project_id): #Ejemplo #/project/ajaxAcumProfit/1/ - + #devuelve lo siguiente - #{"acumExpenses": [0, 1457.18015695298, 3071.32603956358, 4438.9463044226895, 6465.819587171869, 7912.658013249849, 9791.46399488711, 11615.32872003681, 13494.726436052111, 15102.72092592163, 16718.442225021892, 18327.93613617256, 20841.87940297534, 22953.949544558982, 24314.625169466122, 25683.231076691303, 27287.16055422502, 28760.84364198999, 31104.25163724206, 32808.89759982555, 34747.27999087272, 36150.9847742294, 37523.6098087571, 38600.05927001698, 40953.76583717958, 42469.88703139726, 44081.49130458021, 45420.3135021882, 47945.57927018715, 49368.262834629466, 51133.932803674485], - "acumIncome": [0, 155861.848663544, 262457.90948135697, 396454.85575838294, 572637.4741922909, 703418.0032829699, 889130.2419483919, 1057821.248373874, 1259349.275922576, 1393310.956579081, 1539441.608896949, 1700420.3827038072, 1955067.034572835, 2187486.6539142523, 2300530.309442004, 2429378.038836404, 2615789.2939997134, 2742614.2371285204, 3004214.3219032744, 3205025.4834073624, 3363963.7766520614, 3552325.908039063, 3718850.184141958, 3833661.86021891, 4044009.6991582112, 4159278.365569177, 4285423.634163346, 4417334.086840815, 4692230.750316469, 4819759.243153938, 4997733.5628708275], - "dates": ["2017-03-21", "2017-03-22", "2017-03-23", "2017-03-24", "2017-03-25", "2017-03-26", "2017-03-27", "2017-03-28", "2017-03-29", "2017-03-30", "2017-03-31", "2017-04-01", "2017-04-02", "2017-04-03", "2017-04-04", "2017-04-05", "2017-04-06", "2017-04-07", "2017-04-08", "2017-04-09", "2017-04-10", "2017-04-11", "2017-04-12", "2017-04-13", "2017-04-14", "2017-04-15", "2017-04-16", "2017-04-17", "2017-04-18", "2017-04-19", "2017-04-20"], - "income": [0, 155861.848663544, 106596.060817813, 133996.946277026, 176182.618433908, 130780.529090679, 185712.238665422, 168691.006425482, 201528.027548702, 133961.680656505, 146130.652317868, 160978.773806858, 254646.651869028, 232419.619341417, 113043.655527752, 128847.7293944, 186411.255163309, 126824.943128807, 261600.084774754, 200811.161504088, 158938.293244699, 188362.131387002, 166524.276102895, 114811.676076952, 210347.838939301, 115268.666410966, 126145.268594169, 131910.452677469, 274896.663475654, 127528.492837469, 177974.319716889], + #{"acumExpenses": [0, 1457.18015695298, 3071.32603956358, 4438.9463044226895, 6465.819587171869, 7912.658013249849, 9791.46399488711, 11615.32872003681, 13494.726436052111, 15102.72092592163, 16718.442225021892, 18327.93613617256, 20841.87940297534, 22953.949544558982, 24314.625169466122, 25683.231076691303, 27287.16055422502, 28760.84364198999, 31104.25163724206, 32808.89759982555, 34747.27999087272, 36150.9847742294, 37523.6098087571, 38600.05927001698, 40953.76583717958, 42469.88703139726, 44081.49130458021, 45420.3135021882, 47945.57927018715, 49368.262834629466, 51133.932803674485], + "acumIncome": [0, 155861.848663544, 262457.90948135697, 396454.85575838294, 572637.4741922909, 703418.0032829699, 889130.2419483919, 1057821.248373874, 1259349.275922576, 1393310.956579081, 1539441.608896949, 1700420.3827038072, 1955067.034572835, 2187486.6539142523, 2300530.309442004, 2429378.038836404, 2615789.2939997134, 2742614.2371285204, 3004214.3219032744, 3205025.4834073624, 3363963.7766520614, 3552325.908039063, 3718850.184141958, 3833661.86021891, 4044009.6991582112, 4159278.365569177, 4285423.634163346, 4417334.086840815, 4692230.750316469, 4819759.243153938, 4997733.5628708275], + "dates": ["2017-03-21", "2017-03-22", "2017-03-23", "2017-03-24", "2017-03-25", "2017-03-26", "2017-03-27", "2017-03-28", "2017-03-29", "2017-03-30", "2017-03-31", "2017-04-01", "2017-04-02", "2017-04-03", "2017-04-04", "2017-04-05", "2017-04-06", "2017-04-07", "2017-04-08", "2017-04-09", "2017-04-10", "2017-04-11", "2017-04-12", "2017-04-13", "2017-04-14", "2017-04-15", "2017-04-16", "2017-04-17", "2017-04-18", "2017-04-19", "2017-04-20"], + "income": [0, 155861.848663544, 106596.060817813, 133996.946277026, 176182.618433908, 130780.529090679, 185712.238665422, 168691.006425482, 201528.027548702, 133961.680656505, 146130.652317868, 160978.773806858, 254646.651869028, 232419.619341417, 113043.655527752, 128847.7293944, 186411.255163309, 126824.943128807, 261600.084774754, 200811.161504088, 158938.293244699, 188362.131387002, 166524.276102895, 114811.676076952, 210347.838939301, 115268.666410966, 126145.268594169, 131910.452677469, 274896.663475654, 127528.492837469, 177974.319716889], "expenses": [0, 1457.18015695298, 1614.1458826106, 1367.62026485911, 2026.87328274918, 1446.83842607798, 1878.80598163726, 1823.8647251497, 1879.3977160153, 1607.99448986952, 1615.72129910026, 1609.49391115067, 2513.94326680278, 2112.07014158364, 1360.67562490714, 1368.60590722518, 1603.92947753372, 1473.68308776497, 2343.40799525207, 1704.64596258349, 1938.38239104717, 1403.70478335668, 1372.6250345277, 1076.44946125988, 2353.7065671626, 1516.12119421768, 1611.60427318295, 1338.82219760799, 2525.26576799895, 1422.68356444232, 1765.66996904502]} "expected_productivity": [9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 4.0, 4.0, 2.0, 2.0, 2.0]}} """ @@ -405,7 +405,7 @@ def ajax_profit_per_date(request, project_id): expenses = expenses if expenses is not None else 0 income = logs.aggregate(total_income=Sum(F("task_id__price_per_unit")*F("produced_units")))["total_income"] income = income if income is not None else 0 - + data['expenses'].append(expenses) data['income'].append(income) if index == 0: diff --git a/Metronus-Project/metronus_app/controllers/projectDepartmentController.py b/Metronus-Project/metronus_app/controllers/projectDepartmentController.py index 16fc80f..34fbcdb 100644 --- a/Metronus-Project/metronus_app/controllers/projectDepartmentController.py +++ b/Metronus-Project/metronus_app/controllers/projectDepartmentController.py @@ -57,7 +57,7 @@ def delete(request): return HttpResponseRedirect('/projectdepartment/list/') -def list(request): +def list_project_department(request): """ parameters: project_id or department_id, both optional. If it receives project_id, it will return all projectDepartments from that project @@ -65,7 +65,7 @@ def list(request): If it receives none, it will return all projectDeparments from the logged company returns: - projectDepartments: lista de relaciones proyecto-departamento de la compañía logeada, según el parámetro pasado. + projectDepartments: lista de relaciones proyecto-departamento de la compañía logeada, según el parámetro pasado. template: projectdepartment_list.html diff --git a/Metronus-Project/metronus_app/controllers/taskController.py b/Metronus-Project/metronus_app/controllers/taskController.py index 410cb25..1b9c605 100644 --- a/Metronus-Project/metronus_app/controllers/taskController.py +++ b/Metronus-Project/metronus_app/controllers/taskController.py @@ -54,7 +54,7 @@ def create(request): errors.append('task_creation_invalid_goal') if not check_price(form): errors.append('task_creation_invalid_price') - + pname = form.cleaned_data['name'] ppro = form.cleaned_data['project_id'] pdep = form.cleaned_data['department_id'] @@ -77,7 +77,7 @@ def create(request): actor = check_task(pro, request) create_task(form, pdtuple, actor) return HttpResponseRedirect('/task/list') - + # if a GET (or any other method) we'll create a blank form else: form = TaskForm() @@ -98,7 +98,7 @@ def create_async(request): invalid_goal:si el objetivo es incorrecto(está uno en blanco y otro no) project_department_not_related: si no están relacionados projectdepartment invalid_price: si el precio no esta puesto acorde al objetivo de producción (o no es positivo) - + success:si tuvo éxito la operación template: @@ -106,7 +106,7 @@ def create_async(request): """ # Check that the user is logged in actor = check_task(None, request) - + errors = [] data = { 'success': True @@ -123,7 +123,7 @@ def create_async(request): errors.append('task_creation_invalid_goal') if not check_price(form): errors.append('task_creation_invalid_price') - + pname = form.cleaned_data['name'] ppro = form.cleaned_data['project_id'] pdep = form.cleaned_data['department_id'] @@ -177,7 +177,7 @@ def form_departments(request): return HttpResponse(response, content_type='application/json') -def list(request): +def list_tasks(request): """ returns: tasks: lista de tareas del actor logeado @@ -208,7 +208,7 @@ def view(request,task_id): check_task(task, request) goal_evolution = GoalEvolution.objects.filter(task_id=task.id) employees = Employee.objects.filter(projectdepartmentemployeerole__projectDepartment_id__task=task.id).distinct() - + return render(request, "task_view.html", {"task": task, "goal_evolution": goal_evolution, "employees": employees}) @@ -218,13 +218,13 @@ def edit(request, task_id): form: el formulario con los datos de la tarea departments:eso projects:eso - + errors: ver create repeated_name: si el nombre es repetido invalid_goal:si el objetivo es incorrecto(está uno en blanco y otro no) project_department_not_related: si no están relacionados projectdepartment invalid_price: si el precio no esta puesto acorde al objetivo de producción (o no es positivo) - + template: task_form.html """ @@ -232,7 +232,7 @@ def edit(request, task_id): actor = check_task(None, request) errors = [] - + # if this is a POST request we need to process the form data if request.method == 'POST': # create a form instance and populate it with data from the request: @@ -253,7 +253,7 @@ def edit(request, task_id): # pro does not exists or it's the same if pro is not None and pro.id != task.id and pro.active: errors.append('task_creation_repeated_name') - + if not errors: update_task(task, form, actor) return HttpResponseRedirect('/task/list') @@ -303,7 +303,7 @@ def ajax_productivity_per_task(request): # Parámetros obligatorios: # task_id - ID del task - # Parámetros opcionales: + # Parámetros opcionales: # start_date - fecha en formato YYYY-MM-DD que indica el inicio de la medición. Por defecto, 30 días antes de la fecha actual. # end_date - fecha en formato YYYY-MM-DD que indica el final de la medición. Por defecto, fecha actual. # offset - desplazamiento (huso) horario en formato +/-HH:MM - Por defecto +00:00 @@ -319,7 +319,7 @@ def ajax_productivity_per_task(request): Actor.objects.get(user=request.user) except ObjectDoesNotExist: raise PermissionDenied - + if "task_id" not in request.GET: return HttpResponseBadRequest() @@ -511,7 +511,7 @@ def check_goal(form): def check_price(form): """ This returns true if the price field is valid - This means only per_unit or per_hour must be filled + This means only per_unit or per_hour must be filled and only if there is a valid goal description for the first field, or no goal for the second """ # fgoal = form.cleaned_data['production_goal']