#!/usr/bin/python # This script is for cleaning up of all data from system including # all transactions and masters (excludes default masters). # Basically after running this file, system will reset to it's # initial state. # This script can be executed from lib/wnf.py using # lib/wnf.py --cleanup-data from __future__ import unicode_literals import sys sys.path.append("lib/py") sys.path.append(".") sys.path.append("erpnext") import webnotes #-------------------------------- def delete_transactions(): print "Deleting transactions..." trans = ['Timesheet','Task','Support Ticket','Stock Reconciliation', 'Stock Ledger Entry', \ 'Stock Entry','Sales Order','Salary Slip','Sales Invoice','Quotation', 'Quality Inspection', \ 'Purchase Receipt','Purchase Order','Production Order', 'POS Setting','Period Closing Voucher', \ 'Purchase Invoice','Maintenance Visit','Maintenance Schedule','Leave Application', \ 'Leave Allocation', 'Lead', 'Journal Voucher', 'Installation Note','Purchase Request', \ 'GL Entry','Expense Claim','Opportunity','Delivery Note','Customer Issue','Bin', \ 'Authorization Rule','Attendance','Account Balance', 'C-Form', 'Form 16A', 'Lease Agreement', \ 'Lease Installment', 'TDS Payment', 'TDS Return Acknowledgement', 'Appraisal', \ 'Installation Note', 'Communication' ] for d in trans: for t in webnotes.conn.sql("select options from tabDocField where parent='%s' and fieldtype='Table'" % d): webnotes.conn.sql("delete from `tab%s`" % (t)) webnotes.conn.sql("delete from `tab%s`" % (d)) webnotes.conn.sql("COMMIT") webnotes.conn.sql("START TRANSACTION") print "Deleted " + d def delete_masters(): print "Deleting masters...." masters = { 'Workstation':['Default Workstation'], 'Warehouse Type':['Default Warehouse Type', 'Fixed Asset', 'Rejected', 'Reserved', 'Sample', 'Stores', 'WIP Warehouse'], 'Warehouse':['Default Warehouse'], 'UOM':['Kg', 'Mtr', 'Box', 'Ltr', 'Nos', 'Ft', 'Pair', 'Set'], 'Territory':['All Territories', 'Default Territory'], 'Terms and Conditions':'', 'Tag':'', 'Supplier Type':['Default Supplier Type'], 'Supplier':'', 'Serial No':'', 'Sales Person':['All Sales Persons'], 'Sales Partner':'', 'Sales BOM':'', 'Salary Structure':'', 'Purchase Taxes and Charges Master':'', 'Project':'', 'Print Heading':'', 'Price List':['Default Price List'], 'Period':'', 'Sales Taxes and Charges Master':'', 'Letter Head':'', 'Leave Type':['Leave Without Pay', 'Privilege Leave', 'Casual Leave', 'PL', 'CL', 'LWP', 'Compensatory Off', 'Sick Leave'], 'Landed Cost Master':'', 'Appraisal Template':'', 'Item Group':['All Item Groups', 'Default'], 'Item':'', 'Holiday List':'', 'Grade':'', 'Feed':'', 'Expense Claim Type':['Travel', 'Medical', 'Calls', 'Food', 'Others'], 'Event':'', 'Employment Type':'', 'Employee':'', 'Earning Type':['Basic', 'Conveyance', 'House Rent Allowance', 'Dearness Allowance', 'Medical Allowance', 'Telephone'], 'Designation':'', 'Department':'', 'Deduction Type':['Income Tax', 'Professional Tax', 'Provident Fund', 'Leave Deduction'], 'Customer Group':['All Customer Groups', 'Default Customer Group'], 'Customer':'', 'Cost Center':'', 'Contact':'', 'Campaign':'', 'Budget Distribution':'', 'Brand':'', 'Branch':'', 'Batch':'', 'Appraisal':'', 'Account':'', 'BOM': '' } for d in masters.keys(): for t in webnotes.conn.sql("select options from tabDocField where parent='%s' \ and fieldtype='Table'" % d): webnotes.conn.sql("delete from `tab%s`" % (t)) lst = '"'+'","'.join(masters[d])+ '"' webnotes.conn.sql("delete from `tab%s` where name not in (%s)" % (d, lst)) webnotes.conn.sql("COMMIT") webnotes.conn.sql("START TRANSACTION") print "Deleted " + d def reset_series(): # Reset series webnotes.conn.sql("""update tabSeries set current = 0 where name not in \ ('Ann/', 'BSD', 'DEF', 'DF', 'EV', 'Event Updates/', 'FileData-', \ 'FL', 'FMD/', 'GLM Detail', 'Login Page/', 'MDI', 'MDR', 'MI', 'MIR', \ 'PERM', 'PR', 'SRCH/C/', 'TD', 'TIC/', 'TMD/', 'TW', 'UR', '_FEED', \ '_SRCH', '_TRIGGER', '__NSO', 'CustomField', 'Letter') """) print "Series updated" def delete_main_masters(): main_masters = ['Fiscal Year','Company', 'DefaultValue'] for d in main_masters: for t in webnotes.conn.sql("select options from tabDocField where parent='%s' and fieldtype='Table'" % d): webnotes.conn.sql("delete from `tab%s`" % (t)) webnotes.conn.sql("delete from `tab%s`" % (d)) webnotes.conn.sql("COMMIT") webnotes.conn.sql("START TRANSACTION") print "Deleted " + d def reset_global_defaults(): flds = { 'default_company': '', 'default_currency': '', 'default_currency_format': 'Lacs', 'default_currency_fraction': '', 'current_fiscal_year': '', 'date_format': 'dd-mm-yyyy', 'sms_sender_name': '', 'default_item_group': 'Default', 'default_stock_uom': 'Nos', 'default_valuation_method': 'FIFO', 'default_warehouse_type': 'Default Warehouse Type', 'tolerance': '', 'acc_frozen_upto': '', 'bde_auth_role': '', 'credit_controller': '', 'default_customer_group': 'Default Customer Group', 'default_territory': 'Default', 'default_price_list': 'Standard', 'default_supplier_type': 'Default Supplier Type' } from webnotes.model.code import get_obj gd = get_obj('Global Defaults', 'Global Defaults') for d in flds: gd.doc.fields[d] = flds[d] gd.doc.save() webnotes.clear_cache() def run(): webnotes.connect() # Confirmation from user confirm = '' while not confirm: confirm = raw_input("Are you sure you want to delete the data from the system (N/Y)?") if confirm.lower() != 'y': raise Exception cleanup_type = '' while cleanup_type not in ['1', '2']: cleanup_type = raw_input("""\nWhat type of cleanup you want ot perform? 1. Only Transactions 2. Both Masters and Transactions Please enter your choice (1/2): """) # delete delete_transactions() if cleanup_type == '1': print '\n', '*' * 10 + 'NOTE' + '*' * 10, '\n' print "To reset series of the transactions go to Setup --> Numbering Series\n" else: delete_masters() reset_series() delete_main_masters() reset_global_defaults() print "System cleaned up succesfully" webnotes.conn.close() if __name__ == '__main__': run()