2021-03-25 14:39:05 +05:30

51 lines
2.0 KiB
Python

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.profitability.profitability import execute
class TestProfitability(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_profitability(self):
filters = {
'company': '_Test Company',
'start_date': getdate(),
'end_date': getdate()
}
report = execute(filters)
expected_data = [
{
"customer_name": "_Test Customer",
"title": "test_employee_9@salary.com",
"grand_total": 100.0,
"gross_pay": 78100.0,
"profit": -19425.0,
"total_billed_hours": 2.0,
"utilization": 0.25,
"fractional_cost": 19525.0,
"total_working_days": 1.0
}
]
for key in ["customer_name","title","grand_total","gross_pay","profit","total_billed_hours","utilization","fractional_cost","total_working_days"]:
self.assertEqual(expected_data[0].get(key), report[1][0].get(key))
def tearDown(self):
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()