2021-04-19 11:19:28 +00:00
|
|
|
from __future__ import unicode_literals
|
|
|
|
import unittest
|
|
|
|
import frappe
|
|
|
|
from frappe.utils import getdate, nowdate
|
|
|
|
from erpnext.hr.doctype.employee.test_employee import make_employee
|
|
|
|
from erpnext.projects.doctype.timesheet.test_timesheet import make_salary_structure_for_timesheet, make_timesheet
|
|
|
|
from erpnext.projects.doctype.timesheet.timesheet import make_salary_slip, make_sales_invoice
|
|
|
|
from erpnext.projects.report.project_profitability.project_profitability import execute
|
|
|
|
|
|
|
|
class TestProjectProfitability(unittest.TestCase):
|
|
|
|
@classmethod
|
|
|
|
def setUp(self):
|
|
|
|
emp = make_employee('test_employee_9@salary.com', company='_Test Company')
|
|
|
|
if not frappe.db.exists('Salary Component', 'Timesheet Component'):
|
|
|
|
frappe.get_doc({'doctype': 'Salary Component', 'salary_component': 'Timesheet Component'}).insert()
|
|
|
|
make_salary_structure_for_timesheet(emp, company='_Test Company')
|
|
|
|
self.timesheet = make_timesheet(emp, simulate = True, billable=1)
|
|
|
|
self.salary_slip = make_salary_slip(self.timesheet.name)
|
|
|
|
self.salary_slip.submit()
|
|
|
|
self.sales_invoice = make_sales_invoice(self.timesheet.name, '_Test Item', '_Test Customer')
|
|
|
|
self.sales_invoice.due_date = nowdate()
|
|
|
|
self.sales_invoice.submit()
|
|
|
|
|
|
|
|
def test_project_profitability(self):
|
|
|
|
filters = {
|
|
|
|
'company': '_Test Company',
|
|
|
|
'start_date': getdate(),
|
|
|
|
'end_date': getdate()
|
|
|
|
}
|
|
|
|
|
|
|
|
report = execute(filters)
|
|
|
|
expected_data = [
|
|
|
|
{
|
|
|
|
'customer_name': '_Test Customer',
|
2021-04-20 12:23:41 +00:00
|
|
|
'employee_name': 'test_employee_9@salary.com',
|
|
|
|
'base_grand_total': 100.0,
|
|
|
|
'base_gross_pay': 78100.0,
|
2021-04-19 11:19:28 +00:00
|
|
|
'profit': -19425.0,
|
|
|
|
'total_billed_hours': 2.0,
|
|
|
|
'utilization': 0.25,
|
|
|
|
'fractional_cost': 19525.0,
|
|
|
|
'total_working_days': 1.0
|
|
|
|
}
|
|
|
|
]
|
2021-04-20 12:23:41 +00:00
|
|
|
for key in ['customer_name','employee_name','base_grand_total','base_gross_pay','profit','total_billed_hours','utilization','fractional_cost','total_working_days']:
|
2021-04-19 11:19:28 +00:00
|
|
|
self.assertEqual(expected_data[0].get(key), report[1][0].get(key))
|
|
|
|
|
|
|
|
def tearDown(self):
|
2021-04-20 12:23:41 +00:00
|
|
|
frappe.get_doc("Sales Invoice", self.sales_invoice.name).cancel()
|
|
|
|
frappe.get_doc("Salary Slip", self.salary_slip.name).cancel()
|
|
|
|
frappe.get_doc("Timesheet", self.timesheet.name).cancel()
|