| #!/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 |
| |
| 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() |