diff --git a/.github/workflows/patch.yml b/.github/workflows/patch.yml
index 7c9e0272c95a..b96a3d6bbeda 100644
--- a/.github/workflows/patch.yml
+++ b/.github/workflows/patch.yml
@@ -66,4 +66,8 @@ jobs:
run: bash ${GITHUB_WORKSPACE}/.github/helper/install.sh
- name: Run Patch Tests
- run: cd ~/frappe-bench/ && wget http://build.erpnext.com/20171108_190013_955977f8_database.sql.gz && bench --site test_site --force restore ~/frappe-bench/20171108_190013_955977f8_database.sql.gz && bench --site test_site migrate
+ run: |
+ cd ~/frappe-bench/
+ wget https://erpnext.com/files/v10-erpnext.sql.gz
+ bench --site test_site --force restore ~/frappe-bench/v10-erpnext.sql.gz
+ bench --site test_site migrate
diff --git a/erpnext/accounts/report/account_balance/account_balance.py b/erpnext/accounts/report/account_balance/account_balance.py
index 65e7d789bb01..be64c327fdf3 100644
--- a/erpnext/accounts/report/account_balance/account_balance.py
+++ b/erpnext/accounts/report/account_balance/account_balance.py
@@ -58,11 +58,9 @@ def get_conditions(filters):
def get_data(filters):
data = []
-
conditions = get_conditions(filters)
-
accounts = frappe.db.get_all("Account", fields=["name", "account_currency"],
- filters=conditions)
+ filters=conditions, order_by='name')
for d in accounts:
balance = get_balance_on(d.name, date=filters.report_date)
diff --git a/erpnext/accounts/report/account_balance/test_account_balance.py b/erpnext/accounts/report/account_balance/test_account_balance.py
index b6ced312d099..14ddf4a30fc2 100644
--- a/erpnext/accounts/report/account_balance/test_account_balance.py
+++ b/erpnext/accounts/report/account_balance/test_account_balance.py
@@ -23,7 +23,7 @@ def test_account_balance(self):
expected_data = [
{
- "account": 'Sales - _TC2',
+ "account": 'Direct Income - _TC2',
"currency": 'EUR',
"balance": -100.0,
},
@@ -33,20 +33,20 @@ def test_account_balance(self):
"balance": -100.0,
},
{
- "account": 'Service - _TC2',
+ "account": 'Indirect Income - _TC2',
"currency": 'EUR',
"balance": 0.0,
},
{
- "account": 'Direct Income - _TC2',
+ "account": 'Sales - _TC2',
"currency": 'EUR',
"balance": -100.0,
},
{
- "account": 'Indirect Income - _TC2',
+ "account": 'Service - _TC2',
"currency": 'EUR',
"balance": 0.0,
- },
+ }
]
self.assertEqual(expected_data, report[1])
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 93689a0ef374..ed6fefdd8793 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -1,494 +1,19 @@
-execute:import unidecode # new requirement
-erpnext.patches.v8_0.move_perpetual_inventory_setting
-erpnext.patches.v8_9.set_print_zero_amount_taxes
erpnext.patches.v12_0.update_is_cancelled_field
erpnext.patches.v11_0.rename_production_order_to_work_order
erpnext.patches.v11_0.refactor_naming_series
erpnext.patches.v11_0.refactor_autoname_naming
-erpnext.patches.v10_0.rename_schools_to_education
-erpnext.patches.v4_0.validate_v3_patch
-erpnext.patches.v4_0.fix_employee_user_id
-erpnext.patches.v4_0.remove_employee_role_if_no_employee
-erpnext.patches.v4_0.update_user_properties
-erpnext.patches.v4_0.apply_user_permissions
-erpnext.patches.v4_0.move_warehouse_user_to_restrictions
-erpnext.patches.v4_0.global_defaults_to_system_settings
-erpnext.patches.v4_0.update_incharge_name_to_sales_person_in_maintenance_schedule
execute:frappe.reload_doc("accounts", "doctype", "POS Payment Method") #2020-05-28
execute:frappe.reload_doc("HR", "doctype", "HR Settings") #2020-01-16 #2020-07-24
-execute:frappe.reload_doc('stock', 'doctype', 'warehouse') # 2017-04-24
-execute:frappe.reload_doc('accounts', 'doctype', 'sales_invoice') # 2016-08-31
-execute:frappe.reload_doc('selling', 'doctype', 'sales_order') # 2014-01-29
-execute:frappe.reload_doc('selling', 'doctype', 'quotation') # 2014-01-29
-execute:frappe.reload_doc('stock', 'doctype', 'delivery_note') # 2014-01-29
-erpnext.patches.v4_0.reload_sales_print_format
-execute:frappe.reload_doc('accounts', 'doctype', 'purchase_invoice') # 2014-01-29
-execute:frappe.reload_doc('buying', 'doctype', 'purchase_order') # 2014-01-29
-execute:frappe.reload_doc('buying', 'doctype', 'supplier_quotation') # 2014-01-29
-execute:frappe.reload_doc('stock', 'doctype', 'purchase_receipt') # 2014-01-29
-execute:frappe.reload_doc('accounts', 'doctype', 'pos_setting') # 2014-01-29
-execute:frappe.reload_doc('selling', 'doctype', 'customer') # 2014-01-29
-execute:frappe.reload_doc('buying', 'doctype', 'supplier') # 2014-01-29
-execute:frappe.reload_doc('accounts', 'doctype', 'asset_category')
-execute:frappe.reload_doc('accounts', 'doctype', 'pricing_rule')
-erpnext.patches.v4_0.map_charge_to_taxes_and_charges
-execute:frappe.reload_doc('support', 'doctype', 'newsletter') # 2014-01-31
-execute:frappe.reload_doc('hr', 'doctype', 'employee') # 2014-02-03
-execute:frappe.db.sql("update tabPage set module='Core' where name='Setup'")
-erpnext.patches.v5_2.change_item_selects_to_checks
-execute:frappe.reload_doctype('Item')
-erpnext.patches.v4_0.fields_to_be_renamed
-erpnext.patches.v4_0.rename_sitemap_to_route
-erpnext.patches.v7_0.re_route #2016-06-27
-erpnext.patches.v4_0.fix_contact_address
-erpnext.patches.v4_0.customer_discount_to_pricing_rule
-execute:frappe.db.sql("""delete from `tabWebsite Item Group` where ifnull(item_group, '')=''""")
-erpnext.patches.v4_0.remove_module_home_pages
-erpnext.patches.v4_0.split_email_settings
-erpnext.patches.v4_0.import_country_codes
-erpnext.patches.v4_0.countrywise_coa
-execute:frappe.delete_doc("DocType", "MIS Control")
-execute:frappe.delete_doc("Page", "Financial Statements")
-execute:frappe.delete_doc("DocType", "Stock Ledger")
-execute:frappe.delete_doc("DocType", "Grade")
-execute:frappe.db.sql("delete from `tabWebsite Item Group` where ifnull(item_group, '')=''")
-execute:frappe.delete_doc("Print Format", "SalesInvoice")
-execute:import frappe.defaults;frappe.defaults.clear_default("price_list_currency")
-erpnext.patches.v4_0.update_account_root_type
-execute:frappe.delete_doc("Report", "Purchase In Transit")
-erpnext.patches.v4_0.new_address_template
-execute:frappe.delete_doc("DocType", "SMS Control")
-execute:frappe.delete_doc_if_exists("DocType", "Bulk SMS") #2015-08-18
-erpnext.patches.v4_0.fix_case_of_hr_module_def
-erpnext.patches.v4_0.fix_address_template
-
-# WATCHOUT: This patch reload's documents
-erpnext.patches.v4_0.reset_permissions_for_masters
-erpnext.patches.v6_20x.rename_project_name_to_project #2016-03-14
-
-erpnext.patches.v4_0.update_tax_amount_after_discount
-execute:frappe.permissions.reset_perms("GL Entry") #2014-06-09
-execute:frappe.permissions.reset_perms("Stock Ledger Entry") #2014-06-09
-erpnext.patches.v4_0.create_custom_fields_for_india_specific_fields
-erpnext.patches.v4_0.save_default_letterhead
-erpnext.patches.v4_0.update_custom_print_formats_for_renamed_fields
-erpnext.patches.v4_0.update_other_charges_in_custom_purchase_print_formats
-erpnext.patches.v4_0.create_price_list_if_missing
-execute:frappe.db.sql("update `tabItem` set end_of_life=null where end_of_life='0000-00-00'") #2014-06-16
-erpnext.patches.v4_0.update_users_report_view_settings
-erpnext.patches.v4_0.set_pricing_rule_for_buying_or_selling
-erpnext.patches.v4_1.set_outgoing_email_footer
-erpnext.patches.v4_1.fix_sales_order_delivered_status
-erpnext.patches.v4_1.fix_delivery_and_billing_status
-execute:frappe.db.sql("update `tabAccount` set root_type='Liability' where root_type='Income' and report_type='Balance Sheet'")
-execute:frappe.delete_doc("DocType", "Payment to Invoice Matching Tool") # 29-07-2014
-execute:frappe.delete_doc("DocType", "Payment to Invoice Matching Tool Detail") # 29-07-2014
-execute:frappe.delete_doc("Page", "trial-balance") #2014-07-22
-erpnext.patches.v4_2.delete_old_print_formats #2014-07-29
-erpnext.patches.v4_2.toggle_rounded_total #2014-07-30
-erpnext.patches.v4_2.fix_account_master_type
-erpnext.patches.v4_2.update_project_milestones
-erpnext.patches.v4_2.add_currency_turkish_lira #2014-08-08
-execute:frappe.delete_doc("DocType", "Landed Cost Wizard")
-erpnext.patches.v4_2.default_website_style
-erpnext.patches.v4_2.set_company_country
-erpnext.patches.v4_2.update_sales_order_invoice_field_name
-erpnext.patches.v4_2.seprate_manufacture_and_repack
-execute:frappe.delete_doc("Report", "Warehouse-Wise Stock Balance")
-execute:frappe.delete_doc("DocType", "Purchase Request")
-execute:frappe.delete_doc("DocType", "Purchase Request Item")
-erpnext.patches.v4_2.recalculate_bom_cost
-erpnext.patches.v4_2.fix_gl_entries_for_stock_transactions
erpnext.patches.v4_2.update_requested_and_ordered_qty #2021-03-31
-execute:frappe.rename_doc("DocType", "Support Ticket", "Issue", force=True)
-erpnext.patches.v4_4.make_email_accounts
-execute:frappe.delete_doc("DocType", "Contact Control")
-erpnext.patches.v4_2.discount_amount
-erpnext.patches.v4_2.reset_bom_costs
-erpnext.patches.v5_0.update_frozen_accounts_permission_role
-erpnext.patches.v5_0.update_dn_against_doc_fields
-execute:frappe.db.sql("update `tabMaterial Request` set material_request_type = 'Material Transfer' where material_request_type = 'Transfer'")
-execute:frappe.reload_doc('stock', 'doctype', 'item')
-erpnext.patches.v5_0.set_default_company_in_bom
-execute:frappe.reload_doc('crm', 'doctype', 'lead')
-execute:frappe.reload_doc('crm', 'doctype', 'opportunity')
-erpnext.patches.v5_0.rename_taxes_and_charges_master
-erpnext.patches.v5_1.sales_bom_rename
-erpnext.patches.v5_0.rename_table_fieldnames
-execute:frappe.db.sql("update `tabJournal Entry` set voucher_type='Journal Entry' where ifnull(voucher_type, '')=''")
-erpnext.patches.v5_0.is_group
-erpnext.patches.v4_2.party_model
-erpnext.patches.v5_0.party_model_patch_fix
-erpnext.patches.v4_1.fix_jv_remarks
-erpnext.patches.v4_2.update_landed_cost_voucher
-erpnext.patches.v4_2.set_item_has_batch
-erpnext.patches.v4_2.update_stock_uom_for_dn_in_sle
-erpnext.patches.v5_0.recalculate_total_amount_in_jv
-erpnext.patches.v5_0.update_companywise_payment_account
-erpnext.patches.v5_0.remove_birthday_events
-erpnext.patches.v5_0.update_item_name_in_bom
-erpnext.patches.v5_0.rename_customer_issue
-erpnext.patches.v5_0.rename_total_fields
-erpnext.patches.v5_0.new_crm_module
-erpnext.patches.v5_0.rename_customer_issue
-erpnext.patches.v5_0.update_material_transfer_for_manufacture
-execute:frappe.reload_doc('crm', 'doctype', 'opportunity_item')
-erpnext.patches.v5_0.update_item_description_and_image
-erpnext.patches.v5_0.update_material_transferred_for_manufacturing
-erpnext.patches.v5_0.stock_entry_update_value
-erpnext.patches.v5_0.convert_stock_reconciliation
-erpnext.patches.v5_0.update_projects
-erpnext.patches.v5_0.item_patches
-erpnext.patches.v5_0.update_journal_entry_title
-erpnext.patches.v5_0.taxes_and_totals_in_party_currency
-erpnext.patches.v5_0.replace_renamed_fields_in_custom_scripts_and_print_formats
-erpnext.patches.v5_0.update_from_bom
-erpnext.patches.v5_0.update_account_types
-erpnext.patches.v5_0.update_sms_sender
-erpnext.patches.v5_0.set_appraisal_remarks
-erpnext.patches.v5_0.update_time_log_title
-erpnext.patches.v7_0.create_warehouse_nestedset
-erpnext.patches.v7_0.merge_account_type_stock_and_warehouse_to_stock
-erpnext.patches.v7_0.set_is_group_for_warehouse
-erpnext.patches.v7_2.stock_uom_in_selling
-erpnext.patches.v4_2.repost_sle_for_si_with_no_warehouse
-erpnext.patches.v5_0.newsletter
-execute:frappe.delete_doc("DocType", "Chart of Accounts")
-execute:frappe.delete_doc("DocType", "Style Settings")
-erpnext.patches.v5_0.update_opportunity
-erpnext.patches.v5_0.opportunity_not_submittable
-execute:frappe.permissions.reset_perms("Purchase Taxes and Charges Template") #2014-06-09
-execute:frappe.permissions.reset_perms("Expense Claim Type") #2014-06-19
-erpnext.patches.v5_0.execute_on_doctype_update
-erpnext.patches.v4_2.fix_recurring_orders
-erpnext.patches.v4_2.delete_gl_entries_for_cancelled_invoices
-erpnext.patches.v5_0.project_costing
-erpnext.patches.v5_0.update_temporary_account
-erpnext.patches.v5_0.update_advance_paid
-erpnext.patches.v5_0.link_warehouse_with_account
-execute:frappe.delete_doc("Page", "stock-ledger")
-execute:frappe.delete_doc("Page","stock-level")
-erpnext.patches.v5_0.reclculate_planned_operating_cost_in_production_order
-erpnext.patches.v5_0.repost_requested_qty
-erpnext.patches.v5_0.fix_taxes_and_totals_in_party_currency
-erpnext.patches.v5_0.update_tax_amount_after_discount_in_purchase_cycle
-erpnext.patches.v5_0.rename_pos_setting
-erpnext.patches.v5_0.update_operation_description
-erpnext.patches.v5_0.set_footer_address
-execute:frappe.db.set_value("Backup Manager", None, "send_backups_to_dropbox", 1 if frappe.db.get_value("Backup Manager", None, "upload_backups_to_dropbox") in ("Daily", "Weekly") else 0)
-execute:frappe.db.sql_list("delete from `tabDocPerm` where parent='Issue' and modified_by='Administrator' and role='Guest'")
-erpnext.patches.v5_0.update_item_and_description_again
-erpnext.patches.v6_0.multi_currency
-erpnext.patches.v7_0.create_budget_record
-erpnext.patches.v5_0.repost_gle_for_jv_with_multiple_party
-erpnext.patches.v5_0.portal_fixes
-erpnext.patches.v5_0.reset_values_in_tools # 02-05-2016
-execute:frappe.delete_doc("Page", "users")
-erpnext.patches.v5_0.update_material_transferred_for_manufacturing_again
-erpnext.patches.v5_0.index_on_account_and_gl_entry
-execute:frappe.db.sql("""delete from `tabProject Task`""")
-erpnext.patches.v5_0.update_item_desc_in_invoice
-erpnext.patches.v5_1.fix_against_account
-execute:frappe.rename_doc("DocType", "Salary Manager", "Process Payroll", force=True)
-erpnext.patches.v5_1.rename_roles
-erpnext.patches.v5_1.default_bom
-execute:frappe.delete_doc("DocType", "Party Type")
-execute:frappe.delete_doc("Module Def", "Contacts")
-erpnext.patches.v5_4.fix_reserved_qty_and_sle_for_packed_items # 30-07-2015
-execute:frappe.reload_doctype("Leave Type")
-execute:frappe.db.sql("update `tabLeave Type` set include_holiday=0")
-erpnext.patches.v5_4.set_root_and_report_type
-erpnext.patches.v5_4.notify_system_managers_regarding_wrong_tax_calculation
-erpnext.patches.v5_4.fix_invoice_outstanding
-execute:frappe.db.sql("update `tabStock Ledger Entry` set stock_queue = '[]' where voucher_type = 'Stock Reconciliation' and ifnull(qty_after_transaction, 0) = 0")
-erpnext.patches.v5_4.fix_missing_item_images
-erpnext.patches.v5_4.stock_entry_additional_costs
-erpnext.patches.v5_4.cleanup_journal_entry #2015-08-14
erpnext.patches.v5_7.update_item_description_based_on_item_master
-erpnext.patches.v5_7.item_template_attributes
-execute:frappe.delete_doc_if_exists("DocType", "Manage Variants")
-execute:frappe.delete_doc_if_exists("DocType", "Manage Variants Item")
erpnext.patches.v4_2.repost_reserved_qty #2021-03-31
-erpnext.patches.v5_4.update_purchase_cost_against_project
-erpnext.patches.v5_8.update_order_reference_in_return_entries
-erpnext.patches.v5_8.add_credit_note_print_heading
-execute:frappe.delete_doc_if_exists("Print Format", "Credit Note - Negative Invoice")
-
-# V6.0
-erpnext.patches.v6_0.set_default_title # 2015-09-03
-erpnext.patches.v6_0.default_activity_rate
-execute:frappe.db.set_value("Stock Settings", None, "automatically_set_serial_nos_based_on_fifo", 1)
-execute:frappe.db.sql("""update `tabProject` set percent_complete=round(percent_complete, 2) where percent_complete is not null""")
-erpnext.patches.v6_0.fix_outstanding_amount
-erpnext.patches.v6_0.fix_planned_qty
-erpnext.patches.v6_2.remove_newsletter_duplicates
-erpnext.patches.v6_2.fix_missing_default_taxes_and_lead
-erpnext.patches.v6_3.convert_applicable_territory
-erpnext.patches.v6_4.round_status_updater_percentages
-erpnext.patches.v6_4.repost_gle_for_journal_entries_where_reference_name_missing
-erpnext.patches.v6_4.fix_journal_entries_due_to_reconciliation
-erpnext.patches.v6_4.fix_status_in_sales_and_purchase_order
-erpnext.patches.v6_4.fix_modified_in_sales_order_and_purchase_order
-erpnext.patches.v6_4.fix_duplicate_bins
-erpnext.patches.v6_4.fix_sales_order_maintenance_status
-erpnext.patches.v6_4.email_digest_update
-
-# delete shopping cart doctypes
-execute:frappe.delete_doc_if_exists("DocType", "Applicable Territory")
-execute:frappe.delete_doc_if_exists("DocType", "Shopping Cart Price List")
-execute:frappe.delete_doc_if_exists("DocType", "Shopping Cart Taxes and Charges Master")
-
-erpnext.patches.v6_4.set_user_in_contact
-erpnext.patches.v6_4.make_image_thumbnail #2015-10-20
-erpnext.patches.v6_5.show_in_website_for_template_item
-erpnext.patches.v6_4.fix_expense_included_in_valuation
-execute:frappe.delete_doc_if_exists("Report", "Item-wise Last Purchase Rate")
-erpnext.patches.v6_6.fix_website_image
-erpnext.patches.v6_6.remove_fiscal_year_from_leave_allocation
-execute:frappe.delete_doc_if_exists("DocType", "Stock UOM Replace Utility")
-erpnext.patches.v6_8.make_webform_standard #2015-11-23
-erpnext.patches.v6_8.move_drop_ship_to_po_items
-erpnext.patches.v6_10.fix_ordered_received_billed
-erpnext.patches.v6_10.fix_jv_total_amount #2015-11-30
-erpnext.patches.v6_10.email_digest_default_quote
-erpnext.patches.v6_10.fix_billed_amount_in_drop_ship_po
-erpnext.patches.v6_10.fix_delivery_status_of_drop_ship_item #2015-12-08
-erpnext.patches.v5_8.tax_rule #2015-12-08
-erpnext.patches.v6_12.set_overdue_tasks
-erpnext.patches.v6_16.update_billing_status_in_dn_and_pr
-erpnext.patches.v6_16.create_manufacturer_records
-execute:frappe.db.sql("update `tabPricing Rule` set title=name where title='' or title is null") #2016-01-27
-erpnext.patches.v6_20.set_party_account_currency_in_orders
-erpnext.patches.v6_19.comment_feed_communication
-erpnext.patches.v6_21.fix_reorder_level
-erpnext.patches.v6_21.rename_material_request_fields
-erpnext.patches.v6_23.update_stopped_status_to_closed
-erpnext.patches.v6_24.set_recurring_id
-erpnext.patches.v6_20x.set_compact_print
-execute:frappe.delete_doc_if_exists("Web Form", "contact") #2016-03-10
-erpnext.patches.v6_20x.remove_fiscal_year_from_holiday_list
-erpnext.patches.v6_24.map_customer_address_to_shipping_address_on_po
-erpnext.patches.v6_27.fix_recurring_order_status
-erpnext.patches.v6_20x.update_product_bundle_description
-erpnext.patches.v7_0.update_party_status #2016-09-22
-erpnext.patches.v7_0.remove_features_setup
-erpnext.patches.v7_0.update_home_page
-execute:frappe.delete_doc_if_exists("Page", "financial-analytics")
-erpnext.patches.v7_0.update_project_in_gl_entry
-execute:frappe.db.sql('update tabQuotation set status="Cancelled" where docstatus=2')
-execute:frappe.rename_doc("DocType", "Payments", "Sales Invoice Payment", force=True)
-erpnext.patches.v7_0.update_mins_to_first_response
-erpnext.patches.v6_20x.repost_valuation_rate_for_negative_inventory
-erpnext.patches.v7_0.migrate_mode_of_payments_v6_to_v7
-erpnext.patches.v7_0.system_settings_setup_complete
-erpnext.patches.v7_0.set_naming_series_for_timesheet #2016-07-27
-execute:frappe.reload_doc('projects', 'doctype', 'project')
-execute:frappe.reload_doc('projects', 'doctype', 'project_user')
-erpnext.patches.v7_0.convert_timelogbatch_to_timesheet
-erpnext.patches.v7_0.convert_timelog_to_timesheet
-erpnext.patches.v7_0.move_timelogbatch_from_salesinvoiceitem_to_salesinvoicetimesheet
-erpnext.patches.v7_0.remove_doctypes_and_reports #2016-10-29
-erpnext.patches.v7_0.update_maintenance_module_in_doctype
-erpnext.patches.v7_0.update_prevdoc_values_for_supplier_quotation_item
-erpnext.patches.v7_0.rename_advance_table_fields
-erpnext.patches.v7_0.rename_salary_components
-erpnext.patches.v7_0.rename_prevdoc_fields
-erpnext.patches.v7_0.rename_time_sheet_doctype
-execute:frappe.delete_doc_if_exists("Report", "Customers Not Buying Since Long Time")
-erpnext.patches.v7_0.make_is_group_fieldtype_as_check
-execute:frappe.reload_doc('projects', 'doctype', 'timesheet') #2016-09-12
-erpnext.patches.v7_1.rename_field_timesheet
-execute:frappe.delete_doc_if_exists("Report", "Employee Holiday Attendance")
-execute:frappe.delete_doc_if_exists("DocType", "Payment Tool")
-execute:frappe.delete_doc_if_exists("DocType", "Payment Tool Detail")
-erpnext.patches.v7_0.setup_account_table_for_expense_claim_type_if_exists
-erpnext.patches.v7_0.migrate_schools_to_erpnext
-erpnext.patches.v7_1.update_lead_source
-erpnext.patches.v6_20x.remove_customer_supplier_roles
-erpnext.patches.v7_0.remove_administrator_role_in_doctypes
-erpnext.patches.v7_0.rename_fee_amount_to_fee_component
-erpnext.patches.v7_0.calculate_total_costing_amount
-erpnext.patches.v7_0.fix_nonwarehouse_ledger_gl_entries_for_transactions
-erpnext.patches.v7_0.remove_old_earning_deduction_doctypes
-erpnext.patches.v7_0.make_guardian
-erpnext.patches.v7_0.update_refdoc_in_landed_cost_voucher
-erpnext.patches.v7_0.set_material_request_type_in_item
-erpnext.patches.v7_0.rename_examination_to_assessment
-erpnext.patches.v7_0.set_portal_settings
-erpnext.patches.v7_0.update_change_amount_account
-erpnext.patches.v7_0.fix_duplicate_icons
-erpnext.patches.v7_0.repost_gle_for_pos_sales_return
-erpnext.patches.v7_1.update_total_billing_hours
-erpnext.patches.v7_1.update_component_type
-erpnext.patches.v7_0.repost_gle_for_pos_sales_return
-erpnext.patches.v7_0.update_missing_employee_in_timesheet
-erpnext.patches.v7_0.update_status_for_timesheet
-erpnext.patches.v7_0.set_party_name_in_payment_entry
-erpnext.patches.v7_1.set_student_guardian
-erpnext.patches.v7_0.update_conversion_factor_in_supplier_quotation_item
-erpnext.patches.v7_1.move_sales_invoice_from_parent_to_child_timesheet
-execute:frappe.db.sql("update `tabTimesheet` ts, `tabEmployee` emp set ts.employee_name = emp.employee_name where emp.name = ts.employee and ts.employee_name is null and ts.employee is not null")
-erpnext.patches.v7_1.fix_link_for_customer_from_lead
-execute:frappe.db.sql("delete from `tabTimesheet Detail` where NOT EXISTS (select name from `tabTimesheet` where name = `tabTimesheet Detail`.parent)")
-erpnext.patches.v7_0.update_mode_of_payment_type
-
-execute:frappe.reload_doctype('Employee') #2016-10-18
-execute:frappe.db.sql("update `tabEmployee` set prefered_contact_email = IFNULL(prefered_contact_email,'') ")
execute:frappe.reload_doc("Payroll", "doctype", "salary_slip")
-execute:frappe.db.sql("update `tabSalary Slip` set posting_date=creation")
-execute:frappe.reload_doc("stock", "doctype", "stock_settings")
-erpnext.patches.v8_0.create_domain_docs #16-05-2017
-erpnext.patches.v7_1.update_portal_roles
-erpnext.patches.v7_1.set_total_amount_currency_in_je
-finally:erpnext.patches.v7_0.update_timesheet_communications
-erpnext.patches.v7_0.update_status_of_zero_amount_sales_order
-erpnext.patches.v7_1.add_field_for_task_dependent
-erpnext.patches.v7_0.repost_bin_qty_and_item_projected_qty
-erpnext.patches.v7_1.set_prefered_contact_email
-execute:frappe.reload_doc('accounts', 'doctype', 'accounts_settings')
-execute:frappe.db.set_value("Accounts Settings", "Accounts Settings", "unlink_payment_on_cancellation_of_invoice", 0)
-execute:frappe.db.sql("update `tabStock Entry` set total_amount = 0 where purpose in('Repack', 'Manufacture')")
-erpnext.patches.v7_1.save_stock_settings
-erpnext.patches.v7_0.repost_gle_for_pi_with_update_stock #2016-11-01
-erpnext.patches.v7_1.add_account_user_role_for_timesheet
-erpnext.patches.v7_0.set_base_amount_in_invoice_payment_table
-erpnext.patches.v7_1.update_invoice_status
-erpnext.patches.v7_0.po_status_issue_for_pr_return
-erpnext.patches.v7_1.update_missing_salary_component_type
-erpnext.patches.v7_1.rename_quality_inspection_field
-erpnext.patches.v7_0.update_autoname_field
-erpnext.patches.v7_1.update_bom_base_currency
-erpnext.patches.v7_0.update_status_of_po_so
-erpnext.patches.v7_1.set_budget_against_as_cost_center
-erpnext.patches.v7_1.set_currency_exchange_date
-erpnext.patches.v7_1.set_sales_person_status
-erpnext.patches.v7_1.repost_stock_for_deleted_bins_for_merging_items
-erpnext.patches.v7_2.update_website_for_variant
-erpnext.patches.v7_2.update_assessment_modules
-erpnext.patches.v7_2.update_doctype_status
-erpnext.patches.v7_2.update_salary_slips
-erpnext.patches.v7_2.delete_fleet_management_module_def
-erpnext.patches.v7_2.contact_address_links
-erpnext.patches.v7_2.mark_students_active
-erpnext.patches.v7_2.set_null_value_to_fields
-erpnext.patches.v7_2.update_guardian_name_in_student_master
-erpnext.patches.v7_2.update_abbr_in_salary_slips
-erpnext.patches.v7_2.rename_evaluation_criteria
-erpnext.patches.v7_2.update_party_type
-erpnext.patches.v7_2.setup_auto_close_settings
-erpnext.patches.v7_2.empty_supplied_items_for_non_subcontracted
-erpnext.patches.v7_2.arrear_leave_encashment_as_salary_component
-erpnext.patches.v7_2.rename_att_date_attendance
-erpnext.patches.v7_2.update_attendance_docstatus
-erpnext.patches.v7_2.make_all_assessment_group
-erpnext.patches.v8_0.repost_reserved_qty_for_multiple_sales_uom
-erpnext.patches.v8_0.addresses_linked_to_lead
-execute:frappe.delete_doc('DocType', 'Purchase Common')
-erpnext.patches.v8_0.update_stock_qty_value_in_purchase_invoice
-erpnext.patches.v8_0.update_supplier_address_in_stock_entry
-erpnext.patches.v8_0.rename_is_sample_item_to_allow_zero_valuation_rate
-erpnext.patches.v8_0.set_null_to_serial_nos_for_disabled_sales_invoices
-erpnext.patches.v8_0.enable_booking_asset_depreciation_automatically
-erpnext.patches.v8_0.set_project_copied_from
-erpnext.patches.v8_0.update_status_as_paid_for_completed_expense_claim
-erpnext.patches.v7_2.stock_uom_in_selling
-erpnext.patches.v8_0.revert_manufacturers_table_from_item
-erpnext.patches.v8_0.disable_instructor_role
-erpnext.patches.v8_0.merge_student_batch_and_student_group
-erpnext.patches.v8_0.rename_total_margin_to_rate_with_margin # 11-05-2017
-erpnext.patches.v8_0.fix_status_for_invoices_with_negative_outstanding
-erpnext.patches.v8_0.make_payments_table_blank_for_non_pos_invoice
-erpnext.patches.v8_0.set_sales_invoice_serial_number_from_delivery_note
-erpnext.patches.v8_0.delete_schools_depricated_doctypes
-erpnext.patches.v8_0.update_customer_pos_id
-erpnext.patches.v8_0.rename_items_in_status_field_of_material_request
-erpnext.patches.v8_0.delete_bin_indexes
-erpnext.patches.v8_0.move_account_head_from_account_to_warehouse_for_inventory
-erpnext.patches.v8_0.change_in_words_varchar_length
-erpnext.patches.v8_0.update_stock_qty_value_in_bom_item
-erpnext.patches.v8_0.update_sales_cost_in_project
-erpnext.patches.v8_0.save_system_settings
-erpnext.patches.v8_1.delete_deprecated_reports
-erpnext.patches.v9_0.remove_subscription_module
-erpnext.patches.v8_7.make_subscription_from_recurring_data
erpnext.patches.v8_1.setup_gst_india #2017-06-27
-execute:frappe.reload_doc('regional', 'doctype', 'gst_hsn_code')
erpnext.patches.v8_1.removed_roles_from_gst_report_non_indian_account #16-08-2018
-erpnext.patches.v8_1.gst_fixes #2017-07-06
-erpnext.patches.v8_0.update_production_orders
-erpnext.patches.v8_1.remove_sales_invoice_from_returned_serial_no
-erpnext.patches.v8_1.allow_invoice_copy_to_edit_after_submit
-erpnext.patches.v8_1.add_hsn_sac_codes
-erpnext.patches.v8_1.update_gst_state #17-07-2017
-erpnext.patches.v8_1.removed_report_support_hours
-erpnext.patches.v8_1.add_indexes_in_transaction_doctypes
-erpnext.patches.v8_3.set_restrict_to_domain_for_module_def
-erpnext.patches.v8_1.update_expense_claim_status
-erpnext.patches.v8_3.update_company_total_sales #2017-08-16
-erpnext.patches.v8_4.make_scorecard_records
-erpnext.patches.v8_1.set_delivery_date_in_so_item #2017-07-28
-erpnext.patches.v8_5.fix_tax_breakup_for_non_invoice_docs
-erpnext.patches.v8_5.remove_quotations_route_in_sidebar
-erpnext.patches.v8_5.update_existing_data_in_project_type
-erpnext.patches.v8_5.set_default_mode_of_payment
-erpnext.patches.v8_5.update_customer_group_in_POS_profile
-erpnext.patches.v8_6.update_timesheet_company_from_PO
-erpnext.patches.v8_6.set_write_permission_for_quotation_for_sales_manager
-erpnext.patches.v8_5.remove_project_type_property_setter
erpnext.patches.v8_7.sync_india_custom_fields
-erpnext.patches.v8_7.fix_purchase_receipt_status
-erpnext.patches.v8_6.rename_bom_update_tool
-erpnext.patches.v8_9.add_setup_progress_actions #08-09-2017 #26-09-2017 #22-11-2017 #15-12-2017
-erpnext.patches.v8_9.rename_company_sales_target_field
-erpnext.patches.v8_8.set_bom_rate_as_per_uom
-erpnext.patches.v8_8.add_new_fields_in_accounts_settings
-erpnext.patches.v8_9.set_default_customer_group
-erpnext.patches.v8_9.delete_gst_doctypes_for_outside_india_accounts
-erpnext.patches.v8_9.set_default_fields_in_variant_settings
-erpnext.patches.v8_9.update_billing_gstin_for_indian_account
-erpnext.patches.v8_9.set_member_party_type
-erpnext.patches.v9_0.add_user_to_child_table_in_pos_profile
-erpnext.patches.v9_0.set_schedule_date_for_material_request_and_purchase_order
-erpnext.patches.v9_0.student_admission_childtable_migrate
-erpnext.patches.v9_0.add_healthcare_domain
-erpnext.patches.v9_0.set_variant_item_description
-erpnext.patches.v9_0.set_uoms_in_variant_field
-erpnext.patches.v9_0.copy_old_fees_field_data
-execute:frappe.delete_doc_if_exists("DocType", "Program Fee")
-erpnext.patches.v9_0.set_pos_profile_name
-erpnext.patches.v9_0.remove_non_existing_warehouse_from_stock_settings
-execute:frappe.delete_doc_if_exists("DocType", "Program Fee")
-erpnext.patches.v8_10.change_default_customer_credit_days
-erpnext.patches.v9_0.update_employee_loan_details
-erpnext.patches.v9_2.delete_healthcare_domain_default_items
-erpnext.patches.v9_1.create_issue_opportunity_type
-erpnext.patches.v9_2.rename_translated_domains_in_en
-erpnext.patches.v9_0.set_shipping_type_for_existing_shipping_rules
-erpnext.patches.v9_0.update_multi_uom_fields_in_material_request
-erpnext.patches.v9_2.repost_reserved_qty_for_production
-erpnext.patches.v9_2.remove_company_from_patient
-erpnext.patches.v9_2.set_item_name_in_production_order
-erpnext.patches.v10_0.update_lft_rgt_for_employee
-erpnext.patches.v9_2.rename_net_weight_in_item_master
-erpnext.patches.v9_2.delete_process_payroll
-erpnext.patches.v10_0.add_agriculture_domain
-erpnext.patches.v10_0.add_non_profit_domain
-erpnext.patches.v10_0.setup_vat_for_uae_and_saudi_arabia #2017-12-28
-erpnext.patches.v10_0.set_primary_contact_for_customer
-erpnext.patches.v10_0.copy_projects_renamed_fields
-erpnext.patches.v10_0.enabled_regional_print_format_based_on_country
-erpnext.patches.v10_0.update_asset_calculate_depreciation
-erpnext.patches.v10_0.add_guardian_role_for_parent_portal
-erpnext.patches.v10_0.set_numeric_ranges_in_template_if_blank
-erpnext.patches.v10_0.update_reserved_qty_for_purchase_order
erpnext.patches.v10_0.fichier_des_ecritures_comptables_for_france
-erpnext.patches.v10_0.update_assessment_plan
-erpnext.patches.v10_0.update_assessment_result
-erpnext.patches.v10_0.set_default_payment_terms_based_on_company
-erpnext.patches.v10_0.update_sales_order_link_to_purchase_order
erpnext.patches.v10_0.rename_price_to_rate_in_pricing_rule
erpnext.patches.v10_0.set_currency_in_pricing_rule
-erpnext.patches.v10_0.set_b2c_limit
erpnext.patches.v10_0.update_translatable_fields
erpnext.patches.v10_0.rename_offer_letter_to_job_offer
execute:frappe.delete_doc('DocType', 'Production Planning Tool', ignore_missing=True)
@@ -496,16 +21,6 @@ erpnext.patches.v10_0.migrate_daily_work_summary_settings_to_daily_work_summary_
erpnext.patches.v10_0.add_default_cash_flow_mappers
erpnext.patches.v11_0.rename_duplicate_item_code_values
erpnext.patches.v11_0.make_quality_inspection_template
-erpnext.patches.v10_0.update_status_for_multiple_source_in_po
-erpnext.patches.v10_0.set_auto_created_serial_no_in_stock_entry
-erpnext.patches.v10_0.update_territory_and_customer_group
-erpnext.patches.v10_0.update_warehouse_address_details
-erpnext.patches.v10_0.update_reserved_qty_for_purchase_order
-erpnext.patches.v10_0.update_hub_connector_domain
-erpnext.patches.v10_0.set_student_party_type
-erpnext.patches.v10_0.update_project_in_sle
-erpnext.patches.v10_0.fix_reserved_qty_for_sub_contract
-erpnext.patches.v10_0.repost_requested_qty_for_non_stock_uom_items
erpnext.patches.v11_0.merge_land_unit_with_location
erpnext.patches.v11_0.add_index_on_nestedset_doctypes
erpnext.patches.v11_0.remove_modules_setup_page
@@ -514,7 +29,6 @@ erpnext.patches.v11_0.update_department_lft_rgt
erpnext.patches.v11_0.add_default_email_template_for_leave
erpnext.patches.v11_0.set_default_email_template_in_hr #08-06-2018
erpnext.patches.v11_0.uom_conversion_data #30-06-2018
-erpnext.patches.v10_0.taxes_issue_with_pos
erpnext.patches.v11_0.update_account_type_in_party_type
erpnext.patches.v11_0.rename_healthcare_doctype_and_fields
erpnext.patches.v11_0.rename_supplier_type_to_supplier_group
@@ -522,8 +36,6 @@ erpnext.patches.v10_1.transfer_subscription_to_auto_repeat
erpnext.patches.v11_0.update_brand_in_item_price
erpnext.patches.v11_0.create_default_success_action
erpnext.patches.v11_0.add_healthcare_service_unit_tree_root
-erpnext.patches.v10_0.set_qty_in_transactions_based_on_serial_no_input
-erpnext.patches.v10_0.show_leaves_of_all_department_members_in_calendar
erpnext.patches.v11_0.rename_field_max_days_allowed
erpnext.patches.v11_0.create_salary_structure_assignments
erpnext.patches.v11_0.rename_health_insurance
@@ -536,7 +48,6 @@ erpnext.patches.v11_0.move_item_defaults_to_child_table_for_multicompany #02-07-
erpnext.patches.v11_0.refactor_erpnext_shopify #2018-09-07
erpnext.patches.v11_0.rename_overproduction_percent_field
erpnext.patches.v11_0.update_backflush_subcontract_rm_based_on_bom
-erpnext.patches.v10_0.update_status_in_purchase_receipt
erpnext.patches.v11_0.inter_state_field_for_gst
erpnext.patches.v11_0.rename_members_with_naming_series #04-06-2018
erpnext.patches.v11_0.set_update_field_and_value_in_workflow_state
@@ -550,13 +61,10 @@ erpnext.patches.v11_0.skip_user_permission_check_for_department
erpnext.patches.v11_0.set_department_for_doctypes
erpnext.patches.v11_0.update_allow_transfer_for_manufacture
erpnext.patches.v11_0.add_item_group_defaults
-erpnext.patches.v10_0.update_address_template_for_india
erpnext.patches.v11_0.add_expense_claim_default_account
execute:frappe.delete_doc("Page", "hub")
erpnext.patches.v11_0.reset_publish_in_hub_for_all_items
erpnext.patches.v11_0.update_hub_url # 2018-08-31 # 2018-09-03
-erpnext.patches.v10_0.set_discount_amount
-erpnext.patches.v10_0.recalculate_gross_margin_for_project
erpnext.patches.v11_0.make_job_card
erpnext.patches.v11_0.redesign_healthcare_billing_work_flow
erpnext.patches.v10_0.delete_hub_documents # 12-08-2018
@@ -570,9 +78,6 @@ execute:frappe.delete_doc_if_exists("Page", "stock-analytics")
execute:frappe.delete_doc_if_exists("Page", "production-analytics")
erpnext.patches.v11_0.ewaybill_fields_gst_india #2018-11-13 #2019-01-09 #2019-04-01 #2019-04-26 #2019-05-03
erpnext.patches.v11_0.drop_column_max_days_allowed
-erpnext.patches.v10_0.update_user_image_in_employee
-erpnext.patches.v10_0.repost_gle_for_purchase_receipts_with_rejected_items
-erpnext.patches.v10_0.allow_operators_in_supplier_scorecard
erpnext.patches.v10_0.item_barcode_childtable_migrate # 16-02-2019
erpnext.patches.v11_0.update_delivery_trip_status
erpnext.patches.v11_0.set_missing_gst_hsn_code
diff --git a/erpnext/patches/repair_tools/__init__.py b/erpnext/patches/repair_tools/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/repair_tools/set_stock_balance_as_per_serial_no.py b/erpnext/patches/repair_tools/set_stock_balance_as_per_serial_no.py
deleted file mode 100644
index 5a421d146fec..000000000000
--- a/erpnext/patches/repair_tools/set_stock_balance_as_per_serial_no.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- from erpnext.stock.stock_balance import set_stock_balance_as_per_serial_no
- frappe.db.auto_commit_on_many_writes = 1
-
- set_stock_balance_as_per_serial_no()
-
- frappe.db.auto_commit_on_many_writes = 0
diff --git a/erpnext/patches/v10_0/__init__.py b/erpnext/patches/v10_0/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v10_0/add_agriculture_domain.py b/erpnext/patches/v10_0/add_agriculture_domain.py
deleted file mode 100644
index c18e69f3e6c3..000000000000
--- a/erpnext/patches/v10_0/add_agriculture_domain.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- domain = 'Agriculture'
- if not frappe.db.exists('Domain', domain):
- frappe.get_doc({
- 'doctype': 'Domain',
- 'domain': domain
- }).insert(ignore_permissions=True)
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/add_guardian_role_for_parent_portal.py b/erpnext/patches/v10_0/add_guardian_role_for_parent_portal.py
deleted file mode 100644
index 0b891f21f447..000000000000
--- a/erpnext/patches/v10_0/add_guardian_role_for_parent_portal.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # create guardian role
- if not frappe.get_value('Role', dict(role_name='Guardian')):
- frappe.get_doc({
- 'doctype': 'Role',
- 'role_name': 'Guardian',
- 'desk_access': 0,
- 'restrict_to_domain': 'Education'
- }).insert(ignore_permissions=True)
-
- # set guardian roles in already created users
- if frappe.db.exists("Doctype", "Guardian"):
- for user in frappe.db.sql_list("""select u.name from `tabUser` u , `tabGuardian` g where g.email_address = u.name"""):
- user = frappe.get_doc('User', user)
- user.flags.ignore_validate = True
- user.flags.ignore_mandatory = True
- user.save()
diff --git a/erpnext/patches/v10_0/add_non_profit_domain.py b/erpnext/patches/v10_0/add_non_profit_domain.py
deleted file mode 100644
index b03d66951542..000000000000
--- a/erpnext/patches/v10_0/add_non_profit_domain.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- domain = 'Non Profit'
- if not frappe.db.exists('Domain', domain):
- frappe.get_doc({
- 'doctype': 'Domain',
- 'domain': domain
- }).insert(ignore_permissions=True)
-
- frappe.get_doc({
- 'doctype': 'Role',
- 'role_name': 'Non Profit Portal User',
- 'desk_access': 0,
- 'restrict_to_domain': domain
- }).insert(ignore_permissions=True)
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/allow_operators_in_supplier_scorecard.py b/erpnext/patches/v10_0/allow_operators_in_supplier_scorecard.py
deleted file mode 100644
index 827f9bc94fa2..000000000000
--- a/erpnext/patches/v10_0/allow_operators_in_supplier_scorecard.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2019, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('buying', 'doctype', 'supplier_scorecard_criteria')
- frappe.reload_doc('buying', 'doctype', 'supplier_scorecard_scoring_criteria')
- frappe.reload_doc('buying', 'doctype', 'supplier_scorecard')
-
- for criteria in frappe.get_all('Supplier Scorecard Criteria', fields=['name', 'formula'], limit_page_length=None):
- frappe.db.set_value('Supplier Scorecard Criteria', criteria.name,
- 'formula', criteria.formula.replace('<','<').replace('>','>'))
-
- for criteria in frappe.get_all('Supplier Scorecard Scoring Criteria', fields=['name', 'formula'], limit_page_length=None):
- if criteria.formula: # not mandatory
- frappe.db.set_value('Supplier Scorecard Scoring Criteria', criteria.name,
- 'formula', criteria.formula.replace('<','<').replace('>','>'))
-
- for sc in frappe.get_all('Supplier Scorecard', fields=['name', 'weighting_function'], limit_page_length=None):
- frappe.db.set_value('Supplier Scorecard', sc.name, 'weighting_function',
- sc.weighting_function.replace('<','<').replace('>','>'))
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/copy_projects_renamed_fields.py b/erpnext/patches/v10_0/copy_projects_renamed_fields.py
deleted file mode 100644
index 80db3bdd1ee3..000000000000
--- a/erpnext/patches/v10_0/copy_projects_renamed_fields.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
- """ copy data from old fields to new """
- frappe.reload_doc("projects", "doctype", "project")
-
- if frappe.db.has_column('Project', 'total_sales_cost'):
- rename_field('Project', "total_sales_cost", "total_sales_amount")
-
- if frappe.db.has_column('Project', 'total_billing_amount'):
- rename_field('Project', "total_billing_amount", "total_billable_amount")
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/enabled_regional_print_format_based_on_country.py b/erpnext/patches/v10_0/enabled_regional_print_format_based_on_country.py
deleted file mode 100644
index 38b04cebc2ef..000000000000
--- a/erpnext/patches/v10_0/enabled_regional_print_format_based_on_country.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- print_format_mapper = {
- 'India': ['GST POS Invoice', 'GST Tax Invoice'],
- 'Saudi Arabia': ['Simplified Tax Invoice', 'Detailed Tax Invoice', 'Tax Invoice'],
- 'United Arab Emirates': ['Simplified Tax Invoice', 'Detailed Tax Invoice', 'Tax Invoice']
- }
-
- frappe.db.sql(""" update `tabPrint Format` set disabled = 1 where name
- in ('GST POS Invoice', 'GST Tax Invoice', 'Simplified Tax Invoice', 'Detailed Tax Invoice')""")
-
- for d in frappe.get_all('Company', fields = ["country"],
- filters={'country': ('in', ['India', 'Saudi Arabia', 'United Arab Emirates'])}):
- if print_format_mapper.get(d.country):
- print_formats = print_format_mapper.get(d.country)
- frappe.db.sql(""" update `tabPrint Format` set disabled = 0
- where name in (%s)""" % ", ".join(["%s"]*len(print_formats)), tuple(print_formats))
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/fix_reserved_qty_for_sub_contract.py b/erpnext/patches/v10_0/fix_reserved_qty_for_sub_contract.py
deleted file mode 100644
index c0a9e5eb5bc1..000000000000
--- a/erpnext/patches/v10_0/fix_reserved_qty_for_sub_contract.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.utils import get_bin
-
-def execute():
- frappe.reload_doc("stock", "doctype", "bin")
- frappe.reload_doc("buying", "doctype", "purchase_order_item_supplied")
- for d in frappe.db.sql("""
- select distinct rm_item_code, reserve_warehouse
- from `tabPurchase Order Item Supplied`
- where docstatus=1 and reserve_warehouse is not null and reserve_warehouse != ''"""):
-
- try:
- bin_doc = get_bin(d[0], d[1])
- bin_doc.update_reserved_qty_for_sub_contracting()
- except:
- pass
-
- for d in frappe.db.sql("""select distinct item_code, source_warehouse
- from `tabWork Order Item`
- where docstatus=1 and transferred_qty > required_qty
- and source_warehouse is not null and source_warehouse != ''""", as_list=1):
-
- try:
- bin_doc = get_bin(d[0], d[1])
- bin_doc.update_reserved_qty_for_production()
- except:
- pass
diff --git a/erpnext/patches/v10_0/recalculate_gross_margin_for_project.py b/erpnext/patches/v10_0/recalculate_gross_margin_for_project.py
deleted file mode 100644
index 6d461f3bc97e..000000000000
--- a/erpnext/patches/v10_0/recalculate_gross_margin_for_project.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('projects', 'doctype', 'project')
- for d in frappe.db.sql(""" select name from `tabProject` where
- ifnull(total_consumed_material_cost, 0 ) > 0 and ifnull(total_billed_amount, 0) > 0""", as_dict=1):
- doc = frappe.get_doc("Project", d.name)
- doc.calculate_gross_margin()
- doc.db_set('gross_margin', doc.gross_margin)
- doc.db_set('per_gross_margin', doc.per_gross_margin)
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/rename_schools_to_education.py b/erpnext/patches/v10_0/rename_schools_to_education.py
deleted file mode 100644
index 85c25a894347..000000000000
--- a/erpnext/patches/v10_0/rename_schools_to_education.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # rename the School module as Education
-
- # rename the school module
- if frappe.db.exists('Module Def', 'Schools') and not frappe.db.exists('Module Def', 'Education'):
- frappe.rename_doc("Module Def", "Schools", "Education")
-
- # delete the school module
- if frappe.db.exists('Module Def', 'Schools') and frappe.db.exists('Module Def', 'Education'):
- frappe.db.sql("""delete from `tabModule Def` where module_name = 'Schools'""")
-
-
- # rename "School Settings" to the "Education Settings
- if frappe.db.exists('DocType', 'School Settings'):
- frappe.rename_doc("DocType", "School Settings", "Education Settings", force=True)
- frappe.reload_doc("education", "doctype", "education_settings")
-
- # delete the discussion web form if exists
- if frappe.db.exists('Web Form', 'Discussion'):
- frappe.db.sql("""delete from `tabWeb Form` where name = 'discussion'""")
-
- # rename the select option field from "School Bus" to "Institute's Bus"
- frappe.reload_doc("education", "doctype", "Program Enrollment")
- if "mode_of_transportation" in frappe.db.get_table_columns("Program Enrollment"):
- frappe.db.sql("""update `tabProgram Enrollment` set mode_of_transportation = "Institute's Bus"
- where mode_of_transportation = "School Bus" """)
diff --git a/erpnext/patches/v10_0/repost_gle_for_purchase_receipts_with_rejected_items.py b/erpnext/patches/v10_0/repost_gle_for_purchase_receipts_with_rejected_items.py
deleted file mode 100644
index e6546e386b9b..000000000000
--- a/erpnext/patches/v10_0/repost_gle_for_purchase_receipts_with_rejected_items.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe, erpnext
-
-def execute():
- for company in frappe.get_all("Company"):
- if not erpnext.is_perpetual_inventory_enabled(company.name):
- continue
-
- acc_frozen_upto = frappe.db.get_value("Accounts Settings", None, "acc_frozen_upto") or "1900-01-01"
- pr_with_rejected_warehouse = frappe.db.sql("""
- select pr.name
- from `tabPurchase Receipt` pr, `tabPurchase Receipt Item` pr_item
- where pr.name = pr_item.parent
- and pr.posting_date > %s
- and pr.docstatus=1
- and pr.company = %s
- and pr_item.rejected_qty > 0
- """, (acc_frozen_upto, company.name), as_dict=1)
-
- for d in pr_with_rejected_warehouse:
- doc = frappe.get_doc("Purchase Receipt", d.name)
-
- doc.docstatus = 2
- doc.make_gl_entries_on_cancel()
-
-
- # update gl entries for submit state of PR
- doc.docstatus = 1
- doc.make_gl_entries()
diff --git a/erpnext/patches/v10_0/repost_requested_qty_for_non_stock_uom_items.py b/erpnext/patches/v10_0/repost_requested_qty_for_non_stock_uom_items.py
deleted file mode 100644
index 4fe4e97cf5bd..000000000000
--- a/erpnext/patches/v10_0/repost_requested_qty_for_non_stock_uom_items.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2019, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- from erpnext.stock.stock_balance import update_bin_qty, get_indented_qty
-
- count=0
- for item_code, warehouse in frappe.db.sql("""select distinct item_code, warehouse
- from `tabMaterial Request Item` where docstatus = 1 and stock_uom<>uom"""):
- try:
- count += 1
- update_bin_qty(item_code, warehouse, {
- "indented_qty": get_indented_qty(item_code, warehouse),
- })
- if count % 200 == 0:
- frappe.db.commit()
- except:
- frappe.db.rollback()
diff --git a/erpnext/patches/v10_0/set_auto_created_serial_no_in_stock_entry.py b/erpnext/patches/v10_0/set_auto_created_serial_no_in_stock_entry.py
deleted file mode 100644
index c6470f21d7ce..000000000000
--- a/erpnext/patches/v10_0/set_auto_created_serial_no_in_stock_entry.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- serialised_items = [d.name for d in frappe.get_all("Item", filters={"has_serial_no": 1})]
-
- if not serialised_items:
- return
-
- for dt in ["Stock Entry Detail", "Purchase Receipt Item", "Purchase Invoice Item"]:
- cond = ""
- if dt=="Purchase Invoice Item":
- cond = """ and parent in (select name from `tabPurchase Invoice`
- where `tabPurchase Invoice`.name = `tabPurchase Invoice Item`.parent and update_stock=1)"""
-
- item_rows = frappe.db.sql("""
- select name
- from `tab{0}`
- where conversion_factor != 1
- and docstatus = 1
- and ifnull(serial_no, '') = ''
- and item_code in ({1})
- {2}
- """.format(dt, ', '.join(['%s']*len(serialised_items)), cond), tuple(serialised_items))
-
- if item_rows:
- sle_serial_nos = dict(frappe.db.sql("""
- select voucher_detail_no, serial_no
- from `tabStock Ledger Entry`
- where ifnull(serial_no, '') != ''
- and voucher_detail_no in (%s)
- """.format(', '.join(['%s']*len(item_rows))),
- tuple([d[0] for d in item_rows])))
-
- batch_size = 100
- for i in range(0, len(item_rows), batch_size):
- batch_item_rows = item_rows[i:i + batch_size]
- when_then = []
- for item_row in batch_item_rows:
-
- when_then.append('WHEN `name` = "{row_name}" THEN "{value}"'.format(
- row_name=item_row[0],
- value=sle_serial_nos.get(item_row[0])))
-
- frappe.db.sql("""
- update
- `tab{doctype}`
- set
- serial_no = CASE {when_then_cond} ELSE `serial_no` END
- """.format(
- doctype = dt,
- when_then_cond=" ".join(when_then)
- ))
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/set_b2c_limit.py b/erpnext/patches/v10_0/set_b2c_limit.py
deleted file mode 100644
index 5d964e681ab1..000000000000
--- a/erpnext/patches/v10_0/set_b2c_limit.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("regional", "doctype", "gst_settings")
- frappe.reload_doc("accounts", "doctype", "gst_account")
- gst_settings = frappe.get_doc("GST Settings")
- gst_settings.b2c_limit = 250000
- gst_settings.save()
diff --git a/erpnext/patches/v10_0/set_default_payment_terms_based_on_company.py b/erpnext/patches/v10_0/set_default_payment_terms_based_on_company.py
deleted file mode 100644
index a90e096390ac..000000000000
--- a/erpnext/patches/v10_0/set_default_payment_terms_based_on_company.py
+++ /dev/null
@@ -1,37 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext.patches.v8_10.change_default_customer_credit_days import make_payment_term, make_template
-
-def execute():
- for dt in ("Company", "Customer Group"):
- frappe.reload_doc("setup", "doctype", frappe.scrub(dt))
-
- credit_records = frappe.db.sql("""
- SELECT DISTINCT `credit_days`, `credit_days_based_on`, `name`
- from `tab{0}`
- where
- ((credit_days_based_on='Fixed Days' or credit_days_based_on is null) and credit_days is not null)
- or credit_days_based_on='Last Day of the Next Month'
- """.format(dt), as_dict=1)
-
- for d in credit_records:
- template = create_payment_terms_template(d)
-
- frappe.db.sql("""
- update `tab{0}`
- set `payment_terms` = %s
- where name = %s
- """.format(dt), (template.name, d.name))
-
-def create_payment_terms_template(data):
- if data.credit_days_based_on == "Fixed Days":
- pyt_template_name = 'Default Payment Term - N{0}'.format(data.credit_days)
- else:
- pyt_template_name = 'Default Payment Term - EO2M'
-
- if not frappe.db.exists("Payment Terms Template", pyt_template_name):
- payment_term = make_payment_term(data.credit_days, data.credit_days_based_on)
- template = make_template(payment_term)
- else:
- template = frappe.get_doc("Payment Terms Template", pyt_template_name)
- return template
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/set_discount_amount.py b/erpnext/patches/v10_0/set_discount_amount.py
deleted file mode 100644
index d5e2c5a84b84..000000000000
--- a/erpnext/patches/v10_0/set_discount_amount.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from __future__ import unicode_literals
-
-import frappe
-
-def execute():
- frappe.reload_doc("accounts", "doctype", "sales_invoice_item")
- frappe.reload_doc('accounts', 'doctype', 'purchase_invoice_item')
- frappe.reload_doc('buying', 'doctype', 'purchase_order_item')
- frappe.reload_doc('buying', 'doctype', 'supplier_quotation_item')
- frappe.reload_doc('selling', 'doctype', 'sales_order_item')
- frappe.reload_doc('selling', 'doctype', 'quotation_item')
- frappe.reload_doc('stock', 'doctype', 'delivery_note_item')
- frappe.reload_doc('stock', 'doctype', 'purchase_receipt_item')
-
- selling_doctypes = ["Sales Order Item", "Sales Invoice Item", "Delivery Note Item", "Quotation Item"]
- buying_doctypes = ["Purchase Order Item", "Purchase Invoice Item", "Purchase Receipt Item", "Supplier Quotation Item"]
-
- for doctype in selling_doctypes:
- frappe.db.sql('''
- UPDATE
- `tab%s`
- SET
- discount_amount = if(rate_with_margin > 0, rate_with_margin, price_list_rate) * discount_percentage / 100
- WHERE
- discount_percentage > 0
- ''' % (doctype))
- for doctype in buying_doctypes:
- frappe.db.sql('''
- UPDATE
- `tab%s`
- SET
- discount_amount = price_list_rate * discount_percentage / 100
- WHERE
- discount_percentage > 0
- ''' % (doctype))
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/set_numeric_ranges_in_template_if_blank.py b/erpnext/patches/v10_0/set_numeric_ranges_in_template_if_blank.py
deleted file mode 100644
index 6825f19d74d6..000000000000
--- a/erpnext/patches/v10_0/set_numeric_ranges_in_template_if_blank.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- item_numeric_attributes = frappe.db.sql("""
- select name, numeric_values, from_range, to_range, increment
- from `tabItem Attribute`
- where numeric_values = 1
- """, as_dict=1)
-
- for d in item_numeric_attributes:
- frappe.db.sql("""
- update `tabItem Variant Attribute`
- set
- from_range = CASE
- WHEN from_range = 0 THEN %(from_range)s
- ELSE from_range
- END,
- to_range = CASE
- WHEN to_range = 0 THEN %(to_range)s
- ELSE to_range
- END,
- increment = CASE
- WHEN increment = 0 THEN %(increment)s
- ELSE increment
- END,
- numeric_values = %(numeric_values)s
- where
- attribute = %(name)s
- and exists(select name from tabItem
- where name=`tabItem Variant Attribute`.parent and has_variants=1)
- """, d)
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/set_primary_contact_for_customer.py b/erpnext/patches/v10_0/set_primary_contact_for_customer.py
deleted file mode 100644
index ae0b31c21f69..000000000000
--- a/erpnext/patches/v10_0/set_primary_contact_for_customer.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype('Customer')
-
- frappe.db.sql("""
- update
- `tabCustomer`, (
- select `tabContact`.name, `tabContact`.mobile_no, `tabContact`.email_id,
- `tabDynamic Link`.link_name from `tabContact`, `tabDynamic Link`
- where `tabContact`.name = `tabDynamic Link`.parent and
- `tabDynamic Link`.link_doctype = 'Customer' and `tabContact`.is_primary_contact = 1
- ) as contact
- set
- `tabCustomer`.customer_primary_contact = contact.name,
- `tabCustomer`.mobile_no = contact.mobile_no, `tabCustomer`.email_id = contact.email_id
- where `tabCustomer`.name = contact.link_name""")
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/set_qty_in_transactions_based_on_serial_no_input.py b/erpnext/patches/v10_0/set_qty_in_transactions_based_on_serial_no_input.py
deleted file mode 100644
index 083b7f4b201e..000000000000
--- a/erpnext/patches/v10_0/set_qty_in_transactions_based_on_serial_no_input.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("stock", "doctype", "stock_settings")
-
- ss = frappe.get_doc("Stock Settings")
- ss.set_qty_in_transactions_based_on_serial_no_input = 1
-
- if ss.default_warehouse \
- and not frappe.db.exists("Warehouse", ss.default_warehouse):
- ss.default_warehouse = None
-
- if ss.stock_uom and not frappe.db.exists("UOM", ss.stock_uom):
- ss.stock_uom = None
-
- ss.flags.ignore_mandatory = True
- ss.save()
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/set_student_party_type.py b/erpnext/patches/v10_0/set_student_party_type.py
deleted file mode 100644
index 08376ae894b1..000000000000
--- a/erpnext/patches/v10_0/set_student_party_type.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if not frappe.db.exists("Party Type", "Student"):
- party = frappe.new_doc("Party Type")
- party.party_type = "Student"
- party.save()
diff --git a/erpnext/patches/v10_0/setup_vat_for_uae_and_saudi_arabia.py b/erpnext/patches/v10_0/setup_vat_for_uae_and_saudi_arabia.py
deleted file mode 100644
index a8d90499d880..000000000000
--- a/erpnext/patches/v10_0/setup_vat_for_uae_and_saudi_arabia.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.setup.doctype.company.company import install_country_fixtures
-
-def execute():
- frappe.reload_doc("accounts", "doctype", "account")
- frappe.reload_doc("accounts", "doctype", "payment_schedule")
- for d in frappe.get_all('Company',
- filters={'country': ('in', ['Saudi Arabia', 'United Arab Emirates'])}):
- install_country_fixtures(d.name)
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/show_leaves_of_all_department_members_in_calendar.py b/erpnext/patches/v10_0/show_leaves_of_all_department_members_in_calendar.py
deleted file mode 100644
index 7e2ff7a8a7f0..000000000000
--- a/erpnext/patches/v10_0/show_leaves_of_all_department_members_in_calendar.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("hr", "doctype", "hr_settings")
- frappe.db.set_value("HR Settings", None, "show_leaves_of_all_department_members_in_calendar", 1)
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/taxes_issue_with_pos.py b/erpnext/patches/v10_0/taxes_issue_with_pos.py
deleted file mode 100644
index 2a3275ac2ce5..000000000000
--- a/erpnext/patches/v10_0/taxes_issue_with_pos.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for d in frappe.get_all('Sales Invoice', fields=["name"],
- filters = {'is_pos':1, 'docstatus': 1, 'creation': ('>', '2018-04-23')}):
- doc = frappe.get_doc('Sales Invoice', d.name)
- if (not doc.taxes and doc.taxes_and_charges and doc.pos_profile and doc.outstanding_amount != 0 and
- frappe.db.get_value('POS Profile', doc.pos_profile, 'taxes_and_charges', cache=True) == doc.taxes_and_charges):
-
- doc.append_taxes_from_master()
- doc.calculate_taxes_and_totals()
- for d in doc.taxes:
- d.db_update()
-
- doc.db_update()
-
- delete_gle_for_voucher(doc.name)
- doc.make_gl_entries()
-
-def delete_gle_for_voucher(voucher_no):
- frappe.db.sql("""delete from `tabGL Entry` where voucher_no = %(voucher_no)s""",
- {'voucher_no': voucher_no})
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/update_address_template_for_india.py b/erpnext/patches/v10_0/update_address_template_for_india.py
deleted file mode 100644
index 1ddca9376090..000000000000
--- a/erpnext/patches/v10_0/update_address_template_for_india.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.regional.address_template.setup import set_up_address_templates
-
-def execute():
- if frappe.db.get_value('Company', {'country': 'India'}, 'name'):
- address_template = frappe.db.get_value('Address Template', 'India', 'template')
- if not address_template or "gstin" not in address_template:
- set_up_address_templates(default_country='India')
diff --git a/erpnext/patches/v10_0/update_assessment_plan.py b/erpnext/patches/v10_0/update_assessment_plan.py
deleted file mode 100644
index 174623c1a484..000000000000
--- a/erpnext/patches/v10_0/update_assessment_plan.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('education', 'doctype', 'assessment_plan')
-
- frappe.db.sql("""
- UPDATE `tabAssessment Plan` as ap
- INNER JOIN `tabStudent Group` as sg ON sg.name = ap.student_group
- SET ap.academic_term = sg.academic_term,
- ap.academic_year = sg.academic_year,
- ap.program = sg.program
- WHERE ap.docstatus = 1
- """)
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/update_assessment_result.py b/erpnext/patches/v10_0/update_assessment_result.py
deleted file mode 100644
index 96218db972c8..000000000000
--- a/erpnext/patches/v10_0/update_assessment_result.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('education', 'doctype', 'assessment_result')
-
- frappe.db.sql("""
- UPDATE `tabAssessment Result` AS ar
- INNER JOIN `tabAssessment Plan` AS ap ON ap.name = ar.assessment_plan
- SET ar.academic_term = ap.academic_term,
- ar.academic_year = ap.academic_year,
- ar.program = ap.program,
- ar.course = ap.course,
- ar.assessment_group = ap.assessment_group,
- ar.student_group = ap.student_group
- WHERE ap.docstatus = 1
- """)
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/update_asset_calculate_depreciation.py b/erpnext/patches/v10_0/update_asset_calculate_depreciation.py
deleted file mode 100644
index b947a40b4a3f..000000000000
--- a/erpnext/patches/v10_0/update_asset_calculate_depreciation.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('assets', 'doctype', 'asset')
- frappe.reload_doc('assets', 'doctype', 'depreciation_schedule')
-
- frappe.db.sql("""
- update tabAsset a
- set calculate_depreciation = 1
- where exists(select ds.name from `tabDepreciation Schedule` ds where ds.parent=a.name)
- """)
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/update_hub_connector_domain.py b/erpnext/patches/v10_0/update_hub_connector_domain.py
deleted file mode 100644
index baf580a36994..000000000000
--- a/erpnext/patches/v10_0/update_hub_connector_domain.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if frappe.db.table_exists("Data Migration Connector"):
- frappe.db.sql("""
- UPDATE `tabData Migration Connector`
- SET hostname = 'https://hubmarket.org'
- WHERE connector_name = 'Hub Connector'
- """)
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/update_lft_rgt_for_employee.py b/erpnext/patches/v10_0/update_lft_rgt_for_employee.py
deleted file mode 100644
index 46ca786e0d68..000000000000
--- a/erpnext/patches/v10_0/update_lft_rgt_for_employee.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils.nestedset import rebuild_tree
-
-def execute():
- """ assign lft and rgt appropriately """
- frappe.reload_doc("hr", "doctype", "employee")
-
- rebuild_tree("Employee", "reports_to")
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/update_project_in_sle.py b/erpnext/patches/v10_0/update_project_in_sle.py
deleted file mode 100644
index 08c64f18d800..000000000000
--- a/erpnext/patches/v10_0/update_project_in_sle.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for doctype in ['Sales Invoice', 'Delivery Note', 'Stock Entry']:
- frappe.db.sql(""" update
- `tabStock Ledger Entry` sle, `tab{0}` parent_doc
- set
- sle.project = parent_doc.project
- where
- sle.voucher_no = parent_doc.name and sle.voucher_type = %s and sle.project is null
- and parent_doc.project is not null and parent_doc.project != ''""".format(doctype), doctype)
diff --git a/erpnext/patches/v10_0/update_reserved_qty_for_purchase_order.py b/erpnext/patches/v10_0/update_reserved_qty_for_purchase_order.py
deleted file mode 100644
index 7b2c36698a29..000000000000
--- a/erpnext/patches/v10_0/update_reserved_qty_for_purchase_order.py
+++ /dev/null
@@ -1,53 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.utils import get_bin
-
-def execute():
- po_item = list(frappe.db.sql(("""
- select distinct po.name as poname, poitem.rm_item_code as rm_item_code, po.company
- from `tabPurchase Order` po, `tabPurchase Order Item Supplied` poitem
- where po.name = poitem.parent
- and po.is_subcontracted = "Yes"
- and po.docstatus = 1"""), as_dict=1))
- if not po_item:
- return
-
- frappe.reload_doc("stock", "doctype", "bin")
- frappe.reload_doc("buying", "doctype", "purchase_order_item_supplied")
- company_warehouse = frappe._dict(frappe.db.sql("""select company, min(name) from `tabWarehouse`
- where is_group = 0 group by company"""))
-
- items = list(set([d.rm_item_code for d in po_item]))
- item_wh = frappe._dict(frappe.db.sql("""select item_code, default_warehouse
- from `tabItem` where name in ({0})""".format(", ".join(["%s"] * len(items))), items))
-
- # Update reserved warehouse
- for item in po_item:
- reserve_warehouse = get_warehouse(item.rm_item_code, item.company, company_warehouse, item_wh)
- frappe.db.sql("""update `tabPurchase Order Item Supplied`
- set reserve_warehouse = %s
- where parent = %s and rm_item_code = %s
- """, (reserve_warehouse, item["poname"], item["rm_item_code"]))
-
- # Update bin
- item_wh_bin = frappe.db.sql(("""
- select distinct poitemsup.rm_item_code as rm_item_code,
- poitemsup.reserve_warehouse as reserve_warehouse
- from `tabPurchase Order` po, `tabPurchase Order Item Supplied` poitemsup
- where po.name = poitemsup.parent
- and po.is_subcontracted = "Yes"
- and po.docstatus = 1"""), as_dict=1)
- for d in item_wh_bin:
- try:
- stock_bin = get_bin(d["rm_item_code"], d["reserve_warehouse"])
- stock_bin.update_reserved_qty_for_sub_contracting()
- except:
- pass
-
-def get_warehouse(item_code, company, company_warehouse, item_wh):
- reserve_warehouse = item_wh.get(item_code)
- if frappe.db.get_value("Warehouse", reserve_warehouse, "company") != company:
- reserve_warehouse = None
- if not reserve_warehouse:
- reserve_warehouse = company_warehouse.get(company)
- return reserve_warehouse
diff --git a/erpnext/patches/v10_0/update_sales_order_link_to_purchase_order.py b/erpnext/patches/v10_0/update_sales_order_link_to_purchase_order.py
deleted file mode 100644
index b4f58384bfe7..000000000000
--- a/erpnext/patches/v10_0/update_sales_order_link_to_purchase_order.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("buying", "doctype", "supplier_quotation_item")
-
- for doctype in ['Purchase Order','Supplier Quotation']:
- frappe.db.sql("""
- Update
- `tab{doctype} Item`, `tabMaterial Request Item`
- set
- `tab{doctype} Item`.sales_order = `tabMaterial Request Item`.sales_order
- where
- `tab{doctype} Item`.material_request= `tabMaterial Request Item`.parent
- and `tab{doctype} Item`.material_request_item = `tabMaterial Request Item`.name
- and `tabMaterial Request Item`.sales_order is not null""".format(doctype=doctype))
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/update_status_for_multiple_source_in_po.py b/erpnext/patches/v10_0/update_status_for_multiple_source_in_po.py
deleted file mode 100644
index fd3be08b89b1..000000000000
--- a/erpnext/patches/v10_0/update_status_for_multiple_source_in_po.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-
-
- # update the sales order item in the material request
- frappe.reload_doc('stock', 'doctype', 'material_request_item')
- frappe.db.sql('''update `tabMaterial Request Item` mri, `tabSales Order Item` soi
- set mri.sales_order_item = soi.name
- where ifnull(mri.sales_order, "")!="" and soi.parent=mri.sales_order
- and soi.item_code=mri.item_code and mri.docstatus=1
- ''')
-
- # update the sales order item in the purchase order
- frappe.db.sql('''update `tabPurchase Order Item` poi, `tabSales Order Item` soi
- set poi.sales_order_item = soi.name
- where ifnull(poi.sales_order, "")!="" and soi.parent=poi.sales_order
- and soi.item_code=poi.item_code and poi.docstatus = 1
- ''')
-
- # Update the status in material request and sales order
- po_list = frappe.db.sql('''
- select parent from `tabPurchase Order Item` where ifnull(material_request, "")!="" and
- ifnull(sales_order, "")!="" and docstatus=1
- ''',as_dict=1)
-
- for po in list(set([d.get("parent") for d in po_list if d.get("parent")])):
- try:
- po_doc = frappe.get_doc("Purchase Order", po)
-
- # update the so in the status updater
- po_doc.update_status_updater()
- po_doc.update_qty(update_modified=False)
-
- except Exception:
- pass
diff --git a/erpnext/patches/v10_0/update_status_in_purchase_receipt.py b/erpnext/patches/v10_0/update_status_in_purchase_receipt.py
deleted file mode 100644
index a0bdd9e2cc19..000000000000
--- a/erpnext/patches/v10_0/update_status_in_purchase_receipt.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("stock", "doctype", "purchase_receipt")
- frappe.db.sql('''
- UPDATE `tabPurchase Receipt` SET status = "Completed" WHERE per_billed = 100 AND docstatus = 1
- ''')
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/update_territory_and_customer_group.py b/erpnext/patches/v10_0/update_territory_and_customer_group.py
deleted file mode 100644
index 7f3dae991d2a..000000000000
--- a/erpnext/patches/v10_0/update_territory_and_customer_group.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.rename_doc import get_fetch_fields
-
-def execute():
- ignore_doctypes = ["Lead", "Opportunity", "POS Profile", "Tax Rule", "Pricing Rule"]
- customers = frappe.get_all('Customer', fields=["name", "customer_group"])
- customer_group_fetch = get_fetch_fields('Customer', 'Customer Group', ignore_doctypes)
-
- batch_size = 1000
- for i in range(0, len(customers), batch_size):
- batch_customers = customers[i:i + batch_size]
- for d in customer_group_fetch:
- when_then = []
- for customer in batch_customers:
- value = frappe.db.escape(frappe.as_unicode(customer.get("customer_group")))
-
- when_then.append('''
- WHEN `%s` = %s and %s != %s
- THEN %s
- '''%(d["master_fieldname"], frappe.db.escape(frappe.as_unicode(customer.name)),
- d["linked_to_fieldname"], value, value))
-
- frappe.db.sql("""
- update
- `tab%s`
- set
- %s = CASE %s ELSE `%s` END
- """%(d['doctype'], d.linked_to_fieldname, " ".join(when_then), d.linked_to_fieldname))
diff --git a/erpnext/patches/v10_0/update_user_image_in_employee.py b/erpnext/patches/v10_0/update_user_image_in_employee.py
deleted file mode 100644
index 72d5d2a857b3..000000000000
--- a/erpnext/patches/v10_0/update_user_image_in_employee.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('hr', 'doctype', 'employee')
-
- frappe.db.sql("""
- UPDATE
- `tabEmployee`, `tabUser`
- SET
- `tabEmployee`.image = `tabUser`.user_image
- WHERE
- `tabEmployee`.user_id = `tabUser`.name and
- `tabEmployee`.user_id is not null and
- `tabEmployee`.user_id != '' and `tabEmployee`.image is null
- """)
diff --git a/erpnext/patches/v10_0/update_warehouse_address_details.py b/erpnext/patches/v10_0/update_warehouse_address_details.py
deleted file mode 100644
index b982b9a662fd..000000000000
--- a/erpnext/patches/v10_0/update_warehouse_address_details.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- warehouse = frappe.db.sql("""select name, email_id, phone_no, mobile_no, address_line_1,
- address_line_2, city, state, pin from `tabWarehouse` where ifnull(address_line_1, '') != ''
- or ifnull(mobile_no, '') != ''
- or ifnull(email_id, '') != '' """, as_dict=1)
-
- for d in warehouse:
- try:
- address = frappe.new_doc('Address')
- address.name = d.name
- address.address_title = d.name
- address.address_line1 = d.address_line_1
- address.city = d.city
- address.state = d.state
- address.pincode = d.pin
- address.db_insert()
- address.append('links',{'link_doctype':'Warehouse','link_name':d.name})
- address.links[0].db_insert()
- if d.name and (d.email_id or d.mobile_no or d.phone_no):
- contact = frappe.new_doc('Contact')
- contact.name = d.name
- contact.first_name = d.name
- contact.mobile_no = d.mobile_no
- contact.email_id = d.email_id
- contact.phone = d.phone_no
- contact.db_insert()
- contact.append('links',{'link_doctype':'Warehouse','link_name':d.name})
- contact.links[0].db_insert()
- except frappe.DuplicateEntryError:
- pass
-
\ No newline at end of file
diff --git a/erpnext/patches/v10_1/__init__.py b/erpnext/patches/v10_1/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v11_0/__init__.py b/erpnext/patches/v11_0/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v11_0/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v11_0/remove_subscriber_doctype.py b/erpnext/patches/v11_0/remove_subscriber_doctype.py
deleted file mode 100644
index 4839a20f91f3..000000000000
--- a/erpnext/patches/v11_0/remove_subscriber_doctype.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
- """ copy subscribe field to customer """
- frappe.reload_doc("accounts","doctype","subscription")
-
- if frappe.db.exists("DocType", "Subscriber"):
- if frappe.db.has_column('Subscription','subscriber'):
- frappe.db.sql("""
- update `tabSubscription` s1
- set customer=(select customer from tabSubscriber where name=s1.subscriber)
- """)
-
- frappe.delete_doc("DocType", "Subscriber")
\ No newline at end of file
diff --git a/erpnext/patches/v11_0/rename_bom_wo_fields.py b/erpnext/patches/v11_0/rename_bom_wo_fields.py
index b4a740fabbf9..882ec84e6443 100644
--- a/erpnext/patches/v11_0/rename_bom_wo_fields.py
+++ b/erpnext/patches/v11_0/rename_bom_wo_fields.py
@@ -6,6 +6,10 @@
from frappe.model.utils.rename_field import rename_field
def execute():
+ # updating column value to handle field change from Data to Currency
+ changed_field = "base_scrap_material_cost"
+ frappe.db.sql(f"update `tabBOM` set {changed_field} = '0' where trim(coalesce({changed_field}, ''))= ''")
+
for doctype in ['BOM Explosion Item', 'BOM Item', 'Work Order Item', 'Item']:
if frappe.db.has_column(doctype, 'allow_transfer_for_manufacture'):
if doctype != 'Item':
diff --git a/erpnext/patches/v11_1/__init__.py b/erpnext/patches/v11_1/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v12_0/__init__.py b/erpnext/patches/v12_0/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v13_0/__init__.py b/erpnext/patches/v13_0/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v13_0/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v13_0/healthcare_lab_module_rename_doctypes.py b/erpnext/patches/v13_0/healthcare_lab_module_rename_doctypes.py
index 9af0a8dbef72..2549a1e91eed 100644
--- a/erpnext/patches/v13_0/healthcare_lab_module_rename_doctypes.py
+++ b/erpnext/patches/v13_0/healthcare_lab_module_rename_doctypes.py
@@ -2,6 +2,7 @@
import frappe
from frappe.model.utils.rename_field import rename_field
+
def execute():
if frappe.db.exists('DocType', 'Lab Test') and frappe.db.exists('DocType', 'Lab Test Template'):
# rename child doctypes
@@ -17,7 +18,12 @@ def execute():
frappe.reload_doc('healthcare', 'doctype', 'lab_test_template')
for old_dt, new_dt in doctypes.items():
- if not frappe.db.table_exists(new_dt) and frappe.db.table_exists(old_dt):
+ frappe.flags.link_fields = {}
+ should_rename = (
+ frappe.db.table_exists(old_dt)
+ and not frappe.db.table_exists(new_dt)
+ )
+ if should_rename:
frappe.reload_doc('healthcare', 'doctype', frappe.scrub(old_dt))
frappe.rename_doc('DocType', old_dt, new_dt, force=True)
frappe.reload_doc('healthcare', 'doctype', frappe.scrub(new_dt))
diff --git a/erpnext/patches/v4_0/__init__.py b/erpnext/patches/v4_0/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v4_0/apply_user_permissions.py b/erpnext/patches/v4_0/apply_user_permissions.py
deleted file mode 100644
index 3c5d612c181c..000000000000
--- a/erpnext/patches/v4_0/apply_user_permissions.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.hr.doctype.employee.employee import EmployeeUserDisabledError
-
-def execute():
- update_hr_permissions()
- update_permissions()
- remove_duplicate_user_permissions()
- frappe.clear_cache()
-
-def update_hr_permissions():
- # add set user permissions rights to HR Manager
- frappe.db.sql("""update `tabDocPerm` set `set_user_permissions`=1 where parent in ('Employee', 'Leave Application')
- and role='HR Manager' and permlevel=0 and `read`=1""")
- docperm_meta = frappe.get_meta('DocPerm')
- if docperm_meta.get_field('apply_user_permissions'):
- # apply user permissions on Employee and Leave Application
- frappe.db.sql("""update `tabDocPerm` set `apply_user_permissions`=1 where parent in ('Employee', 'Leave Application')
- and role in ('Employee', 'Leave Approver') and permlevel=0 and `read`=1""")
-
- frappe.clear_cache()
-
- # save employees to run on_update events
- for employee in frappe.db.sql_list("""select name from `tabEmployee` where docstatus < 2"""):
- try:
- emp = frappe.get_doc("Employee", employee)
- emp.flags.ignore_mandatory = True
- emp.save()
- except EmployeeUserDisabledError:
- pass
-
-def update_permissions():
- # clear match conditions other than owner
- frappe.db.sql("""update tabDocPerm set `match`=''
- where ifnull(`match`,'') not in ('', 'owner')""")
-
-def remove_duplicate_user_permissions():
- # remove duplicate user_permissions (if they exist)
- for d in frappe.db.sql("""select parent, defkey, defvalue,
- count(*) as cnt from tabDefaultValue
- where parent not in ('__global', '__default')
- group by parent, defkey, defvalue""", as_dict=1):
- if d.cnt > 1:
- # order by parenttype so that user permission does not get removed!
- frappe.db.sql("""delete from tabDefaultValue where `parent`=%s and `defkey`=%s and
- `defvalue`=%s order by parenttype limit %s""", (d.parent, d.defkey, d.defvalue, d.cnt-1))
-
diff --git a/erpnext/patches/v4_0/countrywise_coa.py b/erpnext/patches/v4_0/countrywise_coa.py
deleted file mode 100644
index f45e6028c875..000000000000
--- a/erpnext/patches/v4_0/countrywise_coa.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("setup", 'doctype', "company")
- frappe.reload_doc("accounts", 'doctype', "account")
-
- frappe.db.sql("""update tabAccount set account_type='Cash'
- where account_type='Bank or Cash' and account_name in ('Cash', 'Cash In Hand')""")
-
- frappe.db.sql("""update tabAccount set account_type='Stock'
- where account_name = 'Stock Assets'""")
-
- ac_types = {"Fixed Asset Account": "Fixed Asset", "Bank or Cash": "Bank"}
- for old, new in ac_types.items():
- frappe.db.sql("""update tabAccount set account_type=%s
- where account_type=%s""", (new, old))
-
- try:
- frappe.db.sql("""update `tabAccount` set report_type =
- if(is_pl_account='Yes', 'Profit and Loss', 'Balance Sheet')""")
-
- frappe.db.sql("""update `tabAccount` set balance_must_be=debit_or_credit
- where ifnull(allow_negative_balance, 0) = 0""")
- except:
- pass
diff --git a/erpnext/patches/v4_0/create_custom_fields_for_india_specific_fields.py b/erpnext/patches/v4_0/create_custom_fields_for_india_specific_fields.py
deleted file mode 100644
index fe50e444b524..000000000000
--- a/erpnext/patches/v4_0/create_custom_fields_for_india_specific_fields.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.custom.doctype.custom_field.custom_field import create_custom_field_if_values_exist
-
-def execute():
- frappe.reload_doc("stock", "doctype", "purchase_receipt")
- frappe.reload_doc("hr", "doctype", "employee")
- frappe.reload_doc("Payroll", "doctype", "salary_slip")
-
- india_specific_fields = {
- "Purchase Receipt": [{
- "label": "Supplier Shipment No",
- "fieldname": "challan_no",
- "fieldtype": "Data",
- "insert_after": "is_subcontracted"
- }, {
- "label": "Supplier Shipment Date",
- "fieldname": "challan_date",
- "fieldtype": "Date",
- "insert_after": "is_subcontracted"
- }],
- "Employee": [{
- "label": "PAN Number",
- "fieldname": "pan_number",
- "fieldtype": "Data",
- "insert_after": "company_email"
- }, {
- "label": "Gratuity LIC Id",
- "fieldname": "gratuity_lic_id",
- "fieldtype": "Data",
- "insert_after": "company_email"
- }, {
- "label": "Esic Card No",
- "fieldname": "esic_card_no",
- "fieldtype": "Data",
- "insert_after": "bank_ac_no"
- }, {
- "label": "PF Number",
- "fieldname": "pf_number",
- "fieldtype": "Data",
- "insert_after": "bank_ac_no"
- }],
- "Salary Slip": [{
- "label": "Esic No",
- "fieldname": "esic_no",
- "fieldtype": "Data",
- "insert_after": "letter_head",
- "permlevel": 1
- }, {
- "label": "PF Number",
- "fieldname": "pf_no",
- "fieldtype": "Data",
- "insert_after": "letter_head",
- "permlevel": 1
- }]
- }
-
- for dt, docfields in india_specific_fields.items():
- for df in docfields:
- create_custom_field_if_values_exist(dt, df)
diff --git a/erpnext/patches/v4_0/create_price_list_if_missing.py b/erpnext/patches/v4_0/create_price_list_if_missing.py
deleted file mode 100644
index 039e52111c90..000000000000
--- a/erpnext/patches/v4_0/create_price_list_if_missing.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe import _
-from frappe.utils.nestedset import get_root_of
-
-def execute():
- # setup not complete
- if not frappe.db.sql("""select name from tabCompany limit 1"""):
- return
-
- if "shopping_cart" in frappe.get_installed_apps():
- frappe.reload_doc("shopping_cart", "doctype", "shopping_cart_settings")
-
- if not frappe.db.sql("select name from `tabPrice List` where buying=1"):
- create_price_list(_("Standard Buying"), buying=1)
-
- if not frappe.db.sql("select name from `tabPrice List` where selling=1"):
- create_price_list(_("Standard Selling"), selling=1)
-
-def create_price_list(pl_name, buying=0, selling=0):
- price_list = frappe.get_doc({
- "doctype": "Price List",
- "price_list_name": pl_name,
- "enabled": 1,
- "buying": buying,
- "selling": selling,
- "currency": frappe.db.get_default("currency"),
- "territories": [{
- "territory": get_root_of("Territory")
- }]
- })
- price_list.insert()
diff --git a/erpnext/patches/v4_0/customer_discount_to_pricing_rule.py b/erpnext/patches/v4_0/customer_discount_to_pricing_rule.py
deleted file mode 100644
index 1b260c48cc11..000000000000
--- a/erpnext/patches/v4_0/customer_discount_to_pricing_rule.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils.nestedset import get_root_of
-
-def execute():
- frappe.reload_doc("accounts", "doctype", "pricing_rule")
-
- frappe.db.auto_commit_on_many_writes = True
-
- default_item_group = get_root_of("Item Group")
-
- for d in frappe.db.sql("""select * from `tabCustomer Discount`
- where ifnull(parent, '') != ''""", as_dict=1):
- if not d.discount:
- continue
-
- frappe.get_doc({
- "doctype": "Pricing Rule",
- "apply_on": "Item Group",
- "item_group": d.item_group or default_item_group,
- "applicable_for": "Customer",
- "customer": d.parent,
- "price_or_discount": "Discount Percentage",
- "discount_percentage": d.discount,
- "selling": 1
- }).insert()
-
- frappe.db.auto_commit_on_many_writes = False
-
- frappe.delete_doc("DocType", "Customer Discount")
diff --git a/erpnext/patches/v4_0/fields_to_be_renamed.py b/erpnext/patches/v4_0/fields_to_be_renamed.py
deleted file mode 100644
index cc176971327a..000000000000
--- a/erpnext/patches/v4_0/fields_to_be_renamed.py
+++ /dev/null
@@ -1,109 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-from frappe.modules import scrub, get_doctype_module
-
-rename_map = {
- "Quotation Item": [
- ["ref_rate", "price_list_rate"],
- ["base_ref_rate", "base_price_list_rate"],
- ["adj_rate", "discount_percentage"],
- ["export_rate", "rate"],
- ["basic_rate", "base_rate"],
- ["amount", "base_amount"],
- ["export_amount", "amount"]
- ],
-
- "Sales Order Item": [
- ["ref_rate", "price_list_rate"],
- ["base_ref_rate", "base_price_list_rate"],
- ["adj_rate", "discount_percentage"],
- ["export_rate", "rate"],
- ["basic_rate", "base_rate"],
- ["amount", "base_amount"],
- ["export_amount", "amount"],
- ["reserved_warehouse", "warehouse"]
- ],
-
- "Delivery Note Item": [
- ["ref_rate", "price_list_rate"],
- ["base_ref_rate", "base_price_list_rate"],
- ["adj_rate", "discount_percentage"],
- ["export_rate", "rate"],
- ["basic_rate", "base_rate"],
- ["amount", "base_amount"],
- ["export_amount", "amount"]
- ],
-
- "Sales Invoice Item": [
- ["ref_rate", "price_list_rate"],
- ["base_ref_rate", "base_price_list_rate"],
- ["adj_rate", "discount_percentage"],
- ["export_rate", "rate"],
- ["basic_rate", "base_rate"],
- ["amount", "base_amount"],
- ["export_amount", "amount"]
- ],
-
- "Supplier Quotation Item": [
- ["import_ref_rate", "price_list_rate"],
- ["purchase_ref_rate", "base_price_list_rate"],
- ["discount_rate", "discount_percentage"],
- ["import_rate", "rate"],
- ["purchase_rate", "base_rate"],
- ["amount", "base_amount"],
- ["import_amount", "amount"]
- ],
-
- "Purchase Order Item": [
- ["import_ref_rate", "price_list_rate"],
- ["purchase_ref_rate", "base_price_list_rate"],
- ["discount_rate", "discount_percentage"],
- ["import_rate", "rate"],
- ["purchase_rate", "base_rate"],
- ["amount", "base_amount"],
- ["import_amount", "amount"]
- ],
-
- "Purchase Receipt Item": [
- ["import_ref_rate", "price_list_rate"],
- ["purchase_ref_rate", "base_price_list_rate"],
- ["discount_rate", "discount_percentage"],
- ["import_rate", "rate"],
- ["purchase_rate", "base_rate"],
- ["amount", "base_amount"],
- ["import_amount", "amount"]
- ],
-
- "Purchase Invoice Item": [
- ["import_ref_rate", "price_list_rate"],
- ["purchase_ref_rate", "base_price_list_rate"],
- ["discount_rate", "discount_percentage"],
- ["import_rate", "rate"],
- ["rate", "base_rate"],
- ["amount", "base_amount"],
- ["import_amount", "amount"],
- ["expense_head", "expense_account"]
- ],
-
- "Item": [
- ["purchase_account", "expense_account"],
- ["default_sales_cost_center", "selling_cost_center"],
- ["cost_center", "buying_cost_center"],
- ["default_income_account", "income_account"],
- ],
- "Item Price": [
- ["ref_rate", "price_list_rate"]
- ]
-}
-
-def execute():
- for dn in rename_map:
- frappe.reload_doc(get_doctype_module(dn), "doctype", scrub(dn))
-
- for dt, field_list in rename_map.items():
- for field in field_list:
- rename_field(dt, field[0], field[1])
diff --git a/erpnext/patches/v4_0/fix_address_template.py b/erpnext/patches/v4_0/fix_address_template.py
deleted file mode 100644
index 905e3db3e873..000000000000
--- a/erpnext/patches/v4_0/fix_address_template.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- missing_line = """{{ address_line1 }}
"""
- for name, template in frappe.db.sql("select name, template from `tabAddress Template`"):
- if missing_line not in template:
- d = frappe.get_doc("Address Template", name)
- d.template = missing_line + d.template
- d.save()
diff --git a/erpnext/patches/v4_0/fix_case_of_hr_module_def.py b/erpnext/patches/v4_0/fix_case_of_hr_module_def.py
deleted file mode 100644
index e77b427b77e3..000000000000
--- a/erpnext/patches/v4_0/fix_case_of_hr_module_def.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- hr = frappe.db.get_value("Module Def", "HR")
- if hr == "Hr":
- frappe.rename_doc("Module Def", "Hr", "HR")
- frappe.db.set_value("Module Def", "HR", "module_name", "HR")
-
- frappe.clear_cache()
- frappe.setup_module_map()
diff --git a/erpnext/patches/v4_0/fix_contact_address.py b/erpnext/patches/v4_0/fix_contact_address.py
deleted file mode 100644
index 6a3e106b8cc1..000000000000
--- a/erpnext/patches/v4_0/fix_contact_address.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("website", "doctype", "contact_us_settings")
- address = frappe.db.get_value("Contact Us Settings", None, "address")
- if address:
- address = frappe.get_doc("Address", address)
- contact = frappe.get_doc("Contact Us Settings", "Contact Us Settings")
- for f in ("address_title", "address_line1", "address_line2", "city", "state", "country", "pincode"):
- contact.set(f, address.get(f))
-
- contact.save()
\ No newline at end of file
diff --git a/erpnext/patches/v4_0/fix_employee_user_id.py b/erpnext/patches/v4_0/fix_employee_user_id.py
deleted file mode 100644
index 6f449f97bb67..000000000000
--- a/erpnext/patches/v4_0/fix_employee_user_id.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-
-import frappe
-from frappe.utils import get_fullname
-
-def execute():
- for user_id in frappe.db.sql_list("""select distinct user_id from `tabEmployee`
- where ifnull(user_id, '')!=''
- group by user_id having count(name) > 1"""):
-
- fullname = get_fullname(user_id)
- employee = frappe.db.get_value("Employee", {"employee_name": fullname, "user_id": user_id})
-
- if employee:
- frappe.db.sql("""update `tabEmployee` set user_id=null
- where user_id=%s and name!=%s""", (user_id, employee))
- else:
- count = frappe.db.sql("""select count(*) from `tabEmployee` where user_id=%s""", user_id)[0][0]
- frappe.db.sql("""update `tabEmployee` set user_id=null
- where user_id=%s limit %s""", (user_id, count - 1))
diff --git a/erpnext/patches/v4_0/global_defaults_to_system_settings.py b/erpnext/patches/v4_0/global_defaults_to_system_settings.py
deleted file mode 100644
index 2905fe1e6a97..000000000000
--- a/erpnext/patches/v4_0/global_defaults_to_system_settings.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# MIT License. See license.txt
-
-from __future__ import unicode_literals
-
-import frappe
-from collections import Counter
-from frappe.core.doctype.user.user import STANDARD_USERS
-
-def execute():
- frappe.reload_doc("core", "doctype", "system_settings")
- system_settings = frappe.get_doc("System Settings")
-
- # set values from global_defauls
- global_defaults = frappe.db.get_value("Global Defaults", None,
- ["time_zone", "date_format", "number_format", "float_precision", "session_expiry"], as_dict=True)
-
- if global_defaults:
- for key, val in global_defaults.items():
- if not system_settings.get(key):
- system_settings.set(key, val)
-
- # language
- if not system_settings.get("language"):
- # find most common language
- lang = frappe.db.sql_list("""select language from `tabUser`
- where ifnull(language, '')!='' and language not like "Loading%%" and name not in ({standard_users})""".format(
- standard_users=", ".join(["%s"]*len(STANDARD_USERS))), tuple(STANDARD_USERS))
- lang = Counter(lang).most_common(1)
- lang = (len(lang) > 0) and lang[0][0] or "english"
-
- system_settings.language = lang
-
- system_settings.flags.ignore_mandatory = True
- system_settings.save()
-
- global_defaults = frappe.get_doc("Global Defaults")
- global_defaults.flags.ignore_mandatory = True
- global_defaults.save()
diff --git a/erpnext/patches/v4_0/import_country_codes.py b/erpnext/patches/v4_0/import_country_codes.py
deleted file mode 100644
index 43e23d5b631d..000000000000
--- a/erpnext/patches/v4_0/import_country_codes.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# MIT License. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.geo.country_info import get_all
-from frappe.utils.install import import_country_and_currency
-
-from six import iteritems
-
-def execute():
- frappe.reload_doc("setup", "doctype", "country")
- import_country_and_currency()
- for name, country in iteritems(get_all()):
- frappe.set_value("Country", name, "code", country.get("code"))
\ No newline at end of file
diff --git a/erpnext/patches/v4_0/map_charge_to_taxes_and_charges.py b/erpnext/patches/v4_0/map_charge_to_taxes_and_charges.py
deleted file mode 100644
index 97e217aa054e..000000000000
--- a/erpnext/patches/v4_0/map_charge_to_taxes_and_charges.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # update sales cycle
- for d in ['Sales Invoice', 'Sales Order', 'Quotation', 'Delivery Note']:
- frappe.db.sql("""update `tab%s` set taxes_and_charges=charge""" % d)
-
- # update purchase cycle
- for d in ['Purchase Invoice', 'Purchase Order', 'Supplier Quotation', 'Purchase Receipt']:
- frappe.db.sql("""update `tab%s` set taxes_and_charges=purchase_other_charges""" % d)
-
- frappe.db.sql("""update `tabPurchase Taxes and Charges` set parentfield='other_charges'""")
diff --git a/erpnext/patches/v4_0/move_warehouse_user_to_restrictions.py b/erpnext/patches/v4_0/move_warehouse_user_to_restrictions.py
deleted file mode 100644
index 8b81936d8d44..000000000000
--- a/erpnext/patches/v4_0/move_warehouse_user_to_restrictions.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import frappe.permissions
-
-def execute():
- for warehouse, user in frappe.db.sql("""select parent, user from `tabWarehouse User`"""):
- frappe.permissions.add_user_permission("Warehouse", warehouse, user)
-
- frappe.delete_doc_if_exists("DocType", "Warehouse User")
- frappe.reload_doc("stock", "doctype", "warehouse")
diff --git a/erpnext/patches/v4_0/new_address_template.py b/erpnext/patches/v4_0/new_address_template.py
deleted file mode 100644
index fa6602706e94..000000000000
--- a/erpnext/patches/v4_0/new_address_template.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("utilities", "doctype", "address_template")
- if not frappe.db.sql("select name from `tabAddress Template`"):
- try:
- d = frappe.new_doc("Address Template")
- d.update({"country":frappe.db.get_default("country") or
- frappe.db.get_value("Global Defaults", "Global Defaults", "country")})
- d.insert()
- except:
- print(frappe.get_traceback())
-
diff --git a/erpnext/patches/v4_0/reload_sales_print_format.py b/erpnext/patches/v4_0/reload_sales_print_format.py
deleted file mode 100644
index b8f090f9f3dc..000000000000
--- a/erpnext/patches/v4_0/reload_sales_print_format.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('accounts', 'Print Format', 'POS Invoice')
diff --git a/erpnext/patches/v4_0/remove_employee_role_if_no_employee.py b/erpnext/patches/v4_0/remove_employee_role_if_no_employee.py
deleted file mode 100644
index 8766ace54f3d..000000000000
--- a/erpnext/patches/v4_0/remove_employee_role_if_no_employee.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import frappe.permissions
-
-def execute():
- for user in frappe.db.sql_list("select distinct parent from `tabHas Role` where role='Employee'"):
- # if employee record does not exists, remove employee role!
- if not frappe.db.get_value("Employee", {"user_id": user}):
- try:
- user = frappe.get_doc("User", user)
- for role in user.get("roles", {"role": "Employee"}):
- user.get("roles").remove(role)
- user.save()
- except frappe.DoesNotExistError:
- pass
diff --git a/erpnext/patches/v4_0/remove_module_home_pages.py b/erpnext/patches/v4_0/remove_module_home_pages.py
deleted file mode 100644
index a2720e0ebf7f..000000000000
--- a/erpnext/patches/v4_0/remove_module_home_pages.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for page in ("accounts-home", "website-home", "support-home", "stock-home", "selling-home", "projects-home",
- "manufacturing-home", "hr-home", "buying-home"):
- frappe.delete_doc("Page", page)
\ No newline at end of file
diff --git a/erpnext/patches/v4_0/rename_sitemap_to_route.py b/erpnext/patches/v4_0/rename_sitemap_to_route.py
deleted file mode 100644
index ffb1fda1440e..000000000000
--- a/erpnext/patches/v4_0/rename_sitemap_to_route.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-import frappe.model
-
-def execute():
- frappe.reload_doc("setup", "doctype", "item_group")
- frappe.reload_doc("stock", "doctype", "item")
- frappe.reload_doc("setup", "doctype", "sales_partner")
-
- try:
- frappe.model.rename_field("Item Group", "parent_website_sitemap", "parent_website_route")
- frappe.model.rename_field("Item", "parent_website_sitemap", "parent_website_route")
- frappe.model.rename_field("Sales Partner", "parent_website_sitemap",
- "parent_website_route")
- except Exception as e:
- if e.args[0]!=1054:
- raise
diff --git a/erpnext/patches/v4_0/reset_permissions_for_masters.py b/erpnext/patches/v4_0/reset_permissions_for_masters.py
deleted file mode 100644
index bc1b438e2bb9..000000000000
--- a/erpnext/patches/v4_0/reset_permissions_for_masters.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-from frappe.permissions import reset_perms
-
-def execute():
- for doctype in ("About Us Settings", "Accounts Settings", "Activity Type",
- "Blog Category", "Blog Settings", "Blogger", "Branch", "Brand", "Buying Settings",
- "Communication", "Company", "Contact Us Settings",
- "Country", "Currency", "Currency Exchange", "Deduction Type", "Department",
- "Designation", "Earning Type", "Event", "Feed", "File", "Fiscal Year",
- "HR Settings", "Industry Type", "Leave Type", "Letter Head",
- "Mode of Payment", "Module Def", "Naming Series", "POS Setting", "Print Heading",
- "Report", "Role", "Selling Settings", "Stock Settings", "Supplier Type", "UOM"):
- try:
- reset_perms(doctype)
- except:
- print("Error resetting perms for", doctype)
- raise
diff --git a/erpnext/patches/v4_0/save_default_letterhead.py b/erpnext/patches/v4_0/save_default_letterhead.py
deleted file mode 100644
index 5d75f096b3a2..000000000000
--- a/erpnext/patches/v4_0/save_default_letterhead.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- """save default letterhead to set default_letter_head_content"""
- try:
- letter_head = frappe.get_doc("Letter Head", {"is_default": 1})
- letter_head.save()
- except frappe.DoesNotExistError:
- pass
diff --git a/erpnext/patches/v4_0/set_pricing_rule_for_buying_or_selling.py b/erpnext/patches/v4_0/set_pricing_rule_for_buying_or_selling.py
deleted file mode 100644
index 7e472e219539..000000000000
--- a/erpnext/patches/v4_0/set_pricing_rule_for_buying_or_selling.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("accounts", "doctype", "pricing_rule")
- frappe.db.sql("""update `tabPricing Rule` set selling=1 where ifnull(applicable_for, '') in
- ('', 'Customer', 'Customer Group', 'Territory', 'Sales Partner', 'Campaign')""")
-
- frappe.db.sql("""update `tabPricing Rule` set buying=1 where ifnull(applicable_for, '') in
- ('', 'Supplier', 'Supplier Type')""")
diff --git a/erpnext/patches/v4_0/split_email_settings.py b/erpnext/patches/v4_0/split_email_settings.py
deleted file mode 100644
index 5d1dea60ee05..000000000000
--- a/erpnext/patches/v4_0/split_email_settings.py
+++ /dev/null
@@ -1,67 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
- print("WARNING!!!! Email Settings not migrated. Please setup your email again.")
-
- # this will happen if you are migrating very old accounts
- # comment out this line below and remember to create new Email Accounts
- # for incoming and outgoing mails
- raise Exception
-
- return
-
-
- frappe.reload_doc("core", "doctype", "outgoing_email_settings")
- frappe.reload_doc("support", "doctype", "support_email_settings")
-
- email_settings = get_email_settings()
- map_outgoing_email_settings(email_settings)
- map_support_email_settings(email_settings)
-
-
-def map_outgoing_email_settings(email_settings):
- outgoing_email_settings = frappe.get_doc("Outgoing Email Settings")
- for fieldname in (("outgoing_mail_server", "mail_server"),
- "use_ssl", "mail_port", "mail_login", "mail_password",
- "always_use_login_id_as_sender", "auto_email_id"):
-
- if isinstance(fieldname, tuple):
- from_fieldname, to_fieldname = fieldname
- else:
- from_fieldname = to_fieldname = fieldname
-
- outgoing_email_settings.set(to_fieldname, email_settings.get(from_fieldname))
-
- outgoing_email_settings._fix_numeric_types()
- outgoing_email_settings.save()
-
-def map_support_email_settings(email_settings):
- support_email_settings = frappe.get_doc("Support Email Settings")
-
- for fieldname in ("sync_support_mails", "support_email",
- ("support_host", "mail_server"),
- ("support_use_ssl", "use_ssl"),
- ("support_username", "mail_login"),
- ("support_password", "mail_password"),
- "support_signature", "send_autoreply", "support_autoreply"):
-
- if isinstance(fieldname, tuple):
- from_fieldname, to_fieldname = fieldname
- else:
- from_fieldname = to_fieldname = fieldname
-
- support_email_settings.set(to_fieldname, email_settings.get(from_fieldname))
-
- support_email_settings._fix_numeric_types()
- support_email_settings.save()
-
-def get_email_settings():
- ret = {}
- for field, value in frappe.db.sql("select field, value from tabSingles where doctype='Email Settings'"):
- ret[field] = value
- return ret
-
diff --git a/erpnext/patches/v4_0/update_account_root_type.py b/erpnext/patches/v4_0/update_account_root_type.py
deleted file mode 100644
index 15ddf032a4ac..000000000000
--- a/erpnext/patches/v4_0/update_account_root_type.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("accounts", "doctype", "account")
-
- account_table_columns = frappe.db.get_table_columns("Account")
- if "debit_or_credit" in account_table_columns and "is_pl_account" in account_table_columns:
- frappe.db.sql("""UPDATE tabAccount
- SET root_type = CASE
- WHEN (debit_or_credit='Debit' and is_pl_account = 'No') THEN 'Asset'
- WHEN (debit_or_credit='Credit' and is_pl_account = 'No') THEN 'Liability'
- WHEN (debit_or_credit='Debit' and is_pl_account = 'Yes') THEN 'Expense'
- WHEN (debit_or_credit='Credit' and is_pl_account = 'Yes') THEN 'Income'
- END
- WHERE ifnull(parent_account, '') = ''
- """)
-
- else:
- for key, root_type in (("asset", "Asset"), ("liabilities", "Liability"), ("expense", "Expense"),
- ("income", "Income")):
- frappe.db.sql("""update tabAccount set root_type=%s where name like %s
- and ifnull(parent_account, '')=''""", (root_type, "%" + key + "%"))
-
- for root in frappe.db.sql("""SELECT name, lft, rgt, root_type FROM `tabAccount`
- WHERE ifnull(parent_account, '')=''""", as_dict=True):
- if root.root_type:
- frappe.db.sql("""UPDATE tabAccount SET root_type=%s WHERE lft>%s and rgt<%s""",
- (root.root_type, root.lft, root.rgt))
- else:
- print(b"Root type not found for {0}".format(root.name.encode("utf-8")))
diff --git a/erpnext/patches/v4_0/update_custom_print_formats_for_renamed_fields.py b/erpnext/patches/v4_0/update_custom_print_formats_for_renamed_fields.py
deleted file mode 100644
index d784a1b18287..000000000000
--- a/erpnext/patches/v4_0/update_custom_print_formats_for_renamed_fields.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import re
-
-def execute():
- # NOTE: sequence is important
- fields_list = (
- ("amount", "base_amount"),
- ("ref_rate", "price_list_rate"),
- ("base_ref_rate", "base_price_list_rate"),
- ("adj_rate", "discount_percentage"),
- ("export_rate", "rate"),
- ("basic_rate", "base_rate"),
- ("export_amount", "amount"),
- ("reserved_warehouse", "warehouse"),
- ("import_ref_rate", "price_list_rate"),
- ("purchase_ref_rate", "base_price_list_rate"),
- ("discount_rate", "discount_percentage"),
- ("import_rate", "rate"),
- ("purchase_rate", "base_rate"),
- ("import_amount", "amount")
- )
-
- condition = " or ".join("""html like "%%{}%%" """.format(d[0].replace("_", "\\_")) for d in fields_list
- if d[0] != "amount")
-
- for name, html in frappe.db.sql("""select name, html from `tabPrint Format`
- where standard = 'No' and ({}) and html not like '%%frappe.%%'""".format(condition)):
- html = html.replace("wn.", "frappe.")
- for from_field, to_field in fields_list:
- html = re.sub(r"\b{}\b".format(from_field), to_field, html)
-
- frappe.db.set_value("Print Format", name, "html", html)
diff --git a/erpnext/patches/v4_0/update_incharge_name_to_sales_person_in_maintenance_schedule.py b/erpnext/patches/v4_0/update_incharge_name_to_sales_person_in_maintenance_schedule.py
deleted file mode 100644
index fe66a5e3ef95..000000000000
--- a/erpnext/patches/v4_0/update_incharge_name_to_sales_person_in_maintenance_schedule.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("support", "doctype", "schedules")
- frappe.reload_doc("support", "doctype", "maintenance_schedule_item")
-
- frappe.db.sql("""update `tabMaintenance Schedule Detail` set sales_person=incharge_name""")
- frappe.db.sql("""update `tabMaintenance Schedule Item` set sales_person=incharge_name""")
\ No newline at end of file
diff --git a/erpnext/patches/v4_0/update_other_charges_in_custom_purchase_print_formats.py b/erpnext/patches/v4_0/update_other_charges_in_custom_purchase_print_formats.py
deleted file mode 100644
index 2e2e77a9fcae..000000000000
--- a/erpnext/patches/v4_0/update_other_charges_in_custom_purchase_print_formats.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import re
-
-def execute():
- for name, html in frappe.db.sql("""select name, html from `tabPrint Format`
- where standard = 'No' and html like '%%purchase\\_tax\\_details%%'"""):
- html = re.sub(r"\bpurchase_tax_details\b", "taxes", html)
- frappe.db.set_value("Print Format", name, "html", html)
diff --git a/erpnext/patches/v4_0/update_tax_amount_after_discount.py b/erpnext/patches/v4_0/update_tax_amount_after_discount.py
deleted file mode 100644
index d10329ef3755..000000000000
--- a/erpnext/patches/v4_0/update_tax_amount_after_discount.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("accounts", "doctype", "sales_taxes_and_charges")
- docs_with_discount_amount = frappe._dict()
- for dt in ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]:
- records = frappe.db.sql_list("""select name from `tab%s`
- where ifnull(discount_amount, 0) > 0 and docstatus=1""" % dt)
- docs_with_discount_amount[dt] = records
-
- for dt, discounted_records in docs_with_discount_amount.items():
- frappe.db.sql("""update `tabSales Taxes and Charges`
- set tax_amount_after_discount_amount = tax_amount
- where parenttype = %s and parent not in (%s)""" %
- ('%s', ', '.join(['%s']*(len(discounted_records)+1))),
- tuple([dt, ''] + discounted_records))
diff --git a/erpnext/patches/v4_0/update_user_properties.py b/erpnext/patches/v4_0/update_user_properties.py
deleted file mode 100644
index f2085ce4df62..000000000000
--- a/erpnext/patches/v4_0/update_user_properties.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import frappe.permissions
-import frappe.defaults
-
-def execute():
- frappe.reload_doc("core", "doctype", "docfield")
- frappe.reload_doc("hr", "doctype", "employee")
-
- set_print_email_permissions()
- migrate_user_properties_to_user_permissions()
-
- frappe.clear_cache()
-
-def migrate_user_properties_to_user_permissions():
- for d in frappe.db.sql("""select parent, defkey, defvalue from tabDefaultValue
- where parent not in ('__global', '__default')""", as_dict=True):
- df = frappe.db.sql("""select options from tabDocField
- where fieldname=%s and fieldtype='Link'""", d.defkey, as_dict=True)
-
- if df:
- frappe.db.sql("""update tabDefaultValue
- set defkey=%s, parenttype='User Permission'
- where defkey=%s and
- parent not in ('__global', '__default')""", (df[0].options, d.defkey))
-
-def set_print_email_permissions():
- # reset Page perms
- from frappe.core.page.permission_manager.permission_manager import reset
- reset("Page")
- reset("Report")
-
- if "allow_print" not in frappe.db.get_table_columns("DocType"):
- return
-
- # patch to move print, email into DocPerm
- # NOTE: allow_print and allow_email are misnamed. They were used to hide print / hide email
- for doctype, hide_print, hide_email in frappe.db.sql("""select name, ifnull(allow_print, 0), ifnull(allow_email, 0)
- from `tabDocType` where ifnull(issingle, 0)=0 and ifnull(istable, 0)=0 and
- (ifnull(allow_print, 0)=0 or ifnull(allow_email, 0)=0)"""):
-
- if not hide_print:
- frappe.db.sql("""update `tabDocPerm` set `print`=1
- where permlevel=0 and `read`=1 and parent=%s""", doctype)
-
- if not hide_email:
- frappe.db.sql("""update `tabDocPerm` set `email`=1
- where permlevel=0 and `read`=1 and parent=%s""", doctype)
diff --git a/erpnext/patches/v4_0/update_users_report_view_settings.py b/erpnext/patches/v4_0/update_users_report_view_settings.py
deleted file mode 100644
index 6f216f5b38b5..000000000000
--- a/erpnext/patches/v4_0/update_users_report_view_settings.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-
-from frappe.model.utils.rename_field import update_users_report_view_settings
-from erpnext.patches.v4_0.fields_to_be_renamed import rename_map
-
-def execute():
- for dt, field_list in rename_map.items():
- for field in field_list:
- update_users_report_view_settings(dt, field[0], field[1])
diff --git a/erpnext/patches/v4_0/validate_v3_patch.py b/erpnext/patches/v4_0/validate_v3_patch.py
deleted file mode 100644
index 3df39edea694..000000000000
--- a/erpnext/patches/v4_0/validate_v3_patch.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- from frappe.modules.patch_handler import executed
- last_v3_patch = 'patches.1401.fix_pos_outstanding'
- if not executed(last_v3_patch):
- raise Exception("site not ready to migrate to version 4")
diff --git a/erpnext/patches/v4_1/__init__.py b/erpnext/patches/v4_1/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v4_1/fix_delivery_and_billing_status.py b/erpnext/patches/v4_1/fix_delivery_and_billing_status.py
deleted file mode 100644
index 8cc6a4b0bed6..000000000000
--- a/erpnext/patches/v4_1/fix_delivery_and_billing_status.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.sql("""update `tabSales Order` set delivery_status = 'Not Delivered'
- where delivery_status = 'Delivered' and ifnull(per_delivered, 0) = 0 and ifnull(docstatus, 0) in (0, 1)""")
-
- frappe.db.sql("""update `tabSales Order` set billing_status = 'Not Billed'
- where billing_status = 'Billed' and ifnull(per_billed, 0) = 0 and ifnull(docstatus, 0) in (0, 1)""")
diff --git a/erpnext/patches/v4_1/fix_jv_remarks.py b/erpnext/patches/v4_1/fix_jv_remarks.py
deleted file mode 100644
index e07bf05f1a53..000000000000
--- a/erpnext/patches/v4_1/fix_jv_remarks.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- reference_date = guess_reference_date()
- for name in frappe.db.sql_list("""select name from `tabJournal Entry`
- where date(creation)>=%s""", reference_date):
- jv = frappe.get_doc("Journal Entry", name)
- try:
- jv.create_remarks()
- except frappe.MandatoryError:
- pass
- else:
- frappe.db.set_value("Journal Entry", jv.name, "remark", jv.remark)
-
-def guess_reference_date():
- return (frappe.db.get_value("Patch Log", {"patch": "erpnext.patches.v4_0.validate_v3_patch"}, "creation")
- or "2014-05-06")
diff --git a/erpnext/patches/v4_1/fix_sales_order_delivered_status.py b/erpnext/patches/v4_1/fix_sales_order_delivered_status.py
deleted file mode 100644
index 66037b8958ba..000000000000
--- a/erpnext/patches/v4_1/fix_sales_order_delivered_status.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for si in frappe.db.sql_list("""select name
- from `tabSales Invoice`
- where ifnull(update_stock,0) = 1 and docstatus = 1 and exists(
- select name from `tabSales Invoice Item` where parent=`tabSales Invoice`.name and
- ifnull(so_detail, "") != "")"""):
-
- invoice = frappe.get_doc("Sales Invoice", si)
- invoice.update_qty()
diff --git a/erpnext/patches/v4_1/set_outgoing_email_footer.py b/erpnext/patches/v4_1/set_outgoing_email_footer.py
deleted file mode 100644
index 54d016bf5f66..000000000000
--- a/erpnext/patches/v4_1/set_outgoing_email_footer.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.setup.install import default_mail_footer
-
-def execute():
- return
- mail_footer = frappe.db.get_default('mail_footer') or ''
- mail_footer += default_mail_footer
- frappe.db.set_value("Outgoing Email Settings", "Outgoing Email Settings", "footer", mail_footer)
diff --git a/erpnext/patches/v4_2/__init__.py b/erpnext/patches/v4_2/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v4_2/add_currency_turkish_lira.py b/erpnext/patches/v4_2/add_currency_turkish_lira.py
deleted file mode 100644
index 1a46089f943a..000000000000
--- a/erpnext/patches/v4_2/add_currency_turkish_lira.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- return
- # country = get_country_info(country="Turkey")
- # add_country_and_currency("Turkey", country)
diff --git a/erpnext/patches/v4_2/default_website_style.py b/erpnext/patches/v4_2/default_website_style.py
deleted file mode 100644
index e8f9502ea626..000000000000
--- a/erpnext/patches/v4_2/default_website_style.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- return
- # frappe.reload_doc('website', 'doctype', 'style_settings')
- # style_settings = frappe.get_doc("Style Settings", "Style Settings")
- # if not style_settings.apply_style:
- # style_settings.update(default_properties)
- # style_settings.apply_style = 1
- # style_settings.save()
diff --git a/erpnext/patches/v4_2/delete_gl_entries_for_cancelled_invoices.py b/erpnext/patches/v4_2/delete_gl_entries_for_cancelled_invoices.py
deleted file mode 100644
index 169b1e292754..000000000000
--- a/erpnext/patches/v4_2/delete_gl_entries_for_cancelled_invoices.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- cancelled_invoices = frappe.db.sql_list("""select name from `tabSales Invoice`
- where docstatus = 2 and ifnull(update_stock, 0) = 1""")
-
- if cancelled_invoices:
- frappe.db.sql("""delete from `tabGL Entry`
- where voucher_type = 'Sales Invoice' and voucher_no in (%s)"""
- % (', '.join(['%s']*len(cancelled_invoices))), tuple(cancelled_invoices))
\ No newline at end of file
diff --git a/erpnext/patches/v4_2/delete_old_print_formats.py b/erpnext/patches/v4_2/delete_old_print_formats.py
deleted file mode 100644
index cacdb85ce070..000000000000
--- a/erpnext/patches/v4_2/delete_old_print_formats.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- old_formats = ("Sales Invoice", "Sales Invoice Spartan", "Sales Invoice Modern",
- "Sales Invoice Classic",
- "Sales Order Spartan", "Sales Order Modern", "Sales Order Classic",
- "Purchase Order Spartan", "Purchase Order Modern", "Purchase Order Classic",
- "Quotation Spartan", "Quotation Modern", "Quotation Classic",
- "Delivery Note Spartan", "Delivery Note Modern", "Delivery Note Classic")
-
- for fmt in old_formats:
- # update property setter
- for ps in frappe.db.sql_list("""select name from `tabProperty Setter`
- where property='default_print_format' and value=%s""", fmt):
- ps = frappe.get_doc("Property Setter", ps)
- ps.value = "Standard"
- ps.save(ignore_permissions = True)
-
- frappe.delete_doc_if_exists("Print Format", fmt)
diff --git a/erpnext/patches/v4_2/discount_amount.py b/erpnext/patches/v4_2/discount_amount.py
deleted file mode 100644
index 7ab61bdbeaa6..000000000000
--- a/erpnext/patches/v4_2/discount_amount.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.modules import scrub, get_doctype_module
-
-def execute():
- for dt in ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]:
- frappe.reload_doc(get_doctype_module(dt), "doctype", scrub(dt))
- frappe.db.sql("""update `tab{0}` set base_discount_amount=discount_amount,
- discount_amount=discount_amount/conversion_rate""".format(dt))
diff --git a/erpnext/patches/v4_2/fix_account_master_type.py b/erpnext/patches/v4_2/fix_account_master_type.py
deleted file mode 100644
index 99444ce83b2e..000000000000
--- a/erpnext/patches/v4_2/fix_account_master_type.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for d in frappe.db.sql("""select name from `tabAccount`
- where ifnull(master_type, '') not in ('Customer', 'Supplier', 'Employee', '') and docstatus=0"""):
- ac = frappe.get_doc("Account", d[0])
- ac.master_type = None
- ac.save()
diff --git a/erpnext/patches/v4_2/fix_gl_entries_for_stock_transactions.py b/erpnext/patches/v4_2/fix_gl_entries_for_stock_transactions.py
deleted file mode 100644
index c6c94d41797e..000000000000
--- a/erpnext/patches/v4_2/fix_gl_entries_for_stock_transactions.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-from frappe.utils import flt
-
-def execute():
- from erpnext.stock.stock_balance import repost
- repost(allow_zero_rate=True, only_actual=True)
-
- frappe.reload_doctype("Account")
-
- warehouse_account = frappe.db.sql("""select name, master_name from tabAccount
- where ifnull(account_type, '') = 'Warehouse'""")
- if warehouse_account:
- warehouses = [d[1] for d in warehouse_account]
- accounts = [d[0] for d in warehouse_account]
-
- stock_vouchers = frappe.db.sql("""select distinct sle.voucher_type, sle.voucher_no
- from `tabStock Ledger Entry` sle
- where sle.warehouse in (%s)
- order by sle.posting_date""" %
- ', '.join(['%s']*len(warehouses)), tuple(warehouses))
-
- rejected = []
- for voucher_type, voucher_no in stock_vouchers:
- stock_bal = frappe.db.sql("""select sum(stock_value_difference) from `tabStock Ledger Entry`
- where voucher_type=%s and voucher_no =%s and warehouse in (%s)""" %
- ('%s', '%s', ', '.join(['%s']*len(warehouses))), tuple([voucher_type, voucher_no] + warehouses))
-
- account_bal = frappe.db.sql("""select ifnull(sum(ifnull(debit, 0) - ifnull(credit, 0)), 0)
- from `tabGL Entry`
- where voucher_type=%s and voucher_no =%s and account in (%s)
- group by voucher_type, voucher_no""" %
- ('%s', '%s', ', '.join(['%s']*len(accounts))), tuple([voucher_type, voucher_no] + accounts))
-
- if stock_bal and account_bal and abs(flt(stock_bal[0][0]) - flt(account_bal[0][0])) > 0.1:
- try:
- print(voucher_type, voucher_no, stock_bal[0][0], account_bal[0][0])
-
- frappe.db.sql("""delete from `tabGL Entry`
- where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no))
-
- voucher = frappe.get_doc(voucher_type, voucher_no)
- voucher.make_gl_entries()
- frappe.db.commit()
- except Exception as e:
- print(frappe.get_traceback())
- rejected.append([voucher_type, voucher_no])
- frappe.db.rollback()
-
- print("Failed to repost: ")
- print(rejected)
diff --git a/erpnext/patches/v4_2/fix_recurring_orders.py b/erpnext/patches/v4_2/fix_recurring_orders.py
deleted file mode 100644
index ea1724a0401a..000000000000
--- a/erpnext/patches/v4_2/fix_recurring_orders.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- sales_orders = frappe.db.sql("""select name from `tabSales Order`
- where docstatus = 1 and ifnull(is_recurring, 0) = 1
- and (per_delivered > 0 or per_billed > 0)""", as_dict=1)
-
- for so in sales_orders:
- if not frappe.db.exists("Delivery Note Item", {"against_sales_order": so.name, "docstatus": 1}):
- frappe.db.sql("""update `tabSales Order` set per_delivered = 0,
- delivery_status = 'Not Delivered' where name = %s""", so.name)
- frappe.db.sql("""update `tabSales Order Item` set delivered_qty = 0
- where parent = %s""", so.name)
-
- if not frappe.db.exists("Sales Invoice Item", {"sales_order": so.name, "docstatus": 1}):
- frappe.db.sql("""update `tabSales Order` set per_billed = 0,
- billing_status = 'Not Billed' where name = %s""", so.name)
- frappe.db.sql("""update `tabSales Order Item` set billed_amt = 0
- where parent = %s""", so.name)
-
- purchase_orders = frappe.db.sql("""select name from `tabPurchase Order`
- where docstatus = 1 and ifnull(is_recurring, 0) = 1
- and (per_received > 0 or per_billed > 0)""", as_dict=1)
-
- for po in purchase_orders:
- if not frappe.db.exists("Purchase Receipt Item", {"prevdoc_doctype": "Purchase Order",
- "prevdoc_docname": po.name, "docstatus": 1}):
- frappe.db.sql("""update `tabPurchase Order` set per_received = 0
- where name = %s""", po.name)
- frappe.db.sql("""update `tabPurchase Order Item` set received_qty = 0
- where parent = %s""", po.name)
-
- if not frappe.db.exists("Purchase Invoice Item", {"purchase_order": po.name, "docstatus": 1}):
- frappe.db.sql("""update `tabPurchase Order` set per_billed = 0
- where name = %s""", po.name)
- frappe.db.sql("""update `tabPurchase Order Item` set billed_amt = 0
- where parent = %s""", po.name)
\ No newline at end of file
diff --git a/erpnext/patches/v4_2/party_model.py b/erpnext/patches/v4_2/party_model.py
deleted file mode 100644
index 46d7fffee10a..000000000000
--- a/erpnext/patches/v4_2/party_model.py
+++ /dev/null
@@ -1,117 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("accounts", "doctype", "account")
- frappe.reload_doc("setup", "doctype", "company")
- frappe.reload_doc("accounts", "doctype", "gl_entry")
- frappe.reload_doc("accounts", "doctype", "journal_entry_account")
- receivable_payable_accounts = create_receivable_payable_account()
- if receivable_payable_accounts:
- set_party_in_jv_and_gl_entry(receivable_payable_accounts)
- delete_individual_party_account()
- remove_customer_supplier_account_report()
-
-def create_receivable_payable_account():
- receivable_payable_accounts = frappe._dict()
-
- def _create_account(args):
- if args["parent_account"] and frappe.db.exists("Account", args["parent_account"]):
- account_id = frappe.db.get_value("Account",
- {"account_name": args["account_name"], "company": args["company"]})
- if not account_id:
- account = frappe.new_doc("Account")
- account.is_group = 0
- account.update(args)
- account.insert()
-
- account_id = account.name
-
- frappe.db.set_value("Company", args["company"], ("default_receivable_account"
- if args["account_type"]=="Receivable" else "default_payable_account"), account_id)
-
- receivable_payable_accounts.setdefault(args["company"], {}).setdefault(args["account_type"], account_id)
-
- for company in frappe.db.sql_list("select name from tabCompany"):
- _create_account({
- "account_name": "Debtors",
- "account_type": "Receivable",
- "company": company,
- "parent_account": get_parent_account(company, "Customer")
- })
-
- _create_account({
- "account_name": "Creditors",
- "account_type": "Payable",
- "company": company,
- "parent_account": get_parent_account(company, "Supplier")
- })
-
- return receivable_payable_accounts
-
-def get_parent_account(company, master_type):
- parent_account = None
-
- if "receivables_group" in frappe.db.get_table_columns("Company"):
- parent_account = frappe.get_cached_value('Company', company,
- "receivables_group" if master_type=="Customer" else "payables_group")
- if not parent_account:
- parent_account = frappe.db.get_value("Account", {"company": company,
- "account_name": "Accounts Receivable" if master_type=="Customer" else "Accounts Payable"})
-
- if not parent_account:
- parent_account = frappe.db.sql_list("""select parent_account from tabAccount
- where company=%s and ifnull(master_type, '')=%s and ifnull(master_name, '')!='' limit 1""",
- (company, master_type))
- parent_account = parent_account[0][0] if parent_account else None
-
- return parent_account
-
-def set_party_in_jv_and_gl_entry(receivable_payable_accounts):
- accounts = frappe.db.sql("""select name, master_type, master_name, company from `tabAccount`
- where ifnull(master_type, '') in ('Customer', 'Supplier') and ifnull(master_name, '') != ''""", as_dict=1)
-
- account_map = frappe._dict()
- for d in accounts:
- account_map.setdefault(d.name, d)
-
- if not account_map:
- return
-
- for dt in ["Journal Entry Account", "GL Entry"]:
- records = frappe.db.sql("""select name, account from `tab%s`
- where account in (%s) and ifnull(party, '') = '' and docstatus < 2""" %
- (dt, ", ".join(['%s']*len(account_map))), tuple(account_map.keys()), as_dict=1)
- for i, d in enumerate(records):
- account_details = account_map.get(d.account, {})
- account_type = "Receivable" if account_details.get("master_type")=="Customer" else "Payable"
- new_account = receivable_payable_accounts[account_details.get("company")][account_type]
-
- frappe.db.sql("update `tab{0}` set account=%s, party_type=%s, party=%s where name=%s".format(dt),
- (new_account, account_details.get("master_type"), account_details.get("master_name"), d.name))
-
- if i%500 == 0:
- frappe.db.commit()
-
-def delete_individual_party_account():
- frappe.db.sql("""delete from `tabAccount`
- where ifnull(master_type, '') in ('Customer', 'Supplier')
- and ifnull(master_name, '') != ''
- and not exists(select gle.name from `tabGL Entry` gle
- where gle.account = tabAccount.name)""")
-
- accounts_not_deleted = frappe.db.sql_list("""select tabAccount.name from `tabAccount`
- where ifnull(master_type, '') in ('Customer', 'Supplier')
- and ifnull(master_name, '') != ''
- and exists(select gle.name from `tabGL Entry` gle where gle.account = tabAccount.name)""")
-
- if accounts_not_deleted:
- print("Accounts not deleted: " + "\n".join(accounts_not_deleted))
-
-
-def remove_customer_supplier_account_report():
- for d in ["Customer Account Head", "Supplier Account Head"]:
- frappe.delete_doc("Report", d)
diff --git a/erpnext/patches/v4_2/recalculate_bom_cost.py b/erpnext/patches/v4_2/recalculate_bom_cost.py
deleted file mode 100644
index eee89fce96bd..000000000000
--- a/erpnext/patches/v4_2/recalculate_bom_cost.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for d in frappe.db.sql("select name from `tabBOM` where docstatus < 2"):
- try:
- document = frappe.get_doc('BOM', d[0])
- if document.docstatus == 1:
- document.flags.ignore_validate_update_after_submit = True
- document.calculate_cost()
- document.save()
- except:
- pass
diff --git a/erpnext/patches/v4_2/repost_sle_for_si_with_no_warehouse.py b/erpnext/patches/v4_2/repost_sle_for_si_with_no_warehouse.py
deleted file mode 100644
index 1356129dc0ab..000000000000
--- a/erpnext/patches/v4_2/repost_sle_for_si_with_no_warehouse.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-from erpnext.stock.stock_ledger import NegativeStockError
-
-def execute():
- si_list = frappe.db.sql("""select distinct si.name
- from `tabSales Invoice Item` si_item, `tabSales Invoice` si
- where si.name = si_item.parent and si.modified > '2015-02-16' and si.docstatus=1
- and ifnull(si_item.warehouse, '') = '' and ifnull(si.update_stock, 0) = 1
- order by posting_date, posting_time""", as_dict=1)
-
- failed_list = []
- for si in si_list:
- try:
- si_doc = frappe.get_doc("Sales Invoice", si.name)
- si_doc.docstatus = 2
- si_doc.on_cancel()
-
- si_doc.docstatus = 1
- si_doc.set_missing_item_details()
- si_doc.on_submit()
- frappe.db.commit()
- except:
- failed_list.append(si.name)
- frappe.local.stockledger_exceptions = None
- frappe.db.rollback()
-
- print("Failed to repost: ", failed_list)
-
-
-
\ No newline at end of file
diff --git a/erpnext/patches/v4_2/repost_stock_reconciliation.py b/erpnext/patches/v4_2/repost_stock_reconciliation.py
deleted file mode 100644
index ad20ebbae414..000000000000
--- a/erpnext/patches/v4_2/repost_stock_reconciliation.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import json
-
-def execute():
- existing_allow_negative_stock = frappe.db.get_value("Stock Settings", None, "allow_negative_stock")
- frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1)
-
- head_row = ["Item Code", "Warehouse", "Quantity", "Valuation Rate"]
- stock_reco_to_be_reposted = []
- for d in frappe.db.sql("""select name, reconciliation_json from `tabStock Reconciliation`
- where docstatus=1 and creation > '2014-03-01'""", as_dict=1):
- data = json.loads(d.reconciliation_json)
- for row in data[data.index(head_row)+1:]:
- if row[3] in ["", None]:
- stock_reco_to_be_reposted.append(d.name)
- break
-
- for dn in stock_reco_to_be_reposted:
- reco = frappe.get_doc("Stock Reconciliation", dn)
- reco.docstatus = 2
- reco.on_cancel()
-
- reco.docstatus = 1
- reco.validate()
- reco.on_submit()
-
- frappe.db.set_value("Stock Settings", None, "allow_negative_stock", existing_allow_negative_stock)
diff --git a/erpnext/patches/v4_2/reset_bom_costs.py b/erpnext/patches/v4_2/reset_bom_costs.py
deleted file mode 100644
index 42ca75946786..000000000000
--- a/erpnext/patches/v4_2/reset_bom_costs.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('manufacturing', 'doctype', 'bom_operation')
- for d in frappe.db.sql("""select name from `tabBOM` where docstatus < 2""", as_dict=1):
- try:
- bom = frappe.get_doc('BOM', d.name)
- bom.flags.ignore_validate_update_after_submit = True
- bom.calculate_cost()
- bom.save()
- frappe.db.commit()
- except:
- frappe.db.rollback()
diff --git a/erpnext/patches/v4_2/seprate_manufacture_and_repack.py b/erpnext/patches/v4_2/seprate_manufacture_and_repack.py
deleted file mode 100644
index 2c935436a2c2..000000000000
--- a/erpnext/patches/v4_2/seprate_manufacture_and_repack.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.sql("""update `tabStock Entry` set purpose='Manufacture' where purpose='Manufacture/Repack' and ifnull(work_order,"")!="" """)
- frappe.db.sql("""update `tabStock Entry` set purpose='Repack' where purpose='Manufacture/Repack' and ifnull(work_order,"")="" """)
\ No newline at end of file
diff --git a/erpnext/patches/v4_2/set_company_country.py b/erpnext/patches/v4_2/set_company_country.py
deleted file mode 100644
index 89f07f287318..000000000000
--- a/erpnext/patches/v4_2/set_company_country.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
- country = frappe.db.get_single_value("Global Defaults", "country")
- if not country:
- print("Country not specified in Global Defaults")
- return
-
- for company in frappe.db.sql_list("""select name from `tabCompany`
- where ifnull(country, '')=''"""):
- frappe.db.set_value("Company", company, "country", country)
diff --git a/erpnext/patches/v4_2/set_item_has_batch.py b/erpnext/patches/v4_2/set_item_has_batch.py
deleted file mode 100644
index 7e52d2def0fb..000000000000
--- a/erpnext/patches/v4_2/set_item_has_batch.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.sql("update tabItem set has_batch_no = 0 where ifnull(has_batch_no, '') = ''")
- frappe.db.sql("update tabItem set has_serial_no = 0 where ifnull(has_serial_no, '') = ''")
-
- item_list = frappe.db.sql("""select name, has_batch_no, has_serial_no from tabItem
- where is_stock_item = 1""", as_dict=1)
-
- sle_count = get_sle_count()
- sle_with_batch = get_sle_with_batch()
- sle_with_serial = get_sle_with_serial()
-
- batch_items = get_items_with_batch()
- serialized_items = get_items_with_serial()
-
- for d in item_list:
- if d.has_batch_no == 1:
- if d.name not in batch_items and sle_count.get(d.name) and sle_count.get(d.name) != sle_with_batch.get(d.name):
- frappe.db.set_value("Item", d.name, "has_batch_no", 0)
- else:
- if d.name in batch_items or (sle_count.get(d.name) and sle_count.get(d.name) == sle_with_batch.get(d.name)):
- frappe.db.set_value("Item", d.name, "has_batch_no", 1)
-
- if d.has_serial_no == 1:
- if d.name not in serialized_items and sle_count.get(d.name) and sle_count.get(d.name) != sle_with_serial.get(d.name):
- frappe.db.set_value("Item", d.name, "has_serial_no", 0)
- else:
- if d.name in serialized_items or (sle_count.get(d.name) and sle_count.get(d.name) == sle_with_serial.get(d.name)):
- frappe.db.set_value("Item", d.name, "has_serial_no", 1)
-
-
-def get_sle_count():
- sle_count = {}
- for d in frappe.db.sql("""select item_code, count(name) as cnt from `tabStock Ledger Entry` group by item_code""", as_dict=1):
- sle_count.setdefault(d.item_code, d.cnt)
-
- return sle_count
-
-def get_sle_with_batch():
- sle_with_batch = {}
- for d in frappe.db.sql("""select item_code, count(name) as cnt from `tabStock Ledger Entry`
- where ifnull(batch_no, '') != '' group by item_code""", as_dict=1):
- sle_with_batch.setdefault(d.item_code, d.cnt)
-
- return sle_with_batch
-
-
-def get_sle_with_serial():
- sle_with_serial = {}
- for d in frappe.db.sql("""select item_code, count(name) as cnt from `tabStock Ledger Entry`
- where ifnull(serial_no, '') != '' group by item_code""", as_dict=1):
- sle_with_serial.setdefault(d.item_code, d.cnt)
-
- return sle_with_serial
-
-def get_items_with_batch():
- return frappe.db.sql_list("select item from tabBatch")
-
-def get_items_with_serial():
- return frappe.db.sql_list("select item_code from `tabSerial No`")
diff --git a/erpnext/patches/v4_2/toggle_rounded_total.py b/erpnext/patches/v4_2/toggle_rounded_total.py
deleted file mode 100644
index e571208eb654..000000000000
--- a/erpnext/patches/v4_2/toggle_rounded_total.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- global_defaults = frappe.get_doc("Global Defaults", "Global Defaults")
- global_defaults.toggle_rounded_total()
diff --git a/erpnext/patches/v4_2/update_landed_cost_voucher.py b/erpnext/patches/v4_2/update_landed_cost_voucher.py
deleted file mode 100644
index ec0029671e41..000000000000
--- a/erpnext/patches/v4_2/update_landed_cost_voucher.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("stock", "doctype", "landed_cost_voucher")
- frappe.db.sql("""update `tabLanded Cost Voucher` set distribute_charges_based_on = 'Amount'
- where docstatus=1""")
diff --git a/erpnext/patches/v4_2/update_project_milestones.py b/erpnext/patches/v4_2/update_project_milestones.py
deleted file mode 100644
index e704116d05c7..000000000000
--- a/erpnext/patches/v4_2/update_project_milestones.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for project in frappe.db.sql_list("select name from tabProject"):
- frappe.reload_doc("projects", "doctype", "project")
- p = frappe.get_doc("Project", project)
- p.update_milestones_completed()
- p.db_set("percent_milestones_completed", p.percent_milestones_completed)
diff --git a/erpnext/patches/v4_2/update_sales_order_invoice_field_name.py b/erpnext/patches/v4_2/update_sales_order_invoice_field_name.py
deleted file mode 100644
index 28dd5c0d4e71..000000000000
--- a/erpnext/patches/v4_2/update_sales_order_invoice_field_name.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('accounts', 'doctype', 'sales_invoice')
- frappe.db.sql("""update `tabSales Invoice` set from_date = invoice_period_from_date,
- to_date = invoice_period_to_date, is_recurring = convert_into_recurring_invoice""")
diff --git a/erpnext/patches/v4_2/update_stock_uom_for_dn_in_sle.py b/erpnext/patches/v4_2/update_stock_uom_for_dn_in_sle.py
deleted file mode 100644
index 89bf7955340b..000000000000
--- a/erpnext/patches/v4_2/update_stock_uom_for_dn_in_sle.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.sql("""update `tabStock Ledger Entry` sle, tabItem item
- set sle.stock_uom = item.stock_uom
- where sle.voucher_type="Delivery Note" and item.name = sle.item_code
- and sle.stock_uom != item.stock_uom""")
diff --git a/erpnext/patches/v4_4/__init__.py b/erpnext/patches/v4_4/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v4_4/make_email_accounts.py b/erpnext/patches/v4_4/make_email_accounts.py
deleted file mode 100644
index 57df1ae49113..000000000000
--- a/erpnext/patches/v4_4/make_email_accounts.py
+++ /dev/null
@@ -1,96 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model import default_fields
-
-from six import iteritems
-
-def execute():
- frappe.reload_doc("email", "doctype", "email_account")
-
- # outgoing
- outgoing = dict(frappe.db.sql("select field, value from tabSingles where doctype='Outgoing Email Settings'"))
- if outgoing and outgoing['mail_server'] and outgoing['mail_login']:
- account = frappe.new_doc("Email Account")
- mapping = {
- "login_id_is_different": 1,
- "email_id": "auto_email_id",
- "login_id": "mail_login",
- "password": "mail_password",
- "footer": "footer",
- "smtp_server": "mail_server",
- "smtp_port": "mail_port",
- "use_tls": "use_ssl"
- }
-
- for target_fieldname, source_fieldname in iteritems(mapping):
- account.set(target_fieldname, outgoing.get(source_fieldname))
-
- account.enable_outgoing = 1
- account.enable_incoming = 0
-
- account.insert()
-
- # support
- support = dict(frappe.db.sql("select field, value from tabSingles where doctype='Support Email Settings'"))
- if support and support['mail_server'] and support['mail_login']:
- account = frappe.new_doc("Email Account")
- mapping = {
- "enable_incoming": "sync_support_mails",
- "email_id": "mail_login",
- "password": "mail_password",
- "email_server": "mail_server",
- "use_ssl": "use_ssl",
- "signature": "support_signature",
- "enable_auto_reply": "send_autoreply",
- "auto_reply_message": "support_autoreply"
- }
-
- for target_fieldname, source_fieldname in iteritems(mapping):
- account.set(target_fieldname, support.get(source_fieldname))
-
- account.enable_outgoing = 0
- account.append_to = "Issue"
-
- insert_or_update(account)
-
- # sales, jobs
- for doctype in ("Sales Email Settings", "Jobs Email Settings"):
- source = dict(frappe.db.sql("select field, value from tabSingles where doctype=%s", doctype))
- if source and source.get('host') and source.get('username'):
- account = frappe.new_doc("Email Account")
- mapping = {
- "enable_incoming": "extract_emails",
- "email_id": "username",
- "password": "password",
- "email_server": "host",
- "use_ssl": "use_ssl",
- }
-
- for target_fieldname, source_fieldname in iteritems(mapping):
- account.set(target_fieldname, source.get(source_fieldname))
-
- account.enable_outgoing = 0
- account.append_to = "Lead" if doctype=="Sales Email Settings" else "Job Applicant"
-
- insert_or_update(account)
-
- for doctype in ("Outgoing Email Settings", "Support Email Settings",
- "Sales Email Settings", "Jobs Email Settings"):
- frappe.delete_doc("DocType", doctype)
-
-def insert_or_update(account):
- try:
- account.insert()
- except frappe.NameError as e:
- if e.args[0]=="Email Account":
- existing_account = frappe.get_doc("Email Account", e.args[1])
- for key, value in account.as_dict().items():
- if not existing_account.get(key) and value \
- and key not in default_fields \
- and key != "__islocal":
- existing_account.set(key, value)
-
- existing_account.save()
- else:
- raise
-
diff --git a/erpnext/patches/v5_0/__init__.py b/erpnext/patches/v5_0/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v5_0/convert_stock_reconciliation.py b/erpnext/patches/v5_0/convert_stock_reconciliation.py
deleted file mode 100644
index 75d1da752f26..000000000000
--- a/erpnext/patches/v5_0/convert_stock_reconciliation.py
+++ /dev/null
@@ -1,31 +0,0 @@
-from __future__ import unicode_literals
-import frappe, json
-
-def execute():
- # stock reco now amendable
- frappe.db.sql("""update tabDocPerm set `amend` = 1 where parent='Stock Reconciliation' and submit = 1""")
-
- frappe.reload_doc("stock", "doctype", "stock_reconciliation_item")
- frappe.reload_doctype("Stock Reconciliation")
-
- if frappe.db.has_column("Stock Reconciliation", "reconciliation_json"):
- for sr in frappe.db.get_all("Stock Reconciliation", ["name"],
- {"reconciliation_json": ["!=", ""]}):
- start = False
- sr = frappe.get_doc("Stock Reconciliation", sr.name)
- for row in json.loads(sr.reconciliation_json):
- if start:
- sr.append("items", {
- "item_code": row[0],
- "warehouse": row[1],
- "qty": row[2] if len(row) > 2 else None,
- "valuation_rate": row[3] if len(row) > 3 else None
- })
-
- elif row[0]=="Item Code":
- start = True
-
-
- for item in sr.items:
- item.db_update()
-
diff --git a/erpnext/patches/v5_0/execute_on_doctype_update.py b/erpnext/patches/v5_0/execute_on_doctype_update.py
deleted file mode 100644
index 70b1d8ded695..000000000000
--- a/erpnext/patches/v5_0/execute_on_doctype_update.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for dt in ("Stock Ledger Entry", "Communication", "DefaultValue", "DocShare", "File", "ToDo"):
- frappe.get_doc("DocType", dt).run_module_method("on_doctype_update")
diff --git a/erpnext/patches/v5_0/fix_taxes_and_totals_in_party_currency.py b/erpnext/patches/v5_0/fix_taxes_and_totals_in_party_currency.py
deleted file mode 100644
index 30dc0f8db4ee..000000000000
--- a/erpnext/patches/v5_0/fix_taxes_and_totals_in_party_currency.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.meta import get_field_precision
-
-def execute():
- if not frappe.db.sql("""select name from `tabPatch Log`
- where patch = 'erpnext.patches.v5_0.taxes_and_totals_in_party_currency'"""):
- return
- selling_doctypes = ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]
- buying_doctypes = ["Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice"]
-
- for dt in selling_doctypes:
- update_values(dt, "Sales Taxes and Charges")
-
- for dt in buying_doctypes:
- update_values(dt, "Purchase Taxes and Charges")
-
-def update_values(dt, tax_table):
- rate_field_precision = get_field_precision(frappe.get_meta(dt + " Item").get_field("rate"))
- tax_amount_precision = get_field_precision(frappe.get_meta(tax_table).get_field("tax_amount"))
-
- # update net_total, discount_on
- frappe.db.sql("""
- UPDATE
- `tab{0}`
- SET
- total_taxes_and_charges = round(base_total_taxes_and_charges / conversion_rate, {1})
- WHERE
- docstatus < 2
- and ifnull(base_total_taxes_and_charges, 0) != 0
- and ifnull(total_taxes_and_charges, 0) = 0
- """.format(dt, tax_amount_precision))
-
- # update net_amount
- frappe.db.sql("""
- UPDATE
- `tab{0}` par, `tab{1}` item
- SET
- item.net_amount = round(item.base_net_amount / par.conversion_rate, {2}),
- item.net_rate = round(item.base_net_rate / par.conversion_rate, {2})
- WHERE
- par.name = item.parent
- and par.docstatus < 2
- and ((ifnull(item.base_net_amount, 0) != 0 and ifnull(item.net_amount, 0) = 0)
- or (ifnull(item.base_net_rate, 0) != 0 and ifnull(item.net_rate, 0) = 0))
- """.format(dt, dt + " Item", rate_field_precision))
-
- # update tax in party currency
- frappe.db.sql("""
- UPDATE
- `tab{0}` par, `tab{1}` tax
- SET
- tax.tax_amount = round(tax.base_tax_amount / par.conversion_rate, {2}),
- tax.total = round(tax.base_total / conversion_rate, {2}),
- tax.tax_amount_after_discount_amount = round(tax.base_tax_amount_after_discount_amount / conversion_rate, {2})
- WHERE
- par.name = tax.parent
- and par.docstatus < 2
- and ((ifnull(tax.base_tax_amount, 0) != 0 and ifnull(tax.tax_amount, 0) = 0)
- or (ifnull(tax.base_total, 0) != 0 and ifnull(tax.total, 0) = 0)
- or (ifnull(tax.base_tax_amount_after_discount_amount, 0) != 0 and
- ifnull(tax.tax_amount_after_discount_amount, 0) = 0))
- """.format(dt, tax_table, tax_amount_precision))
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/index_on_account_and_gl_entry.py b/erpnext/patches/v5_0/index_on_account_and_gl_entry.py
deleted file mode 100644
index 2920e9293d72..000000000000
--- a/erpnext/patches/v5_0/index_on_account_and_gl_entry.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from __future__ import unicode_literals
-
-import frappe
-
-def execute():
- index_map = {
- "Account": ["parent_account", "lft", "rgt"],
- "GL Entry": ["posting_date", "account", 'party', "voucher_no"],
- "Sales Invoice": ["posting_date", "debit_to", "customer"],
- "Purchase Invoice": ["posting_date", "credit_to", "supplier"]
- }
-
- for dt, indexes in index_map.items():
- existing_indexes = [(d.Key_name, d.Column_name) for d in frappe.db.sql("""show index from `tab{0}`
- where Column_name != 'name'""".format(dt), as_dict=1)]
-
- for old, column in existing_indexes:
- if column in ("parent", "group_or_ledger", "is_group", "is_pl_account", "debit_or_credit",
- "account_name", "company", "project", "voucher_date", "due_date", "bill_no",
- "bill_date", "is_opening", "fiscal_year", "outstanding_amount"):
- frappe.db.sql("alter table `tab{0}` drop index {1}".format(dt, old))
-
- existing_indexes = [(d.Key_name, d.Column_name) for d in frappe.db.sql("""show index from `tab{0}`
- where Column_name != 'name'""".format(dt), as_dict=1)]
-
- existing_indexed_columns = list(set([x[1] for x in existing_indexes]))
-
- for new in indexes:
- if new not in existing_indexed_columns:
- frappe.db.sql("alter table `tab{0}` add index ({1})".format(dt, new))
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/is_group.py b/erpnext/patches/v5_0/is_group.py
deleted file mode 100644
index 4e3f760bed76..000000000000
--- a/erpnext/patches/v5_0/is_group.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-
-import frappe
-
-def execute():
- frappe.reload_doctype("Account")
- frappe.reload_doctype("Cost Center")
- frappe.db.sql("update tabAccount set is_group = if(group_or_ledger='Group', 1, 0)")
- frappe.db.sql("update `tabCost Center` set is_group = if(group_or_ledger='Group', 1, 0)")
diff --git a/erpnext/patches/v5_0/item_patches.py b/erpnext/patches/v5_0/item_patches.py
deleted file mode 100644
index e223e09f5b74..000000000000
--- a/erpnext/patches/v5_0/item_patches.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.sql("update `tabItem` set end_of_life='2099-12-31' where ifnull(end_of_life, '0000-00-00')='0000-00-00'")
- frappe.db.sql("update `tabItem` set website_image = image where ifnull(website_image, '') = 'attach_files:'")
diff --git a/erpnext/patches/v5_0/link_warehouse_with_account.py b/erpnext/patches/v5_0/link_warehouse_with_account.py
deleted file mode 100644
index 338fd7ad7f6a..000000000000
--- a/erpnext/patches/v5_0/link_warehouse_with_account.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if "master_name" in frappe.db.get_table_columns("Account"):
- frappe.db.sql("""update tabAccount set warehouse=master_name
- where ifnull(account_type, '') = 'Warehouse' and ifnull(master_name, '') != ''""")
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/new_crm_module.py b/erpnext/patches/v5_0/new_crm_module.py
deleted file mode 100644
index f5dda1f27384..000000000000
--- a/erpnext/patches/v5_0/new_crm_module.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import json
-import frappe
-
-def execute():
- frappe.reload_doc('crm', 'doctype', 'lead')
- frappe.reload_doc('crm', 'doctype', 'opportunity')
-
- add_crm_to_user_desktop_items()
-
-def add_crm_to_user_desktop_items():
- key = "_user_desktop_items"
- for user in frappe.get_all("User", filters={"enabled": 1, "user_type": "System User"}):
- user = user.name
- user_desktop_items = frappe.db.get_defaults(key, parent=user)
- if user_desktop_items:
- user_desktop_items = json.loads(user_desktop_items)
- if "CRM" not in user_desktop_items:
- user_desktop_items.append("CRM")
- frappe.db.set_default(key, json.dumps(user_desktop_items), parent=user)
-
diff --git a/erpnext/patches/v5_0/newsletter.py b/erpnext/patches/v5_0/newsletter.py
deleted file mode 100644
index 63e331241399..000000000000
--- a/erpnext/patches/v5_0/newsletter.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import frappe.permissions
-
-def execute():
- frappe.reload_doc("core", "doctype", "block_module")
- frappe.reload_doctype("User")
- frappe.reload_doctype("Lead")
- frappe.reload_doctype("Contact")
-
- frappe.reload_doc('email', 'doctype', 'email_group')
- frappe.reload_doc('email', 'doctype', 'email_group_member')
- frappe.reload_doc('email', 'doctype', 'newsletter')
-
- frappe.permissions.reset_perms("Newsletter")
-
- if not frappe.db.exists("Role", "Newsletter Manager"):
- frappe.get_doc({"doctype": "Role", "role": "Newsletter Manager"}).insert()
-
- for userrole in frappe.get_all("Has Role", "parent", {"role": "Sales Manager", "parenttype": "User"}):
- if frappe.db.exists("User", userrole.parent):
- user = frappe.get_doc("User", userrole.parent)
- user.append("roles", {
- "doctype": "Has Role",
- "role": "Newsletter Manager"
- })
- user.flags.ignore_mandatory = True
- user.save()
-
- # create default lists
- general = frappe.new_doc("Email Group")
- general.title = "General"
- general.insert()
- general.import_from("Lead")
- general.import_from("Contact")
diff --git a/erpnext/patches/v5_0/opportunity_not_submittable.py b/erpnext/patches/v5_0/opportunity_not_submittable.py
deleted file mode 100644
index e29d66f2845a..000000000000
--- a/erpnext/patches/v5_0/opportunity_not_submittable.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Opportunity")
- frappe.db.sql("update tabDocPerm set submit=0, cancel=0, amend=0 where parent='Opportunity'")
- frappe.db.sql("update tabOpportunity set docstatus=0 where docstatus=1")
diff --git a/erpnext/patches/v5_0/party_model_patch_fix.py b/erpnext/patches/v5_0/party_model_patch_fix.py
deleted file mode 100644
index d9b67097922c..000000000000
--- a/erpnext/patches/v5_0/party_model_patch_fix.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for company in frappe.get_all("Company",
- ["name", "default_receivable_account", "default_payable_account"]):
-
- if company.default_receivable_account:
- frappe.db.sql("""update `tabSales Invoice` invoice set `debit_to`=%(account)s
- where company=%(company)s
- and not exists (select name from `tabAccount` account where account.name=invoice.debit_to)""",
- {"company": company.name, "account": company.default_receivable_account})
-
- if company.default_payable_account:
- frappe.db.sql("""update `tabPurchase Invoice` invoice set `credit_to`=%(account)s
- where company=%(company)s
- and not exists (select name from `tabAccount` account where account.name=invoice.credit_to)""",
- {"company": company.name, "account": company.default_payable_account})
diff --git a/erpnext/patches/v5_0/portal_fixes.py b/erpnext/patches/v5_0/portal_fixes.py
deleted file mode 100644
index 1fefd9916789..000000000000
--- a/erpnext/patches/v5_0/portal_fixes.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-import erpnext.setup.install
-
-def execute():
- frappe.reload_doc("website", "doctype", "web_form_field", force=True, reset_permissions=True)
- #erpnext.setup.install.add_web_forms()
diff --git a/erpnext/patches/v5_0/project_costing.py b/erpnext/patches/v5_0/project_costing.py
deleted file mode 100644
index e2d65d059407..000000000000
--- a/erpnext/patches/v5_0/project_costing.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Project")
- frappe.db.sql("update `tabProject` set expected_start_date = project_start_date, \
- expected_end_date = completion_date, actual_end_date = act_completion_date, \
- estimated_costing = project_value, gross_margin = gross_margin_value")
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/recalculate_total_amount_in_jv.py b/erpnext/patches/v5_0/recalculate_total_amount_in_jv.py
deleted file mode 100644
index d5af43c541e5..000000000000
--- a/erpnext/patches/v5_0/recalculate_total_amount_in_jv.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import money_in_words
-
-def execute():
- company_currency = dict(frappe.db.sql("select name, default_currency from `tabCompany`"))
- bank_or_cash_accounts = frappe.db.sql_list("""select name from `tabAccount`
- where account_type in ('Bank', 'Cash') and docstatus < 2""")
-
- for je in frappe.db.sql_list("""select name from `tabJournal Entry` where docstatus < 2"""):
- total_amount = 0
- total_amount_in_words = ""
-
- je_doc = frappe.get_doc('Journal Entry', je)
- for d in je_doc.get("accounts"):
- if (d.party_type and d.party) or d.account in bank_or_cash_accounts:
- total_amount = d.debit or d.credit
- if total_amount:
- total_amount_in_words = money_in_words(total_amount, company_currency.get(je_doc.company))
-
- if total_amount:
- frappe.db.sql("""update `tabJournal Entry` set total_amount=%s, total_amount_in_words=%s
- where name = %s""", (total_amount, total_amount_in_words, je))
diff --git a/erpnext/patches/v5_0/reclculate_planned_operating_cost_in_production_order.py b/erpnext/patches/v5_0/reclculate_planned_operating_cost_in_production_order.py
deleted file mode 100644
index 6d392831b406..000000000000
--- a/erpnext/patches/v5_0/reclculate_planned_operating_cost_in_production_order.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for wo in frappe.db.sql("""select name from `tabWork Order` where docstatus < 2""", as_dict=1):
- work_order = frappe.get_doc("Work Order", wo.name)
- if work_order.operations:
- work_order.flags.ignore_validate_update_after_submit = True
- work_order.calculate_time()
- work_order.save()
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/remove_birthday_events.py b/erpnext/patches/v5_0/remove_birthday_events.py
deleted file mode 100644
index 3ead8669b861..000000000000
--- a/erpnext/patches/v5_0/remove_birthday_events.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for e in frappe.db.sql_list("""select name from tabEvent where
- repeat_on='Every Year' and ref_type='Employee'"""):
- frappe.delete_doc("Event", e, force=True)
diff --git a/erpnext/patches/v5_0/rename_customer_issue.py b/erpnext/patches/v5_0/rename_customer_issue.py
deleted file mode 100644
index 1bd69ceec19c..000000000000
--- a/erpnext/patches/v5_0/rename_customer_issue.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if frappe.db.table_exists("Customer Issue"):
- frappe.rename_doc("DocType", "Customer Issue", "Warranty Claim")
diff --git a/erpnext/patches/v5_0/rename_pos_setting.py b/erpnext/patches/v5_0/rename_pos_setting.py
deleted file mode 100644
index bf10333564e9..000000000000
--- a/erpnext/patches/v5_0/rename_pos_setting.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if frappe.db.table_exists("POS Setting"):
- frappe.rename_doc("DocType", "POS Setting", "POS Profile")
diff --git a/erpnext/patches/v5_0/rename_table_fieldnames.py b/erpnext/patches/v5_0/rename_table_fieldnames.py
deleted file mode 100644
index aefb0a203728..000000000000
--- a/erpnext/patches/v5_0/rename_table_fieldnames.py
+++ /dev/null
@@ -1,243 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-from frappe.modules import scrub, get_doctype_module
-
-rename_map = {
- "Opportunity": [
- ["enquiry_details", "items"]
- ],
- "Quotation": [
- ["quotation_details", "items"],
- ["other_charges", "taxes"]
- ],
- "Sales Order": [
- ["sales_order_details", "items"],
- ["other_charges", "taxes"],
- ["packing_details", "packed_items"]
- ],
- "Delivery Note": [
- ["delivery_note_details", "items"],
- ["other_charges", "taxes"],
- ["packing_details", "packed_items"]
- ],
- "Sales Invoice": [
- ["entries", "items"],
- ["other_charges", "taxes"],
- ["packing_details", "packed_items"],
- ["advance_adjustment_details", "advances"]
- ],
- "Material Request": [
- ["indent_details", "items"]
- ],
- "Supplier Quotation": [
- ["quotation_items", "items"],
- ["other_charges", "taxes"]
- ],
- "Purchase Order": [
- ["po_details", "items"],
- ["other_charges", "taxes"],
- ["po_raw_material_details", "supplied_items"]
- ],
- "Purchase Receipt": [
- ["purchase_receipt_details", "items"],
- ["other_charges", "taxes"],
- ["pr_raw_material_details", "supplied_items"]
- ],
- "Purchase Invoice": [
- ["entries", "items"],
- ["other_charges", "taxes"],
- ["advance_allocation_details", "advances"]
- ],
- "Work Order": [
- ["production_order_operations", "operations"]
- ],
- "BOM": [
- ["bom_operations", "operations"],
- ["bom_materials", "items"],
- ["flat_bom_details", "exploded_items"]
- ],
- "Payment Reconciliation": [
- ["payment_reconciliation_payments", "payments"],
- ["payment_reconciliation_invoices", "invoices"]
- ],
- "Sales Taxes and Charges Template": [
- ["other_charges", "taxes"],
- ["valid_for_territories", "territories"]
- ],
- "Purchase Taxes and Charges Template": [
- ["other_charges", "taxes"]
- ],
- "Shipping Rule": [
- ["shipping_rule_conditions", "conditions"],
- ["valid_for_territories", "territories"]
- ],
- "Price List": [
- ["valid_for_territories", "territories"]
- ],
- "Appraisal": [
- ["appraisal_details", "goals"]
- ],
- "Appraisal Template": [
- ["kra_sheet", "goals"]
- ],
- "Bank Reconciliation": [
- ["entries", "journal_entries"]
- ],
- "C-Form": [
- ["invoice_details", "invoices"]
- ],
- "Employee": [
- ["employee_leave_approvers", "leave_approvers"],
- ["educational_qualification_details", "education"],
- ["previous_experience_details", "external_work_history"],
- ["experience_in_company_details", "internal_work_history"]
- ],
- "Expense Claim": [
- ["expense_voucher_details", "expenses"]
- ],
- "Fiscal Year": [
- ["fiscal_year_companies", "companies"]
- ],
- "Holiday List": [
- ["holiday_list_details", "holidays"]
- ],
- "Installation Note": [
- ["installed_item_details", "items"]
- ],
- "Item": [
- ["item_reorder", "reorder_levels"],
- ["uom_conversion_details", "uoms"],
- ["item_supplier_details", "supplier_items"],
- ["item_customer_details", "customer_items"],
- ["item_tax", "taxes"],
- ["item_specification_details", "quality_parameters"],
- ["item_website_specifications", "website_specifications"]
- ],
- "Item Group": [
- ["item_website_specifications", "website_specifications"]
- ],
- "Landed Cost Voucher": [
- ["landed_cost_purchase_receipts", "purchase_receipts"],
- ["landed_cost_items", "items"],
- ["landed_cost_taxes_and_charges", "taxes"]
- ],
- "Maintenance Schedule": [
- ["item_maintenance_detail", "items"],
- ["maintenance_schedule_detail", "schedules"]
- ],
- "Maintenance Visit": [
- ["maintenance_visit_details", "purposes"]
- ],
- "Packing Slip": [
- ["item_details", "items"]
- ],
- "Customer": [
- ["party_accounts", "accounts"]
- ],
- "Customer Group": [
- ["party_accounts", "accounts"]
- ],
- "Supplier": [
- ["party_accounts", "accounts"]
- ],
- "Supplier Type": [
- ["party_accounts", "accounts"]
- ],
- "Payment Tool": [
- ["payment_tool_details", "vouchers"]
- ],
- "Production Planning Tool": [
- ["pp_so_details", "sales_orders"],
- ["pp_details", "items"]
- ],
- "Quality Inspection": [
- ["qa_specification_details", "readings"]
- ],
- "Salary Slip": [
- ["earning_details", "earnings"],
- ["deduction_details", "deductions"]
- ],
- "Salary Structure": [
- ["earning_details", "earnings"],
- ["deduction_details", "deductions"]
- ],
- "Product Bundle": [
- ["sales_bom_items", "items"]
- ],
- "SMS Settings": [
- ["static_parameter_details", "parameters"]
- ],
- "Stock Entry": [
- ["mtn_details", "items"]
- ],
- "Sales Partner": [
- ["partner_target_details", "targets"]
- ],
- "Sales Person": [
- ["target_details", "targets"]
- ],
- "Territory": [
- ["target_details", "targets"]
- ],
- "Time Sheet": [
- ["time_sheet_details", "time_logs"]
- ],
- "Workstation": [
- ["workstation_operation_hours", "working_hours"]
- ],
- "Payment Reconciliation Payment": [
- ["journal_voucher", "journal_entry"],
- ],
- "Purchase Invoice Advance": [
- ["journal_voucher", "journal_entry"],
- ],
- "Sales Invoice Advance": [
- ["journal_voucher", "journal_entry"],
- ],
- "Journal Entry": [
- ["entries", "accounts"]
- ],
- "Monthly Distribution": [
- ["budget_distribution_details", "percentages"]
- ]
-}
-
-def execute():
- # rename doctypes
- tables = frappe.db.sql_list("show tables")
- for old_dt, new_dt in [["Journal Voucher Detail", "Journal Entry Account"],
- ["Journal Voucher", "Journal Entry"],
- ["Budget Distribution Detail", "Monthly Distribution Percentage"],
- ["Budget Distribution", "Monthly Distribution"]]:
- if "tab"+new_dt not in tables:
- frappe.rename_doc("DocType", old_dt, new_dt, force=True)
-
- # reload new child doctypes
- frappe.reload_doc("manufacturing", "doctype", "work_order_operation")
- frappe.reload_doc("manufacturing", "doctype", "workstation_working_hour")
- frappe.reload_doc("stock", "doctype", "item_variant")
- frappe.reload_doc("Payroll", "doctype", "salary_detail")
- frappe.reload_doc("accounts", "doctype", "party_account")
- frappe.reload_doc("accounts", "doctype", "fiscal_year_company")
-
- #rename table fieldnames
- for dn in rename_map:
- if not frappe.db.exists("DocType", dn):
- continue
- frappe.reload_doc(get_doctype_module(dn), "doctype", scrub(dn))
-
- for dt, field_list in rename_map.items():
- if not frappe.db.exists("DocType", dt):
- continue
- for field in field_list:
- rename_field(dt, field[0], field[1])
-
- # update voucher type
- for old, new in [["Bank Voucher", "Bank Entry"], ["Cash Voucher", "Cash Entry"],
- ["Credit Card Voucher", "Credit Card Entry"], ["Contra Voucher", "Contra Entry"],
- ["Write Off Voucher", "Write Off Entry"], ["Excise Voucher", "Excise Entry"]]:
- frappe.db.sql("update `tabJournal Entry` set voucher_type=%s where voucher_type=%s", (new, old))
diff --git a/erpnext/patches/v5_0/rename_taxes_and_charges_master.py b/erpnext/patches/v5_0/rename_taxes_and_charges_master.py
deleted file mode 100644
index e26f48cda188..000000000000
--- a/erpnext/patches/v5_0/rename_taxes_and_charges_master.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-
-def execute():
- if frappe.db.table_exists("Sales Taxes and Charges Master"):
- frappe.rename_doc("DocType", "Sales Taxes and Charges Master",
- "Sales Taxes and Charges Template")
- frappe.delete_doc("DocType", "Sales Taxes and Charges Master")
-
- if frappe.db.table_exists("Purchase Taxes and Charges Master"):
- frappe.rename_doc("DocType", "Purchase Taxes and Charges Master",
- "Purchase Taxes and Charges Template")
- frappe.delete_doc("DocType", "Purchase Taxes and Charges Master")
diff --git a/erpnext/patches/v5_0/rename_total_fields.py b/erpnext/patches/v5_0/rename_total_fields.py
deleted file mode 100644
index 6657dd843e8a..000000000000
--- a/erpnext/patches/v5_0/rename_total_fields.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-from frappe.modules import scrub, get_doctype_module
-
-selling_doctypes = ("Quotation", "Sales Order", "Delivery Note", "Sales Invoice")
-
-buying_doctypes = ("Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice")
-
-selling_renamed_fields = (
- ("net_total", "base_net_total"),
- ("net_total_export", "net_total"),
- ("other_charges_total", "base_total_taxes_and_charges"),
- ("other_charges_total_export", "total_taxes_and_charges"),
- ("grand_total", "base_grand_total"),
- ("grand_total_export", "grand_total"),
- ("rounded_total", "base_rounded_total"),
- ("rounded_total_export", "rounded_total"),
- ("in_words", "base_in_words"),
- ("in_words_export", "in_words")
-)
-
-buying_renamed_fields = (
- ("net_total", "base_net_total"),
- ("net_total_import", "net_total"),
- ("grand_total", "base_grand_total"),
- ("grand_total_import", "grand_total"),
- ("rounded_total", "base_rounded_total"),
- ("in_words", "base_in_words"),
- ("in_words_import", "in_words"),
- ("other_charges_added", "base_taxes_and_charges_added"),
- ("other_charges_added_import", "taxes_and_charges_added"),
- ("other_charges_deducted", "base_taxes_and_charges_deducted"),
- ("other_charges_deducted_import", "taxes_and_charges_deducted"),
- ("total_tax", "base_total_taxes_and_charges")
-)
-
-def execute():
- for doctypes, fields in [[selling_doctypes, selling_renamed_fields], [buying_doctypes, buying_renamed_fields]]:
- for dt in doctypes:
- frappe.reload_doc(get_doctype_module(dt), "doctype", scrub(dt))
- table_columns = frappe.db.get_table_columns(dt)
- base_net_total = frappe.db.sql("select sum(ifnull({0}, 0)) from `tab{1}`".format(fields[0][1], dt))[0][0]
- if not base_net_total:
- for f in fields:
- if f[0] in table_columns:
- rename_field(dt, f[0], f[1])
-
- # Added new field "total_taxes_and_charges" in buying cycle, updating value
- if dt in ("Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice"):
- frappe.db.sql("""update `tab{0}` set total_taxes_and_charges =
- round(base_total_taxes_and_charges/conversion_rate, 2)""".format(dt))
diff --git a/erpnext/patches/v5_0/replace_renamed_fields_in_custom_scripts_and_print_formats.py b/erpnext/patches/v5_0/replace_renamed_fields_in_custom_scripts_and_print_formats.py
deleted file mode 100644
index c564f8b02ab7..000000000000
--- a/erpnext/patches/v5_0/replace_renamed_fields_in_custom_scripts_and_print_formats.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import re
-
-def execute():
- # NOTE: sequence is important
- renamed_fields = get_all_renamed_fields()
-
- for dt, script_field, ref_dt_field in (("Client Script", "script", "dt"), ("Print Format", "html", "doc_type")):
-
- cond1 = " or ".join("""{0} like "%%{1}%%" """.format(script_field, d[0].replace("_", "\\_")) for d in renamed_fields)
- cond2 = " and standard = 'No'" if dt == "Print Format" else ""
-
- for name, script, ref_dt in frappe.db.sql("select name, {0} as script, {1} as ref_dt from `tab{2}` where ({3}) {4}".format(script_field, ref_dt_field, dt, cond1, cond2)):
- update_script(dt, name, ref_dt, script_field, script, renamed_fields)
-
-def get_all_renamed_fields():
- from erpnext.patches.v5_0.rename_table_fieldnames import rename_map
-
- renamed_fields = (
- ("base_amount", "base_net_amount"),
- ("net_total", "base_net_total"),
- ("net_total_export", "total"),
- ("net_total_import", "total"),
- ("other_charges_total", "base_total_taxes_and_charges"),
- ("other_charges_total_export", "total_taxes_and_charges"),
- ("other_charges_added", "base_taxes_and_charges_added"),
- ("other_charges_added_import", "taxes_and_charges_added"),
- ("other_charges_deducted", "base_taxes_and_charges_deducted"),
- ("other_charges_deducted_import", "taxes_and_charges_deducted"),
- ("total_tax", "base_total_taxes_and_charges"),
- ("grand_total", "base_grand_total"),
- ("grand_total_export", "grand_total"),
- ("grand_total_import", "grand_total"),
- ("rounded_total", "base_rounded_total"),
- ("rounded_total_export", "rounded_total"),
- ("rounded_total_import", "rounded_total"),
- ("in_words", "base_in_words"),
- ("in_words_export", "in_words"),
- ("in_words_import", "in_words"),
- ("tax_amount", "base_tax_amount"),
- ("tax_amount_after_discount_amount", "base_tax_amount_after_discount_amount"),
- )
-
- for fields in rename_map.values():
- renamed_fields += tuple(fields)
-
- return renamed_fields
-
-def update_script(dt, name, ref_dt, script_field, script, renamed_fields):
- for from_field, to_field in renamed_fields:
- if from_field != "entries":
- script = re.sub(r"\b{}\b".format(from_field), to_field, script)
-
- if ref_dt == "Journal Entry":
- script = re.sub(r"\bentries\b", "accounts", script)
- elif ref_dt == "Bank Reconciliation":
- script = re.sub(r"\bentries\b", "journal_entries", script)
- elif ref_dt in ("Sales Invoice", "Purchase Invoice"):
- script = re.sub(r"\bentries\b", "items", script)
-
- frappe.db.set_value(dt, name, script_field, script)
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/repost_gle_for_jv_with_multiple_party.py b/erpnext/patches/v5_0/repost_gle_for_jv_with_multiple_party.py
deleted file mode 100644
index 76efdcc7c6bd..000000000000
--- a/erpnext/patches/v5_0/repost_gle_for_jv_with_multiple_party.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
- je_list = frappe.db.sql_list("""
- select par.name from `tabJournal Entry` par
- where par.docstatus=1 and par.creation > '2015-03-01'
- and (select count(distinct child.party) from `tabJournal Entry Account` child
- where par.name=child.parent and ifnull(child.party, '') != '') > 1
- """)
-
- for d in je_list:
- # delete existing gle
- frappe.db.sql("delete from `tabGL Entry` where voucher_type='Journal Entry' and voucher_no=%s", d)
-
- # repost gl entries
- je = frappe.get_doc("Journal Entry", d)
- je.make_gl_entries()
-
- if je_list:
- print(je_list)
-
-
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/repost_requested_qty.py b/erpnext/patches/v5_0/repost_requested_qty.py
deleted file mode 100644
index 6af71f3fc49a..000000000000
--- a/erpnext/patches/v5_0/repost_requested_qty.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- from erpnext.stock.stock_balance import update_bin_qty, get_indented_qty
-
- count=0
- for item_code, warehouse in frappe.db.sql("""select distinct item_code, warehouse
- from `tabMaterial Request Item` where docstatus = 1"""):
- try:
- count += 1
- update_bin_qty(item_code, warehouse, {
- "indented_qty": get_indented_qty(item_code, warehouse),
- })
- if count % 200 == 0:
- frappe.db.commit()
- except:
- frappe.db.rollback()
diff --git a/erpnext/patches/v5_0/reset_values_in_tools.py b/erpnext/patches/v5_0/reset_values_in_tools.py
deleted file mode 100644
index fd970ba1b043..000000000000
--- a/erpnext/patches/v5_0/reset_values_in_tools.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for dt in ["Payment Tool", "Bank Reconciliation", "Payment Reconciliation", "Leave Control Panel",
- "Salary Manager", "Upload Attenadance", "Production Planning Tool", "BOM Update Tool", "Customize Form",
- "Employee Attendance Tool", "Rename Tool", "BOM Update Tool", "Process Payroll", "Naming Series"]:
- frappe.db.sql("delete from `tabSingles` where doctype=%s", dt)
-
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/set_appraisal_remarks.py b/erpnext/patches/v5_0/set_appraisal_remarks.py
deleted file mode 100644
index 8652c32cf0ed..000000000000
--- a/erpnext/patches/v5_0/set_appraisal_remarks.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Appraisal")
- frappe.db.sql("update `tabAppraisal` set remarks = comments")
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/set_default_company_in_bom.py b/erpnext/patches/v5_0/set_default_company_in_bom.py
deleted file mode 100644
index a5cd76111993..000000000000
--- a/erpnext/patches/v5_0/set_default_company_in_bom.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("manufacturing", "doctype", "bom")
- company = frappe.db.get_value("Global Defaults", None, "default_company")
- frappe.db.sql("""update `tabBOM` set company = %s""",company)
diff --git a/erpnext/patches/v5_0/set_footer_address.py b/erpnext/patches/v5_0/set_footer_address.py
deleted file mode 100644
index 8120d834e1f6..000000000000
--- a/erpnext/patches/v5_0/set_footer_address.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("System Settings")
- ss = frappe.get_doc("System Settings", "System Settings")
- ss.email_footer_address = frappe.db.get_default("company")
- ss.flags.ignore_mandatory = True
- ss.save()
diff --git a/erpnext/patches/v5_0/stock_entry_update_value.py b/erpnext/patches/v5_0/stock_entry_update_value.py
deleted file mode 100644
index ba1af310f557..000000000000
--- a/erpnext/patches/v5_0/stock_entry_update_value.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for d in frappe.db.get_all("Stock Entry"):
- se = frappe.get_doc("Stock Entry", d.name)
- se.set_total_incoming_outgoing_value()
- se.db_update()
diff --git a/erpnext/patches/v5_0/taxes_and_totals_in_party_currency.py b/erpnext/patches/v5_0/taxes_and_totals_in_party_currency.py
deleted file mode 100644
index 76d10820b58c..000000000000
--- a/erpnext/patches/v5_0/taxes_and_totals_in_party_currency.py
+++ /dev/null
@@ -1,80 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.meta import get_field_precision
-from frappe.custom.doctype.property_setter.property_setter import make_property_setter
-
-def execute():
- selling_doctypes = ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"]
- buying_doctypes = ["Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice"]
-
- for dt in selling_doctypes:
- update_values(dt, "Sales Taxes and Charges")
-
- for dt in buying_doctypes:
- update_values(dt, "Purchase Taxes and Charges")
-
-def update_values(dt, tax_table):
- frappe.reload_doctype(dt)
- frappe.reload_doctype(dt + " Item")
- frappe.reload_doctype(tax_table)
-
- net_total_precision = get_field_precision(frappe.get_meta(dt).get_field("net_total"))
- for field in ("total", "base_total", "base_net_total"):
- make_property_setter(dt, field, "precision", net_total_precision, "Select")
-
- rate_field_precision = get_field_precision(frappe.get_meta(dt + " Item").get_field("rate"))
- for field in ("net_rate", "base_net_rate", "net_amount", "base_net_amount", "base_rate", "base_amount"):
- make_property_setter(dt + " Item", field, "precision", rate_field_precision, "Select")
-
- tax_amount_precision = get_field_precision(frappe.get_meta(tax_table).get_field("tax_amount"))
- for field in ("base_tax_amount", "total", "base_total", "tax_amount_after_discount_amount",
- "base_tax_amount_after_discount_amount"):
- make_property_setter(tax_table, field, "precision", tax_amount_precision, "Select")
-
- # update net_total, discount_on
- frappe.db.sql("""
- UPDATE
- `tab{0}`
- SET
- total = round(net_total, {1}),
- base_total = round(net_total*conversion_rate, {1}),
- net_total = round(base_net_total / conversion_rate, {1}),
- apply_discount_on = "Grand Total"
- WHERE
- docstatus < 2
- """.format(dt, net_total_precision))
-
- # update net_amount
- frappe.db.sql("""
- UPDATE
- `tab{0}` par, `tab{1}` item
- SET
- item.base_net_amount = round(item.base_amount, {2}),
- item.base_net_rate = round(item.base_rate, {2}),
- item.net_amount = round(item.base_amount / par.conversion_rate, {2}),
- item.net_rate = round(item.base_rate / par.conversion_rate, {2}),
- item.base_amount = round(item.amount * par.conversion_rate, {2}),
- item.base_rate = round(item.rate * par.conversion_rate, {2})
- WHERE
- par.name = item.parent
- and par.docstatus < 2
- """.format(dt, dt + " Item", rate_field_precision))
-
- # update tax in party currency
- frappe.db.sql("""
- UPDATE
- `tab{0}` par, `tab{1}` tax
- SET
- tax.base_tax_amount = round(tax.tax_amount, {2}),
- tax.tax_amount = round(tax.tax_amount / par.conversion_rate, {2}),
- tax.base_total = round(tax.total, {2}),
- tax.total = round(tax.total / conversion_rate, {2}),
- tax.base_tax_amount_after_discount_amount = round(tax.tax_amount_after_discount_amount, {2}),
- tax.tax_amount_after_discount_amount = round(tax.tax_amount_after_discount_amount / conversion_rate, {2})
- WHERE
- par.name = tax.parent
- and par.docstatus < 2
- """.format(dt, tax_table, tax_amount_precision))
diff --git a/erpnext/patches/v5_0/update_account_types.py b/erpnext/patches/v5_0/update_account_types.py
deleted file mode 100644
index 424743efaa7a..000000000000
--- a/erpnext/patches/v5_0/update_account_types.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for company in frappe.db.get_all("Company"):
- company = frappe.get_doc("Company", company.name)
-
- match_types = ("Stock Received But Not Billed", "Stock Adjustment", "Expenses Included In Valuation",
- "Cost of Goods Sold")
-
- for account_type in match_types:
- account_name = "{0} - {1}".format(account_type, company.abbr)
- current_account_type = frappe.db.get_value("Account", account_name, "account_type")
- if current_account_type != account_type:
- frappe.db.set_value("Account", account_name, "account_type", account_type)
-
- company.set_default_accounts()
diff --git a/erpnext/patches/v5_0/update_advance_paid.py b/erpnext/patches/v5_0/update_advance_paid.py
deleted file mode 100644
index 74e71e84c823..000000000000
--- a/erpnext/patches/v5_0/update_advance_paid.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for dt in ("Sales Order", "Purchase Order"):
- orders_with_advance = frappe.db.sql("""select name from `tab{0}`
- where docstatus < 2 and ifnull(advance_paid, 0) != 0""".format(dt), as_dict=1)
-
- for order in orders_with_advance:
- frappe.get_doc(dt, order.name).set_total_advance_paid()
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/update_companywise_payment_account.py b/erpnext/patches/v5_0/update_companywise_payment_account.py
deleted file mode 100644
index fb4b919c859e..000000000000
--- a/erpnext/patches/v5_0/update_companywise_payment_account.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('accounts', 'doctype', 'mode_of_payment')
- frappe.reload_doc('accounts', 'doctype', 'mode_of_payment_account')
-
- mode_of_payment_list = frappe.db.sql("""select name, default_account
- from `tabMode of Payment`""", as_dict=1)
-
- for d in mode_of_payment_list:
- if d.get("default_account"):
- parent_doc = frappe.get_doc("Mode of Payment", d.get("name"))
-
- parent_doc.set("accounts",
- [{"company": frappe.db.get_value("Account", d.get("default_account"), "company"),
- "default_account": d.get("default_account")}])
- parent_doc.save()
diff --git a/erpnext/patches/v5_0/update_dn_against_doc_fields.py b/erpnext/patches/v5_0/update_dn_against_doc_fields.py
deleted file mode 100644
index 56f4f484b138..000000000000
--- a/erpnext/patches/v5_0/update_dn_against_doc_fields.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('stock', 'doctype', 'delivery_note_item')
-
- frappe.db.sql("""update `tabDelivery Note Item` set so_detail = prevdoc_detail_docname
- where ifnull(against_sales_order, '') != ''""")
-
- frappe.db.sql("""update `tabDelivery Note Item` set si_detail = prevdoc_detail_docname
- where ifnull(against_sales_invoice, '') != ''""")
diff --git a/erpnext/patches/v5_0/update_from_bom.py b/erpnext/patches/v5_0/update_from_bom.py
deleted file mode 100644
index 4b3e62d7a55e..000000000000
--- a/erpnext/patches/v5_0/update_from_bom.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Stock Entry")
- frappe.db.sql("update `tabStock Entry` set from_bom = if(ifnull(bom_no, '')='', 0, 1)")
diff --git a/erpnext/patches/v5_0/update_frozen_accounts_permission_role.py b/erpnext/patches/v5_0/update_frozen_accounts_permission_role.py
deleted file mode 100644
index b52785ae6058..000000000000
--- a/erpnext/patches/v5_0/update_frozen_accounts_permission_role.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- account_settings = frappe.get_doc("Accounts Settings")
-
- if not account_settings.frozen_accounts_modifier and account_settings.bde_auth_role:
- frappe.db.set_value("Accounts Settings", None,
- "frozen_accounts_modifier", account_settings.bde_auth_role)
-
diff --git a/erpnext/patches/v5_0/update_item_and_description_again.py b/erpnext/patches/v5_0/update_item_and_description_again.py
deleted file mode 100644
index 35dedcc072be..000000000000
--- a/erpnext/patches/v5_0/update_item_and_description_again.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cstr
-import re
-
-def execute():
- item_details = frappe._dict()
- for d in frappe.db.sql("select name, description from `tabItem`", as_dict=1):
- description = cstr(d.description).strip()
- new_desc = extract_description(description)
-
- item_details.setdefault(d.name, frappe._dict({
- "old_description": description,
- "new_description": new_desc
- }))
-
-
- dt_list= ["Purchase Order Item","Supplier Quotation Item", "BOM", "BOM Explosion Item" , \
- "BOM Item", "Opportunity Item" , "Quotation Item" , "Sales Order Item" , "Delivery Note Item" , \
- "Material Request Item" , "Purchase Receipt Item" , "Stock Entry Detail"]
- for dt in dt_list:
- frappe.reload_doctype(dt)
- records = frappe.db.sql("""select name, `{0}` as item_code, description from `tab{1}`
- where description is not null and description like '%%
]*\>".format(tag), "", desc)
-
- return desc
diff --git a/erpnext/patches/v5_0/update_item_desc_in_invoice.py b/erpnext/patches/v5_0/update_item_desc_in_invoice.py
deleted file mode 100644
index dba35d569384..000000000000
--- a/erpnext/patches/v5_0/update_item_desc_in_invoice.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.website.utils import find_first_image
-from frappe.utils import cstr
-import re
-
-def execute():
- item_details = frappe._dict()
- for d in frappe.db.sql("select name, description, image from `tabItem`", as_dict=1):
- description = cstr(d.description).strip()
- item_details.setdefault(d.name, frappe._dict({
- "description": description,
- "image": d.image
- }))
-
-
- dt_list= ["Sales Invoice Item","Purchase Invoice Item"]
- for dt in dt_list:
- frappe.reload_doctype(dt)
- records = frappe.db.sql("""select name, item_code, description from `tab{0}`
- where ifnull(item_code, '') != '' and description is not null """.format(dt), as_dict=1)
-
- count = 1
- for d in records:
- if item_details.get(d.item_code) and cstr(d.description) == item_details.get(d.item_code).description:
- desc = item_details.get(d.item_code).description
- image = item_details.get(d.item_code).image
- else:
- desc, image = extract_image_and_description(cstr(d.description))
-
- if not image:
- item_detail = item_details.get(d.item_code)
- if item_detail:
- image = item_detail.image
-
- frappe.db.sql("""update `tab{0}` set description = %s, image = %s
- where name = %s """.format(dt), (desc, image, d.name))
-
- count += 1
- if count % 500 == 0:
- frappe.db.commit()
-
-
-def extract_image_and_description(data):
- image_url = find_first_image(data)
- desc = data
- for tag in ("img", "table", "tr", "td"):
- desc = re.sub("\*{0}[^>]*\>".format(tag), "", desc)
- return desc, image_url
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/update_item_description_and_image.py b/erpnext/patches/v5_0/update_item_description_and_image.py
deleted file mode 100644
index 75df39ee3995..000000000000
--- a/erpnext/patches/v5_0/update_item_description_and_image.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.website.utils import find_first_image
-from frappe.utils import cstr
-import re
-
-def execute():
- item_details = frappe._dict()
- for d in frappe.db.sql("select name, description_html, description from `tabItem`", as_dict=1):
- description = cstr(d.description_html).strip() or cstr(d.description).strip()
- image_url, new_desc = extract_image_and_description(description)
-
- item_details.setdefault(d.name, frappe._dict({
- "old_description": description,
- "new_description": new_desc,
- "image_url": image_url
- }))
-
-
- dt_list= ["Purchase Order Item","Supplier Quotation Item", "BOM", "BOM Explosion Item" , \
- "BOM Item", "Opportunity Item" , "Quotation Item" , "Sales Order Item" , "Delivery Note Item" , \
- "Material Request Item" , "Purchase Receipt Item" , "Stock Entry Detail"]
- for dt in dt_list:
- frappe.reload_doctype(dt)
- records = frappe.db.sql("""select name, `{0}` as item_code, description from `tab{1}`
- where description is not null and image is null and description like '%%
]+\>", "", data)
-
- return image_url, desc
diff --git a/erpnext/patches/v5_0/update_item_name_in_bom.py b/erpnext/patches/v5_0/update_item_name_in_bom.py
deleted file mode 100644
index 5781542a2a3b..000000000000
--- a/erpnext/patches/v5_0/update_item_name_in_bom.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("manufacturing", "doctype", "bom")
- frappe.reload_doc("manufacturing", "doctype", "bom_item")
- frappe.reload_doc("manufacturing", "doctype", "bom_explosion_item")
- frappe.reload_doc("manufacturing", "doctype", "bom_operation")
-
- frappe.db.sql("""update `tabBOM` as bom set bom.item_name = \
- ( select item.item_name from `tabItem` as item where item.name = bom.item)""")
- frappe.db.sql("""update `tabBOM Item` as bomItem set bomItem.item_name = ( select item.item_name \
- from `tabItem` as item where item.name = bomItem.item_code)""")
- frappe.db.sql("""update `tabBOM Explosion Item` as explosionItem set explosionItem.item_name = \
- ( select item.item_name from `tabItem` as item where item.name = explosionItem.item_code)""")
diff --git a/erpnext/patches/v5_0/update_journal_entry_title.py b/erpnext/patches/v5_0/update_journal_entry_title.py
deleted file mode 100644
index eaa2be054fe6..000000000000
--- a/erpnext/patches/v5_0/update_journal_entry_title.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Journal Entry")
- frappe.db.sql("""update `tabJournal Entry` set title =
- if(ifnull(pay_to_recd_from, "")!="", pay_to_recd_from,
- (select account from `tabJournal Entry Account`
- where parent=`tabJournal Entry`.name and idx=1 limit 1))""")
diff --git a/erpnext/patches/v5_0/update_material_transfer_for_manufacture.py b/erpnext/patches/v5_0/update_material_transfer_for_manufacture.py
deleted file mode 100644
index f31c9fed4dc4..000000000000
--- a/erpnext/patches/v5_0/update_material_transfer_for_manufacture.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.sql("""update `tabStock Entry` set purpose='Material Transfer for Manufacture'
- where ifnull(work_order, '')!='' and purpose='Material Transfer'""")
diff --git a/erpnext/patches/v5_0/update_material_transferred_for_manufacturing.py b/erpnext/patches/v5_0/update_material_transferred_for_manufacturing.py
deleted file mode 100644
index 2a09aa29afd9..000000000000
--- a/erpnext/patches/v5_0/update_material_transferred_for_manufacturing.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Work Order")
- frappe.db.sql("""update `tabWork Order` set material_transferred_for_manufacturing=
- (select sum(fg_completed_qty) from `tabStock Entry`
- where docstatus=1
- and work_order=`tabWork Order`.name
- and purpose = "Material Transfer for Manufacture")""")
diff --git a/erpnext/patches/v5_0/update_material_transferred_for_manufacturing_again.py b/erpnext/patches/v5_0/update_material_transferred_for_manufacturing_again.py
deleted file mode 100644
index 5847c83d38f1..000000000000
--- a/erpnext/patches/v5_0/update_material_transferred_for_manufacturing_again.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- wo_order_qty_transferred = frappe._dict()
- for se in frappe.db.sql("""select work_order, sum(fg_completed_qty) as transferred_qty
- from `tabStock Entry`
- where docstatus=1 and ifnull(work_order, '') != ''
- and purpose = 'Material Transfer for Manufacture'
- group by work_order""", as_dict=1):
- wo_order_qty_transferred.setdefault(se.work_order, se.transferred_qty)
-
- for d in frappe.get_all("Work Order", filters={"docstatus": 1}, fields=["name", "qty"]):
- if d.name in wo_order_qty_transferred:
- material_transferred_for_manufacturing = wo_order_qty_transferred.get(d.name) \
- if wo_order_qty_transferred.get(d.name) <= d.qty else d.qty
-
- frappe.db.sql("""update `tabWork Order` set material_transferred_for_manufacturing=%s
- where name=%s""", (material_transferred_for_manufacturing, d.name))
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/update_operation_description.py b/erpnext/patches/v5_0/update_operation_description.py
deleted file mode 100644
index 4ce32f35f118..000000000000
--- a/erpnext/patches/v5_0/update_operation_description.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import frappe.permissions
-
-def execute():
- if "opn_description" in frappe.db.get_table_columns("BOM Operation"):
- frappe.db.sql("""update `tabBOM Operation` set description = opn_description
- where ifnull(description, '') = ''""")
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/update_opportunity.py b/erpnext/patches/v5_0/update_opportunity.py
deleted file mode 100644
index 8eb45c48e7ea..000000000000
--- a/erpnext/patches/v5_0/update_opportunity.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('crm', 'doctype', 'opportunity')
- frappe.reload_doc('crm', 'doctype', 'opportunity_item')
-
- # all existing opportunities were with items
- frappe.db.sql("update `tabDocType` set module = 'CRM' where name='Opportunity Item'")
- frappe.db.sql("update tabOpportunity set with_items=1, title=customer_name")
- frappe.db.sql("update `tabEmail Account` set append_to='Opportunity' where append_to='Lead'")
diff --git a/erpnext/patches/v5_0/update_projects.py b/erpnext/patches/v5_0/update_projects.py
deleted file mode 100644
index 68e03c9bdb6f..000000000000
--- a/erpnext/patches/v5_0/update_projects.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # convert milestones to tasks
- frappe.reload_doctype("Project")
- frappe.reload_doc("projects", "doctype", "project_task")
- frappe.reload_doctype("Task")
- frappe.reload_doc("projects", "doctype", "task_depends_on")
- frappe.reload_doc("projects", "doctype", "time_log")
-
- for m in frappe.get_all("Project Milestone", "*"):
- if (m.milestone and m.milestone_date
- and frappe.db.exists("Project", m.parent)):
- subject = (m.milestone[:139] + "…") if (len(m.milestone) > 140) else m.milestone
- description = m.milestone
- task = frappe.get_doc({
- "doctype": "Task",
- "subject": subject,
- "description": description if description!=subject else None,
- "expected_start_date": m.milestone_date,
- "status": "Open" if m.status=="Pending" else "Closed",
- "project": m.parent,
- })
- task.flags.ignore_mandatory = True
- task.insert(ignore_permissions=True)
-
- # remove project milestone
- frappe.delete_doc("DocType", "Project Milestone")
-
- # remove calendar events for milestone
- for e in frappe.get_all("Event", ["name"], {"ref_type": "Project"}):
- frappe.delete_doc("Event", e.name)
diff --git a/erpnext/patches/v5_0/update_sms_sender.py b/erpnext/patches/v5_0/update_sms_sender.py
deleted file mode 100644
index 7ffc703c43ba..000000000000
--- a/erpnext/patches/v5_0/update_sms_sender.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.set_value("SMS Settings", "SMS Settings", "sms_sender_name",
- frappe.db.get_single_value("Global Defaults", "sms_sender_name"))
diff --git a/erpnext/patches/v5_0/update_tax_amount_after_discount_in_purchase_cycle.py b/erpnext/patches/v5_0/update_tax_amount_after_discount_in_purchase_cycle.py
deleted file mode 100644
index 53df9422b386..000000000000
--- a/erpnext/patches/v5_0/update_tax_amount_after_discount_in_purchase_cycle.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.sql("""
- update
- `tabPurchase Taxes and Charges`
- set
- tax_amount_after_discount_amount = tax_amount,
- base_tax_amount_after_discount_amount = base_tax_amount
- where
- ifnull(tax_amount_after_discount_amount, 0) = 0
- and ifnull(base_tax_amount_after_discount_amount, 0) = 0
- """)
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/update_temporary_account.py b/erpnext/patches/v5_0/update_temporary_account.py
deleted file mode 100644
index 078c8714fff3..000000000000
--- a/erpnext/patches/v5_0/update_temporary_account.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.sql("""Update `tabAccount` set account_type = 'Temporary'
- where account_name in ('Temporary Assets', 'Temporary Liabilities', 'Temporary Opening')""")
\ No newline at end of file
diff --git a/erpnext/patches/v5_0/update_time_log_title.py b/erpnext/patches/v5_0/update_time_log_title.py
deleted file mode 100644
index 8263be000758..000000000000
--- a/erpnext/patches/v5_0/update_time_log_title.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Time Log")
- for d in frappe.get_all("Time Log"):
- time_log = frappe.get_doc("Time Log", d.name)
- time_log.set_title()
- frappe.db.set_value("Time Log", time_log.name, "title", time_log.title)
diff --git a/erpnext/patches/v5_1/__init__.py b/erpnext/patches/v5_1/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v5_1/default_bom.py b/erpnext/patches/v5_1/default_bom.py
deleted file mode 100644
index 6484edd6039e..000000000000
--- a/erpnext/patches/v5_1/default_bom.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-
-import frappe
-
-def execute():
- frappe.db.sql("""Update `tabItem` as item set default_bom = NULL where
- not exists(select name from `tabBOM` as bom where item.default_bom = bom.name and bom.docstatus =1 )""")
\ No newline at end of file
diff --git a/erpnext/patches/v5_1/fix_against_account.py b/erpnext/patches/v5_1/fix_against_account.py
deleted file mode 100644
index a62c15b7d190..000000000000
--- a/erpnext/patches/v5_1/fix_against_account.py
+++ /dev/null
@@ -1,37 +0,0 @@
-from __future__ import unicode_literals
-
-import frappe
-
-from erpnext.accounts.doctype.gl_entry.gl_entry import update_against_account
-
-def execute():
- from_date = "2015-05-01"
-
- for doc in frappe.get_all("Journal Entry",
- filters={"creation": (">", from_date), "docstatus": "1"}):
-
- # update in gl_entry
- update_against_account("Journal Entry", doc.name)
-
- # update in jv
- doc = frappe.get_doc("Journal Entry", doc.name)
- doc.set_against_account()
- doc.db_update()
-
- for doc in frappe.get_all("Sales Invoice",
- filters={"creation": (">", from_date), "docstatus": "1"},
- fields=["name", "customer"]):
-
- frappe.db.sql("""update `tabGL Entry` set against=%s
- where voucher_type='Sales Invoice' and voucher_no=%s
- and credit > 0 and ifnull(party, '')=''""",
- (doc.customer, doc.name))
-
- for doc in frappe.get_all("Purchase Invoice",
- filters={"creation": (">", from_date), "docstatus": "1"},
- fields=["name", "supplier"]):
-
- frappe.db.sql("""update `tabGL Entry` set against=%s
- where voucher_type='Purchase Invoice' and voucher_no=%s
- and debit > 0 and ifnull(party, '')=''""",
- (doc.supplier, doc.name))
diff --git a/erpnext/patches/v5_1/rename_roles.py b/erpnext/patches/v5_1/rename_roles.py
deleted file mode 100644
index e19c22a61429..000000000000
--- a/erpnext/patches/v5_1/rename_roles.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if not frappe.db.exists("Role", "Stock User"):
- frappe.rename_doc("Role", "Material User", "Stock User")
- if not frappe.db.exists("Role", "Stock Manager"):
- frappe.rename_doc("Role", "Material Manager", "Stock Manager")
- if not frappe.db.exists("Role", "Item Manager"):
- frappe.rename_doc("Role", "Material Master Manager", "Item Manager")
diff --git a/erpnext/patches/v5_1/sales_bom_rename.py b/erpnext/patches/v5_1/sales_bom_rename.py
deleted file mode 100644
index e06012f3e41c..000000000000
--- a/erpnext/patches/v5_1/sales_bom_rename.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- tables = frappe.db.sql_list("show tables")
- for old_dt, new_dt in [["Sales BOM Item", "Product Bundle Item"],
- ["Sales BOM", "Product Bundle"]]:
- if "tab"+new_dt not in tables:
- frappe.rename_doc("DocType", old_dt, new_dt, force=True)
diff --git a/erpnext/patches/v5_2/__init__.py b/erpnext/patches/v5_2/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v5_2/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v5_2/change_item_selects_to_checks.py b/erpnext/patches/v5_2/change_item_selects_to_checks.py
deleted file mode 100644
index 1ee8f6caa57b..000000000000
--- a/erpnext/patches/v5_2/change_item_selects_to_checks.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from __future__ import unicode_literals
-
-import frappe
-
-def execute():
- fields = ("is_stock_item", "is_asset_item", "has_batch_no", "has_serial_no",
- "is_sales_item", "is_purchase_item", "inspection_required", "is_sub_contracted_item")
-
- # convert to 1 or 0
- update_str = ", ".join(["`{0}`=if(`{0}`='Yes',1,0)".format(f) for f in fields])
- frappe.db.sql("update tabItem set {0}".format(update_str))
-
- frappe.db.commit()
-
- # alter fields to int
- for f in fields:
- frappe.db.sql("alter table tabItem change {0} {0} int(1) default '0'".format(f, f))
-
- frappe.reload_doctype("Item")
diff --git a/erpnext/patches/v5_4/__init__.py b/erpnext/patches/v5_4/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v5_4/cleanup_journal_entry.py b/erpnext/patches/v5_4/cleanup_journal_entry.py
deleted file mode 100644
index 6860e6ad090b..000000000000
--- a/erpnext/patches/v5_4/cleanup_journal_entry.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from pymysql import InternalError
-
-def execute():
- frappe.reload_doctype("Journal Entry Account")
- for doctype, fieldname in (
- ("Sales Order", "against_sales_order"),
- ("Purchase Order", "against_purchase_order"),
- ("Sales Invoice", "against_invoice"),
- ("Purchase Invoice", "against_voucher"),
- ("Journal Entry", "against_jv"),
- ("Expense Claim", "against_expense_claim"),
- ):
- try:
- frappe.db.sql("""update `tabJournal Entry Account`
- set reference_type=%s, reference_name={0} where ifnull({0}, '') != ''
- """.format(fieldname), doctype)
- except InternalError:
- # column not found
- pass
diff --git a/erpnext/patches/v5_4/fix_invoice_outstanding.py b/erpnext/patches/v5_4/fix_invoice_outstanding.py
deleted file mode 100644
index 54a1da69ef55..000000000000
--- a/erpnext/patches/v5_4/fix_invoice_outstanding.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.accounts.doctype.gl_entry.gl_entry import update_outstanding_amt
-
-def execute():
- frappe.reload_doctype("Sales Invoice")
- return_entries = frappe.get_list("Sales Invoice", filters={"is_return": 1, "docstatus": 1},
- fields=["debit_to", "customer", "return_against"])
- for d in return_entries:
- update_outstanding_amt(d.debit_to, "Customer", d.customer, "Sales Invoice", d.return_against)
diff --git a/erpnext/patches/v5_4/fix_missing_item_images.py b/erpnext/patches/v5_4/fix_missing_item_images.py
deleted file mode 100644
index c6fe57896fab..000000000000
--- a/erpnext/patches/v5_4/fix_missing_item_images.py
+++ /dev/null
@@ -1,126 +0,0 @@
-from __future__ import print_function, unicode_literals
-import frappe
-import os
-from frappe.utils import get_files_path
-from frappe.core.doctype.file.file import get_content_hash
-
-def execute():
- files_path = get_files_path()
-
- # get files that don't have attached_to_name but exist
- unlinked_files = get_unlinked_files(files_path)
- if not unlinked_files:
- return
-
- fixed_files = fix_files_for_item(files_path, unlinked_files)
-
- # fix remaining files
- for key, file_data in unlinked_files.items():
- if key not in fixed_files:
- rename_and_set_content_hash(files_path, unlinked_files, key)
- frappe.db.commit()
-
-def fix_files_for_item(files_path, unlinked_files):
- fixed_files = []
-
- # make a list of files/something and /files/something to check in child table's image column
- file_urls = [key for key in unlinked_files.keys()] + ["/" + key for key in unlinked_files.keys()]
- file_item_code = get_file_item_code(file_urls)
-
- for (file_url, item_code), children in file_item_code.items():
- new_file_url = "/files/{0}".format(unlinked_files[file_url]["file_name"])
-
- for row in children:
- # print file_url, new_file_url, item_code, row.doctype, row.name
-
- # replace image in these rows with the new file url
- frappe.db.set_value(row.doctype, row.name, "image", new_file_url, update_modified=False)
-
- # set it as attachment of this item code
- file_data = frappe.get_doc("File", unlinked_files[file_url]["file"])
- file_data.attached_to_doctype = "Item"
- file_data.attached_to_name = item_code
- file_data.flags.ignore_folder_validate = True
-
- try:
- file_data.save()
- except IOError:
- print("File {0} does not exist".format(new_file_url))
-
- # marking fix to prevent further errors
- fixed_files.append(file_url)
-
- continue
-
- # set it as image in Item
- if not frappe.db.get_value("Item", item_code, "image"):
- frappe.db.set_value("Item", item_code, "image", new_file_url, update_modified=False)
-
- rename_and_set_content_hash(files_path, unlinked_files, file_url)
-
- fixed_files.append(file_url)
-
- # commit
- frappe.db.commit()
-
- return fixed_files
-
-def rename_and_set_content_hash(files_path, unlinked_files, file_url):
- # rename this file
- old_filename = os.path.join(files_path, unlinked_files[file_url]["file"])
- new_filename = os.path.join(files_path, unlinked_files[file_url]["file_name"])
-
- if not os.path.exists(new_filename):
- os.rename(old_filename, new_filename)
-
- # set content hash if missing
- file_data_name = unlinked_files[file_url]["file"]
- if not frappe.db.get_value("File", file_data_name, "content_hash"):
- with open(new_filename, "r") as f:
- content_hash = get_content_hash(f.read())
- frappe.db.set_value("File", file_data_name, "content_hash", content_hash)
-
-def get_unlinked_files(files_path):
- # find files that have the same name as a File doc
- # and the file_name mentioned in that File doc doesn't exist
- # and it isn't already attached to a doc
- unlinked_files = {}
- files = os.listdir(files_path)
- for file in files:
- if not frappe.db.exists("File", {"file_name": file}):
- file_data = frappe.db.get_value("File", {"name": file},
- ["file_name", "attached_to_doctype", "attached_to_name"], as_dict=True)
-
- if (file_data
- and file_data.file_name
- and file_data.file_name not in files
- and not file_data.attached_to_doctype
- and not file_data.attached_to_name):
-
- file_data["file"] = file
- unlinked_files["files/{0}".format(file)] = file_data
-
- return unlinked_files
-
-def get_file_item_code(file_urls):
- # get a map of file_url, item_code and list of documents where file_url will need to be changed in image field
- file_item_code = {}
-
- doctypes = frappe.db.sql_list("""select name from `tabDocType` dt
- where istable=1
- and exists (select name from `tabDocField` df where df.parent=dt.name and df.fieldname='item_code')
- and exists (select name from `tabDocField` df where df.parent=dt.name and df.fieldname='image')""")
-
- for doctype in doctypes:
- result = frappe.db.sql("""select name, image, item_code, '{0}' as doctype from `tab{0}`
- where image in ({1})""".format(doctype, ", ".join(["%s"]*len(file_urls))),
- file_urls, as_dict=True)
-
- for r in result:
- key = (r.image, r.item_code)
- if key not in file_item_code:
- file_item_code[key] = []
-
- file_item_code[key].append(r)
-
- return file_item_code
diff --git a/erpnext/patches/v5_4/fix_reserved_qty_and_sle_for_packed_items.py b/erpnext/patches/v5_4/fix_reserved_qty_and_sle_for_packed_items.py
deleted file mode 100644
index 6eb3994c7c51..000000000000
--- a/erpnext/patches/v5_4/fix_reserved_qty_and_sle_for_packed_items.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.stock_balance import repost_actual_qty
-
-def execute():
- cancelled_invoices = frappe.db.sql_list("""select name from `tabSales Invoice`
- where docstatus = 2 and ifnull(update_stock, 0) = 1""")
-
- if cancelled_invoices:
- repost_for = frappe.db.sql("""select distinct item_code, warehouse from `tabStock Ledger Entry`
- where voucher_type = 'Sales Invoice' and voucher_no in (%s)"""
- % (', '.join(['%s']*len(cancelled_invoices))), tuple(cancelled_invoices))
-
- frappe.db.sql("""delete from `tabStock Ledger Entry`
- where voucher_type = 'Sales Invoice' and voucher_no in (%s)"""
- % (', '.join(['%s']*len(cancelled_invoices))), tuple(cancelled_invoices))
-
- for item_code, warehouse in repost_for:
- repost_actual_qty(item_code, warehouse)
\ No newline at end of file
diff --git a/erpnext/patches/v5_4/notify_system_managers_regarding_wrong_tax_calculation.py b/erpnext/patches/v5_4/notify_system_managers_regarding_wrong_tax_calculation.py
deleted file mode 100644
index ba311225bb17..000000000000
--- a/erpnext/patches/v5_4/notify_system_managers_regarding_wrong_tax_calculation.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-from frappe.email import sendmail_to_system_managers
-from frappe.utils import get_link_to_form
-
-def execute():
- wrong_records = []
- for dt in ("Quotation", "Sales Order", "Delivery Note", "Sales Invoice",
- "Purchase Order", "Purchase Receipt", "Purchase Invoice"):
- records = frappe.db.sql_list("""select name from `tab{0}`
- where apply_discount_on = 'Net Total' and ifnull(discount_amount, 0) != 0
- and modified >= '2015-02-17' and docstatus=1""".format(dt))
-
- if records:
- records = [get_link_to_form(dt, d) for d in records]
- wrong_records.append([dt, records])
-
- if wrong_records:
- content = """Dear System Manager,
-
-Due to an error related to Discount Amount on Net Total, tax calculation might be wrong in the following records. We did not fix the tax amount automatically because it can corrupt the entries, so we request you to check these records and amend if you found the calculation wrong.
-
-Please check following Entries:
-
-%s
-
-
-Regards,
-
-Administrator""" % "\n".join([(d[0] + ": " + ", ".join(d[1])) for d in wrong_records])
- try:
- sendmail_to_system_managers("[Important] [ERPNext] Tax calculation might be wrong, please check.", content)
- except:
- pass
-
- print("="*50)
- print(content)
- print("="*50)
\ No newline at end of file
diff --git a/erpnext/patches/v5_4/set_root_and_report_type.py b/erpnext/patches/v5_4/set_root_and_report_type.py
deleted file mode 100644
index 9147644da2ec..000000000000
--- a/erpnext/patches/v5_4/set_root_and_report_type.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- roots = frappe.db.sql("""select lft, rgt, report_type, root_type
- from `tabAccount` where ifnull(parent_account, '')=''""", as_dict=1)
- for d in roots:
- frappe.db.sql("update `tabAccount` set report_type=%s, root_type=%s where lft > %s and rgt < %s",
- (d.report_type, d.root_type, d.lft, d.rgt))
\ No newline at end of file
diff --git a/erpnext/patches/v5_4/stock_entry_additional_costs.py b/erpnext/patches/v5_4/stock_entry_additional_costs.py
deleted file mode 100644
index 3a98deb918e1..000000000000
--- a/erpnext/patches/v5_4/stock_entry_additional_costs.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (c) 2015, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import flt
-
-def execute():
- frappe.reload_doctype("Stock Entry")
- frappe.reload_doctype("Stock Entry Detail")
- frappe.reload_doctype("Landed Cost Taxes and Charges")
-
- stock_entry_db_columns = frappe.db.get_table_columns("Stock Entry")
- if "additional_operating_cost" in stock_entry_db_columns:
- operating_cost_fieldname = "additional_operating_cost"
- elif "total_fixed_cost" in stock_entry_db_columns:
- operating_cost_fieldname = "total_fixed_cost"
- else:
- return
-
-
- frappe.db.sql("""update `tabStock Entry Detail` sed, `tabStock Entry` se
- set sed.valuation_rate=sed.incoming_rate, sed.basic_rate=sed.incoming_rate, sed.basic_amount=sed.amount
- where sed.parent = se.name
- and (se.purpose not in ('Manufacture', 'Repack') or ifnull({0}, 0)=0)
- """.format(operating_cost_fieldname))
-
-
- stock_entries = frappe.db.sql_list("""select name from `tabStock Entry`
- where purpose in ('Manufacture', 'Repack') and ifnull({0}, 0)!=0
- and docstatus < 2""".format(operating_cost_fieldname))
-
- for d in stock_entries:
- stock_entry = frappe.get_doc("Stock Entry", d)
- stock_entry.append("additional_costs", {
- "description": "Additional Operating Cost",
- "amount": stock_entry.get(operating_cost_fieldname)
- })
-
- number_of_fg_items = len([t.t_warehouse for t in stock_entry.get("items") if t.t_warehouse])
-
- for d in stock_entry.get("items"):
- d.valuation_rate = d.incoming_rate
-
- if d.bom_no or (d.t_warehouse and number_of_fg_items == 1):
- d.additional_cost = stock_entry.get(operating_cost_fieldname)
-
- d.basic_rate = flt(d.valuation_rate) - flt(d.additional_cost)
- d.basic_amount = flt(flt(d.basic_rate) *flt(d.transfer_qty), d.precision("basic_amount"))
-
- stock_entry.flags.ignore_validate = True
- stock_entry.flags.ignore_validate_update_after_submit = True
- stock_entry.save()
diff --git a/erpnext/patches/v5_4/update_purchase_cost_against_project.py b/erpnext/patches/v5_4/update_purchase_cost_against_project.py
deleted file mode 100644
index 1b917c83c4fc..000000000000
--- a/erpnext/patches/v5_4/update_purchase_cost_against_project.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for p in frappe.get_all("Project"):
- purchase_cost = frappe.db.sql("""select sum(ifnull(base_net_amount, 0))
- from `tabPurchase Invoice Item` where project = %s and docstatus=1""", p.name)
- purchase_cost = purchase_cost and purchase_cost[0][0] or 0
-
- frappe.db.set_value("Project", p.name, "total_purchase_cost", purchase_cost)
\ No newline at end of file
diff --git a/erpnext/patches/v5_7/__init__.py b/erpnext/patches/v5_7/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v5_7/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v5_7/item_template_attributes.py b/erpnext/patches/v5_7/item_template_attributes.py
deleted file mode 100644
index 6aa81f79b29b..000000000000
--- a/erpnext/patches/v5_7/item_template_attributes.py
+++ /dev/null
@@ -1,124 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-from frappe.exceptions import SQLError
-
-def execute():
- """
- Structure History:
- 1. Item and Item Variant
- 2. Item, Variant Attribute, Manage Variants and Manage Variant Items
- 3. Item, Item Variant Attribute, Item Attribute and Item Attribute Type (latest)
- """
- rename_and_reload_doctypes()
-
- variant_templates = frappe.get_all("Item", filters={"has_variants": 1}, limit_page_length=1)
- if not variant_templates:
- # database does not have items that have variants
- # so no point in running the patch
- return
-
- variant_attributes = frappe.get_all("Item Variant Attribute", fields=["*"], limit_page_length=1)
-
- if variant_attributes:
- # manage variant patch is already applied
- migrate_manage_variants()
-
- else:
- # old structure based on "Item Variant" table
- try:
- migrate_item_variants()
-
- except SQLError:
- print("`tabItem Variant` not found")
-
-def rename_and_reload_doctypes():
- if "tabVariant Attribute" in frappe.db.get_tables():
- frappe.rename_doc("DocType", "Variant Attribute", "Item Variant Attribute")
-
- frappe.reload_doctype("Item")
- frappe.reload_doc("Stock", "DocType", "Item Variant Attribute")
- frappe.reload_doc("Stock", "DocType", "Item Attribute Value")
- frappe.reload_doc("Stock", "DocType", "Item Attribute")
-
-def migrate_manage_variants():
- item_attribute = {}
- for d in frappe.db.sql("""select DISTINCT va.attribute, i.variant_of
- from `tabItem Variant Attribute` va, `tabItem` i
- where va.parent = i.name and ifnull(i.variant_of, '')!=''""", as_dict=1):
- item_attribute.setdefault(d.variant_of, []).append({"attribute": d.attribute})
-
- for item, attributes in item_attribute.items():
- template = frappe.get_doc("Item", item)
- template.set('attributes', attributes)
- template.save()
-
-# patch old style
-def migrate_item_variants():
- for item in frappe.get_all("Item", filters={"has_variants": 1}):
- all_variants = frappe.get_all("Item", filters={"variant_of": item.name}, fields=["name", "description"])
- item_attributes = frappe.db.sql("""select distinct item_attribute, item_attribute_value
- from `tabItem Variant` where parent=%s""", item.name)
-
- if not item_attributes and not all_variants:
- item = frappe.get_doc("Item", item.name)
- item.has_variants = 0
- item.save()
- continue
-
- attribute_value_options = {}
- for attribute, value in item_attributes:
- attribute_value_options.setdefault(attribute, []).append(value)
-
- possible_combinations = get_possible_combinations(attribute_value_options)
-
- for variant in all_variants:
- for combination in possible_combinations:
- match = True
- for attribute, value in combination.items():
- if "{0}: {1}".format(attribute, value) not in variant.description:
- match = False
- break
-
- if match:
- # found the right variant
- save_attributes_in_variant(variant, combination)
- break
-
- save_attributes_in_template(item, attribute_value_options)
-
- frappe.delete_doc("DocType", "Item Variant")
-
-def save_attributes_in_template(item, attribute_value_options):
- # store attribute in Item Variant Attribute table for template
- template = frappe.get_doc("Item", item)
- template.set("attributes", [{"attribute": attribute} for attribute in attribute_value_options.keys()])
- template.save()
-
-def get_possible_combinations(attribute_value_options):
- possible_combinations = []
-
- for attribute, values in attribute_value_options.items():
- if not possible_combinations:
- for v in values:
- possible_combinations.append({attribute: v})
-
- else:
- for v in values:
- for combination in possible_combinations:
- combination[attribute] = v
-
- return possible_combinations
-
-def save_attributes_in_variant(variant, combination):
- # add data into attributes table
- variant_item = frappe.get_doc("Item", variant.name)
- variant_item.set("attributes", [])
- for attribute, value in combination.items():
- variant_item.append("attributes", {
- "attribute": attribute,
- "attribute_value": value
- })
- variant_item.save()
diff --git a/erpnext/patches/v5_8/__init__.py b/erpnext/patches/v5_8/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v5_8/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v5_8/add_credit_note_print_heading.py b/erpnext/patches/v5_8/add_credit_note_print_heading.py
deleted file mode 100644
index 476cbc89560b..000000000000
--- a/erpnext/patches/v5_8/add_credit_note_print_heading.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe import _
-
-def execute():
- for print_heading in (_("Credit Note"), _("Debit Note")):
- if not frappe.db.exists("Print Heading", print_heading):
- frappe.get_doc({
- "doctype": "Print Heading",
- "print_heading": print_heading
- }).insert()
diff --git a/erpnext/patches/v5_8/tax_rule.py b/erpnext/patches/v5_8/tax_rule.py
deleted file mode 100644
index 8da28ba4c968..000000000000
--- a/erpnext/patches/v5_8/tax_rule.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("accounts", "doctype", "tax_rule")
-
- customers = frappe.db.sql("""select name, default_taxes_and_charges from tabCustomer where
- ifnull(default_taxes_and_charges, '') != '' """, as_dict=1)
-
- for d in customers:
- if not frappe.db.sql("select name from `tabTax Rule` where customer=%s", d.name):
- tr = frappe.new_doc("Tax Rule")
- tr.tax_type = "Sales"
- tr.customer = d.name
- tr.sales_tax_template = d.default_taxes_and_charges
- tr.save()
-
-
- suppliers = frappe.db.sql("""select name, default_taxes_and_charges from tabSupplier where
- ifnull(default_taxes_and_charges, '') != '' """, as_dict=1)
-
- for d in suppliers:
- if not frappe.db.sql("select name from `tabTax Rule` where supplier=%s", d.name):
- tr = frappe.new_doc("Tax Rule")
- tr.tax_type = "Purchase"
- tr.supplier = d.name
- tr.purchase_tax_template = d.default_taxes_and_charges
- tr.save()
\ No newline at end of file
diff --git a/erpnext/patches/v5_8/update_order_reference_in_return_entries.py b/erpnext/patches/v5_8/update_order_reference_in_return_entries.py
deleted file mode 100644
index 503263834c0d..000000000000
--- a/erpnext/patches/v5_8/update_order_reference_in_return_entries.py
+++ /dev/null
@@ -1,92 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Delivery Note")
- frappe.reload_doctype("Sales Invoice")
- frappe.reload_doctype("Purchase Receipt")
- frappe.reload_doctype("Sales Order Item")
- frappe.reload_doctype("Purchase Order Item")
- frappe.reload_doctype("Purchase Order Item Supplied")
-
- # sales return
- return_entries = list(frappe.db.sql("""
- select dn.name as name, dn_item.name as row_id, dn.return_against,
- dn_item.item_code, "Delivery Note" as doctype
- from `tabDelivery Note Item` dn_item, `tabDelivery Note` dn
- where dn_item.parent=dn.name and dn.is_return=1 and dn.docstatus < 2
- """, as_dict=1))
-
- return_entries += list(frappe.db.sql("""
- select si.name as name, si_item.name as row_id, si.return_against,
- si_item.item_code, "Sales Invoice" as doctype, update_stock
- from `tabSales Invoice Item` si_item, `tabSales Invoice` si
- where si_item.parent=si.name and si.is_return=1 and si.docstatus < 2
- """, as_dict=1))
-
- for d in return_entries:
- ref_field = "against_sales_order" if d.doctype == "Delivery Note" else "sales_order"
- order_details = frappe.db.sql("""
- select {ref_field} as sales_order, so_detail,
- (select transaction_date from `tabSales Order` where name=item.{ref_field}) as sales_order_date
- from `tab{doctype} Item` item
- where
- parent=%s
- and item_code=%s
- and ifnull(so_detail, '') !=''
- order by sales_order_date DESC limit 1
- """.format(ref_field=ref_field, doctype=d.doctype), (d.return_against, d.item_code), as_dict=1)
-
- if order_details:
- frappe.db.sql("""
- update `tab{doctype} Item`
- set {ref_field}=%s, so_detail=%s
- where name=%s
- """.format(doctype=d.doctype, ref_field=ref_field),
- (order_details[0].sales_order, order_details[0].so_detail, d.row_id))
-
- if (d.doctype=="Sales Invoice" and d.update_stock) or d.doctype=="Delivery Note":
- doc = frappe.get_doc(d.doctype, d.name)
- doc.update_reserved_qty()
-
- if d.doctype=="Sales Invoice":
- doc.status_updater = []
- doc.update_status_updater_args()
-
- doc.update_prevdoc_status()
-
- #--------------------------
- # purchase return
- return_entries = frappe.db.sql("""
- select pr.name as name, pr_item.name as row_id, pr.return_against, pr_item.item_code
- from `tabPurchase Receipt Item` pr_item, `tabPurchase Receipt` pr
- where pr_item.parent=pr.name and pr.is_return=1 and pr.docstatus < 2
- """, as_dict=1)
-
- for d in return_entries:
- order_details = frappe.db.sql("""
- select prevdoc_docname as purchase_order, prevdoc_detail_docname as po_detail,
- (select transaction_date from `tabPurchase Order` where name=item.prevdoc_detail_docname) as purchase_order_date
- from `tabPurchase Receipt Item` item
- where
- parent=%s
- and item_code=%s
- and ifnull(prevdoc_detail_docname, '') !=''
- and ifnull(prevdoc_doctype, '') = 'Purchase Order' and ifnull(prevdoc_detail_docname, '') != ''
- order by purchase_order_date DESC limit 1
- """, (d.return_against, d.item_code), as_dict=1)
-
- if order_details:
- frappe.db.sql("""
- update `tabPurchase Receipt Item`
- set prevdoc_doctype='Purchase Order', prevdoc_docname=%s, prevdoc_detail_docname=%s
- where name=%s
- """, (order_details[0].purchase_order, order_details[0].po_detail, d.row_id))
-
- pr = frappe.get_doc("Purchase Receipt", d.name)
- pr.update_ordered_and_reserved_qty()
- pr.update_prevdoc_status()
-
diff --git a/erpnext/patches/v6_0/__init__.py b/erpnext/patches/v6_0/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v6_0/default_activity_rate.py b/erpnext/patches/v6_0/default_activity_rate.py
deleted file mode 100644
index cfbfb723bcd3..000000000000
--- a/erpnext/patches/v6_0/default_activity_rate.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("projects", "doctype", "activity_cost")
-
- for cost in frappe.db.get_list("Activity Cost", filters = {"employee": ""},
- fields = ("name", "activity_type", "costing_rate", "billing_rate")):
- activity_type = frappe.get_doc("Activity Type", cost.activity_type)
- activity_type.costing_rate = cost.costing_rate
- activity_type.billing_rate = cost.billing_rate
- activity_type.save()
-
- frappe.delete_doc("Activity Cost", cost.name)
diff --git a/erpnext/patches/v6_0/fix_outstanding_amount.py b/erpnext/patches/v6_0/fix_outstanding_amount.py
deleted file mode 100644
index 0de689074f3d..000000000000
--- a/erpnext/patches/v6_0/fix_outstanding_amount.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.accounts.doctype.gl_entry.gl_entry import update_outstanding_amt
-
-def execute():
- for dt, party_field, account_field in (("Sales Invoice", "customer", "debit_to"),
- ("Purchase Invoice", "supplier", "credit_to")):
-
- wrong_invoices = frappe.db.sql("""select name, {0} as account from `tab{1}`
- where docstatus=1 and ifnull({2}, '')=''""".format(account_field, dt, party_field))
-
- for invoice, account in wrong_invoices:
- update_outstanding_amt(account, party_field.title(), None, dt, invoice)
\ No newline at end of file
diff --git a/erpnext/patches/v6_0/fix_planned_qty.py b/erpnext/patches/v6_0/fix_planned_qty.py
deleted file mode 100644
index cf7b429249dd..000000000000
--- a/erpnext/patches/v6_0/fix_planned_qty.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.stock_balance import get_planned_qty, update_bin_qty
-
-def execute():
- for item_code, warehouse in frappe.db.sql("""select distinct production_item, fg_warehouse
- from `tabWork Order`"""):
- if frappe.db.exists("Item", item_code) and frappe.db.exists("Warehouse", warehouse):
- update_bin_qty(item_code, warehouse, {
- "planned_qty": get_planned_qty(item_code, warehouse)
- })
diff --git a/erpnext/patches/v6_0/multi_currency.py b/erpnext/patches/v6_0/multi_currency.py
deleted file mode 100644
index b4c37fc25304..000000000000
--- a/erpnext/patches/v6_0/multi_currency.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # Reload doctype
- for dt in ("Account", "GL Entry", "Journal Entry",
- "Journal Entry Account", "Sales Invoice", "Purchase Invoice", "Customer", "Supplier"):
- frappe.reload_doctype(dt)
-
- company_list = frappe.get_all("Company", fields=["name", "default_currency", "default_receivable_account"])
- for company in company_list:
-
- # update currency in account and gl entry as per company currency
- frappe.db.sql("""update `tabAccount` set account_currency = %s
- where ifnull(account_currency, '') = '' and company=%s""", (company.default_currency, company.name))
-
- # update newly introduced field's value in sales / purchase invoice
- frappe.db.sql("""
- update
- `tabSales Invoice`
- set
- base_paid_amount=paid_amount,
- base_write_off_amount=write_off_amount,
- party_account_currency=%s
- where company=%s
- """, (company.default_currency, company.name))
-
- frappe.db.sql("""
- update
- `tabPurchase Invoice`
- set
- base_write_off_amount=write_off_amount,
- party_account_currency=%s
- where company=%s
- """, (company.default_currency, company.name))
-
- # update exchange rate, debit/credit in account currency in Journal Entry
- frappe.db.sql("""
- update `tabJournal Entry Account` jea
- set exchange_rate=1,
- debit_in_account_currency=debit,
- credit_in_account_currency=credit,
- account_type=(select account_type from `tabAccount` where name=jea.account)
- """)
-
- frappe.db.sql("""
- update `tabJournal Entry Account` jea, `tabJournal Entry` je
- set account_currency=%s
- where jea.parent = je.name and je.company=%s
- """, (company.default_currency, company.name))
-
- # update debit/credit in account currency in GL Entry
- frappe.db.sql("""
- update
- `tabGL Entry`
- set
- debit_in_account_currency=debit,
- credit_in_account_currency=credit,
- account_currency=%s
- where
- company=%s
- """, (company.default_currency, company.name))
diff --git a/erpnext/patches/v6_0/set_default_title.py b/erpnext/patches/v6_0/set_default_title.py
deleted file mode 100644
index cceff3f480c7..000000000000
--- a/erpnext/patches/v6_0/set_default_title.py
+++ /dev/null
@@ -1,36 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Quotation")
- frappe.db.sql("""update tabQuotation set title = customer_name""")
-
- frappe.reload_doctype("Sales Order")
- frappe.db.sql("""update `tabSales Order` set title = customer_name""")
-
- frappe.reload_doctype("Delivery Note")
- frappe.db.sql("""update `tabDelivery Note` set title = customer_name""")
-
- frappe.reload_doctype("Material Request")
- frappe.db.sql("""update `tabMaterial Request` set title = material_request_type""")
-
- frappe.reload_doctype("Supplier Quotation")
- frappe.db.sql("""update `tabSupplier Quotation` set title = supplier_name""")
-
- frappe.reload_doctype("Purchase Order")
- frappe.db.sql("""update `tabPurchase Order` set title = supplier_name""")
-
- frappe.reload_doctype("Purchase Receipt")
- frappe.db.sql("""update `tabPurchase Receipt` set title = supplier_name""")
-
- frappe.reload_doctype("Purchase Invoice")
- frappe.db.sql("""update `tabPurchase Invoice` set title = supplier_name""")
-
- frappe.reload_doctype("Stock Entry")
- frappe.db.sql("""update `tabStock Entry` set title = purpose""")
-
- frappe.reload_doctype("Sales Invoice")
- frappe.db.sql("""update `tabSales Invoice` set title = customer_name""")
-
- frappe.reload_doctype("Expense Claim")
- frappe.db.sql("""update `tabExpense Claim` set title = employee_name""")
diff --git a/erpnext/patches/v6_10/__init__.py b/erpnext/patches/v6_10/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v6_10/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_10/email_digest_default_quote.py b/erpnext/patches/v6_10/email_digest_default_quote.py
deleted file mode 100644
index 6139f1a88a60..000000000000
--- a/erpnext/patches/v6_10/email_digest_default_quote.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Email Digest")
- frappe.db.sql("update `tabEmail Digest` set add_quote = 1")
diff --git a/erpnext/patches/v6_10/fix_billed_amount_in_drop_ship_po.py b/erpnext/patches/v6_10/fix_billed_amount_in_drop_ship_po.py
deleted file mode 100644
index d7f72b588089..000000000000
--- a/erpnext/patches/v6_10/fix_billed_amount_in_drop_ship_po.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.sql("""update `tabPurchase Order Item` set billed_amt = 0
- where delivered_by_supplier=1 and docstatus=1""")
-
- drop_ship_pos = frappe.db.sql("""select distinct parent from `tabPurchase Order Item`
- where delivered_by_supplier=1 and docstatus=1""")
-
- for po in drop_ship_pos:
- invoices = frappe.db.sql("""select distinct parent from `tabPurchase Invoice Item`
- where purchase_order=%s and docstatus=1""", po[0])
- if invoices:
- for inv in invoices:
- frappe.get_doc("Purchase Invoice", inv[0]).update_qty(update_modified=False)
- else:
- frappe.db.sql("""update `tabPurchase Order` set per_billed=0 where name=%s""", po[0])
\ No newline at end of file
diff --git a/erpnext/patches/v6_10/fix_delivery_status_of_drop_ship_item.py b/erpnext/patches/v6_10/fix_delivery_status_of_drop_ship_item.py
deleted file mode 100644
index 9a53b7f5d397..000000000000
--- a/erpnext/patches/v6_10/fix_delivery_status_of_drop_ship_item.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Sales Order Item")
- for so_name in frappe.db.sql("""select distinct parent from `tabSales Order Item`
- where delivered_by_supplier=1 and docstatus=1"""):
- so = frappe.get_doc("Sales Order", so_name[0])
- so.update_delivery_status()
- so.set_status(update=True, update_modified=False)
\ No newline at end of file
diff --git a/erpnext/patches/v6_10/fix_jv_total_amount.py b/erpnext/patches/v6_10/fix_jv_total_amount.py
deleted file mode 100644
index 42cb9e9e150c..000000000000
--- a/erpnext/patches/v6_10/fix_jv_total_amount.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-# patch all for-print field (total amount) in Journal Entry in 2015
-def execute():
- for je in frappe.get_all("Journal Entry", filters={"creation": (">", "2015-01-01")}):
- je = frappe.get_doc("Journal Entry", je.name)
- original = je.total_amount
-
- je.set_print_format_fields()
-
- if je.total_amount != original:
- je.db_set("total_amount", je.total_amount, update_modified=False)
- je.db_set("total_amount_in_words", je.total_amount_in_words, update_modified=False)
diff --git a/erpnext/patches/v6_10/fix_ordered_received_billed.py b/erpnext/patches/v6_10/fix_ordered_received_billed.py
deleted file mode 100644
index c81a20ec5453..000000000000
--- a/erpnext/patches/v6_10/fix_ordered_received_billed.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- not_null_patch_date = frappe.db.sql("""select date(creation) from `tabPatch Log` where patch='frappe.patches.v6_9.int_float_not_null'""")
- if not not_null_patch_date:
- return
-
- not_null_patch_date = not_null_patch_date[0][0]
-
- for doctype in ("Purchase Invoice", "Sales Invoice", "Purchase Order", "Delivery Note", "Installation Note", "Delivery Note", "Purchase Receipt"):
- for name in frappe.db.sql_list("""select name from `tab{doctype}`
- where docstatus > 0 and (date(creation) >= %(patch_date)s or date(modified) >= %(patch_date)s)""".format(doctype=doctype),
- {"patch_date": not_null_patch_date}):
-
- doc = frappe.get_doc(doctype, name)
- doc.update_qty(update_modified=False)
diff --git a/erpnext/patches/v6_12/__init__.py b/erpnext/patches/v6_12/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v6_12/repost_entries_with_target_warehouse.py b/erpnext/patches/v6_12/repost_entries_with_target_warehouse.py
deleted file mode 100644
index fb5eab4e0575..000000000000
--- a/erpnext/patches/v6_12/repost_entries_with_target_warehouse.py
+++ /dev/null
@@ -1,175 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-
-"""
-This patch is written to fix Stock Ledger Entries and GL Entries
-against Delivery Notes and Sales Invoice where Target Warehouse has been set wrongly
-due to User Permissions on Warehouse.
-
-This cannot be run automatically because we can't take a call that
-Target Warehouse has been set purposefully or by mistake.
-Thats why we left it to the users to take the call, and manually run the patch.
-
-This patch has 2 main functions, `check()` and `repost()`.
-- Run `check` function, to list out all the Sales Orders, Delivery Notes
- and Sales Invoice with Target Warehouse.
-- Run `repost` function to remove the Target Warehouse value and repost SLE and GLE again.
-
-To execute this patch run following commands from frappe-bench directory:
-```
- bench --site [your-site-name] execute erpnext.patches.v6_12.repost_entries_with_target_warehouse.check
- bench --site [your-site-name] backup
- bench --site [your-site-name] execute erpnext.patches.v6_12.repost_entries_with_target_warehouse.repost
-```
-
-Exception Handling:
-While reposting, if you get any exception, it will printed on screen.
-Mostly it can be due to negative stock issue. If that is the case, follow these steps
- - Ensure that stock is available for those items in the mentioned warehouse on the date mentioned in the error
- - Execute `repost` funciton again
-"""
-
-def check():
- so_list = get_affected_sales_order()
- dn_list = get_affected_delivery_notes()
- si_list = get_affected_sales_invoice()
-
- if so_list or dn_list or si_list:
- print("Entries with Target Warehouse:")
-
- if so_list:
- print("Sales Order")
- print(so_list)
-
- if dn_list:
- print("Delivery Notes")
- print([d.name for d in dn_list])
-
- if si_list:
- print("Sales Invoice")
- print([d.name for d in si_list])
-
-
-def repost():
- dn_failed_list, si_failed_list = [], []
- repost_dn(dn_failed_list)
- repost_si(si_failed_list)
- repost_so()
- frappe.db.commit()
-
- if dn_failed_list:
- print("-"*40)
- print("Delivery Note Failed to Repost")
- print(dn_failed_list)
-
- if si_failed_list:
- print("-"*40)
- print("Sales Invoice Failed to Repost")
- print(si_failed_list)
- print()
-
- print("""
-If above Delivery Notes / Sales Invoice failed due to negative stock, follow these steps:
- - Ensure that stock is available for those items in the mentioned warehouse on the date mentioned in the error
- - Run this patch again
-""")
-
-def repost_dn(dn_failed_list):
- dn_list = get_affected_delivery_notes()
-
- if dn_list:
- print("-"*40)
- print("Reposting Delivery Notes")
-
- for dn in dn_list:
- if dn.docstatus == 0:
- continue
-
- print(dn.name)
-
- try:
- dn_doc = frappe.get_doc("Delivery Note", dn.name)
- dn_doc.docstatus = 2
- dn_doc.update_prevdoc_status()
- dn_doc.update_stock_ledger()
- dn_doc.cancel_packing_slips()
- frappe.db.sql("""delete from `tabGL Entry`
- where voucher_type='Delivery Note' and voucher_no=%s""", dn.name)
-
- frappe.db.sql("update `tabDelivery Note Item` set target_warehouse='' where parent=%s", dn.name)
- dn_doc = frappe.get_doc("Delivery Note", dn.name)
- dn_doc.docstatus = 1
- dn_doc.on_submit()
- frappe.db.commit()
- except Exception:
- dn_failed_list.append(dn.name)
- frappe.local.stockledger_exceptions = None
- print(frappe.get_traceback())
- frappe.db.rollback()
-
- frappe.db.sql("update `tabDelivery Note Item` set target_warehouse='' where docstatus=0")
-
-def repost_si(si_failed_list):
- si_list = get_affected_sales_invoice()
-
- if si_list:
- print("-"*40)
- print("Reposting Sales Invoice")
-
- for si in si_list:
- if si.docstatus == 0:
- continue
-
- print(si.name)
-
- try:
- si_doc = frappe.get_doc("Sales Invoice", si.name)
- si_doc.docstatus = 2
- si_doc.update_stock_ledger()
- frappe.db.sql("""delete from `tabGL Entry`
- where voucher_type='Sales Invoice' and voucher_no=%s""", si.name)
-
- frappe.db.sql("update `tabSales Invoice Item` set target_warehouse='' where parent=%s", si.name)
- si_doc = frappe.get_doc("Sales Invoice", si.name)
- si_doc.docstatus = 1
- si_doc.update_stock_ledger()
- si_doc.make_gl_entries()
- frappe.db.commit()
- except Exception:
- si_failed_list.append(si.name)
- frappe.local.stockledger_exceptions = None
- print(frappe.get_traceback())
- frappe.db.rollback()
-
- frappe.db.sql("update `tabSales Invoice Item` set target_warehouse='' where docstatus=0")
-
-def repost_so():
- so_list = get_affected_sales_order()
-
- frappe.db.sql("update `tabSales Order Item` set target_warehouse=''")
-
- if so_list:
- print("-"*40)
- print("Sales Order reposted")
-
-
-def get_affected_delivery_notes():
- return frappe.db.sql("""select distinct dn.name, dn.docstatus
- from `tabDelivery Note` dn, `tabDelivery Note Item` dn_item
- where dn.name=dn_item.parent and dn.docstatus < 2
- and dn_item.target_warehouse is not null and dn_item.target_warehouse != ''
- order by dn.posting_date asc""", as_dict=1)
-
-def get_affected_sales_invoice():
- return frappe.db.sql("""select distinct si.name, si.docstatus
- from `tabSales Invoice` si, `tabSales Invoice Item` si_item
- where si.name=si_item.parent and si.docstatus < 2 and si.update_stock=1
- and si_item.target_warehouse is not null and si_item.target_warehouse != ''
- order by si.posting_date asc""", as_dict=1)
-
-def get_affected_sales_order():
- return frappe.db.sql_list("""select distinct parent from `tabSales Order Item`
- where target_warehouse is not null and target_warehouse != '' and docstatus <2""")
\ No newline at end of file
diff --git a/erpnext/patches/v6_12/set_overdue_tasks.py b/erpnext/patches/v6_12/set_overdue_tasks.py
deleted file mode 100644
index 7dbb8ba8b6b2..000000000000
--- a/erpnext/patches/v6_12/set_overdue_tasks.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Task")
-
- from erpnext.projects.doctype.task.task import set_tasks_as_overdue
- set_tasks_as_overdue()
diff --git a/erpnext/patches/v6_16/__init__.py b/erpnext/patches/v6_16/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v6_16/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_16/create_manufacturer_records.py b/erpnext/patches/v6_16/create_manufacturer_records.py
deleted file mode 100644
index 5ae65f066094..000000000000
--- a/erpnext/patches/v6_16/create_manufacturer_records.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cstr
-
-def execute():
- frappe.reload_doc("stock", "doctype", "manufacturer")
- frappe.reload_doctype("Item")
-
- for d in frappe.db.sql("""select distinct manufacturer from tabItem
- where ifnull(manufacturer, '') != '' and disabled=0"""):
- manufacturer_name = cstr(d[0]).strip()
- if manufacturer_name and not frappe.db.exists("Manufacturer", manufacturer_name):
- man = frappe.new_doc("Manufacturer")
- man.short_name = manufacturer_name
- man.full_name = manufacturer_name
- man.save()
diff --git a/erpnext/patches/v6_16/update_billing_status_in_dn_and_pr.py b/erpnext/patches/v6_16/update_billing_status_in_dn_and_pr.py
deleted file mode 100644
index 481f13005ba2..000000000000
--- a/erpnext/patches/v6_16/update_billing_status_in_dn_and_pr.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for dt in ("Delivery Note", "Purchase Receipt"):
- frappe.reload_doctype(dt)
- frappe.reload_doctype(dt + " Item")
-
- # Update billed_amt in DN and PR which are not against any order
- for d in frappe.db.sql("""select name from `tabDelivery Note Item` item
- where (so_detail is null or so_detail = '') and docstatus=1""", as_dict=1):
-
- billed_amt = frappe.db.sql("""select sum(amount) from `tabSales Invoice Item`
- where dn_detail=%s and docstatus=1""", d.name)
- billed_amt = billed_amt and billed_amt[0][0] or 0
- frappe.db.set_value("Delivery Note Item", d.name, "billed_amt", billed_amt, update_modified=False)
-
- frappe.db.commit()
-
- # Update billed_amt in DN and PR which are not against any order
- for d in frappe.db.sql("""select name from `tabPurchase Receipt Item` item
- where (purchase_order_item is null or purchase_order_item = '') and docstatus=1""", as_dict=1):
-
- billed_amt = frappe.db.sql("""select sum(amount) from `tabPurchase Invoice Item`
- where pr_detail=%s and docstatus=1""", d.name)
- billed_amt = billed_amt and billed_amt[0][0] or 0
- frappe.db.set_value("Purchase Receipt Item", d.name, "billed_amt", billed_amt, update_modified=False)
-
- frappe.db.commit()
-
- for dt in ("Delivery Note", "Purchase Receipt"):
- # Update billed amt which are against order or invoice
- # Update billing status for all
- for d in frappe.db.sql("select name from `tab{0}` where docstatus=1".format(dt), as_dict=1):
- doc = frappe.get_doc(dt, d.name)
- doc.update_billing_status(update_modified=False)
- doc.set_status(update=True, update_modified=False)
-
- frappe.db.commit()
diff --git a/erpnext/patches/v6_19/__init__.py b/erpnext/patches/v6_19/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v6_19/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_19/comment_feed_communication.py b/erpnext/patches/v6_19/comment_feed_communication.py
deleted file mode 100644
index bc41c2d8ffed..000000000000
--- a/erpnext/patches/v6_19/comment_feed_communication.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.patches.v6_19.comment_feed_communication import update_timeline_doc_for
-
-def execute():
- for doctype in ("Customer", "Supplier", "Employee", "Project"):
- update_timeline_doc_for(doctype)
diff --git a/erpnext/patches/v6_2/__init__.py b/erpnext/patches/v6_2/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v6_2/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_2/fix_missing_default_taxes_and_lead.py b/erpnext/patches/v6_2/fix_missing_default_taxes_and_lead.py
deleted file mode 100644
index b0cfc3d3bf99..000000000000
--- a/erpnext/patches/v6_2/fix_missing_default_taxes_and_lead.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # remove missing lead
- for customer in frappe.db.sql_list("""select name from `tabCustomer`
- where ifnull(lead_name, '')!='' and not exists (select name from `tabLead` where name=`tabCustomer`.lead_name)"""):
- frappe.db.set_value("Customer", customer, "lead_name", None)
-
- # remove missing default taxes
- for customer in frappe.db.sql_list("""select name from `tabCustomer`
- where ifnull(default_taxes_and_charges, '')!='' and not exists (
- select name from `tabSales Taxes and Charges Template` where name=`tabCustomer`.default_taxes_and_charges
- )"""):
- c = frappe.get_doc("Customer", customer)
- c.default_taxes_and_charges = None
- c.save()
-
- for supplier in frappe.db.sql_list("""select name from `tabSupplier`
- where ifnull(default_taxes_and_charges, '')!='' and not exists (
- select name from `tabPurchase Taxes and Charges Template` where name=`tabSupplier`.default_taxes_and_charges
- )"""):
- c = frappe.get_doc("Supplier", supplier)
- c.default_taxes_and_charges = None
- c.save()
diff --git a/erpnext/patches/v6_2/remove_newsletter_duplicates.py b/erpnext/patches/v6_2/remove_newsletter_duplicates.py
deleted file mode 100644
index f9d15475d172..000000000000
--- a/erpnext/patches/v6_2/remove_newsletter_duplicates.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- duplicates = frappe.db.sql("""select email_group, email, count(name)
- from `tabEmail Group Member`
- group by email_group, email
- having count(name) > 1""")
-
- # delete all duplicates except 1
- for email_group, email, count in duplicates:
- frappe.db.sql("""delete from `tabEmail Group Member`
- where email_group=%s and email=%s limit %s""", (email_group, email, count-1))
diff --git a/erpnext/patches/v6_20/__init__.py b/erpnext/patches/v6_20/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v6_20/set_party_account_currency_in_orders.py b/erpnext/patches/v6_20/set_party_account_currency_in_orders.py
deleted file mode 100644
index ae7ad9592df5..000000000000
--- a/erpnext/patches/v6_20/set_party_account_currency_in_orders.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for doctype in ("Sales Order", "Purchase Order"):
- frappe.reload_doctype(doctype)
-
- for order in frappe.db.sql("""select name, {0} as party from `tab{1}`
- where advance_paid > 0 and docstatus=1"""
- .format(("customer" if doctype=="Sales Order" else "supplier"), doctype), as_dict=1):
-
- party_account_currency = frappe.db.get_value("Journal Entry Account", {
- "reference_type": doctype,
- "reference_name": order.name,
- "party": order.party,
- "docstatus": 1,
- "is_advance": "Yes"
- }, "account_currency")
-
- frappe.db.set_value(doctype, order.name, "party_account_currency", party_account_currency)
-
\ No newline at end of file
diff --git a/erpnext/patches/v6_20x/__init__.py b/erpnext/patches/v6_20x/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v6_20x/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_20x/remove_customer_supplier_roles.py b/erpnext/patches/v6_20x/remove_customer_supplier_roles.py
deleted file mode 100644
index a65157688768..000000000000
--- a/erpnext/patches/v6_20x/remove_customer_supplier_roles.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("buying", "doctype", "request_for_quotation_supplier")
- frappe.reload_doc("buying", "doctype", "request_for_quotation_item")
- frappe.reload_doc("buying", "doctype", "request_for_quotation")
- frappe.reload_doc("projects", "doctype", "timesheet")
-
- for role in ('Customer', 'Supplier'):
- frappe.db.sql('''delete from `tabHas Role`
- where role=%s and parent in ("Administrator", "Guest")''', role)
-
- if not frappe.db.sql('select name from `tabHas Role` where role=%s', role):
-
- # delete DocPerm
- for doctype in frappe.db.sql('select parent from tabDocPerm where role=%s', role):
- d = frappe.get_doc("DocType", doctype[0])
- d.permissions = [p for p in d.permissions if p.role != role]
- d.save()
-
- # delete Role
- frappe.delete_doc_if_exists('Role', role)
diff --git a/erpnext/patches/v6_20x/remove_fiscal_year_from_holiday_list.py b/erpnext/patches/v6_20x/remove_fiscal_year_from_holiday_list.py
deleted file mode 100644
index d440c6859e39..000000000000
--- a/erpnext/patches/v6_20x/remove_fiscal_year_from_holiday_list.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Holiday List")
-
- default_holiday_list = frappe.db.get_value("Holiday List", {"is_default": 1})
- if default_holiday_list:
- for company in frappe.get_all("Company", fields=["name", "default_holiday_list"]):
- if not company.default_holiday_list:
- frappe.db.set_value("Company", company.name, "default_holiday_list", default_holiday_list)
-
-
- fiscal_years = frappe._dict((fy.name, fy) for fy in frappe.get_all("Fiscal Year", fields=["name", "year_start_date", "year_end_date"]))
-
- for holiday_list in frappe.get_all("Holiday List", fields=["name", "fiscal_year"]):
- fy = fiscal_years[holiday_list.fiscal_year]
- frappe.db.set_value("Holiday List", holiday_list.name, "from_date", fy.year_start_date)
- frappe.db.set_value("Holiday List", holiday_list.name, "to_date", fy.year_end_date)
diff --git a/erpnext/patches/v6_20x/rename_project_name_to_project.py b/erpnext/patches/v6_20x/rename_project_name_to_project.py
deleted file mode 100644
index 49ec9d22bc00..000000000000
--- a/erpnext/patches/v6_20x/rename_project_name_to_project.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
-
- doc_list = ["Work Order", "BOM", "Purchase Invoice Item", "Sales Invoice",
- "Purchase Order Item", "Stock Entry", "Delivery Note", "Sales Order",
- "Purchase Receipt Item", "Supplier Quotation Item"]
-
- for doctype in doc_list:
- frappe.reload_doctype(doctype)
- rename_field(doctype, "project_name", "project")
-
\ No newline at end of file
diff --git a/erpnext/patches/v6_20x/repost_valuation_rate_for_negative_inventory.py b/erpnext/patches/v6_20x/repost_valuation_rate_for_negative_inventory.py
deleted file mode 100644
index 8369fea3179f..000000000000
--- a/erpnext/patches/v6_20x/repost_valuation_rate_for_negative_inventory.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cint
-from erpnext.stock.stock_balance import repost
-
-def execute():
- if cint(frappe.db.get_value("Stock Settings", None, "allow_negative_stock")):
- repost(only_actual=True)
\ No newline at end of file
diff --git a/erpnext/patches/v6_20x/set_compact_print.py b/erpnext/patches/v6_20x/set_compact_print.py
deleted file mode 100644
index 495407f0e087..000000000000
--- a/erpnext/patches/v6_20x/set_compact_print.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-from erpnext.setup.install import create_compact_item_print_custom_field
-
-def execute():
- create_compact_item_print_custom_field()
- frappe.db.set_value("Print Settings", None, "compact_item_print", 1)
diff --git a/erpnext/patches/v6_20x/update_product_bundle_description.py b/erpnext/patches/v6_20x/update_product_bundle_description.py
deleted file mode 100644
index 1fac44b0010e..000000000000
--- a/erpnext/patches/v6_20x/update_product_bundle_description.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import sanitize_html
-
-def execute():
- for product_bundle in frappe.get_all('Product Bundle'):
- doc = frappe.get_doc('Product Bundle', product_bundle.name)
- for item in doc.items:
- if item.description:
- description = sanitize_html(item.description)
- item.db_set('description', description, update_modified=False)
diff --git a/erpnext/patches/v6_21/__init__.py b/erpnext/patches/v6_21/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v6_21/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_21/fix_reorder_level.py b/erpnext/patches/v6_21/fix_reorder_level.py
deleted file mode 100644
index 82a35ebab179..000000000000
--- a/erpnext/patches/v6_21/fix_reorder_level.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from __future__ import unicode_literals
-
-import frappe
-from erpnext.stock.doctype.item.item import DuplicateReorderRows
-
-def execute():
- if frappe.db.has_column("Item", "re_order_level"):
- for item in frappe.db.sql("""select name, default_warehouse, re_order_level, re_order_qty
- from tabItem
- where ifnull(re_order_level, 0) != 0
- and ifnull(re_order_qty, 0) != 0""", as_dict=1):
-
- item_doc = frappe.get_doc("Item", item.name)
- item_doc.append("reorder_levels", {
- "warehouse": item.default_warehouse,
- "warehouse_reorder_level": item.re_order_level,
- "warehouse_reorder_qty": item.re_order_qty,
- "material_request_type": "Purchase"
- })
-
- try:
- item_doc.save()
- except DuplicateReorderRows:
- pass
diff --git a/erpnext/patches/v6_21/rename_material_request_fields.py b/erpnext/patches/v6_21/rename_material_request_fields.py
deleted file mode 100644
index 07be27a5d6d8..000000000000
--- a/erpnext/patches/v6_21/rename_material_request_fields.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
- frappe.reload_doc('stock', 'doctype', 'material_request_item')
- rename_field("Material Request Item", "sales_order_no", "sales_order")
-
- frappe.reload_doc('support', 'doctype', 'maintenance_schedule_item')
- rename_field("Maintenance Schedule Item", "prevdoc_docname", "sales_order")
-
\ No newline at end of file
diff --git a/erpnext/patches/v6_23/__init__.py b/erpnext/patches/v6_23/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v6_23/update_stopped_status_to_closed.py b/erpnext/patches/v6_23/update_stopped_status_to_closed.py
deleted file mode 100644
index 79d1e0ac300a..000000000000
--- a/erpnext/patches/v6_23/update_stopped_status_to_closed.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for dt in ("Sales Order", "Purchase Order"):
- frappe.db.sql("update `tab{0}` set status='Closed' where status='Stopped'".format(dt))
\ No newline at end of file
diff --git a/erpnext/patches/v6_24/__init__.py b/erpnext/patches/v6_24/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v6_24/map_customer_address_to_shipping_address_on_po.py b/erpnext/patches/v6_24/map_customer_address_to_shipping_address_on_po.py
deleted file mode 100644
index 1dd8083c7c36..000000000000
--- a/erpnext/patches/v6_24/map_customer_address_to_shipping_address_on_po.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Purchase Order")
-
- if not frappe.db.has_column("Purchase Order", "shipping_address"):
- return
-
- if not frappe.db.has_column("Purchase Order", "customer_address"):
- return
-
- frappe.db.sql("""update `tabPurchase Order` set shipping_address=customer_address,
- shipping_address_display=customer_address_display""")
-
- frappe.db.commit()
\ No newline at end of file
diff --git a/erpnext/patches/v6_24/set_recurring_id.py b/erpnext/patches/v6_24/set_recurring_id.py
deleted file mode 100644
index 527a2fd3d97b..000000000000
--- a/erpnext/patches/v6_24/set_recurring_id.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for doctype in ('Sales Order', 'Purchase Order', 'Sales Invoice',
- 'Purchase Invoice'):
- frappe.reload_doctype(doctype)
- frappe.db.sql('''update `tab{0}` set submit_on_creation=1, notify_by_email=1
- where is_recurring=1'''.format(doctype))
- frappe.db.sql('''update `tab{0}` set notify_by_email=1
- where is_recurring=1'''.format(doctype))
- frappe.db.sql('''update `tab{0}` set recurring_id = name
- where is_recurring=1 and ifnull(recurring_id, '') = "" '''.format(doctype))
diff --git a/erpnext/patches/v6_27/__init__.py b/erpnext/patches/v6_27/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v6_27/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_27/fix_recurring_order_status.py b/erpnext/patches/v6_27/fix_recurring_order_status.py
deleted file mode 100644
index 5843c9fbe5fc..000000000000
--- a/erpnext/patches/v6_27/fix_recurring_order_status.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for doc in (
- {
- "doctype": "Sales Order",
- "stock_doctype": "Delivery Note",
- "invoice_doctype": "Sales Invoice",
- "stock_doctype_ref_field": "against_sales_order",
- "invoice_ref_field": "sales_order",
- "qty_field": "delivered_qty"
- },
- {
- "doctype": "Purchase Order",
- "stock_doctype": "Purchase Receipt",
- "invoice_doctype": "Purchase Invoice",
- "stock_doctype_ref_field": "prevdoc_docname",
- "invoice_ref_field": "purchase_order",
- "qty_field": "received_qty"
- }):
-
- order_list = frappe.db.sql("""select name from `tab{0}`
- where docstatus=1 and is_recurring=1
- and ifnull(recurring_id, '') != name and creation >= '2016-01-25'"""
- .format(doc["doctype"]), as_dict=1)
-
- for order in order_list:
- frappe.db.sql("""update `tab{0} Item`
- set {1}=0, billed_amt=0 where parent=%s""".format(doc["doctype"],
- doc["qty_field"]), order.name)
-
- # Check against Delivery Note and Purchase Receipt
- stock_doc_list = frappe.db.sql("""select distinct parent from `tab{0} Item`
- where docstatus=1 and ifnull({1}, '')=%s"""
- .format(doc["stock_doctype"], doc["stock_doctype_ref_field"]), order.name)
-
- if stock_doc_list:
- for dn in stock_doc_list:
- frappe.get_doc(doc["stock_doctype"], dn[0]).update_qty(update_modified=False)
-
- # Check against Invoice
- invoice_list = frappe.db.sql("""select distinct parent from `tab{0} Item`
- where docstatus=1 and ifnull({1}, '')=%s"""
- .format(doc["invoice_doctype"], doc["invoice_ref_field"]), order.name)
-
- if invoice_list:
- for dn in invoice_list:
- frappe.get_doc(doc["invoice_doctype"], dn[0]).update_qty(update_modified=False)
-
- frappe.get_doc(doc["doctype"], order.name).set_status(update=True, update_modified=False)
\ No newline at end of file
diff --git a/erpnext/patches/v6_3/__init__.py b/erpnext/patches/v6_3/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v6_3/convert_applicable_territory.py b/erpnext/patches/v6_3/convert_applicable_territory.py
deleted file mode 100644
index 231a483ea22b..000000000000
--- a/erpnext/patches/v6_3/convert_applicable_territory.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("stock", "doctype", "price_list_country")
- frappe.reload_doc("accounts", "doctype", "shipping_rule_country")
- frappe.reload_doctype("Price List")
- frappe.reload_doctype("Shipping Rule")
- frappe.reload_doctype("shopping_cart", "doctype", "shopping_cart_settings")
-
- # for price list
- countries = frappe.db.sql_list("select name from tabCountry")
-
- for doctype in ("Price List", "Shipping Rule"):
- for at in frappe.db.sql("""select name, parent, territory from `tabApplicable Territory` where
- parenttype = %s """, doctype, as_dict=True):
- if at.territory in countries:
- parent = frappe.get_doc(doctype, at.parent)
- if not parent.countries:
- parent.append("countries", {"country": at.territory})
- parent.save()
-
-
- frappe.delete_doc("DocType", "Applicable Territory")
diff --git a/erpnext/patches/v6_4/__init__.py b/erpnext/patches/v6_4/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v6_4/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_4/email_digest_update.py b/erpnext/patches/v6_4/email_digest_update.py
deleted file mode 100644
index 8342b7fce61d..000000000000
--- a/erpnext/patches/v6_4/email_digest_update.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Email Digest")
- frappe.db.sql("""update `tabEmail Digest` set expense_year_to_date =
- income_year_to_date""")
-
- if frappe.db.exists("Email Digest", "Scheduler Errors"):
- frappe.delete_doc("Email Digest", "Scheduler Errors")
diff --git a/erpnext/patches/v6_4/fix_duplicate_bins.py b/erpnext/patches/v6_4/fix_duplicate_bins.py
deleted file mode 100644
index 77d05273e8e1..000000000000
--- a/erpnext/patches/v6_4/fix_duplicate_bins.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.stock_balance import repost_stock
-
-def execute():
- bins = frappe.db.sql("""select item_code, warehouse, count(*) from `tabBin`
- group by item_code, warehouse having count(*) > 1""", as_dict=True)
-
- for d in bins:
- try:
- frappe.db.sql("delete from tabBin where item_code=%s and warehouse=%s", (d.item_code, d.warehouse))
-
- repost_stock(d.item_code, d.warehouse, allow_zero_rate=True, only_actual=False, only_bin=True)
-
- frappe.db.commit()
- except:
- frappe.db.rollback()
\ No newline at end of file
diff --git a/erpnext/patches/v6_4/fix_expense_included_in_valuation.py b/erpnext/patches/v6_4/fix_expense_included_in_valuation.py
deleted file mode 100644
index 7ed15ab010e7..000000000000
--- a/erpnext/patches/v6_4/fix_expense_included_in_valuation.py
+++ /dev/null
@@ -1,74 +0,0 @@
-# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-from frappe.utils import cstr
-
-def execute():
- for company in frappe.db.sql("select name, expenses_included_in_valuation from tabCompany", as_dict=1):
- frozen_date = get_frozen_date(company.name, company.expenses_included_in_valuation)
-
- # Purchase Invoices after frozen date
- # which are not against Receipt, but valuation related tax is there
- pi_list = frappe.db.sql("""
- select distinct pi.name
- from `tabPurchase Invoice` pi, `tabPurchase Invoice Item` pi_item
- where
- pi.name = pi_item.parent
- and pi.company = %s
- and pi.posting_date > %s
- and pi.docstatus = 1
- and pi.is_opening = 'No'
- and (pi_item.item_tax_amount is not null and pi_item.item_tax_amount > 0)
- and (pi_item.purchase_receipt is null or pi_item.purchase_receipt = '')
- and (pi_item.item_code is not null and pi_item.item_code != '')
- and exists(select name from `tabItem` where name=pi_item.item_code and is_stock_item=1)
- """, (company.name, frozen_date), as_dict=1)
-
- for pi in pi_list:
- # Check whether gle exists for Expenses Included in Valuation account against the PI
- gle_for_expenses_included_in_valuation = frappe.db.sql("""select name from `tabGL Entry`
- where voucher_type='Purchase Invoice' and voucher_no=%s and account=%s""",
- (pi.name, company.expenses_included_in_valuation))
-
- if gle_for_expenses_included_in_valuation:
- print(pi.name)
-
- frappe.db.sql("""delete from `tabGL Entry`
- where voucher_type='Purchase Invoice' and voucher_no=%s""", pi.name)
-
- purchase_invoice = frappe.get_doc("Purchase Invoice", pi.name)
-
- # some old entries have missing expense accounts
- if purchase_invoice.against_expense_account:
- expense_account = purchase_invoice.against_expense_account.split(",")
- if len(expense_account) == 1:
- expense_account = expense_account[0]
- for item in purchase_invoice.items:
- if not item.expense_account:
- item.db_set("expense_account", expense_account, update_modified=False)
-
- purchase_invoice.make_gl_entries()
-
-def get_frozen_date(company, account):
- # Accounting frozen upto
- accounts_frozen_upto = frappe.db.get_single_value("Accounts Settings", "acc_frozen_upto")
-
- # Last adjustment entry to correct Expenses Included in Valuation account balance
- last_adjustment_entry = frappe.db.sql("""select posting_date from `tabGL Entry`
- where account=%s and company=%s and voucher_type = 'Journal Entry'
- order by posting_date desc limit 1""", (account, company))
-
- last_adjustment_date = cstr(last_adjustment_entry[0][0]) if last_adjustment_entry else None
-
- # Last period closing voucher
- last_closing_entry = frappe.db.sql("""select posting_date from `tabGL Entry`
- where company=%s and voucher_type = 'Period Closing Voucher'
- order by posting_date desc limit 1""", company)
-
- last_closing_date = cstr(last_closing_entry[0][0]) if last_closing_entry else None
-
- frozen_date = max([accounts_frozen_upto, last_adjustment_date, last_closing_date])
-
- return frozen_date or '1900-01-01'
diff --git a/erpnext/patches/v6_4/fix_journal_entries_due_to_reconciliation.py b/erpnext/patches/v6_4/fix_journal_entries_due_to_reconciliation.py
deleted file mode 100644
index b53412d7ebb5..000000000000
--- a/erpnext/patches/v6_4/fix_journal_entries_due_to_reconciliation.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Sales Invoice Advance")
- frappe.reload_doctype("Purchase Invoice Advance")
-
- je_rows = frappe.db.sql("""
- select name, parent, reference_type, reference_name, debit, credit
- from `tabJournal Entry Account`
- where docstatus=1 and date(modified) >= '2015-09-17'
- and ((ifnull(debit_in_account_currency, 0)*exchange_rate != ifnull(debit, 0))
- or (ifnull(credit_in_account_currency, 0)*exchange_rate != ifnull(credit, 0)))
- order by parent
- """, as_dict=True)
-
- journal_entries = []
-
- for d in je_rows:
- if d.parent not in journal_entries:
- journal_entries.append(d.parent)
-
- is_advance_entry=None
- if d.reference_type in ("Sales Invoice", "Purchase Invoice") and d.reference_name:
- is_advance_entry = frappe.db.sql("""select name from `tab{0}`
- where reference_name=%s and reference_row=%s
- and ifnull(allocated_amount, 0) > 0 and docstatus=1"""
- .format(d.reference_type + " Advance"), (d.parent, d.name))
-
- if is_advance_entry or not (d.debit or d.credit):
- frappe.db.sql("""
- update `tabJournal Entry Account`
- set debit=debit_in_account_currency*exchange_rate,
- credit=credit_in_account_currency*exchange_rate
- where name=%s""", d.name)
- else:
- frappe.db.sql("""
- update `tabJournal Entry Account`
- set debit_in_account_currency=debit/exchange_rate,
- credit_in_account_currency=credit/exchange_rate
- where name=%s""", d.name)
-
- for d in journal_entries:
- print(d)
- # delete existing gle
- frappe.db.sql("delete from `tabGL Entry` where voucher_type='Journal Entry' and voucher_no=%s", d)
-
- # repost gl entries
- je = frappe.get_doc("Journal Entry", d)
- je.make_gl_entries()
\ No newline at end of file
diff --git a/erpnext/patches/v6_4/fix_modified_in_sales_order_and_purchase_order.py b/erpnext/patches/v6_4/fix_modified_in_sales_order_and_purchase_order.py
deleted file mode 100644
index f27489e7b012..000000000000
--- a/erpnext/patches/v6_4/fix_modified_in_sales_order_and_purchase_order.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for doctype in ("Sales Order", "Purchase Order"):
- data = frappe.db.sql("""select parent, modified_by, modified
- from `tab{doctype} Item` where docstatus=1 group by parent""".format(doctype=doctype), as_dict=True)
- for item in data:
- frappe.db.sql("""update `tab{doctype}` set modified_by=%(modified_by)s, modified=%(modified)s
- where name=%(parent)s""".format(doctype=doctype), item)
diff --git a/erpnext/patches/v6_4/fix_sales_order_maintenance_status.py b/erpnext/patches/v6_4/fix_sales_order_maintenance_status.py
deleted file mode 100644
index 50aa9e542e4a..000000000000
--- a/erpnext/patches/v6_4/fix_sales_order_maintenance_status.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for doc in frappe.get_all("Sales Order", filters={"docstatus": 1,
- "order_type": "Maintenance"}):
- doc = frappe.get_doc("Sales Order", doc.name)
- doc.set_status(update=True)
diff --git a/erpnext/patches/v6_4/fix_status_in_sales_and_purchase_order.py b/erpnext/patches/v6_4/fix_status_in_sales_and_purchase_order.py
deleted file mode 100644
index 746a99004af4..000000000000
--- a/erpnext/patches/v6_4/fix_status_in_sales_and_purchase_order.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for doctype in ("Sales Order", "Purchase Order"):
- for doc in frappe.get_all(doctype, filters={"docstatus": 1}):
- doc = frappe.get_doc(doctype, doc.name)
- doc.set_status(update=True)
diff --git a/erpnext/patches/v6_4/make_image_thumbnail.py b/erpnext/patches/v6_4/make_image_thumbnail.py
deleted file mode 100644
index 2c86e8af8649..000000000000
--- a/erpnext/patches/v6_4/make_image_thumbnail.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("File")
- frappe.reload_doctype("Item")
- for item in frappe.get_all("Item", fields=("name", "website_image", "thumbnail")):
- if item.website_image and not item.thumbnail:
- item_doc = frappe.get_doc("Item", item.name)
- try:
- item_doc.make_thumbnail()
- if item_doc.thumbnail:
- item_doc.db_set("thumbnail", item_doc.thumbnail, update_modified=False)
- except Exception:
- print("Unable to make thumbnail for {0}".format(item.website_image.encode("utf-8")))
diff --git a/erpnext/patches/v6_4/repost_gle_for_journal_entries_where_reference_name_missing.py b/erpnext/patches/v6_4/repost_gle_for_journal_entries_where_reference_name_missing.py
deleted file mode 100644
index 1319b535588c..000000000000
--- a/erpnext/patches/v6_4/repost_gle_for_journal_entries_where_reference_name_missing.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe
-
-def execute():
- je_list = frappe.db.sql_list("""select distinct parent from `tabJournal Entry Account` je
- where docstatus=1 and ifnull(reference_name, '') !='' and creation > '2015-03-01'
- and not exists(select name from `tabGL Entry`
- where voucher_type='Journal Entry' and voucher_no=je.parent
- and against_voucher_type=je.reference_type
- and against_voucher=je.reference_name)""")
-
- for d in je_list:
- print(d)
-
- # delete existing gle
- frappe.db.sql("delete from `tabGL Entry` where voucher_type='Journal Entry' and voucher_no=%s", d)
-
- # repost gl entries
- je = frappe.get_doc("Journal Entry", d)
- je.make_gl_entries()
\ No newline at end of file
diff --git a/erpnext/patches/v6_4/round_status_updater_percentages.py b/erpnext/patches/v6_4/round_status_updater_percentages.py
deleted file mode 100644
index 900e906b7bd9..000000000000
--- a/erpnext/patches/v6_4/round_status_updater_percentages.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for doctype, fieldname in (
- ("Sales Order", "per_billed"),
- ("Sales Order", "per_delivered"),
- ("Delivery Note", "per_installed"),
- ("Purchase Order", "per_billed"),
- ("Purchase Order", "per_received"),
- ("Material Request", "per_ordered"),
- ):
- frappe.db.sql("""update `tab{doctype}` set `{fieldname}`=round(`{fieldname}`, 2)""".format(
- doctype=doctype, fieldname=fieldname))
diff --git a/erpnext/patches/v6_4/set_user_in_contact.py b/erpnext/patches/v6_4/set_user_in_contact.py
deleted file mode 100644
index 7e8a6eecd571..000000000000
--- a/erpnext/patches/v6_4/set_user_in_contact.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Contact")
- frappe.db.sql("""update tabContact, tabUser set tabContact.user = tabUser.name
- where tabContact.email_id = tabUser.email""")
diff --git a/erpnext/patches/v6_5/__init__.py b/erpnext/patches/v6_5/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v6_5/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_5/show_in_website_for_template_item.py b/erpnext/patches/v6_5/show_in_website_for_template_item.py
deleted file mode 100644
index af6e8304d67d..000000000000
--- a/erpnext/patches/v6_5/show_in_website_for_template_item.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-import frappe.website.render
-
-def execute():
- for item_code in frappe.db.sql_list("""select distinct variant_of from `tabItem`
- where variant_of is not null and variant_of !='' and show_in_website=1"""):
-
- item = frappe.get_doc("Item", item_code)
- item.db_set("show_in_website", 1, update_modified=False)
-
- item.make_route()
- item.db_set("route", item.route, update_modified=False)
-
- frappe.website.render.clear_cache()
diff --git a/erpnext/patches/v6_6/__init__.py b/erpnext/patches/v6_6/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v6_6/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_6/fix_website_image.py b/erpnext/patches/v6_6/fix_website_image.py
deleted file mode 100644
index cc3e2d852c4b..000000000000
--- a/erpnext/patches/v6_6/fix_website_image.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from __future__ import print_function, unicode_literals
-import frappe
-from frappe.utils import encode
-
-def execute():
- """Fix the File records created via item.py even if the website_image file didn't exist"""
- for item in frappe.db.sql_list("""select name from `tabItem`
- where website_image is not null and website_image != ''
- and website_image like '/files/%'
- and exists (
- select name from `tabFile`
- where attached_to_doctype='Item'
- and attached_to_name=`tabItem`.name
- and file_url=`tabItem`.website_image
- and (file_name is null or file_name = '')
- )"""):
-
- item = frappe.get_doc("Item", item)
- file = frappe.get_doc("File", {
- "attached_to_doctype": "Item",
- "attached_to_name": item.name,
- "file_url": item.website_image
- })
-
- try:
- file.validate_file()
- except IOError:
- print(encode(item.website_image), "does not exist")
- file.delete()
- item.db_set("website_image", None, update_modified=False)
-
-
diff --git a/erpnext/patches/v6_6/remove_fiscal_year_from_leave_allocation.py b/erpnext/patches/v6_6/remove_fiscal_year_from_leave_allocation.py
deleted file mode 100644
index 11c582fc493a..000000000000
--- a/erpnext/patches/v6_6/remove_fiscal_year_from_leave_allocation.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Leave Allocation")
- if frappe.db.has_column("Leave Allocation", "fiscal_year"):
- for leave_allocation in frappe.db.sql("select name, fiscal_year from `tabLeave Allocation`", as_dict=True):
- dates = frappe.db.get_value("Fiscal Year", leave_allocation["fiscal_year"],
- ["year_start_date", "year_end_date"])
-
- if dates:
- year_start_date, year_end_date = dates
-
- frappe.db.sql("""update `tabLeave Allocation`
- set from_date=%s, to_date=%s where name=%s""",
- (year_start_date, year_end_date, leave_allocation["name"]))
-
diff --git a/erpnext/patches/v6_8/__init__.py b/erpnext/patches/v6_8/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v6_8/make_webform_standard.py b/erpnext/patches/v6_8/make_webform_standard.py
deleted file mode 100644
index 2cc16a286f8d..000000000000
--- a/erpnext/patches/v6_8/make_webform_standard.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- pass
-
- # done via fixtures
-
- # frappe.reload_doctype("Web Form")
- # frappe.delete_doc("Web Form", "Issues")
- # frappe.delete_doc("Web Form", "Addresses")
-
- # from erpnext.setup.install import add_web_forms
- # add_web_forms()
diff --git a/erpnext/patches/v6_8/move_drop_ship_to_po_items.py b/erpnext/patches/v6_8/move_drop_ship_to_po_items.py
deleted file mode 100644
index 7184deecccc3..000000000000
--- a/erpnext/patches/v6_8/move_drop_ship_to_po_items.py
+++ /dev/null
@@ -1,43 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Purchase Order")
- frappe.reload_doctype("Purchase Order Item")
-
- if not frappe.db.has_column("Purchase Order", "delivered_by_supplier"):
- return
-
- for po in frappe.get_all("Purchase Order", filters={"delivered_by_supplier": 1}, fields=["name"]):
- purchase_order = frappe.get_doc("Purchase Order", po)
-
- for item in purchase_order.items:
- if item.prevdoc_doctype == "Sales Order":
- delivered_by_supplier = frappe.get_value("Sales Order Item", item.prevdoc_detail_docname,
- "delivered_by_supplier")
-
- if delivered_by_supplier:
- frappe.db.sql("""update `tabPurchase Order Item`
- set delivered_by_supplier=1, billed_amt=amount, received_qty=qty
- where name=%s """, item.name)
-
- update_per_received(purchase_order)
- update_per_billed(purchase_order)
-
-def update_per_received(po):
- frappe.db.sql(""" update `tabPurchase Order`
- set per_received = round((select sum(if(qty > ifnull(received_qty, 0),
- ifnull(received_qty, 0), qty)) / sum(qty) *100
- from `tabPurchase Order Item`
- where parent = %(name)s), 2)
- where name = %(name)s """, {"name": po.name})
-
-def update_per_billed(po):
- frappe.db.sql(""" update `tabPurchase Order`
- set per_billed = round((select sum( if(amount > ifnull(billed_amt, 0),
- ifnull(billed_amt, 0), amount)) / sum(amount) *100
- from `tabPurchase Order Item`
- where parent = %(name)s), 2)
- where name = %(name)s """, {"name": po.name})
-
-
diff --git a/erpnext/patches/v7_0/__init__.py b/erpnext/patches/v7_0/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v7_0/calculate_total_costing_amount.py b/erpnext/patches/v7_0/calculate_total_costing_amount.py
deleted file mode 100644
index 8ed60a295503..000000000000
--- a/erpnext/patches/v7_0/calculate_total_costing_amount.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import flt
-
-def execute():
- frappe.reload_doc('projects', 'doctype', 'timesheet')
-
- for data in frappe.get_all('Timesheet', fields=["name, total_costing_amount"],
- filters = [["docstatus", "<", "2"]]):
- if flt(data.total_costing_amount) == 0.0:
- ts = frappe.get_doc('Timesheet', data.name)
- ts.update_cost()
- ts.calculate_total_amounts()
- ts.flags.ignore_validate = True
- ts.flags.ignore_mandatory = True
- ts.flags.ignore_validate_update_after_submit = True
- ts.flags.ignore_links = True
- ts.save()
diff --git a/erpnext/patches/v7_0/convert_timelog_to_timesheet.py b/erpnext/patches/v7_0/convert_timelog_to_timesheet.py
deleted file mode 100644
index 8c60b5b71ec9..000000000000
--- a/erpnext/patches/v7_0/convert_timelog_to_timesheet.py
+++ /dev/null
@@ -1,69 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('projects', 'doctype', 'task')
- frappe.reload_doc('projects', 'doctype', 'timesheet')
- if not frappe.db.table_exists("Time Log"):
- return
-
- from erpnext.manufacturing.doctype.work_order.work_order \
- import make_timesheet, add_timesheet_detail
-
- for data in frappe.db.sql("select * from `tabTime Log`", as_dict=1):
- if data.task:
- company = frappe.db.get_value("Task", data.task, "company")
- elif data.work_order:
- company = frappe.db.get_value("Work Order", data.work_order, "company")
- else:
- company = frappe.db.get_single_value('Global Defaults', 'default_company')
-
- time_sheet = make_timesheet(data.work_order, company)
- args = get_timelog_data(data)
- add_timesheet_detail(time_sheet, args)
- if data.docstatus == 2:
- time_sheet.docstatus = 0
- else:
- time_sheet.docstatus = data.docstatus
- time_sheet.employee = data.employee
- time_sheet.note = data.note
- time_sheet.company = company
-
- time_sheet.set_status()
- time_sheet.set_dates()
- time_sheet.update_cost()
- time_sheet.calculate_total_amounts()
- time_sheet.flags.ignore_validate = True
- time_sheet.flags.ignore_links = True
- time_sheet.save(ignore_permissions=True)
-
- # To ignore validate_mandatory_fields function
- if data.docstatus == 1:
- time_sheet.db_set("docstatus", 1)
- for d in time_sheet.get("time_logs"):
- d.db_set("docstatus", 1)
- time_sheet.update_work_order(time_sheet.name)
- time_sheet.update_task_and_project()
- if data.docstatus == 2:
- time_sheet.db_set("docstatus", 2)
- for d in time_sheet.get("time_logs"):
- d.db_set("docstatus", 2)
-
-def get_timelog_data(data):
- return {
- 'is_billable': data.billable,
- 'from_time': data.from_time,
- 'hours': data.hours,
- 'to_time': data.to_time,
- 'project': data.project,
- 'task': data.task,
- 'activity_type': data.activity_type,
- 'operation': data.operation,
- 'operation_id': data.operation_id,
- 'workstation': data.workstation,
- 'completed_qty': data.completed_qty,
- 'billing_rate': data.billing_rate,
- 'billing_amount': data.billing_amount,
- 'costing_rate': data.costing_rate,
- 'costing_amount': data.costing_amount
- }
diff --git a/erpnext/patches/v7_0/convert_timelogbatch_to_timesheet.py b/erpnext/patches/v7_0/convert_timelogbatch_to_timesheet.py
deleted file mode 100644
index e78f163e0773..000000000000
--- a/erpnext/patches/v7_0/convert_timelogbatch_to_timesheet.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cint
-
-def execute():
- if not frappe.db.exists("DocType", "Time Log Batch"):
- return
-
- from erpnext.manufacturing.doctype.work_order.work_order import add_timesheet_detail
-
- for tlb in frappe.get_all('Time Log Batch', fields=["*"],
- filters = [["docstatus", "<", "2"]]):
- time_sheet = frappe.new_doc('Timesheet')
- time_sheet.employee= ""
- time_sheet.company = frappe.db.get_single_value('Global Defaults', 'default_company')
- time_sheet.sales_invoice = tlb.sales_invoice
-
- for data in frappe.get_all('Time Log Batch Detail', fields=["*"],
- filters = {'parent': tlb.name}):
- args = get_timesheet_data(data)
- add_timesheet_detail(time_sheet, args)
-
- time_sheet.docstatus = tlb.docstatus
- time_sheet.flags.ignore_links = True
- time_sheet.save(ignore_permissions=True)
-
-def get_timesheet_data(data):
- from erpnext.patches.v7_0.convert_timelog_to_timesheet import get_timelog_data
-
- time_log = frappe.get_all('Time Log', fields=["*"], filters = {'name': data.time_log})
- if time_log:
- return get_timelog_data(time_log[0])
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/create_budget_record.py b/erpnext/patches/v7_0/create_budget_record.py
deleted file mode 100644
index fd8bec9f3277..000000000000
--- a/erpnext/patches/v7_0/create_budget_record.py
+++ /dev/null
@@ -1,57 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-from erpnext.accounts.doctype.budget.budget import DuplicateBudgetError
-
-def execute():
- frappe.reload_doc("accounts", "doctype", "budget")
- frappe.reload_doc("accounts", "doctype", "budget_account")
-
- existing_budgets = frappe.db.sql("""
- select
- cc.name, cc.company, cc.distribution_id,
- budget.account, budget.budget_allocated, budget.fiscal_year
- from
- `tabCost Center` cc, `tabBudget Detail` budget
- where
- cc.name=budget.parent
- """, as_dict=1)
-
- actions = {}
- for d in frappe.db.sql("select name, yearly_bgt_flag, monthly_bgt_flag from tabCompany", as_dict=1):
- actions.setdefault(d.name, d)
-
- budget_records = []
- for d in existing_budgets:
- budget = frappe.db.get_value("Budget",
- {"cost_center": d.name, "fiscal_year": d.fiscal_year, "company": d.company})
-
- if not budget:
- budget = frappe.new_doc("Budget")
- budget.cost_center = d.name
- budget.fiscal_year = d.fiscal_year
- budget.monthly_distribution = d.distribution_id
- budget.company = d.company
- if actions[d.company]["yearly_bgt_flag"]:
- budget.action_if_annual_budget_exceeded = actions[d.company]["yearly_bgt_flag"]
- if actions[d.company]["monthly_bgt_flag"]:
- budget.action_if_accumulated_monthly_budget_exceeded = actions[d.company]["monthly_bgt_flag"]
- else:
- budget = frappe.get_doc("Budget", budget)
-
- budget.append("accounts", {
- "account": d.account,
- "budget_amount": d.budget_allocated
- })
-
- try:
- budget.insert()
- budget_records.append(budget)
- except DuplicateBudgetError:
- pass
-
- for budget in budget_records:
- budget.submit()
-
- if frappe.db.get_value("DocType", "Budget Detail"):
- frappe.delete_doc("DocType", "Budget Detail")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/create_warehouse_nestedset.py b/erpnext/patches/v7_0/create_warehouse_nestedset.py
deleted file mode 100644
index 1c9fc32142ce..000000000000
--- a/erpnext/patches/v7_0/create_warehouse_nestedset.py
+++ /dev/null
@@ -1,128 +0,0 @@
-
-from __future__ import unicode_literals
-import frappe, erpnext
-from frappe import _
-from frappe.utils import cint
-from frappe.utils.nestedset import rebuild_tree
-
-def execute():
- """
- Patch Reference:
- 1. check whether warehouse is associated to company or not
- 2. if warehouse is associated with company
- a. create warehouse group for company
- b. set warehouse group as parent to other warehouses and set is_group as 0
- 3. if warehouses is not associated with company
- a. get distinct companies from stock ledger entries
- b. if sle have only company,
- i. set default company to all warehouse
- ii. repeat 2.a and 2.b
- c. if have multiple companies,
- i. create group warehouse without company
- ii. repeat 2.b
- """
-
- frappe.reload_doc("stock", "doctype", "warehouse")
-
- if check_is_warehouse_associated_with_company():
- for company in frappe.get_all("Company", fields=["name", "abbr"]):
- make_warehouse_nestedset(company)
- else:
- sle_against_companies = frappe.db.sql_list("""select distinct company from `tabStock Ledger Entry`""")
-
- if len(sle_against_companies) == 1:
- company = frappe.get_cached_value('Company', sle_against_companies[0],
- fieldname=["name", "abbr"], as_dict=1)
- set_company_to_warehouse(company.name)
- make_warehouse_nestedset(company)
-
- elif len(sle_against_companies) > 1:
- make_warehouse_nestedset()
-
-def check_is_warehouse_associated_with_company():
- warehouse_associcated_with_company = False
-
- for warehouse in frappe.get_all("Warehouse", fields=["name", "company"]):
- if warehouse.company:
- warehouse_associcated_with_company = True
-
- return warehouse_associcated_with_company
-
-def make_warehouse_nestedset(company=None):
- validate_parent_account_for_warehouse(company)
- stock_account_group = get_stock_account_group(company.name)
- enable_perpetual_inventory = cint(erpnext.is_perpetual_inventory_enabled(company.name)) or 0
- if not stock_account_group and enable_perpetual_inventory:
- return
-
- if company:
- warehouse_group = "{0} - {1}".format(_("All Warehouses"), company.abbr)
- ignore_mandatory = False
- else:
- warehouse_group = _("All Warehouses")
- ignore_mandatory = True
-
- if not frappe.db.get_value("Warehouse", warehouse_group):
- create_default_warehouse_group(company, stock_account_group, ignore_mandatory)
-
- set_parent_to_warehouse(warehouse_group, company)
- if enable_perpetual_inventory:
- set_parent_to_warehouse_account(company)
-
-def validate_parent_account_for_warehouse(company=None):
- if not company:
- return
-
- if cint(erpnext.is_perpetual_inventory_enabled(company.name)):
- parent_account = frappe.db.sql("""select name from tabAccount
- where account_type='Stock' and company=%s and is_group=1
- and (warehouse is null or warehouse = '')""", company.name)
-
- if not parent_account:
- current_parent_accounts_for_warehouse = frappe.db.sql("""select parent_account from tabAccount
- where account_type='Warehouse' and (warehouse is not null or warehouse != '') """)
-
- if current_parent_accounts_for_warehouse:
- frappe.db.set_value("Account", current_parent_accounts_for_warehouse[0][0], "account_type", "Stock")
-
-def create_default_warehouse_group(company=None, stock_account_group=None, ignore_mandatory=False):
- wh = frappe.get_doc({
- "doctype": "Warehouse",
- "warehouse_name": _("All Warehouses"),
- "is_group": 1,
- "company": company.name if company else "",
- "parent_warehouse": ""
- })
-
- if ignore_mandatory:
- wh.flags.ignore_mandatory = ignore_mandatory
-
- wh.insert(ignore_permissions=True)
-
-def set_parent_to_warehouse(warehouse_group, company=None):
- frappe.db.sql(""" update tabWarehouse set parent_warehouse = %s, is_group = 0
- where (is_group = 0 or is_group is null or is_group = '') and ifnull(company, '') = %s
- """,(warehouse_group, company.name if company else ""))
-
- rebuild_tree("Warehouse", "parent_warehouse")
-
-def set_parent_to_warehouse_account(company):
- frappe.db.sql(""" update tabAccount set parent_account = %s
- where is_group = 0 and account_type = "Warehouse"
- and (warehouse is not null or warehouse != '') and company = %s
- """,("{0} - {1}".format(_("All Warehouses"), company.abbr), company.name))
-
- rebuild_tree("Account", "parent_account")
-
-def set_company_to_warehouse(company):
- frappe.db.sql("update tabWahouse set company=%s", company)
-
-def get_stock_account_group(company):
- stock_account_group = frappe.db.get_all('Account', filters = {'company': company, 'is_group': 1,
- 'account_type': 'Stock', 'root_type': 'Asset'}, limit=1)
-
- if not stock_account_group:
- stock_account_group = frappe.db.get_all('Account', filters = {'company': company, 'is_group': 1,
- 'parent_account': '', 'root_type': 'Asset'}, limit=1)
-
- return stock_account_group[0].name if stock_account_group else None
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/fix_duplicate_icons.py b/erpnext/patches/v7_0/fix_duplicate_icons.py
deleted file mode 100644
index 9f442029b5ab..000000000000
--- a/erpnext/patches/v7_0/fix_duplicate_icons.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-from frappe.desk.doctype.desktop_icon.desktop_icon import (sync_desktop_icons,
- get_desktop_icons, set_hidden)
-from erpnext.patches.v7_0.migrate_schools_to_erpnext import reload_doctypes_for_schools_icons
-
-def execute():
- '''hide new style icons if old ones are set'''
- frappe.reload_doc('desk', 'doctype', 'desktop_icon')
-
- reload_doctypes_for_schools_icons()
-
- sync_desktop_icons()
-
- for user in frappe.get_all('User', filters={'user_type': 'System User'}):
- desktop_icons = get_desktop_icons(user.name)
- icons_dict = {}
- for d in desktop_icons:
- if not d.hidden:
- icons_dict[d.module_name] = d
-
- for key in (('Selling', 'Customer'), ('Stock', 'Item'), ('Buying', 'Supplier'),
- ('HR', 'Employee'), ('CRM', 'Lead'), ('Support', 'Issue'), ('Projects', 'Project')):
- if key[0] in icons_dict and key[1] in icons_dict:
- set_hidden(key[1], user.name, 1)
-
diff --git a/erpnext/patches/v7_0/fix_nonwarehouse_ledger_gl_entries_for_transactions.py b/erpnext/patches/v7_0/fix_nonwarehouse_ledger_gl_entries_for_transactions.py
deleted file mode 100644
index 2bc09714d8b3..000000000000
--- a/erpnext/patches/v7_0/fix_nonwarehouse_ledger_gl_entries_for_transactions.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import print_function, unicode_literals
-import frappe, erpnext
-
-def execute():
- frappe.reload_doctype("Account")
-
- warehouses = frappe.db.sql("""select name, company from tabAccount
- where account_type = 'Stock' and is_group = 0
- and (warehouse is null or warehouse = '')""", as_dict=1)
- warehouses = [d.name for d in warehouses if erpnext.is_perpetual_inventory_enabled(d.company)]
-
- if len(warehouses) > 0:
- warehouses = set_warehouse_for_stock_account(warehouses)
- if not warehouses:
- return
-
- stock_vouchers = frappe.db.sql("""select distinct sle.voucher_type, sle.voucher_no
- from `tabStock Ledger Entry` sle
- where sle.warehouse in (%s) and creation > '2016-05-01'
- and not exists(select name from `tabGL Entry`
- where account=sle.warehouse and voucher_type=sle.voucher_type and voucher_no=sle.voucher_no)
- order by sle.posting_date""" %
- ', '.join(['%s']*len(warehouses)), tuple(warehouses))
-
- rejected = []
- for voucher_type, voucher_no in stock_vouchers:
- try:
- frappe.db.sql("""delete from `tabGL Entry`
- where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no))
-
- voucher = frappe.get_doc(voucher_type, voucher_no)
- voucher.make_gl_entries()
- frappe.db.commit()
- except Exception as e:
- print(frappe.get_traceback())
- rejected.append([voucher_type, voucher_no])
- frappe.db.rollback()
-
- print(rejected)
-
-def set_warehouse_for_stock_account(warehouse_account):
- for account in warehouse_account:
- if frappe.db.exists('Warehouse', account):
- frappe.db.set_value("Account", account, "warehouse", account)
- else:
- warehouse_account.remove(account)
-
- return warehouse_account
diff --git a/erpnext/patches/v7_0/make_guardian.py b/erpnext/patches/v7_0/make_guardian.py
deleted file mode 100644
index 519969b38d14..000000000000
--- a/erpnext/patches/v7_0/make_guardian.py
+++ /dev/null
@@ -1,37 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if frappe.db.exists("DocType", "Student"):
- student_table_cols = frappe.db.get_table_columns("Student")
- if "father_name" in student_table_cols:
-
- # 'Schools' module changed to the 'Education'
- # frappe.reload_doc("schools", "doctype", "student")
- # frappe.reload_doc("schools", "doctype", "guardian")
- # frappe.reload_doc("schools", "doctype", "guardian_interest")
-
- frappe.reload_doc("education", "doctype", "student")
- frappe.reload_doc("education", "doctype", "guardian")
- frappe.reload_doc("education", "doctype", "guardian_interest")
- frappe.reload_doc("hr", "doctype", "interest")
-
- fields = ["name", "father_name", "mother_name"]
-
- if "father_email_id" in student_table_cols:
- fields += ["father_email_id", "mother_email_id"]
-
- students = frappe.get_all("Student", fields)
- for stud in students:
- if stud.father_name:
- make_guardian(stud.father_name, stud.name, stud.father_email_id)
- if stud.mother_name:
- make_guardian(stud.mother_name, stud.name, stud.mother_email_id)
-
-def make_guardian(name, student, email=None):
- frappe.get_doc({
- 'doctype': 'Guardian',
- 'guardian_name': name,
- 'email': email,
- 'student': student
- }).insert()
diff --git a/erpnext/patches/v7_0/make_is_group_fieldtype_as_check.py b/erpnext/patches/v7_0/make_is_group_fieldtype_as_check.py
deleted file mode 100644
index ba82e869fa13..000000000000
--- a/erpnext/patches/v7_0/make_is_group_fieldtype_as_check.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for doctype in ["Sales Person", "Customer Group", "Item Group", "Territory"]:
-
- # convert to 1 or 0
- frappe.db.sql("update `tab{doctype}` set is_group = if(is_group='Yes',1,0) "
- .format(doctype=doctype))
-
- frappe.db.commit()
-
- # alter fields to int
-
- frappe.db.sql("alter table `tab{doctype}` change is_group is_group int(1) default '0'"
- .format(doctype=doctype))
-
- frappe.reload_doctype(doctype)
diff --git a/erpnext/patches/v7_0/merge_account_type_stock_and_warehouse_to_stock.py b/erpnext/patches/v7_0/merge_account_type_stock_and_warehouse_to_stock.py
deleted file mode 100644
index 02808a742f33..000000000000
--- a/erpnext/patches/v7_0/merge_account_type_stock_and_warehouse_to_stock.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("accounts", "doctype", "account")
-
- frappe.db.sql(""" update tabAccount set account_type = "Stock"
- where account_type = "Warehouse" """)
-
- frappe.db.commit()
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py b/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py
deleted file mode 100644
index e0e3f7075a1b..000000000000
--- a/erpnext/patches/v7_0/migrate_mode_of_payments_v6_to_v7.py
+++ /dev/null
@@ -1,38 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('accounts', 'doctype', 'sales_invoice_timesheet')
- frappe.reload_doc('accounts', 'doctype', 'sales_invoice_payment')
- frappe.reload_doc('accounts', 'doctype', 'mode_of_payment')
-
- count = 0
- for data in frappe.db.sql("""select name, mode_of_payment, cash_bank_account, paid_amount, company
- from `tabSales Invoice` si
- where si.is_pos = 1 and si.docstatus < 2
- and si.cash_bank_account is not null and si.cash_bank_account != ''
- and not exists(select name from `tabSales Invoice Payment` where parent=si.name)""", as_dict=1):
-
- if not data.mode_of_payment and not frappe.db.exists("Mode of Payment", "Cash"):
- mop = frappe.new_doc("Mode of Payment")
- mop.mode_of_payment = "Cash"
- mop.type = "Cash"
- mop.save()
-
- si_doc = frappe.get_doc('Sales Invoice', data.name)
- row = si_doc.append('payments', {
- 'mode_of_payment': data.mode_of_payment or 'Cash',
- 'account': data.cash_bank_account,
- 'type': frappe.db.get_value('Mode of Payment', data.mode_of_payment, 'type') or 'Cash',
- 'amount': data.paid_amount
- })
- row.db_update()
-
- si_doc.set_paid_amount()
- si_doc.db_set("paid_amount", si_doc.paid_amount, update_modified = False)
- si_doc.db_set("base_paid_amount", si_doc.base_paid_amount, update_modified = False)
-
- count +=1
-
- if count % 200 == 0:
- frappe.db.commit()
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/migrate_schools_to_erpnext.py b/erpnext/patches/v7_0/migrate_schools_to_erpnext.py
deleted file mode 100644
index b72bc137b613..000000000000
--- a/erpnext/patches/v7_0/migrate_schools_to_erpnext.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from __future__ import unicode_literals
-import frappe, os
-from frappe.installer import remove_from_installed_apps
-
-def execute():
- reload_doctypes_for_schools_icons()
-
- frappe.reload_doc('website', 'doctype', 'portal_settings')
- frappe.reload_doc('website', 'doctype', 'portal_menu_item')
- frappe.reload_doc('buying', 'doctype', 'request_for_quotation')
-
- if 'schools' in frappe.get_installed_apps():
- if not frappe.db.exists('Module Def', 'Schools') and frappe.db.exists('Module Def', 'Academics'):
-
- # 'Schools' module changed to the 'Education'
- # frappe.rename_doc("Module Def", "Academics", "Schools")
-
- frappe.rename_doc("Module Def", "Academics", "Education")
-
- remove_from_installed_apps("schools")
-
-def reload_doctypes_for_schools_icons():
- # 'Schools' module changed to the 'Education'
- # base_path = frappe.get_app_path('erpnext', 'schools', 'doctype')
-
- base_path = frappe.get_app_path('erpnext', 'education', 'doctype')
- for doctype in os.listdir(base_path):
- if os.path.exists(os.path.join(base_path, doctype, doctype + '.json')) \
- and doctype not in ("fee_component", "assessment", "assessment_result"):
- frappe.reload_doc('education', 'doctype', doctype)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/move_timelogbatch_from_salesinvoiceitem_to_salesinvoicetimesheet.py b/erpnext/patches/v7_0/move_timelogbatch_from_salesinvoiceitem_to_salesinvoicetimesheet.py
deleted file mode 100644
index 998c4b674bf5..000000000000
--- a/erpnext/patches/v7_0/move_timelogbatch_from_salesinvoiceitem_to_salesinvoicetimesheet.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('accounts', 'doctype', 'sales_invoice')
- frappe.reload_doc('accounts', 'doctype', 'sales_invoice_payment')
- for time_sheet in frappe.db.sql(""" select sales_invoice, name, total_billable_amount from `tabTimesheet`
- where sales_invoice is not null and docstatus < 2""", as_dict=True):
- if not frappe.db.exists('Sales Invoice', time_sheet.sales_invoice):
- continue
- si_doc = frappe.get_doc('Sales Invoice', time_sheet.sales_invoice)
- ts = si_doc.append('timesheets',{})
- ts.time_sheet = time_sheet.name
- ts.billing_amount = time_sheet.total_billable_amount
- ts.db_update()
- si_doc.calculate_billing_amount_from_timesheet()
- si_doc.db_set("total_billing_amount", si_doc.total_billing_amount, update_modified = False)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/po_status_issue_for_pr_return.py b/erpnext/patches/v7_0/po_status_issue_for_pr_return.py
deleted file mode 100644
index 910814fd227e..000000000000
--- a/erpnext/patches/v7_0/po_status_issue_for_pr_return.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- parent_list = []
- count = 0
-
- frappe.reload_doc('stock', 'doctype', 'purchase_receipt')
- frappe.reload_doc('stock', 'doctype', 'purchase_receipt_item')
-
- for data in frappe.db.sql("""
- select
- `tabPurchase Receipt Item`.purchase_order, `tabPurchase Receipt Item`.name,
- `tabPurchase Receipt Item`.item_code, `tabPurchase Receipt Item`.idx,
- `tabPurchase Receipt Item`.parent
- from
- `tabPurchase Receipt Item`, `tabPurchase Receipt`
- where
- `tabPurchase Receipt Item`.parent = `tabPurchase Receipt`.name and
- `tabPurchase Receipt Item`.purchase_order_item is null and
- `tabPurchase Receipt Item`.purchase_order is not null and
- `tabPurchase Receipt`.is_return = 1""", as_dict=1):
- name = frappe.db.get_value('Purchase Order Item',
- {'item_code': data.item_code, 'parent': data.purchase_order, 'idx': data.idx}, 'name')
-
- if name:
- frappe.db.set_value('Purchase Receipt Item', data.name, 'purchase_order_item', name, update_modified=False)
- parent_list.append(data.parent)
-
- count +=1
- if count % 200 == 0:
- frappe.db.commit()
-
- if len(parent_list) > 0:
- for parent in set(parent_list):
- doc = frappe.get_doc('Purchase Receipt', parent)
- doc.update_qty(update_modified=False)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/re_route.py b/erpnext/patches/v7_0/re_route.py
deleted file mode 100644
index 3cec6f39b2cb..000000000000
--- a/erpnext/patches/v7_0/re_route.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from __future__ import unicode_literals
-from frappe.patches.v7_0.re_route import update_routes
-
-def execute():
- update_routes(['Item', 'Item Group', 'Sales Partner', 'Job Opening'])
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/remove_administrator_role_in_doctypes.py b/erpnext/patches/v7_0/remove_administrator_role_in_doctypes.py
deleted file mode 100644
index 8c87c4e3d3e0..000000000000
--- a/erpnext/patches/v7_0/remove_administrator_role_in_doctypes.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.sql("""delete from tabDocPerm where role="Administrator" and parent in
- ("Payment Gateway", "Payment Gateway Account", "Payment Request", "Academic Term", "Academic Year", "Course",
- "Course Schedule", "Examination", "Fee Category", "Fee Structure", "Fees", "Instructor", "Program", "Program Enrollment Tool",
- "Room", "Scheduling Tool", "Student", "Student Applicant", "Student Attendance", "Student Group", "Student Group Creation Tool")
- """)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/remove_doctypes_and_reports.py b/erpnext/patches/v7_0/remove_doctypes_and_reports.py
deleted file mode 100644
index 2356e2f6ee48..000000000000
--- a/erpnext/patches/v7_0/remove_doctypes_and_reports.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if frappe.db.table_exists("Time Log"):
- frappe.db.sql("""delete from `tabDocType`
- where name in('Time Log Batch', 'Time Log Batch Detail', 'Time Log')""")
-
- frappe.db.sql("""delete from `tabDocField` where parent in ('Time Log', 'Time Log Batch')""")
- frappe.db.sql("""update `tabClient Script` set dt = 'Timesheet' where dt = 'Time Log'""")
-
- for data in frappe.db.sql(""" select label, fieldname from `tabCustom Field` where dt = 'Time Log'""", as_dict=1):
- custom_field = frappe.get_doc({
- 'doctype': 'Custom Field',
- 'label': data.label,
- 'dt': 'Timesheet Detail',
- 'fieldname': data.fieldname,
- 'fieldtype': data.fieldtype or "Data"
- }).insert(ignore_permissions=True)
-
- frappe.db.sql("""delete from `tabCustom Field` where dt = 'Time Log'""")
- frappe.reload_doc('projects', 'doctype', 'timesheet')
- frappe.reload_doc('projects', 'doctype', 'timesheet_detail')
-
- report = "Daily Time Log Summary"
- if frappe.db.exists("Report", report):
- frappe.delete_doc('Report', report)
diff --git a/erpnext/patches/v7_0/remove_features_setup.py b/erpnext/patches/v7_0/remove_features_setup.py
deleted file mode 100644
index 49393cc248d3..000000000000
--- a/erpnext/patches/v7_0/remove_features_setup.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-from erpnext.setup.install import create_compact_item_print_custom_field
-from frappe.utils import cint
-
-def execute():
- frappe.reload_doctype('Stock Settings')
- stock_settings = frappe.get_doc('Stock Settings', 'Stock Settings')
- stock_settings.show_barcode_field = cint(frappe.db.get_value("Features Setup", None, "fs_item_barcode"))
- if not frappe.db.exists("UOM", stock_settings.stock_uom):
- stock_settings.stock_uom = None
- stock_settings.save()
-
- create_compact_item_print_custom_field()
-
- compact_item_print = frappe.db.get_value("Features Setup", None, "compact_item_print")
- frappe.db.set_value("Print Settings", None, "compact_item_print", compact_item_print)
-
- # remove defaults
- frappe.db.sql("""delete from tabDefaultValue where defkey in ('fs_item_serial_nos',
- 'fs_item_batch_nos', 'fs_brands', 'fs_item_barcode',
- 'fs_item_advanced', 'fs_packing_details', 'fs_item_group_in_details',
- 'fs_exports', 'fs_imports', 'fs_discounts', 'fs_purchase_discounts',
- 'fs_after_sales_installations', 'fs_projects', 'fs_sales_extras',
- 'fs_recurring_invoice', 'fs_pos', 'fs_manufacturing', 'fs_quality',
- 'fs_page_break', 'fs_more_info', 'fs_pos_view', 'compact_item_print')""")
-
- frappe.delete_doc('DocType', 'Features Setup')
diff --git a/erpnext/patches/v7_0/remove_old_earning_deduction_doctypes.py b/erpnext/patches/v7_0/remove_old_earning_deduction_doctypes.py
deleted file mode 100644
index 05a2c49461ce..000000000000
--- a/erpnext/patches/v7_0/remove_old_earning_deduction_doctypes.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if frappe.db.exists("DocType", "Salary Component"):
- for dt in ("Salary Structure Earning", "Salary Structure Deduction", "Salary Slip Earning",
- "Salary Slip Deduction", "Earning Type", "Deduction Type"):
- frappe.delete_doc("DocType", dt)
-
-
- for d in frappe.db.sql("""select name from `tabCustom Field`
- where dt in ('Salary Detail', 'Salary Component')"""):
- frappe.get_doc("Custom Field", d[0]).save()
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/rename_advance_table_fields.py b/erpnext/patches/v7_0/rename_advance_table_fields.py
deleted file mode 100644
index 34d81343e2b1..000000000000
--- a/erpnext/patches/v7_0/rename_advance_table_fields.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
- for dt in ("Sales Invoice Advance", "Purchase Invoice Advance"):
- frappe.reload_doctype(dt)
-
- frappe.db.sql("update `tab{0}` set reference_type = 'Journal Entry'".format(dt))
-
- if frappe.get_meta(dt).has_field('journal_entry'):
- rename_field(dt, "journal_entry", "reference_name")
-
- if frappe.get_meta(dt).has_field('jv_detail_no'):
- rename_field(dt, "jv_detail_no", "reference_row")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/rename_examination_to_assessment.py b/erpnext/patches/v7_0/rename_examination_to_assessment.py
deleted file mode 100644
index dc248de4faeb..000000000000
--- a/erpnext/patches/v7_0/rename_examination_to_assessment.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
- if frappe.db.exists("DocType", "Examination"):
- frappe.rename_doc("DocType", "Examination", "Assessment")
- frappe.rename_doc("DocType", "Examination Result", "Assessment Result")
-
- # 'Schools' module changed to the 'Education'
- # frappe.reload_doc("schools", "doctype", "assessment")
- # frappe.reload_doc("schools", "doctype", "assessment_result")
-
- frappe.reload_doc("education", "doctype", "assessment")
- frappe.reload_doc("education", "doctype", "assessment_result")
-
- rename_field("Assessment", "exam_name", "assessment_name")
- rename_field("Assessment", "exam_code", "assessment_code")
-
- frappe.db.sql("delete from `tabPortal Menu Item` where route = '/examination'")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/rename_fee_amount_to_fee_component.py b/erpnext/patches/v7_0/rename_fee_amount_to_fee_component.py
deleted file mode 100644
index 5cb6a3b7c43c..000000000000
--- a/erpnext/patches/v7_0/rename_fee_amount_to_fee_component.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
- if frappe.db.exists("DocType", "Fee Amount"):
- frappe.rename_doc("DocType", "Fee Amount", "Fee Component")
- for dt in ("Fees", "Fee Structure"):
- frappe.reload_doctype(dt)
- rename_field(dt, "amount", "components")
-
-
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/rename_prevdoc_fields.py b/erpnext/patches/v7_0/rename_prevdoc_fields.py
deleted file mode 100644
index ded4ad4aaee8..000000000000
--- a/erpnext/patches/v7_0/rename_prevdoc_fields.py
+++ /dev/null
@@ -1,76 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-import json
-from frappe.model.utils.rename_field import update_reports, rename_field, update_property_setters
-from frappe.custom.doctype.property_setter.property_setter import make_property_setter
-
-def execute():
- frappe.reload_doctype('Purchase Order Item')
- frappe.reload_doctype('Purchase Receipt Item')
- update_po_fields()
- update_prop_setters_reports_print_format_for_po()
- set_sales_order_field()
- rename_pr_fields()
-
-def update_po_fields():
- for data in frappe.db.sql(""" select prevdoc_docname, prevdoc_detail_docname, name, prevdoc_doctype
- from `tabPurchase Order Item` where prevdoc_doctype is not null""", as_dict=True):
- if data.prevdoc_doctype == 'Material Request':
- frappe.db.set_value("Purchase Order Item", data.name, "material_request", data.prevdoc_docname, update_modified=False)
- frappe.db.set_value("Purchase Order Item", data.name, "material_request_item", data.prevdoc_detail_docname, update_modified=False)
- elif data.prevdoc_doctype == 'Sales Order':
- frappe.db.set_value("Purchase Order Item", data.name, "sales_order", data.prevdoc_docname, update_modified=False)
- frappe.db.set_value("Purchase Order Item", data.name, "sales_order_item", data.prevdoc_detail_docname, update_modified=False)
-
-def get_columns():
- return {
- 'prevdoc_docname': 'material_request',
- 'prevdoc_detail_docname': 'material_request_item'
- }
-
-def update_prop_setters_reports_print_format_for_po():
- for key, val in get_columns().items():
- update_property_setters('Purchase Order Item', key, val)
- update_reports('Purchase Order Item', key, val)
- update_print_format_for_po(key, val, 'Purchase Order')
-
-def update_print_format_for_po(old_fieldname, new_fieldname, doc_type):
- column_mapper = get_columns()
-
- for data in frappe.db.sql(""" select name, format_data from `tabPrint Format` where
- format_data like %(old_fieldname)s and doc_type = %(doc_type)s""",
- {'old_fieldname': '%%%s%%'%(old_fieldname), 'doc_type': doc_type}, as_dict=True):
-
- update_print_format_fields(old_fieldname, new_fieldname, data)
-
-def update_print_format_fields(old_fieldname, new_fieldname, args):
- report_dict = json.loads(args.format_data)
- update = False
-
- for col in report_dict:
- if col.get('fieldname') and col.get('fieldname') == old_fieldname:
- col['fieldname'] = new_fieldname
- update = True
-
- if col.get('visible_columns'):
- for key in col.get('visible_columns'):
- if key.get('fieldname') == old_fieldname:
- key['fieldname'] = new_fieldname
- update = True
-
- if update:
- val = json.dumps(report_dict)
- frappe.db.sql("""update `tabPrint Format` set `format_data`=%s where name=%s""", (val, args.name))
-
-def set_sales_order_field():
- for data in frappe.db.sql("""select doc_type, field_name, property, value, property_type
- from `tabProperty Setter` where doc_type = 'Purchase Order Item'
- and field_name in('material_request', 'material_request_item')""", as_dict=True):
- if data.field_name == 'material_request':
- make_property_setter(data.doc_type, 'sales_order', data.property, data.value, data.property_type)
- else:
- make_property_setter(data.doc_type, 'sales_order_item', data.property, data.value, data.property_type)
-
-def rename_pr_fields():
- rename_field("Purchase Receipt Item", "prevdoc_docname", "purchase_order")
- rename_field("Purchase Receipt Item", "prevdoc_detail_docname", "purchase_order_item")
diff --git a/erpnext/patches/v7_0/rename_salary_components.py b/erpnext/patches/v7_0/rename_salary_components.py
deleted file mode 100644
index 1693f3bdf1f3..000000000000
--- a/erpnext/patches/v7_0/rename_salary_components.py
+++ /dev/null
@@ -1,149 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import update_property_setters
-
-def execute():
- if not frappe.db.exists("DocType", "Salary Structure Earning"):
- return
-
- frappe.reload_doc("Payroll", "doctype", "salary_detail")
- frappe.reload_doc("Payroll", "doctype", "salary_component")
-
- standard_cols = ["name", "creation", "modified", "owner", "modified_by", "parent", "parenttype", "parentfield", "idx"]
-
- dt_cols = {
- "Salary Structure Deduction": ["d_type", "d_modified_amt", "depend_on_lwp"],
- "Salary Structure Earning": ["e_type", "modified_value", "depend_on_lwp"],
- "Salary Slip Earning": ["e_type", "e_modified_amount", "e_depends_on_lwp", "e_amount"],
- "Salary Slip Deduction": ["d_type", "d_modified_amount", "d_depends_on_lwp", "d_amount"],
- }
-
- earning_type_exists = True if "earning_type" in frappe.db.get_table_columns("Salary Slip Earning") else False
- e_type_exists = True if "e_type" in frappe.db.get_table_columns("Salary Slip Earning") else False
-
-
- if e_type_exists and earning_type_exists:
- frappe.db.sql("""update `tabSalary Slip Earning`
- set e_type = earning_type, e_modified_amount = earning_amount
- where e_type is null and earning_type is not null""")
-
- frappe.db.sql("""update `tabSalary Structure Earning` set e_type = earning_type
- where e_type is null and earning_type is not null""")
-
- frappe.db.sql("""update `tabSalary Slip Deduction` set
- d_type = deduction_type, d_modified_amount = deduction_amount
- where d_type is null and deduction_type is not null""")
-
- frappe.db.sql("""update `tabSalary Structure Deduction` set d_type = deduction_type
- where d_type is null and deduction_type is not null""")
-
- if earning_type_exists and not e_type_exists:
- for val in dt_cols.values():
- if val[0] == "e_type":
- val[0] = "earning_type"
-
- if val[0] == "d_type":
- val[0] = "deduction_type"
-
- if val[1] == "e_modified_amount":
- val[1] ="earning_amount"
-
- if val[1] == "d_modified_amount":
- val[1] ="deduction_amount"
-
-
-
- target_cols = standard_cols + ["salary_component", "amount", "depends_on_payment_days", "default_amount"]
- target_cols = "`" + "`, `".join(target_cols) + "`"
-
- for doctype, cols in dt_cols.items():
- source_cols = "`" + "`, `".join(standard_cols + cols) + "`"
- if len(cols) == 3:
- source_cols += ", 0"
-
-
- frappe.db.sql("""INSERT INTO `tabSalary Detail` ({0}) SELECT {1} FROM `tab{2}`"""
- .format(target_cols, source_cols, doctype))
-
-
- dt_cols_de = {
- "Deduction Type": ["deduction_name", "description"],
- "Earning Type": ["earning_name", "description"],
- }
-
- standard_cols_de = standard_cols
-
-
- target_cols = standard_cols_de + ["salary_component", "description"]
- target_cols = "`" + "`, `".join(target_cols) + "`"
-
- for doctype, cols in dt_cols_de.items():
- source_cols = "`" + "`, `".join(standard_cols_de + cols) + "`"
- try:
- frappe.db.sql("""INSERT INTO `tabSalary Component` ({0}) SELECT {1} FROM `tab{2}`"""
- .format(target_cols, source_cols, doctype))
- except Exception as e:
- if e.args[0]==1062:
- pass
-
- update_customizations()
-
- for doctype in ["Salary Structure Deduction", "Salary Structure Earning", "Salary Slip Earning",
- "Salary Slip Deduction", "Deduction Type", "Earning Type"] :
- frappe.delete_doc("DocType", doctype)
-
-
-def update_customizations():
- dt_cols = {
- "Salary Structure Deduction": {
- "d_type": "salary_component",
- "deduction_type": "salary_component",
- "d_modified_amt": "amount",
- "depend_on_lwp": "depends_on_payment_days"
- },
- "Salary Structure Earning": {
- "e_type": "salary_component",
- "earning_type": "salary_component",
- "modified_value": "amount",
- "depend_on_lwp": "depends_on_payment_days"
- },
- "Salary Slip Earning": {
- "e_type": "salary_component",
- "earning_type": "salary_component",
- "e_modified_amount": "amount",
- "e_amount" : "default_amount",
- "e_depends_on_lwp": "depends_on_payment_days"
- },
- "Salary Slip Deduction": {
- "d_type": "salary_component",
- "deduction_type": "salary_component",
- "d_modified_amount": "amount",
- "d_amount" : "default_amount",
- "d_depends_on_lwp": "depends_on_payment_days"
- }
- }
-
- update_property_setters_and_custom_fields("Salary Detail", dt_cols)
-
- dt_cols = {
- "Earning Type": {
- "earning_name": "salary_component"
- },
- "Deduction Type": {
- "deduction_name": "salary_component"
- }
- }
-
- update_property_setters_and_custom_fields("Salary Component", dt_cols)
-
-
-
-
-def update_property_setters_and_custom_fields(new_dt, dt_cols):
- for doctype, cols in dt_cols.items():
- frappe.db.sql("update `tabProperty Setter` set doc_type = %s where doc_type=%s", (new_dt, doctype))
- frappe.db.sql("update `tabCustom Field` set dt = %s where dt=%s", (new_dt, doctype))
-
-
- for old_fieldname, new_fieldname in cols.items():
- update_property_setters(new_dt, old_fieldname, new_fieldname)
diff --git a/erpnext/patches/v7_0/rename_time_sheet_doctype.py b/erpnext/patches/v7_0/rename_time_sheet_doctype.py
deleted file mode 100644
index f80a8301d780..000000000000
--- a/erpnext/patches/v7_0/rename_time_sheet_doctype.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if frappe.db.table_exists("Time Sheet") and not frappe.db.table_exists("Timesheet"):
- frappe.rename_doc("DocType", "Time Sheet", "Timesheet")
- frappe.rename_doc("DocType", "Time Sheet Detail", "Timesheet Detail")
-
- for doctype in ['Time Sheet', 'Time Sheet Detail']:
- frappe.delete_doc('DocType', doctype)
-
- report = "Daily Time Sheet Summary"
- if frappe.db.exists("Report", report):
- frappe.delete_doc('Report', report)
diff --git a/erpnext/patches/v7_0/repost_bin_qty_and_item_projected_qty.py b/erpnext/patches/v7_0/repost_bin_qty_and_item_projected_qty.py
deleted file mode 100644
index a5cf22cf0152..000000000000
--- a/erpnext/patches/v7_0/repost_bin_qty_and_item_projected_qty.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- repost_bin_qty()
-
-def repost_bin_qty():
- for bin in frappe.db.sql(""" select name from `tabBin`
- where (actual_qty + ordered_qty + indented_qty + planned_qty - reserved_qty - reserved_qty_for_production - reserved_qty_for_sub_contract) != projected_qty """, as_dict=1):
- bin_doc = frappe.get_doc('Bin', bin.name)
- bin_doc.set_projected_qty()
- bin_doc.db_set("projected_qty", bin_doc.projected_qty, update_modified = False)
diff --git a/erpnext/patches/v7_0/repost_gle_for_pi_with_update_stock.py b/erpnext/patches/v7_0/repost_gle_for_pi_with_update_stock.py
deleted file mode 100644
index b864e597b82a..000000000000
--- a/erpnext/patches/v7_0/repost_gle_for_pi_with_update_stock.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cint
-
-def execute():
- frappe.reload_doctype("Purchase Invoice")
-
- for pi in frappe.db.sql("""select name from `tabPurchase Invoice`
- where company in(select name from tabCompany where enable_perpetual_inventory = 1) and
- update_stock=1 and docstatus=1 order by posting_date asc""", as_dict=1):
-
- frappe.db.sql("""delete from `tabGL Entry`
- where voucher_type = 'Purchase Invoice' and voucher_no = %s""", pi.name)
-
- pi_doc = frappe.get_doc("Purchase Invoice", pi.name)
- pi_doc.make_gl_entries()
- frappe.db.commit()
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/repost_gle_for_pos_sales_return.py b/erpnext/patches/v7_0/repost_gle_for_pos_sales_return.py
deleted file mode 100644
index 77ecafd6f148..000000000000
--- a/erpnext/patches/v7_0/repost_gle_for_pos_sales_return.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cint, flt
-
-def execute():
- frappe.reload_doctype("Sales Invoice")
- frappe.reload_doctype("Sales Invoice Item")
-
- for si in frappe.get_all("Sales Invoice", fields = ["name"],
- filters={"docstatus": 1, "is_pos": 1, "is_return": 1}):
- si_doc = frappe.get_doc("Sales Invoice", si.name)
- if len(si_doc.payments) > 0:
- si_doc.set_paid_amount()
- si_doc.flags.ignore_validate_update_after_submit = True
- si_doc.save()
- if si_doc.grand_total <= si_doc.paid_amount and si_doc.paid_amount < 0:
- delete_gle_for_voucher(si_doc.name)
- si_doc.run_method("make_gl_entries")
-
-def delete_gle_for_voucher(voucher_no):
- frappe.db.sql("""delete from `tabGL Entry` where voucher_no = %(voucher_no)s""",
- {'voucher_no': voucher_no})
diff --git a/erpnext/patches/v7_0/set_base_amount_in_invoice_payment_table.py b/erpnext/patches/v7_0/set_base_amount_in_invoice_payment_table.py
deleted file mode 100644
index 5dd61a06cce9..000000000000
--- a/erpnext/patches/v7_0/set_base_amount_in_invoice_payment_table.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import flt
-
-def execute():
- si_list = frappe.db.sql("""
- select distinct parent
- from `tabSales Invoice Payment`
- where docstatus!=2 and parenttype = 'Sales Invoice'
- and amount != 0 and base_amount = 0
- """)
-
- count = 0
- for d in si_list:
- si = frappe.get_doc("Sales Invoice", d[0])
- for p in si.get("payments"):
- if p.amount and not p.base_amount:
- base_amount = flt(p.amount*si.conversion_rate, si.precision("base_paid_amount"))
- frappe.db.set_value("Sales Invoice Payment", p.name, "base_amount", base_amount, update_modified=False)
-
- count +=1
-
- if count % 200 == 0:
- frappe.db.commit()
diff --git a/erpnext/patches/v7_0/set_is_group_for_warehouse.py b/erpnext/patches/v7_0/set_is_group_for_warehouse.py
deleted file mode 100644
index 3e69616b803c..000000000000
--- a/erpnext/patches/v7_0/set_is_group_for_warehouse.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("stock", "doctype", "warehouse")
- frappe.db.sql("""update tabWarehouse
- set is_group = if ((ifnull(is_group, "No") = "Yes" or ifnull(is_group, 0) = 1), 1, 0)""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/set_material_request_type_in_item.py b/erpnext/patches/v7_0/set_material_request_type_in_item.py
deleted file mode 100644
index 5fb14adbc8da..000000000000
--- a/erpnext/patches/v7_0/set_material_request_type_in_item.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Item")
- if "default_bom" in frappe.db.get_table_columns("Item"):
- frappe.db.sql("""update `tabItem`
- set default_material_request_type = (
- case
- when (default_bom is not null and default_bom != '')
- then 'Manufacture'
- else 'Purchase'
- end )""")
-
- else:
- frappe.db.sql("update tabItem set default_material_request_type='Purchase'")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/set_naming_series_for_timesheet.py b/erpnext/patches/v7_0/set_naming_series_for_timesheet.py
deleted file mode 100644
index d4d1a69d2156..000000000000
--- a/erpnext/patches/v7_0/set_naming_series_for_timesheet.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-
-import frappe
-from frappe.custom.doctype.property_setter.property_setter import make_property_setter
-
-def execute():
- frappe.reload_doc('projects', 'doctype', 'timesheet')
- frappe.reload_doc('projects', 'doctype', 'timesheet_detail')
- frappe.reload_doc('accounts', 'doctype', 'sales_invoice_timesheet')
-
- make_property_setter('Timesheet', "naming_series", "options", 'TS-', "Text")
- make_property_setter('Timesheet', "naming_series", "default", 'TS-', "Text")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/set_party_name_in_payment_entry.py b/erpnext/patches/v7_0/set_party_name_in_payment_entry.py
deleted file mode 100644
index bbdcf5cf3cac..000000000000
--- a/erpnext/patches/v7_0/set_party_name_in_payment_entry.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-
-import frappe
-
-def execute():
- customers = frappe._dict(frappe.db.sql("select name, customer_name from tabCustomer"))
- suppliers = frappe._dict(frappe.db.sql("select name, supplier_name from tabSupplier"))
-
- frappe.reload_doc('accounts', 'doctype', 'payment_entry')
-
- pe_list = frappe.db.sql("""select name, party_type, party from `tabPayment Entry`
- where party is not null and party != ''""", as_dict=1)
- for pe in pe_list:
- party_name = customers.get(pe.party) if pe.party_type=="Customer" else suppliers.get(pe.party)
-
- frappe.db.set_value("Payment Entry", pe.name, "party_name", party_name, update_modified=False)
-
diff --git a/erpnext/patches/v7_0/set_portal_settings.py b/erpnext/patches/v7_0/set_portal_settings.py
deleted file mode 100644
index 5259d4fbd444..000000000000
--- a/erpnext/patches/v7_0/set_portal_settings.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-
-import frappe
-
-def execute():
- frappe.reload_doctype('Role')
- for dt in ("assessment", "course", "fees"):
- # 'Schools' module changed to the 'Education'
- # frappe.reload_doc("schools", "doctype", dt)
- frappe.reload_doc("education", "doctype", dt)
-
- for dt in ("domain", "has_domain", "domain_settings"):
- frappe.reload_doc("core", "doctype", dt)
-
- frappe.reload_doc('website', 'doctype', 'portal_menu_item')
-
- frappe.get_doc('Portal Settings').sync_menu()
-
- if 'schools' in frappe.get_installed_apps():
- domain = frappe.get_doc('Domain', 'Education')
- domain.setup_domain()
- else:
- domain = frappe.get_doc('Domain', 'Manufacturing')
- domain.setup_data()
- domain.setup_sidebar_items()
diff --git a/erpnext/patches/v7_0/setup_account_table_for_expense_claim_type_if_exists.py b/erpnext/patches/v7_0/setup_account_table_for_expense_claim_type_if_exists.py
deleted file mode 100644
index c5657079b338..000000000000
--- a/erpnext/patches/v7_0/setup_account_table_for_expense_claim_type_if_exists.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("hr", "doctype", "expense_claim_type")
- frappe.reload_doc("hr", "doctype", "expense_claim_account")
-
- if not frappe.db.has_column('Expense Claim Type', 'default_account'):
- return
-
- for expense_claim_type in frappe.get_all("Expense Claim Type", fields=["name", "default_account"]):
- if expense_claim_type.default_account \
- and frappe.db.exists("Account", expense_claim_type.default_account):
- doc = frappe.get_doc("Expense Claim Type", expense_claim_type.name)
- doc.append("accounts", {
- "company": frappe.db.get_value("Account", expense_claim_type.default_account, "company"),
- "default_account": expense_claim_type.default_account,
- })
- doc.flags.ignore_mandatory = True
- doc.save(ignore_permissions=True)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/system_settings_setup_complete.py b/erpnext/patches/v7_0/system_settings_setup_complete.py
deleted file mode 100644
index 0feeee981e6f..000000000000
--- a/erpnext/patches/v7_0/system_settings_setup_complete.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype('System Settings')
- companies = frappe.db.sql("""select name, country
- from tabCompany order by creation asc""", as_dict=True)
- if companies:
- frappe.db.set_value('System Settings', 'System Settings', 'setup_complete', 1)
-
- for company in companies:
- if company.country:
- frappe.db.set_value('System Settings', 'System Settings', 'country', company.country)
- break
-
-
diff --git a/erpnext/patches/v7_0/update_autoname_field.py b/erpnext/patches/v7_0/update_autoname_field.py
deleted file mode 100644
index bfa9b281df3e..000000000000
--- a/erpnext/patches/v7_0/update_autoname_field.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- doctypes = frappe.db.sql(""" select name, autoname from `tabDocType`
- where autoname like 'field:%' and allow_rename = 1""", as_dict=1)
-
- for doctype in doctypes:
- fieldname = doctype.autoname.split(":")[1]
- if fieldname:
- frappe.db.sql(""" update `tab%s` set %s = name """%(doctype.name, fieldname))
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_change_amount_account.py b/erpnext/patches/v7_0/update_change_amount_account.py
deleted file mode 100644
index 1741095ea962..000000000000
--- a/erpnext/patches/v7_0/update_change_amount_account.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext.accounts.doctype.journal_entry.journal_entry import get_default_bank_cash_account
-
-def execute():
- frappe.reload_doc('accounts', 'doctype', 'sales_invoice')
-
- for company in frappe.db.sql("""select company from `tabSales Invoice`
- where change_amount <> 0 and account_for_change_amount is null group by company""", as_list = 1):
- cash_account = get_default_bank_cash_account(company[0], 'Cash').get('account')
- if not cash_account:
- bank_account = get_default_bank_cash_account(company[0], 'Bank').get('account')
- cash_account = bank_account
-
- if cash_account:
- frappe.db.sql("""update `tabSales Invoice`
- set account_for_change_amount = %(cash_account)s where change_amount <> 0
- and company = %(company)s and account_for_change_amount is null""",
- {'cash_account': cash_account, 'company': company[0]})
diff --git a/erpnext/patches/v7_0/update_conversion_factor_in_supplier_quotation_item.py b/erpnext/patches/v7_0/update_conversion_factor_in_supplier_quotation_item.py
deleted file mode 100644
index 24da4b1aebf3..000000000000
--- a/erpnext/patches/v7_0/update_conversion_factor_in_supplier_quotation_item.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('buying', 'doctype', 'supplier_quotation_item')
-
- frappe.db.sql("""update
- `tabSupplier Quotation Item` as sqi_t,
- (select sqi.item_code as item_code, sqi.uom as uom, ucd.conversion_factor as conversion_factor
- from `tabSupplier Quotation Item` sqi left join `tabUOM Conversion Detail` ucd
- on ucd.uom = sqi.uom and sqi.item_code = ucd.parent) as conversion_data,
- `tabItem` as item
- set
- sqi_t.conversion_factor= ifnull(conversion_data.conversion_factor, 1),
- sqi_t.stock_qty = (ifnull(conversion_data.conversion_factor, 1) * sqi_t.qty),
- sqi_t.stock_uom = item.stock_uom
- where
- sqi_t.item_code = conversion_data.item_code and
- sqi_t.uom = conversion_data.uom and sqi_t.item_code = item.name""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_home_page.py b/erpnext/patches/v7_0/update_home_page.py
deleted file mode 100644
index 909825c57217..000000000000
--- a/erpnext/patches/v7_0/update_home_page.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-import erpnext
-
-def execute():
- frappe.reload_doc('portal', 'doctype', 'homepage_featured_product')
- frappe.reload_doc('portal', 'doctype', 'homepage')
- frappe.reload_doc('portal', 'doctype', 'products_settings')
- frappe.reload_doctype('Item')
- frappe.reload_doctype('Item Group')
-
- website_settings = frappe.get_doc('Website Settings', 'Website Settings')
- if frappe.db.exists('Web Page', website_settings.home_page):
- header = frappe.db.get_value('Web Page', website_settings.home_page, 'header')
- if header and header.startswith(""):
- homepage = frappe.get_doc('Homepage', 'Homepage')
- homepage.company = erpnext.get_default_company() or frappe.get_all("Company")[0].name
- if '
' in header:
- homepage.tag_line = header.split('')[1].split('
')[0] or 'Default Website'
- else:
- homepage.tag_line = 'Default Website'
- homepage.setup_items()
- homepage.save()
-
- website_settings.home_page = 'home'
- website_settings.save()
-
diff --git a/erpnext/patches/v7_0/update_maintenance_module_in_doctype.py b/erpnext/patches/v7_0/update_maintenance_module_in_doctype.py
deleted file mode 100644
index 4c0c6a9313e6..000000000000
--- a/erpnext/patches/v7_0/update_maintenance_module_in_doctype.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.set_value("DocType", "Maintenance Schedule", "module", "Maintenance")
- frappe.db.set_value("DocType", "Maintenance Schedule Detail", "module", "Maintenance")
- frappe.db.set_value("DocType", "Maintenance Schedule Item", "module", "Maintenance")
- frappe.db.set_value("DocType", "Maintenance Visit", "module", "Maintenance")
- frappe.db.set_value("DocType", "Maintenance Visit Purpose", "module", "Maintenance")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_mins_to_first_response.py b/erpnext/patches/v7_0/update_mins_to_first_response.py
deleted file mode 100644
index 16681357e686..000000000000
--- a/erpnext/patches/v7_0/update_mins_to_first_response.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-from frappe.core.doctype.communication.communication import update_mins_to_first_communication
-
-def execute():
- frappe.reload_doctype('Issue')
- frappe.reload_doctype('Opportunity')
-
- for doctype in ('Issue', 'Opportunity'):
- frappe.db.sql('update tab{0} set mins_to_first_response=0'.format(doctype))
- for parent in frappe.get_all(doctype, order_by='creation desc', limit=500):
- parent_doc = frappe.get_doc(doctype, parent.name)
- for communication in frappe.get_all('Communication',
- filters={'reference_doctype': doctype, 'reference_name': parent.name,
- 'communication_medium': 'Email'},
- order_by = 'creation asc', limit=2):
-
- communication_doc = frappe.get_doc('Communication', communication.name)
-
- update_mins_to_first_communication(parent_doc, communication_doc)
-
- if parent_doc.mins_to_first_response:
- continue
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_missing_employee_in_timesheet.py b/erpnext/patches/v7_0/update_missing_employee_in_timesheet.py
deleted file mode 100644
index 54d492b2658f..000000000000
--- a/erpnext/patches/v7_0/update_missing_employee_in_timesheet.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if frappe.db.table_exists("Time Log") and "employee" in frappe.db.get_table_columns("Time Log"):
- timesheet = frappe.db.sql("""select tl.employee as employee, ts.name as name,
- tl.modified as modified, tl.modified_by as modified_by, tl.creation as creation, tl.owner as owner
- from
- `tabTimesheet` ts, `tabTimesheet Detail` tsd, `tabTime Log` tl
- where
- tsd.parent = ts.name and tl.from_time = tsd.from_time and tl.to_time = tsd.to_time
- and tl.hours = tsd.hours and tl.billing_rate = tsd.billing_rate and tsd.idx=1
- and tl.docstatus < 2 and (ts.employee = '' or ts.employee is null)""", as_dict=1)
-
- for data in timesheet:
- ts_doc = frappe.get_doc('Timesheet', data.name)
- if len(ts_doc.time_logs) == 1:
- frappe.db.sql(""" update `tabTimesheet` set creation = %(creation)s,
- owner = %(owner)s, modified = %(modified)s, modified_by = %(modified_by)s,
- employee = %(employee)s where name = %(name)s""", data)
diff --git a/erpnext/patches/v7_0/update_mode_of_payment_type.py b/erpnext/patches/v7_0/update_mode_of_payment_type.py
deleted file mode 100644
index 9292a1be1b9e..000000000000
--- a/erpnext/patches/v7_0/update_mode_of_payment_type.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import flt
-
-def execute():
- frappe.reload_doc('accounts', 'doctype', 'mode_of_payment')
-
- frappe.db.sql(""" update `tabMode of Payment` set type = 'Cash' where (type is null or type = '') and name = 'Cash'""")
-
- for data in frappe.db.sql("""select name from `tabSales Invoice` where is_pos=1 and docstatus<2 and
- (ifnull(paid_amount, 0) - ifnull(change_amount, 0)) > ifnull(grand_total, 0) and modified > '2016-05-01'""", as_dict=1):
- if data.name:
- si_doc = frappe.get_doc("Sales Invoice", data.name)
- remove_payment = []
- mode_of_payment = [d.mode_of_payment for d in si_doc.payments if flt(d.amount) > 0]
- if mode_of_payment != set(mode_of_payment):
- for payment_data in si_doc.payments:
- if payment_data.idx != 1 and payment_data.amount == si_doc.grand_total:
- remove_payment.append(payment_data)
- frappe.db.sql(""" delete from `tabSales Invoice Payment`
- where name = %(name)s""", {'name': payment_data.name})
-
- if len(remove_payment) > 0:
- for d in remove_payment:
- si_doc.remove(d)
-
- si_doc.set_paid_amount()
- si_doc.db_set("paid_amount", si_doc.paid_amount, update_modified = False)
- si_doc.db_set("base_paid_amount", si_doc.base_paid_amount, update_modified = False)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_party_status.py b/erpnext/patches/v7_0/update_party_status.py
deleted file mode 100644
index 0c6b4ea598df..000000000000
--- a/erpnext/patches/v7_0/update_party_status.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- return
- # for party_type in ('Customer', 'Supplier'):
- # frappe.reload_doctype(party_type)
- #
- # # set all as default status
- # frappe.db.sql('update `tab{0}` set status=%s'.format(party_type), default_status[party_type])
- #
- # for doctype in status_depends_on[party_type]:
- # filters = get_filters_for(doctype)
- # parties = frappe.get_all(doctype, fields="{0} as party".format(party_type.lower()),
- # filters=filters, limit_page_length=1)
- #
- # parties = filter(None, [p.party for p in parties])
- #
- # if parties:
- # frappe.db.sql('update `tab{0}` set status="Open" where name in ({1})'.format(party_type,
- # ', '.join(len(parties) * ['%s'])), parties)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_prevdoc_values_for_supplier_quotation_item.py b/erpnext/patches/v7_0/update_prevdoc_values_for_supplier_quotation_item.py
deleted file mode 100644
index e90de50c1ecb..000000000000
--- a/erpnext/patches/v7_0/update_prevdoc_values_for_supplier_quotation_item.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype('Supplier Quotation Item')
- for data in frappe.db.sql(""" select prevdoc_docname, prevdoc_detail_docname, name
- from `tabSupplier Quotation Item` where prevdoc_docname is not null""", as_dict=True):
- frappe.db.set_value("Supplier Quotation Item", data.name, "material_request", data.prevdoc_docname)
- frappe.db.set_value("Supplier Quotation Item", data.name, "material_request_item", data.prevdoc_detail_docname)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_project_in_gl_entry.py b/erpnext/patches/v7_0/update_project_in_gl_entry.py
deleted file mode 100644
index d99e9a41e3be..000000000000
--- a/erpnext/patches/v7_0/update_project_in_gl_entry.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("GL Entry")
-
- for doctype in ("Delivery Note", "Sales Invoice", "Stock Entry"):
- frappe.db.sql("""
- update `tabGL Entry` gle, `tab{0}` dt
- set gle.project = dt.project
- where gle.voucher_type=%s and gle.voucher_no = dt.name
- and ifnull(gle.cost_center, '') != '' and ifnull(dt.project, '') != ''
- """.format(doctype), doctype)
-
- for doctype in ("Purchase Receipt", "Purchase Invoice"):
- frappe.db.sql("""
- update `tabGL Entry` gle, `tab{0} Item` dt
- set gle.project = dt.project
- where gle.voucher_type=%s and gle.voucher_no = dt.parent and gle.cost_center=dt.cost_center
- and ifnull(gle.cost_center, '') != '' and ifnull(dt.project, '') != ''
- """.format(doctype), doctype)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_refdoc_in_landed_cost_voucher.py b/erpnext/patches/v7_0/update_refdoc_in_landed_cost_voucher.py
deleted file mode 100644
index 2d562bb40ec7..000000000000
--- a/erpnext/patches/v7_0/update_refdoc_in_landed_cost_voucher.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if "purchase_receipt" not in frappe.db.get_table_columns("Landed Cost Purchase Receipt"):
- return
-
- frappe.reload_doctype("Landed Cost Purchase Receipt")
-
- frappe.db.sql("""
- update `tabLanded Cost Purchase Receipt`
- set receipt_document_type = 'Purchase Receipt', receipt_document = purchase_receipt
- where (receipt_document is null or receipt_document = '')
- and (purchase_receipt is not null and purchase_receipt != '')
- """)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_status_for_timesheet.py b/erpnext/patches/v7_0/update_status_for_timesheet.py
deleted file mode 100644
index 117c40c59f26..000000000000
--- a/erpnext/patches/v7_0/update_status_for_timesheet.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.sql("""update
- `tabTimesheet` as ts,
- (
- select min(from_time)as from_time, max(to_time) as to_time, parent from `tabTimesheet Detail` group by parent
- ) as tsd
- set ts.status = 'Submitted', ts.start_date = tsd.from_time, ts.end_date = tsd.to_time
- where tsd.parent = ts.name and ts.status = 'Draft' and ts.docstatus =1""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_status_of_po_so.py b/erpnext/patches/v7_0/update_status_of_po_so.py
deleted file mode 100644
index d630e8f0f2d0..000000000000
--- a/erpnext/patches/v7_0/update_status_of_po_so.py
+++ /dev/null
@@ -1,68 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cint, flt
-
-def execute():
- update_po_per_received_per_billed()
- update_so_per_delivered_per_billed()
- update_status()
-
-def update_po_per_received_per_billed():
- frappe.db.sql("""
- update
- `tabPurchase Order`
- set
- `tabPurchase Order`.per_received = round((select sum(if(qty > ifnull(received_qty, 0),
- ifnull(received_qty, 0), qty)) / sum(qty) *100 from `tabPurchase Order Item`
- where parent = `tabPurchase Order`.name), 2),
- `tabPurchase Order`.per_billed = ifnull(round((select sum( if(amount > ifnull(billed_amt, 0),
- ifnull(billed_amt, 0), amount)) / sum(amount) *100 from `tabPurchase Order Item`
- where parent = `tabPurchase Order`.name), 2), 0)
- where
- net_total > 0
- """)
-
-def update_so_per_delivered_per_billed():
- frappe.db.sql("""
- update
- `tabSales Order`
- set
- `tabSales Order`.per_delivered = round((select sum( if(qty > ifnull(delivered_qty, 0),
- ifnull(delivered_qty, 0), qty)) / sum(qty) *100 from `tabSales Order Item`
- where parent = `tabSales Order`.name), 2),
- `tabSales Order`.per_billed = ifnull(round((select sum( if(amount > ifnull(billed_amt, 0),
- ifnull(billed_amt, 0), amount)) / sum(amount) *100 from `tabSales Order Item`
- where parent = `tabSales Order`.name), 2), 0)
- where
- net_total > 0
- """)
-
-def update_status():
- frappe.db.sql("""
- update
- `tabSales Order`
- set status = (Case when status = 'Closed' then 'Closed'
- When per_delivered < 100 and per_billed < 100 and docstatus = 1 then 'To Deliver and Bill'
- when per_delivered = 100 and per_billed < 100 and docstatus = 1 then 'To Bill'
- when per_delivered < 100 and per_billed = 100 and docstatus = 1 then 'To Deliver'
- when per_delivered = 100 and per_billed = 100 and docstatus = 1 then 'Completed'
- when order_type = 'Maintenance' and per_billed = 100 and docstatus = 1 then 'Completed'
- when docstatus = 2 then 'Cancelled'
- else 'Draft'
- End)""")
-
- frappe.db.sql("""
- update
- `tabPurchase Order`
- set status = (Case when status = 'Closed' then 'Closed'
- when status = 'Delivered' then 'Delivered'
- When per_received < 100 and per_billed < 100 and docstatus = 1 then 'To Receive and Bill'
- when per_received = 100 and per_billed < 100 and docstatus = 1 then 'To Bill'
- when per_received < 100 and per_billed = 100 and docstatus = 1 then 'To Receive'
- when per_received = 100 and per_billed = 100 and docstatus = 1 then 'Completed'
- when docstatus = 2 then 'Cancelled'
- else 'Draft'
- End)""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_status_of_zero_amount_sales_order.py b/erpnext/patches/v7_0/update_status_of_zero_amount_sales_order.py
deleted file mode 100644
index 9b2b24785a5b..000000000000
--- a/erpnext/patches/v7_0/update_status_of_zero_amount_sales_order.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for data in frappe.get_all('Sales Order', fields = ["name"], filters = [["docstatus", "=", "1"], ["grand_total", "=", "0"]]):
- sales_order = frappe.get_doc('Sales Order', data.name)
- sales_order.set_status(update=True, update_modified = False)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/update_timesheet_communications.py b/erpnext/patches/v7_0/update_timesheet_communications.py
deleted file mode 100644
index 203471ea8f27..000000000000
--- a/erpnext/patches/v7_0/update_timesheet_communications.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if frappe.db.table_exists("Time Log"):
- timesheet = frappe.db.sql("""SELECT ts.name AS name, tl.name AS timelogname,
- tl.modified AS modified, tl.modified_by AS modified_by, tl.creation AS creation, tl.owner AS owner
- FROM
- `tabTimesheet` ts, `tabTimesheet Detail` tsd, `tabTime Log` tl
- WHERE
- tsd.parent = ts.name AND tl.from_time = tsd.from_time AND tl.to_time = tsd.to_time
- AND tl.hours = tsd.hours AND tl.billing_rate = tsd.billing_rate AND tsd.idx=1
- AND tl.docstatus < 2""", as_dict=1)
-
- for data in timesheet:
- frappe.db.sql(""" update `tabTimesheet` set creation = %(creation)s,
- owner = %(owner)s, modified = %(modified)s, modified_by = %(modified_by)s
- where name = %(name)s""", data)
-
- frappe.db.sql("""
- update
- tabCommunication
- set
- reference_doctype = "Timesheet", reference_name = %(timesheet)s
- where
- reference_doctype = "Time Log" and reference_name = %(timelog)s
- """, {'timesheet': data.name, 'timelog': data.timelogname}, auto_commit=1)
diff --git a/erpnext/patches/v7_1/__init__.py b/erpnext/patches/v7_1/__init__.py
deleted file mode 100644
index 519ff49eac17..000000000000
--- a/erpnext/patches/v7_1/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
\ No newline at end of file
diff --git a/erpnext/patches/v7_1/add_account_user_role_for_timesheet.py b/erpnext/patches/v7_1/add_account_user_role_for_timesheet.py
deleted file mode 100644
index 7372b0cc5ff6..000000000000
--- a/erpnext/patches/v7_1/add_account_user_role_for_timesheet.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if not frappe.db.get_value('DocPerm', {'parent': 'Timesheet', 'role': 'Accounts User', 'permlevel': 1}):
- doc = frappe.get_doc('DocType', 'Timesheet')
- doc.append('permissions', {
- 'role': "Accounts User",
- 'permlevel': 0,
- 'read': 1,
- 'write': 1,
- 'create': 1,
- 'delete': 1,
- 'submit': 1,
- 'cancel': 1,
- 'amend': 1,
- 'report': 1,
- 'email': 1
- })
-
- doc.append('permissions', {
- 'role': "Accounts User",
- 'permlevel': 1,
- 'read': 1,
- 'write': 1
- })
-
- doc.save(ignore_permissions=True)
\ No newline at end of file
diff --git a/erpnext/patches/v7_1/add_field_for_task_dependent.py b/erpnext/patches/v7_1/add_field_for_task_dependent.py
deleted file mode 100644
index 65b1c74e87d5..000000000000
--- a/erpnext/patches/v7_1/add_field_for_task_dependent.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype('Task')
- for t in frappe.get_all('Task', fields=['name']):
- task = frappe.get_doc('Task', t.name)
- task.update_depends_on()
- if task.depends_on_tasks:
- task.db_set('depends_on_tasks', task.depends_on_tasks, update_modified=False)
diff --git a/erpnext/patches/v7_1/fix_link_for_customer_from_lead.py b/erpnext/patches/v7_1/fix_link_for_customer_from_lead.py
deleted file mode 100644
index 33f809fe37ee..000000000000
--- a/erpnext/patches/v7_1/fix_link_for_customer_from_lead.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for c in frappe.db.sql('select name from tabCustomer where ifnull(lead_name,"")!=""'):
- customer = frappe.get_doc('Customer', c[0])
- customer.update_lead_status()
\ No newline at end of file
diff --git a/erpnext/patches/v7_1/move_sales_invoice_from_parent_to_child_timesheet.py b/erpnext/patches/v7_1/move_sales_invoice_from_parent_to_child_timesheet.py
deleted file mode 100644
index d1ec7c697e71..000000000000
--- a/erpnext/patches/v7_1/move_sales_invoice_from_parent_to_child_timesheet.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('projects', 'doctype', 'timesheet_detail')
- frappe.reload_doc('accounts', 'doctype', 'sales_invoice_timesheet')
-
- frappe.db.sql(""" update
- `tabTimesheet` as ts,
- (select
- sum(billing_amount) as billing_amount, sum(billing_hours) as billing_hours, time_sheet
- from `tabSales Invoice Timesheet` where docstatus = 1 group by time_sheet
- ) as sit
- set
- ts.total_billed_amount = sit.billing_amount, ts.total_billed_hours = sit.billing_hours,
- ts.per_billed = ((sit.billing_amount * 100)/ts.total_billable_amount)
- where ts.name = sit.time_sheet and ts.docstatus = 1""")
-
- frappe.db.sql(""" update `tabTimesheet Detail` tsd, `tabTimesheet` ts set tsd.sales_invoice = ts.sales_invoice
- where tsd.parent = ts.name and ts.sales_invoice is not null""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_1/rename_field_timesheet.py b/erpnext/patches/v7_1/rename_field_timesheet.py
deleted file mode 100644
index 3690a2e79d47..000000000000
--- a/erpnext/patches/v7_1/rename_field_timesheet.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
- doctype = 'Timesheet'
- fields_dict = {'total_billing_amount': 'total_billable_amount', 'total_billing_hours': 'total_billable_hours'}
-
- for old_fieldname, new_fieldname in fields_dict.items():
- if old_fieldname in frappe.db.get_table_columns(doctype):
- rename_field(doctype, old_fieldname, new_fieldname)
diff --git a/erpnext/patches/v7_1/rename_quality_inspection_field.py b/erpnext/patches/v7_1/rename_quality_inspection_field.py
deleted file mode 100644
index 3b5a7d95eb18..000000000000
--- a/erpnext/patches/v7_1/rename_quality_inspection_field.py
+++ /dev/null
@@ -1,38 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import *
-
-def execute():
- for doctype in ("Purchase Receipt Item", "Delivery Note Item"):
- frappe.reload_doctype(doctype)
-
- table_columns = frappe.db.get_table_columns(doctype)
- if "qa_no" in table_columns:
- rename_field(doctype, "qa_no", "quality_inspection")
-
- frappe.reload_doctype("Item")
- rename_field("Item", "inspection_required", "inspection_required_before_purchase")
-
- frappe.reload_doc('stock', 'doctype', 'quality_inspection')
- frappe.db.sql("""
- update
- `tabQuality Inspection`
- set
- reference_type = 'Purchase Receipt', reference_name = purchase_receipt_no
- where
- ifnull(purchase_receipt_no, '') != '' and inspection_type = 'Incoming'
- """)
-
- frappe.db.sql("""
- update
- `tabQuality Inspection`
- set
- reference_type = 'Delivery Note', reference_name = delivery_note_no
- where
- ifnull(delivery_note_no, '') != '' and inspection_type = 'Outgoing'
- """)
-
- for old_fieldname in ["purchase_receipt_no", "delivery_note_no"]:
- update_reports("Quality Inspection", old_fieldname, "reference_name")
- update_users_report_view_settings("Quality Inspection", old_fieldname, "reference_name")
- update_property_setters("Quality Inspection", old_fieldname, "reference_name")
diff --git a/erpnext/patches/v7_1/repost_stock_for_deleted_bins_for_merging_items.py b/erpnext/patches/v7_1/repost_stock_for_deleted_bins_for_merging_items.py
deleted file mode 100644
index aca21085cc1f..000000000000
--- a/erpnext/patches/v7_1/repost_stock_for_deleted_bins_for_merging_items.py
+++ /dev/null
@@ -1,44 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.stock_balance import repost_stock
-
-def execute():
- frappe.reload_doc('manufacturing', 'doctype', 'work_order_item')
- frappe.reload_doc('manufacturing', 'doctype', 'work_order')
-
- modified_items = frappe.db.sql_list("""
- select name from `tabItem`
- where is_stock_item=1 and modified >= '2016-10-31'
- """)
-
- if not modified_items:
- return
-
- item_warehouses_with_transactions = []
- transactions = ("Sales Order Item", "Material Request Item", "Purchase Order Item",
- "Stock Ledger Entry", "Packed Item")
-
- for doctype in transactions:
- item_warehouses_with_transactions += list(frappe.db.sql("""
- select distinct item_code, warehouse
- from `tab{0}` where docstatus=1 and item_code in ({1})"""
- .format(doctype, ', '.join(['%s']*len(modified_items))), tuple(modified_items)))
-
- item_warehouses_with_transactions += list(frappe.db.sql("""
- select distinct production_item, fg_warehouse
- from `tabWork Order` where docstatus=1 and production_item in ({0})"""
- .format(', '.join(['%s']*len(modified_items))), tuple(modified_items)))
-
- item_warehouses_with_transactions += list(frappe.db.sql("""
- select distinct pr_item.item_code, pr_item.source_warehouse
- from `tabWork Order` pr, `tabWork Order Item` pr_item
- where pr_item.parent and pr.name and pr.docstatus=1 and pr_item.item_code in ({0})"""
- .format(', '.join(['%s']*len(modified_items))), tuple(modified_items)))
-
- item_warehouses_with_bin = list(frappe.db.sql("select distinct item_code, warehouse from `tabBin`"))
-
- item_warehouses_with_missing_bin = list(
- set(item_warehouses_with_transactions) - set(item_warehouses_with_bin))
-
- for item_code, warehouse in item_warehouses_with_missing_bin:
- repost_stock(item_code, warehouse)
diff --git a/erpnext/patches/v7_1/save_stock_settings.py b/erpnext/patches/v7_1/save_stock_settings.py
deleted file mode 100644
index d3f0263c1029..000000000000
--- a/erpnext/patches/v7_1/save_stock_settings.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- stock_settings = frappe.get_doc('Stock Settings')
-
- if stock_settings.default_warehouse \
- and not frappe.db.exists("Warehouse", stock_settings.default_warehouse):
- stock_settings.default_warehouse = None
-
- if stock_settings.stock_uom and not frappe.db.exists("UOM", stock_settings.stock_uom):
- stock_settings.stock_uom = None
-
- stock_settings.flags.ignore_mandatory = True
- stock_settings.save()
diff --git a/erpnext/patches/v7_1/set_budget_against_as_cost_center.py b/erpnext/patches/v7_1/set_budget_against_as_cost_center.py
deleted file mode 100644
index dd9a432cf01f..000000000000
--- a/erpnext/patches/v7_1/set_budget_against_as_cost_center.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("accounts", "doctype", "budget")
- frappe.db.sql("""
- update
- `tabBudget`
- set
- budget_against = 'Cost Center'
- """)
diff --git a/erpnext/patches/v7_1/set_currency_exchange_date.py b/erpnext/patches/v7_1/set_currency_exchange_date.py
deleted file mode 100644
index 2a2d420f21ce..000000000000
--- a/erpnext/patches/v7_1/set_currency_exchange_date.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Currency Exchange")
- frappe.db.sql("""
- update `tabCurrency Exchange`
- set `date` = '2010-01-01'
- where date is null or date = '0000-00-00'
- """)
\ No newline at end of file
diff --git a/erpnext/patches/v7_1/set_prefered_contact_email.py b/erpnext/patches/v7_1/set_prefered_contact_email.py
deleted file mode 100644
index 3b68e22269aa..000000000000
--- a/erpnext/patches/v7_1/set_prefered_contact_email.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype('User')
- for d in frappe.get_all("Employee"):
- employee = frappe.get_doc("Employee", d.name)
- if employee.company_email:
- employee.prefered_contact_email = "Company Email"
- employee.prefered_email = employee.company_email
- elif employee.personal_email:
- employee.prefered_contact_email = "Personal Email"
- employee.prefered_email = employee.personal_email
- elif employee.user_id:
- employee.prefered_contact_email = "User ID"
- employee.prefered_email = employee.user_id
- employee.db_update()
diff --git a/erpnext/patches/v7_1/set_sales_person_status.py b/erpnext/patches/v7_1/set_sales_person_status.py
deleted file mode 100644
index 929beac27f40..000000000000
--- a/erpnext/patches/v7_1/set_sales_person_status.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('setup','doctype','sales_person')
- frappe.db.sql("""update `tabSales Person` set enabled=1
- where (employee is null or employee = ''
- or employee IN (select employee from tabEmployee where status != "Left"))""")
diff --git a/erpnext/patches/v7_1/set_student_guardian.py b/erpnext/patches/v7_1/set_student_guardian.py
deleted file mode 100644
index 093c0bf6d947..000000000000
--- a/erpnext/patches/v7_1/set_student_guardian.py
+++ /dev/null
@@ -1,23 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if frappe.db.exists("DocType", "Guardian"):
-
- # 'Schools' module changed to the 'Education'
- # frappe.reload_doc("schools", "doctype", "student")
- # frappe.reload_doc("schools", "doctype", "student_guardian")
- # frappe.reload_doc("schools", "doctype", "student_sibling")
-
- frappe.reload_doc("education", "doctype", "student")
- frappe.reload_doc("education", "doctype", "student_guardian")
- frappe.reload_doc("education", "doctype", "student_sibling")
- if "student" not in frappe.db.get_table_columns("Guardian"):
- return
- guardian = frappe.get_all("Guardian", fields=["name", "student"])
- for d in guardian:
- if d.student:
- student = frappe.get_doc("Student", d.student)
- if student:
- student.append("guardians", {"guardian": d.name})
- student.save()
diff --git a/erpnext/patches/v7_1/set_total_amount_currency_in_je.py b/erpnext/patches/v7_1/set_total_amount_currency_in_je.py
deleted file mode 100644
index 8426ddcd7d98..000000000000
--- a/erpnext/patches/v7_1/set_total_amount_currency_in_je.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext import get_default_currency
-
-def execute():
- frappe.reload_doc("accounts", "doctype", "journal_entry")
-
- frappe.db.sql(""" update `tabJournal Entry` set total_amount_currency = %s
- where ifnull(multi_currency, 0) = 0
- and (pay_to_recd_from is not null or pay_to_recd_from != "") """, get_default_currency())
-
- for je in frappe.db.sql(""" select name from `tabJournal Entry` where multi_currency = 1
- and (pay_to_recd_from is not null or pay_to_recd_from != "")""", as_dict=1):
-
- doc = frappe.get_doc("Journal Entry", je.name)
- for d in doc.get('accounts'):
- if d.party_type and d.party:
- total_amount_currency = d.account_currency
-
- elif frappe.db.get_value("Account", d.account, "account_type") in ["Bank", "Cash"]:
- total_amount_currency = d.account_currency
-
- frappe.db.set_value("Journal Entry", je.name, "total_amount_currency",
- total_amount_currency, update_modified=False)
diff --git a/erpnext/patches/v7_1/update_bom_base_currency.py b/erpnext/patches/v7_1/update_bom_base_currency.py
deleted file mode 100644
index 9a59209ea526..000000000000
--- a/erpnext/patches/v7_1/update_bom_base_currency.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext import get_default_currency
-
-def execute():
- frappe.reload_doc("manufacturing", "doctype", "bom")
- frappe.reload_doc("manufacturing", "doctype", "bom_item")
- frappe.reload_doc("manufacturing", "doctype", "bom_explosion_item")
- frappe.reload_doc("manufacturing", "doctype", "bom_operation")
- frappe.reload_doc("manufacturing", "doctype", "bom_scrap_item")
-
- frappe.db.sql(""" update `tabBOM Operation` set base_hour_rate = hour_rate,
- base_operating_cost = operating_cost """)
-
- frappe.db.sql(""" update `tabBOM Item` set base_rate = rate, base_amount = amount """)
- frappe.db.sql(""" update `tabBOM Scrap Item` set base_rate = rate, base_amount = amount """)
-
- frappe.db.sql(""" update `tabBOM` set `tabBOM`.base_operating_cost = `tabBOM`.operating_cost,
- `tabBOM`.base_raw_material_cost = `tabBOM`.raw_material_cost,
- `tabBOM`.currency = (select default_currency from `tabCompany` where name = `tabBOM`.company)""")
diff --git a/erpnext/patches/v7_1/update_component_type.py b/erpnext/patches/v7_1/update_component_type.py
deleted file mode 100644
index 24ca0570e014..000000000000
--- a/erpnext/patches/v7_1/update_component_type.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import flt
-
-def execute():
- frappe.reload_doc('Payroll', 'doctype', 'salary_component')
- sal_components = frappe.db.sql("""
- select DISTINCT salary_component, parentfield from `tabSalary Detail`""", as_dict=True)
-
- if sal_components:
- for sal_component in sal_components:
- if sal_component.parentfield == "earnings":
- frappe.db.sql("""update `tabSalary Component` set type='Earning' where salary_component=%(sal_comp)s""",{"sal_comp": sal_component.salary_component})
- else:
- frappe.db.sql("""update `tabSalary Component` set type='Deduction' where salary_component=%(sal_comp)s""",{"sal_comp": sal_component.salary_component})
\ No newline at end of file
diff --git a/erpnext/patches/v7_1/update_invoice_status.py b/erpnext/patches/v7_1/update_invoice_status.py
deleted file mode 100644
index 851af80f7a22..000000000000
--- a/erpnext/patches/v7_1/update_invoice_status.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('accounts', 'doctype', 'sales_invoice')
- frappe.reload_doc('accounts', 'doctype', 'purchase_invoice')
-
- frappe.db.sql("""
- update
- `tabPurchase Invoice`
- set
- status = (Case When outstanding_amount = 0 and docstatus = 1 and is_return = 0 then 'Paid'
- when due_date < CURDATE() and outstanding_amount > 0 and docstatus =1 then 'Overdue'
- when due_date >= CURDATE() and outstanding_amount > 0 and docstatus =1 then 'Unpaid'
- when outstanding_amount < 0 and docstatus =1 then 'Debit Note Issued'
- when is_return = 1 and docstatus =1 then 'Return'
- when docstatus = 2 then 'Cancelled'
- else 'Draft'
- End)""")
-
- frappe.db.sql("""
- update
- `tabSales Invoice`
- set status = (Case When outstanding_amount = 0 and docstatus = 1 and is_return = 0 then 'Paid'
- when due_date < CURDATE() and outstanding_amount > 0 and docstatus =1 then 'Overdue'
- when due_date >= CURDATE() and outstanding_amount > 0 and docstatus =1 then 'Unpaid'
- when outstanding_amount < 0 and docstatus =1 then 'Credit Note Issued'
- when is_return = 1 and docstatus =1 then 'Return'
- when docstatus = 2 then 'Cancelled'
- else 'Draft'
- End)""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_1/update_lead_source.py b/erpnext/patches/v7_1/update_lead_source.py
deleted file mode 100644
index a2a48a62e1a5..000000000000
--- a/erpnext/patches/v7_1/update_lead_source.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe import _
-
-def execute():
- from erpnext.setup.setup_wizard.operations.install_fixtures import default_lead_sources
-
- frappe.reload_doc('crm', 'doctype', 'lead_source')
-
- frappe.local.lang = frappe.db.get_default("lang") or 'en'
-
- for s in default_lead_sources:
- insert_lead_source(_(s))
-
- # get lead sources in existing forms (customized)
- # and create a document if not created
- for d in ['Lead', 'Opportunity', 'Quotation', 'Sales Order', 'Delivery Note', 'Sales Invoice']:
- sources = frappe.db.sql_list('select distinct source from `tab{0}`'.format(d))
- for s in sources:
- if s and s not in default_lead_sources:
- insert_lead_source(s)
-
- # remove customization for source
- for p in frappe.get_all('Property Setter', {'doc_type':d, 'field_name':'source', 'property':'options'}):
- frappe.delete_doc('Property Setter', p.name)
-
-def insert_lead_source(s):
- if not frappe.db.exists('Lead Source', s):
- frappe.get_doc(dict(doctype='Lead Source', source_name=s)).insert()
diff --git a/erpnext/patches/v7_1/update_missing_salary_component_type.py b/erpnext/patches/v7_1/update_missing_salary_component_type.py
deleted file mode 100644
index 824f2b881f0d..000000000000
--- a/erpnext/patches/v7_1/update_missing_salary_component_type.py
+++ /dev/null
@@ -1,50 +0,0 @@
-from __future__ import unicode_literals
-
-import frappe
-from frappe.utils import cstr
-
-'''
-Some components do not have type set, try and guess whether they turn up in
-earnings or deductions in existing salary slips
-'''
-
-def execute():
- frappe.reload_doc("accounts", "doctype", "salary_component_account")
- frappe.reload_doc("Payroll", "doctype", "salary_component")
- frappe.reload_doc("Payroll", "doctype", "taxable_salary_slab")
-
- for s in frappe.db.sql('''select name, type, salary_component_abbr from `tabSalary Component`
- where ifnull(type, "")="" or ifnull(salary_component_abbr, "") = ""''', as_dict=1):
-
- component = frappe.get_doc('Salary Component', s.name)
-
- # guess
- if not s.type:
- guess = frappe.db.sql('''select
- parentfield from `tabSalary Detail`
- where salary_component=%s limit 1''', s.name)
-
- if guess:
- component.type = 'Earning' if guess[0][0]=='earnings' else 'Deduction'
-
- else:
- component.type = 'Deduction'
-
- if not s.salary_component_abbr:
- abbr = ''.join([c[0] for c in component.salary_component.split()]).upper()
-
- abbr_count = frappe.db.sql("""
- select
- count(name)
- from
- `tabSalary Component`
- where
- salary_component_abbr = %s or salary_component_abbr like %s
- """, (abbr, abbr + "-%%"))
-
- if abbr_count and abbr_count[0][0] > 0:
- abbr = abbr + "-" + cstr(abbr_count[0][0])
-
- component.salary_component_abbr = abbr
-
- component.save()
diff --git a/erpnext/patches/v7_1/update_portal_roles.py b/erpnext/patches/v7_1/update_portal_roles.py
deleted file mode 100644
index 482586b8efe6..000000000000
--- a/erpnext/patches/v7_1/update_portal_roles.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype('Role')
- frappe.reload_doctype('User')
- for role_name in ('Customer', 'Supplier', 'Student'):
- if frappe.db.exists('Role', role_name):
- frappe.db.set_value('Role', role_name, 'desk_access', 0)
- else:
- frappe.get_doc(dict(doctype='Role', role_name=role_name, desk_access=0)).insert()
-
-
- # set customer, supplier roles
- for c in frappe.get_all('Contact', fields=['user'], filters={'ifnull(user, "")': ('!=', '')}):
- user = frappe.get_doc('User', c.user)
- user.flags.ignore_validate = True
- user.flags.ignore_mandatory = True
- user.save()
-
-
diff --git a/erpnext/patches/v7_1/update_total_billing_hours.py b/erpnext/patches/v7_1/update_total_billing_hours.py
deleted file mode 100644
index b9c96028f523..000000000000
--- a/erpnext/patches/v7_1/update_total_billing_hours.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('projects', 'doctype', 'timesheet_detail')
- frappe.reload_doc('accounts', 'doctype', 'sales_invoice_timesheet')
-
- frappe.db.sql("""update tabTimesheet set total_billable_hours=total_hours
- where total_billable_amount>0 and docstatus = 1""")
-
- frappe.db.sql("""update `tabTimesheet Detail` set billing_hours=hours where docstatus < 2""")
-
- frappe.db.sql(""" update `tabSales Invoice Timesheet` set billing_hours = (select total_billable_hours from `tabTimesheet`
- where name = time_sheet) where time_sheet is not null""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/__init__.py b/erpnext/patches/v7_2/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v7_2/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v7_2/arrear_leave_encashment_as_salary_component.py b/erpnext/patches/v7_2/arrear_leave_encashment_as_salary_component.py
deleted file mode 100644
index d2583b94224f..000000000000
--- a/erpnext/patches/v7_2/arrear_leave_encashment_as_salary_component.py
+++ /dev/null
@@ -1,36 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # frappe.reload_doctype('Salary Slip', 'Salary Component')
- frappe.reload_doc("Payroll", "doctype", "Salary Slip")
- frappe.reload_doc("Payroll", "doctype", "Salary Component")
- salary_components = [['Arrear', "ARR"], ['Leave Encashment', 'LENC']]
- for salary_component, salary_abbr in salary_components:
- if not frappe.db.exists('Salary Component', salary_component):
- sal_comp = frappe.get_doc({
- "doctype": "Salary Component",
- "salary_component": salary_component,
- "type": "Earning",
- "salary_component_abbr": salary_abbr
- }).insert()
-
- salary_slips = frappe.db.sql("""select name, arrear_amount, leave_encashment_amount from `tabSalary Slip`
- where docstatus !=2 and (arrear_amount > 0 or leave_encashment_amount > 0)""", as_dict=True)
-
- for salary_slip in salary_slips:
- doc = frappe.get_doc('Salary Slip', salary_slip.name)
-
- if salary_slip.get("arrear_amount") > 0:
- r = doc.append('earnings', {
- 'salary_component': 'Arrear',
- 'amount': salary_slip.arrear_amount
- })
- r.db_update()
-
- if salary_slip.get("leave_encashment_amount") > 0:
- r = doc.append('earnings', {
- 'salary_component': 'Leave Encashment',
- 'amount': salary_slip.leave_encashment_amount
- })
- r.db_update()
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/contact_address_links.py b/erpnext/patches/v7_2/contact_address_links.py
deleted file mode 100644
index 200434c208dc..000000000000
--- a/erpnext/patches/v7_2/contact_address_links.py
+++ /dev/null
@@ -1,32 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.core.doctype.dynamic_link.dynamic_link import deduplicate_dynamic_links
-from frappe.utils import update_progress_bar
-
-def execute():
- frappe.reload_doc('core', 'doctype', 'dynamic_link')
- frappe.reload_doc('contacts', 'doctype', 'contact')
- frappe.reload_doc('contacts', 'doctype', 'address')
- map_fields = (
- ('Customer', 'customer'),
- ('Supplier', 'supplier'),
- ('Lead', 'lead'),
- ('Sales Partner', 'sales_partner')
- )
- for doctype in ('Contact', 'Address'):
- if frappe.db.has_column(doctype, 'customer'):
- items = frappe.get_all(doctype)
- for i, doc in enumerate(items):
- doc = frappe.get_doc(doctype, doc.name)
- dirty = False
- for field in map_fields:
- if doc.get(field[1]):
- doc.append('links', dict(link_doctype=field[0], link_name=doc.get(field[1])))
- dirty = True
-
- if dirty:
- deduplicate_dynamic_links(doc)
- doc.update_children()
-
- update_progress_bar('Updating {0}'.format(doctype), i, len(items))
- print
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/delete_fleet_management_module_def.py b/erpnext/patches/v7_2/delete_fleet_management_module_def.py
deleted file mode 100644
index 542ac11e3f26..000000000000
--- a/erpnext/patches/v7_2/delete_fleet_management_module_def.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if frappe.db.exists('Module Def', 'Fleet Management'):
- frappe.db.sql("""delete from `tabModule Def`
- where module_name = 'Fleet Management'""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/empty_supplied_items_for_non_subcontracted.py b/erpnext/patches/v7_2/empty_supplied_items_for_non_subcontracted.py
deleted file mode 100644
index ec6f8afc3a5c..000000000000
--- a/erpnext/patches/v7_2/empty_supplied_items_for_non_subcontracted.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for doctype in ["Purchase Order", "Purchase Invoice", "Purchase Receipt"]:
- child_table = 'Purchase Receipt Item Supplied' if doctype != 'Purchase Order' else 'Purchase Order Item Supplied'
- for data in frappe.db.sql(""" select distinct `tab{doctype}`.name from `tab{doctype}` , `tab{child_table}`
- where `tab{doctype}`.name = `tab{child_table}`.parent and `tab{doctype}`.docstatus != 2
- and `tab{doctype}`.is_subcontracted = 'No' """.format(doctype = doctype, child_table = child_table), as_dict=1):
- frappe.db.sql(""" delete from `tab{child_table}`
- where parent = %s and parenttype = %s""".format(child_table= child_table), (data.name, doctype))
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/make_all_assessment_group.py b/erpnext/patches/v7_2/make_all_assessment_group.py
deleted file mode 100644
index f3ec628374c8..000000000000
--- a/erpnext/patches/v7_2/make_all_assessment_group.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if not frappe.db.exists({"doctype": "Assessment Group","assessment_group_name": "All Assessment Groups"}):
- frappe.reload_doc("education", "doctype", "assessment_group")
- doc = frappe.new_doc("Assessment Group")
- doc.assessment_group_name = "All Assessment Groups"
- doc.is_group = 1
- doc.flags.ignore_mandatory = True
- doc.save()
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/mark_students_active.py b/erpnext/patches/v7_2/mark_students_active.py
deleted file mode 100644
index 7289e4a91583..000000000000
--- a/erpnext/patches/v7_2/mark_students_active.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # 'Schools' module changed to the 'Education'
- # frappe.reload_doc('schools', 'doctype', 'student_group_student')
-
- frappe.reload_doc('education', 'doctype', 'student_group_student')
- frappe.db.sql("update `tabStudent Group Student` set active=1")
diff --git a/erpnext/patches/v7_2/rename_att_date_attendance.py b/erpnext/patches/v7_2/rename_att_date_attendance.py
deleted file mode 100644
index 7f06d8f1239c..000000000000
--- a/erpnext/patches/v7_2/rename_att_date_attendance.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import update_reports, update_users_report_view_settings, update_property_setters
-
-def execute():
- if "att_date" not in frappe.db.get_table_columns("Attendance"):
- return
- frappe.reload_doc("hr", "doctype", "attendance")
- frappe.db.sql("""update `tabAttendance`
- set attendance_date = att_date
- where attendance_date is null or attendance_date = '0000-00-00'""")
-
- update_reports("Attendance", "att_date", "attendance_date")
- update_users_report_view_settings("Attendance", "att_date", "attendance_date")
- update_property_setters("Attendance", "att_date", "attendance_date")
diff --git a/erpnext/patches/v7_2/rename_evaluation_criteria.py b/erpnext/patches/v7_2/rename_evaluation_criteria.py
deleted file mode 100644
index c6520b1b7259..000000000000
--- a/erpnext/patches/v7_2/rename_evaluation_criteria.py
+++ /dev/null
@@ -1,39 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
- # 'Schools' module changed to the 'Education'
-
-
- frappe.rename_doc("DocType", "Evaluation Criteria", "Assessment Criteria", force=True)
- # frappe.reload_doc("schools", "doctype", "assessment_criteria")
- frappe.reload_doc("education", "doctype", "assessment_criteria")
- if 'evaluation_criteria' in frappe.db.get_table_columns('Assessment Criteria'):
- rename_field("Assessment Criteria", "evaluation_criteria", "assessment_criteria")
-
- frappe.rename_doc("DocType", "Assessment Evaluation Criteria", "Assessment Plan Criteria", force=True)
- # frappe.reload_doc("schools", "doctype", "assessment_plan_criteria")
- frappe.reload_doc("education", "doctype", "assessment_plan_criteria")
- if 'evaluation_criteria' in frappe.db.get_table_columns('Assessment Plan'):
- rename_field("Assessment Plan Criteria", "evaluation_criteria", "assessment_criteria")
-
- # frappe.reload_doc("schools", "doctype", "assessment_plan")
- frappe.reload_doc("education", "doctype", "assessment_plan")
- rename_field("Assessment Plan", "evaluation_criterias", "assessment_criteria")
-
- # frappe.reload_doc("schools", "doctype", "assessment_result_detail")
- frappe.reload_doc("education", "doctype", "assessment_result_detail")
- if 'evaluation_criteria' in frappe.db.get_table_columns('Assessment Result Detail'):
- rename_field("Assessment Result Detail", "evaluation_criteria", "assessment_criteria")
-
- frappe.rename_doc("DocType", "Course Evaluation Criteria", "Course Assessment Criteria", force=True)
- # frappe.reload_doc("schools", "doctype", "course_assessment_criteria")
- frappe.reload_doc("education", "doctype", "course_assessment_criteria")
- if 'evaluation_criteria' in frappe.db.get_table_columns('Course Assessment Criteria'):
- rename_field("Course Assessment Criteria", "evaluation_criteria", "assessment_criteria")
-
- # frappe.reload_doc("schools", "doctype", "course")
- frappe.reload_doc("education", "doctype", "course")
- if 'evaluation_criteria' in frappe.db.get_table_columns('Course'):
- rename_field("Course", "evaluation_criterias", "assessment_criteria")
diff --git a/erpnext/patches/v7_2/set_null_value_to_fields.py b/erpnext/patches/v7_2/set_null_value_to_fields.py
deleted file mode 100644
index 6388be438dbf..000000000000
--- a/erpnext/patches/v7_2/set_null_value_to_fields.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- fields = {"Cost Center": "project", "Project": "cost_center"}
- for budget_against, field in fields.items():
- frappe.db.sql(""" update `tabBudget` set {field} = null
- where budget_against = %s """.format(field = field), budget_against)
diff --git a/erpnext/patches/v7_2/setup_auto_close_settings.py b/erpnext/patches/v7_2/setup_auto_close_settings.py
deleted file mode 100644
index 4eef2b9c8a71..000000000000
--- a/erpnext/patches/v7_2/setup_auto_close_settings.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # update the selling settings and set the close_opportunity_after_days
- frappe.reload_doc("selling", "doctype", "selling_settings")
- frappe.db.set_value("Selling Settings", "Selling Settings", "close_opportunity_after_days", 15)
-
- # Auto close Replied opportunity
- frappe.db.sql("""update `tabOpportunity` set status='Closed' where status='Replied'
- and date_sub(curdate(), interval 15 Day)>modified""")
-
- # create Support Settings doctype and update close_issue_after_days
- frappe.reload_doc("support", "doctype", "support_settings")
- frappe.db.set_value("Support Settings", "Support Settings", "close_issue_after_days", 7)
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/stock_uom_in_selling.py b/erpnext/patches/v7_2/stock_uom_in_selling.py
deleted file mode 100644
index d02955574705..000000000000
--- a/erpnext/patches/v7_2/stock_uom_in_selling.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype('Sales Order')
- frappe.reload_doctype('Sales Invoice')
- frappe.reload_doctype('Quotation')
- frappe.reload_doctype('Delivery Note')
-
- doctype_list = ['Sales Order Item', 'Delivery Note Item', 'Quotation Item', 'Sales Invoice Item']
-
- for doctype in doctype_list:
- frappe.reload_doctype(doctype)
- frappe.db.sql("""update `tab{doctype}`
- set uom = stock_uom, conversion_factor = 1, stock_qty = qty""".format(doctype=doctype))
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/update_abbr_in_salary_slips.py b/erpnext/patches/v7_2/update_abbr_in_salary_slips.py
deleted file mode 100644
index 57432fe98612..000000000000
--- a/erpnext/patches/v7_2/update_abbr_in_salary_slips.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('Payroll', 'doctype', 'Salary Slip')
- if not frappe.db.has_column('Salary Detail', 'abbr'):
- return
-
- salary_details = frappe.db.sql("""select abbr, salary_component, name from `tabSalary Detail`
- where abbr is null or abbr = ''""", as_dict=True)
-
- for salary_detail in salary_details:
- salary_component_abbr = frappe.get_value("Salary Component", salary_detail.salary_component, "salary_component_abbr")
- frappe.db.sql("""update `tabSalary Detail` set abbr = %s where name = %s""",(salary_component_abbr, salary_detail.name))
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/update_assessment_modules.py b/erpnext/patches/v7_2/update_assessment_modules.py
deleted file mode 100644
index 2b5e774d4678..000000000000
--- a/erpnext/patches/v7_2/update_assessment_modules.py
+++ /dev/null
@@ -1,51 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
- #Rename Grading Structure to Grading Scale
- if not frappe.db.exists("DocType", "Grading Scale"):
- frappe.rename_doc("DocType", "Grading Structure", "Grading Scale", force=True)
- if not frappe.db.exists("DocType", "Grading Scale Interval"):
- frappe.rename_doc("DocType", "Grade Interval", "Grading Scale Interval", force=True)
-
- # frappe.reload_doc("schools", "doctype", "grading_scale_interval")
- frappe.reload_doc("education", "doctype", "grading_scale_interval")
- if "to_score" in frappe.db.get_table_columns("Grading Scale Interval"):
- rename_field("Grading Scale Interval", "to_score", "threshold")
-
- if not frappe.db.exists("DocType", "Assessment Plan"):
- frappe.rename_doc("DocType", "Assessment", "Assessment Plan", force=True)
-
- # 'Schools' module changed to the 'Education'
- # frappe.reload_doc("schools", "doctype", "assessment_plan")
-
- #Rename Assessment Results
- frappe.reload_doc("education", "doctype", "assessment_plan")
- if "grading_structure" in frappe.db.get_table_columns("Assessment Plan"):
- rename_field("Assessment Plan", "grading_structure", "grading_scale")
-
- # frappe.reload_doc("schools", "doctype", "assessment_result")
- # frappe.reload_doc("schools", "doctype", "assessment_result_detail")
- # frappe.reload_doc("schools", "doctype", "assessment_criteria")
- frappe.reload_doc("education", "doctype", "assessment_result")
- frappe.reload_doc("education", "doctype", "assessment_result_detail")
- frappe.reload_doc("education", "doctype", "assessment_criteria")
-
-
- for assessment in frappe.get_all("Assessment Plan",
- fields=["name", "grading_scale"], filters = [["docstatus", "!=", 2 ]]):
- for stud_result in frappe.db.sql("select * from `tabAssessment Result` where parent= %s",
- assessment.name, as_dict=True):
- if stud_result.result:
- assessment_result = frappe.new_doc("Assessment Result")
- assessment_result.student = stud_result.student
- assessment_result.student_name = stud_result.student_name
- assessment_result.assessment_plan = assessment.name
- assessment_result.grading_scale = assessment.grading_scale
- assessment_result.total_score = stud_result.result
- assessment_result.flags.ignore_validate = True
- assessment_result.flags.ignore_mandatory = True
- assessment_result.save()
-
- frappe.db.sql("""delete from `tabAssessment Result` where parent != '' or parent is not null""")
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/update_attendance_docstatus.py b/erpnext/patches/v7_2/update_attendance_docstatus.py
deleted file mode 100644
index a69052657ddb..000000000000
--- a/erpnext/patches/v7_2/update_attendance_docstatus.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("education", "doctype", "student_attendance")
- frappe.db.sql('''
- update `tabStudent Attendance` set
- docstatus=0
- where
- docstatus=1''')
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/update_doctype_status.py b/erpnext/patches/v7_2/update_doctype_status.py
deleted file mode 100644
index c66f3f2e73a8..000000000000
--- a/erpnext/patches/v7_2/update_doctype_status.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- doctypes = ["Opportunity", "Quotation", "Sales Order", "Sales Invoice", "Purchase Invoice", "Purchase Order", "Delivery Note", "Purchase Receipt"]
- for doctype in doctypes:
- frappe.db.sql(""" update `tab{doctype}` set status = 'Draft'
- where status = 'Cancelled' and docstatus = 0 """.format(doctype = doctype))
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/update_guardian_name_in_student_master.py b/erpnext/patches/v7_2/update_guardian_name_in_student_master.py
deleted file mode 100644
index 9f589ef00e1d..000000000000
--- a/erpnext/patches/v7_2/update_guardian_name_in_student_master.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
- # 'Schools' module changed to the 'Education'
- # frappe.reload_doc("schools", "doctype", "student_guardian")
- frappe.reload_doc("education", "doctype", "student_guardian")
-
- student_guardians = frappe.get_all("Student Guardian", fields=["guardian"])
- for student_guardian in student_guardians:
- guardian_name = frappe.db.get_value("Guardian", student_guardian.guardian, "guardian_name")
- frappe.db.sql("update `tabStudent Guardian` set guardian_name = %s where guardian= %s",
- (guardian_name, student_guardian.guardian))
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/update_party_type.py b/erpnext/patches/v7_2/update_party_type.py
deleted file mode 100644
index 147f5a36435b..000000000000
--- a/erpnext/patches/v7_2/update_party_type.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('setup', 'doctype', 'party_type')
- make_party_type()
-
-def make_party_type():
- for party_type in ["Customer", "Supplier", "Employee"]:
- if not frappe.db.get_value("Party Type", party_type):
- doc = frappe.new_doc("Party Type")
- doc.party_type = party_type
- doc.save(ignore_permissions=True)
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/update_salary_slips.py b/erpnext/patches/v7_2/update_salary_slips.py
deleted file mode 100644
index 9fcce62d8ff3..000000000000
--- a/erpnext/patches/v7_2/update_salary_slips.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext.payroll.doctype.payroll_entry.payroll_entry import get_month_details
-from frappe.utils import cint
-
-def execute():
- frappe.reload_doc("Payroll", "doctype", "Salary Slip")
- if not frappe.db.has_column('Salary Slip', 'fiscal_year'):
- return
-
- salary_slips = frappe.db.sql("""select month, name, fiscal_year from `tabSalary Slip`
- where (month is not null and month != '') and
- start_date is null and end_date is null and docstatus != 2""", as_dict=True)
-
- for salary_slip in salary_slips:
- if not cint(salary_slip.month):
- continue
- get_start_end_date = get_month_details(salary_slip.fiscal_year, cint(salary_slip.month))
- start_date = get_start_end_date['month_start_date']
- end_date = get_start_end_date['month_end_date']
- frappe.db.sql("""update `tabSalary Slip` set start_date = %s, end_date = %s where name = %s""",
- (start_date, end_date, salary_slip.name))
\ No newline at end of file
diff --git a/erpnext/patches/v7_2/update_website_for_variant.py b/erpnext/patches/v7_2/update_website_for_variant.py
deleted file mode 100644
index e8eef6e7da1a..000000000000
--- a/erpnext/patches/v7_2/update_website_for_variant.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # variant must have show_in_website = 0
- frappe.reload_doctype('Item')
- frappe.db.sql('''
- update tabItem set
- show_variant_in_website = 1,
- show_in_website = 0
- where
- show_in_website=1
- and ifnull(variant_of, "")!=""''')
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/__init__.py b/erpnext/patches/v8_0/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v8_0/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v8_0/addresses_linked_to_lead.py b/erpnext/patches/v8_0/addresses_linked_to_lead.py
deleted file mode 100644
index b5f22342284c..000000000000
--- a/erpnext/patches/v8_0/addresses_linked_to_lead.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.sql("""UPDATE `tabDynamic Link` SET link_doctype = 'Lead' WHERE link_doctype = 'Load'""")
diff --git a/erpnext/patches/v8_0/change_in_words_varchar_length.py b/erpnext/patches/v8_0/change_in_words_varchar_length.py
deleted file mode 100644
index 68ff95b5ed77..000000000000
--- a/erpnext/patches/v8_0/change_in_words_varchar_length.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- doctypes = frappe.db.sql_list("""select parent from tabDocField where fieldname = 'in_words'""")
-
- for dt in doctypes:
- for fieldname in ("in_words", "base_in_words"):
- frappe.db.sql("alter table `tab{0}` change column `{1}` `{2}` varchar(255)"
- .format(dt, fieldname, fieldname))
-
- frappe.db.sql("""alter table `tabJournal Entry`
- change column `total_amount_in_words` `total_amount_in_words` varchar(255)""")
diff --git a/erpnext/patches/v8_0/create_address_doc_from_address_field_in_company.py b/erpnext/patches/v8_0/create_address_doc_from_address_field_in_company.py
deleted file mode 100644
index cf1bc5af057c..000000000000
--- a/erpnext/patches/v8_0/create_address_doc_from_address_field_in_company.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # new field address_html is created in place of address field for the company's address in PR #8754 (without patch)
- # so here is the patch for moving the address details in the address doc
- company_list = []
- if 'address' in frappe.db.get_table_columns('Company'):
- company_list = frappe.db.sql('''select name, address from `tabCompany`
- where address is not null and address != ""''', as_dict=1)
-
- for company in company_list:
- add_list = company.address.split(" ")
- if ',' in company.address:
- add_list = company.address.rpartition(',')
- elif ' ' in company.address:
- add_list = company.address.rpartition(' ')
- else:
- add_list = [company.address, None, company.address]
-
- doc = frappe.get_doc({
- "doctype":"Address",
- "address_line1": add_list[0],
- "city": add_list[2],
- "links": [{
- "link_doctype": "Company",
- "link_name": company.name
- }]
- })
- doc.save()
diff --git a/erpnext/patches/v8_0/create_domain_docs.py b/erpnext/patches/v8_0/create_domain_docs.py
deleted file mode 100644
index 3ef4f3c1bb48..000000000000
--- a/erpnext/patches/v8_0/create_domain_docs.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import erpnext
-
-def execute():
- """Create domain documents"""
- frappe.reload_doc("core", "doctype", "domain")
- frappe.reload_doc("core", "doctype", "domain_settings")
- frappe.reload_doc("core", "doctype", "has_domain")
- frappe.reload_doc("core", "doctype", "role")
-
- for domain in ("Distribution", "Manufacturing", "Retail", "Services", "Education"):
- if not frappe.db.exists({"doctype": "Domain", "domain": domain}):
- create_domain(domain)
-
- # set domain in domain settings based on company domain
-
- domains = []
- condition = ""
- company = erpnext.get_default_company()
- if company:
- condition = " and name={0}".format(frappe.db.escape(company))
-
- domains = frappe.db.sql_list("select distinct domain from `tabCompany` where domain != 'Other' {0}".format(condition))
-
- if not domains:
- return
-
- domain_settings = frappe.get_doc("Domain Settings", "Domain Settings")
- checked_domains = [row.domain for row in domain_settings.active_domains]
-
- for domain in domains:
- # check and ignore if the domains is already checked in domain settings
- if domain in checked_domains:
- continue
-
- if not frappe.db.get_value("Domain", domain):
- # user added custom domain in companies domain field
- create_domain(domain)
-
- row = domain_settings.append("active_domains", dict(domain=domain))
-
- domain_settings.save(ignore_permissions=True)
-
-def create_domain(domain):
- # create new domain
-
- doc = frappe.new_doc("Domain")
- doc.domain = domain
- doc.db_update()
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/delete_bin_indexes.py b/erpnext/patches/v8_0/delete_bin_indexes.py
deleted file mode 100644
index 12cacdb95281..000000000000
--- a/erpnext/patches/v8_0/delete_bin_indexes.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-# -*- coding: utf-8 -*-
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # delete bin indexes
- unwanted_indexes = ["item_code", "warehouse"]
-
- for k in unwanted_indexes:
- try:
- frappe.db.sql("drop index {0} on `tabBin`".format(k))
- except:
- pass
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/delete_schools_depricated_doctypes.py b/erpnext/patches/v8_0/delete_schools_depricated_doctypes.py
deleted file mode 100644
index 09a78ed3ca6d..000000000000
--- a/erpnext/patches/v8_0/delete_schools_depricated_doctypes.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2017, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- """ delete doctypes """
-
- if frappe.db.exists("DocType", "Grading Structure"):
- frappe.delete_doc("DocType", "Grading Structure", force=1)
-
- if frappe.db.exists("DocType", "Grade Interval"):
- frappe.delete_doc("DocType", "Grade Interval", force=1)
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/disable_instructor_role.py b/erpnext/patches/v8_0/disable_instructor_role.py
deleted file mode 100644
index 4ba78d172cb7..000000000000
--- a/erpnext/patches/v8_0/disable_instructor_role.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- """
- disable the instructor role for companies with domain other than
- Education.
- """
-
- domains = frappe.db.sql_list("select domain from tabCompany")
- if "Education" not in domains:
- if frappe.db.exists("Role", "Instructor"):
- role = frappe.get_doc("Role", "Instructor")
- role.disabled = 1
- role.save(ignore_permissions=True)
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/enable_booking_asset_depreciation_automatically.py b/erpnext/patches/v8_0/enable_booking_asset_depreciation_automatically.py
deleted file mode 100644
index 1088d702dd0c..000000000000
--- a/erpnext/patches/v8_0/enable_booking_asset_depreciation_automatically.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.set_value("Accounts Settings", None,
- "book_asset_depreciation_entry_automatically", 1)
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/fix_status_for_invoices_with_negative_outstanding.py b/erpnext/patches/v8_0/fix_status_for_invoices_with_negative_outstanding.py
deleted file mode 100644
index 2e7f360c97be..000000000000
--- a/erpnext/patches/v8_0/fix_status_for_invoices_with_negative_outstanding.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for dt, status in [["Sales Invoice", "Credit Note Issued"], ["Purchase Invoice", "Debit Note Issued"]]:
- invoices = frappe.db.sql("""
- select name
- from `tab{0}`
- where
- status = %s
- and outstanding_amount < 0
- and docstatus=1
- and is_return=0
- """.format(dt), status)
-
- for inv in invoices:
- return_inv = frappe.db.sql("""select name from `tab{0}`
- where is_return=1 and return_against=%s and docstatus=1""".format(dt), inv[0])
- if not return_inv:
- frappe.db.sql("update `tab{0}` set status='Paid' where name = %s".format(dt), inv[0])
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/make_payments_table_blank_for_non_pos_invoice.py b/erpnext/patches/v8_0/make_payments_table_blank_for_non_pos_invoice.py
deleted file mode 100644
index 9750fb72222d..000000000000
--- a/erpnext/patches/v8_0/make_payments_table_blank_for_non_pos_invoice.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype('Sales Invoice')
-
- frappe.db.sql("""
- delete from
- `tabSales Invoice Payment`
- where
- parent in (select name from `tabSales Invoice` where is_pos = 0)
- """)
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/merge_student_batch_and_student_group.py b/erpnext/patches/v8_0/merge_student_batch_and_student_group.py
deleted file mode 100644
index fb9021fd6878..000000000000
--- a/erpnext/patches/v8_0/merge_student_batch_and_student_group.py
+++ /dev/null
@@ -1,73 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import *
-from frappe.model.mapper import get_mapped_doc
-
-
-def execute():
- # for converting student batch into student group
- for doctype in ["Student Group", "Student Group Student", 'Program Enrollment',
- "Student Group Instructor", "Student Attendance", "Student", "Student Batch Name"]:
- # 'Schools' module changed to the 'Education'
- # frappe.reload_doc("schools", "doctype", frappe.scrub(doctype))
-
- frappe.reload_doc("education", "doctype", frappe.scrub(doctype))
-
- if frappe.db.table_exists("Student Batch"):
- student_batches = frappe.db.sql('''select name as student_group_name, student_batch_name as batch,
- program, academic_year, academic_term from `tabStudent Batch`''', as_dict=1)
-
- for student_batch in student_batches:
- # create student batch name if does not exists !!
- if student_batch.get("batch") and not frappe.db.exists("Student Batch Name", student_batch.get("batch")):
- frappe.get_doc({
- "doctype": "Student Batch Name",
- "batch_name": student_batch.get("batch")
- }).insert(ignore_permissions=True)
-
- student_batch.update({"doctype":"Student Group", "group_based_on": "Batch"})
- doc = frappe.get_doc(student_batch)
-
- if frappe.db.sql("SHOW COLUMNS FROM `tabStudent Batch Student` LIKE 'active'"):
- cond = ", active"
- else:
- cond = " "
- student_list = frappe.db.sql('''select student, student_name {cond} from `tabStudent Batch Student`
- where parent=%s'''.format(cond=cond), (doc.student_group_name), as_dict=1)
-
- if student_list:
- for i, student in enumerate(student_list):
- student.update({"group_roll_number": i+1})
- doc.extend("students", student_list)
-
- instructor_list = None
- if frappe.db.table_exists("Student Batch Instructor"):
- instructor_list = frappe.db.sql('''select instructor, instructor_name from `tabStudent Batch Instructor`
- where parent=%s''', (doc.student_group_name), as_dict=1)
- if instructor_list:
- doc.extend("instructors", instructor_list)
- doc.save()
-
- # delete the student batch and child-table
- if frappe.db.table_exists("Student Batch"):
- frappe.delete_doc("DocType", "Student Batch", force=1)
- if frappe.db.table_exists("Student Batch Student"):
- frappe.delete_doc("DocType", "Student Batch Student", force=1)
- if frappe.db.table_exists("Student Batch Instructor"):
- frappe.delete_doc("DocType", "Student Batch Instructor", force=1)
-
- # delete the student batch creation tool
- if frappe.db.table_exists("Student Batch Creation Tool"):
- frappe.delete_doc("DocType", "Student Batch Creation Tool", force=1)
-
- # delete the student batch creation tool
- if frappe.db.table_exists("Attendance Tool Student"):
- frappe.delete_doc("DocType", "Attendance Tool Student", force=1)
-
- # change the student batch to student group in the student attendance
- table_columns = frappe.db.get_table_columns("Student Attendance")
- if "student_batch" in table_columns:
- rename_field("Student Attendance", "student_batch", "student_group")
diff --git a/erpnext/patches/v8_0/move_account_head_from_account_to_warehouse_for_inventory.py b/erpnext/patches/v8_0/move_account_head_from_account_to_warehouse_for_inventory.py
deleted file mode 100644
index b59d81831f17..000000000000
--- a/erpnext/patches/v8_0/move_account_head_from_account_to_warehouse_for_inventory.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Warehouse")
- frappe.db.sql("""
- update
- `tabWarehouse`
- set
- account = (select name from `tabAccount`
- where account_type = 'Stock' and
- warehouse = `tabWarehouse`.name and is_group = 0 limit 1)""")
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/move_perpetual_inventory_setting.py b/erpnext/patches/v8_0/move_perpetual_inventory_setting.py
deleted file mode 100644
index 78322d4575ef..000000000000
--- a/erpnext/patches/v8_0/move_perpetual_inventory_setting.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype('Company')
- enabled = frappe.db.get_single_value("Accounts Settings", "auto_accounting_for_stock") or 0
- for data in frappe.get_all('Company', fields = ["name"]):
- doc = frappe.get_doc('Company', data.name)
- doc.enable_perpetual_inventory = enabled
- doc.db_update()
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/rename_is_sample_item_to_allow_zero_valuation_rate.py b/erpnext/patches/v8_0/rename_is_sample_item_to_allow_zero_valuation_rate.py
deleted file mode 100644
index e517df5fdb9f..000000000000
--- a/erpnext/patches/v8_0/rename_is_sample_item_to_allow_zero_valuation_rate.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
-
- doc_list = ["Purchase Invoice Item", "Stock Entry Detail", "Delivery Note Item",
- "Purchase Receipt Item", "Sales Invoice Item"]
-
- for doctype in doc_list:
- frappe.reload_doctype(doctype)
- if "is_sample_item" in frappe.db.get_table_columns(doctype):
- rename_field(doctype, "is_sample_item", "allow_zero_valuation_rate")
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/rename_items_in_status_field_of_material_request.py b/erpnext/patches/v8_0/rename_items_in_status_field_of_material_request.py
deleted file mode 100644
index 5ad862a43626..000000000000
--- a/erpnext/patches/v8_0/rename_items_in_status_field_of_material_request.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.sql(
- """
- UPDATE `tabMaterial Request`
- SET status = CASE
- WHEN docstatus = 2 THEN 'Cancelled'
- WHEN docstatus = 0 THEN 'Draft'
- ELSE CASE
- WHEN status = 'Stopped' THEN 'Stopped'
- WHEN status != 'Stopped' AND per_ordered = 0 THEN 'Pending'
- WHEN per_ordered < 100 AND per_ordered > 0 AND status != 'Stopped'
- THEN 'Partially Ordered'
- WHEN per_ordered = 100 AND material_request_type = 'Purchase'
- AND status != 'Stopped' THEN 'Ordered'
- WHEN per_ordered = 100 AND material_request_type = 'Material Transfer'
- AND status != 'Stopped' THEN 'Transferred'
- WHEN per_ordered = 100 AND material_request_type = 'Material Issue'
- AND status != 'Stopped' THEN 'Issued'
- END
- END
- """
- )
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/rename_total_margin_to_rate_with_margin.py b/erpnext/patches/v8_0/rename_total_margin_to_rate_with_margin.py
deleted file mode 100644
index 406543879615..000000000000
--- a/erpnext/patches/v8_0/rename_total_margin_to_rate_with_margin.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
- """
- Rename Total Margin field to Rate With Margin in
- "Sales Order Item", "Sales Invoice Item", "Delivery Note Item",
- "Quotation Item"
- """
-
- for d in ("Sales Order Item", "Sales Invoice Item",
- "Delivery Note Item", "Quotation Item"):
- frappe.reload_doctype(d)
- rename_field_if_exists(d, "total_margin", "rate_with_margin")
-
-
-def rename_field_if_exists(doctype, old_fieldname, new_fieldname):
- try:
- rename_field(doctype, old_fieldname, new_fieldname)
- except Exception as e:
- if e.args[0] != 1054:
- raise
diff --git a/erpnext/patches/v8_0/repost_reserved_qty_for_multiple_sales_uom.py b/erpnext/patches/v8_0/repost_reserved_qty_for_multiple_sales_uom.py
deleted file mode 100644
index 3030b8e2f37e..000000000000
--- a/erpnext/patches/v8_0/repost_reserved_qty_for_multiple_sales_uom.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.stock_balance import update_bin_qty, get_reserved_qty
-
-def execute():
- for doctype in ("Sales Order Item", "Bin"):
- frappe.reload_doctype(doctype)
-
- repost_for = frappe.db.sql("""select distinct item_code, warehouse
- from `tabSales Order Item` where docstatus=1 and uom != stock_uom and
- exists(select name from tabItem where name=`tabSales Order Item`.item_code and ifnull(is_stock_item, 0)=1)""")
-
- for item_code, warehouse in repost_for:
- update_bin_qty(item_code, warehouse, {
- "reserved_qty": get_reserved_qty(item_code, warehouse)
- })
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/revert_manufacturers_table_from_item.py b/erpnext/patches/v8_0/revert_manufacturers_table_from_item.py
deleted file mode 100644
index 60cbb33b80b7..000000000000
--- a/erpnext/patches/v8_0/revert_manufacturers_table_from_item.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if frappe.db.exists("DocType", "Item Manufacturer"):
- frappe.reload_doctype("Item")
- item_manufacturers = frappe.db.sql("""
- select parent, manufacturer, manufacturer_part_no
- from `tabItem Manufacturer`
- """, as_dict=1)
-
- for im in item_manufacturers:
- frappe.db.sql("""
- update tabItem
- set manufacturer=%s, manufacturer_part_no=%s
- where name=%s
- """, (im.manufacturer, im.manufacturer_part_no, im.parent))
-
- frappe.delete_doc("DocType", "Item Manufacturer")
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/save_system_settings.py b/erpnext/patches/v8_0/save_system_settings.py
deleted file mode 100644
index d479ece8a698..000000000000
--- a/erpnext/patches/v8_0/save_system_settings.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cint
-
-def execute():
- """
- save system settings document
- """
-
- frappe.reload_doc("core", "doctype", "system_settings")
- doc = frappe.get_doc("System Settings")
- doc.flags.ignore_mandatory = True
-
- if cint(doc.currency_precision) == 0:
- doc.currency_precision = ''
-
- doc.save(ignore_permissions=True)
diff --git a/erpnext/patches/v8_0/set_null_to_serial_nos_for_disabled_sales_invoices.py b/erpnext/patches/v8_0/set_null_to_serial_nos_for_disabled_sales_invoices.py
deleted file mode 100644
index 197d6ded61a5..000000000000
--- a/erpnext/patches/v8_0/set_null_to_serial_nos_for_disabled_sales_invoices.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.stock_balance import update_bin_qty, get_reserved_qty
-
-def execute():
- frappe.db.sql("""
- update
- `tabSales Invoice Item`
- set serial_no = NULL
- where
- parent in (select name from `tabSales Invoice` where update_stock = 0 and docstatus = 1)""")
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/set_project_copied_from.py b/erpnext/patches/v8_0/set_project_copied_from.py
deleted file mode 100644
index d4287978cf8c..000000000000
--- a/erpnext/patches/v8_0/set_project_copied_from.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Project")
-
- frappe.db.sql('''
- UPDATE `tabProject`
- SET copied_from=name
- WHERE copied_from is NULL
- ''')
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/set_sales_invoice_serial_number_from_delivery_note.py b/erpnext/patches/v8_0/set_sales_invoice_serial_number_from_delivery_note.py
deleted file mode 100644
index 8a4ef4086b68..000000000000
--- a/erpnext/patches/v8_0/set_sales_invoice_serial_number_from_delivery_note.py
+++ /dev/null
@@ -1,42 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.stock.stock_balance import update_bin_qty, get_reserved_qty
-
-def execute():
- """ Set the Serial Numbers in Sales Invoice Item from Delivery Note Item """
-
- frappe.reload_doc("stock", "doctype", "serial_no")
-
- frappe.db.sql(""" update `tabSales Invoice Item` sii inner join
- `tabDelivery Note Item` dni on sii.dn_detail=dni.name and sii.qty=dni.qty
- set sii.serial_no=dni.serial_no where sii.parent IN (select si.name
- from `tabSales Invoice` si where si.update_stock=0 and si.docstatus=1)""")
-
- items = frappe.db.sql(""" select sii.parent, sii.serial_no from `tabSales Invoice Item` sii
- left join `tabSales Invoice` si on sii.parent=si.name
- where si.docstatus=1 and si.update_stock=0""", as_dict=True)
-
- for item in items:
- sales_invoice = item.get("parent", None)
- serial_nos = item.get("serial_no", "")
-
- if not sales_invoice or not serial_nos:
- continue
-
- serial_nos = ["{}".format(frappe.db.escape(no)) for no in serial_nos.split("\n")]
-
- frappe.db.sql("""
- UPDATE
- `tabSerial No`
- SET
- sales_invoice={sales_invoice}
- WHERE
- name in ({serial_nos})
- """.format(
- sales_invoice=frappe.db.escape(sales_invoice),
- serial_nos=",".join(serial_nos)
- )
- )
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/update_customer_pos_id.py b/erpnext/patches/v8_0/update_customer_pos_id.py
deleted file mode 100644
index a772ae90c5d1..000000000000
--- a/erpnext/patches/v8_0/update_customer_pos_id.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Customer")
- frappe.db.sql(""" update `tabCustomer` set customer_pos_id = name """)
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/update_production_orders.py b/erpnext/patches/v8_0/update_production_orders.py
deleted file mode 100644
index 8e993cc1020c..000000000000
--- a/erpnext/patches/v8_0/update_production_orders.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # reload schema
- for doctype in ("Work Order", "Work Order Item", "Work Order Operation",
- "BOM Item", "BOM Explosion Item", "BOM"):
- frappe.reload_doctype(doctype)
-
- frappe.reload_doc("stock", "doctype", "item")
- frappe.reload_doc("stock", "doctype", "item_default")
-
- # fetch all draft and submitted work orders
- fields = ["name"]
- if "source_warehouse" in frappe.db.get_table_columns("Work Order"):
- fields.append("source_warehouse")
-
- wo_orders = frappe.get_all("Work Order", filters={"docstatus": ["!=", 2]}, fields=fields)
-
- count = 0
- for p in wo_orders:
- wo_order = frappe.get_doc("Work Order", p.name)
- count += 1
-
- # set required items table
- wo_order.set_required_items()
-
- for item in wo_order.get("required_items"):
- # set source warehouse based on parent
- if not item.source_warehouse and "source_warehouse" in fields:
- item.source_warehouse = wo_order.get("source_warehouse")
- item.db_update()
-
- if wo_order.docstatus == 1:
- # update transferred qty based on Stock Entry, it also updates db
- wo_order.update_transaferred_qty_for_required_items()
-
- # Set status where it was 'Unstopped', as it is deprecated
- if wo_order.status == "Unstopped":
- status = wo_order.get_status()
- wo_order.db_set("status", status)
- elif wo_order.status == "Stopped":
- wo_order.update_reserved_qty_for_production()
-
- if count % 200 == 0:
- frappe.db.commit()
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/update_sales_cost_in_project.py b/erpnext/patches/v8_0/update_sales_cost_in_project.py
deleted file mode 100644
index 1a29fc4db4fb..000000000000
--- a/erpnext/patches/v8_0/update_sales_cost_in_project.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("projects", "doctype", "project")
-
- frappe.db.sql("""
- update `tabProject` p
- set total_sales_amount = ifnull((select sum(base_grand_total)
- from `tabSales Order` where project=p.name and docstatus=1), 0)
- """)
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/update_status_as_paid_for_completed_expense_claim.py b/erpnext/patches/v8_0/update_status_as_paid_for_completed_expense_claim.py
deleted file mode 100644
index 19d27b206b19..000000000000
--- a/erpnext/patches/v8_0/update_status_as_paid_for_completed_expense_claim.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- """ set status as Paid in Expense Claim if total_sactioned_amount
- and total_amount_reimbursed is equal """
-
- frappe.reload_doctype('Expense Claim')
-
- frappe.db.sql("""
- update
- `tabExpense Claim`
- set status = 'Paid'
- where
- total_sanctioned_amount = total_amount_reimbursed
- """)
diff --git a/erpnext/patches/v8_0/update_stock_qty_value_in_bom_item.py b/erpnext/patches/v8_0/update_stock_qty_value_in_bom_item.py
deleted file mode 100644
index 1f937bb8af8f..000000000000
--- a/erpnext/patches/v8_0/update_stock_qty_value_in_bom_item.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('manufacturing', 'doctype', 'bom_item')
- frappe.reload_doc('manufacturing', 'doctype', 'bom_explosion_item')
- frappe.reload_doc('manufacturing', 'doctype', 'bom_scrap_item')
- frappe.db.sql("update `tabBOM Item` set stock_qty = qty, uom = stock_uom, conversion_factor = 1")
- frappe.db.sql("update `tabBOM Explosion Item` set stock_qty = qty")
- if "qty" in frappe.db.get_table_columns("BOM Scrap Item"):
- frappe.db.sql("update `tabBOM Scrap Item` set stock_qty = qty")
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/update_stock_qty_value_in_purchase_invoice.py b/erpnext/patches/v8_0/update_stock_qty_value_in_purchase_invoice.py
deleted file mode 100644
index be5cf3aed77e..000000000000
--- a/erpnext/patches/v8_0/update_stock_qty_value_in_purchase_invoice.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('accounts', 'doctype', 'purchase_invoice_item')
- frappe.db.sql("update `tabPurchase Invoice Item` set stock_qty = qty, stock_uom = uom")
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/update_student_groups_from_student_batches.py b/erpnext/patches/v8_0/update_student_groups_from_student_batches.py
deleted file mode 100644
index ae24fe4a14e5..000000000000
--- a/erpnext/patches/v8_0/update_student_groups_from_student_batches.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import *
-from frappe.model.mapper import get_mapped_doc
-
-
-def execute():
- if frappe.db.table_exists("Student Batch"):
- student_batches = frappe.db.sql('''select name from `tabStudent Batch`''', as_dict=1)
-
- for student_batch in student_batches:
- if frappe.db.exists("Student Group", student_batch.get("name")):
- student_group = frappe.get_doc("Student Group", student_batch.get("name"))
-
- if frappe.db.table_exists("Student Batch Student"):
- current_student_list = frappe.db.sql_list('''select student from `tabStudent Group Student`
- where parent=%s''', (student_group.name))
- batch_student_list = frappe.db.sql_list('''select student from `tabStudent Batch Student`
- where parent=%s''', (student_group.name))
-
- student_list = list(set(batch_student_list)-set(current_student_list))
- if student_list:
- student_group.extend("students", [{"student":d} for d in student_list])
-
- if frappe.db.table_exists("Student Batch Instructor"):
- current_instructor_list = frappe.db.sql_list('''select instructor from `tabStudent Group Instructor`
- where parent=%s''', (student_group.name))
- batch_instructor_list = frappe.db.sql_list('''select instructor from `tabStudent Batch Instructor`
- where parent=%s''', (student_group.name))
-
- instructor_list = list(set(batch_instructor_list)-set(current_instructor_list))
- if instructor_list:
- student_group.extend("instructors", [{"instructor":d} for d in instructor_list])
-
- student_group.save()
diff --git a/erpnext/patches/v8_0/update_supplier_address_in_stock_entry.py b/erpnext/patches/v8_0/update_supplier_address_in_stock_entry.py
deleted file mode 100644
index a2173048fd49..000000000000
--- a/erpnext/patches/v8_0/update_supplier_address_in_stock_entry.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # copy supplier_address to address_display, and set supplier_address to blank
-
- stock_entries = frappe.db.sql(""" select name, purchase_order, supplier_address from `tabStock Entry`
- where ifnull(supplier_address, '') <> ''""", as_dict=True)
-
- frappe.reload_doc('stock', 'doctype', 'stock_entry')
-
- for stock_entry in stock_entries:
- # move supplier address to address_display, and fetch the supplier address from purchase order
-
- se = frappe.get_doc("Stock Entry", stock_entry.get("name"))
- se.address_display = stock_entry.get("supplier_address")
- se.supplier_address = frappe.db.get_value("Purchase Order", stock_entry.get("purchase_order"),"supplier_address") or None
-
- se.db_update()
diff --git a/erpnext/patches/v8_1/__init__.py b/erpnext/patches/v8_1/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v8_1/add_hsn_sac_codes.py b/erpnext/patches/v8_1/add_hsn_sac_codes.py
deleted file mode 100644
index 0fce96a8d4e4..000000000000
--- a/erpnext/patches/v8_1/add_hsn_sac_codes.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext.regional.india.setup import setup
-
-def execute():
- company = frappe.get_all('Company', filters = {'country': 'India'})
- if not company:
- return
-
- # call setup for india
- setup(patch=True)
\ No newline at end of file
diff --git a/erpnext/patches/v8_1/add_indexes_in_transaction_doctypes.py b/erpnext/patches/v8_1/add_indexes_in_transaction_doctypes.py
deleted file mode 100644
index 463160260685..000000000000
--- a/erpnext/patches/v8_1/add_indexes_in_transaction_doctypes.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for dt in ("Sales Order Item", "Purchase Order Item",
- "Material Request Item", "Work Order Item", "Packed Item"):
- frappe.get_doc("DocType", dt).run_module_method("on_doctype_update")
\ No newline at end of file
diff --git a/erpnext/patches/v8_1/allow_invoice_copy_to_edit_after_submit.py b/erpnext/patches/v8_1/allow_invoice_copy_to_edit_after_submit.py
deleted file mode 100644
index 4c606af42438..000000000000
--- a/erpnext/patches/v8_1/allow_invoice_copy_to_edit_after_submit.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- inv_copy_options = "ORIGINAL FOR RECIPIENT\nDUPLICATE FOR TRANSPORTER\nDUPLICATE FOR SUPPLIER\nTRIPLICATE FOR SUPPLIER"
-
- frappe.db.sql("""update `tabCustom Field` set allow_on_submit=1, options=%s
- where fieldname='invoice_copy' and dt = 'Sales Invoice'
- """, inv_copy_options)
-
- frappe.db.sql("""update `tabCustom Field` set read_only=1
- where fieldname='gst_state_number' and dt = 'Address'
- """)
diff --git a/erpnext/patches/v8_1/delete_deprecated_reports.py b/erpnext/patches/v8_1/delete_deprecated_reports.py
deleted file mode 100644
index 3e0fdee7192a..000000000000
--- a/erpnext/patches/v8_1/delete_deprecated_reports.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- """ delete deprecated reports """
-
- reports = [
- "Monthly Salary Register", "Customer Addresses And Contacts",
- "Supplier Addresses And Contacts"
- ]
-
- for report in reports:
- if frappe.db.exists("Report", report):
- check_and_update_auto_email_report(report)
- frappe.db.commit()
-
- frappe.delete_doc("Report", report, ignore_permissions=True)
-
-def check_and_update_auto_email_report(report):
- """ delete or update auto email report for deprecated report """
-
- auto_email_report = frappe.db.get_value("Auto Email Report", {"report": report})
- if not auto_email_report:
- return
-
- if report == "Monthly Salary Register":
- frappe.delete_doc("Auto Email Report", auto_email_report)
-
- elif report in ["Customer Addresses And Contacts", "Supplier Addresses And Contacts"]:
- frappe.db.set_value("Auto Email Report", auto_email_report, "report", report)
\ No newline at end of file
diff --git a/erpnext/patches/v8_1/gst_fixes.py b/erpnext/patches/v8_1/gst_fixes.py
deleted file mode 100644
index 34255eb0a42a..000000000000
--- a/erpnext/patches/v8_1/gst_fixes.py
+++ /dev/null
@@ -1,62 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.custom.doctype.custom_field.custom_field import create_custom_field
-from erpnext.regional.address_template.setup import set_up_address_templates
-
-
-def execute():
- company = frappe.get_all('Company', filters = {'country': 'India'})
- if not company:
- return
-
- update_existing_custom_fields()
- add_custom_fields()
- set_up_address_templates(default_country='India')
- frappe.reload_doc("regional", "print_format", "gst_tax_invoice")
-
-
-def update_existing_custom_fields():
- frappe.db.sql("""update `tabCustom Field` set label = 'HSN/SAC'
- where fieldname='gst_hsn_code' and label='GST HSN Code'
- """)
-
- frappe.db.sql("""update `tabCustom Field` set print_hide = 1
- where fieldname in ('customer_gstin', 'supplier_gstin', 'company_gstin')
- """)
-
- frappe.db.sql("""update `tabCustom Field` set insert_after = 'address_display'
- where fieldname in ('customer_gstin', 'supplier_gstin')
- """)
-
- frappe.db.sql("""update `tabCustom Field` set insert_after = 'company_address_display'
- where fieldname = 'company_gstin'
- """)
-
- frappe.db.sql("""update `tabCustom Field` set insert_after = 'description'
- where fieldname='gst_hsn_code' and dt in ('Sales Invoice Item', 'Purchase Invoice Item')
- """)
-
-
-def add_custom_fields():
- hsn_sac_field = dict(fieldname='gst_hsn_code', label='HSN/SAC',
- fieldtype='Data', options='item_code.gst_hsn_code', insert_after='description')
-
- custom_fields = {
- 'Address': [
- dict(fieldname='gst_state_number', label='GST State Number',
- fieldtype='Int', insert_after='gst_state'),
- ],
- 'Sales Invoice': [
- dict(fieldname='invoice_copy', label='Invoice Copy',
- fieldtype='Select', insert_after='project', print_hide=1, allow_on_submit=1,
- options='ORIGINAL FOR RECIPIENT\nDUPLICATE FOR TRANSPORTER\nTRIPLICATE FOR SUPPLIER'),
- ],
- 'Sales Order Item': [hsn_sac_field],
- 'Delivery Note Item': [hsn_sac_field],
- 'Purchase Order Item': [hsn_sac_field],
- 'Purchase Receipt Item': [hsn_sac_field]
- }
-
- for doctype, fields in custom_fields.items():
- for df in fields:
- create_custom_field(doctype, df)
diff --git a/erpnext/patches/v8_1/remove_sales_invoice_from_returned_serial_no.py b/erpnext/patches/v8_1/remove_sales_invoice_from_returned_serial_no.py
deleted file mode 100644
index 3962f8f1f212..000000000000
--- a/erpnext/patches/v8_1/remove_sales_invoice_from_returned_serial_no.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Serial No")
-
- frappe.db.sql("""
- update
- `tabSerial No`
- set
- sales_invoice = NULL
- where
- sales_invoice in (select return_against from
- `tabSales Invoice` where docstatus =1 and is_return=1)
- and sales_invoice is not null and sales_invoice !='' """)
\ No newline at end of file
diff --git a/erpnext/patches/v8_1/removed_report_support_hours.py b/erpnext/patches/v8_1/removed_report_support_hours.py
deleted file mode 100644
index 0936b2231bba..000000000000
--- a/erpnext/patches/v8_1/removed_report_support_hours.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.sql(""" update `tabAuto Email Report` set report = %s
- where name = %s""", ('Support Hour Distribution', 'Support Hours'))
-
- frappe.db.sql(""" update `tabCustom Role` set report = %s
- where report = %s""", ('Support Hour Distribution', 'Support Hours'))
-
- frappe.delete_doc('Report', 'Support Hours')
\ No newline at end of file
diff --git a/erpnext/patches/v8_1/set_delivery_date_in_so_item.py b/erpnext/patches/v8_1/set_delivery_date_in_so_item.py
deleted file mode 100644
index af2d28b857f0..000000000000
--- a/erpnext/patches/v8_1/set_delivery_date_in_so_item.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Sales Order")
- frappe.reload_doctype("Sales Order Item")
-
- if "final_delivery_date" in frappe.db.get_table_columns("Sales Order"):
- frappe.db.sql("""
- update `tabSales Order`
- set delivery_date = final_delivery_date
- where (delivery_date is null or delivery_date = '0000-00-00')
- and order_type = 'Sales'""")
-
- frappe.db.sql("""
- update `tabSales Order` so, `tabSales Order Item` so_item
- set so_item.delivery_date = so.delivery_date
- where so.name = so_item.parent
- and so.order_type = 'Sales'
- and (so_item.delivery_date is null or so_item.delivery_date = '0000-00-00')
- and (so.delivery_date is not null and so.delivery_date != '0000-00-00')
- """)
\ No newline at end of file
diff --git a/erpnext/patches/v8_1/update_expense_claim_status.py b/erpnext/patches/v8_1/update_expense_claim_status.py
deleted file mode 100644
index 4c1b85a13f04..000000000000
--- a/erpnext/patches/v8_1/update_expense_claim_status.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype('Expense Claim')
-
- for data in frappe.db.sql(""" select name from `tabExpense Claim`
- where (docstatus=1 and total_sanctioned_amount=0 and status = 'Paid') or
- (docstatus = 1 and approval_status = 'Rejected' and total_sanctioned_amount > 0)""", as_dict=1):
- doc = frappe.get_doc('Expense Claim', data.name)
- if doc.approval_status == 'Rejected':
- for d in doc.expenses:
- d.db_set("sanctioned_amount", 0, update_modified = False)
- doc.db_set("total_sanctioned_amount", 0, update_modified = False)
-
- frappe.db.sql(""" delete from `tabGL Entry` where voucher_type = 'Expense Claim'
- and voucher_no = %s""", (doc.name))
-
- doc.set_status()
- doc.db_set("status", doc.status, update_modified = False)
\ No newline at end of file
diff --git a/erpnext/patches/v8_1/update_gst_state.py b/erpnext/patches/v8_1/update_gst_state.py
deleted file mode 100644
index 7aaf2d5ff31f..000000000000
--- a/erpnext/patches/v8_1/update_gst_state.py
+++ /dev/null
@@ -1,15 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext.regional.india import states
-
-def execute():
- company = frappe.get_all('Company', filters = {'country': 'India'})
- if not company:
- return
-
- if not frappe.db.get_value("Custom Field", filters={'fieldname':'gst_state'}):
- return
-
- frappe.db.sql("update `tabCustom Field` set options=%s where fieldname='gst_state'", '\n'.join(states))
- frappe.db.sql("update `tabAddress` set gst_state='Chhattisgarh' where gst_state='Chattisgarh'")
- frappe.db.sql("update `tabAddress` set gst_state_number='05' where gst_state='Uttarakhand'")
diff --git a/erpnext/patches/v8_10/__init__.py b/erpnext/patches/v8_10/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v8_10/change_default_customer_credit_days.py b/erpnext/patches/v8_10/change_default_customer_credit_days.py
deleted file mode 100644
index 992be17da044..000000000000
--- a/erpnext/patches/v8_10/change_default_customer_credit_days.py
+++ /dev/null
@@ -1,89 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-
-def execute():
- frappe.reload_doc("selling", "doctype", "customer")
- frappe.reload_doc("buying", "doctype", "supplier")
- frappe.reload_doc("setup", "doctype", "supplier_type")
- frappe.reload_doc("accounts", "doctype", "payment_term")
- frappe.reload_doc("accounts", "doctype", "payment_terms_template_detail")
- frappe.reload_doc("accounts", "doctype", "payment_terms_template")
-
- payment_terms = []
- records = []
- for doctype in ("Customer", "Supplier", "Supplier Type"):
- credit_days = frappe.db.sql("""
- SELECT DISTINCT `credit_days`, `credit_days_based_on`, `name`
- from `tab{0}`
- where
- ((credit_days_based_on='Fixed Days' or credit_days_based_on is null)
- and credit_days is not null)
- or credit_days_based_on='Last Day of the Next Month'
- """.format(doctype))
-
- credit_records = ((record[0], record[1], record[2]) for record in credit_days)
- for days, based_on, party_name in credit_records:
- if based_on == "Fixed Days":
- pyt_template_name = 'Default Payment Term - N{0}'.format(days)
- else:
- pyt_template_name = 'Default Payment Term - EO2M'
-
- if not frappe.db.exists("Payment Terms Template", pyt_template_name):
- payment_term = make_payment_term(days, based_on)
- template = make_template(payment_term)
- else:
- template = frappe.get_doc("Payment Terms Template", pyt_template_name)
-
- payment_terms.append('WHEN `name`={0} THEN {1}'.format(frappe.db.escape(party_name), template.template_name))
- records.append(frappe.db.escape(party_name))
-
- begin_query_str = "UPDATE `tab{0}` SET `payment_terms` = CASE ".format(doctype)
- value_query_str = " ".join(payment_terms)
- cond_query_str = " ELSE `payment_terms` END WHERE "
-
- if records:
- frappe.db.sql(
- begin_query_str + value_query_str + cond_query_str + '`name` IN %s',
- (records,)
- )
-
-
-def make_template(payment_term):
- doc = frappe.new_doc('Payment Terms Template Detail')
- doc.payment_term = payment_term.payment_term_name
- doc.due_date_based_on = payment_term.due_date_based_on
- doc.invoice_portion = payment_term.invoice_portion
- doc.description = payment_term.description
- doc.credit_days = payment_term.credit_days
- doc.credit_months = payment_term.credit_months
-
- template = frappe.new_doc('Payment Terms Template')
- template.template_name = 'Default Payment Term - {0}'.format(payment_term.payment_term_name)
- template.append('terms', doc)
- template.save()
-
- return template
-
-
-def make_payment_term(days, based_on):
- based_on_map = {
- 'Fixed Days': 'Day(s) after invoice date',
- 'Last Day of the Next Month': 'Month(s) after the end of the invoice month'
- }
-
- doc = frappe.new_doc('Payment Term')
- doc.due_date_based_on = based_on_map.get(based_on)
- doc.invoice_portion = 100
-
- if based_on == 'Fixed Days':
- doc.credit_days = days
- doc.description = 'Net payable within {0} days'.format(days)
- doc.payment_term_name = 'N{0}'.format(days)
- else:
- doc.credit_months = 1
- doc.description = 'Net payable by the end of next month'
- doc.payment_term_name = 'EO2M'
-
- doc.save()
- return doc
diff --git a/erpnext/patches/v8_3/__init__.py b/erpnext/patches/v8_3/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v8_3/set_restrict_to_domain_for_module_def.py b/erpnext/patches/v8_3/set_restrict_to_domain_for_module_def.py
deleted file mode 100644
index 6c4c6d5bd8d0..000000000000
--- a/erpnext/patches/v8_3/set_restrict_to_domain_for_module_def.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- """ set the restrict to domain in module def """
- pass
\ No newline at end of file
diff --git a/erpnext/patches/v8_3/update_company_total_sales.py b/erpnext/patches/v8_3/update_company_total_sales.py
deleted file mode 100644
index 78efecb3872e..000000000000
--- a/erpnext/patches/v8_3/update_company_total_sales.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.setup.doctype.company.company import update_company_current_month_sales, update_company_monthly_sales
-
-def execute():
- '''Update company monthly sales history based on sales invoices'''
- frappe.reload_doctype("Company")
- companies = [d['name'] for d in frappe.get_list("Company")]
-
- for company in companies:
- update_company_current_month_sales(company)
- update_company_monthly_sales(company)
diff --git a/erpnext/patches/v8_4/__init__.py b/erpnext/patches/v8_4/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v8_4/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v8_4/make_scorecard_records.py b/erpnext/patches/v8_4/make_scorecard_records.py
deleted file mode 100644
index 73afa277b4b7..000000000000
--- a/erpnext/patches/v8_4/make_scorecard_records.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-from erpnext.buying.doctype.supplier_scorecard.supplier_scorecard import make_default_records
-def execute():
- frappe.reload_doc('buying', 'doctype', 'supplier_scorecard_variable')
- frappe.reload_doc('buying', 'doctype', 'supplier_scorecard_standing')
- make_default_records()
\ No newline at end of file
diff --git a/erpnext/patches/v8_5/__init__.py b/erpnext/patches/v8_5/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v8_5/fix_tax_breakup_for_non_invoice_docs.py b/erpnext/patches/v8_5/fix_tax_breakup_for_non_invoice_docs.py
deleted file mode 100644
index 82beba377026..000000000000
--- a/erpnext/patches/v8_5/fix_tax_breakup_for_non_invoice_docs.py
+++ /dev/null
@@ -1,48 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from erpnext.regional.india.setup import make_custom_fields
-from erpnext.controllers.taxes_and_totals import get_itemised_tax_breakup_html
-
-def execute():
- companies = [d.name for d in frappe.get_all('Company', filters = {'country': 'India'})]
- if not companies:
- return
-
- make_custom_fields()
-
- # update invoice copy value
- values = ["Original for Recipient", "Duplicate for Transporter",
- "Duplicate for Supplier", "Triplicate for Supplier"]
- for d in values:
- frappe.db.sql("update `tabSales Invoice` set invoice_copy=%s where invoice_copy=%s", (d, d))
-
- # update tax breakup in transactions made after 1st July 2017
- doctypes = ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice",
- "Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice"]
-
- for doctype in doctypes:
- frappe.reload_doctype(doctype)
-
- date_field = "posting_date"
- if doctype in ["Quotation", "Sales Order", "Supplier Quotation", "Purchase Order"]:
- date_field = "transaction_date"
-
- records = [d.name for d in frappe.get_all(doctype, filters={
- "docstatus": ["!=", 2],
- date_field: [">=", "2017-07-01"],
- "company": ["in", companies],
- "total_taxes_and_charges": [">", 0],
- "other_charges_calculation": ""
- })]
- if records:
- frappe.db.sql("""
- update `tab%s Item` dt_item
- set gst_hsn_code = (select gst_hsn_code from tabItem where name=dt_item.item_code)
- where parent in (%s)
- and (gst_hsn_code is null or gst_hsn_code = '')
- """ % (doctype, ', '.join(['%s']*len(records))), tuple(records))
-
- for record in records:
- doc = frappe.get_doc(doctype, record)
- html = get_itemised_tax_breakup_html(doc)
- doc.db_set("other_charges_calculation", html, update_modified=False)
\ No newline at end of file
diff --git a/erpnext/patches/v8_5/remove_project_type_property_setter.py b/erpnext/patches/v8_5/remove_project_type_property_setter.py
deleted file mode 100644
index 70a08f537767..000000000000
--- a/erpnext/patches/v8_5/remove_project_type_property_setter.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- ps = frappe.db.get_value('Property Setter', dict(doc_type='Project', field_name='project_type',
- property='options'))
- if ps:
- frappe.delete_doc('Property Setter', ps)
-
- project_types = frappe.db.sql_list('select distinct project_type from tabProject')
-
- for project_type in project_types:
- if project_type and not frappe.db.exists("Project Type", project_type):
- p_type = frappe.get_doc({
- "doctype": "Project Type",
- "project_type": project_type
- })
- p_type.insert()
\ No newline at end of file
diff --git a/erpnext/patches/v8_5/remove_quotations_route_in_sidebar.py b/erpnext/patches/v8_5/remove_quotations_route_in_sidebar.py
deleted file mode 100644
index 2d7df4a179d0..000000000000
--- a/erpnext/patches/v8_5/remove_quotations_route_in_sidebar.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Portal Settings")
-
- frappe.db.sql("""
- delete from
- `tabPortal Menu Item`
- where
- (route = '/quotations' and title = 'Supplier Quotation')
- or (route = '/quotation' and title = 'Quotations')
- """)
\ No newline at end of file
diff --git a/erpnext/patches/v8_5/set_default_mode_of_payment.py b/erpnext/patches/v8_5/set_default_mode_of_payment.py
deleted file mode 100644
index 34ecbb0a3c30..000000000000
--- a/erpnext/patches/v8_5/set_default_mode_of_payment.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("POS Profile")
- frappe.reload_doctype("Sales Invoice Payment")
-
- frappe.db.sql("""
- update
- `tabSales Invoice Payment`
- set `tabSales Invoice Payment`.default = 1
- where
- `tabSales Invoice Payment`.parenttype = 'POS Profile'
- and `tabSales Invoice Payment`.idx=1""")
\ No newline at end of file
diff --git a/erpnext/patches/v8_5/update_customer_group_in_POS_profile.py b/erpnext/patches/v8_5/update_customer_group_in_POS_profile.py
deleted file mode 100644
index 2661914401b7..000000000000
--- a/erpnext/patches/v8_5/update_customer_group_in_POS_profile.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype('POS Profile')
- customer_group = frappe.db.get_single_value('Selling Settings', 'customer_group')
- if customer_group:
- frappe.db.sql(""" update `tabPOS Profile`
- set customer_group = %s where customer_group is null """, (customer_group))
\ No newline at end of file
diff --git a/erpnext/patches/v8_5/update_existing_data_in_project_type.py b/erpnext/patches/v8_5/update_existing_data_in_project_type.py
deleted file mode 100644
index 497da0602e3a..000000000000
--- a/erpnext/patches/v8_5/update_existing_data_in_project_type.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("projects", "doctype", "project_type")
- frappe.reload_doc("projects", "doctype", "project")
-
- project_types = ["Internal", "External", "Other"]
-
- for project_type in project_types:
- if not frappe.db.exists("Project Type", project_type):
- p_type = frappe.get_doc({
- "doctype": "Project Type",
- "project_type": project_type
- })
- p_type.insert()
\ No newline at end of file
diff --git a/erpnext/patches/v8_6/__init__.py b/erpnext/patches/v8_6/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v8_6/point_sms_doctype_module_to_frappe_core.py b/erpnext/patches/v8_6/point_sms_doctype_module_to_frappe_core.py
deleted file mode 100644
index 014a74abe36d..000000000000
--- a/erpnext/patches/v8_6/point_sms_doctype_module_to_frappe_core.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.sql('''UPDATE `tabDocType` SET module="Core"
- WHERE name IN ("SMS Parameter", "SMS Settings");''')
\ No newline at end of file
diff --git a/erpnext/patches/v8_6/rename_bom_update_tool.py b/erpnext/patches/v8_6/rename_bom_update_tool.py
deleted file mode 100644
index ef5f335e45ff..000000000000
--- a/erpnext/patches/v8_6/rename_bom_update_tool.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.delete_doc_if_exists("DocType", "BOM Replace Tool")
-
- frappe.reload_doctype("BOM")
- frappe.db.sql("update tabBOM set conversion_rate=1 where conversion_rate is null or conversion_rate=0")
- frappe.db.sql("update tabBOM set set_rate_of_sub_assembly_item_based_on_bom=1")
\ No newline at end of file
diff --git a/erpnext/patches/v8_6/set_write_permission_for_quotation_for_sales_manager.py b/erpnext/patches/v8_6/set_write_permission_for_quotation_for_sales_manager.py
deleted file mode 100644
index db4f94748e1b..000000000000
--- a/erpnext/patches/v8_6/set_write_permission_for_quotation_for_sales_manager.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # Set write permission to permlevel 1 for sales manager role in Quotation doctype
- frappe.db.sql(""" update `tabCustom DocPerm` set `tabCustom DocPerm`.write = 1
- where `tabCustom DocPerm`.parent = 'Quotation' and `tabCustom DocPerm`.role = 'Sales Manager'
- and `tabCustom DocPerm`.permlevel = 1 """)
\ No newline at end of file
diff --git a/erpnext/patches/v8_6/update_timesheet_company_from_PO.py b/erpnext/patches/v8_6/update_timesheet_company_from_PO.py
deleted file mode 100644
index 2d46bee7caa5..000000000000
--- a/erpnext/patches/v8_6/update_timesheet_company_from_PO.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype('Timesheet')
- company = frappe.get_all('Company')
-
- #Check more than one company exists
- if len(company) > 1:
- frappe.db.sql(""" update `tabTimesheet` set `tabTimesheet`.company =
- (select company from `tabWork Order` where name = `tabTimesheet`.work_order)
- where workn_order is not null and work_order !=''""")
\ No newline at end of file
diff --git a/erpnext/patches/v8_7/__init__.py b/erpnext/patches/v8_7/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v8_7/fix_purchase_receipt_status.py b/erpnext/patches/v8_7/fix_purchase_receipt_status.py
deleted file mode 100644
index 99ecb4421491..000000000000
--- a/erpnext/patches/v8_7/fix_purchase_receipt_status.py
+++ /dev/null
@@ -1,13 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # there is no more status called "Submitted", there was an old issue that used
- # to set it as Submitted, fixed in this commit
- frappe.db.sql("""
- update
- `tabPurchase Receipt`
- set
- status = 'To Bill'
- where
- status = 'Submitted'""")
\ No newline at end of file
diff --git a/erpnext/patches/v8_7/make_subscription_from_recurring_data.py b/erpnext/patches/v8_7/make_subscription_from_recurring_data.py
deleted file mode 100644
index 2932749116f7..000000000000
--- a/erpnext/patches/v8_7/make_subscription_from_recurring_data.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import today
-
-def execute():
- frappe.reload_doc('accounts', 'doctype', 'subscription')
- frappe.reload_doc('selling', 'doctype', 'sales_order')
- frappe.reload_doc('selling', 'doctype', 'quotation')
- frappe.reload_doc('buying', 'doctype', 'purchase_order')
- frappe.reload_doc('buying', 'doctype', 'supplier_quotation')
- frappe.reload_doc('accounts', 'doctype', 'sales_invoice')
- frappe.reload_doc('accounts', 'doctype', 'purchase_invoice')
- frappe.reload_doc('stock', 'doctype', 'purchase_receipt')
- frappe.reload_doc('stock', 'doctype', 'delivery_note')
- frappe.reload_doc('accounts', 'doctype', 'journal_entry')
- frappe.reload_doc('accounts', 'doctype', 'payment_entry')
-
- for doctype in ['Sales Order', 'Sales Invoice', 'Purchase Order', 'Purchase Invoice']:
- date_field = "transaction_date"
- if doctype in ("Sales Invoice", "Purchase Invoice"):
- date_field = "posting_date"
-
- for data in get_data(doctype, date_field):
- make_subscription(doctype, data, date_field)
-
-def get_data(doctype, date_field):
- return frappe.db.sql(""" select name, from_date, end_date, recurring_type, recurring_id,
- next_date, notify_by_email, notification_email_address, recurring_print_format,
- repeat_on_day_of_month, submit_on_creation, docstatus, {0}
- from `tab{1}` where is_recurring = 1 and next_date >= %s and docstatus < 2
- order by next_date desc
- """.format(date_field, doctype), today(), as_dict=1)
-
-def make_subscription(doctype, data, date_field):
- if data.name == data.recurring_id:
- start_date = data.get(date_field)
- else:
- start_date = frappe.db.get_value(doctype, data.recurring_id, date_field)
-
- doc = frappe.get_doc({
- 'doctype': 'Subscription',
- 'reference_doctype': doctype,
- 'reference_document': data.recurring_id,
- 'start_date': start_date,
- 'end_date': data.end_date,
- 'frequency': data.recurring_type,
- 'repeat_on_day': data.repeat_on_day_of_month,
- 'notify_by_email': data.notify_by_email,
- 'recipients': data.notification_email_address,
- 'next_schedule_date': data.next_date,
- 'submit_on_creation': data.submit_on_creation
- }).insert(ignore_permissions=True)
-
- if data.docstatus == 1:
- doc.submit()
\ No newline at end of file
diff --git a/erpnext/patches/v8_8/__init__.py b/erpnext/patches/v8_8/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v8_8/add_new_fields_in_accounts_settings.py b/erpnext/patches/v8_8/add_new_fields_in_accounts_settings.py
deleted file mode 100644
index bd25f15d789b..000000000000
--- a/erpnext/patches/v8_8/add_new_fields_in_accounts_settings.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-
-def execute():
- frappe.db.sql(
- "INSERT INTO `tabSingles` (`doctype`, `field`, `value`) VALUES ('Accounts Settings', 'allow_stale', '1'), "
- "('Accounts Settings', 'stale_days', '1')"
- )
diff --git a/erpnext/patches/v8_8/set_bom_rate_as_per_uom.py b/erpnext/patches/v8_8/set_bom_rate_as_per_uom.py
deleted file mode 100644
index 5b169cdff2b8..000000000000
--- a/erpnext/patches/v8_8/set_bom_rate_as_per_uom.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.db.sql("""
- update `tabBOM Item`
- set rate = rate * conversion_factor
- where uom != stock_uom and docstatus < 2
- and conversion_factor not in (0, 1)
- """)
\ No newline at end of file
diff --git a/erpnext/patches/v8_9/__init__.py b/erpnext/patches/v8_9/__init__.py
deleted file mode 100644
index 8b137891791f..000000000000
--- a/erpnext/patches/v8_9/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/erpnext/patches/v8_9/add_setup_progress_actions.py b/erpnext/patches/v8_9/add_setup_progress_actions.py
deleted file mode 100644
index 77501073cf40..000000000000
--- a/erpnext/patches/v8_9/add_setup_progress_actions.py
+++ /dev/null
@@ -1,47 +0,0 @@
-
-from __future__ import unicode_literals
-import frappe
-from frappe import _
-
-def execute():
- """Add setup progress actions"""
- if not frappe.db.exists('DocType', 'Setup Progress') or not frappe.db.exists('DocType', 'Setup Progress Action'):
- return
-
- frappe.reload_doc("setup", "doctype", "setup_progress")
- frappe.reload_doc("setup", "doctype", "setup_progress_action")
-
- actions = [
- {"action_name": "Add Company", "action_doctype": "Company", "min_doc_count": 1, "is_completed": 1,
- "domains": '[]' },
- {"action_name": "Set Sales Target", "action_doctype": "Company", "min_doc_count": 99,
- "action_document": frappe.defaults.get_defaults().get("company") or '',
- "action_field": "monthly_sales_target", "is_completed": 0,
- "domains": '["Manufacturing", "Services", "Retail", "Distribution"]' },
- {"action_name": "Add Customers", "action_doctype": "Customer", "min_doc_count": 1, "is_completed": 0,
- "domains": '["Manufacturing", "Services", "Retail", "Distribution"]' },
- {"action_name": "Add Suppliers", "action_doctype": "Supplier", "min_doc_count": 1, "is_completed": 0,
- "domains": '["Manufacturing", "Services", "Retail", "Distribution"]' },
- {"action_name": "Add Products", "action_doctype": "Item", "min_doc_count": 1, "is_completed": 0,
- "domains": '["Manufacturing", "Services", "Retail", "Distribution"]' },
- {"action_name": "Add Programs", "action_doctype": "Program", "min_doc_count": 1, "is_completed": 0,
- "domains": '["Education"]' },
- {"action_name": "Add Instructors", "action_doctype": "Instructor", "min_doc_count": 1, "is_completed": 0,
- "domains": '["Education"]' },
- {"action_name": "Add Courses", "action_doctype": "Course", "min_doc_count": 1, "is_completed": 0,
- "domains": '["Education"]' },
- {"action_name": "Add Rooms", "action_doctype": "Room", "min_doc_count": 1, "is_completed": 0,
- "domains": '["Education"]' },
- {"action_name": "Add Users", "action_doctype": "User", "min_doc_count": 4, "is_completed": 0,
- "domains": '[]' },
- {"action_name": "Add Letterhead", "action_doctype": "Letter Head", "min_doc_count": 1, "is_completed": 0,
- "domains": '[]' }
- ]
-
- setup_progress = frappe.get_doc("Setup Progress", "Setup Progress")
- setup_progress.actions = []
- for action in actions:
- setup_progress.append("actions", action)
-
- setup_progress.save(ignore_permissions=True)
-
diff --git a/erpnext/patches/v8_9/delete_gst_doctypes_for_outside_india_accounts.py b/erpnext/patches/v8_9/delete_gst_doctypes_for_outside_india_accounts.py
deleted file mode 100644
index f67af90555a6..000000000000
--- a/erpnext/patches/v8_9/delete_gst_doctypes_for_outside_india_accounts.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- company = frappe.get_all('Company', filters = {'country': 'India'})
- if not company:
- if frappe.db.exists("DocType", "GST Settings"):
- frappe.delete_doc("DocType", "GST Settings")
- frappe.delete_doc("DocType", "GST HSN Code")
-
- for report_name in ('GST Sales Register', 'GST Purchase Register',
- 'GST Itemised Sales Register', 'GST Itemised Purchase Register'):
-
- frappe.delete_doc('Report', report_name)
\ No newline at end of file
diff --git a/erpnext/patches/v8_9/remove_employee_from_salary_structure_parent.py b/erpnext/patches/v8_9/remove_employee_from_salary_structure_parent.py
deleted file mode 100644
index 808ae6d52719..000000000000
--- a/erpnext/patches/v8_9/remove_employee_from_salary_structure_parent.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if 'employee' in frappe.db.get_table_columns("Salary Structure"):
- frappe.db.sql("alter table `tabSalary Structure` drop column employee")
diff --git a/erpnext/patches/v8_9/rename_company_sales_target_field.py b/erpnext/patches/v8_9/rename_company_sales_target_field.py
deleted file mode 100644
index 5433eb673e4a..000000000000
--- a/erpnext/patches/v8_9/rename_company_sales_target_field.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
- frappe.reload_doc("setup", "doctype", "company")
- if frappe.db.has_column('Company', 'sales_target'):
- rename_field("Company", "sales_target", "monthly_sales_target")
diff --git a/erpnext/patches/v8_9/set_default_customer_group.py b/erpnext/patches/v8_9/set_default_customer_group.py
deleted file mode 100644
index cbbe09daf5d3..000000000000
--- a/erpnext/patches/v8_9/set_default_customer_group.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- selling_settings = frappe.get_single('Selling Settings')
- selling_settings.set_default_customer_group_and_territory()
- selling_settings.flags.ignore_mandatory = True
- selling_settings.save()
diff --git a/erpnext/patches/v8_9/set_default_fields_in_variant_settings.py b/erpnext/patches/v8_9/set_default_fields_in_variant_settings.py
deleted file mode 100644
index a550d093fabc..000000000000
--- a/erpnext/patches/v8_9/set_default_fields_in_variant_settings.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('stock', 'doctype', 'item_variant_settings')
- frappe.reload_doc('stock', 'doctype', 'variant_field')
-
- doc = frappe.get_doc('Item Variant Settings')
- doc.set_default_fields()
- doc.save()
\ No newline at end of file
diff --git a/erpnext/patches/v8_9/set_member_party_type.py b/erpnext/patches/v8_9/set_member_party_type.py
deleted file mode 100644
index 33bbc11a93c9..000000000000
--- a/erpnext/patches/v8_9/set_member_party_type.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if not frappe.db.exists("Party Type", "Member"):
- frappe.reload_doc("non_profit", "doctype", "member")
- party = frappe.new_doc("Party Type")
- party.party_type = "Member"
- party.save()
diff --git a/erpnext/patches/v8_9/set_print_zero_amount_taxes.py b/erpnext/patches/v8_9/set_print_zero_amount_taxes.py
deleted file mode 100644
index 3c508eaa0974..000000000000
--- a/erpnext/patches/v8_9/set_print_zero_amount_taxes.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-from erpnext.setup.install import create_print_zero_amount_taxes_custom_field
-
-def execute():
- frappe.reload_doc('printing', 'doctype', 'print_style')
- frappe.reload_doc('printing', 'doctype', 'print_settings')
- create_print_zero_amount_taxes_custom_field()
\ No newline at end of file
diff --git a/erpnext/patches/v8_9/update_billing_gstin_for_indian_account.py b/erpnext/patches/v8_9/update_billing_gstin_for_indian_account.py
deleted file mode 100644
index 24e20409c194..000000000000
--- a/erpnext/patches/v8_9/update_billing_gstin_for_indian_account.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- company = frappe.get_all('Company', filters = {'country': 'India'})
-
- if company:
- for doctype in ['Sales Invoice', 'Delivery Note']:
- frappe.db.sql(""" update `tab{0}`
- set billing_address_gstin = (select gstin from `tabAddress`
- where name = customer_address)
- where customer_address is not null and customer_address != ''""".format(doctype))
\ No newline at end of file
diff --git a/erpnext/patches/v9_0/__init__.py b/erpnext/patches/v9_0/__init__.py
deleted file mode 100644
index baffc4882521..000000000000
--- a/erpnext/patches/v9_0/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/patches/v9_0/add_healthcare_domain.py b/erpnext/patches/v9_0/add_healthcare_domain.py
deleted file mode 100644
index 3c0433b9d49d..000000000000
--- a/erpnext/patches/v9_0/add_healthcare_domain.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- domain = 'Healthcare'
- if not frappe.db.exists('Domain', domain):
- frappe.get_doc({
- 'doctype': 'Domain',
- 'domain': domain
- }).insert(ignore_permissions=True)
\ No newline at end of file
diff --git a/erpnext/patches/v9_0/add_user_to_child_table_in_pos_profile.py b/erpnext/patches/v9_0/add_user_to_child_table_in_pos_profile.py
deleted file mode 100644
index 8a8c8064ddee..000000000000
--- a/erpnext/patches/v9_0/add_user_to_child_table_in_pos_profile.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if frappe.db.table_exists("POS Profile User"):
- frappe.reload_doc('accounts', 'doctype', 'pos_profile_user')
-
- frappe.db.sql(""" update `tabPOS Profile User`,
- (select `tabPOS Profile User`.name from `tabPOS Profile User`, `tabPOS Profile`
- where `tabPOS Profile`.name = `tabPOS Profile User`.parent
- group by `tabPOS Profile User`.user, `tabPOS Profile`.company) as pfu
- set
- `tabPOS Profile User`.default = 1
- where `tabPOS Profile User`.name = pfu.name""")
- else:
- doctype = 'POS Profile'
- frappe.reload_doc('accounts', 'doctype', doctype)
- frappe.reload_doc('accounts', 'doctype', 'pos_profile_user')
- frappe.reload_doc('accounts', 'doctype', 'pos_item_group')
- frappe.reload_doc('accounts', 'doctype', 'pos_customer_group')
-
- for doc in frappe.get_all(doctype):
- _doc = frappe.get_doc(doctype, doc.name)
- user = frappe.db.get_value(doctype, doc.name, 'user')
-
- if not user: continue
-
- _doc.append('applicable_for_users', {
- 'user': user,
- 'default': 1
- })
-
- _doc.flags.ignore_validate = True
- _doc.flags.ignore_mandatory = True
- _doc.save()
\ No newline at end of file
diff --git a/erpnext/patches/v9_0/copy_old_fees_field_data.py b/erpnext/patches/v9_0/copy_old_fees_field_data.py
deleted file mode 100644
index 14278209c75a..000000000000
--- a/erpnext/patches/v9_0/copy_old_fees_field_data.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # 'Schools' module changed to the 'Education'
- # frappe.reload_doc("schools", "doctype", "fees")
- frappe.reload_doc("education", "doctype", "fees")
-
- if "total_amount" not in frappe.db.get_table_columns("Fees"):
- return
-
- frappe.db.sql("""update tabFees set grand_total=total_amount where grand_total = 0.0""")
\ No newline at end of file
diff --git a/erpnext/patches/v9_0/remove_non_existing_warehouse_from_stock_settings.py b/erpnext/patches/v9_0/remove_non_existing_warehouse_from_stock_settings.py
deleted file mode 100644
index c685bbc68183..000000000000
--- a/erpnext/patches/v9_0/remove_non_existing_warehouse_from_stock_settings.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- default_warehouse = frappe.db.get_value("Stock Settings", None, "default_warehouse")
- if default_warehouse:
- if not frappe.db.get_value("Warehouse", {"name": default_warehouse}):
- frappe.db.set_value("Stock Settings", None, "default_warehouse", "")
\ No newline at end of file
diff --git a/erpnext/patches/v9_0/remove_subscription_module.py b/erpnext/patches/v9_0/remove_subscription_module.py
deleted file mode 100644
index 493873f3e80c..000000000000
--- a/erpnext/patches/v9_0/remove_subscription_module.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if frappe.db.exists('Module Def', 'Subscription'):
- frappe.db.sql(""" delete from `tabModule Def` where name = 'Subscription'""")
\ No newline at end of file
diff --git a/erpnext/patches/v9_0/revert_manufacturing_user_role.py b/erpnext/patches/v9_0/revert_manufacturing_user_role.py
deleted file mode 100644
index f38b7f29ceca..000000000000
--- a/erpnext/patches/v9_0/revert_manufacturing_user_role.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if 'Manufacturing' in frappe.get_active_domains(): return
-
- role = 'Manufacturing User'
- frappe.db.set_value('Role', role, 'restrict_to_domain', '')
- frappe.db.set_value('Role', role, 'disabled', 0)
-
- users = frappe.get_all('Has Role', filters = {
- 'parenttype': 'User',
- 'role': ('in', ['System Manager', 'Manufacturing Manager'])
- }, fields=['parent'], as_list=1)
-
- for user in users:
- _user = frappe.get_doc('User', user[0])
- _user.append('roles', {
- 'role': role
- })
- _user.flags.ignore_validate = True
- _user.save()
diff --git a/erpnext/patches/v9_0/set_pos_profile_name.py b/erpnext/patches/v9_0/set_pos_profile_name.py
deleted file mode 100644
index a3a973521502..000000000000
--- a/erpnext/patches/v9_0/set_pos_profile_name.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- doctype = 'POS Profile'
- frappe.reload_doctype(doctype)
-
- for pos in frappe.get_all(doctype, filters={'disabled': 0}):
- doc = frappe.get_doc(doctype, pos.name)
-
- if not doc.user: continue
-
- try:
- pos_profile_name = doc.user + ' - ' + doc.company
- doc.flags.ignore_validate = True
- doc.flags.ignore_mandatory = True
- doc.save()
-
- frappe.rename_doc(doctype, doc.name, pos_profile_name, force=True)
- except frappe.LinkValidationError:
- frappe.db.set_value("POS Profile", doc.name, 'disabled', 1)
diff --git a/erpnext/patches/v9_0/set_schedule_date_for_material_request_and_purchase_order.py b/erpnext/patches/v9_0/set_schedule_date_for_material_request_and_purchase_order.py
deleted file mode 100644
index 3d012978fab5..000000000000
--- a/erpnext/patches/v9_0/set_schedule_date_for_material_request_and_purchase_order.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- for doctype in ("Material Request", "Purchase Order"):
- frappe.reload_doctype(doctype)
- frappe.reload_doctype(doctype + " Item")
-
- if not frappe.db.has_column(doctype, "schedule_date"):
- continue
-
- #Update only submitted MR
- for record in frappe.get_all(doctype, filters= [["docstatus", "=", 1]], fields=["name"]):
- doc = frappe.get_doc(doctype, record)
- if doc.items:
- if not doc.schedule_date:
- schedule_dates = [d.schedule_date for d in doc.items if d.schedule_date]
- if len(schedule_dates) > 0:
- min_schedule_date = min(schedule_dates)
- frappe.db.set_value(doctype, record,
- "schedule_date", min_schedule_date, update_modified=False)
\ No newline at end of file
diff --git a/erpnext/patches/v9_0/set_shipping_type_for_existing_shipping_rules.py b/erpnext/patches/v9_0/set_shipping_type_for_existing_shipping_rules.py
deleted file mode 100644
index 5092695b7d9a..000000000000
--- a/erpnext/patches/v9_0/set_shipping_type_for_existing_shipping_rules.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype("Shipping Rule")
-
- # default "calculate_based_on"
- frappe.db.sql('''update `tabShipping Rule`
- set calculate_based_on = "Net Weight"
- where ifnull(calculate_based_on, '') = '' ''')
-
- # default "shipping_rule_type"
- frappe.db.sql('''update `tabShipping Rule`
- set shipping_rule_type = "Selling"
- where ifnull(shipping_rule_type, '') = '' ''')
diff --git a/erpnext/patches/v9_0/set_uoms_in_variant_field.py b/erpnext/patches/v9_0/set_uoms_in_variant_field.py
deleted file mode 100644
index 9e783d99bebe..000000000000
--- a/erpnext/patches/v9_0/set_uoms_in_variant_field.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-
-def execute():
- doc = frappe.get_doc('Item Variant Settings')
- variant_field_names = [vf.field_name for vf in doc.fields]
- if 'uoms' not in variant_field_names:
- doc.append(
- 'fields', {
- 'field_name': 'uoms'
- }
- )
- doc.save()
diff --git a/erpnext/patches/v9_0/set_variant_item_description.py b/erpnext/patches/v9_0/set_variant_item_description.py
deleted file mode 100644
index 82d6148508ae..000000000000
--- a/erpnext/patches/v9_0/set_variant_item_description.py
+++ /dev/null
@@ -1,46 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cstr
-
-def execute():
- '''
- Issue:
- While copying data from template item to variant item,
- the system appending description multiple times to the respective variant.
-
- Purpose:
- Check variant description,
- if variant have user defined description remove all system appended descriptions
- else replace multiple system generated descriptions with single description
-
- Steps:
- 1. Get all variant items
- 2. Create system generated variant description
- 3. If variant have user defined description, remove all system generated descriptions
- 4. If variant description only contains system generated description,
- replace multiple descriptions by new description.
- '''
- for item in frappe.db.sql(""" select name from tabItem
- where ifnull(variant_of, '') != '' """,as_dict=1):
- variant = frappe.get_doc("Item", item.name)
- temp_variant_description = '\n'
-
- if variant.attributes:
- for d in variant.attributes:
- temp_variant_description += "
" + d.attribute + ": " + cstr(d.attribute_value) + "
"
-
- variant_description = variant.description.replace(temp_variant_description, '').rstrip()
- if variant_description:
- splitted_desc = variant.description.strip().split(temp_variant_description)
-
- if len(splitted_desc) > 2:
- if splitted_desc[0] == '':
- variant_description = temp_variant_description + variant_description
- elif splitted_desc[1] == '' or splitted_desc[1] == '\n':
- variant_description += temp_variant_description
- variant.db_set('description', variant_description, update_modified=False)
- else:
- variant.db_set('description', variant_description, update_modified=False)
-
- else:
- variant.db_set('description', temp_variant_description, update_modified=False)
\ No newline at end of file
diff --git a/erpnext/patches/v9_0/student_admission_childtable_migrate.py b/erpnext/patches/v9_0/student_admission_childtable_migrate.py
deleted file mode 100644
index a5712c76dccd..000000000000
--- a/erpnext/patches/v9_0/student_admission_childtable_migrate.py
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- # 'Schools' module changed to the 'Education'
- # frappe.reload_doc('schools', 'doctype', 'Student Admission Program')
- # frappe.reload_doc('schools', 'doctype', 'student_admission')
- frappe.reload_doc('education', 'doctype', 'Student Admission Program')
- frappe.reload_doc('education', 'doctype', 'student_admission')
-
- if "program" not in frappe.db.get_table_columns("Student Admission"):
- return
-
- student_admissions = frappe.get_all("Student Admission", fields=["name", "application_fee", \
- "naming_series_for_student_applicant", "program", "introduction", "eligibility"])
- for student_admission in student_admissions:
- doc = frappe.get_doc("Student Admission", student_admission.name)
- doc.append("program_details", {
- "program": student_admission.get("program"),
- "application_fee": student_admission.get("application_fee"),
- "applicant_naming_series": student_admission.get("naming_series_for_student_applicant"),
- })
- if student_admission.eligibility and student_admission.introduction:
- doc.introduction = student_admission.introduction + "
" + \
- student_admission.eligibility + "
"
- doc.flags.ignore_validate = True
- doc.flags.ignore_mandatory = True
- doc.save()
diff --git a/erpnext/patches/v9_0/update_employee_loan_details.py b/erpnext/patches/v9_0/update_employee_loan_details.py
deleted file mode 100644
index ef8d32855fbe..000000000000
--- a/erpnext/patches/v9_0/update_employee_loan_details.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc('Payroll', 'doctype', 'salary_slip_loan')
- frappe.reload_doc('Payroll', 'doctype', 'salary_slip')
-
- for data in frappe.db.sql(""" select name,
- start_date, end_date, total_loan_repayment
- from
- `tabSalary Slip`
- where
- docstatus < 2 and ifnull(total_loan_repayment, 0) > 0""", as_dict=1):
- salary_slip = frappe.get_doc('Salary Slip', data.name)
- salary_slip.set_loan_repayment()
-
- if salary_slip.total_loan_repayment == data.total_loan_repayment:
- for row in salary_slip.loans:
- row.db_update()
-
- salary_slip.db_update()
diff --git a/erpnext/patches/v9_0/update_multi_uom_fields_in_material_request.py b/erpnext/patches/v9_0/update_multi_uom_fields_in_material_request.py
deleted file mode 100644
index 45610ed5a733..000000000000
--- a/erpnext/patches/v9_0/update_multi_uom_fields_in_material_request.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doctype('Material Request')
- frappe.reload_doctype('Material Request Item')
-
- frappe.db.sql(""" update `tabMaterial Request Item`
- set stock_uom = uom, stock_qty = qty, conversion_factor = 1.0""")
\ No newline at end of file
diff --git a/erpnext/patches/v9_1/__init__.py b/erpnext/patches/v9_1/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v9_1/create_issue_opportunity_type.py b/erpnext/patches/v9_1/create_issue_opportunity_type.py
deleted file mode 100644
index aa8bbd1e7990..000000000000
--- a/erpnext/patches/v9_1/create_issue_opportunity_type.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (c) 2017, Frappe and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe import _
-
-def execute():
- # delete custom field if exists
- for doctype, fieldname in (('Issue', 'issue_type'), ('Opportunity', 'opportunity_type')):
- custom_field = frappe.db.get_value("Custom Field", {"fieldname": fieldname, 'dt': doctype})
- if custom_field:
- frappe.delete_doc("Custom Field", custom_field, ignore_permissions=True)
-
- frappe.reload_doc('support', 'doctype', 'issue_type')
- frappe.reload_doc('support', 'doctype', 'issue')
- frappe.reload_doc('crm', 'doctype', 'opportunity_type')
- frappe.reload_doc('crm', 'doctype', 'opportunity')
-
- # rename enquiry_type -> opportunity_type
- from frappe.model.utils.rename_field import rename_field
- rename_field('Opportunity', 'enquiry_type', 'opportunity_type')
-
- # create values if already set
- for opts in (('Issue', 'issue_type', 'Issue Type'),
- ('Opportunity', 'opportunity_type', 'Opportunity Type')):
- for d in frappe.db.sql('select distinct {0} from `tab{1}`'.format(opts[1], opts[0])):
- if d[0] and not frappe.db.exists(opts[2], d[0]):
- frappe.get_doc(dict(doctype = opts[2], name=d[0])).insert()
-
- # fixtures
- for name in ('Hub', _('Sales'), _('Support'), _('Maintenance')):
- if not frappe.db.exists('Opportunity Type', name):
- frappe.get_doc(dict(doctype = 'Opportunity Type', name=name)).insert()
diff --git a/erpnext/patches/v9_2/__init__.py b/erpnext/patches/v9_2/__init__.py
deleted file mode 100644
index e69de29bb2d1..000000000000
diff --git a/erpnext/patches/v9_2/delete_healthcare_domain_default_items.py b/erpnext/patches/v9_2/delete_healthcare_domain_default_items.py
deleted file mode 100644
index 54ae18b8e291..000000000000
--- a/erpnext/patches/v9_2/delete_healthcare_domain_default_items.py
+++ /dev/null
@@ -1,17 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import getdate
-
-def execute():
- domain_settings = frappe.get_doc('Domain Settings')
- active_domains = [d.domain for d in domain_settings.active_domains]
-
- if "Healthcare" not in active_domains:
- items = ["TTT", "MCH", "LDL", "GTT", "HDL", "BILT", "BILD", "BP", "BS"]
- for item_code in items:
- try:
- item = frappe.db.get_value("Item", {"item_code": item_code}, ["name", "creation"], as_dict=1)
- if item and getdate(item.creation) >= getdate("2017-11-10"):
- frappe.delete_doc("Item", item.name)
- except:
- pass
\ No newline at end of file
diff --git a/erpnext/patches/v9_2/delete_process_payroll.py b/erpnext/patches/v9_2/delete_process_payroll.py
deleted file mode 100644
index 91c49f577f38..000000000000
--- a/erpnext/patches/v9_2/delete_process_payroll.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.delete_doc("DocType", "Process Payroll")
diff --git a/erpnext/patches/v9_2/remove_company_from_patient.py b/erpnext/patches/v9_2/remove_company_from_patient.py
deleted file mode 100644
index 1a50088f2391..000000000000
--- a/erpnext/patches/v9_2/remove_company_from_patient.py
+++ /dev/null
@@ -1,7 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- if frappe.db.exists("DocType", "Patient"):
- if 'company' in frappe.db.get_table_columns("Patient"):
- frappe.db.sql("alter table `tabPatient` drop column company")
diff --git a/erpnext/patches/v9_2/rename_net_weight_in_item_master.py b/erpnext/patches/v9_2/rename_net_weight_in_item_master.py
deleted file mode 100644
index cad979deabad..000000000000
--- a/erpnext/patches/v9_2/rename_net_weight_in_item_master.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe.model.utils.rename_field import rename_field
-
-def execute():
- frappe.reload_doc("stock", "doctype", "item")
- if frappe.db.has_column('Item', 'net_weight'):
- rename_field("Item", "net_weight", "weight_per_unit")
diff --git a/erpnext/patches/v9_2/rename_translated_domains_in_en.py b/erpnext/patches/v9_2/rename_translated_domains_in_en.py
deleted file mode 100644
index e5a9e2461fac..000000000000
--- a/erpnext/patches/v9_2/rename_translated_domains_in_en.py
+++ /dev/null
@@ -1,39 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-from frappe import _
-from frappe.model.rename_doc import rename_doc
-
-def execute():
- frappe.reload_doc('stock', 'doctype', 'item')
- language = frappe.get_single("System Settings").language
-
- if language and language.startswith('en'): return
-
- frappe.local.lang = language
-
- all_domains = frappe.get_hooks("domains")
-
- for domain in all_domains:
- translated_domain = _(domain, lang=language)
- if frappe.db.exists("Domain", translated_domain):
- #if domain already exists merged translated_domain and domain
- merge = False
- if frappe.db.exists("Domain", domain):
- merge=True
-
- rename_doc("Domain", translated_domain, domain, ignore_permissions=True, merge=merge)
-
- domain_settings = frappe.get_single("Domain Settings")
- active_domains = [d.domain for d in domain_settings.active_domains]
-
- try:
- for domain in active_domains:
- domain = frappe.get_doc("Domain", domain)
- domain.setup_domain()
-
- if int(frappe.db.get_single_value('System Settings', 'setup_complete')):
- domain.setup_sidebar_items()
- domain.setup_desktop_icons()
- domain.set_default_portal_role()
- except frappe.LinkValidationError:
- pass
\ No newline at end of file
diff --git a/erpnext/patches/v9_2/repost_reserved_qty_for_production.py b/erpnext/patches/v9_2/repost_reserved_qty_for_production.py
deleted file mode 100644
index 040e655bd82d..000000000000
--- a/erpnext/patches/v9_2/repost_reserved_qty_for_production.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
- frappe.reload_doc("stock", "doctype", "bin")
- bins = frappe.db.sql("select name from `tabBin` where reserved_qty_for_production > 0")
- for d in bins:
- bin_doc = frappe.get_doc("Bin", d[0])
- bin_doc.update_reserved_qty_for_production()
diff --git a/erpnext/patches/v9_2/set_item_name_in_production_order.py b/erpnext/patches/v9_2/set_item_name_in_production_order.py
deleted file mode 100644
index 1f490e62c8b7..000000000000
--- a/erpnext/patches/v9_2/set_item_name_in_production_order.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from __future__ import unicode_literals
-import frappe
-
-def execute():
-
- frappe.db.sql("""
- update `tabBOM Item` bom, `tabWork Order Item` po_item
- set po_item.item_name = bom.item_name,
- po_item.description = bom.description
- where po_item.item_code = bom.item_code
- and (po_item.item_name is null or po_item.description is null)
- """)