Merge branch 'hotfix' into gstr1-fixes

This commit is contained in:
Nabin Hait
2019-04-17 17:33:13 +05:30
committed by GitHub
16 changed files with 771 additions and 744 deletions

View File

@@ -487,13 +487,8 @@ class ReceivablePayableReport(object):
conditions.append("company=%s") conditions.append("company=%s")
values.append(self.filters.company) values.append(self.filters.company)
company_finance_book = erpnext.get_default_finance_book(self.filters.company) if self.filters.finance_book:
if not self.filters.finance_book or (self.filters.finance_book == company_finance_book):
conditions.append("ifnull(finance_book,'') in (%s, '')") conditions.append("ifnull(finance_book,'') in (%s, '')")
values.append(company_finance_book)
elif self.filters.finance_book:
conditions.append("ifnull(finance_book,'') = %s")
values.append(self.filters.finance_book) values.append(self.filters.finance_book)
if self.filters.get(party_type_field): if self.filters.get(party_type_field):

View File

@@ -31,11 +31,8 @@ def get_data(filters):
filters_data.append(["against_voucher", "in", assets]) filters_data.append(["against_voucher", "in", assets])
company_finance_book = erpnext.get_default_finance_book(filters.get("company")) if filters.get("finance_book"):
if (not filters.get('finance_book') or (filters.get('finance_book') == company_finance_book)):
filters_data.append(["finance_book", "in", ['', filters.get('finance_book')]]) filters_data.append(["finance_book", "in", ['', filters.get('finance_book')]])
elif filters.get("finance_book"):
filters_data.append(["finance_book", "=", filters.get('finance_book')])
gl_entries = frappe.get_all('GL Entry', gl_entries = frappe.get_all('GL Entry',
filters= filters_data, filters= filters_data,

View File

@@ -101,7 +101,7 @@ def get_income_expense_data(companies, fiscal_year, filters):
net_profit_loss = get_net_profit_loss(income, expense, companies, filters.company, company_currency, True) net_profit_loss = get_net_profit_loss(income, expense, companies, filters.company, company_currency, True)
return income, expense, net_profit_loss return income, expense, net_profit_loss
def get_cash_flow_data(fiscal_year, companies, filters): def get_cash_flow_data(fiscal_year, companies, filters):
cash_flow_accounts = get_cash_flow_accounts() cash_flow_accounts = get_cash_flow_accounts()
@@ -123,7 +123,7 @@ def get_cash_flow_data(fiscal_year, companies, filters):
# add first net income in operations section # add first net income in operations section
if net_profit_loss: if net_profit_loss:
net_profit_loss.update({ net_profit_loss.update({
"indent": 1, "indent": 1,
"parent_account": cash_flow_accounts[0]['section_header'] "parent_account": cash_flow_accounts[0]['section_header']
}) })
data.append(net_profit_loss) data.append(net_profit_loss)
@@ -327,7 +327,7 @@ def set_gl_entries_by_account(from_date, to_date, root_lft, root_rgt, filters, g
accounts_by_name, ignore_closing_entries=False): accounts_by_name, ignore_closing_entries=False):
"""Returns a dict like { "account": [gl entries], ... }""" """Returns a dict like { "account": [gl entries], ... }"""
company_lft, company_rgt = frappe.get_cached_value('Company', company_lft, company_rgt = frappe.get_cached_value('Company',
filters.get('company'), ["lft", "rgt"]) filters.get('company'), ["lft", "rgt"])
additional_conditions = get_additional_conditions(from_date, ignore_closing_entries, filters) additional_conditions = get_additional_conditions(from_date, ignore_closing_entries, filters)
@@ -354,7 +354,8 @@ def set_gl_entries_by_account(from_date, to_date, root_lft, root_rgt, filters, g
"to_date": to_date, "to_date": to_date,
"lft": root_lft, "lft": root_lft,
"rgt": root_rgt, "rgt": root_rgt,
"company": d.name "company": d.name,
"finance_book": filters.get("finance_book")
}, },
as_dict=True) as_dict=True)
@@ -384,14 +385,8 @@ def get_additional_conditions(from_date, ignore_closing_entries, filters):
if from_date: if from_date:
additional_conditions.append("gl.posting_date >= %(from_date)s") additional_conditions.append("gl.posting_date >= %(from_date)s")
company_finance_book = erpnext.get_default_finance_book(filters.get("company")) if filters.get("finance_book"):
additional_conditions.append("ifnull(finance_book, '') in (%(finance_book)s, '')")
if not filters.get('finance_book') or (filters.get('finance_book') == company_finance_book):
additional_conditions.append("ifnull(finance_book, '') in ('%s', '')" %
frappe.db.escape(company_finance_book))
elif filters.get("finance_book"):
additional_conditions.append("ifnull(finance_book, '') = '%s' " %
frappe.db.escape(filters.get("finance_book")))
return " and {}".format(" and ".join(additional_conditions)) if additional_conditions else "" return " and {}".format(" and ".join(additional_conditions)) if additional_conditions else ""

View File

@@ -184,12 +184,8 @@ class PartyLedgerSummaryReport(object):
if self.filters.company: if self.filters.company:
conditions.append("gle.company=%(company)s") conditions.append("gle.company=%(company)s")
self.filters.company_finance_book = erpnext.get_default_finance_book(self.filters.company) if self.filters.finance_book:
conditions.append("ifnull(finance_book,'') in (%(finance_book)s, '')")
if not self.filters.finance_book or (self.filters.finance_book == self.filters.company_finance_book):
conditions.append("ifnull(finance_book,'') in (%(company_finance_book)s, '')")
elif self.filters.finance_book:
conditions.append("ifnull(finance_book,'') = %(finance_book)s")
if self.filters.get("party"): if self.filters.get("party"):
conditions.append("party=%(party)s") conditions.append("party=%(party)s")

View File

@@ -392,14 +392,8 @@ def get_additional_conditions(from_date, ignore_closing_entries, filters):
filters.cost_center = get_cost_centers_with_children(filters.cost_center) filters.cost_center = get_cost_centers_with_children(filters.cost_center)
additional_conditions.append("cost_center in %(cost_center)s") additional_conditions.append("cost_center in %(cost_center)s")
company_finance_book = erpnext.get_default_finance_book(filters.get("company")) if filters.get("finance_book"):
additional_conditions.append("ifnull(finance_book, '') in (%(finance_book)s, '')")
if not filters.get('finance_book') or (filters.get('finance_book') == company_finance_book):
additional_conditions.append("ifnull(finance_book, '') in ('%s', '')" %
frappe.db.escape(company_finance_book))
elif filters.get("finance_book"):
additional_conditions.append("ifnull(finance_book, '') = '%s' " %
frappe.db.escape(filters.get("finance_book")))
return " and {}".format(" and ".join(additional_conditions)) if additional_conditions else "" return " and {}".format(" and ".join(additional_conditions)) if additional_conditions else ""

View File

@@ -186,12 +186,8 @@ def get_conditions(filters):
if filters.get("project"): if filters.get("project"):
conditions.append("project in %(project)s") conditions.append("project in %(project)s")
company_finance_book = erpnext.get_default_finance_book(filters.get("company")) if filters.get("finance_book"):
if not filters.get("finance_book") or (filters.get("finance_book") == company_finance_book):
filters['finance_book'] = company_finance_book
conditions.append("ifnull(finance_book, '') in (%(finance_book)s, '')") conditions.append("ifnull(finance_book, '') in (%(finance_book)s, '')")
elif filters.get("finance_book"):
conditions.append("ifnull(finance_book, '') = %(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

@@ -395,7 +395,7 @@ def make_purchase_invoice(source_name, target_doc=None):
or item.get("buying_cost_center") or item.get("buying_cost_center")
or item_group.get("buying_cost_center")) or item_group.get("buying_cost_center"))
doc = get_mapped_doc("Purchase Order", source_name, { fields = {
"Purchase Order": { "Purchase Order": {
"doctype": "Purchase Invoice", "doctype": "Purchase Invoice",
"field_map": { "field_map": {
@@ -419,7 +419,15 @@ def make_purchase_invoice(source_name, target_doc=None):
"doctype": "Purchase Taxes and Charges", "doctype": "Purchase Taxes and Charges",
"add_if_empty": True "add_if_empty": True
} }
}, target_doc, postprocess) }
if frappe.get_single("Accounts Settings").automatically_fetch_payment_terms == 1:
fields["Payment Schedule"] = {
"doctype": "Payment Schedule",
"add_if_empty": True
}
doc = get_mapped_doc("Purchase Order", source_name, fields, target_doc, postprocess)
return doc return doc

View File

@@ -6,7 +6,7 @@ import unittest
import frappe import frappe
import frappe.defaults import frappe.defaults
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
from frappe.utils import flt, add_days, nowdate from frappe.utils import flt, add_days, nowdate, getdate
from erpnext.stock.doctype.item.test_item import make_item from erpnext.stock.doctype.item.test_item import make_item
from erpnext.buying.doctype.purchase_order.purchase_order import (make_purchase_receipt, make_purchase_invoice, make_rm_stock_entry as make_subcontract_transfer_entry) from erpnext.buying.doctype.purchase_order.purchase_order import (make_purchase_receipt, make_purchase_invoice, make_rm_stock_entry as make_subcontract_transfer_entry)
from erpnext.stock.doctype.material_request.test_material_request import make_material_request from erpnext.stock.doctype.material_request.test_material_request import make_material_request
@@ -133,9 +133,9 @@ class TestPurchaseOrder(unittest.TestCase):
po.submit() po.submit()
self.assertEqual(po.payment_schedule[0].payment_amount, 2500.0) self.assertEqual(po.payment_schedule[0].payment_amount, 2500.0)
self.assertEqual(po.payment_schedule[0].due_date, po.transaction_date) self.assertEqual(getdate(po.payment_schedule[0].due_date), getdate(po.transaction_date))
self.assertEqual(po.payment_schedule[1].payment_amount, 2500.0) self.assertEqual(po.payment_schedule[1].payment_amount, 2500.0)
self.assertEqual(po.payment_schedule[1].due_date, add_days(po.transaction_date, 30)) self.assertEqual(getdate(po.payment_schedule[1].due_date), add_days(getdate(po.transaction_date), 30))
pi = make_purchase_invoice(po.name) pi = make_purchase_invoice(po.name)
pi.save() pi.save()
@@ -143,9 +143,9 @@ class TestPurchaseOrder(unittest.TestCase):
self.assertEqual(len(pi.get("items", [])), 1) self.assertEqual(len(pi.get("items", [])), 1)
self.assertEqual(pi.payment_schedule[0].payment_amount, 2500.0) self.assertEqual(pi.payment_schedule[0].payment_amount, 2500.0)
self.assertEqual(pi.payment_schedule[0].due_date, po.transaction_date) self.assertEqual(getdate(pi.payment_schedule[0].due_date), getdate(po.transaction_date))
self.assertEqual(pi.payment_schedule[1].payment_amount, 2500.0) self.assertEqual(pi.payment_schedule[1].payment_amount, 2500.0)
self.assertEqual(pi.payment_schedule[1].due_date, add_days(po.transaction_date, 30)) self.assertEqual(getdate(pi.payment_schedule[1].due_date), add_days(getdate(po.transaction_date), 30))
def test_subcontracting(self): def test_subcontracting(self):
po = create_purchase_order(item_code="_Test FG Item", is_subcontracted="Yes") po = create_purchase_order(item_code="_Test FG Item", is_subcontracted="Yes")
@@ -294,6 +294,10 @@ class TestPurchaseOrder(unittest.TestCase):
make_stock_entry(target="_Test Warehouse - _TC", qty=10, basic_rate=100) make_stock_entry(target="_Test Warehouse - _TC", qty=10, basic_rate=100)
make_stock_entry(target="_Test Warehouse - _TC", item_code="_Test Item Home Desktop 100", make_stock_entry(target="_Test Warehouse - _TC", item_code="_Test Item Home Desktop 100",
qty=20, basic_rate=100) qty=20, basic_rate=100)
make_stock_entry(target="_Test Warehouse 1 - _TC", item_code="_Test Item",
qty=30, basic_rate=100)
make_stock_entry(target="_Test Warehouse 1 - _TC", item_code="_Test Item Home Desktop 100",
qty=30, basic_rate=100)
bin1 = frappe.db.get_value("Bin", bin1 = frappe.db.get_value("Bin",
filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"}, filters={"warehouse": "_Test Warehouse - _TC", "item_code": "_Test Item"},

View File

@@ -30,9 +30,8 @@ class AccountsController(TransactionBase):
return self.__company_currency return self.__company_currency
def onload(self): def onload(self):
if self.get("__onload"): self.set_onload("make_payment_via_journal_entry",
self.get("__onload").make_payment_via_journal_entry \ frappe.db.get_single_value('Accounts Settings', 'make_payment_via_journal_entry'))
= frappe.db.get_single_value('Accounts Settings', 'make_payment_via_journal_entry')
if self.is_new(): if self.is_new():
relevant_docs = ("Quotation", "Purchase Order", "Sales Order", relevant_docs = ("Quotation", "Purchase Order", "Sales Order",

View File

@@ -1,10 +1,11 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import frappe import frappe
from frappe.utils import cint
def execute(): def execute():
woocommerce_setting_enable_sync = frappe.db.sql("SELECT t.value FROM tabSingles t WHERE doctype = 'Woocommerce Settings' AND field = 'enable_sync'", as_dict=True) frappe.reload_doc("erpnext_integrations", "doctype","woocommerce_settings")
if len(woocommerce_setting_enable_sync) and woocommerce_setting_enable_sync[0].value == '1': doc = frappe.get_doc("Woocommerce Settings")
frappe.db.sql("""UPDATE tabSingles
SET value = (SELECT t.value FROM tabSingles t WHERE doctype = 'Woocommerce Settings' AND field = 'modified_by') if cint(doc.enable_sync):
WHERE doctype = 'Woocommerce Settings' doc.creation_user = doc.modified_by
AND field = 'creation_user';""") doc.save(ignore_permissions=True)

View File

@@ -241,7 +241,7 @@ class Project(Document):
from_expense_claim = frappe.db.sql("""select from_expense_claim = frappe.db.sql("""select
sum(total_sanctioned_amount) as total_sanctioned_amount sum(total_sanctioned_amount) as total_sanctioned_amount
from `tabExpense Claim` where project = %s from `tabExpense Claim` where project = %s
and docstatus = 1""", self.name, as_dict=1, debug=1)[0] and docstatus = 1""", self.name, as_dict=1)[0]
self.actual_start_date = from_time_sheet.start_date self.actual_start_date = from_time_sheet.start_date
self.actual_end_date = from_time_sheet.end_date self.actual_end_date = from_time_sheet.end_date

View File

@@ -54,9 +54,6 @@ def get_data(filters):
data = [] data = []
record = get_records(filters) record = get_records(filters)
billable_hours_worked = 0
hours_worked = 0
working_cost = 0
for entries in record: for entries in record:
total_hours = 0 total_hours = 0
total_billable_hours = 0 total_billable_hours = 0
@@ -81,11 +78,6 @@ def get_data(filters):
total_hours, total_billable_hours, total_amount = get_billable_and_total_hours(activity, total_hours, total_billable_hours, total_amount = get_billable_and_total_hours(activity,
time_end, time_start, total_hours, total_billable_hours, total_amount) time_end, time_start, total_hours, total_billable_hours, total_amount)
hours_worked += total_hours
billable_hours_worked += total_billable_hours
working_cost += total_amount
row = { row = {
"employee": entries.employee, "employee": entries.employee,
"employee_name": entries.employee_name, "employee_name": entries.employee_name,
@@ -97,14 +89,6 @@ def get_data(filters):
if entries_exists: if entries_exists:
data.append(row) data.append(row)
entries_exists = False entries_exists = False
total = {
"total_billable_hours": billable_hours_worked,
"total_hours": hours_worked,
"amount": working_cost
}
if billable_hours_worked !=0 or hours_worked !=0 or working_cost !=0:
data.append(total)
return data return data
def get_records(filters): def get_records(filters):

View File

@@ -1,5 +1,5 @@
{ {
"add_total_row": 0, "add_total_row": 1,
"creation": "2019-03-08 15:08:19.929728", "creation": "2019-03-08 15:08:19.929728",
"disable_prepared_report": 0, "disable_prepared_report": 0,
"disabled": 0, "disabled": 0,
@@ -7,7 +7,7 @@
"doctype": "Report", "doctype": "Report",
"idx": 0, "idx": 0,
"is_standard": "Yes", "is_standard": "Yes",
"modified": "2019-03-08 15:08:19.929728", "modified": "2019-04-16 17:29:18.376932",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Projects", "module": "Projects",
"name": "Employee Billing Summary", "name": "Employee Billing Summary",

View File

@@ -1,5 +1,5 @@
{ {
"add_total_row": 0, "add_total_row": 1,
"creation": "2019-03-11 16:22:39.460524", "creation": "2019-03-11 16:22:39.460524",
"disable_prepared_report": 0, "disable_prepared_report": 0,
"disabled": 0, "disabled": 0,
@@ -7,7 +7,7 @@
"doctype": "Report", "doctype": "Report",
"idx": 0, "idx": 0,
"is_standard": "Yes", "is_standard": "Yes",
"modified": "2019-03-11 16:22:39.460524", "modified": "2019-04-16 17:28:32.749633",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Projects", "module": "Projects",
"name": "Project Billing Summary", "name": "Project Billing Summary",

View File

@@ -123,5 +123,11 @@ frappe.ui.form.on("Customer", {
}, },
validate: function(frm) { validate: function(frm) {
if(frm.doc.lead_name) frappe.model.clear_doc("Lead", frm.doc.lead_name); if(frm.doc.lead_name) frappe.model.clear_doc("Lead", frm.doc.lead_name);
var total = 0;
for (var idx in frm.doc.sales_team) {
total += frm.doc.sales_team[idx].allocated_percentage;
if (total > 100) frappe.throw(__("Total contribution percentage can't exceed 100"));
}
}, },
}); });