Annual billing amount in party dashboard based on grand total
This commit is contained in:
parent
7a9bd41a72
commit
2d79a641c2
@ -7,10 +7,13 @@ import frappe
|
|||||||
import datetime
|
import datetime
|
||||||
from frappe import _, msgprint, scrub
|
from frappe import _, msgprint, scrub
|
||||||
from frappe.defaults import get_user_permissions
|
from frappe.defaults import get_user_permissions
|
||||||
from frappe.utils import add_days, getdate, formatdate, get_first_day, date_diff, add_years, get_timestamp
|
from frappe.utils import add_days, getdate, formatdate, get_first_day, date_diff, \
|
||||||
|
add_years, get_timestamp, nowdate
|
||||||
from frappe.geo.doctype.address.address import get_address_display, get_default_address
|
from frappe.geo.doctype.address.address import get_address_display, get_default_address
|
||||||
from frappe.email.doctype.contact.contact import get_contact_details, get_default_contact
|
from frappe.email.doctype.contact.contact import get_contact_details, get_default_contact
|
||||||
from erpnext.exceptions import PartyFrozen, InvalidCurrency, PartyDisabled, InvalidAccountCurrency
|
from erpnext.exceptions import PartyFrozen, InvalidCurrency, PartyDisabled, InvalidAccountCurrency
|
||||||
|
from erpnext.accounts.utils import get_fiscal_year
|
||||||
|
from erpnext import get_default_currency
|
||||||
|
|
||||||
class DuplicatePartyAccountError(frappe.ValidationError): pass
|
class DuplicatePartyAccountError(frappe.ValidationError): pass
|
||||||
|
|
||||||
@ -359,4 +362,34 @@ def get_timeline_data(doctype, name):
|
|||||||
timestamp = get_timestamp(date)
|
timestamp = get_timestamp(date)
|
||||||
out.update({ timestamp: count })
|
out.update({ timestamp: count })
|
||||||
|
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
def get_dashboard_info(party_type, party):
|
||||||
|
current_fiscal_year = get_fiscal_year(nowdate(), as_dict=True)
|
||||||
|
party_account_currency = get_party_account_currency(party_type, party, frappe.db.get_default("company"))
|
||||||
|
company_default_currency = get_default_currency()
|
||||||
|
|
||||||
|
if party_account_currency==company_default_currency:
|
||||||
|
total_field = "base_grand_total"
|
||||||
|
else:
|
||||||
|
total_field = "grand_total"
|
||||||
|
|
||||||
|
doctype = "Sales Invoice" if party_type=="Customer" else "Purchase Invoice"
|
||||||
|
|
||||||
|
billing_this_year = frappe.db.sql("""
|
||||||
|
select sum({0})
|
||||||
|
from `tab{1}`
|
||||||
|
where {2}=%s and docstatus=1 and posting_date between %s and %s
|
||||||
|
""".format(total_field, doctype, party_type.lower()),
|
||||||
|
(party, current_fiscal_year.year_start_date, current_fiscal_year.year_end_date))
|
||||||
|
|
||||||
|
total_unpaid = frappe.db.sql("""select sum(outstanding_amount)
|
||||||
|
from `tab{0}`
|
||||||
|
where {1}=%s and docstatus = 1""".format(doctype, party_type.lower()), party)
|
||||||
|
|
||||||
|
info = {}
|
||||||
|
info["billing_this_year"] = billing_this_year[0][0] if billing_this_year else 0
|
||||||
|
info["currency"] = party_account_currency
|
||||||
|
info["total_unpaid"] = total_unpaid[0][0] if total_unpaid else 0
|
||||||
|
|
||||||
|
return info
|
@ -6,11 +6,9 @@ import frappe
|
|||||||
import frappe.defaults
|
import frappe.defaults
|
||||||
from frappe import msgprint, _
|
from frappe import msgprint, _
|
||||||
from frappe.model.naming import make_autoname
|
from frappe.model.naming import make_autoname
|
||||||
from frappe.geo.address_and_contact import (load_address_and_contact,
|
from frappe.geo.address_and_contact import load_address_and_contact, delete_contact_and_address
|
||||||
delete_contact_and_address)
|
|
||||||
|
|
||||||
from erpnext.utilities.transaction_base import TransactionBase
|
from erpnext.utilities.transaction_base import TransactionBase
|
||||||
from erpnext.accounts.party import validate_party_accounts, get_timeline_data # keep this
|
from erpnext.accounts.party import validate_party_accounts, get_dashboard_info, get_timeline_data # keep this
|
||||||
|
|
||||||
class Supplier(TransactionBase):
|
class Supplier(TransactionBase):
|
||||||
def get_feed(self):
|
def get_feed(self):
|
||||||
@ -22,22 +20,7 @@ class Supplier(TransactionBase):
|
|||||||
self.load_dashboard_info()
|
self.load_dashboard_info()
|
||||||
|
|
||||||
def load_dashboard_info(self):
|
def load_dashboard_info(self):
|
||||||
billing_this_year = frappe.db.sql("""
|
info = get_dashboard_info(self.doctype, self.name)
|
||||||
select sum(credit_in_account_currency) - sum(debit_in_account_currency)
|
|
||||||
from `tabGL Entry`
|
|
||||||
where voucher_type='Purchase Invoice' and party_type = 'Supplier'
|
|
||||||
and party=%s and fiscal_year = %s""",
|
|
||||||
(self.name, frappe.db.get_default("fiscal_year")))
|
|
||||||
|
|
||||||
total_unpaid = frappe.db.sql("""select sum(outstanding_amount)
|
|
||||||
from `tabPurchase Invoice`
|
|
||||||
where supplier=%s and docstatus = 1""", self.name)
|
|
||||||
|
|
||||||
|
|
||||||
info = {}
|
|
||||||
info["billing_this_year"] = billing_this_year[0][0] if billing_this_year else 0
|
|
||||||
info["total_unpaid"] = total_unpaid[0][0] if total_unpaid else 0
|
|
||||||
|
|
||||||
self.set_onload('dashboard_info', info)
|
self.set_onload('dashboard_info', info)
|
||||||
|
|
||||||
def autoname(self):
|
def autoname(self):
|
||||||
|
@ -10,8 +10,7 @@ from frappe.utils import flt, cint, cstr
|
|||||||
from frappe.desk.reportview import build_match_conditions
|
from frappe.desk.reportview import build_match_conditions
|
||||||
from erpnext.utilities.transaction_base import TransactionBase
|
from erpnext.utilities.transaction_base import TransactionBase
|
||||||
from frappe.geo.address_and_contact import load_address_and_contact, delete_contact_and_address
|
from frappe.geo.address_and_contact import load_address_and_contact, delete_contact_and_address
|
||||||
from erpnext.accounts.party import validate_party_accounts, get_timeline_data # keep this
|
from erpnext.accounts.party import validate_party_accounts, get_dashboard_info, get_timeline_data # keep this
|
||||||
from erpnext import get_default_currency
|
|
||||||
|
|
||||||
class Customer(TransactionBase):
|
class Customer(TransactionBase):
|
||||||
def get_feed(self):
|
def get_feed(self):
|
||||||
@ -23,25 +22,9 @@ class Customer(TransactionBase):
|
|||||||
self.load_dashboard_info()
|
self.load_dashboard_info()
|
||||||
|
|
||||||
def load_dashboard_info(self):
|
def load_dashboard_info(self):
|
||||||
billing_this_year = frappe.db.sql("""
|
info = get_dashboard_info(self.doctype, self.name)
|
||||||
select sum(debit_in_account_currency) - sum(credit_in_account_currency), account_currency
|
|
||||||
from `tabGL Entry`
|
|
||||||
where voucher_type='Sales Invoice' and party_type = 'Customer'
|
|
||||||
and party=%s and fiscal_year = %s""",
|
|
||||||
(self.name, frappe.db.get_default("fiscal_year")))
|
|
||||||
|
|
||||||
total_unpaid = frappe.db.sql("""select sum(outstanding_amount)
|
|
||||||
from `tabSales Invoice`
|
|
||||||
where customer=%s and docstatus = 1""", self.name)
|
|
||||||
|
|
||||||
info = {}
|
|
||||||
info["billing_this_year"] = billing_this_year[0][0] if billing_this_year else 0
|
|
||||||
info["currency"] = billing_this_year[0][1] if billing_this_year else get_default_currency()
|
|
||||||
info["total_unpaid"] = total_unpaid[0][0] if total_unpaid else 0
|
|
||||||
|
|
||||||
self.set_onload('dashboard_info', info)
|
self.set_onload('dashboard_info', info)
|
||||||
|
|
||||||
|
|
||||||
def autoname(self):
|
def autoname(self):
|
||||||
cust_master_name = frappe.defaults.get_global_default('cust_master_name')
|
cust_master_name = frappe.defaults.get_global_default('cust_master_name')
|
||||||
if cust_master_name == 'Customer Name':
|
if cust_master_name == 'Customer Name':
|
||||||
|
Loading…
Reference in New Issue
Block a user