commit
ff68bf2609
@ -175,16 +175,15 @@ class GrossProfitGenerator(object):
|
|||||||
|
|
||||||
else:
|
else:
|
||||||
if row.update_stock or row.dn_detail:
|
if row.update_stock or row.dn_detail:
|
||||||
|
parenttype, parent, item_row = row.parenttype, row.parent, row.item_row
|
||||||
if row.dn_detail:
|
if row.dn_detail:
|
||||||
row.parenttype = "Delivery Note"
|
parenttype, parent, item_row = "Delivery Note", row.delivery_note, row.dn_detail
|
||||||
row.parent = row.delivery_note
|
|
||||||
row.item_row = row.dn_detail
|
|
||||||
|
|
||||||
my_sle = self.sle.get((item_code, row.warehouse))
|
my_sle = self.sle.get((item_code, row.warehouse))
|
||||||
for i, sle in enumerate(my_sle):
|
for i, sle in enumerate(my_sle):
|
||||||
# find the stock valution rate from stock ledger entry
|
# find the stock valution rate from stock ledger entry
|
||||||
if sle.voucher_type == row.parenttype and row.parent == sle.voucher_no and \
|
if sle.voucher_type == parenttype and parent == sle.voucher_no and \
|
||||||
sle.voucher_detail_no == row.item_row:
|
sle.voucher_detail_no == item_row:
|
||||||
previous_stock_value = len(my_sle) > i+1 and \
|
previous_stock_value = len(my_sle) > i+1 and \
|
||||||
flt(my_sle[i+1].stock_value) or 0.0
|
flt(my_sle[i+1].stock_value) or 0.0
|
||||||
return previous_stock_value - flt(sle.stock_value)
|
return previous_stock_value - flt(sle.stock_value)
|
||||||
|
|||||||
@ -46,6 +46,8 @@ class Project(Document):
|
|||||||
"""sync tasks and remove table"""
|
"""sync tasks and remove table"""
|
||||||
if self.flags.dont_sync_tasks: return
|
if self.flags.dont_sync_tasks: return
|
||||||
|
|
||||||
|
|
||||||
|
task_added_or_deleted = False
|
||||||
task_names = []
|
task_names = []
|
||||||
for t in self.tasks:
|
for t in self.tasks:
|
||||||
if t.task_id:
|
if t.task_id:
|
||||||
@ -53,6 +55,7 @@ class Project(Document):
|
|||||||
else:
|
else:
|
||||||
task = frappe.new_doc("Task")
|
task = frappe.new_doc("Task")
|
||||||
task.project = self.name
|
task.project = self.name
|
||||||
|
task_added_or_deleted = True
|
||||||
|
|
||||||
task.update({
|
task.update({
|
||||||
"subject": t.title,
|
"subject": t.title,
|
||||||
@ -70,15 +73,22 @@ class Project(Document):
|
|||||||
# delete
|
# delete
|
||||||
for t in frappe.get_all("Task", ["name"], {"project": self.name, "name": ("not in", task_names)}):
|
for t in frappe.get_all("Task", ["name"], {"project": self.name, "name": ("not in", task_names)}):
|
||||||
frappe.delete_doc("Task", t.name)
|
frappe.delete_doc("Task", t.name)
|
||||||
|
task_added_or_deleted = True
|
||||||
|
|
||||||
|
if task_added_or_deleted:
|
||||||
|
self.update_project()
|
||||||
|
|
||||||
|
def update_project(self):
|
||||||
|
self.update_percent_complete()
|
||||||
|
self.update_costing()
|
||||||
|
|
||||||
def update_percent_complete(self):
|
def update_percent_complete(self):
|
||||||
total = frappe.db.sql("""select count(*) from tabTask where project=%s""",
|
total = frappe.db.sql("""select count(*) from tabTask where project=%s""", self.name)[0][0]
|
||||||
self.name)[0][0]
|
|
||||||
if total:
|
if total:
|
||||||
completed = frappe.db.sql("""select count(*) from tabTask where
|
completed = frappe.db.sql("""select count(*) from tabTask where
|
||||||
project=%s and status in ('Closed', 'Cancelled')""", self.name)[0][0]
|
project=%s and status in ('Closed', 'Cancelled')""", self.name)[0][0]
|
||||||
frappe.db.set_value("Project", self.name, "percent_complete",
|
|
||||||
int(float(completed) / total * 100))
|
self.percent_complete = flt(completed) / total * 100
|
||||||
|
|
||||||
def update_costing(self):
|
def update_costing(self):
|
||||||
total_cost = frappe.db.sql("""select sum(total_costing_amount) as costing_amount,
|
total_cost = frappe.db.sql("""select sum(total_costing_amount) as costing_amount,
|
||||||
|
|||||||
@ -43,15 +43,8 @@ class Task(Document):
|
|||||||
def on_update(self):
|
def on_update(self):
|
||||||
self.check_recursion()
|
self.check_recursion()
|
||||||
self.reschedule_dependent_tasks()
|
self.reschedule_dependent_tasks()
|
||||||
self.update_percentage()
|
|
||||||
self.update_project()
|
self.update_project()
|
||||||
|
|
||||||
def update_percentage(self):
|
|
||||||
"""update percent complete in project"""
|
|
||||||
if self.project and not self.flags.from_project:
|
|
||||||
project = frappe.get_doc("Project", self.project)
|
|
||||||
project.run_method("update_percent_complete")
|
|
||||||
|
|
||||||
def update_total_expense_claim(self):
|
def update_total_expense_claim(self):
|
||||||
self.total_expense_claim = frappe.db.sql("""select sum(total_sanctioned_amount) from `tabExpense Claim`
|
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))
|
where project = %s and task = %s and approval_status = "Approved" and docstatus=1""",(self.project, self.name))
|
||||||
@ -70,10 +63,10 @@ class Task(Document):
|
|||||||
self.act_end_date= tl.end_date
|
self.act_end_date= tl.end_date
|
||||||
|
|
||||||
def update_project(self):
|
def update_project(self):
|
||||||
if self.project and frappe.db.exists("Project", self.project):
|
if self.project and not self.flags.from_project:
|
||||||
project = frappe.get_doc("Project", self.project)
|
project = frappe.get_doc("Project", self.project)
|
||||||
project.flags.dont_sync_tasks = True
|
project.flags.dont_sync_tasks = True
|
||||||
project.update_costing()
|
project.update_project()
|
||||||
project.save()
|
project.save()
|
||||||
|
|
||||||
def check_recursion(self):
|
def check_recursion(self):
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import frappe
|
import frappe
|
||||||
|
|
||||||
from frappe.utils import add_days, getdate, cint
|
from frappe.utils import add_days, getdate, cint, cstr
|
||||||
|
|
||||||
from frappe import throw, _
|
from frappe import throw, _
|
||||||
from erpnext.utilities.transaction_base import TransactionBase, delete_events
|
from erpnext.utilities.transaction_base import TransactionBase, delete_events
|
||||||
@ -73,7 +73,7 @@ class MaintenanceSchedule(TransactionBase):
|
|||||||
"owner": email_map[d.sales_person] or self.owner,
|
"owner": email_map[d.sales_person] or self.owner,
|
||||||
"subject": description,
|
"subject": description,
|
||||||
"description": description,
|
"description": description,
|
||||||
"starts_on": key["scheduled_date"] + " 10:00:00",
|
"starts_on": cstr(key["scheduled_date"]) + " 10:00:00",
|
||||||
"event_type": "Private",
|
"event_type": "Private",
|
||||||
"ref_type": self.doctype,
|
"ref_type": self.doctype,
|
||||||
"ref_name": self.name
|
"ref_name": self.name
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user