fixes in Expense Claim

This commit is contained in:
Neil Trini Lasrado 2015-04-08 17:00:31 +05:30
parent 7f9ea3bf6a
commit 2679b247b3
4 changed files with 42 additions and 18 deletions

View File

@ -19,7 +19,7 @@ class ExpenseClaim(Document):
def validate(self): def validate(self):
validate_fiscal_year(self.posting_date, self.fiscal_year, _("Posting Date"), self) validate_fiscal_year(self.posting_date, self.fiscal_year, _("Posting Date"), self)
self.validate_exp_details() self.validate_exp_details()
self.validate_cost() self.calculate_total_amount()
self.validate_sanctioned_amount() self.validate_sanctioned_amount()
self.validate_expense_approver() self.validate_expense_approver()
self.validate_task() self.validate_task()
@ -32,17 +32,15 @@ class ExpenseClaim(Document):
self.update_task() self.update_task()
def on_cancel(self): def on_cancel(self):
if self.project: if self.task:
self.update_task() self.update_task()
def validate_cost(self): def calculate_total_amount(self):
total_claimed_amount = 0 self.total_claimed_amount = 0
total_sanctioned_amount = 0 self.total_sanctioned_amount = 0
for d in self.expenses: for d in self.expenses:
total_claimed_amount += d.claim_amount self.total_claimed_amount += d.claim_amount
total_sanctioned_amount += d.sanctioned_amount self.total_sanctioned_amount += d.sanctioned_amount
self.total_claimed_amount = total_claimed_amount
self.total_sanctioned_amount = total_sanctioned_amount
def validate_exp_details(self): def validate_exp_details(self):
if not self.get('expenses'): if not self.get('expenses'):
@ -54,17 +52,15 @@ class ExpenseClaim(Document):
.format(get_fullname(self.exp_approver), self.exp_approver), InvalidExpenseApproverError) .format(get_fullname(self.exp_approver), self.exp_approver), InvalidExpenseApproverError)
def update_task(self): def update_task(self):
expense_amount = frappe.db.sql("""select sum(total_sanctioned_amount) from `tabExpense Claim`
where project = %s and task = %s and approval_status = "Approved" and docstatus=1""",(self.project, self.task))
task = frappe.get_doc("Task", self.task) task = frappe.get_doc("Task", self.task)
task.total_expense_claim = expense_amount task.update_total_expense_claim()
task.save() task.save()
def validate_task(self): def validate_task(self):
if self.project and not self.task: if self.project and not self.task:
frappe.throw(_("Task is Mandatory if Time Log is against a project")) frappe.throw(_("Task is mandatory if Expense Claim is against a Project"))
def validate_sanctioned_amount(self): def validate_sanctioned_amount(self):
if self.total_sanctioned_amount > self.total_claimed_amount: for d in self.expenses:
frappe.throw(_("Total sanctioned amount cannot be greater than total claimed amount.")) if d.sanctioned_amount > d.claim_amount:
frappe.throw(_("Sanctioned Amount cannot be greater than Claim Amount in Row {0}.").format(d.idx))

View File

@ -8,7 +8,7 @@ import unittest
test_records = frappe.get_test_records('Expense Claim') test_records = frappe.get_test_records('Expense Claim')
class TestExpenseClaim(unittest.TestCase): class TestExpenseClaim(unittest.TestCase):
def test_project_costing(self): def test_total_expense_claim_for_project(self):
frappe.db.sql("delete from `tabTask`") frappe.db.sql("delete from `tabTask`")
frappe.db.sql("delete from `tabProject`") frappe.db.sql("delete from `tabProject`")

View File

@ -15,6 +15,12 @@
"reqd": 0, "reqd": 0,
"width": "150px" "width": "150px"
}, },
{
"fieldname": "column_break_2",
"fieldtype": "Column Break",
"permlevel": 0,
"precision": ""
},
{ {
"fieldname": "expense_type", "fieldname": "expense_type",
"fieldtype": "Link", "fieldtype": "Link",
@ -28,6 +34,12 @@
"reqd": 1, "reqd": 1,
"width": "150px" "width": "150px"
}, },
{
"fieldname": "section_break_4",
"fieldtype": "Section Break",
"permlevel": 0,
"precision": ""
},
{ {
"fieldname": "description", "fieldname": "description",
"fieldtype": "Small Text", "fieldtype": "Small Text",
@ -39,6 +51,12 @@
"print_width": "300px", "print_width": "300px",
"width": "300px" "width": "300px"
}, },
{
"fieldname": "section_break_6",
"fieldtype": "Section Break",
"permlevel": 0,
"precision": ""
},
{ {
"fieldname": "claim_amount", "fieldname": "claim_amount",
"fieldtype": "Currency", "fieldtype": "Currency",
@ -52,6 +70,12 @@
"reqd": 1, "reqd": 1,
"width": "150px" "width": "150px"
}, },
{
"fieldname": "column_break_8",
"fieldtype": "Column Break",
"permlevel": 0,
"precision": ""
},
{ {
"allow_on_submit": 0, "allow_on_submit": 0,
"fieldname": "sanctioned_amount", "fieldname": "sanctioned_amount",
@ -69,7 +93,7 @@
], ],
"idx": 1, "idx": 1,
"istable": 1, "istable": 1,
"modified": "2014-05-09 02:16:38.529082", "modified": "2015-04-08 06:18:47.539134",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "HR", "module": "HR",
"name": "Expense Claim Detail", "name": "Expense Claim Detail",

View File

@ -45,6 +45,10 @@ class Task(Document):
project = frappe.get_doc("Project", self.project) project = frappe.get_doc("Project", self.project)
project.run_method("update_percent_complete") project.run_method("update_percent_complete")
def update_total_expense_claim(self):
self.total_expense_claim = frappe.db.sql("""select sum(total_sanctioned_amount) from `tabExpense Claim`
where project = %s and task = %s and approval_status = "Approved" and docstatus=1""",(self.project, self.name))
def update_project(self): def update_project(self):
if self.project: if self.project:
total_activity_cost = frappe.db.sql("""select sum(actual_cost) from `tabTask` total_activity_cost = frappe.db.sql("""select sum(actual_cost) from `tabTask`