mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-02 11:49:10 +00:00
Merge branch 'develop' into setup_wizard
This commit is contained in:
@@ -17,10 +17,6 @@ def execute():
|
||||
frappe.db.sql(""" update `tabAsset` ast, `tabWarehouse` wh
|
||||
set ast.location = wh.warehouse_name where ast.warehouse = wh.name""")
|
||||
|
||||
frappe.db.sql(""" update `tabAsset Movement` ast_mv
|
||||
set ast_mv.source_location = (select warehouse_name from `tabWarehouse` where name = ast_mv.source_warehouse),
|
||||
ast_mv.target_location = (select warehouse_name from `tabWarehouse` where name = ast_mv.target_warehouse)""")
|
||||
|
||||
for d in frappe.get_all('Asset'):
|
||||
doc = frappe.get_doc('Asset', d.name)
|
||||
if doc.calculate_depreciation:
|
||||
|
||||
@@ -15,13 +15,6 @@ def execute():
|
||||
|
||||
rename_field(doctype, "allow_transfer_for_manufacture", "include_item_in_manufacturing")
|
||||
|
||||
if frappe.db.has_column('BOM', 'allow_same_item_multiple_times'):
|
||||
frappe.db.sql(""" UPDATE tabBOM
|
||||
SET
|
||||
allow_same_item_multiple_times = 0
|
||||
WHERE
|
||||
trim(coalesce(allow_same_item_multiple_times, '')) = '' """)
|
||||
|
||||
for doctype in ['BOM', 'Work Order']:
|
||||
frappe.reload_doc('manufacturing', 'doctype', frappe.scrub(doctype))
|
||||
|
||||
|
||||
@@ -1,20 +1,30 @@
|
||||
import frappe
|
||||
import json
|
||||
from six import iteritems
|
||||
from frappe.model.naming import make_autoname
|
||||
|
||||
def execute():
|
||||
if "tax_type" not in frappe.db.get_table_columns("Item Tax"):
|
||||
return
|
||||
old_item_taxes = {}
|
||||
item_tax_templates = {}
|
||||
rename_template_to_untitled = []
|
||||
|
||||
frappe.reload_doc("accounts", "doctype", "item_tax_template_detail", force=1)
|
||||
frappe.reload_doc("accounts", "doctype", "item_tax_template", force=1)
|
||||
existing_templates = frappe.db.sql("""select template.name, details.tax_type, details.tax_rate
|
||||
from `tabItem Tax Template` template, `tabItem Tax Template Detail` details
|
||||
where details.parent=template.name
|
||||
""", as_dict=1)
|
||||
|
||||
if len(existing_templates):
|
||||
for d in existing_templates:
|
||||
item_tax_templates.setdefault(d.name, {})
|
||||
item_tax_templates[d.name][d.tax_type] = d.tax_rate
|
||||
|
||||
for d in frappe.db.sql("""select parent as item_code, tax_type, tax_rate from `tabItem Tax`""", as_dict=1):
|
||||
old_item_taxes.setdefault(d.item_code, [])
|
||||
old_item_taxes[d.item_code].append(d)
|
||||
|
||||
frappe.reload_doc("accounts", "doctype", "item_tax_template_detail", force=1)
|
||||
frappe.reload_doc("accounts", "doctype", "item_tax_template", force=1)
|
||||
frappe.reload_doc("stock", "doctype", "item", force=1)
|
||||
frappe.reload_doc("stock", "doctype", "item_tax", force=1)
|
||||
frappe.reload_doc("selling", "doctype", "quotation_item", force=1)
|
||||
@@ -27,6 +37,8 @@ def execute():
|
||||
frappe.reload_doc("accounts", "doctype", "purchase_invoice_item", force=1)
|
||||
frappe.reload_doc("accounts", "doctype", "accounts_settings", force=1)
|
||||
|
||||
frappe.db.auto_commit_on_many_writes = True
|
||||
|
||||
# for each item that have item tax rates
|
||||
for item_code in old_item_taxes.keys():
|
||||
# make current item's tax map
|
||||
@@ -34,8 +46,7 @@ def execute():
|
||||
for d in old_item_taxes[item_code]:
|
||||
item_tax_map[d.tax_type] = d.tax_rate
|
||||
|
||||
item_tax_template_name = get_item_tax_template(item_tax_templates, rename_template_to_untitled,
|
||||
item_tax_map, item_code)
|
||||
item_tax_template_name = get_item_tax_template(item_tax_templates, item_tax_map, item_code)
|
||||
|
||||
# update the item tax table
|
||||
item = frappe.get_doc("Item", item_code)
|
||||
@@ -49,35 +60,33 @@ def execute():
|
||||
'Quotation', 'Sales Order', 'Delivery Note', 'Sales Invoice',
|
||||
'Supplier Quotation', 'Purchase Order', 'Purchase Receipt', 'Purchase Invoice'
|
||||
]
|
||||
|
||||
for dt in doctypes:
|
||||
for d in frappe.db.sql("""select name, parent, item_code, item_tax_rate from `tab{0} Item`
|
||||
where ifnull(item_tax_rate, '') not in ('', '{{}}')""".format(dt), as_dict=1):
|
||||
where ifnull(item_tax_rate, '') not in ('', '{{}}')
|
||||
and item_tax_template is NULL""".format(dt), as_dict=1):
|
||||
item_tax_map = json.loads(d.item_tax_rate)
|
||||
item_tax_template = get_item_tax_template(item_tax_templates, rename_template_to_untitled,
|
||||
item_tax_template_name = get_item_tax_template(item_tax_templates,
|
||||
item_tax_map, d.item_code, d.parent)
|
||||
frappe.db.set_value(dt + " Item", d.name, "item_tax_template", item_tax_template)
|
||||
frappe.db.set_value(dt + " Item", d.name, "item_tax_template", item_tax_template_name)
|
||||
|
||||
idx = 1
|
||||
for oldname in rename_template_to_untitled:
|
||||
frappe.rename_doc("Item Tax Template", oldname, "Untitled {}".format(idx))
|
||||
idx += 1
|
||||
frappe.db.auto_commit_on_many_writes = False
|
||||
|
||||
settings = frappe.get_single("Accounts Settings")
|
||||
settings.add_taxes_from_item_tax_template = 0
|
||||
settings.determine_address_tax_category_from = "Billing Address"
|
||||
settings.save()
|
||||
|
||||
def get_item_tax_template(item_tax_templates, rename_template_to_untitled, item_tax_map, item_code, parent=None):
|
||||
def get_item_tax_template(item_tax_templates, item_tax_map, item_code, parent=None):
|
||||
# search for previously created item tax template by comparing tax maps
|
||||
for template, item_tax_template_map in iteritems(item_tax_templates):
|
||||
if item_tax_map == item_tax_template_map:
|
||||
if not parent:
|
||||
rename_template_to_untitled.append(template)
|
||||
return template
|
||||
|
||||
# if no item tax template found, create one
|
||||
item_tax_template = frappe.new_doc("Item Tax Template")
|
||||
item_tax_template.title = "{}--{}".format(parent, item_code) if parent else "Item-{}".format(item_code)
|
||||
item_tax_template.title = make_autoname("Item Tax Template-.####")
|
||||
|
||||
for tax_type, tax_rate in iteritems(item_tax_map):
|
||||
if not frappe.db.exists("Account", tax_type):
|
||||
parts = tax_type.strip().split(" - ")
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
# Copyright (c) 2018, Frappe and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
from frappe.utils import getdate, today
|
||||
|
||||
def execute():
|
||||
''' Delete leave ledger entry created
|
||||
via leave applications with status != Approved '''
|
||||
if not frappe.db.a_row_exists("Leave Ledger Entry"):
|
||||
return
|
||||
|
||||
leave_application_list = get_denied_leave_application_list()
|
||||
if leave_application_list:
|
||||
delete_denied_leaves_from_leave_ledger_entry(leave_application_list)
|
||||
|
||||
def get_denied_leave_application_list():
|
||||
return frappe.db.sql_list(''' Select name from `tabLeave Application` where status <> 'Approved' ''')
|
||||
|
||||
def delete_denied_leaves_from_leave_ledger_entry(leave_application_list):
|
||||
if leave_application_list:
|
||||
frappe.db.sql(''' Delete
|
||||
FROM `tabLeave Ledger Entry`
|
||||
WHERE
|
||||
transaction_type = 'Leave Application'
|
||||
AND transaction_name in (%s) ''' % (', '.join(['%s'] * len(leave_application_list))), #nosec
|
||||
tuple(leave_application_list))
|
||||
17
erpnext/patches/v12_0/set_cwip_and_delete_asset_settings.py
Normal file
17
erpnext/patches/v12_0/set_cwip_and_delete_asset_settings.py
Normal file
@@ -0,0 +1,17 @@
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
from frappe.utils import cint
|
||||
|
||||
|
||||
def execute():
|
||||
'''Get 'Disable CWIP Accounting value' from Asset Settings, set it in 'Enable Capital Work in Progress Accounting' field
|
||||
in Company, delete Asset Settings '''
|
||||
|
||||
if frappe.db.exists("DocType", "Asset Settings"):
|
||||
frappe.reload_doctype("Asset Category")
|
||||
cwip_value = frappe.db.get_single_value("Asset Settings", "disable_cwip_accounting")
|
||||
|
||||
frappe.db.sql("""UPDATE `tabAsset Category` SET enable_cwip_accounting = %s""", cint(cwip_value))
|
||||
|
||||
frappe.db.sql("""DELETE FROM `tabSingles` where doctype = 'Asset Settings'""")
|
||||
frappe.delete_doc_if_exists("DocType", "Asset Settings")
|
||||
@@ -3,8 +3,12 @@ from frappe.utils import flt
|
||||
from erpnext.selling.doctype.sales_order.sales_order import update_produced_qty_in_so_item
|
||||
|
||||
def execute():
|
||||
frappe.reload_doctype('Sales Order Item')
|
||||
frappe.reload_doctype('Sales Order')
|
||||
sales_order_items = frappe.db.get_all('Sales Order Item', ['name'])
|
||||
for so_item in sales_order_items:
|
||||
update_produced_qty_in_so_item(so_item.get('name'))
|
||||
frappe.reload_doctype('Sales Order Item')
|
||||
frappe.reload_doctype('Sales Order')
|
||||
|
||||
for d in frappe.get_all('Work Order',
|
||||
fields = ['sales_order', 'sales_order_item'],
|
||||
filters={'sales_order': ('!=', ''), 'sales_order_item': ('!=', '')}):
|
||||
|
||||
# update produced qty in sales order
|
||||
update_produced_qty_in_so_item(d.sales_order, d.sales_order_item)
|
||||
@@ -0,0 +1,8 @@
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
|
||||
def execute():
|
||||
frappe.reload_doc("accounts", "doctype", "pricing_rule")
|
||||
|
||||
frappe.db.sql(""" UPDATE `tabPricing Rule` SET price_or_product_discount = 'Price'
|
||||
WHERE ifnull(price_or_product_discount,'') = '' """)
|
||||
Reference in New Issue
Block a user