fix: minor fixes and refactors

This commit is contained in:
Afshan
2021-10-28 19:27:12 +05:30
parent 044ad02578
commit 488624c75b
2 changed files with 66 additions and 41 deletions

View File

@@ -16,54 +16,70 @@ class ProcessSalesCommission(Document):
return super().validate_from_to_dates("from_date", "to_date") return super().validate_from_to_dates("from_date", "to_date")
def validate_salary_component(self): def validate_salary_component(self):
if self.pay_via_salary: if self.pay_via_salary and not frappe.db.get_single_value(
if not frappe.db.get_single_value("Payroll Settings", "salary_component_for_sales_commission"): "Payroll Settings", "salary_component_for_sales_commission"):
frappe.throw(_("Please set {0} in {1}").format(frappe.bold("Salary Component for Sales Commission"), get_link_to_form("Payroll Settings", "Payroll Settings"))) frappe.throw(_("Please set {0} in {1}").format(
frappe.bold("Salary Component for Sales Commission"), get_link_to_form("Payroll Settings", "Payroll Settings")))
def on_submit(self): def on_submit(self):
self.process_sales_commission() self.process_sales_commission()
def process_sales_commission(self): def process_sales_commission(self):
filter_date = "transaction_date" if self.commission_based_on=="Sales Order" else "posting_date" filter_date = "transaction_date" if self.commission_based_on=="Sales Order" else "posting_date"
records = [entry.name for entry in frappe.db.get_all(self.commission_based_on, filters={"company": self.company, "docstatus":1, filter_date: ('between', [self.from_date, self.to_date])})] records = [entry.name for entry in frappe.db.get_all(
sales_persons_details = frappe.get_all("Sales Team", filters={"parent": ['in', records]}, fields=["sales_person", "commission_rate", "incentives", "allocated_percentage", "allocated_amount", "parent"]) self.commission_based_on,
if len(sales_persons_details): filters={"company": self.company, "docstatus":1, filter_date: ('between', [self.from_date, self.to_date])})]
sales_persons = set(e['sales_person'] for e in sales_persons_details) sales_persons_details = frappe.get_all(
"Sales Team", filters={"parent": ['in', records]},
fields=["sales_person", "commission_rate", "incentives", "allocated_percentage", "allocated_amount", "parent"])
if sales_persons_details:
sales_persons = {e['sales_person'] for e in sales_persons_details}
sales_persons_list = self.get_sales_persons_list(sales_persons) sales_persons_list = self.get_sales_persons_list(sales_persons)
sales_persons_details_map = self.map_sales_persons_details(sales_persons_list, sales_persons_details) # sales_persons_details_map = self.map_sales_persons_details(sales_persons_list, sales_persons_details)
self.make_sales_commission_document(sales_persons_details_map, filter_date) self.make_sales_commission_document(sales_persons_list, filter_date)
def get_sales_persons_list(self, sales_persons): def get_sales_persons_list(self, sales_persons):
sales_persons_list = sales_persons sales_persons_list = sales_persons
if self.department or self.designation or self.branch: if self.department or self.designation or self.branch:
for person in sales_persons: sales_persons_emp = frappe.get_all("Sales Person", filters= {"name": ["in", sales_persons]}, fields=["employee"], as_dict=True)['employee']
emp = frappe.db.get_value("Sales Person", filters={"name":person}, fieldname="employee", as_dict=True)['employee'] emp_filters = {"name": ["in", sales_persons_emp], "company": self.company}
if emp: # for field in ["department", "designation", "branch"]:
employee_details = frappe.db.get_value("Employee", filters={"name":emp}, fieldname=["company", "department", "designation", "branch"], as_dict=True) if self.department:
if self.company != employee_details["company"]: emp_filters["department"] = self.department
sales_persons_list.remove(person) if self.designation:
continue emp_filters["designation"] = self.designation
if self.department and self.department != employee_details["department"]: if self.branch:
sales_persons_list.remove(person) emp_filters["branch"] = self.branch
continue
if self.designation and self.designation != employee_details["designation"]: sales_persons_list = frappe.get_all("Employee", filters=emp_filters, as_dict=True)
sales_persons_list.remove(person) # for person in sales_persons:
continue # emp = frappe.db.get_value("Sales Person", filters={"name": person}, fieldname="employee", as_dict=True)['employee']
if self.branch and self.branch != employee_details["branch"]: # if emp:
sales_persons_list.remove(person) # employee_details = frappe.db.get_value("Employee", filters={"name": emp}, as_dict=True)
continue # if self.company != employee_details["company"]:
# sales_persons_list.remove(person)
# continue
# if self.department and self.department != employee_details["department"]:
# sales_persons_list.remove(person)
# continue
# if self.designation and self.designation != employee_details["designation"]:
# sales_persons_list.remove(person)
# continue
# if self.branch and self.branch != employee_details["branch"]:
# sales_persons_list.remove(person)
# continue
return sales_persons_list return sales_persons_list
def map_sales_persons_details(self, sales_persons, sales_persons_details): # def map_sales_persons_details(self, sales_persons, sales_persons_details):
sales_persons_details_map = {} # sales_persons_details_map = {}
for person in sales_persons: # for person in sales_persons:
sales_persons_details_map[person] = [] # sales_persons_details_map[person] = []
for details in sales_persons_details: # for details in sales_persons_details:
if details['sales_person'] == person: # if details['sales_person'] == person:
sales_persons_details_map[person].append(details) # sales_persons_details_map[person].append(details)
return sales_persons_details_map # return sales_persons_details_map
def make_sales_commission_document(self, sales_persons_details_map, filter_date): def make_sales_commission_document(self, sales_persons_details_map, filter_date):
for record in sales_persons_details_map: for record in sales_persons_details_map:

View File

@@ -23,7 +23,8 @@ class SalesCommission(Document):
def validate_salary_component(self): def validate_salary_component(self):
if self.pay_via_salary and not frappe.db.get_single_value("Payroll Settings", "salary_component_for_sales_commission"): if self.pay_via_salary and not frappe.db.get_single_value("Payroll Settings", "salary_component_for_sales_commission"):
frappe.throw(_("Please set {0} in {1}").format(frappe.bold("Salary Component for Sales Commission"), get_link_to_form("Payroll Settings", "Payroll Settings"))) frappe.throw(_("Please set {0} in {1}").format(
frappe.bold("Salary Component for Sales Commission"), get_link_to_form("Payroll Settings", "Payroll Settings")))
def on_submit(self): def on_submit(self):
self.validate_amount() self.validate_amount()
@@ -33,12 +34,18 @@ class SalesCommission(Document):
def add_contributions(self): def add_contributions(self):
self.set("contributions", []) self.set("contributions", [])
filter_date = "transaction_date" if self.commission_based_on=="Sales Order" else "posting_date" filter_date = "transaction_date" if self.commission_based_on=="Sales Order" else "posting_date"
records = [entry.name for entry in frappe.db.get_all(self.commission_based_on, filters={"company": self.company, "docstatus":1, filter_date: ('between', [self.from_date, self.to_date])})] records = [entry.name for entry in frappe.db.get_all(
sales_persons_details = frappe.get_all("Sales Team", filters={"parent": ['in', records], "sales_person": self.sales_person}, fields=["sales_person", "commission_rate", "incentives", "allocated_percentage", "allocated_amount", "parent"]) self.commission_based_on,
filters={"company": self.company, "docstatus":1, filter_date: ('between', [self.from_date, self.to_date])})]
sales_persons_details = frappe.get_all(
"Sales Team", filters={"parent": ['in', records], "sales_person": self.sales_person},
fields=["sales_person", "commission_rate", "incentives", "allocated_percentage", "allocated_amount", "parent"])
if sales_persons_details: if sales_persons_details:
for record in sales_persons_details: for record in sales_persons_details:
if add(record, self.sales_person): if add_record(record, self.sales_person):
record_details = frappe.db.get_value(self.commission_based_on, filters={"name": record["parent"]}, fieldname=["customer", filter_date], as_dict=True) record_details = frappe.db.get_value(
self.commission_based_on, filters={"name": record["parent"]},
fieldname=["customer", filter_date], as_dict=True)
contribution = { contribution = {
"document_type": self.commission_based_on, "document_type": self.commission_based_on,
"order_or_invoice": record["parent"], "order_or_invoice": record["parent"],
@@ -71,7 +78,9 @@ class SalesCommission(Document):
if mode_of_payment: if mode_of_payment:
paid_from = get_bank_cash_account(mode_of_payment, self.company).get("account") paid_from = get_bank_cash_account(mode_of_payment, self.company).get("account")
paid_to = frappe.db.get_value("Company", filters={"name":self.company}, fieldname=['default_payable_account'], as_dict=True)['default_payable_account'] paid_to = frappe.db.get_value(
"Company", filters={"name":self.company},
fieldname=['default_payable_account'], as_dict=True)['default_payable_account']
if not paid_to: if not paid_to:
frappe.throw(_("Please set Default Payable Account in {}").format(get_link_to_form("Company", self.company))) frappe.throw(_("Please set Default Payable Account in {}").format(get_link_to_form("Company", self.company)))
if self.pay_via_salary: if self.pay_via_salary:
@@ -129,8 +138,8 @@ class SalesCommission(Document):
} }
doc.append("references", reference) doc.append("references", reference)
def add(record, sales_person): def add_record(record, sales_person):
previous_contibutions = frappe.get_all("Contributions", filters={"order_or_invoice":record["parent"], "docstatus":["!=", 2]}, fields=["parent"]) previous_contibutions = frappe.get_all("Contributions", filters={"order_or_invoice":record["parent"], "docstatus": 1}, fields=["parent"])
if previous_contibutions: if previous_contibutions:
for contributions in previous_contibutions: for contributions in previous_contibutions:
if frappe.db.get_value("Sales Commission", {"name":contributions["parent"]}, fieldname=["sales_person"]) == sales_person: if frappe.db.get_value("Sales Commission", {"name":contributions["parent"]}, fieldname=["sales_person"]) == sales_person: