Merge branch 'develop' into mapped_doc_fix

This commit is contained in:
Mangesh-Khairnar 2019-07-01 13:40:52 +05:30 committed by GitHub
commit 4aed7cc310
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 135 additions and 37 deletions

View File

@ -8,6 +8,7 @@ frappe.query_reports["Accounts Payable"] = {
"label": __("Company"), "label": __("Company"),
"fieldtype": "Link", "fieldtype": "Link",
"options": "Company", "options": "Company",
"reqd": 1,
"default": frappe.defaults.get_user_default("Company") "default": frappe.defaults.get_user_default("Company")
}, },
{ {

View File

@ -8,6 +8,7 @@ frappe.query_reports["Accounts Receivable"] = {
"label": __("Company"), "label": __("Company"),
"fieldtype": "Link", "fieldtype": "Link",
"options": "Company", "options": "Company",
"reqd": 1,
"default": frappe.defaults.get_user_default("Company") "default": frappe.defaults.get_user_default("Company")
}, },
{ {

View File

@ -541,10 +541,11 @@ class ReceivablePayableReport(object):
conditions.append("""cost_center in (select name from `tabCost Center` where conditions.append("""cost_center in (select name from `tabCost Center` where
lft >= {0} and rgt <= {1})""".format(lft, rgt)) lft >= {0} and rgt <= {1})""".format(lft, rgt))
accounts = [d.name for d in frappe.get_all("Account", if self.filters.company:
filters={"account_type": account_type, "company": self.filters.company})] accounts = [d.name for d in frappe.get_all("Account",
conditions.append("account in (%s)" % ','.join(['%s'] *len(accounts))) filters={"account_type": account_type, "company": self.filters.company})]
values += accounts conditions.append("account in (%s)" % ','.join(['%s'] *len(accounts)))
values += accounts
return " and ".join(conditions), values return " and ".join(conditions), values

View File

@ -10,4 +10,10 @@ frappe.require("assets/erpnext/js/financial_statements.js", function() {
"fieldtype": "Check", "fieldtype": "Check",
"default": 1 "default": 1
}); });
frappe.query_reports["Balance Sheet"]["filters"].push({
"fieldname": "include_default_book_entries",
"label": __("Include Default Book Entries"),
"fieldtype": "Check"
});
}); });

View File

@ -15,4 +15,10 @@ frappe.require("assets/erpnext/js/financial_statements.js", function() {
"label": __("Accumulated Values"), "label": __("Accumulated Values"),
"fieldtype": "Check" "fieldtype": "Check"
}); });
frappe.query_reports["Cash Flow"]["filters"].push({
"fieldname": "include_default_book_entries",
"label": __("Include Default Book Entries"),
"fieldtype": "Check"
});
}); });

View File

@ -52,7 +52,7 @@ def execute(filters=None):
for account in cash_flow_account['account_types']: for account in cash_flow_account['account_types']:
account_data = get_account_type_based_data(filters.company, account_data = get_account_type_based_data(filters.company,
account['account_type'], period_list, filters.accumulated_values) account['account_type'], period_list, filters.accumulated_values, filters)
account_data.update({ account_data.update({
"account_name": account['label'], "account_name": account['label'],
"account": account['label'], "account": account['label'],
@ -105,13 +105,15 @@ def get_cash_flow_accounts():
# combine all cash flow accounts for iteration # combine all cash flow accounts for iteration
return [operation_accounts, investing_accounts, financing_accounts] return [operation_accounts, investing_accounts, financing_accounts]
def get_account_type_based_data(company, account_type, period_list, accumulated_values): def get_account_type_based_data(company, account_type, period_list, accumulated_values, filters):
data = {} data = {}
total = 0 total = 0
for period in period_list: for period in period_list:
start_date = get_start_date(period, accumulated_values, company) start_date = get_start_date(period, accumulated_values, company)
amount = get_account_type_based_gl_data(company, start_date, period['to_date'], account_type) amount = get_account_type_based_gl_data(company, start_date,
period['to_date'], account_type, filters)
if amount and account_type == "Depreciation": if amount and account_type == "Depreciation":
amount *= -1 amount *= -1
@ -121,14 +123,24 @@ def get_account_type_based_data(company, account_type, period_list, accumulated_
data["total"] = total data["total"] = total
return data return data
def get_account_type_based_gl_data(company, start_date, end_date, account_type): def get_account_type_based_gl_data(company, start_date, end_date, account_type, filters):
cond = ""
if filters.finance_book:
cond = " and finance_book = %s" %(frappe.db.escape(filters.finance_book))
if filters.include_default_book_entries:
company_fb = frappe.db.get_value("Company", company, 'default_finance_book')
cond = """ and finance_book in (%s, %s)
""" %(frappe.db.escape(filters.finance_book), frappe.db.escape(company_fb))
gl_sum = frappe.db.sql_list(""" gl_sum = frappe.db.sql_list("""
select sum(credit) - sum(debit) select sum(credit) - sum(debit)
from `tabGL Entry` from `tabGL Entry`
where company=%s and posting_date >= %s and posting_date <= %s where company=%s and posting_date >= %s and posting_date <= %s
and voucher_type != 'Period Closing Voucher' and voucher_type != 'Period Closing Voucher'
and account in ( SELECT name FROM tabAccount WHERE account_type = %s) and account in ( SELECT name FROM tabAccount WHERE account_type = %s) {cond}
""", (company, start_date, end_date, account_type)) """.format(cond=cond), (company, start_date, end_date, account_type))
return gl_sum[0] if gl_sum and gl_sum[0] else 0 return gl_sum[0] if gl_sum and gl_sum[0] else 0

View File

@ -55,5 +55,10 @@ frappe.query_reports["Consolidated Financial Statement"] = {
"fieldtype": "Check", "fieldtype": "Check",
"default": 0 "default": 0
}, },
{
"fieldname": "include_default_book_entries",
"label": __("Include Default Book Entries"),
"fieldtype": "Check"
}
] ]
} }

View File

@ -356,7 +356,8 @@ def set_gl_entries_by_account(from_date, to_date, root_lft, root_rgt, filters, g
"lft": root_lft, "lft": root_lft,
"rgt": root_rgt, "rgt": root_rgt,
"company": d.name, "company": d.name,
"finance_book": filters.get("finance_book") "finance_book": filters.get("finance_book"),
"company_fb": frappe.db.get_value("Company", d.name, 'default_finance_book')
}, },
as_dict=True) as_dict=True)
@ -387,7 +388,10 @@ def get_additional_conditions(from_date, ignore_closing_entries, filters):
additional_conditions.append("gl.posting_date >= %(from_date)s") additional_conditions.append("gl.posting_date >= %(from_date)s")
if filters.get("finance_book"): if filters.get("finance_book"):
additional_conditions.append("ifnull(finance_book, '') in (%(finance_book)s, '')") if filters.get("include_default_book_entries"):
additional_conditions.append("finance_book in (%(finance_book)s, %(company_fb)s)")
else:
additional_conditions.append("finance_book in (%(finance_book)s)")
return " and {}".format(" and ".join(additional_conditions)) if additional_conditions else "" return " and {}".format(" and ".join(additional_conditions)) if additional_conditions else ""

View File

@ -355,6 +355,10 @@ def set_gl_entries_by_account(
"to_date": to_date, "to_date": to_date,
} }
if filters.get("include_default_book_entries"):
gl_filters["company_fb"] = frappe.db.get_value("Company",
company, 'default_finance_book')
for key, value in filters.items(): for key, value in filters.items():
if value: if value:
gl_filters.update({ gl_filters.update({
@ -399,7 +403,10 @@ def get_additional_conditions(from_date, ignore_closing_entries, filters):
additional_conditions.append("cost_center in %(cost_center)s") additional_conditions.append("cost_center in %(cost_center)s")
if filters.get("finance_book"): if filters.get("finance_book"):
additional_conditions.append("ifnull(finance_book, '') in (%(finance_book)s, '')") if filters.get("include_default_book_entries"):
additional_conditions.append("finance_book in (%(finance_book)s, %(company_fb)s)")
else:
additional_conditions.append("finance_book in (%(finance_book)s)")
if accounting_dimensions: if accounting_dimensions:
for dimension in accounting_dimensions: for dimension in accounting_dimensions:

View File

@ -151,6 +151,11 @@ frappe.query_reports["General Ledger"] = {
"label": __("Show Opening Entries"), "label": __("Show Opening Entries"),
"fieldtype": "Check" "fieldtype": "Check"
}, },
{
"fieldname": "include_default_book_entries",
"label": __("Include Default Book Entries"),
"fieldtype": "Check"
}
] ]
} }

View File

@ -131,6 +131,10 @@ def get_gl_entries(filters):
sum(debit_in_account_currency) as debit_in_account_currency, sum(debit_in_account_currency) as debit_in_account_currency,
sum(credit_in_account_currency) as credit_in_account_currency""" sum(credit_in_account_currency) as credit_in_account_currency"""
if filters.get("include_default_book_entries"):
filters['company_fb'] = frappe.db.get_value("Company",
filters.get("company"), 'default_finance_book')
gl_entries = frappe.db.sql( gl_entries = frappe.db.sql(
""" """
select select
@ -186,7 +190,10 @@ def get_conditions(filters):
conditions.append("project in %(project)s") conditions.append("project in %(project)s")
if filters.get("finance_book"): if filters.get("finance_book"):
conditions.append("ifnull(finance_book, '') in (%(finance_book)s, '')") if filters.get("include_default_book_entries"):
conditions.append("finance_book in (%(finance_book)s, %(company_fb)s)")
else:
conditions.append("finance_book in (%(finance_book)s)")
from frappe.desk.reportview import build_match_conditions from frappe.desk.reportview import build_match_conditions
match_conditions = build_match_conditions("GL Entry") match_conditions = build_match_conditions("GL Entry")

View File

@ -19,6 +19,11 @@ frappe.require("assets/erpnext/js/financial_statements.js", function() {
"fieldname": "accumulated_values", "fieldname": "accumulated_values",
"label": __("Accumulated Values"), "label": __("Accumulated Values"),
"fieldtype": "Check" "fieldtype": "Check"
},
{
"fieldname": "include_default_book_entries",
"label": __("Include Default Book Entries"),
"fieldtype": "Check"
} }
); );
}); });

View File

@ -105,7 +105,7 @@ def get_rootwise_opening_balances(filters, report_type):
if filters.finance_book: if filters.finance_book:
fb_conditions = " and finance_book = %(finance_book)s" fb_conditions = " and finance_book = %(finance_book)s"
if filters.include_default_book_entries: if filters.include_default_book_entries:
fb_conditions = " and (finance_book in (%(finance_book)s, %(company_fb)s) or finance_book is null)" fb_conditions = " and (finance_book in (%(finance_book)s, %(company_fb)s))"
additional_conditions += fb_conditions additional_conditions += fb_conditions

View File

@ -291,16 +291,19 @@ class Asset(AccountsController):
def validate_expected_value_after_useful_life(self): def validate_expected_value_after_useful_life(self):
for row in self.get('finance_books'): for row in self.get('finance_books'):
accumulated_depreciation_after_full_schedule = max([d.accumulated_depreciation_amount accumulated_depreciation_after_full_schedule = [d.accumulated_depreciation_amount
for d in self.get("schedules") if cint(d.finance_book_id) == row.idx]) for d in self.get("schedules") if cint(d.finance_book_id) == row.idx]
asset_value_after_full_schedule = flt(flt(self.gross_purchase_amount) - if accumulated_depreciation_after_full_schedule:
flt(accumulated_depreciation_after_full_schedule), accumulated_depreciation_after_full_schedule = max(accumulated_depreciation_after_full_schedule)
self.precision('gross_purchase_amount'))
if row.expected_value_after_useful_life < asset_value_after_full_schedule: asset_value_after_full_schedule = flt(flt(self.gross_purchase_amount) -
frappe.throw(_("Depreciation Row {0}: Expected value after useful life must be greater than or equal to {1}") flt(accumulated_depreciation_after_full_schedule),
.format(row.idx, asset_value_after_full_schedule)) self.precision('gross_purchase_amount'))
if row.expected_value_after_useful_life < asset_value_after_full_schedule:
frappe.throw(_("Depreciation Row {0}: Expected value after useful life must be greater than or equal to {1}")
.format(row.idx, asset_value_after_full_schedule))
def validate_cancellation(self): def validate_cancellation(self):
if self.status not in ("Submitted", "Partially Depreciated", "Fully Depreciated"): if self.status not in ("Submitted", "Partially Depreciated", "Fully Depreciated"):

View File

@ -1,3 +1,37 @@
frappe.listview_settings['Asset'] = { frappe.listview_settings['Asset'] = {
add_fields: ['image'] add_fields: ['status'],
get_indicator: function (doc) {
if (doc.status === "Fully Depreciated") {
return [__("Fully Depreciated"), "green", "status,=,Fully Depreciated"];
} else if (doc.status === "Partially Depreciated") {
return [__("Partially Depreciated"), "grey", "status,=,Partially Depreciated"];
} else if (doc.status === "Sold") {
return [__("Sold"), "green", "status,=,Sold"];
} else if (doc.status === "Scrapped") {
return [__("Scrapped"), "grey", "status,=,Scrapped"];
} else if (doc.status === "In Maintenance") {
return [__("In Maintenance"), "orange", "status,=,In Maintenance"];
} else if (doc.status === "Out of Order") {
return [__("Out of Order"), "grey", "status,=,Out of Order"];
} else if (doc.status === "Issue") {
return [__("Issue"), "orange", "status,=,Issue"];
} else if (doc.status === "Receipt") {
return [__("Receipt"), "green", "status,=,Receipt"];
} else if (doc.status === "Submitted") {
return [__("Submitted"), "blue", "status,=,Submitted"];
} else if (doc.status === "Draft") {
return [__("Draft"), "red", "status,=,Draft"];
}
},
} }

View File

@ -18,7 +18,7 @@ class ServiceLevelAgreement(Document):
if self.start_date >= self.end_date: if self.start_date >= self.end_date:
frappe.throw(_("Start Date of Agreement can't be greater than or equal to End Date.")) frappe.throw(_("Start Date of Agreement can't be greater than or equal to End Date."))
if self.end_date < frappe.utils.nowdate(): if self.end_date < frappe.utils.getdate():
frappe.throw(_("End Date of Agreement can't be less than today.")) frappe.throw(_("End Date of Agreement can't be less than today."))
if self.entity_type and self.entity: if self.entity_type and self.entity:
@ -85,8 +85,9 @@ def get_service_level_agreement_filters(name, customer=None):
["Service Level Agreement", "default_service_level_agreement", "=", 1] ["Service Level Agreement", "default_service_level_agreement", "=", 1]
] ]
else: else:
# Include SLA with No Entity and Entity Type
or_filters = [ or_filters = [
["Service Level Agreement", "entity", "in", [customer, get_customer_group(customer), get_customer_territory(customer), "IS NULL"]], ["Service Level Agreement", "entity", "in", [customer, get_customer_group(customer), get_customer_territory(customer), ""]],
["Service Level Agreement", "default_service_level_agreement", "=", 1] ["Service Level Agreement", "default_service_level_agreement", "=", 1]
] ]