def get_all_suppliers(doctype, filters, items, field, start=0, limit=20): """return all suppliers""" x = frappe.get_list(doctype, filters=filters, limit_start=start, limit_page_length=limit) for val in x: info = get_dashboard_info(doctype, val.name) value = 0 if (field == "annual_billing"): value = info["billing_this_year"] elif (field == "total_unpaid"): value = abs(info["total_unpaid"]) item_obj = { "name": val.name, "annual_billing": get_formatted_value(info["billing_this_year"]), "total_unpaid": get_formatted_value(abs(info["total_unpaid"])), "href": "#Form/Supplier/" + val.name, "value": value } items.append(item_obj) items.sort(key=lambda k: k['value'], reverse=True) return items
def get_all_suppliers(doctype, filters, items, start=0, limit=100): """return all suppliers""" x = frappe.get_list(doctype, fields=["name", "modified"], filters=filters, limit_start=start, limit_page_length=limit) for val in x: info = get_dashboard_info(doctype, val.name) items.append({ "title": val.name, "annual_billing": get_formatted_value(info["billing_this_year"]), "total_unpaid": get_formatted_value(abs(info["total_unpaid"])), "href": "#Form/Supplier/" + val.name, "modified": val.modified }) if len(x) > 99: return get_all_suppliers(doctype, filters, items, start=start) else: return items
def update_loyality(doc, action): loyalty = frappe.get_doc("Customer", doc.customer) value = 0 if (loyalty.loyalty_program): if_loyalty = frappe.get_doc("Loyalty Program", loyalty.loyalty_program) if (if_loyalty.loyalty_program_based_on_item == 1): for ite in doc.items: if frappe.db.exists('Item', ite.item_code): item = frappe.get_doc("Item", ite.item_code) if (item.loyalty_points > 0): value += (float(item.loyalty_points) * float( item.loyalty_points_booster)) * int(ite.qty) point_entry = frappe.db.sql( "select name from `tabLoyalty Point Entry` where invoice = %s and redeem_against is null", (doc.name)) if (len(point_entry)): val_point = frappe.get_doc("Loyalty Point Entry", point_entry[0][0]) val_point.loyalty_points = value # frappe.db.set_value("Loyalty Point Entry",point_entry[0][0],"") val_point.save(ignore_permissions=True) data_points = get_dashboard_info('Customer', doc.customer) outstanding = 0 for data_point in data_points: if data_point['total_unpaid']: outstanding += data_point['total_unpaid'] if outstanding and doc.doctype == 'POS Invoice': customer_name = frappe.db.get_value('Customer', doc.customer, 'customer_name') frappe.msgprint( get_link_to_form('Customer', doc.customer) + " - " + customer_name + " has an outstanding of " + str(outstanding))
def test_loyalty_points_for_dashboard(self): doc = frappe.get_doc('Customer', 'Test Loyalty Customer') company_wise_info = get_dashboard_info("Customer", doc.name, doc.loyalty_program) for d in company_wise_info: self.assertTrue(d.get("loyalty_points"))
def set_tcs(doc, action): if action == "validate": settings = frappe.get_single("India TCS 206C_1H App Settings") if not cint(settings.enable_tcs): return if doc.docstatus != 0: return if len(doc.taxes) < 1: return if doc.taxes[-1].account_head == settings.tcs_account: return from erpnext.accounts.party import get_dashboard_info info = get_dashboard_info("Customer", doc.customer) customer_turnover = 0 for company_info in info: if company_info['company'] == doc.company: customer_turnover = company_info['billing_this_year'] if settings.tcs_trigger_amount >= customer_turnover + flt(doc.rounded_total): return tcs_row = frappe.new_doc('Sales Taxes and Charges') tcs_row.update({ "charge_type": "On Previous Row Total", "row_id": str(len(doc.taxes)), "account_head": settings.tcs_account, "rate": settings.tcs_percentage, "description": settings.tcs_invoice_description, "parenttype": "Sales Invoice", "parentfield": "taxes", "parent": doc.name, "idx": len(doc.taxes) + 1 }) doc.taxes.append(tcs_row) from erpnext.controllers.taxes_and_totals import calculate_taxes_and_totals calculate_taxes_and_totals(doc)
def load_dashboard_info(self): info = get_dashboard_info(self.doctype, self.name) loyalty_point_details = self.get_loyalty_points() if loyalty_point_details and loyalty_point_details.get( "loyalty_points"): info["loyalty_point"] = loyalty_point_details.loyalty_points self.set_onload('dashboard_info', info)
def send_sms(customer, invoice_no, inv_date, amount): mobile_number = (get_mobile_number(customer))[0]["mobile_no"] settings = frappe.get_single("Nirmala Settings") user = settings.user sender_id = settings.sender_id password = frappe.utils.password.get_decrypted_password( "Nirmala Settings", settings.name, fieldname="password") mobile_number = "91" + mobile_number outstanding_amt = (get_dashboard_info("Customer", customer))[0]["total_unpaid"] message = "Dear Customer, Invoice {} of Rs.{} was generated on {}. Outstanding amt: Rs.{} Thanks. Have a great day! - Team Nirmala Home mart".format( invoice_no, amount, inv_date, outstanding_amt) result = sms_gateway(user, password, sender_id, mobile_number, message, invoice_no) if result.status_code == 200: res_json = json.loads(result.text) if res_json["ErrorCode"] == "000": return True return False
def get_all_suppliers(doctype, filters, items, field, start=0, limit=20): """return all suppliers""" x = frappe.get_list(doctype, filters=filters, limit_start=start, limit_page_length=limit) for val in x: info = get_dashboard_info(doctype, val.name) value = 0 if(field=="annual_billing"): value = info["billing_this_year"] elif(field=="total_unpaid"): value = abs(info["total_unpaid"]) item_obj = {"name": val.name, "annual_billing": get_formatted_value(info["billing_this_year"]), "total_unpaid": get_formatted_value(abs(info["total_unpaid"])), "href":"#Form/Supplier/" + val.name, "value": value} items.append(item_obj) items.sort(key=lambda k: k['value'], reverse=True) return items
def get_customer_data(customer, company): if customer: doc = frappe.get_doc("Customer", customer) data_points = get_dashboard_info(doc.doctype, doc.name, doc.loyalty_program) res = { 'total_unpaid': 0, 'billing_this_year': 0, 'info': '', 'loyalty_points': 0 } for data_point in data_points: if data_point['total_unpaid']: res['total_unpaid'] += data_point['total_unpaid'] if data_point['billing_this_year']: res['billing_this_year'] += data_point['billing_this_year'] if 'loyalty_points' not in data_point: data_point['loyalty_points'] = 0 if 'loyalty_points' in data_point: if company == data_point["company"]: res['loyalty_points'] = data_point['loyalty_points'] res['info'] += f"Company: {data_point['company']}, \n Outstanding: {data_point['total_unpaid']}, \n Turn Over: {data_point['billing_this_year']}, \n Loyalty Points: {data_point['loyalty_points']} \n\n" return res
def load_dashboard_info(self): info = get_dashboard_info(self.doctype, self.name) self.set_onload('dashboard_info', info)
def load_dashboard_info(self): info = get_dashboard_info(self.doctype, self.name) self.set_onload('dashboard_info', info)
def load_dashboard_info(self): if self.customer: info = get_dashboard_info('Customer', self.customer, None) self.set_onload('dashboard_info', info)
def onload(self): info = get_dashboard_info('Customer', self.customer) self.set_onload('dashboard_info', info)
def test_loyalty_points_for_dashboard(self): doc = frappe.get_doc('Customer', 'Test Loyalty Customer') company_wise_info = get_dashboard_info("Customer", doc.name, doc.loyalty_program) for d in company_wise_info: self.assertTrue(d.loyalty_points)
def onload(self): load_address_and_contact(self) if self.customer: self.set_onload("dashboard_info", get_dashboard_info("Customer", self.customer))
def load_dashboard_info(self): info = get_dashboard_info(self.doctype, self.name, self.loyalty_program) self.set_onload('dashboard_info', info)
def load_dashboard_info(self): info = get_dashboard_info(self.doctype, self.name, self.loyalty_program) self.set_onload('dashboard_info', info)
def load_dashboard_info(self): if self.customer: info = get_dashboard_info("Customer", self.customer, None) self.set_onload("dashboard_info", info)