mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-03 04:09:11 +00:00
Merge branch 'hotfix'
This commit is contained in:
@@ -5,7 +5,7 @@ import frappe
|
|||||||
from erpnext.hooks import regional_overrides
|
from erpnext.hooks import regional_overrides
|
||||||
from frappe.utils import getdate
|
from frappe.utils import getdate
|
||||||
|
|
||||||
__version__ = '11.1.44'
|
__version__ = '11.1.45'
|
||||||
|
|
||||||
def get_default_company(user=None):
|
def get_default_company(user=None):
|
||||||
'''Get default company for user'''
|
'''Get default company for user'''
|
||||||
|
|||||||
@@ -484,9 +484,13 @@ class PurchaseInvoice(BuyingController):
|
|||||||
"credit": flt(item.rm_supp_cost)
|
"credit": flt(item.rm_supp_cost)
|
||||||
}, warehouse_account[self.supplier_warehouse]["account_currency"]))
|
}, warehouse_account[self.supplier_warehouse]["account_currency"]))
|
||||||
elif not item.is_fixed_asset or (item.is_fixed_asset and is_cwip_accounting_disabled()):
|
elif not item.is_fixed_asset or (item.is_fixed_asset and is_cwip_accounting_disabled()):
|
||||||
|
|
||||||
|
expense_account = (item.expense_account
|
||||||
|
if (not item.enable_deferred_expense or self.is_return) else item.deferred_expense_account)
|
||||||
|
|
||||||
gl_entries.append(
|
gl_entries.append(
|
||||||
self.get_gl_dict({
|
self.get_gl_dict({
|
||||||
"account": item.expense_account if not item.enable_deferred_expense else item.deferred_expense_account,
|
"account": expense_account,
|
||||||
"against": self.supplier,
|
"against": self.supplier,
|
||||||
"debit": flt(item.base_net_amount, item.precision("base_net_amount")),
|
"debit": flt(item.base_net_amount, item.precision("base_net_amount")),
|
||||||
"debit_in_account_currency": (flt(item.base_net_amount,
|
"debit_in_account_currency": (flt(item.base_net_amount,
|
||||||
|
|||||||
@@ -785,10 +785,13 @@ class SalesInvoice(SellingController):
|
|||||||
asset.db_set("disposal_date", self.posting_date)
|
asset.db_set("disposal_date", self.posting_date)
|
||||||
asset.set_status("Sold" if self.docstatus==1 else None)
|
asset.set_status("Sold" if self.docstatus==1 else None)
|
||||||
else:
|
else:
|
||||||
account_currency = get_account_currency(item.income_account)
|
income_account = (item.income_account
|
||||||
|
if (not item.enable_deferred_revenue or self.is_return) else item.deferred_revenue_account)
|
||||||
|
|
||||||
|
account_currency = get_account_currency(income_account)
|
||||||
gl_entries.append(
|
gl_entries.append(
|
||||||
self.get_gl_dict({
|
self.get_gl_dict({
|
||||||
"account": item.income_account if not item.enable_deferred_revenue else item.deferred_revenue_account,
|
"account": income_account,
|
||||||
"against": self.customer,
|
"against": self.customer,
|
||||||
"credit": flt(item.base_net_amount, item.precision("base_net_amount")),
|
"credit": flt(item.base_net_amount, item.precision("base_net_amount")),
|
||||||
"credit_in_account_currency": (flt(item.base_net_amount, item.precision("base_net_amount"))
|
"credit_in_account_currency": (flt(item.base_net_amount, item.precision("base_net_amount"))
|
||||||
|
|||||||
@@ -206,11 +206,11 @@ def bom(doctype, txt, searchfield, start, page_len, filters):
|
|||||||
if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999),
|
if(locate(%(_txt)s, name), locate(%(_txt)s, name), 99999),
|
||||||
idx desc, name
|
idx desc, name
|
||||||
limit %(start)s, %(page_len)s """.format(
|
limit %(start)s, %(page_len)s """.format(
|
||||||
fcond=get_filters_cond(doctype, filters, conditions),
|
fcond=get_filters_cond(doctype, filters, conditions).replace('%', '%%'),
|
||||||
mcond=get_match_cond(doctype),
|
mcond=get_match_cond(doctype),
|
||||||
key=frappe.db.escape(searchfield)),
|
key=frappe.db.escape(searchfield)),
|
||||||
{
|
{
|
||||||
'txt': "%%%s%%" % frappe.db.escape(txt),
|
'txt': "%"+frappe.db.escape(txt)+"%",
|
||||||
'_txt': txt.replace("%", ""),
|
'_txt': txt.replace("%", ""),
|
||||||
'start': start or 0,
|
'start': start or 0,
|
||||||
'page_len': page_len or 20
|
'page_len': page_len or 20
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ def validate_returned_items(doc):
|
|||||||
|
|
||||||
items_returned = False
|
items_returned = False
|
||||||
for d in doc.get("items"):
|
for d in doc.get("items"):
|
||||||
if flt(d.qty) < 0 or d.get('received_qty') < 0:
|
if d.item_code and (flt(d.qty) < 0 or d.get('received_qty') < 0):
|
||||||
if d.item_code not in valid_items:
|
if d.item_code not in valid_items:
|
||||||
frappe.throw(_("Row # {0}: Returned Item {1} does not exists in {2} {3}")
|
frappe.throw(_("Row # {0}: Returned Item {1} does not exists in {2} {3}")
|
||||||
.format(d.idx, d.item_code, doc.doctype, doc.return_against))
|
.format(d.idx, d.item_code, doc.doctype, doc.return_against))
|
||||||
@@ -107,6 +107,9 @@ def validate_returned_items(doc):
|
|||||||
|
|
||||||
items_returned = True
|
items_returned = True
|
||||||
|
|
||||||
|
elif d.item_name:
|
||||||
|
items_returned = True
|
||||||
|
|
||||||
if not items_returned:
|
if not items_returned:
|
||||||
frappe.throw(_("Atleast one item should be entered with negative quantity in return document"))
|
frappe.throw(_("Atleast one item should be entered with negative quantity in return document"))
|
||||||
|
|
||||||
|
|||||||
@@ -602,4 +602,5 @@ erpnext.patches.v11_1.delete_scheduling_tool
|
|||||||
erpnext.patches.v11_1.update_bank_transaction_status
|
erpnext.patches.v11_1.update_bank_transaction_status
|
||||||
erpnext.patches.v11_1.renamed_delayed_item_report
|
erpnext.patches.v11_1.renamed_delayed_item_report
|
||||||
erpnext.patches.v11_1.set_missing_opportunity_from
|
erpnext.patches.v11_1.set_missing_opportunity_from
|
||||||
erpnext.patches.v11_1.set_quotation_status
|
erpnext.patches.v11_1.set_quotation_status
|
||||||
|
erpnext.patches.v11_1.update_default_supplier_in_item_defaults
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
# Copyright (c) 2018, Frappe and Contributors
|
||||||
|
# License: GNU General Public License v3. See license.txt
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
import frappe
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
'''
|
||||||
|
default supplier was not set in the item defaults for multi company instance,
|
||||||
|
this patch will set the default supplier
|
||||||
|
|
||||||
|
'''
|
||||||
|
if not frappe.db.has_column('Item', 'default_supplier'):
|
||||||
|
return
|
||||||
|
|
||||||
|
frappe.reload_doc('stock', 'doctype', 'item_default')
|
||||||
|
frappe.reload_doc('stock', 'doctype', 'item')
|
||||||
|
|
||||||
|
companies = frappe.get_all("Company")
|
||||||
|
if len(companies) > 1:
|
||||||
|
frappe.db.sql(""" UPDATE `tabItem Default`, `tabItem`
|
||||||
|
SET `tabItem Default`.default_supplier = `tabItem`.default_supplier
|
||||||
|
WHERE
|
||||||
|
`tabItem Default`.parent = `tabItem`.name and `tabItem Default`.default_supplier is null
|
||||||
|
and `tabItem`.default_supplier is not null and `tabItem`.default_supplier != '' """)
|
||||||
@@ -85,7 +85,7 @@ class Gstr1Report(object):
|
|||||||
"rate": "",
|
"rate": "",
|
||||||
"taxable_value": 0,
|
"taxable_value": 0,
|
||||||
"cess_amount": 0,
|
"cess_amount": 0,
|
||||||
"type": 0
|
"type": ""
|
||||||
})
|
})
|
||||||
|
|
||||||
row = b2cs_output.get((rate, place_of_supply, ecommerce_gstin))
|
row = b2cs_output.get((rate, place_of_supply, ecommerce_gstin))
|
||||||
@@ -94,6 +94,7 @@ class Gstr1Report(object):
|
|||||||
row["rate"] = rate
|
row["rate"] = rate
|
||||||
row["taxable_value"] += sum([abs(net_amount)
|
row["taxable_value"] += sum([abs(net_amount)
|
||||||
for item_code, net_amount in self.invoice_items.get(inv).items() if item_code in items])
|
for item_code, net_amount in self.invoice_items.get(inv).items() if item_code in items])
|
||||||
|
row["cess_amount"] += flt(self.invoice_cess.get(inv), 2)
|
||||||
row["type"] = "E" if ecommerce_gstin else "OE"
|
row["type"] = "E" if ecommerce_gstin else "OE"
|
||||||
|
|
||||||
for key, value in iteritems(b2cs_output):
|
for key, value in iteritems(b2cs_output):
|
||||||
@@ -118,6 +119,10 @@ class Gstr1Report(object):
|
|||||||
for item_code, net_amount in self.invoice_items.get(invoice).items() if item_code in items])
|
for item_code, net_amount in self.invoice_items.get(invoice).items() if item_code in items])
|
||||||
row += [tax_rate or 0, taxable_value]
|
row += [tax_rate or 0, taxable_value]
|
||||||
|
|
||||||
|
for column in self.other_columns:
|
||||||
|
if column.get('fieldname') == 'cess_amount':
|
||||||
|
row.append(flt(self.invoice_cess.get(invoice), 2))
|
||||||
|
|
||||||
return row, taxable_value
|
return row, taxable_value
|
||||||
|
|
||||||
def get_invoice_data(self):
|
def get_invoice_data(self):
|
||||||
|
|||||||
@@ -202,11 +202,13 @@ def _get_cart_quotation(party=None):
|
|||||||
if quotation:
|
if quotation:
|
||||||
qdoc = frappe.get_doc("Quotation", quotation[0].name)
|
qdoc = frappe.get_doc("Quotation", quotation[0].name)
|
||||||
else:
|
else:
|
||||||
|
[company, price_list] = frappe.db.get_value("Shopping Cart Settings", None, ["company", "price_list"])
|
||||||
qdoc = frappe.get_doc({
|
qdoc = frappe.get_doc({
|
||||||
"doctype": "Quotation",
|
"doctype": "Quotation",
|
||||||
"naming_series": get_shopping_cart_settings().quotation_series or "QTN-CART-",
|
"naming_series": get_shopping_cart_settings().quotation_series or "QTN-CART-",
|
||||||
"quotation_to": party.doctype,
|
"quotation_to": party.doctype,
|
||||||
"company": frappe.db.get_value("Shopping Cart Settings", None, "company"),
|
"company": company,
|
||||||
|
"selling_price_list": price_list,
|
||||||
"order_type": "Shopping Cart",
|
"order_type": "Shopping Cart",
|
||||||
"status": "Draft",
|
"status": "Draft",
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
|
|||||||
Reference in New Issue
Block a user