mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-25 07:54:46 +00:00
Merge branch 'hotfix' into gstr1-fixes
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -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):
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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 ""
|
||||||
|
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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 ""
|
||||||
|
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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"},
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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"));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
Reference in New Issue
Block a user