From 8c6b0b48ed50549b584f9cbb23a0abdbdfd84e98 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 26 Jul 2011 17:21:36 +0530 Subject: [PATCH 01/42] fixed issue in stock reco if no prev sle exists --- stock/doctype/stock_reconciliation/stock_reconciliation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stock/doctype/stock_reconciliation/stock_reconciliation.py b/stock/doctype/stock_reconciliation/stock_reconciliation.py index 69710f0eab..f040df3839 100644 --- a/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -118,7 +118,7 @@ class DocType: # ------------------ def get_current_stock(self, item_code, warehouse): bin = sql("select name from `tabBin` where item_code = '%s' and warehouse = '%s'" % (item_code, warehouse)) - prev_sle = bin and get_obj('Bin', bin[0][0]).get_prev_sle(self.doc.reconciliation_date,self.doc.reconciliation_time) or 0 + prev_sle = bin and get_obj('Bin', bin[0][0]).get_prev_sle(self.doc.reconciliation_date,self.doc.reconciliation_time) or {} stock_uom = sql("select stock_uom from `tabItem` where name = %s",item_code) return {'actual_qty': prev_sle.get('bin_aqat', 0), 'stock_uom': stock_uom[0][0]} From 07385ac812666351c1393f54c01292f58968928a Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 27 Jul 2011 14:12:14 +0530 Subject: [PATCH 02/42] Bulk rename tool included in setup module --- setup/page/setup/setup.js | 1 + .../doctype/bulk_rename_tool/bulk_rename_tool.txt | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/setup/page/setup/setup.js b/setup/page/setup/setup.js index c0ba3d4dc0..b29e7ad9e0 100644 --- a/setup/page/setup/setup.js +++ b/setup/page/setup/setup.js @@ -183,6 +183,7 @@ SetupData = function(cnty){ ['Country',1,'Country','','Country master'], ['State',1,'State','','State master'], ['Rename Tool',3,'Rename Tool','','Rename a record'], + ['Bulk Rename Tool',3,'Bulk Rename Tool','','Rename multiple records at a time'], ['Activty Type',1,'Activity Type','','Types of activities that you can select in your Timesheet'], ['City',1,'City','','City master']]}; diff --git a/utilities/doctype/bulk_rename_tool/bulk_rename_tool.txt b/utilities/doctype/bulk_rename_tool/bulk_rename_tool.txt index f15d3a9dbd..f0f4c723c6 100644 --- a/utilities/doctype/bulk_rename_tool/bulk_rename_tool.txt +++ b/utilities/doctype/bulk_rename_tool/bulk_rename_tool.txt @@ -3,16 +3,16 @@ # These values are common in all dictionaries { - 'creation': '2011-07-08 13:30:05', + 'creation': '2011-07-07 17:47:52', 'docstatus': 0, - 'modified': '2011-07-08 13:30:05', + 'modified': '2011-07-27 13:19:22', 'modified_by': 'Administrator', 'owner': 'Administrator' }, # These values are common for all DocType { - '_last_update': '1310035501', + '_last_update': '1311622167', 'allow_attach': 1, 'autoname': 'field:rename_doctype', 'colour': 'White:FFF', @@ -21,7 +21,7 @@ 'name': '__common__', 'section_style': 'Simple', 'show_in_menu': 0, - 'version': 6 + 'version': 7 }, # These values are common for all DocField @@ -96,4 +96,4 @@ 'label': 'Rename', 'options': 'do_rename' } -] \ No newline at end of file +] From 31a407dc87ce844c6b2b74bb84e8215517fa0559 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 28 Jul 2011 11:47:45 +0530 Subject: [PATCH 03/42] fixed module name in previous patch and proper path somewhere --- patches/patch.py | 140 +++++++++++++++++++++++------------------------ 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/patches/patch.py b/patches/patch.py index 47f39bf21d..6eaced73ea 100644 --- a/patches/patch.py +++ b/patches/patch.py @@ -57,7 +57,7 @@ def execute(patch_no): elif patch_no == 40: - import_from_files(record_list=[['material_management','doctype','item']]) + import_from_files(record_list=[['stock','doctype','item']]) elif patch_no == 42: acc = sql("select name, lft, rgt from tabAccount where account_name in ('Incomes', 'Expenses')") for d in acc: @@ -126,7 +126,7 @@ def execute(patch_no): sql("delete from `tabModule Def Item` where parent = 'CRM' and doc_type = 'Reports' and doc_name = 'Delivery Note' and display_name = 'Territory, Item Group wise GP'") elif patch_no == 57: - import_from_files(record_list=[['crm','doctype','sales_order_detail']]) + import_from_files(record_list=[['selling','doctype','sales_order_detail']]) elif patch_no == 58: # module def patches sql("update `tabModule Def` set module_page = NULL where name not in ('Event Updates', 'Setup', 'My Company')") @@ -161,7 +161,7 @@ def execute(patch_no): elif patch_no == 62: # Import Supplier Quotation - import_from_files(record_list=[['srm','doctype','supplier_quotation']]) + import_from_files(record_list=[['buying','doctype','supplier_quotation']]) # Adding Status Filter sql("update tabDocType set search_fields = concat('status,',search_fields) where name IN ('Delivery Note','Leave Transaction')") # Import Other Charges @@ -170,7 +170,7 @@ def execute(patch_no): elif patch_no == 63: sql("update `tabDocField` set permlevel = 1 where fieldname in ('return_date', 'return_details') and parent = 'Sales and Purchase Return Wizard'") - import_from_files(record_list = [['accounts', 'doctype', 'rv_detail'], ['material_management', 'doctype', 'sales_and_purchase_return_wizard'], ['material_management', 'doctype', 'stock_entry']]) + import_from_files(record_list = [['accounts', 'doctype', 'rv_detail'], ['stock', 'doctype', 'sales_and_purchase_return_wizard'], ['stock', 'doctype', 'stock_entry']]) elif patch_no == 64: sql("update tabDocField set `hidden` = 1, `print_hide` = 1, `report_hide` = 1 where options in ('RFQ','Supplier Quotation')") sql("update tabDocType set `read_only` = 1, in_create = 1 where name in ('RFQ','Supplier Quotation')") @@ -192,7 +192,7 @@ def execute(patch_no): sql("delete from `tabModule Def Item` where (display_name = 'Sales Invoice' and parent = 'CRM') or (display_name = 'Purchase Invoice' and parent = 'SRM')") elif patch_no == 68: from webnotes.modules.import_module import import_from_files - import_from_files(record_list=[['payroll','doctype','employee'],['roles','Role','Employee']]) + import_from_files(record_list=[['hr','doctype','employee'],['roles','Role','Employee']]) elif patch_no == 69: # delete flds from employee master p = get_obj('Patch Util') @@ -252,7 +252,7 @@ def execute(patch_no): # import Contact, Employee from webnotes.modules.import_module import import_from_files - import_from_files(record_list=[['tools','doctype','contact']]) + import_from_files(record_list=[['utilities','doctype','contact']]) # remove last_contact_date from Lead @@ -294,7 +294,7 @@ def execute(patch_no): #sal structure patch # import from webnotes.modules.import_module import import_from_files - import_from_files(record_list=[['payroll','doctype','salary_structure'], ['payroll','doctype','earning_detail'],['payroll','doctype','deduction_detail']]) + import_from_files(record_list=[['hr','doctype','salary_structure'], ['hr','doctype','earning_detail'],['hr','doctype','deduction_detail']]) elif patch_no == 76: # property p = get_obj('Patch Util') @@ -321,7 +321,7 @@ def execute(patch_no): # sal slip patch # import from webnotes.modules.import_module import import_from_files - import_from_files(record_list=[['payroll','doctype','salary_slip'], ['payroll','doctype','ss_earning_detail'],['payroll','doctype','ss_deduction_detail'], ['mapper', 'DocType Mapper', 'Salary Structure-Salary Slip']]) + import_from_files(record_list=[['hr','doctype','salary_slip'], ['hr','doctype','ss_earning_detail'],['hr','doctype','ss_deduction_detail'], ['mapper', 'DocType Mapper', 'Salary Structure-Salary Slip']]) elif patch_no == 78: p = get_obj('Patch Util') # delete @@ -352,7 +352,7 @@ def execute(patch_no): elif patch_no == 79: # Import Modules - import_from_files(record_list=[['payroll','doctype','leave_application'],['payroll','doctype','leave_allocation'],['payroll','doctype','leave_control_panel'],['payroll','doctype','holiday_list'],['payroll','doctype','holiday_list_detail'],['payroll','Module Def','Payroll']]) + import_from_files(record_list=[['hr','doctype','leave_application'],['hr','doctype','leave_allocation'],['hr','doctype','leave_control_panel'],['hr','doctype','holiday_list'],['hr','doctype','holiday_list_detail'],['hr','Module Def','Payroll']]) elif patch_no == 80: # Holiday List sql("update `tabHoliday List Detail` set description = holiday_name") @@ -406,7 +406,7 @@ def execute(patch_no): elif patch_no == 81: # Import Modules - import_from_files(record_list=[['payroll','Module Def','Payroll']]) + import_from_files(record_list=[['hr','Module Def','Payroll']]) elif patch_no == 82: sql("update tabDocType set search_fields = 'employee,leave_type,total_leaves_allocated,fiscal_year' where name = 'Leave Allocation'") sql("update tabDocType set search_fields = 'employee,leave_type,from_date,to_date,total_leave_days,fiscal_year' where name = 'Leave Application'") @@ -433,13 +433,13 @@ def execute(patch_no): elif patch_no == 86: # Import Modules - import_from_files(record_list=[['payroll','doctype','leave_type']]) + import_from_files(record_list=[['hr','doctype','leave_type']]) elif patch_no == 87: sql("update `tabLeave Type` set is_lwp = 1 where name = 'Leave Without Pay'") elif patch_no == 88: # Import Modules - import_from_files(record_list=[['payroll','doctype','leave_allocation']]) + import_from_files(record_list=[['hr','doctype','leave_allocation']]) elif patch_no == 89: sql("delete from `tabModule Def Item` where doc_type = 'Setup Forms' and doc_name in ('Payroll Rule', 'IT Checklist', 'Employee Profile') and parent = 'Payroll'") sql("update `tabDocField` set `hidden` = 1, `print_hide` = 1, `report_hide` = 1 where parent = 'Leave Type' and fieldname = 'is_encash'") @@ -458,7 +458,7 @@ def execute(patch_no): sql("update `tabField Mapper Detail` set from_field = 'customer' where to_field = 'customer' and parent = 'Sales Order-Receivable Voucher'") elif patch_no == 94: - import_from_files(record_list=[['crm','doctype','sms_center']]) + import_from_files(record_list=[['selling','doctype','sms_center']]) elif patch_no == 95: import_from_files(record_list=[['mapper','DocType Mapper','Sales Order-Receivable Voucher'], ['mapper','DocType Mapper','Delivery Note-Receivable Voucher']]) @@ -491,7 +491,7 @@ def execute(patch_no): sql("update tabDocField set fieldname = '' where fieldtype = 'HTML'") elif patch_no == 104: - import_from_files(record_list=[['payroll','search_criteria','stdsrch_00001'],['payroll','search_criteria','stdsrch_00002'],['payroll','search_criteria','stdsrch_00003'],['payroll','Module Def','Payroll'],['payroll','doctype','leave_application'],['payroll','doctype','leave_allocation']]) + import_from_files(record_list=[['hr','search_criteria','stdsrch_00001'],['hr','search_criteria','stdsrch_00002'],['hr','search_criteria','stdsrch_00003'],['hr','Module Def','Payroll'],['hr','doctype','leave_application'],['hr','doctype','leave_allocation']]) elif patch_no == 105: # Employee Leave Balance sql("delete from `tabModule Def Item` where parent = 'Payroll' and doc_type = 'Reports' and display_name IN ('Employeewise Leave Transaction Details','Employeewise Balance Leave Report')") @@ -508,11 +508,11 @@ def execute(patch_no): elif patch_no == 107: sql("delete from `tabDocField` where fieldname = 'fiscal_year' and parent = 'Employee'") elif patch_no == 108: - import_from_files(record_list=[['payroll','search_criteria','srch_std_00013']]) + import_from_files(record_list=[['hr','search_criteria','srch_std_00013']]) elif patch_no == 109: - import_from_files(record_list=[['payroll','search_criteria','srch_std_00015']]) + import_from_files(record_list=[['hr','search_criteria','srch_std_00015']]) elif patch_no == 110: - import_from_files(record_list=[['payroll','doctype','salary_structure'], ['payroll', 'doctype', 'salary_slip']]) + import_from_files(record_list=[['hr','doctype','salary_structure'], ['hr', 'doctype', 'salary_slip']]) elif patch_no == 111: sql("update tabDocType set search_fields = 'transfer_date, from_warehouse, to_warehouse, purpose, remarks' where name = 'Stock Entry'") elif patch_no == 112: @@ -582,7 +582,7 @@ def execute(patch_no): p.add_permission('Expense Voucher', 'HR User', 0, read = 1, write = 1, create = 1, submit = 1, cancel = 1, amend = 1) elif patch_no == 128: from webnotes.modules import import_module - import_module.import_from_files(record_list=[['crm','doctype','sales_order'], ['crm','doctype','sales_order_detail'], ['material_management','doctype','delivery_note'], ['material_management','doctype','delivery_note_detail']]) + import_module.import_from_files(record_list=[['selling','doctype','sales_order'], ['selling','doctype','sales_order_detail'], ['stock','doctype','delivery_note'], ['stock','doctype','delivery_note_detail']]) elif patch_no == 129: sql("update `tabTable Mapper Detail` set validation_logic = '(qty > ifnull(billed_qty, 0) or amount > ifnull(billed_amt, 0)) and docstatus = 1' where parent = 'Sales Order-Receivable Voucher' and from_table = 'Sales Order Detail' and to_table = 'RV Detail'") sql("update `tabTable Mapper Detail` set validation_logic = '(qty > ifnull(billed_qty, 0) or amount > ifnull(billed_amt, 0)) and docstatus = 1' where parent = 'Delivery Note-Receivable Voucher' and from_table = 'Delivery Note Detail' and to_table = 'RV Detail'") @@ -680,11 +680,11 @@ def execute(patch_no): sql("delete from tabDocField where label = 'Add / Manage Contacts' and fieldtype = 'Button' and parent = 'Customer'") sql("delete from `tabField Mapper Detail` where parent = 'Sales Order-Delivery Note' and from_field = 'note' and to_field = 'note'") elif patch_no == 152: - import_from_files(record_list=[['crm','doctype','sales_order'], ['material_management','doctype','delivery_note'], ['crm','doctype','customer'], ['crm','doctype','shipping_address'], ['mapper', 'DocType Mapper', 'Sales Order-Delivery Note']]) + import_from_files(record_list=[['selling','doctype','sales_order'], ['stock','doctype','delivery_note'], ['selling','doctype','customer'], ['selling','doctype','shipping_address'], ['mapper', 'DocType Mapper', 'Sales Order-Delivery Note']]) elif patch_no == 153: sql("delete from `tabDocField` where fieldname = 'sales_person' and parent = 'Customer'") elif patch_no == 154: - import_from_files(record_list=[['material_management','doctype','serial_no'], ['maintenance','doctype','customer_issue']]) + import_from_files(record_list=[['stock','doctype','serial_no'], ['support','doctype','customer_issue']]) elif patch_no == 155: for d in sql("select name, item_code from `tabSerial No`"): sql("COMMIT") @@ -707,16 +707,16 @@ def execute(patch_no): sql("update tabDocType set autoname = 'field:batch_id' where name = 'Batch'") sql("update tabDocField set no_copy = 1 where parent = 'Batch' and fieldname = 'batch_id'") elif patch_no == 162: - import_from_files(record_list=[['crm', 'search_criteria', 'sales_order_pending_items1']]) + import_from_files(record_list=[['selling', 'search_criteria', 'sales_order_pending_items1']]) elif patch_no == 163: sql("delete from `tabModule Def Item` where display_name = 'Sales Orderwise Pending Packing Item Summary' and parent = 'CRM'") - import_from_files(record_list=[['crm', 'search_criteria', 'sales_orderwise_pending_qty_to_deliver'], ['crm', 'search_criteria', 'sales_orderwise_pending_amount_to_bill'], ['crm', 'search_criteria', 'delivered_items_to_be_install']]) + import_from_files(record_list=[['selling', 'search_criteria', 'sales_orderwise_pending_qty_to_deliver'], ['selling', 'search_criteria', 'sales_orderwise_pending_amount_to_bill'], ['selling', 'search_criteria', 'delivered_items_to_be_install']]) elif patch_no == 164: - import_from_files(record_list=[['srm', 'search_criteria', 'pending_po_items_to_receive'], ['srm', 'search_criteria', 'pending_po_items_to_bill']]) + import_from_files(record_list=[['buying', 'search_criteria', 'pending_po_items_to_receive'], ['buying', 'search_criteria', 'pending_po_items_to_bill']]) elif patch_no == 165: pass elif patch_no == 166: - import_from_files(record_list=[['srm', 'doctype', 'purchase_order']]) + import_from_files(record_list=[['buying', 'doctype', 'purchase_order']]) elif patch_no == 167: if webnotes.conn.get_value('Control Panel', None, 'account_id') not in ['ax0000956', 'ax0001338']: sql("delete from tabDocField where parent = 'Purchase Order' and fieldname in ('test_certificate_required', 'estimated_cost', 'transport', 'vendor_reference', 'transportation_required', 'mode_of_dispatch', 'octroi')") @@ -727,7 +727,7 @@ def execute(patch_no): elif patch_no == 170: import_from_files(record_list=[['mapper', 'DocType Mapper', 'Delivery Note-Receivable Voucher']]) elif patch_no == 171: - import_from_files(record_list=[['srm', 'doctype', 'supplier']]) + import_from_files(record_list=[['buying', 'doctype', 'supplier']]) elif patch_no == 172: import webnotes webnotes.conn.set_global("system_message", """Welcome to the new financial year 2011-2012 !!!

So obvious question in your mind is how to start Entries in the New Fiscal Year in ERPNext? What are the changes you have to make in the system?
We have made some guidelines regarding the basic steps you should follow. Please click on link How to start Entries in the New Fiscal Year in ERPNext?""") @@ -749,7 +749,7 @@ def execute(patch_no): sql("delete from `tabDocField` where label = 'Next Steps' and parent = 'Purchase Order'") sql("update tabDocField set options = 'Material Issue\nMaterial Receipt\nMaterial Transfer\nSales Return\nPurchase Return\nSubcontracting\nProduction Order' where parent = 'Stock Entry' and fieldname = 'purpose'") elif patch_no == 178: - import_from_files(record_list = [['payroll', 'doctype', 'salary_slip']]) + import_from_files(record_list = [['hr', 'doctype', 'salary_slip']]) elif patch_no == 179: from webnotes.utils import get_defaults sl = sql("select name, net_pay from `tabSalary Slip`") @@ -792,21 +792,21 @@ def execute(patch_no): elif patch_no == 187: sql("update tabDocType set autoname = '' where name = 'QA Inspection Report'") elif patch_no == 188: - import_from_files(record_list = [['srm', 'doctype', 'qa_inspection_report']]) + import_from_files(record_list = [['buying', 'doctype', 'qa_inspection_report']]) elif patch_no == 189: sql("update `tabDocField` set allow_on_submit = 1 where fieldname in ('entries', 'other_charges') and parent = 'Receivable Voucher'") elif patch_no == 190: sql("update tabDocField set permlevel=0 where fieldname = 'fiscal_year' and parent = 'Stock Entry'") elif patch_no == 191: - import_from_files(record_list = [['maintenance', 'doctype', 'customer_issue']]) + import_from_files(record_list = [['support', 'doctype', 'customer_issue']]) elif patch_no == 192: sql("delete from `tabModule Def Item` where parent = 'Material Management' and doc_name = 'Landed Cost Wizard' and display_name = 'Landed Cost Wizard'") - import_from_files(record_list = [['srm', 'Module Def', 'SRM']]) + import_from_files(record_list = [['buying', 'Module Def', 'SRM']]) elif patch_no == 193: sql("update tabDocField set fieldtype='Button', `trigger`='Client' where parent='Letter Head' and fieldname='set_from_image'") elif patch_no == 194: sql("delete from `tabModule Def Item` where parent = 'SRM' and doc_name = 'Landed Cost Wizard' and display_name = 'Landed Cost Wizard'") - import_from_files(record_list = [['material_management', 'Module Def', 'Material Management']]) + import_from_files(record_list = [['stock', 'Module Def', 'Material Management']]) elif patch_no == 195: from webnotes.modules.module_manager import reload_doc reload_doc('setup','doctype','manage_account') @@ -814,7 +814,7 @@ def execute(patch_no): sql("update `tabModule Def` set module_page = null where name = 'Material Management'") elif patch_no == 197: sql("update `tabDocField` set permlevel = 0, in_filter = 1 where fieldname = 'warranty_amc_status' and parent = 'Customer Issue'") - import_from_files(record_list = [['maintenance', 'doctype', 'customer_issue']]) + import_from_files(record_list = [['support', 'doctype', 'customer_issue']]) elif patch_no == 198: sql("delete from `tabDocField` where (label in ('SMS', 'Send SMS') or fieldname in ('message', 'customer_mobile_no')) and parent in ('Quoattion', 'Sales Order', 'Delivery Note', 'Receivable Voucher')") sql("delete from `tabDocField` where label in ('SMS', 'Send SMS') and parent = 'Purchase Order'") @@ -842,7 +842,7 @@ def execute(patch_no): elif patch_no == 205: sql("update `tabDocField` set `default` = '' where fieldname = 'naming_series' and parent = 'Installation Note'") elif patch_no == 206: - reload_doc('crm','doctype','installation_note') + reload_doc('selling','doctype','installation_note') elif patch_no == 207: import_from_files(record_list = [['setup', 'doctype', 'company']]) elif patch_no == 208: @@ -857,17 +857,17 @@ def execute(patch_no): # reload company because of disturbed UI import_from_files(record_list = [['setup', 'doctype', 'company']]) elif patch_no == 213: - reload_doc('crm','doctype','lead') + reload_doc('selling','doctype','lead') reload_doc('setup','doctype','company') elif patch_no == 214: - reload_doc('crm','doctype','sales_order') + reload_doc('selling','doctype','sales_order') elif patch_no == 215: # patch for item and image in description sql("update tabDocField set width = '300px' where fieldname='description'") - reload_doc('material_management', 'doctype', 'item') + reload_doc('stock', 'doctype', 'item') sql("delete from __DocTypeCache") elif patch_no == 216: - import_from_files(record_list = [['material_management', 'doctype', 'serial_no'], ['material_management', 'doctype', 'stock_ledger_entry']]) + import_from_files(record_list = [['stock', 'doctype', 'serial_no'], ['stock', 'doctype', 'stock_ledger_entry']]) elif patch_no == 217: sql("update tabDocField set options = '\nIn Store\nDelivered\nNot in Use' where fieldname = 'status' and parent = 'Serial No'") sql("update tabDocField set no_copy = 1 where fieldname = 'serial_no' and parent = 'Delivery Note Detail'") @@ -901,13 +901,13 @@ def execute(patch_no): sql("update tabDocField set hidden = 0 where fieldname in ('pay_to_recd_from', 'total_amount', 'total_amount_in_words') and parent = 'Journal Voucher'") sql("update tabDocField set permlevel = 0 where fieldname = 'pay_to_recd_from' and parent = 'Journal Voucher'") elif patch_no == 224: - import_from_files(record_list = [['material_management', 'doctype', 'delivery_note_packing_detail'], ['accounts', 'Print Format', 'Payment Receipt Voucher']]) + import_from_files(record_list = [['stock', 'doctype', 'delivery_note_packing_detail'], ['accounts', 'Print Format', 'Payment Receipt Voucher']]) elif patch_no == 225: - import_from_files(record_list = [['material_management', 'doctype', 'delivery_note_packing_detail']]) + import_from_files(record_list = [['stock', 'doctype', 'delivery_note_packing_detail']]) elif patch_no == 226: - import_from_files(record_list = [['material_management', 'doctype', 'delivery_note_packing_detail']]) + import_from_files(record_list = [['stock', 'doctype', 'delivery_note_packing_detail']]) elif patch_no == 227: - reload_doc('material_management', 'doctype', 'item') + reload_doc('stock', 'doctype', 'item') if webnotes.conn.get_value('Control Panel', None, 'account_id') != 'axjanak2011': sql("delete from tabDocField where parent = 'Item' and fieldname='alternate_description' limit 1") elif patch_no == 228: @@ -920,8 +920,8 @@ def execute(patch_no): elif patch_no == 229: reload_doc('knowledge_base', 'page', 'question_view') elif patch_no == 230: - reload_doc('srm', 'doctype', 'indent') - reload_doc('srm', 'doctype', 'indent_detail') + reload_doc('buying', 'doctype', 'indent') + reload_doc('buying', 'doctype', 'indent_detail') reload_doc('Mapper', 'DocType Mapper', 'Sales Order-Indent') elif patch_no == 231: reload_doc('Mapper', 'DocType Mapper', 'Sales Order-Indent') @@ -952,11 +952,11 @@ def execute(patch_no): reload_doc('core', 'doctype', 'docfield') reload_doc('core', 'doctype', 'doctype') - from patches.feed_patch import set_subjects_and_tagfields + from patches.old_patches.feed_patch import set_subjects_and_tagfields set_subjects_and_tagfields() elif patch_no == 240: # again for sales order (status) - from patches.feed_patch import set_subjects_and_tagfields + from patches.old_patches.feed_patch import set_subjects_and_tagfields set_subjects_and_tagfields() elif patch_no == 241: sql("update `tabDocField` set fieldtype = 'Text', options = '', in_filter = '' where fieldname = 'serial_no' and parent = 'Stock Ledger Entry'") @@ -975,12 +975,12 @@ def execute(patch_no): webnotes.conn.set_value('DocType', 'Custom Field', 'module', 'Core') reload_doc('setup', 'doctype', 'company') elif patch_no == 244: - reload_doc('material_management', 'search_criteria', 'shortage_to_indent') + reload_doc('stock', 'search_criteria', 'shortage_to_indent') elif patch_no == 245: - from patches.doctype_permission_patch import set_doctype_permissions + from patches.old_patches.doctype_permission_patch import set_doctype_permissions set_doctype_permissions() - from patches.feed_patch import set_subjects_and_tagfields + from patches.old_patches.feed_patch import set_subjects_and_tagfields set_subjects_and_tagfields() elif patch_no == 246: webnotes.conn.set_value('DocType','Stock Entry','tag_fields','purpose') @@ -992,16 +992,16 @@ def execute(patch_no): elif patch_no == 249: sql("update `tabDocPerm` t1, `tabDocType` t2 set t1.role = 'System Manager' where t1.role = 'Administrator' and t1.parent = t2.name and t2.module != 'Core'") elif patch_no == 250: - from patches.feed_patch import support_patch + from patches.old_patches.feed_patch import support_patch support_patch() elif patch_no == 251: from webnotes.model import db_schema db_schema.remove_all_foreign_keys() - from patches.customer_address import run_patch + from patches.old_patches.customer_address import run_patch run_patch() elif patch_no == 252: - reload_doc('maintenance','doctype','support_ticket') - reload_doc('maintenance','doctype','support_ticket_response') + reload_doc('support','doctype','support_ticket') + reload_doc('support','doctype','support_ticket_response') elif patch_no == 253: reload_doc('accounts','doctype','ledger_balance_export') reload_doc('accounts','doctype','ledger_detail') @@ -1011,21 +1011,21 @@ def execute(patch_no): updatedb('Ledger Balance Export') updatedb('Ledger Detail') elif patch_no == 254: - reload_doc('settings', 'doctype', 'sms_settings') - reload_doc('settings', 'doctype', 'static_parameter_detail') + reload_doc('setup', 'doctype', 'sms_settings') + reload_doc('setup', 'doctype', 'static_parameter_detail') from webnotes.model.db_schema import updatedb updatedb('SMS Settings') updatedb('Static Parameter Detail') elif patch_no == 255: - from patches.customer_address import run_old_data_sync_patch + from patches.old_patches.customer_address import run_old_data_sync_patch run_old_data_sync_patch() elif patch_no == 256: sql("update `tabLetter Head` set content = replace(content, 'http://46.4.50.84/v170-test/', '')") sql("update `tabSingles` set value = replace(value, 'http://46.4.50.84/v170-test/', '') where field in ('letter_head', 'client_name') and doctype = 'Control Panel'") sql("update `tabItem` set description_html = replace(description_html, 'http://46.4.50.84/v170-test/', '')") elif patch_no == 257: - from patches.customer_address import run_old_data_sync_patch + from patches.old_patches.customer_address import run_old_data_sync_patch run_old_data_sync_patch() elif patch_no == 258: sql("update tabDocField set `default`=NULL where fieldname = 'naming_series'") @@ -1045,7 +1045,7 @@ def execute(patch_no): elif patch_no == 261: sql("update `tabPrint Format` set html = replace(html, 'customer_address', 'address_display')") elif patch_no == 262: - from patches.customer_address import sync_lead_phone + from patches.old_patches.customer_address import sync_lead_phone sync_lead_phone() elif patch_no == 263: ol = ['','Open','To Reply','Waiting for Customer','Hold','Closed'] @@ -1074,8 +1074,8 @@ def execute(patch_no): except: pass elif patch_no == 271: # tags patch - reload_doc('crm','doctype','sales_order') - reload_doc('material_management','doctype','delivery_note') + reload_doc('selling','doctype','sales_order') + reload_doc('stock','doctype','delivery_note') sql("delete from tabDocField where fieldname='per_amt_billed' and parent in ('Sales Order', 'Delivery Note')") sql("""update `tabSales Order` set delivery_status = if(ifnull(per_delivered,0) < 0.001, 'Not Delivered', @@ -1096,7 +1096,7 @@ def execute(patch_no): sn = sql("select name from `tabSearch Criteria` where criteria_name = 'Sales Personwise Transaction Summary'") for d in sn: delete_doc('Search Criteria', d[0]) - reload_doc('crm', 'search_criteria', 'sales_personwise_transaction_summary') + reload_doc('selling', 'search_criteria', 'sales_personwise_transaction_summary') elif patch_no == 277: webnotes.model.delete_doc('DocType','HomePage Settings') webnotes.model.delete_doc('DocType','Badge Settings') @@ -1140,7 +1140,7 @@ def execute(patch_no): for d in rec: sql("update `tab%s` set docstatus = %s where name = '%s'" % (d[0], d[2]=='No' and 1 or 2, d[1])) elif patch_no == 284: - reload_doc('maintenance', 'doctype', 'support_ticket') + reload_doc('support', 'doctype', 'support_ticket') sql("update `tabDocField` set in_filter = 1 where fieldname in ('raised_by', 'subject') and parent = 'Support Ticket'") elif patch_no == 286: reload_doc('accounts', 'search_criteria', 'itemwise_sales_register') @@ -1161,7 +1161,7 @@ def execute(patch_no): md.module_label = 'Home' md.save(1) elif patch_no == 291: - reload_doc('tools','doctype','rename_tool') + reload_doc('utilities','doctype','rename_tool') elif patch_no == 292: reload_doc('accounts', 'search_criteria', 'trial_balance') elif patch_no == 293: @@ -1178,14 +1178,14 @@ def execute(patch_no): sql("update `tabDocField` set options = 'Billed\nNot Billed\nPartly Billed\nClosed' where parent = 'Sales Order' and fieldname = 'billing_status'") elif patch_no == 296: sql("delete from tabDocField where parent='Support Ticket' and fieldname='contact_no'") - reload_doc('maintenance', 'doctype', 'support_ticket') + reload_doc('support', 'doctype', 'support_ticket') elif patch_no == 297: - reload_doc('payroll', 'doctype', 'employee') - reload_doc('payroll', 'doctype', 'attendance') - reload_doc('payroll', 'doctype', 'expense_voucher') - reload_doc('payroll', 'doctype', 'appraisal') - reload_doc('payroll', 'doctype', 'salary_structure') - reload_doc('payroll', 'doctype', 'salary_slip') + reload_doc('hr', 'doctype', 'employee') + reload_doc('hr', 'doctype', 'attendance') + reload_doc('hr', 'doctype', 'expense_voucher') + reload_doc('hr', 'doctype', 'appraisal') + reload_doc('hr', 'doctype', 'salary_structure') + reload_doc('hr', 'doctype', 'salary_slip') elif patch_no == 298: sql("update `tabDocField` set options = 'link:Company' where parent = 'Attendance' and fieldname = 'company'") sql("update `tabDocField` set options = 'link:Company' where parent = 'Expense Voucher' and fieldname = 'company'") @@ -1212,7 +1212,7 @@ def execute(patch_no): sql("update `tabDocField` set options = 'link:Item' where parent = 'Raw Materials Supplied' and fieldname = 'po_item'") sql("update `tabDocField` set options = 'Sales Order' where parent = 'Indent Detail' and fieldname = 'sales_order_no'") sql("update `tabDocField` set options = 'link:Company', fieldtype = 'Select' where parent = 'Stock Ledger Entry' and fieldname = 'company'") - reload_doc('tools', 'doctype', 'rename_tool') + reload_doc('utilities', 'doctype', 'rename_tool') elif patch_no == 307: sql("delete from `tabDocField` where parent = 'company' and label = 'Trash Company' and fieldtype = 'Button'") reload_doc('setup', 'doctype', 'company') @@ -1321,4 +1321,4 @@ def execute(patch_no): delete_doc('DocType', 'Support Email Settings') reload_doc('support','doctype','support_ticket') - sql("delete from tabDocField where fieldname='problem_description' and parent='Support Ticket'") \ No newline at end of file + sql("delete from tabDocField where fieldname='problem_description' and parent='Support Ticket'") From 86f3028fc1492c88fd5de4dd310509a1f051d5eb Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 28 Jul 2011 13:13:52 +0530 Subject: [PATCH 04/42] added __init__.py file in old patches dir --- patches/old_patches/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 patches/old_patches/__init__.py diff --git a/patches/old_patches/__init__.py b/patches/old_patches/__init__.py new file mode 100644 index 0000000000..e69de29bb2 From 25ffe5b9a4e411d3eed5a741e422188de902e8b4 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 28 Jul 2011 13:49:03 +0530 Subject: [PATCH 05/42] modules renamed in customer_address and feed patch --- patches/old_patches/customer_address.py | 32 ++++++++++++------------- patches/old_patches/feed_patch.py | 5 ++-- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/patches/old_patches/customer_address.py b/patches/old_patches/customer_address.py index 6a031c4d30..41c97b8e5d 100644 --- a/patches/old_patches/customer_address.py +++ b/patches/old_patches/customer_address.py @@ -6,7 +6,7 @@ from webnotes import msgprint, errprint def make_address(): from webnotes.modules.module_manager import reload_doc - reload_doc('tools','doctype','address') + reload_doc('utilities','doctype','address') from webnotes.model.db_schema import updatedb updatedb('Address') @@ -113,24 +113,24 @@ def delete_unwanted_fields(): def reload_doc_files(): from webnotes.modules.module_manager import reload_doc - reload_doc('tools', 'doctype', 'contact') - reload_doc('crm', 'doctype', 'customer') - reload_doc('maintenance', 'doctype', 'customer_issue') - reload_doc('material_management', 'doctype', 'delivery_note') - reload_doc('crm', 'doctype', 'enquiry') - reload_doc('crm', 'doctype', 'installation_note') - reload_doc('crm', 'doctype', 'lead') - reload_doc('maintenance', 'doctype', 'maintenance_schedule') - reload_doc('maintenance', 'doctype', 'maintenance_visit') - reload_doc('srm', 'doctype', 'purchase_order') - reload_doc('material_management', 'doctype', 'purchase_receipt') - reload_doc('crm', 'doctype', 'quotation') + reload_doc('utilities', 'doctype', 'contact') + reload_doc('selling', 'doctype', 'customer') + reload_doc('support', 'doctype', 'customer_issue') + reload_doc('stock', 'doctype', 'delivery_note') + reload_doc('selling', 'doctype', 'enquiry') + reload_doc('selling', 'doctype', 'installation_note') + reload_doc('selling', 'doctype', 'lead') + reload_doc('support', 'doctype', 'maintenance_schedule') + reload_doc('support', 'doctype', 'maintenance_visit') + reload_doc('buying', 'doctype', 'purchase_order') + reload_doc('stock', 'doctype', 'purchase_receipt') + reload_doc('selling', 'doctype', 'quotation') reload_doc('accounts', 'doctype', 'receivable_voucher') reload_doc('accounts', 'doctype', 'payable_voucher') - reload_doc('crm', 'doctype', 'sales_order') + reload_doc('selling', 'doctype', 'sales_order') reload_doc('setup', 'doctype', 'sales_partner') - reload_doc('material_management', 'doctype', 'serial_no') - reload_doc('srm', 'doctype', 'supplier') + reload_doc('stock', 'doctype', 'serial_no') + reload_doc('buying', 'doctype', 'supplier') def reload_mapper_files(): from webnotes.modules.module_manager import reload_doc diff --git a/patches/old_patches/feed_patch.py b/patches/old_patches/feed_patch.py index d368aa00c9..9d8ab0b4dd 100644 --- a/patches/old_patches/feed_patch.py +++ b/patches/old_patches/feed_patch.py @@ -98,6 +98,5 @@ def support_patch(): webnotes.model.delete_doc('DocType','Support Ticket') reload_doc('setup','doctype','support_email_settings') - reload_doc('maintenance','doctype','support_ticket') - reload_doc('maintenance','doctype','support_ticket_response') - + reload_doc('support','doctype','support_ticket') + reload_doc('support','doctype','support_ticket_response') From 43a3a619b378ee386c68d7fb2ffbca913e77be1b Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 28 Jul 2011 15:38:23 +0530 Subject: [PATCH 06/42] clearance date will be copy while amending journal voucher --- accounts/doctype/journal_voucher/journal_voucher.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/accounts/doctype/journal_voucher/journal_voucher.js b/accounts/doctype/journal_voucher/journal_voucher.js index dce570b4d4..f65ee3169d 100644 --- a/accounts/doctype/journal_voucher/journal_voucher.js +++ b/accounts/doctype/journal_voucher/journal_voucher.js @@ -1,9 +1,5 @@ cur_frm.cscript.onload = function(doc, cdt, cdn) { var cp = locals['Control Panel']['Control Panel']; - if(doc.__islocal){ - doc.clearance_date =''; - refresh_field('clearance_date'); - } if (!doc.voucher_date) doc.voucher_date = dateutil.obj_to_str(new Date()); @@ -155,4 +151,4 @@ cur_frm.cscript['View Ledger Entry'] = function(doc,cdt,cdn){ report.dt.run(); } loadreport('GL Entry','General Ledger', callback); -} \ No newline at end of file +} From 3df28592994e7b56d6dc35480c0c42a41793449d Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 28 Jul 2011 16:01:16 +0530 Subject: [PATCH 07/42] update modified date of JV through bank reconciliation --- .../bank_reconciliation.py | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/accounts/doctype/bank_reconciliation/bank_reconciliation.py b/accounts/doctype/bank_reconciliation/bank_reconciliation.py index 8434f628d3..3ba477b319 100644 --- a/accounts/doctype/bank_reconciliation/bank_reconciliation.py +++ b/accounts/doctype/bank_reconciliation/bank_reconciliation.py @@ -18,32 +18,32 @@ convert_to_lists = webnotes.conn.convert_to_lists class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl + def __init__(self, d, dl): + self.doc, self.doclist = d, dl - def get_details(self): - if not (self.doc.bank_account and self.doc.from_date and self.doc.to_date): - msgprint("Bank Account, From Date and To Date are Mandatory") - return - - dl = sql("select t1.name, t1.cheque_no, t1.cheque_date, t2.debit, t2.credit, t1.posting_date, t2.against_account from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t2.parent = t1.name and t2.account = %s and (clearance_date is null or clearance_date = '0000-00-00' or clearance_date = '') and (t1.cheque_no is not null or t1.cheque_no != '') and t1.posting_date >= %s and t1.posting_date <= %s and t1.docstatus=1", (self.doc.bank_account, self.doc.from_date, self.doc.to_date)) - - self.doc.clear_table(self.doclist, 'entries') - self.doc.total_amount = 0.0 + def get_details(self): + if not (self.doc.bank_account and self.doc.from_date and self.doc.to_date): + msgprint("Bank Account, From Date and To Date are Mandatory") + return + + dl = sql("select t1.name, t1.cheque_no, t1.cheque_date, t2.debit, t2.credit, t1.posting_date, t2.against_account from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where t2.parent = t1.name and t2.account = %s and (clearance_date is null or clearance_date = '0000-00-00' or clearance_date = '') and (t1.cheque_no is not null or t1.cheque_no != '') and t1.posting_date >= %s and t1.posting_date <= %s and t1.docstatus=1", (self.doc.bank_account, self.doc.from_date, self.doc.to_date)) + + self.doc.clear_table(self.doclist, 'entries') + self.doc.total_amount = 0.0 - for d in dl: - nl = addchild(self.doc, 'entries', 'Bank Reconciliation Detail', 1, self.doclist) - nl.posting_date = str(d[5]) - nl.voucher_id = str(d[0]) - nl.cheque_number = str(d[1]) - nl.cheque_date = str(d[2]) - nl.debit = flt(d[3]) - nl.credit = flt(d[4]) - nl.against_account = d[6] - self.doc.total_amount += flt(flt(d[4]) - flt(d[3])) + for d in dl: + nl = addchild(self.doc, 'entries', 'Bank Reconciliation Detail', 1, self.doclist) + nl.posting_date = str(d[5]) + nl.voucher_id = str(d[0]) + nl.cheque_number = str(d[1]) + nl.cheque_date = str(d[2]) + nl.debit = flt(d[3]) + nl.credit = flt(d[4]) + nl.against_account = d[6] + self.doc.total_amount += flt(flt(d[4]) - flt(d[3])) - def update_details(self): - for d in getlist(self.doclist, 'entries'): - if d.clearance_date: - sql("update `tabJournal Voucher` set clearance_date = %s where name=%s", (d.clearance_date, d.voucher_id)) - msgprint("Updated") \ No newline at end of file + def update_details(self): + for d in getlist(self.doclist, 'entries'): + if d.clearance_date: + sql("update `tabJournal Voucher` set clearance_date = %s, modified = %s where name=%s", (d.clearance_date, nowdate(), d.voucher_id)) + msgprint("Updated") From b824cdbbfdedecc9b71ed954409d727fcd062587 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 28 Jul 2011 16:17:32 +0530 Subject: [PATCH 08/42] update modified date of JV through bank reco --- .../doctype/period_closing_voucher/period_closing_voucher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/accounts/doctype/period_closing_voucher/period_closing_voucher.py b/accounts/doctype/period_closing_voucher/period_closing_voucher.py index ed42459ca5..c7e5db6639 100644 --- a/accounts/doctype/period_closing_voucher/period_closing_voucher.py +++ b/accounts/doctype/period_closing_voucher/period_closing_voucher.py @@ -129,7 +129,7 @@ class DocType: # save le.save(1) - le_obj.on_update(adv_adj = '') + le_obj.on_update(adv_adj = '', cancel = '') # Reposting Balances From 7c285712e100a845389af83e8b21e9b419689c60 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 28 Jul 2011 16:17:32 +0530 Subject: [PATCH 09/42] fixed error in period closing voucher --- .../doctype/period_closing_voucher/period_closing_voucher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/accounts/doctype/period_closing_voucher/period_closing_voucher.py b/accounts/doctype/period_closing_voucher/period_closing_voucher.py index ed42459ca5..c7e5db6639 100644 --- a/accounts/doctype/period_closing_voucher/period_closing_voucher.py +++ b/accounts/doctype/period_closing_voucher/period_closing_voucher.py @@ -129,7 +129,7 @@ class DocType: # save le.save(1) - le_obj.on_update(adv_adj = '') + le_obj.on_update(adv_adj = '', cancel = '') # Reposting Balances From c1ef503d98ec630356c0d4314d6aa28ed9ceed17 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Fri, 29 Jul 2011 13:01:54 +0530 Subject: [PATCH 10/42] Patch to transfer db_name to account_id in control panel --- patches/patch.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/patches/patch.py b/patches/patch.py index 86fcff6290..9894d20249 100644 --- a/patches/patch.py +++ b/patches/patch.py @@ -1,7 +1,7 @@ # REMEMBER to update this # ======================== -last_patch = 332 +last_patch = 333 #------------------------------------------- @@ -1336,3 +1336,7 @@ def execute(patch_no): p.add_permission('Lease Agreement', 'Accounts Manager', 1, read = 1) elif patch_no == 332: sql("update `tabDocField` set permlevel=1, hidden = 1 where parent = 'Bulk Rename Tool' and fieldname = 'file_list'") + elif patch_no == 333: + cp = Document('Control Panel','Control Panel') + cp.account_id = str(webnotes.cookies['account_id']).split('=')[-1] + cp.save() \ No newline at end of file From 38d12235385b2930f148616193e41d3377810699 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Fri, 29 Jul 2011 13:13:46 +0530 Subject: [PATCH 11/42] Removed patch to modify account id in control panel. Will write script to update that --- patches/patch.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/patches/patch.py b/patches/patch.py index 9894d20249..b3dc6a333b 100644 --- a/patches/patch.py +++ b/patches/patch.py @@ -1,7 +1,7 @@ # REMEMBER to update this # ======================== -last_patch = 333 +last_patch = 332 #------------------------------------------- @@ -1335,8 +1335,4 @@ def execute(patch_no): p.add_permission('Lease Agreement', 'Accounts Manager', 0, read = 1, write=1,submit=1, cancel=1,amend=1) p.add_permission('Lease Agreement', 'Accounts Manager', 1, read = 1) elif patch_no == 332: - sql("update `tabDocField` set permlevel=1, hidden = 1 where parent = 'Bulk Rename Tool' and fieldname = 'file_list'") - elif patch_no == 333: - cp = Document('Control Panel','Control Panel') - cp.account_id = str(webnotes.cookies['account_id']).split('=')[-1] - cp.save() \ No newline at end of file + sql("update `tabDocField` set permlevel=1, hidden = 1 where parent = 'Bulk Rename Tool' and fieldname = 'file_list'") \ No newline at end of file From 510dad7aa7a8503fef008bdd6237bb9121d3c62a Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 2 Aug 2011 12:54:23 +0530 Subject: [PATCH 12/42] fixed error in period closing voucher --- .../doctype/period_closing_voucher/period_closing_voucher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/accounts/doctype/period_closing_voucher/period_closing_voucher.py b/accounts/doctype/period_closing_voucher/period_closing_voucher.py index ed42459ca5..c7e5db6639 100644 --- a/accounts/doctype/period_closing_voucher/period_closing_voucher.py +++ b/accounts/doctype/period_closing_voucher/period_closing_voucher.py @@ -129,7 +129,7 @@ class DocType: # save le.save(1) - le_obj.on_update(adv_adj = '') + le_obj.on_update(adv_adj = '', cancel = '') # Reposting Balances From 8d8dfc3e8df9eddc70d52b98eb7f3b1a5d1ae35f Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 2 Aug 2011 13:16:12 +0530 Subject: [PATCH 13/42] fixed patches --- patches/patch.py | 131 ++++------------------------------------------- 1 file changed, 9 insertions(+), 122 deletions(-) diff --git a/patches/patch.py b/patches/patch.py index 5def7a9f8e..2fbffd8d5b 100644 --- a/patches/patch.py +++ b/patches/patch.py @@ -56,17 +56,8 @@ def execute(patch_no): pass elif patch_no == 40: -<<<<<<< HEAD -<<<<<<< HEAD - import_from_files(record_list=[['material_management','doctype','item']]) -======= - - import_from_files(record_list=[['stock','doctype','item']]) ->>>>>>> stable -======= - import_from_files(record_list=[['stock','doctype','item']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c + elif patch_no == 42: acc = sql("select name, lft, rgt from tabAccount where account_name in ('Incomes', 'Expenses')") for d in acc: @@ -134,17 +125,8 @@ def execute(patch_no): elif patch_no == 56: sql("delete from `tabModule Def Item` where parent = 'CRM' and doc_type = 'Reports' and doc_name = 'Delivery Note' and display_name = 'Territory, Item Group wise GP'") elif patch_no == 57: -<<<<<<< HEAD -<<<<<<< HEAD + import_from_files(record_list=[['selling','doctype','sales_order_detail']]) - import_from_files(record_list=[['crm','doctype','sales_order_detail']]) -======= - - import_from_files(record_list=[['selling','doctype','sales_order_detail']]) ->>>>>>> stable -======= - import_from_files(record_list=[['selling','doctype','sales_order_detail']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c elif patch_no == 58: # module def patches sql("update `tabModule Def` set module_page = NULL where name not in ('Event Updates', 'Setup', 'My Company')") @@ -178,17 +160,8 @@ def execute(patch_no): sql("delete from `tabTDS Category Account` where company not in (select name from tabCompany)") elif patch_no == 62: # Import Supplier Quotation -<<<<<<< HEAD -<<<<<<< HEAD - import_from_files(record_list=[['srm','doctype','supplier_quotation']]) -======= - - import_from_files(record_list=[['buying','doctype','supplier_quotation']]) ->>>>>>> stable -======= - import_from_files(record_list=[['buying','doctype','supplier_quotation']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c + # Adding Status Filter sql("update tabDocType set search_fields = concat('status,',search_fields) where name IN ('Delivery Note','Leave Transaction')") # Import Other Charges @@ -196,17 +169,8 @@ def execute(patch_no): import_from_files(record_list=[['setup','doctype','other_charges']]) elif patch_no == 63: sql("update `tabDocField` set permlevel = 1 where fieldname in ('return_date', 'return_details') and parent = 'Sales and Purchase Return Wizard'") -<<<<<<< HEAD -<<<<<<< HEAD - import_from_files(record_list = [['accounts', 'doctype', 'rv_detail'], ['material_management', 'doctype', 'sales_and_purchase_return_wizard'], ['material_management', 'doctype', 'stock_entry']]) -======= - - import_from_files(record_list = [['accounts', 'doctype', 'rv_detail'], ['stock', 'doctype', 'sales_and_purchase_return_wizard'], ['stock', 'doctype', 'stock_entry']]) ->>>>>>> stable -======= - import_from_files(record_list = [['accounts', 'doctype', 'rv_detail'], ['stock', 'doctype', 'sales_and_purchase_return_wizard'], ['stock', 'doctype', 'stock_entry']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c + elif patch_no == 64: sql("update tabDocField set `hidden` = 1, `print_hide` = 1, `report_hide` = 1 where options in ('RFQ','Supplier Quotation')") sql("update tabDocType set `read_only` = 1, in_create = 1 where name in ('RFQ','Supplier Quotation')") @@ -387,17 +351,7 @@ def execute(patch_no): p.add_permission('Salary Slip', 'Employee', 1, read = 1, match = 'owner') elif patch_no == 79: # Import Modules -<<<<<<< HEAD -<<<<<<< HEAD - - import_from_files(record_list=[['payroll','doctype','leave_application'],['payroll','doctype','leave_allocation'],['payroll','doctype','leave_control_panel'],['payroll','doctype','holiday_list'],['payroll','doctype','holiday_list_detail'],['payroll','Module Def','Payroll']]) -======= - - import_from_files(record_list=[['hr','doctype','leave_application'],['hr','doctype','leave_allocation'],['hr','doctype','leave_control_panel'],['hr','doctype','holiday_list'],['hr','doctype','holiday_list_detail'],['hr','Module Def','Payroll']]) ->>>>>>> stable -======= - import_from_files(record_list=[['hr','doctype','leave_application'],['hr','doctype','leave_allocation'],['hr','doctype','leave_control_panel'],['hr','doctype','holiday_list'],['hr','doctype','holiday_list_detail'],['hr','Module Def','Payroll']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c + import_from_files(record_list=[['hr','doctype','leave_application'],['hr','doctype','leave_allocation'],['hr','doctype','leave_control_panel'],['hr','doctype','holiday_list'],['hr','doctype','holiday_list_detail'],['hr','Module Def','HR']]) elif patch_no == 80: # Holiday List sql("update `tabHoliday List Detail` set description = holiday_name") @@ -450,17 +404,7 @@ def execute(patch_no): elif patch_no == 81: # Import Modules -<<<<<<< HEAD -<<<<<<< HEAD - - import_from_files(record_list=[['payroll','Module Def','Payroll']]) -======= - - import_from_files(record_list=[['hr','Module Def','Payroll']]) ->>>>>>> stable -======= - import_from_files(record_list=[['hr','Module Def','Payroll']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c + import_from_files(record_list=[['hr','Module Def','HR']]) elif patch_no == 82: sql("update tabDocType set search_fields = 'employee,leave_type,total_leaves_allocated,fiscal_year' where name = 'Leave Allocation'") sql("update tabDocType set search_fields = 'employee,leave_type,from_date,to_date,total_leave_days,fiscal_year' where name = 'Leave Application'") @@ -486,32 +430,13 @@ def execute(patch_no): sql("update tabDocPerm set `match` = '' where parent = 'Leave Application' and role = 'HR User'") elif patch_no == 86: # Import Modules -<<<<<<< HEAD -<<<<<<< HEAD - - import_from_files(record_list=[['payroll','doctype','leave_type']]) -======= - import_from_files(record_list=[['hr','doctype','leave_type']]) ->>>>>>> stable -======= - import_from_files(record_list=[['hr','doctype','leave_type']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c elif patch_no == 87: sql("update `tabLeave Type` set is_lwp = 1 where name = 'Leave Without Pay'") elif patch_no == 88: # Import Modules -<<<<<<< HEAD -<<<<<<< HEAD + import_from_files(record_list=[['hr','doctype','leave_allocation']]) - import_from_files(record_list=[['payroll','doctype','leave_allocation']]) -======= - - import_from_files(record_list=[['hr','doctype','leave_allocation']]) ->>>>>>> stable -======= - import_from_files(record_list=[['hr','doctype','leave_allocation']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c elif patch_no == 89: sql("delete from `tabModule Def Item` where doc_type = 'Setup Forms' and doc_name in ('Payroll Rule', 'IT Checklist', 'Employee Profile') and parent = 'Payroll'") sql("update `tabDocField` set `hidden` = 1, `print_hide` = 1, `report_hide` = 1 where parent = 'Leave Type' and fieldname = 'is_encash'") @@ -529,17 +454,7 @@ def execute(patch_no): sql("update `tabTable Mapper Detail` set validation_logic = 'qty > ifnull(billed_qty,0) and docstatus = 1' where parent = 'Sales Order-Receivable Voucher' and from_table = 'Sales Order Detail'") sql("update `tabField Mapper Detail` set from_field = 'customer' where to_field = 'customer' and parent = 'Sales Order-Receivable Voucher'") elif patch_no == 94: -<<<<<<< HEAD -<<<<<<< HEAD - - import_from_files(record_list=[['crm','doctype','sms_center']]) -======= - import_from_files(record_list=[['selling','doctype','sms_center']]) ->>>>>>> stable -======= - import_from_files(record_list=[['selling','doctype','sms_center']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c elif patch_no == 95: import_from_files(record_list=[['mapper','DocType Mapper','Sales Order-Receivable Voucher'], ['mapper','DocType Mapper','Delivery Note-Receivable Voucher']]) elif patch_no == 96: @@ -570,17 +485,8 @@ def execute(patch_no): elif patch_no == 103: sql("update tabDocField set fieldname = '' where fieldtype = 'HTML'") elif patch_no == 104: -<<<<<<< HEAD -<<<<<<< HEAD + import_from_files(record_list=[['hr','search_criteria','stdsrch_00001'],['hr','search_criteria','stdsrch_00002'],['hr','search_criteria','stdsrch_00003'],['hr','Module Def','HR'],['hr','doctype','leave_application'],['hr','doctype','leave_allocation']]) - import_from_files(record_list=[['payroll','search_criteria','stdsrch_00001'],['payroll','search_criteria','stdsrch_00002'],['payroll','search_criteria','stdsrch_00003'],['payroll','Module Def','Payroll'],['payroll','doctype','leave_application'],['payroll','doctype','leave_allocation']]) -======= - - import_from_files(record_list=[['hr','search_criteria','stdsrch_00001'],['hr','search_criteria','stdsrch_00002'],['hr','search_criteria','stdsrch_00003'],['hr','Module Def','Payroll'],['hr','doctype','leave_application'],['hr','doctype','leave_allocation']]) ->>>>>>> stable -======= - import_from_files(record_list=[['hr','search_criteria','stdsrch_00001'],['hr','search_criteria','stdsrch_00002'],['hr','search_criteria','stdsrch_00003'],['hr','Module Def','Payroll'],['hr','doctype','leave_application'],['hr','doctype','leave_allocation']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c elif patch_no == 105: # Employee Leave Balance sql("delete from `tabModule Def Item` where parent = 'Payroll' and doc_type = 'Reports' and display_name IN ('Employeewise Leave Transaction Details','Employeewise Balance Leave Report')") @@ -1040,17 +946,8 @@ def execute(patch_no): elif patch_no == 239: reload_doc('core', 'doctype', 'docfield') reload_doc('core', 'doctype', 'doctype') -<<<<<<< HEAD -<<<<<<< HEAD + from patches.old_patches.feed_patch import set_subjects_and_tagfields - from patches.feed_patch import set_subjects_and_tagfields -======= - - from patches.old_patches.feed_patch import set_subjects_and_tagfields ->>>>>>> stable -======= - from patches.old_patches.feed_patch import set_subjects_and_tagfields ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c set_subjects_and_tagfields() elif patch_no == 240: # again for sales order (status) @@ -1123,18 +1020,8 @@ def execute(patch_no): sql("update `tabSingles` set value = replace(value, 'http://46.4.50.84/v170-test/', '') where field in ('letter_head', 'client_name') and doctype = 'Control Panel'") sql("update `tabItem` set description_html = replace(description_html, 'http://46.4.50.84/v170-test/', '')") elif patch_no == 257: -<<<<<<< HEAD -<<<<<<< HEAD - from patches.customer_address import run_old_data_sync_patch - run_old_data_sync_patch() -======= - from patches.old_patches.customer_address import run_old_data_sync_patch - run_old_data_sync_patch() ->>>>>>> stable -======= from patches.old_patches.customer_address import run_old_data_sync_patch run_old_data_sync_patch() ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c elif patch_no == 258: sql("update tabDocField set `default`=NULL where fieldname = 'naming_series'") elif patch_no == 259: From 542da5e9eeeda2e5ce749fe4294d418b532a86dc Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 2 Aug 2011 13:31:59 +0530 Subject: [PATCH 14/42] merged patch from stable --- patches/patch.py | 131 ++++------------------------------------------- 1 file changed, 9 insertions(+), 122 deletions(-) diff --git a/patches/patch.py b/patches/patch.py index 5def7a9f8e..2fbffd8d5b 100644 --- a/patches/patch.py +++ b/patches/patch.py @@ -56,17 +56,8 @@ def execute(patch_no): pass elif patch_no == 40: -<<<<<<< HEAD -<<<<<<< HEAD - import_from_files(record_list=[['material_management','doctype','item']]) -======= - - import_from_files(record_list=[['stock','doctype','item']]) ->>>>>>> stable -======= - import_from_files(record_list=[['stock','doctype','item']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c + elif patch_no == 42: acc = sql("select name, lft, rgt from tabAccount where account_name in ('Incomes', 'Expenses')") for d in acc: @@ -134,17 +125,8 @@ def execute(patch_no): elif patch_no == 56: sql("delete from `tabModule Def Item` where parent = 'CRM' and doc_type = 'Reports' and doc_name = 'Delivery Note' and display_name = 'Territory, Item Group wise GP'") elif patch_no == 57: -<<<<<<< HEAD -<<<<<<< HEAD + import_from_files(record_list=[['selling','doctype','sales_order_detail']]) - import_from_files(record_list=[['crm','doctype','sales_order_detail']]) -======= - - import_from_files(record_list=[['selling','doctype','sales_order_detail']]) ->>>>>>> stable -======= - import_from_files(record_list=[['selling','doctype','sales_order_detail']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c elif patch_no == 58: # module def patches sql("update `tabModule Def` set module_page = NULL where name not in ('Event Updates', 'Setup', 'My Company')") @@ -178,17 +160,8 @@ def execute(patch_no): sql("delete from `tabTDS Category Account` where company not in (select name from tabCompany)") elif patch_no == 62: # Import Supplier Quotation -<<<<<<< HEAD -<<<<<<< HEAD - import_from_files(record_list=[['srm','doctype','supplier_quotation']]) -======= - - import_from_files(record_list=[['buying','doctype','supplier_quotation']]) ->>>>>>> stable -======= - import_from_files(record_list=[['buying','doctype','supplier_quotation']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c + # Adding Status Filter sql("update tabDocType set search_fields = concat('status,',search_fields) where name IN ('Delivery Note','Leave Transaction')") # Import Other Charges @@ -196,17 +169,8 @@ def execute(patch_no): import_from_files(record_list=[['setup','doctype','other_charges']]) elif patch_no == 63: sql("update `tabDocField` set permlevel = 1 where fieldname in ('return_date', 'return_details') and parent = 'Sales and Purchase Return Wizard'") -<<<<<<< HEAD -<<<<<<< HEAD - import_from_files(record_list = [['accounts', 'doctype', 'rv_detail'], ['material_management', 'doctype', 'sales_and_purchase_return_wizard'], ['material_management', 'doctype', 'stock_entry']]) -======= - - import_from_files(record_list = [['accounts', 'doctype', 'rv_detail'], ['stock', 'doctype', 'sales_and_purchase_return_wizard'], ['stock', 'doctype', 'stock_entry']]) ->>>>>>> stable -======= - import_from_files(record_list = [['accounts', 'doctype', 'rv_detail'], ['stock', 'doctype', 'sales_and_purchase_return_wizard'], ['stock', 'doctype', 'stock_entry']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c + elif patch_no == 64: sql("update tabDocField set `hidden` = 1, `print_hide` = 1, `report_hide` = 1 where options in ('RFQ','Supplier Quotation')") sql("update tabDocType set `read_only` = 1, in_create = 1 where name in ('RFQ','Supplier Quotation')") @@ -387,17 +351,7 @@ def execute(patch_no): p.add_permission('Salary Slip', 'Employee', 1, read = 1, match = 'owner') elif patch_no == 79: # Import Modules -<<<<<<< HEAD -<<<<<<< HEAD - - import_from_files(record_list=[['payroll','doctype','leave_application'],['payroll','doctype','leave_allocation'],['payroll','doctype','leave_control_panel'],['payroll','doctype','holiday_list'],['payroll','doctype','holiday_list_detail'],['payroll','Module Def','Payroll']]) -======= - - import_from_files(record_list=[['hr','doctype','leave_application'],['hr','doctype','leave_allocation'],['hr','doctype','leave_control_panel'],['hr','doctype','holiday_list'],['hr','doctype','holiday_list_detail'],['hr','Module Def','Payroll']]) ->>>>>>> stable -======= - import_from_files(record_list=[['hr','doctype','leave_application'],['hr','doctype','leave_allocation'],['hr','doctype','leave_control_panel'],['hr','doctype','holiday_list'],['hr','doctype','holiday_list_detail'],['hr','Module Def','Payroll']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c + import_from_files(record_list=[['hr','doctype','leave_application'],['hr','doctype','leave_allocation'],['hr','doctype','leave_control_panel'],['hr','doctype','holiday_list'],['hr','doctype','holiday_list_detail'],['hr','Module Def','HR']]) elif patch_no == 80: # Holiday List sql("update `tabHoliday List Detail` set description = holiday_name") @@ -450,17 +404,7 @@ def execute(patch_no): elif patch_no == 81: # Import Modules -<<<<<<< HEAD -<<<<<<< HEAD - - import_from_files(record_list=[['payroll','Module Def','Payroll']]) -======= - - import_from_files(record_list=[['hr','Module Def','Payroll']]) ->>>>>>> stable -======= - import_from_files(record_list=[['hr','Module Def','Payroll']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c + import_from_files(record_list=[['hr','Module Def','HR']]) elif patch_no == 82: sql("update tabDocType set search_fields = 'employee,leave_type,total_leaves_allocated,fiscal_year' where name = 'Leave Allocation'") sql("update tabDocType set search_fields = 'employee,leave_type,from_date,to_date,total_leave_days,fiscal_year' where name = 'Leave Application'") @@ -486,32 +430,13 @@ def execute(patch_no): sql("update tabDocPerm set `match` = '' where parent = 'Leave Application' and role = 'HR User'") elif patch_no == 86: # Import Modules -<<<<<<< HEAD -<<<<<<< HEAD - - import_from_files(record_list=[['payroll','doctype','leave_type']]) -======= - import_from_files(record_list=[['hr','doctype','leave_type']]) ->>>>>>> stable -======= - import_from_files(record_list=[['hr','doctype','leave_type']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c elif patch_no == 87: sql("update `tabLeave Type` set is_lwp = 1 where name = 'Leave Without Pay'") elif patch_no == 88: # Import Modules -<<<<<<< HEAD -<<<<<<< HEAD + import_from_files(record_list=[['hr','doctype','leave_allocation']]) - import_from_files(record_list=[['payroll','doctype','leave_allocation']]) -======= - - import_from_files(record_list=[['hr','doctype','leave_allocation']]) ->>>>>>> stable -======= - import_from_files(record_list=[['hr','doctype','leave_allocation']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c elif patch_no == 89: sql("delete from `tabModule Def Item` where doc_type = 'Setup Forms' and doc_name in ('Payroll Rule', 'IT Checklist', 'Employee Profile') and parent = 'Payroll'") sql("update `tabDocField` set `hidden` = 1, `print_hide` = 1, `report_hide` = 1 where parent = 'Leave Type' and fieldname = 'is_encash'") @@ -529,17 +454,7 @@ def execute(patch_no): sql("update `tabTable Mapper Detail` set validation_logic = 'qty > ifnull(billed_qty,0) and docstatus = 1' where parent = 'Sales Order-Receivable Voucher' and from_table = 'Sales Order Detail'") sql("update `tabField Mapper Detail` set from_field = 'customer' where to_field = 'customer' and parent = 'Sales Order-Receivable Voucher'") elif patch_no == 94: -<<<<<<< HEAD -<<<<<<< HEAD - - import_from_files(record_list=[['crm','doctype','sms_center']]) -======= - import_from_files(record_list=[['selling','doctype','sms_center']]) ->>>>>>> stable -======= - import_from_files(record_list=[['selling','doctype','sms_center']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c elif patch_no == 95: import_from_files(record_list=[['mapper','DocType Mapper','Sales Order-Receivable Voucher'], ['mapper','DocType Mapper','Delivery Note-Receivable Voucher']]) elif patch_no == 96: @@ -570,17 +485,8 @@ def execute(patch_no): elif patch_no == 103: sql("update tabDocField set fieldname = '' where fieldtype = 'HTML'") elif patch_no == 104: -<<<<<<< HEAD -<<<<<<< HEAD + import_from_files(record_list=[['hr','search_criteria','stdsrch_00001'],['hr','search_criteria','stdsrch_00002'],['hr','search_criteria','stdsrch_00003'],['hr','Module Def','HR'],['hr','doctype','leave_application'],['hr','doctype','leave_allocation']]) - import_from_files(record_list=[['payroll','search_criteria','stdsrch_00001'],['payroll','search_criteria','stdsrch_00002'],['payroll','search_criteria','stdsrch_00003'],['payroll','Module Def','Payroll'],['payroll','doctype','leave_application'],['payroll','doctype','leave_allocation']]) -======= - - import_from_files(record_list=[['hr','search_criteria','stdsrch_00001'],['hr','search_criteria','stdsrch_00002'],['hr','search_criteria','stdsrch_00003'],['hr','Module Def','Payroll'],['hr','doctype','leave_application'],['hr','doctype','leave_allocation']]) ->>>>>>> stable -======= - import_from_files(record_list=[['hr','search_criteria','stdsrch_00001'],['hr','search_criteria','stdsrch_00002'],['hr','search_criteria','stdsrch_00003'],['hr','Module Def','Payroll'],['hr','doctype','leave_application'],['hr','doctype','leave_allocation']]) ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c elif patch_no == 105: # Employee Leave Balance sql("delete from `tabModule Def Item` where parent = 'Payroll' and doc_type = 'Reports' and display_name IN ('Employeewise Leave Transaction Details','Employeewise Balance Leave Report')") @@ -1040,17 +946,8 @@ def execute(patch_no): elif patch_no == 239: reload_doc('core', 'doctype', 'docfield') reload_doc('core', 'doctype', 'doctype') -<<<<<<< HEAD -<<<<<<< HEAD + from patches.old_patches.feed_patch import set_subjects_and_tagfields - from patches.feed_patch import set_subjects_and_tagfields -======= - - from patches.old_patches.feed_patch import set_subjects_and_tagfields ->>>>>>> stable -======= - from patches.old_patches.feed_patch import set_subjects_and_tagfields ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c set_subjects_and_tagfields() elif patch_no == 240: # again for sales order (status) @@ -1123,18 +1020,8 @@ def execute(patch_no): sql("update `tabSingles` set value = replace(value, 'http://46.4.50.84/v170-test/', '') where field in ('letter_head', 'client_name') and doctype = 'Control Panel'") sql("update `tabItem` set description_html = replace(description_html, 'http://46.4.50.84/v170-test/', '')") elif patch_no == 257: -<<<<<<< HEAD -<<<<<<< HEAD - from patches.customer_address import run_old_data_sync_patch - run_old_data_sync_patch() -======= - from patches.old_patches.customer_address import run_old_data_sync_patch - run_old_data_sync_patch() ->>>>>>> stable -======= from patches.old_patches.customer_address import run_old_data_sync_patch run_old_data_sync_patch() ->>>>>>> 809530c4b9d9dd0e9cbdf8006da83c5af822df7c elif patch_no == 258: sql("update tabDocField set `default`=NULL where fieldname = 'naming_series'") elif patch_no == 259: From 4a2f8c8179f6fe9205cdfb2d17e9ec12dffd3800 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 5 Aug 2011 11:07:45 +0530 Subject: [PATCH 15/42] serial no removed from mandatory --- stock/doctype/stock_entry_detail/stock_entry_detail.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/stock/doctype/stock_entry_detail/stock_entry_detail.txt b/stock/doctype/stock_entry_detail/stock_entry_detail.txt index 1d2408bf88..50b7154a0e 100644 --- a/stock/doctype/stock_entry_detail/stock_entry_detail.txt +++ b/stock/doctype/stock_entry_detail/stock_entry_detail.txt @@ -253,7 +253,8 @@ 'no_copy': 1, 'oldfieldname': 'serial_no', 'oldfieldtype': 'Text', - 'permlevel': 0 + 'permlevel': 0, + 'reqd': 0 }, # DocField @@ -280,4 +281,4 @@ 'oldfieldtype': 'Currency', 'permlevel': 1 } -] \ No newline at end of file +] From 71f2bd97b644b2d8601d3ab2087872d4dbc08e6b Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 5 Aug 2011 11:08:42 +0530 Subject: [PATCH 16/42] level was not adding in add_permission() --- utilities/doctype/patch_util/patch_util.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utilities/doctype/patch_util/patch_util.py b/utilities/doctype/patch_util/patch_util.py index f26d110aa6..8413fc0747 100644 --- a/utilities/doctype/patch_util/patch_util.py +++ b/utilities/doctype/patch_util/patch_util.py @@ -85,7 +85,8 @@ class DocType: d.parent = doctype d.parenttype = 'DocType' d.parentfield = 'permissions' - + + d.level = level d.role = role d.read = read d.write = write From a819f6f8abe32b82c02eb39414e4c23a00b0582e Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 5 Aug 2011 11:09:25 +0530 Subject: [PATCH 17/42] rename function added in item --- stock/doctype/item/item.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/stock/doctype/item/item.py b/stock/doctype/item/item.py index ae677493b5..7f0d3c2f69 100644 --- a/stock/doctype/item/item.py +++ b/stock/doctype/item/item.py @@ -178,3 +178,7 @@ Total Available Qty: %s sle = sql("select name from `tabStock Ledger Entry` where item_code = %s and ifnull(is_cancelled, 'No') = 'No'", self.doc.name) return sle and 'exists' or 'not exists' + + def on_rename(self,newdn,olddn): + sql("update tabItem set item_code = %s where name = %s", (newdn, olddn)) + From 812e71894ceda99072461d5399cec8e58d06dfb6 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 5 Aug 2011 11:10:30 +0530 Subject: [PATCH 18/42] permission to system manager in role, dt mapper and print format --- patches/patch.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/patches/patch.py b/patches/patch.py index 86fcff6290..1635382a1e 100644 --- a/patches/patch.py +++ b/patches/patch.py @@ -1,7 +1,7 @@ # REMEMBER to update this # ======================== -last_patch = 332 +last_patch = 333 #------------------------------------------- @@ -1336,3 +1336,10 @@ def execute(patch_no): p.add_permission('Lease Agreement', 'Accounts Manager', 1, read = 1) elif patch_no == 332: sql("update `tabDocField` set permlevel=1, hidden = 1 where parent = 'Bulk Rename Tool' and fieldname = 'file_list'") + elif patch_no == 333: + sql("update `tabDocPerm` set create =1 where role = 'Accounts Manager' and parent = 'Lease Agreement'") + + p = get_obj('Patch Util') + p.add_permission('DocType Mapper', 'System Manager', 0, read = 1, write=1, create=1) + p.add_permission('Role', 'System Manager', 0, read = 1, write=1, create=1) + p.add_permission('Print Format', 'System Manager', 0, read = 1, write=1, create=1) From d8b7f8eb77003e22300d97798f180346222da524 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 5 Aug 2011 11:13:27 +0530 Subject: [PATCH 19/42] fn reordered in sales common --- selling/doctype/sales_common/sales_common.py | 42 ++++++++++---------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/selling/doctype/sales_common/sales_common.py b/selling/doctype/sales_common/sales_common.py index 25dd960bdc..7a1af22448 100644 --- a/selling/doctype/sales_common/sales_common.py +++ b/selling/doctype/sales_common/sales_common.py @@ -329,6 +329,28 @@ class DocType(TransactionBase): il.append([warehouse, d.item_code, qty, reserved_qty, d.stock_uom, d.batch_no, d.serial_no]) return il + # --------------------------------------------------------------------------------------------- + # get qty, amount already billed or delivered against curr line item for current doctype + # For Eg: SO-RV get total qty, amount from SO and also total qty, amount against that SO in RV + # --------------------------------------------------------------------------------------------- + def get_curr_and_ref_doc_details(self, curr_doctype, ref_tab_fname, ref_tab_dn, ref_doc_tname, curr_parent_name, curr_parent_doctype): + # Get total qty, amt of current doctype (eg RV) except for qty, amt of this transaction + if curr_parent_doctype == 'Installation Note': + curr_det = sql("select sum(qty) from `tab%s` where %s = '%s' and docstatus = 1 and parent != '%s'"% (curr_doctype, ref_tab_fname, ref_tab_dn, curr_parent_name)) + qty, amt = curr_det and flt(curr_det[0][0]) or 0, 0 + else: + curr_det = sql("select sum(qty), sum(amount) from `tab%s` where %s = '%s' and docstatus = 1 and parent != '%s'"% (curr_doctype, ref_tab_fname, ref_tab_dn, curr_parent_name)) + qty, amt = curr_det and flt(curr_det[0][0]) or 0, curr_det and flt(curr_det[0][1]) or 0 + + # get total qty of ref doctype + ref_det = sql("select qty, amount from `tab%s` where name = '%s' and docstatus = 1"% (ref_doc_tname, ref_tab_dn)) + max_qty, max_amt = ref_det and flt(ref_det[0][0]) or 0, ref_det and flt(ref_det[0][1]) or 0 + + return qty, max_qty, amt, max_amt + + + + # ----------------------- # add packing list items @@ -458,26 +480,6 @@ class DocType(TransactionBase): def update_prevdoc_detail(self, is_submit, obj): StatusUpdater(obj, is_submit).update() - # --------------------------------------------------------------------------------------------- - # get qty, amount already billed or delivered against curr line item for current doctype - # For Eg: SO-RV get total qty, amount from SO and also total qty, amount against that SO in RV - # --------------------------------------------------------------------------------------------- - def get_curr_and_ref_doc_details(self, curr_doctype, ref_tab_fname, ref_tab_dn, ref_doc_tname, curr_parent_name, curr_parent_doctype): - # Get total qty, amt of current doctype (eg RV) except for qty, amt of this transaction - if curr_parent_doctype == 'Installation Note': - curr_det = sql("select sum(qty) from `tab%s` where %s = '%s' and docstatus = 1 and parent != '%s'"% (curr_doctype, ref_tab_fname, ref_tab_dn, curr_parent_name)) - qty, amt = curr_det and flt(curr_det[0][0]) or 0, 0 - else: - curr_det = sql("select sum(qty), sum(amount) from `tab%s` where %s = '%s' and docstatus = 1 and parent != '%s'"% (curr_doctype, ref_tab_fname, ref_tab_dn, curr_parent_name)) - qty, amt = curr_det and flt(curr_det[0][0]) or 0, curr_det and flt(curr_det[0][1]) or 0 - - # get total qty of ref doctype - ref_det = sql("select qty, amount from `tab%s` where name = '%s' and docstatus = 1"% (ref_doc_tname, ref_tab_dn)) - max_qty, max_amt = ref_det and flt(ref_det[0][0]) or 0, ref_det and flt(ref_det[0][1]) or 0 - - return qty, max_qty, amt, max_amt - - From b24ba8ef520b1aded9bce644ec2511242a1e2ee5 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 5 Aug 2011 11:15:07 +0530 Subject: [PATCH 20/42] indentation replaced by tab --- selling/doctype/sales_order/sales_order.py | 818 ++++++++++----------- 1 file changed, 409 insertions(+), 409 deletions(-) diff --git a/selling/doctype/sales_order/sales_order.py b/selling/doctype/sales_order/sales_order.py index 11842fb079..9dee82eb05 100644 --- a/selling/doctype/sales_order/sales_order.py +++ b/selling/doctype/sales_order/sales_order.py @@ -19,470 +19,470 @@ convert_to_lists = webnotes.conn.convert_to_lists from utilities.transaction_base import TransactionBase class DocType(TransactionBase): - def __init__(self, doc, doclist=[]): - self.doc = doc - self.doclist = doclist - self.tname = 'Sales Order Detail' - self.fname = 'sales_order_details' - self.person_tname = 'Target Detail' - self.partner_tname = 'Partner Target Detail' - self.territory_tname = 'Territory Target Detail' + def __init__(self, doc, doclist=[]): + self.doc = doc + self.doclist = doclist + self.tname = 'Sales Order Detail' + self.fname = 'sales_order_details' + self.person_tname = 'Target Detail' + self.partner_tname = 'Partner Target Detail' + self.territory_tname = 'Territory Target Detail' # Autoname # =============== - def autoname(self): - self.doc.name = make_autoname(self.doc.naming_series+'.#####') + def autoname(self): + self.doc.name = make_autoname(self.doc.naming_series+'.#####') - + # DOCTYPE TRIGGER FUNCTIONS # ============================= - # Pull Quotation Details - # ----------------------- - def pull_quotation_details(self): - self.doc.clear_table(self.doclist, 'other_charges') - self.doc.clear_table(self.doclist, 'sales_order_details') - self.doc.clear_table(self.doclist, 'sales_team') - self.doc.clear_table(self.doclist, 'tc_details') - if self.doc.quotation_no: - get_obj('DocType Mapper', 'Quotation-Sales Order').dt_map('Quotation', 'Sales Order', self.doc.quotation_no, self.doc, self.doclist, "[['Quotation', 'Sales Order'],['Quotation Detail', 'Sales Order Detail'],['RV Tax Detail','RV Tax Detail'],['Sales Team','Sales Team'],['TC Detail','TC Detail']]") - else: - msgprint("Please select Quotation whose details need to pull") + # Pull Quotation Details + # ----------------------- + def pull_quotation_details(self): + self.doc.clear_table(self.doclist, 'other_charges') + self.doc.clear_table(self.doclist, 'sales_order_details') + self.doc.clear_table(self.doclist, 'sales_team') + self.doc.clear_table(self.doclist, 'tc_details') + if self.doc.quotation_no: + get_obj('DocType Mapper', 'Quotation-Sales Order').dt_map('Quotation', 'Sales Order', self.doc.quotation_no, self.doc, self.doclist, "[['Quotation', 'Sales Order'],['Quotation Detail', 'Sales Order Detail'],['RV Tax Detail','RV Tax Detail'],['Sales Team','Sales Team'],['TC Detail','TC Detail']]") + else: + msgprint("Please select Quotation whose details need to pull") - return cstr(self.doc.quotation_no) - - #pull project customer - #------------------------- - def pull_project_customer(self): - res = sql("select customer from `tabProject` where name = '%s'"%self.doc.project_name) - if res: - get_obj('DocType Mapper', 'Project-Sales Order').dt_map('Project', 'Sales Order', self.doc.project_name, self.doc, self.doclist, "[['Project', 'Sales Order']]") - - - # Get Customer Details - # --------------------- - #def get_customer_details(self): - # sales_com_obj = get_obj('Sales Common') - # sales_com_obj.get_customer_details(self) - # sales_com_obj.get_shipping_details(self) + return cstr(self.doc.quotation_no) + + #pull project customer + #------------------------- + def pull_project_customer(self): + res = sql("select customer from `tabProject` where name = '%s'"%self.doc.project_name) + if res: + get_obj('DocType Mapper', 'Project-Sales Order').dt_map('Project', 'Sales Order', self.doc.project_name, self.doc, self.doclist, "[['Project', 'Sales Order']]") + + + # Get Customer Details + # --------------------- + #def get_customer_details(self): + # sales_com_obj = get_obj('Sales Common') + # sales_com_obj.get_customer_details(self) + # sales_com_obj.get_shipping_details(self) - # Get contact person details based on customer selected - # ------------------------------------------------------ - def get_contact_details(self): - get_obj('Sales Common').get_contact_details(self,0) + # Get contact person details based on customer selected + # ------------------------------------------------------ + def get_contact_details(self): + get_obj('Sales Common').get_contact_details(self,0) - # Get Commission rate of Sales Partner - # ------------------------------------- - def get_comm_rate(self, sales_partner): - return get_obj('Sales Common').get_comm_rate(sales_partner, self) + # Get Commission rate of Sales Partner + # ------------------------------------- + def get_comm_rate(self, sales_partner): + return get_obj('Sales Common').get_comm_rate(sales_partner, self) - # Clear Sales Order Details Table - # -------------------------------- - def clear_sales_order_details(self): - self.doc.clear_table(self.doclist, 'sales_order_details') - + # Clear Sales Order Details Table + # -------------------------------- + def clear_sales_order_details(self): + self.doc.clear_table(self.doclist, 'sales_order_details') + # SALES ORDER DETAILS TRIGGER FUNCTIONS # ================================================================================ - # Get Item Details - # ---------------- - def get_item_details(self, item_code): - return get_obj('Sales Common').get_item_details(item_code, self) + # Get Item Details + # ---------------- + def get_item_details(self, item_code): + return get_obj('Sales Common').get_item_details(item_code, self) - # Re-calculates Basic Rate & amount based on Price List Selected - # -------------------------------------------------------------- - def get_adj_percent(self, arg=''): - get_obj('Sales Common').get_adj_percent(self) + # Re-calculates Basic Rate & amount based on Price List Selected + # -------------------------------------------------------------- + def get_adj_percent(self, arg=''): + get_obj('Sales Common').get_adj_percent(self) - # Get projected qty of item based on warehouse selected - # ----------------------------------------------------- - def get_available_qty(self,args): - args = eval(args) - tot_avail_qty = sql("select projected_qty, actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (args['item_code'], args['warehouse']), as_dict=1) - ret = { - 'projected_qty' : tot_avail_qty and flt(tot_avail_qty[0]['projected_qty']) or 0, - 'actual_qty' : tot_avail_qty and flt(tot_avail_qty[0]['actual_qty']) or 0 - } - return cstr(ret) - - + # Get projected qty of item based on warehouse selected + # ----------------------------------------------------- + def get_available_qty(self,args): + args = eval(args) + tot_avail_qty = sql("select projected_qty, actual_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (args['item_code'], args['warehouse']), as_dict=1) + ret = { + 'projected_qty' : tot_avail_qty and flt(tot_avail_qty[0]['projected_qty']) or 0, + 'actual_qty' : tot_avail_qty and flt(tot_avail_qty[0]['actual_qty']) or 0 + } + return cstr(ret) + + # OTHER CHARGES TRIGGER FUNCTIONS # ==================================================================================== - - # Get Tax rate if account type is TAX - # ------------------------------------ - def get_rate(self,arg): - return get_obj('Sales Common').get_rate(arg) + + # Get Tax rate if account type is TAX + # ------------------------------------ + def get_rate(self,arg): + return get_obj('Sales Common').get_rate(arg) - # Load Default Charges - # ---------------------------------------------------------- - def load_default_taxes(self): - return get_obj('Sales Common').load_default_taxes(self) + # Load Default Charges + # ---------------------------------------------------------- + def load_default_taxes(self): + return get_obj('Sales Common').load_default_taxes(self) - # Pull details from other charges master (Get Other Charges) - # ---------------------------------------------------------- - def get_other_charges(self): - return get_obj('Sales Common').get_other_charges(self) + # Pull details from other charges master (Get Other Charges) + # ---------------------------------------------------------- + def get_other_charges(self): + return get_obj('Sales Common').get_other_charges(self) # GET TERMS & CONDITIONS # ===================================================================================== - def get_tc_details(self): - return get_obj('Sales Common').get_tc_details(self) + def get_tc_details(self): + return get_obj('Sales Common').get_tc_details(self) #check if maintenance schedule already generated #============================================ - def check_maintenance_schedule(self): - nm = sql("select t1.name from `tabMaintenance Schedule` t1, `tabItem Maintenance Detail` t2 where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1", self.doc.name) - nm = nm and nm[0][0] or '' - - if not nm: - return cstr('No') + def check_maintenance_schedule(self): + nm = sql("select t1.name from `tabMaintenance Schedule` t1, `tabItem Maintenance Detail` t2 where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1", self.doc.name) + nm = nm and nm[0][0] or '' + + if not nm: + return cstr('No') #check if maintenance visit already generated #============================================ - def check_maintenance_visit(self): - nm = sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Detail` t2 where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1 and t1.completion_status='Fully Completed'", self.doc.name) - nm = nm and nm[0][0] or '' - - if not nm: - return cstr('No') + def check_maintenance_visit(self): + nm = sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Detail` t2 where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1 and t1.completion_status='Fully Completed'", self.doc.name) + nm = nm and nm[0][0] or '' + + if not nm: + return cstr('No') # VALIDATE # ===================================================================================== - # Fiscal Year Validation - # ---------------------- - def validate_fiscal_year(self): - get_obj('Sales Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.transaction_date,'Sales Order Date') - - # Validate values with reference document - #---------------------------------------- - def validate_reference_value(self): - get_obj('DocType Mapper', 'Quotation-Sales Order', with_children = 1).validate_reference_value(self, self.doc.name) + # Fiscal Year Validation + # ---------------------- + def validate_fiscal_year(self): + get_obj('Sales Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.transaction_date,'Sales Order Date') + + # Validate values with reference document + #---------------------------------------- + def validate_reference_value(self): + get_obj('DocType Mapper', 'Quotation-Sales Order', with_children = 1).validate_reference_value(self, self.doc.name) - # Validate Mandatory - # ------------------- - def validate_mandatory(self): - # validate transaction date v/s delivery date - if self.doc.delivery_date: - if getdate(self.doc.transaction_date) > getdate(self.doc.delivery_date): - msgprint("Expected Delivery Date cannot be before Sales Order Date") - raise Exception + # Validate Mandatory + # ------------------- + def validate_mandatory(self): + # validate transaction date v/s delivery date + if self.doc.delivery_date: + if getdate(self.doc.transaction_date) > getdate(self.doc.delivery_date): + msgprint("Expected Delivery Date cannot be before Sales Order Date") + raise Exception - # Validate P.O Date - # ------------------ - def validate_po_date(self): - # validate p.o date v/s delivery date - if self.doc.po_date and self.doc.delivery_date and getdate(self.doc.po_date) >= getdate(self.doc.delivery_date): - msgprint("Expected Delivery Date cannot be before Purchase Order Date") - raise Exception - # amendment date is necessary if document is amended - if self.doc.amended_from and not self.doc.amendment_date: - msgprint("Please Enter Amendment Date") - raise Exception - - # Validations of Details Table - # ----------------------------- - def validate_for_items(self): - check_list,flag = [],0 - chk_dupl_itm = [] - # Sales Order Details Validations - for d in getlist(self.doclist, 'sales_order_details'): - if cstr(self.doc.quotation_no) == cstr(d.prevdoc_docname): - flag = 1 - if d.prevdoc_docname: - if self.doc.quotation_date and getdate(self.doc.quotation_date) > getdate(self.doc.transaction_date): - msgprint("Sales Order Date cannot be before Quotation Date") - raise Exception - # validates whether quotation no in doctype and in table is same - if not cstr(d.prevdoc_docname) == cstr(self.doc.quotation_no): - msgprint("Items in table does not belong to the Quotation No mentioned.") - raise Exception + # Validate P.O Date + # ------------------ + def validate_po_date(self): + # validate p.o date v/s delivery date + if self.doc.po_date and self.doc.delivery_date and getdate(self.doc.po_date) >= getdate(self.doc.delivery_date): + msgprint("Expected Delivery Date cannot be before Purchase Order Date") + raise Exception + # amendment date is necessary if document is amended + if self.doc.amended_from and not self.doc.amendment_date: + msgprint("Please Enter Amendment Date") + raise Exception + + # Validations of Details Table + # ----------------------------- + def validate_for_items(self): + check_list,flag = [],0 + chk_dupl_itm = [] + # Sales Order Details Validations + for d in getlist(self.doclist, 'sales_order_details'): + if cstr(self.doc.quotation_no) == cstr(d.prevdoc_docname): + flag = 1 + if d.prevdoc_docname: + if self.doc.quotation_date and getdate(self.doc.quotation_date) > getdate(self.doc.transaction_date): + msgprint("Sales Order Date cannot be before Quotation Date") + raise Exception + # validates whether quotation no in doctype and in table is same + if not cstr(d.prevdoc_docname) == cstr(self.doc.quotation_no): + msgprint("Items in table does not belong to the Quotation No mentioned.") + raise Exception - # validates whether item is not entered twice - e = [d.item_code, d.description, d.reserved_warehouse, d.prevdoc_docname or ''] - f = [d.item_code, d.description] + # validates whether item is not entered twice + e = [d.item_code, d.description, d.reserved_warehouse, d.prevdoc_docname or ''] + f = [d.item_code, d.description] - #check item is stock item - st_itm = sql("select is_stock_item from `tabItem` where name = '%s'"%d.item_code) + #check item is stock item + st_itm = sql("select is_stock_item from `tabItem` where name = '%s'"%d.item_code) - if st_itm and st_itm[0][0] == 'Yes': - if e in check_list: - msgprint("Item %s has been entered twice." % d.item_code) - else: - check_list.append(e) - elif st_itm and st_itm[0][0]== 'No': - if f in chk_dupl_itm: - msgprint("Item %s has been entered twice." % d.item_code) - else: - chk_dupl_itm.append(f) + if st_itm and st_itm[0][0] == 'Yes': + if e in check_list: + msgprint("Item %s has been entered twice." % d.item_code) + else: + check_list.append(e) + elif st_itm and st_itm[0][0]== 'No': + if f in chk_dupl_itm: + msgprint("Item %s has been entered twice." % d.item_code) + else: + chk_dupl_itm.append(f) - # used for production plan - d.transaction_date = self.doc.transaction_date - d.delivery_date = self.doc.delivery_date + # used for production plan + d.transaction_date = self.doc.transaction_date + d.delivery_date = self.doc.delivery_date - # gets total projected qty of item in warehouse selected (this case arises when warehouse is selected b4 item) - tot_avail_qty = sql("select projected_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (d.item_code,d.reserved_warehouse)) - d.projected_qty = tot_avail_qty and flt(tot_avail_qty[0][0]) or 0 - - if flag == 0: - msgprint("There are no items of the quotation selected.") - raise Exception + # gets total projected qty of item in warehouse selected (this case arises when warehouse is selected b4 item) + tot_avail_qty = sql("select projected_qty from `tabBin` where item_code = '%s' and warehouse = '%s'" % (d.item_code,d.reserved_warehouse)) + d.projected_qty = tot_avail_qty and flt(tot_avail_qty[0][0]) or 0 + + if flag == 0: + msgprint("There are no items of the quotation selected.") + raise Exception - # validate sales/ service item against order type - #---------------------------------------------------- - def validate_sales_mntc_item(self): - if self.doc.order_type == 'Maintenance': - item_field = 'is_service_item' - order_type = 'Maintenance Order' - item_type = 'service item' - else : - item_field = 'is_sales_item' - order_type = 'Sales Order' - item_type = 'sales item' - - for d in getlist(self.doclist, 'sales_order_details'): - res = sql("select %s from `tabItem` where name='%s'"% (item_field,d.item_code)) - res = res and res[0][0] or 'No' - - if res == 'No': - msgprint("You can not select non "+item_type+" "+d.item_code+" in "+order_type) - raise Exception - - # validate sales/ maintenance quotation against order type - #------------------------------------------------------------------ - def validate_sales_mntc_quotation(self): - for d in getlist(self.doclist, 'sales_order_details'): - if d.prevdoc_docname: - res = sql("select order_type from `tabQuotation` where name=%s", (d.prevdoc_docname)) - res = res and res[0][0] or '' - - if self.doc.order_type== 'Maintenance' and res != 'Maintenance': - msgprint("You can not select non Maintenance Quotation against Maintenance Order") - raise Exception - elif self.doc.order_type != 'Maintenance' and res == 'Maintenance': - msgprint("You can not select non Sales Quotation against Sales Order") - raise Exception + # validate sales/ service item against order type + #---------------------------------------------------- + def validate_sales_mntc_item(self): + if self.doc.order_type == 'Maintenance': + item_field = 'is_service_item' + order_type = 'Maintenance Order' + item_type = 'service item' + else : + item_field = 'is_sales_item' + order_type = 'Sales Order' + item_type = 'sales item' + + for d in getlist(self.doclist, 'sales_order_details'): + res = sql("select %s from `tabItem` where name='%s'"% (item_field,d.item_code)) + res = res and res[0][0] or 'No' + + if res == 'No': + msgprint("You can not select non "+item_type+" "+d.item_code+" in "+order_type) + raise Exception + + # validate sales/ maintenance quotation against order type + #------------------------------------------------------------------ + def validate_sales_mntc_quotation(self): + for d in getlist(self.doclist, 'sales_order_details'): + if d.prevdoc_docname: + res = sql("select order_type from `tabQuotation` where name=%s", (d.prevdoc_docname)) + res = res and res[0][0] or '' + + if self.doc.order_type== 'Maintenance' and res != 'Maintenance': + msgprint("You can not select non Maintenance Quotation against Maintenance Order") + raise Exception + elif self.doc.order_type != 'Maintenance' and res == 'Maintenance': + msgprint("You can not select non Sales Quotation against Sales Order") + raise Exception - #do not allow sales item/quotation in maintenance order and service item/quotation in sales order - #----------------------------------------------------------------------------------------------- - def validate_order_type(self): - #validate delivery date - if self.doc.order_type != 'Maintenance' and not self.doc.delivery_date: - msgprint("Please enter 'Expected Delivery Date'") - raise Exception - - self.validate_sales_mntc_quotation() - self.validate_sales_mntc_item() + #do not allow sales item/quotation in maintenance order and service item/quotation in sales order + #----------------------------------------------------------------------------------------------- + def validate_order_type(self): + #validate delivery date + if self.doc.order_type != 'Maintenance' and not self.doc.delivery_date: + msgprint("Please enter 'Expected Delivery Date'") + raise Exception + + self.validate_sales_mntc_quotation() + self.validate_sales_mntc_item() - #check for does customer belong to same project as entered.. - #------------------------------------------------------------------------------------------------- - def validate_proj_cust(self): - if self.doc.project_name and self.doc.customer_name: - res = sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer)) - if not res: - msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in project - %s."%(self.doc.customer,self.doc.project_name,self.doc.project_name)) - raise Exception - + #check for does customer belong to same project as entered.. + #------------------------------------------------------------------------------------------------- + def validate_proj_cust(self): + if self.doc.project_name and self.doc.customer_name: + res = sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer)) + if not res: + msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in project - %s."%(self.doc.customer,self.doc.project_name,self.doc.project_name)) + raise Exception + - # Validate - # --------- - def validate(self): - self.validate_fiscal_year() - self.validate_order_type() - self.validate_mandatory() - self.validate_proj_cust() - self.validate_po_date() - #self.validate_reference_value() - self.validate_for_items() - sales_com_obj = get_obj(dt = 'Sales Common') - sales_com_obj.check_active_sales_items(self) - sales_com_obj.check_conversion_rate(self) + # Validate + # --------- + def validate(self): + self.validate_fiscal_year() + self.validate_order_type() + self.validate_mandatory() + self.validate_proj_cust() + self.validate_po_date() + #self.validate_reference_value() + self.validate_for_items() + sales_com_obj = get_obj(dt = 'Sales Common') + sales_com_obj.check_active_sales_items(self) + sales_com_obj.check_conversion_rate(self) - # verify whether rate is not greater than max_discount - sales_com_obj.validate_max_discount(self,'sales_order_details') - # this is to verify that the allocated % of sales persons is 100% - sales_com_obj.get_allocated_sum(self) - sales_com_obj.make_packing_list(self,'sales_order_details') - - # get total in words - dcc = TransactionBase().get_company_currency(self.doc.company) - self.doc.in_words = sales_com_obj.get_total_in_words(dcc, self.doc.rounded_total) - self.doc.in_words_export = sales_com_obj.get_total_in_words(self.doc.currency, self.doc.rounded_total_export) - - # set SO status - self.doc.status='Draft' - if not self.doc.billing_status: self.doc.billing_status = 'Not Billed' - if not self.doc.delivery_status: self.doc.delivery_status = 'Not Delivered' - + # verify whether rate is not greater than max_discount + sales_com_obj.validate_max_discount(self,'sales_order_details') + # this is to verify that the allocated % of sales persons is 100% + sales_com_obj.get_allocated_sum(self) + sales_com_obj.make_packing_list(self,'sales_order_details') + + # get total in words + dcc = TransactionBase().get_company_currency(self.doc.company) + self.doc.in_words = sales_com_obj.get_total_in_words(dcc, self.doc.rounded_total) + self.doc.in_words_export = sales_com_obj.get_total_in_words(self.doc.currency, self.doc.rounded_total_export) + + # set SO status + self.doc.status='Draft' + if not self.doc.billing_status: self.doc.billing_status = 'Not Billed' + if not self.doc.delivery_status: self.doc.delivery_status = 'Not Delivered' + # ON SUBMIT # =============================================================================================== - # Checks Quotation Status - # ------------------------ - def check_prev_docstatus(self): - for d in getlist(self.doclist, 'sales_order_details'): - cancel_quo = sql("select name from `tabQuotation` where docstatus = 2 and name = '%s'" % d.prevdoc_docname) - if cancel_quo: - msgprint("Quotation :" + cstr(cancel_quo[0][0]) + " is already cancelled !") - raise Exception , "Validation Error. " - - def update_enquiry_status(self, prevdoc, flag): - enq = sql("select t2.prevdoc_docname from `tabQuotation` t1, `tabQuotation Detail` t2 where t2.parent = t1.name and t1.name=%s", prevdoc) - if enq: - sql("update `tabEnquiry` set status = %s where name=%s",(flag,enq[0][0])) + # Checks Quotation Status + # ------------------------ + def check_prev_docstatus(self): + for d in getlist(self.doclist, 'sales_order_details'): + cancel_quo = sql("select name from `tabQuotation` where docstatus = 2 and name = '%s'" % d.prevdoc_docname) + if cancel_quo: + msgprint("Quotation :" + cstr(cancel_quo[0][0]) + " is already cancelled !") + raise Exception , "Validation Error. " + + def update_enquiry_status(self, prevdoc, flag): + enq = sql("select t2.prevdoc_docname from `tabQuotation` t1, `tabQuotation Detail` t2 where t2.parent = t1.name and t1.name=%s", prevdoc) + if enq: + sql("update `tabEnquiry` set status = %s where name=%s",(flag,enq[0][0])) - #update status of quotation, enquiry - #---------------------------------------- - def update_prevdoc_status(self, flag): - for d in getlist(self.doclist, 'sales_order_details'): - if d.prevdoc_docname: - if flag=='submit': - sql("update `tabQuotation` set status = 'Order Confirmed' where name=%s",d.prevdoc_docname) - - #update enquiry - self.update_enquiry_status(d.prevdoc_docname, 'Order Confirmed') - elif flag == 'cancel': - chk = sql("select t1.name from `tabSales Order` t1, `tabSales Order Detail` t2 where t2.parent = t1.name and t2.prevdoc_docname=%s and t1.name!=%s and t1.docstatus=1", (d.prevdoc_docname,self.doc.name)) - if not chk: - sql("update `tabQuotation` set status = 'Submitted' where name=%s",d.prevdoc_docname) - - #update enquiry - self.update_enquiry_status(d.prevdoc_docname, 'Quotation Sent') - - # Submit - # ------- - def on_submit(self): - self.check_prev_docstatus() - self.update_stock_ledger(update_stock = 1) - self.set_sms_msg(1) - # update customer's last sales order no. - update_customer = sql("update `tabCustomer` set last_sales_order = '%s', modified = '%s' where name = '%s'" %(self.doc.name, self.doc.modified, self.doc.customer)) - get_obj('Sales Common').check_credit(self,self.doc.grand_total) - - # Check for Approving Authority - get_obj('Authorization Control').validate_approving_authority(self.doc.doctype, self.doc.grand_total, self) - - #update prevdoc status - self.update_prevdoc_status('submit') - # set SO status - set(self.doc, 'status', 'Submitted') - - # on submit notification - if self.doc.email_id: - get_obj('Notification Control').notify_contact('Sales Order',self.doc.doctype,self.doc.name, self.doc.email_id, self.doc.contact_person) - + #update status of quotation, enquiry + #---------------------------------------- + def update_prevdoc_status(self, flag): + for d in getlist(self.doclist, 'sales_order_details'): + if d.prevdoc_docname: + if flag=='submit': + sql("update `tabQuotation` set status = 'Order Confirmed' where name=%s",d.prevdoc_docname) + + #update enquiry + self.update_enquiry_status(d.prevdoc_docname, 'Order Confirmed') + elif flag == 'cancel': + chk = sql("select t1.name from `tabSales Order` t1, `tabSales Order Detail` t2 where t2.parent = t1.name and t2.prevdoc_docname=%s and t1.name!=%s and t1.docstatus=1", (d.prevdoc_docname,self.doc.name)) + if not chk: + sql("update `tabQuotation` set status = 'Submitted' where name=%s",d.prevdoc_docname) + + #update enquiry + self.update_enquiry_status(d.prevdoc_docname, 'Quotation Sent') + + # Submit + # ------- + def on_submit(self): + self.check_prev_docstatus() + self.update_stock_ledger(update_stock = 1) + self.set_sms_msg(1) + # update customer's last sales order no. + update_customer = sql("update `tabCustomer` set last_sales_order = '%s', modified = '%s' where name = '%s'" %(self.doc.name, self.doc.modified, self.doc.customer)) + get_obj('Sales Common').check_credit(self,self.doc.grand_total) + + # Check for Approving Authority + get_obj('Authorization Control').validate_approving_authority(self.doc.doctype, self.doc.grand_total, self) + + #update prevdoc status + self.update_prevdoc_status('submit') + # set SO status + set(self.doc, 'status', 'Submitted') + + # on submit notification + if self.doc.email_id: + get_obj('Notification Control').notify_contact('Sales Order',self.doc.doctype,self.doc.name, self.doc.email_id, self.doc.contact_person) + # ON CANCEL # =============================================================================================== - def on_cancel(self): - # Cannot cancel stopped SO - if self.doc.status == 'Stopped': - msgprint("Sales Order : '%s' cannot be cancelled as it is Stopped. Unstop it for any further transactions" %(self.doc.name)) - raise Exception - self.check_nextdoc_docstatus() - self.update_stock_ledger(update_stock = -1) - self.set_sms_msg() - - #update prevdoc status - self.update_prevdoc_status('cancel') - - # ::::::::: SET SO STATUS :::::::::: - set(self.doc, 'status', 'Cancelled') - - # CHECK NEXT DOCSTATUS - # does not allow to cancel document if DN or RV made against it is SUBMITTED - # ---------------------------------------------------------------------------- - def check_nextdoc_docstatus(self): - # Checks Delivery Note - submit_dn = sql("select t1.name from `tabDelivery Note` t1,`tabDelivery Note Detail` t2 where t1.name = t2.parent and t2.prevdoc_docname = '%s' and t1.docstatus = 1" % (self.doc.name)) - if submit_dn: - msgprint("Delivery Note : " + cstr(submit_dn[0][0]) + " has been submitted against " + cstr(self.doc.doctype) + ". Please cancel Delivery Note : " + cstr(submit_dn[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1) - # Checks Receivable Voucher - submit_rv = sql("select t1.name from `tabReceivable Voucher` t1,`tabRV Detail` t2 where t1.name = t2.parent and t2.sales_order = '%s' and t1.docstatus = 1" % (self.doc.name)) - if submit_rv: - msgprint("Sales Invoice : " + cstr(submit_rv[0][0]) + " has already been submitted against " +cstr(self.doc.doctype)+ ". Please cancel Sales Invoice : "+ cstr(submit_rv[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1) - #check maintenance schedule - submit_ms = sql("select t1.name from `tabMaintenance Schedule` t1, `tabItem Maintenance Detail` t2 where t2.parent=t1.name and t2.prevdoc_docname = %s and t1.docstatus = 1",self.doc.name) - if submit_ms: - msgprint("Maintenance Schedule : " + cstr(submit_ms[0][0]) + " has already been submitted against " +cstr(self.doc.doctype)+ ". Please cancel Maintenance Schedule : "+ cstr(submit_ms[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1) - submit_mv = sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Detail` t2 where t2.parent=t1.name and t2.prevdoc_docname = %s and t1.docstatus = 1",self.doc.name) - if submit_mv: - msgprint("Maintenance Visit : " + cstr(submit_mv[0][0]) + " has already been submitted against " +cstr(self.doc.doctype)+ ". Please cancel Maintenance Visit : " + cstr(submit_mv[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1) + def on_cancel(self): + # Cannot cancel stopped SO + if self.doc.status == 'Stopped': + msgprint("Sales Order : '%s' cannot be cancelled as it is Stopped. Unstop it for any further transactions" %(self.doc.name)) + raise Exception + self.check_nextdoc_docstatus() + self.update_stock_ledger(update_stock = -1) + self.set_sms_msg() + + #update prevdoc status + self.update_prevdoc_status('cancel') + + # ::::::::: SET SO STATUS :::::::::: + set(self.doc, 'status', 'Cancelled') + + # CHECK NEXT DOCSTATUS + # does not allow to cancel document if DN or RV made against it is SUBMITTED + # ---------------------------------------------------------------------------- + def check_nextdoc_docstatus(self): + # Checks Delivery Note + submit_dn = sql("select t1.name from `tabDelivery Note` t1,`tabDelivery Note Detail` t2 where t1.name = t2.parent and t2.prevdoc_docname = '%s' and t1.docstatus = 1" % (self.doc.name)) + if submit_dn: + msgprint("Delivery Note : " + cstr(submit_dn[0][0]) + " has been submitted against " + cstr(self.doc.doctype) + ". Please cancel Delivery Note : " + cstr(submit_dn[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1) + # Checks Receivable Voucher + submit_rv = sql("select t1.name from `tabReceivable Voucher` t1,`tabRV Detail` t2 where t1.name = t2.parent and t2.sales_order = '%s' and t1.docstatus = 1" % (self.doc.name)) + if submit_rv: + msgprint("Sales Invoice : " + cstr(submit_rv[0][0]) + " has already been submitted against " +cstr(self.doc.doctype)+ ". Please cancel Sales Invoice : "+ cstr(submit_rv[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1) + #check maintenance schedule + submit_ms = sql("select t1.name from `tabMaintenance Schedule` t1, `tabItem Maintenance Detail` t2 where t2.parent=t1.name and t2.prevdoc_docname = %s and t1.docstatus = 1",self.doc.name) + if submit_ms: + msgprint("Maintenance Schedule : " + cstr(submit_ms[0][0]) + " has already been submitted against " +cstr(self.doc.doctype)+ ". Please cancel Maintenance Schedule : "+ cstr(submit_ms[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1) + submit_mv = sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Detail` t2 where t2.parent=t1.name and t2.prevdoc_docname = %s and t1.docstatus = 1",self.doc.name) + if submit_mv: + msgprint("Maintenance Visit : " + cstr(submit_mv[0][0]) + " has already been submitted against " +cstr(self.doc.doctype)+ ". Please cancel Maintenance Visit : " + cstr(submit_mv[0][0]) + " first and then cancel "+ cstr(self.doc.doctype), raise_exception = 1) - def check_modified_date(self): - mod_db = sql("select modified from `tabSales Order` where name = '%s'" % self.doc.name) - date_diff = sql("select TIMEDIFF('%s', '%s')" % ( mod_db[0][0],cstr(self.doc.modified))) - - if date_diff and date_diff[0][0]: - msgprint(cstr(self.doc.doctype) +" => "+ cstr(self.doc.name) +" has been modified. Please Refresh. ") - raise Exception + def check_modified_date(self): + mod_db = sql("select modified from `tabSales Order` where name = '%s'" % self.doc.name) + date_diff = sql("select TIMEDIFF('%s', '%s')" % ( mod_db[0][0],cstr(self.doc.modified))) + + if date_diff and date_diff[0][0]: + msgprint(cstr(self.doc.doctype) +" => "+ cstr(self.doc.name) +" has been modified. Please Refresh. ") + raise Exception - # STOP SALES ORDER - # ============================================================================================== - # Stops Sales Order & no more transactions will be created against this Sales Order - def stop_sales_order(self): - self.check_modified_date() - self.update_stock_ledger(update_stock = -1,clear = 1) - # ::::::::: SET SO STATUS :::::::::: - set(self.doc, 'status', 'Stopped') - msgprint(self.doc.doctype + ": " + self.doc.name + " has been Stopped. To make transactions against this Sales Order you need to Unstop it.") + # STOP SALES ORDER + # ============================================================================================== + # Stops Sales Order & no more transactions will be created against this Sales Order + def stop_sales_order(self): + self.check_modified_date() + self.update_stock_ledger(update_stock = -1,clear = 1) + # ::::::::: SET SO STATUS :::::::::: + set(self.doc, 'status', 'Stopped') + msgprint(self.doc.doctype + ": " + self.doc.name + " has been Stopped. To make transactions against this Sales Order you need to Unstop it.") - # UNSTOP SALES ORDER - # ============================================================================================== - # Unstops Sales Order & now transactions can be continued against this Sales Order - def unstop_sales_order(self): - self.check_modified_date() - self.update_stock_ledger(update_stock = 1,clear = 1) - # ::::::::: SET SO STATUS :::::::::: - set(self.doc, 'status', 'Submitted') - msgprint(self.doc.doctype + ": " + self.doc.name + " has been Unstopped.") + # UNSTOP SALES ORDER + # ============================================================================================== + # Unstops Sales Order & now transactions can be continued against this Sales Order + def unstop_sales_order(self): + self.check_modified_date() + self.update_stock_ledger(update_stock = 1,clear = 1) + # ::::::::: SET SO STATUS :::::::::: + set(self.doc, 'status', 'Submitted') + msgprint(self.doc.doctype + ": " + self.doc.name + " has been Unstopped.") - # UPDATE STOCK LEDGER - # =============================================================================================== - def update_stock_ledger(self, update_stock, clear = 0): - for d in self.get_item_list(clear): - stock_item = sql("SELECT is_stock_item FROM tabItem where name = '%s'"%(d[1]),as_dict = 1) # stock ledger will be updated only if it is a stock item - if stock_item and stock_item[0]['is_stock_item'] == "Yes": - if not d[0]: - msgprint("Message: Please enter Reserved Warehouse for item %s as it is stock item."% d[1]) - raise Exception - bin = get_obj('Warehouse', d[0]).update_bin( 0, flt(update_stock) * flt(d[2]), 0, 0, 0, d[1], self.doc.transaction_date) + # UPDATE STOCK LEDGER + # =============================================================================================== + def update_stock_ledger(self, update_stock, clear = 0): + for d in self.get_item_list(clear): + stock_item = sql("SELECT is_stock_item FROM tabItem where name = '%s'"%(d[1]),as_dict = 1) # stock ledger will be updated only if it is a stock item + if stock_item and stock_item[0]['is_stock_item'] == "Yes": + if not d[0]: + msgprint("Message: Please enter Reserved Warehouse for item %s as it is stock item."% d[1]) + raise Exception + bin = get_obj('Warehouse', d[0]).update_bin( 0, flt(update_stock) * flt(d[2]), 0, 0, 0, d[1], self.doc.transaction_date) + + # Gets Items from packing list + #================================= + def get_item_list(self, clear): + return get_obj('Sales Common').get_item_list( self, clear) + + # SET MESSAGE FOR SMS + #====================== + def set_sms_msg(self, is_submitted = 0): + if is_submitted: + if not self.doc.amended_from: + msg = 'Sales Order: '+self.doc.name+' has been made against PO no: '+cstr(self.doc.po_no) + set(self.doc, 'message', msg) + else: + msg = 'Sales Order has been amended. New SO no:'+self.doc.name + set(self.doc, 'message', msg) + else: + msg = 'Sales Order: '+self.doc.name+' has been cancelled.' + set(self.doc, 'message', msg) + + # SEND SMS + # ========= + def send_sms(self): + if not self.doc.customer_mobile_no: + msgprint("Please enter customer mobile no") + elif not self.doc.message: + msgprint("Please enter the message you want to send") + else: + msgprint(get_obj("SMS Control", "SMS Control").send_sms([self.doc.customer_mobile_no,], self.doc.message)) - # Gets Items from packing list - #================================= - def get_item_list(self, clear): - return get_obj('Sales Common').get_item_list( self, clear) - - # SET MESSAGE FOR SMS - #====================== - def set_sms_msg(self, is_submitted = 0): - if is_submitted: - if not self.doc.amended_from: - msg = 'Sales Order: '+self.doc.name+' has been made against PO no: '+cstr(self.doc.po_no) - set(self.doc, 'message', msg) - else: - msg = 'Sales Order has been amended. New SO no:'+self.doc.name - set(self.doc, 'message', msg) - else: - msg = 'Sales Order: '+self.doc.name+' has been cancelled.' - set(self.doc, 'message', msg) - - # SEND SMS - # ========= - def send_sms(self): - if not self.doc.customer_mobile_no: - msgprint("Please enter customer mobile no") - elif not self.doc.message: - msgprint("Please enter the message you want to send") - else: - msgprint(get_obj("SMS Control", "SMS Control").send_sms([self.doc.customer_mobile_no,], self.doc.message)) + # on update + def on_update(self): + pass - # on update - def on_update(self): - pass - - # Repair Sales Order - # =========================================== - def repair_sales_order(self): - get_obj('Sales Common', 'Sales Common').repair_curr_doctype_details(self) + # Repair Sales Order + # =========================================== + def repair_sales_order(self): + get_obj('Sales Common', 'Sales Common').repair_curr_doctype_details(self) From bff6e2873d8c6cd6871bdb885fca217391e440fe Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 5 Aug 2011 11:17:40 +0530 Subject: [PATCH 21/42] removed uncompleted testcase for delivery note --- stock/doctype/delivery_note/tests.py | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 stock/doctype/delivery_note/tests.py diff --git a/stock/doctype/delivery_note/tests.py b/stock/doctype/delivery_note/tests.py deleted file mode 100644 index df04c417fa..0000000000 --- a/stock/doctype/delivery_note/tests.py +++ /dev/null @@ -1,25 +0,0 @@ -import unittest -import webnotes - -from webnotes.model.code import get_obj - -class SubmissionTest(unittest.TestCase): - def setUp(self): - self.dn = webnotes.testing.create('Delivery Note') - self.dn_items = [] - - # get a line item for testing - for d in self.dn.doclist: - if d.doctype=='Delivery Note Detail': - self.dn_items.append(d) - - self.old_bin = get_obj('Warehouse', self.line_item[0].warehouse).get_bin(self.line_item[0].item_code) - self.dn.on_submit() - - def test_bin_is_updated(self): - "tests if bin quantity is affected when on submission" - bin = get_obj('Warehouse', self.line_item.warehouse).get_bin(self.line_item[0].item_code) - self.assertTrue(bin.actual_qty == self.old_bin.actual_qty - self.line_item[0].qty) - - def test_sales_order_is_updated(self): - "tests if" \ No newline at end of file From c4e579c90116673184af5914f429f6912ff821b3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 5 Aug 2011 11:21:35 +0530 Subject: [PATCH 22/42] reloaded answer doctype --- patches/patch.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/patches/patch.py b/patches/patch.py index 1635382a1e..40e7d3a004 100644 --- a/patches/patch.py +++ b/patches/patch.py @@ -1,7 +1,7 @@ # REMEMBER to update this # ======================== -last_patch = 333 +last_patch = 334 #------------------------------------------- @@ -1343,3 +1343,5 @@ def execute(patch_no): p.add_permission('DocType Mapper', 'System Manager', 0, read = 1, write=1, create=1) p.add_permission('Role', 'System Manager', 0, read = 1, write=1, create=1) p.add_permission('Print Format', 'System Manager', 0, read = 1, write=1, create=1) + elif patch_no == 334: + reload_doc('knowledge_base', 'doctype', 'answer') From f82b1cc4bd04ab9be4f30882b0ce538e510d12b3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 5 Aug 2011 13:23:14 +0530 Subject: [PATCH 23/42] old_parent field in account is linked to Account now, it will fix account renaming bug --- accounts/doctype/account/account.txt | 5 +++-- patches/patch.py | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/accounts/doctype/account/account.txt b/accounts/doctype/account/account.txt index b29c61782f..bf48a24d0c 100644 --- a/accounts/doctype/account/account.txt +++ b/accounts/doctype/account/account.txt @@ -455,7 +455,8 @@ 'description': "Don't delete this field at any cost", 'doctype': 'DocField', 'fieldname': 'old_parent', - 'fieldtype': 'Data', + 'fieldtype': 'Link', + 'options': 'Account', 'hidden': 1, 'idx': 24, 'label': 'Old Parent', @@ -517,4 +518,4 @@ 'oldfieldtype': 'Small Text', 'permlevel': 1 } -] \ No newline at end of file +] diff --git a/patches/patch.py b/patches/patch.py index 40e7d3a004..be26d717f6 100644 --- a/patches/patch.py +++ b/patches/patch.py @@ -1,7 +1,7 @@ # REMEMBER to update this # ======================== -last_patch = 334 +last_patch = 335 #------------------------------------------- @@ -1345,3 +1345,5 @@ def execute(patch_no): p.add_permission('Print Format', 'System Manager', 0, read = 1, write=1, create=1) elif patch_no == 334: reload_doc('knowledge_base', 'doctype', 'answer') + elif patch_no == 335: + sql("update `tabDocField` set fieldtype = 'Link', options = 'Account' where fieldname = 'old_parent' and parent = 'Account'") From 2c0ab739483a5b4491412696cccab999f04d4822 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 5 Aug 2011 13:40:04 +0530 Subject: [PATCH 24/42] old_parent field is Link to parent dt now in account, cost center, item group, cust group, territory. It will fix renaming bug --- patches/patch.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/patches/patch.py b/patches/patch.py index be26d717f6..eed12c4f79 100644 --- a/patches/patch.py +++ b/patches/patch.py @@ -1346,4 +1346,5 @@ def execute(patch_no): elif patch_no == 334: reload_doc('knowledge_base', 'doctype', 'answer') elif patch_no == 335: - sql("update `tabDocField` set fieldtype = 'Link', options = 'Account' where fieldname = 'old_parent' and parent = 'Account'") + for dt in ['Account', 'Cost Center', 'Territory', 'Item Group', 'Customer Group']: + sql("update `tabDocField` set fieldtype = 'Link', options = %s where fieldname = 'old_parent' and parent = %s", (dt, dt)) From 3cb7b165d1cb3a0708c05c9c28ca70ef6f36ed8f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 8 Aug 2011 14:58:38 +0530 Subject: [PATCH 25/42] considered half day lwp in sal slip --- .../budget_variance_report.py | 3 +- .../leave_application/leave_application.js | 6 +- hr/doctype/salary_slip/salary_slip.js | 2 +- hr/doctype/salary_slip/salary_slip.py | 399 +++++++++--------- 4 files changed, 209 insertions(+), 201 deletions(-) diff --git a/accounts/search_criteria/budget_variance_report/budget_variance_report.py b/accounts/search_criteria/budget_variance_report/budget_variance_report.py index 2efca2833e..182f9e5356 100644 --- a/accounts/search_criteria/budget_variance_report/budget_variance_report.py +++ b/accounts/search_criteria/budget_variance_report/budget_variance_report.py @@ -51,7 +51,6 @@ for r in res: q1 = "select sum(t1.budget_allocated) from `tabBudget Detail` t1, `tab%s` t2, `tabAccount` t3 where " cond2 = " t3.is_pl_account = 'Yes' and t3.debit_or_credit = 'Debit' and t3.name = t1.account and t1.docstatus != 2 and " if ch: - qur = q1+cond2+cond1+" and t2.name = '%s'" ret_amt = sql(qur%(based_on,fiscal_year,based_on,r[0].strip())) @@ -170,4 +169,4 @@ for r in res: r.append(actual) # ================ Variance =================================================== r.append(r[idx] - r[idx + 1]) - count = count +1 \ No newline at end of file + count = count +1 diff --git a/hr/doctype/leave_application/leave_application.js b/hr/doctype/leave_application/leave_application.js index ba00a31a7c..9fc1e428a8 100755 --- a/hr/doctype/leave_application/leave_application.js +++ b/hr/doctype/leave_application/leave_application.js @@ -52,12 +52,12 @@ cur_frm.cscript.from_date = function(doc, dt, dn) { // to date // -------- cur_frm.cscript.to_date = function(doc, dt, dn) { - if(cint(doc.half_day) == 1 && doc.from_date && doc.from_date != doc.to_date){ + if(cint(doc.half_day) == 1 && cstr(doc.from_date) && doc.from_date != doc.to_date){ msgprint("To Date should be same as From Date for Half Day leave"); - return; + set_multiple(dt,dn,{to_date:doc.from_date}); } if(cint(doc.half_day) == 1){ - set_multiple(dt,dn,{to_date:doc.from_date}); + } calculate_total_days(doc, dt, dn); } diff --git a/hr/doctype/salary_slip/salary_slip.js b/hr/doctype/salary_slip/salary_slip.js index 8c76b1e7c9..8f953e61ca 100644 --- a/hr/doctype/salary_slip/salary_slip.js +++ b/hr/doctype/salary_slip/salary_slip.js @@ -29,7 +29,7 @@ cur_frm.cscript.month = cur_frm.cscript.employee = cur_frm.cscript.fiscal_year; // Calculate total if lwp exists // ------------------------------------------------------------------------ cur_frm.cscript.leave_without_pay = function(doc,dt,dn){ - doc.payment_days = cint(doc.total_days_in_month) - cint(doc.leave_without_pay); + doc.payment_days = flt(doc.total_days_in_month) - flt(doc.leave_without_pay); refresh_field('payment_days'); calculate_all(doc, dt, dn); } diff --git a/hr/doctype/salary_slip/salary_slip.py b/hr/doctype/salary_slip/salary_slip.py index 9c94885963..af55956149 100644 --- a/hr/doctype/salary_slip/salary_slip.py +++ b/hr/doctype/salary_slip/salary_slip.py @@ -18,210 +18,219 @@ convert_to_lists = webnotes.conn.convert_to_lists from utilities.transaction_base import TransactionBase class DocType(TransactionBase): - def __init__(self,doc,doclist=[]): - self.doc = doc - self.doclist = doclist - - - # autoname - #======================================================= - def autoname(self): - self.doc.name = make_autoname('Sal Slip/' +self.doc.employee + '/.#####') + def __init__(self,doc,doclist=[]): + self.doc = doc + self.doclist = doclist + + + # autoname + #======================================================= + def autoname(self): + self.doc.name = make_autoname('Sal Slip/' +self.doc.employee + '/.#####') - # Get employee details - #======================================================= - def get_emp_and_leave_details(self): - # Get payment days - if self.doc.fiscal_year and self.doc.month: - self.get_leave_details() + # Get employee details + #======================================================= + def get_emp_and_leave_details(self): + # Get payment days + if self.doc.fiscal_year and self.doc.month: + self.get_leave_details() - # check sal structure - if self.doc.employee: - struct = self.check_sal_struct() - if struct: - self.pull_sal_struct(struct) + # check sal structure + if self.doc.employee: + struct = self.check_sal_struct() + if struct: + self.pull_sal_struct(struct) - # Check sal structure - #======================================================= - def check_sal_struct(self): - struct = sql("select name from `tabSalary Structure` where employee ='%s' and is_active = 'Yes' "%self.doc.employee) - if not struct: - msgprint("Please create Salary Structure for employee '%s'"%self.doc.employee) - self.doc.employee = '' - return struct and struct[0][0] or '' + # Check sal structure + #======================================================= + def check_sal_struct(self): + struct = sql("select name from `tabSalary Structure` where employee ='%s' and is_active = 'Yes' "%self.doc.employee) + if not struct: + msgprint("Please create Salary Structure for employee '%s'"%self.doc.employee) + self.doc.employee = '' + return struct and struct[0][0] or '' - # Pull struct details - #======================================================= - def pull_sal_struct(self, struct): - self.doc.clear_table(self.doclist, 'earning_details') - self.doc.clear_table(self.doclist, 'deduction_details') + # Pull struct details + #======================================================= + def pull_sal_struct(self, struct): + self.doc.clear_table(self.doclist, 'earning_details') + self.doc.clear_table(self.doclist, 'deduction_details') - get_obj('DocType Mapper', 'Salary Structure-Salary Slip').dt_map('Salary Structure', 'Salary Slip', struct, self.doc, self.doclist, "[['Salary Structure', 'Salary Slip'],['Earning Detail', 'SS Earning Detail'],['Deduction Detail','SS Deduction Detail']]") + get_obj('DocType Mapper', 'Salary Structure-Salary Slip').dt_map('Salary Structure', 'Salary Slip', struct, self.doc, self.doclist, "[['Salary Structure', 'Salary Slip'],['Earning Detail', 'SS Earning Detail'],['Deduction Detail','SS Deduction Detail']]") - basic_info = sql("select bank_name, bank_ac_no, esic_card_no, pf_number from `tabEmployee` where name ='%s'" % self.doc.employee) - self.doc.bank_name = basic_info[0][0] - self.doc.bank_account_no = basic_info[0][1] - self.doc.esic_no = basic_info[0][2] - self.doc.pf_no = basic_info[0][3] + basic_info = sql("select bank_name, bank_ac_no, esic_card_no, pf_number from `tabEmployee` where name ='%s'" % self.doc.employee) + self.doc.bank_name = basic_info[0][0] + self.doc.bank_account_no = basic_info[0][1] + self.doc.esic_no = basic_info[0][2] + self.doc.pf_no = basic_info[0][3] - # Get leave details - #======================================================= - def get_leave_details(self): - m = self.get_month_details() - lwp = self.calculate_lwp(m) - self.doc.total_days_in_month = m[3] - self.doc.leave_without_pay = lwp - self.doc.payment_days = flt(m[3]) - flt(lwp) + # Get leave details + #======================================================= + def get_leave_details(self): + m = self.get_month_details() + lwp = self.calculate_lwp(m) + self.doc.total_days_in_month = m[3] + self.doc.leave_without_pay = lwp + self.doc.payment_days = flt(m[3]) - flt(lwp) - # Get month details - #======================================================= - def get_month_details(self): - ysd = sql("select year_start_date from `tabFiscal Year` where name ='%s'"%self.doc.fiscal_year)[0][0] - if ysd: - from dateutil.relativedelta import relativedelta - import calendar, datetime - mnt = int(self.doc.month) - diff_mnt = int(mnt)-int(ysd.month) - if diff_mnt<0: - diff_mnt = 12-int(ysd.month)+int(mnt) - msd = ysd + relativedelta(months=diff_mnt) # month start date - month_days = cint(calendar.monthrange(cint(msd.year) ,cint(self.doc.month))[1]) # days in month - med = datetime.date(msd.year, cint(self.doc.month), month_days) # month end date - return msd.year, msd, med, month_days + # Get month details + #======================================================= + def get_month_details(self): + ysd = sql("select year_start_date from `tabFiscal Year` where name ='%s'"%self.doc.fiscal_year)[0][0] + if ysd: + from dateutil.relativedelta import relativedelta + import calendar, datetime + mnt = int(self.doc.month) + diff_mnt = int(mnt)-int(ysd.month) + if diff_mnt<0: + diff_mnt = 12-int(ysd.month)+int(mnt) + msd = ysd + relativedelta(months=diff_mnt) # month start date + month_days = cint(calendar.monthrange(cint(msd.year) ,cint(self.doc.month))[1]) # days in month + med = datetime.date(msd.year, cint(self.doc.month), month_days) # month end date + return msd.year, msd, med, month_days - # Calculate LWP - #======================================================= - def calculate_lwp(self, m): - holidays = sql("select t1.holiday_date from `tabHoliday List Detail` t1, tabEmployee t2 where t1.parent = t2.holiday_list and t2.name = '%s' and t1.holiday_date between '%s' and '%s'" % (self.doc.employee, m[1], m[2])) - if not holidays: - holidays = sql("select t1.holiday_date from `tabHoliday List Detail` t1, `tabHoliday List` t2 where t1.parent = t2.name and ifnull(t2.is_default, 0) = 1 and t2.fiscal_year = '%s'" % self.doc.fiscal_year) - holidays = [cstr(i[0]) for i in holidays] - lwp = 0 - for d in range(m[3]): - dt = add_days(cstr(m[1]), d) - if dt not in holidays: - if sql("select t1.name from `tabLeave Application` t1, `tabLeave Type` t2 where t2.name = t1.leave_type and ifnull(t2.is_lwp, 0) = 1 and t1.docstatus = 1 and t1.employee = '%s' and '%s' between from_date and to_date"%(self.doc.employee, dt)): - lwp += 1 - return lwp - - # Check existing - #======================================================= - def check_existing(self): - ret_exist = sql("select name from `tabSalary Slip` where month = '%s' and fiscal_year = '%s' and docstatus != 2 and employee = '%s' and name !='%s'" % (self.doc.month,self.doc.fiscal_year,self.doc.employee,self.doc.name)) - if ret_exist: - msgprint("Salary Slip of employee '%s' already created for this month" % self.doc.employee) - self.doc.employee = '' - raise Exception + # Calculate LWP + #======================================================= + def calculate_lwp(self, m): + holidays = sql("select t1.holiday_date from `tabHoliday List Detail` t1, tabEmployee t2 where t1.parent = t2.holiday_list and t2.name = '%s' and t1.holiday_date between '%s' and '%s'" % (self.doc.employee, m[1], m[2])) + if not holidays: + holidays = sql("select t1.holiday_date from `tabHoliday List Detail` t1, `tabHoliday List` t2 where t1.parent = t2.name and ifnull(t2.is_default, 0) = 1 and t2.fiscal_year = '%s'" % self.doc.fiscal_year) + holidays = [cstr(i[0]) for i in holidays] + lwp = 0 + for d in range(m[3]): + dt = add_days(cstr(m[1]), d) + if dt not in holidays: + leave = sql(""" + select t1.name, t1.half_day + from `tabLeave Application` t1, `tabLeave Type` t2 + where t2.name = t1.leave_type + and ifnull(t2.is_lwp, 0) = 1 + and t1.docstatus = 1 + and t1.employee = '%s' + and '%s' between from_date and to_date + """%(self.doc.employee, dt)) + if leave: + lwp = cint(leave[0][1]) and lwp + 0.5 or lwp + 1 + return lwp + + # Check existing + #======================================================= + def check_existing(self): + ret_exist = sql("select name from `tabSalary Slip` where month = '%s' and fiscal_year = '%s' and docstatus != 2 and employee = '%s' and name !='%s'" % (self.doc.month,self.doc.fiscal_year,self.doc.employee,self.doc.name)) + if ret_exist: + msgprint("Salary Slip of employee '%s' already created for this month" % self.doc.employee) + self.doc.employee = '' + raise Exception - # Validate - #======================================================= - def validate(self): - self.check_existing() - dcc = TransactionBase().get_company_currency(self.doc.company) - self.doc.total_in_words = get_obj('Sales Common').get_total_in_words(dcc, self.doc.rounded_total) - - # ON SUBMIT - #======================================================= - def on_submit(self): - if(self.doc.email_check == 1): - self.send_mail_funct() + # Validate + #======================================================= + def validate(self): + self.check_existing() + dcc = TransactionBase().get_company_currency(self.doc.company) + self.doc.total_in_words = get_obj('Sales Common').get_total_in_words(dcc, self.doc.rounded_total) + + # ON SUBMIT + #======================================================= + def on_submit(self): + if(self.doc.email_check == 1): + self.send_mail_funct() - # Send mail - #======================================================= - def send_mail_funct(self): - emailid_ret=sql("select company_email from `tabEmployee` where name = '%s'"%self.doc.employee) - if emailid_ret: - receiver = cstr(emailid_ret[0][0]) - subj = 'Salary Slip ' + cstr(self.doc.month) +' '+cstr(self.doc.year) - earn_ret=sql("select e_type,e_amount from `tabSS Earning Detail` where parent = '%s'"%self.doc.name) - ded_ret=sql("select d_type,d_amount from `tabSS Deduction Detail` where parent = '%s'"%self.doc.name) - - earn_table = '' - ded_table = '' - if earn_ret: - - earn_table += "" - - for e in earn_ret: - if not e[1]: - earn_table +=''%(cstr(e[0])) - else: - earn_table +=''%(cstr(e[0]),cstr(e[1])) - earn_table += '
%s0.00
%s%s
' - - if ded_ret: - - ded_table += "" - - for d in ded_ret: - if not d[1]: - ded_table +=''%(cstr(d[0])) - else: - ded_table +=''%(cstr(d[0]),cstr(d[1])) - ded_table += '
%s0.00
%s%s
' - - letter_head = sql("select value from `tabSingles` where field = 'letter_head' and doctype = 'Control Panel'") - - if not letter_head: - letter_head = '' - - msg = ''' %s
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - -
- - - - - - - - -

Salary Slip

Employee Code : %sEmployee Name : %s
Month : %sYear : %sFiscal Year : %s
Department : %sBranch : %sDesignation : %s
Grade : %sBank Account No. : %sBank Name : %s
PF No. : %sESIC No. : %sArrear Amount : %s
Total days in month : %sLeave Without Pay : %sPayment days : %s
EarningDeduction
%s%s
Gross Pay : %sTotal Deduction : %s
Net Pay : %sNet Pay (in words) : %s
'''%(cstr(letter_head[0][0]),cstr(self.doc.employee),self.doc.employee_name,cstr(self.doc.month),cstr(self.doc.year),cstr(self.doc.fiscal_year),self.doc.department,self.doc.branch,self.doc.designation,self.doc.grade,cstr(self.doc.bank_account_no),self.doc.bank_name,cstr(self.doc.pf_no),cstr(self.doc.esic_no),cstr(self.doc.arrear_amount),cstr(self.doc.total_days_in_month),cstr(self.doc.leave_without_pay),cstr(self.doc.payment_days),earn_table,ded_table,cstr(self.doc.gross_pay),cstr(self.doc.total_deduction),cstr(self.doc.net_pay),cstr(self.doc.net_pay_in_words)) - sendmail([receiver], sender='automail@webnotestech.com', subject=subj, parts=[['text/plain', msg]]) - else: - msgprint("Company Email ID not found.") + # Send mail + #======================================================= + def send_mail_funct(self): + emailid_ret=sql("select company_email from `tabEmployee` where name = '%s'"%self.doc.employee) + if emailid_ret: + receiver = cstr(emailid_ret[0][0]) + subj = 'Salary Slip ' + cstr(self.doc.month) +' '+cstr(self.doc.year) + earn_ret=sql("select e_type,e_amount from `tabSS Earning Detail` where parent = '%s'"%self.doc.name) + ded_ret=sql("select d_type,d_amount from `tabSS Deduction Detail` where parent = '%s'"%self.doc.name) + + earn_table = '' + ded_table = '' + if earn_ret: + + earn_table += "" + + for e in earn_ret: + if not e[1]: + earn_table +=''%(cstr(e[0])) + else: + earn_table +=''%(cstr(e[0]),cstr(e[1])) + earn_table += '
%s0.00
%s%s
' + + if ded_ret: + + ded_table += "" + + for d in ded_ret: + if not d[1]: + ded_table +=''%(cstr(d[0])) + else: + ded_table +=''%(cstr(d[0]),cstr(d[1])) + ded_table += '
%s0.00
%s%s
' + + letter_head = sql("select value from `tabSingles` where field = 'letter_head' and doctype = 'Control Panel'") + + if not letter_head: + letter_head = '' + + msg = ''' %s
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + + + + + + + +
+ + + + + + + + +

Salary Slip

Employee Code : %sEmployee Name : %s
Month : %sYear : %sFiscal Year : %s
Department : %sBranch : %sDesignation : %s
Grade : %sBank Account No. : %sBank Name : %s
PF No. : %sESIC No. : %sArrear Amount : %s
Total days in month : %sLeave Without Pay : %sPayment days : %s
EarningDeduction
%s%s
Gross Pay : %sTotal Deduction : %s
Net Pay : %sNet Pay (in words) : %s
'''%(cstr(letter_head[0][0]),cstr(self.doc.employee),self.doc.employee_name,cstr(self.doc.month),cstr(self.doc.year),cstr(self.doc.fiscal_year),self.doc.department,self.doc.branch,self.doc.designation,self.doc.grade,cstr(self.doc.bank_account_no),self.doc.bank_name,cstr(self.doc.pf_no),cstr(self.doc.esic_no),cstr(self.doc.arrear_amount),cstr(self.doc.total_days_in_month),cstr(self.doc.leave_without_pay),cstr(self.doc.payment_days),earn_table,ded_table,cstr(self.doc.gross_pay),cstr(self.doc.total_deduction),cstr(self.doc.net_pay),cstr(self.doc.net_pay_in_words)) + sendmail([receiver], sender='automail@webnotestech.com', subject=subj, parts=[['text/plain', msg]]) + else: + msgprint("Company Email ID not found.") From d0d9bdfe9004a5b79d2087821a82a8d198bd7198 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 8 Aug 2011 15:13:05 +0530 Subject: [PATCH 26/42] Half day validation in leave application --- hr/doctype/leave_application/leave_application.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/hr/doctype/leave_application/leave_application.js b/hr/doctype/leave_application/leave_application.js index 9fc1e428a8..1eda69fcc6 100755 --- a/hr/doctype/leave_application/leave_application.js +++ b/hr/doctype/leave_application/leave_application.js @@ -55,9 +55,6 @@ cur_frm.cscript.to_date = function(doc, dt, dn) { if(cint(doc.half_day) == 1 && cstr(doc.from_date) && doc.from_date != doc.to_date){ msgprint("To Date should be same as From Date for Half Day leave"); set_multiple(dt,dn,{to_date:doc.from_date}); - } - if(cint(doc.half_day) == 1){ - } calculate_total_days(doc, dt, dn); } From b61abff9cdfce86493b18196354afc736c0c2ff1 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Wed, 10 Aug 2011 11:58:05 +0530 Subject: [PATCH 27/42] Reload billing page patch --- patches/patch.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/patches/patch.py b/patches/patch.py index 76019c0f6b..26372b063f 100644 --- a/patches/patch.py +++ b/patches/patch.py @@ -1,7 +1,7 @@ # REMEMBER to update this # ======================== -last_patch = 335 +last_patch = 336 #------------------------------------------- @@ -1354,4 +1354,6 @@ def execute(patch_no): reload_doc('knowledge_base', 'doctype', 'answer') elif patch_no == 335: for dt in ['Account', 'Cost Center', 'Territory', 'Item Group', 'Customer Group']: - sql("update `tabDocField` set fieldtype = 'Link', options = %s where fieldname = 'old_parent' and parent = %s", (dt, dt)) \ No newline at end of file + sql("update `tabDocField` set fieldtype = 'Link', options = %s where fieldname = 'old_parent' and parent = %s", (dt, dt)) + elif patch_no == 336: + reload_doc('server_tools','page','billing') \ No newline at end of file From aabf1748a28d137c89fd73f2e7f5801ddaabeb88 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Wed, 10 Aug 2011 13:27:25 +0530 Subject: [PATCH 28/42] Added patch to update account id value in description_html of item, which maps the image url to the description --- patches/patch.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/patches/patch.py b/patches/patch.py index 26372b063f..94e0f11b2e 100644 --- a/patches/patch.py +++ b/patches/patch.py @@ -1,7 +1,7 @@ # REMEMBER to update this # ======================== -last_patch = 336 +last_patch = 337 #------------------------------------------- @@ -1356,4 +1356,21 @@ def execute(patch_no): for dt in ['Account', 'Cost Center', 'Territory', 'Item Group', 'Customer Group']: sql("update `tabDocField` set fieldtype = 'Link', options = %s where fieldname = 'old_parent' and parent = %s", (dt, dt)) elif patch_no == 336: - reload_doc('server_tools','page','billing') \ No newline at end of file + reload_doc('server_tools','page','billing') + elif patch_no == 337: + item_list = webnotes.conn.sql("""SELECT name, description_html + FROM tabItem""") + if item_list: + for item, html in item_list: + if html and "getfile" in html and "acx" in html: + ac_id = webnotes.conn.sql("""SELECT value FROM `tabSingles` WHERE doctype='Control Panel' AND field='account_id'""") + sp_acx = html.split("acx=") + l_acx = len(sp_acx) + if l_acx > 1: + for i in range(l_acx-1): + sp_quot = sp_acx[i+1].split('"') + if len(sp_quot) > 1: sp_quot[0] = str(ac_id[0][0]) + sp_acx[i+1] = '"'.join(sp_quot) + html = "acx=".join(sp_acx) + webnotes.conn.sql("""UPDATE tabItem SET description_html=%s WHERE name=%s""", (html, item)) + \ No newline at end of file From d31de59d2e5f335a034b0ff3f7c8151bdf5efe12 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 10 Aug 2011 14:01:27 +0530 Subject: [PATCH 29/42] fixed error in patch --- patches/patch.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/patches/patch.py b/patches/patch.py index 94e0f11b2e..cd68b13e21 100644 --- a/patches/patch.py +++ b/patches/patch.py @@ -1344,7 +1344,7 @@ def execute(patch_no): elif patch_no == 332: sql("update `tabDocField` set permlevel=1, hidden = 1 where parent = 'Bulk Rename Tool' and fieldname = 'file_list'") elif patch_no == 333: - sql("update `tabDocPerm` set create =1 where role = 'Accounts Manager' and parent = 'Lease Agreement'") + sql("update `tabDocPerm` set `create` =1 where role = 'Accounts Manager' and parent = 'Lease Agreement'") p = get_obj('Patch Util') p.add_permission('DocType Mapper', 'System Manager', 0, read = 1, write=1, create=1) @@ -1372,5 +1372,4 @@ def execute(patch_no): if len(sp_quot) > 1: sp_quot[0] = str(ac_id[0][0]) sp_acx[i+1] = '"'.join(sp_quot) html = "acx=".join(sp_acx) - webnotes.conn.sql("""UPDATE tabItem SET description_html=%s WHERE name=%s""", (html, item)) - \ No newline at end of file + webnotes.conn.sql("""UPDATE tabItem SET description_html=%s WHERE name=%s""", (html, item)) From 0f36819ae2eb8fa380af1a221c63e3e19c2f928a Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 10 Aug 2011 14:04:52 +0530 Subject: [PATCH 30/42] merged patch from master branch --- patches/patch.py | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/patches/patch.py b/patches/patch.py index 2fbffd8d5b..cd68b13e21 100644 --- a/patches/patch.py +++ b/patches/patch.py @@ -1,7 +1,7 @@ # REMEMBER to update this # ======================== -last_patch = 332 +last_patch = 337 #------------------------------------------- @@ -1343,3 +1343,33 @@ def execute(patch_no): p.add_permission('Lease Agreement', 'Accounts Manager', 1, read = 1) elif patch_no == 332: sql("update `tabDocField` set permlevel=1, hidden = 1 where parent = 'Bulk Rename Tool' and fieldname = 'file_list'") + elif patch_no == 333: + sql("update `tabDocPerm` set `create` =1 where role = 'Accounts Manager' and parent = 'Lease Agreement'") + + p = get_obj('Patch Util') + p.add_permission('DocType Mapper', 'System Manager', 0, read = 1, write=1, create=1) + p.add_permission('Role', 'System Manager', 0, read = 1, write=1, create=1) + p.add_permission('Print Format', 'System Manager', 0, read = 1, write=1, create=1) + elif patch_no == 334: + reload_doc('knowledge_base', 'doctype', 'answer') + elif patch_no == 335: + for dt in ['Account', 'Cost Center', 'Territory', 'Item Group', 'Customer Group']: + sql("update `tabDocField` set fieldtype = 'Link', options = %s where fieldname = 'old_parent' and parent = %s", (dt, dt)) + elif patch_no == 336: + reload_doc('server_tools','page','billing') + elif patch_no == 337: + item_list = webnotes.conn.sql("""SELECT name, description_html + FROM tabItem""") + if item_list: + for item, html in item_list: + if html and "getfile" in html and "acx" in html: + ac_id = webnotes.conn.sql("""SELECT value FROM `tabSingles` WHERE doctype='Control Panel' AND field='account_id'""") + sp_acx = html.split("acx=") + l_acx = len(sp_acx) + if l_acx > 1: + for i in range(l_acx-1): + sp_quot = sp_acx[i+1].split('"') + if len(sp_quot) > 1: sp_quot[0] = str(ac_id[0][0]) + sp_acx[i+1] = '"'.join(sp_quot) + html = "acx=".join(sp_acx) + webnotes.conn.sql("""UPDATE tabItem SET description_html=%s WHERE name=%s""", (html, item)) From b1e8be462b819644c2cf41820b833c7dad875411 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 10 Aug 2011 14:16:43 +0530 Subject: [PATCH 31/42] error fixed in patch util --- utilities/doctype/patch_util/patch_util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utilities/doctype/patch_util/patch_util.py b/utilities/doctype/patch_util/patch_util.py index 8413fc0747..828c805097 100644 --- a/utilities/doctype/patch_util/patch_util.py +++ b/utilities/doctype/patch_util/patch_util.py @@ -86,7 +86,7 @@ class DocType: d.parenttype = 'DocType' d.parentfield = 'permissions' - d.level = level + d.permlevel = level d.role = role d.read = read d.write = write From 673f66f56e95bdc166becd2616254acd39af1baa Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 10 Aug 2011 14:18:31 +0530 Subject: [PATCH 32/42] error fixed in patch utils --- utilities/doctype/patch_util/patch_util.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utilities/doctype/patch_util/patch_util.py b/utilities/doctype/patch_util/patch_util.py index f26d110aa6..828c805097 100644 --- a/utilities/doctype/patch_util/patch_util.py +++ b/utilities/doctype/patch_util/patch_util.py @@ -85,7 +85,8 @@ class DocType: d.parent = doctype d.parenttype = 'DocType' d.parentfield = 'permissions' - + + d.permlevel = level d.role = role d.read = read d.write = write From 8a80d61cc4b9332e126d76d6f463912d79c873c8 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 10 Aug 2011 16:29:20 +0530 Subject: [PATCH 33/42] billiing status based on amount --- selling/doctype/sales_common/sales_common.py | 63 ++++++++++++-------- 1 file changed, 39 insertions(+), 24 deletions(-) diff --git a/selling/doctype/sales_common/sales_common.py b/selling/doctype/sales_common/sales_common.py index 7a1af22448..bc3468fe60 100644 --- a/selling/doctype/sales_common/sales_common.py +++ b/selling/doctype/sales_common/sales_common.py @@ -498,7 +498,7 @@ class StatusUpdater: - Validate over delivery From Receivable Voucher - - Update Billed Qty + - Update Billed Amt - Update Percent - Validate over billing @@ -526,23 +526,33 @@ class StatusUpdater: self.validate_qty({ 'source_dt' :'Delivery Note Detail', 'compare_field' :'delivered_qty', + 'compare_ref_field' :'qty', 'target_dt' :'Sales Order Detail', 'join_field' :'prevdoc_detail_docname' }) elif self.obj.doc.doctype=='Receivable Voucher': self.validate_qty({ 'source_dt' :'RV Detail', - 'compare_field' :'billed_qty', + 'compare_field' :'billed_amt', + 'compare_ref_field' :'amount', 'target_dt' :'Sales Order Detail', 'join_field' :'so_detail' }) + self.validate_qty({ + 'source_dt' :'RV Detail', + 'compare_field' :'billed_amt', + 'compare_ref_field' :'amount', + 'target_dt' :'Delivery Note Detail', + 'join_field' :'dn_detail' + }, no_tolerance =1) elif self.obj.doc.doctype=='Installation Note': self.validate_qty({ 'source_dt' :'Installation Item Details', 'compare_field' :'installed_qty', + 'compare_ref_field' :'qty', 'target_dt' :'Delivery Note Detail', 'join_field' :'dn_detail' - }, no_tolerance =1); + }, no_tolerance =1) def get_tolerance_for(self, item_code): @@ -569,22 +579,22 @@ class StatusUpdater: # check if overflow is within tolerance tolerance = self.get_tolerance_for(item['item_code']) - overflow_percent = ((item[args['compare_field']] - item['qty']) / item['qty'] * 100) + overflow_percent = ((item[args['compare_field']] - item[args['compare_ref_field']]) / item[args['compare_ref_field']] * 100) if overflow_percent - tolerance > 0.0001: - item['max_allowed'] = flt(item['qty'] * (100+tolerance)/100) + item['max_allowed'] = flt(item[args['compare_ref_field']] * (100+tolerance)/100) item['reduce_by'] = item[args['compare_field']] - item['max_allowed'] msgprint(""" - Row #%(idx)s: Max qty allowed for Item %(item_code)s against %(parenttype)s %(parent)s is %(max_allowed)s. + Row #%(idx)s: Max %(compare_ref_field)s allowed for Item %(item_code)s against %(parenttype)s %(parent)s is %(max_allowed)s. If you want to increase your overflow tolerance, please increase tolerance %% in Global Defaults or Item master. - Or, you must reduce the qty by %(reduce_by)s""" % item, raise_exception=1) + Or, you must reduce the %(compare_ref_field)s by %(reduce_by)s""" % item, raise_exception=1) def validate_qty(self, args, no_tolerance=None): """ - Updates qty at row level + Validates qty at row level """ # get unique transactions to update for d in self.obj.doclist: @@ -593,22 +603,23 @@ class StatusUpdater: # get all qty where qty > compare_field item = sql(""" - select item_code, qty, `%(compare_field)s`, parenttype, parent from `tab%(target_dt)s` - where qty < `%(compare_field)s` and name="%(name)s" and docstatus=1 + select item_code, `%(compare_ref_field)s`, `%(compare_field)s`, parenttype, parent from `tab%(target_dt)s` + where `%(compare_ref_field)s` < `%(compare_field)s` and name="%(name)s" and docstatus=1 """ % args, as_dict=1) if item: item = item[0] item['idx'] = d.idx - + item['compare_ref_field'] = args['compare_ref_field'] if no_tolerance: - item['reduce_by'] = item[args['compare_field']] - item['qty'] + item['reduce_by'] = item[args['compare_field']] - item[args['compare_ref_field']] msgprint(""" - Row #%(idx)s: Max qty allowed for Item %(item_code)s against - %(parenttype)s %(parent)s is %(qty)s. + Row #%(idx)s: Max %(compare_ref_field)s allowed for Item %(item_code)s against + %(parenttype)s %(parent)s is """ % item + + cstr(item[args['compare_ref_field']]) + """. - You must reduce the qty by %(reduce_by)s""" % item, raise_exception=1) - + You must reduce the %(compare_ref_field)s by %(reduce_by)s""" % item, raise_exception=1) + else: self.check_overflow_with_tolerance(item, args) @@ -623,6 +634,7 @@ class StatusUpdater: 'target_dt' :'Sales Order Detail', 'target_parent_dt' :'Sales Order', 'target_parent_field' :'per_delivered', + 'target_ref_field' :'qty', 'source_dt' :'Delivery Note Detail', 'source_field' :'qty', 'join_field' :'prevdoc_detail_docname', @@ -633,12 +645,13 @@ class StatusUpdater: elif self.obj.doc.doctype=='Receivable Voucher': self.update_qty({ - 'target_field' :'billed_qty', + 'target_field' :'billed_amt', 'target_dt' :'Sales Order Detail', 'target_parent_dt' :'Sales Order', 'target_parent_field' :'per_billed', + 'target_ref_field' :'amount', 'source_dt' :'RV Detail', - 'source_field' :'qty', + 'source_field' :'amount', 'join_field' :'so_detail', 'percent_join_field' :'sales_order', 'status_field' :'billing_status', @@ -646,12 +659,13 @@ class StatusUpdater: }) self.update_qty({ - 'target_field' :'billed_qty', + 'target_field' :'billed_amt', 'target_dt' :'Delivery Note Detail', 'target_parent_dt' :'Delivery Note', 'target_parent_field' :'per_billed', + 'target_ref_field' :'amount', 'source_dt' :'RV Detail', - 'source_field' :'qty', + 'source_field' :'amount', 'join_field' :'dn_detail', 'percent_join_field' :'delivery_note', 'status_field' :'billing_status', @@ -664,6 +678,7 @@ class StatusUpdater: 'target_dt' :'Delivery Note Detail', 'target_parent_dt' :'Delivery Note', 'target_parent_field' :'per_installed', + 'target_ref_field' :'qty', 'source_dt' :'Installed Item Details', 'source_field' :'qty', 'join_field' :'prevdoc_detail_docname', @@ -694,7 +709,7 @@ class StatusUpdater: update `tab%(target_dt)s` set - %(target_field)s = (select sum(qty) from `tab%(source_dt)s` where `%(join_field)s`="%(detail_id)s" and (docstatus=1 %(cond)s)) + %(target_field)s = (select sum(%(source_field)s) from `tab%(source_dt)s` where `%(join_field)s`="%(detail_id)s" and (docstatus=1 %(cond)s)) where name="%(detail_id)s" """ % args) @@ -710,10 +725,10 @@ class StatusUpdater: `tab%(target_parent_dt)s` set %(target_parent_field)s = - (select sum(if(qty > ifnull(%(target_field)s, 0), %(target_field)s, qty))/sum(qty)*100 from `tab%(target_dt)s` where parent="%(name)s"), + (select sum(if(%(target_ref_field)s > ifnull(%(target_field)s, 0), %(target_field)s, %(target_ref_field)s))/sum(%(target_ref_field)s)*100 from `tab%(target_dt)s` where parent="%(name)s"), modified = now() - where - name="%(name)s" + where + name="%(name)s" """ % args) # update field From 76980b0e55ea4156f17cfc9524498ce55fc01d77 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 10 Aug 2011 16:35:25 +0530 Subject: [PATCH 34/42] update billed_amt, per billed and billing status based on amount --- patches/patch.py | 30 ++- selling/doctype/sales_order/sales_order.txt | 177 ++++++++++-------- stock/doctype/delivery_note/delivery_note.txt | 95 +++------- 3 files changed, 156 insertions(+), 146 deletions(-) diff --git a/patches/patch.py b/patches/patch.py index cd68b13e21..c4503f5444 100644 --- a/patches/patch.py +++ b/patches/patch.py @@ -1,7 +1,7 @@ # REMEMBER to update this # ======================== -last_patch = 337 +last_patch = 338 #------------------------------------------- @@ -1373,3 +1373,31 @@ def execute(patch_no): sp_acx[i+1] = '"'.join(sp_quot) html = "acx=".join(sp_acx) webnotes.conn.sql("""UPDATE tabItem SET description_html=%s WHERE name=%s""", (html, item)) + elif patch_no == 338: + # Patch for billing status based on amount + # reload so and dn + reload_doc('selling','doctype','sales_order') + reload_doc('stock','doctype','delivery_note') + + # delete billed_qty field + sql("delete from `tabDocField` where fieldname = 'billed_qty' and parent in ('Sales Order Detail', 'Delivery Note Detail')") + + # update billed amt in item table in so and dn + sql(""" update `tabSales Order Detail` so + set billed_amt = (select sum(amount) from `tabRV Detail` where `so_detail`= so.name and docstatus=1 and parent not like 'old%%'), modified = now()""") + + sql(""" update `tabDelivery Note Detail` dn + set billed_amt = (select sum(amount) from `tabRV Detail` where `dn_detail`= dn.name and docstatus=1 and parent not like 'old%%'), modified = now()""") + + # calculate % billed based on item table + sql(""" update `tabSales Order` so + set per_billed = (select sum(if(amount > ifnull(billed_amt, 0), billed_amt, amount))/sum(amount)*100 from `tabSales Order Detail` where parent = so.name), modified = now()""") + + sql(""" update `tabDelivery Note` dn + set per_billed = (select sum(if(amount > ifnull(billed_amt, 0), billed_amt, amount))/sum(amount)*100 from `tabDelivery Note Detail` where parent = dn.name), modified = now()""") + + # update billing status based on % billed + sql("""update `tabSales Order` set billing_status = if(ifnull(per_billed,0) < 0.001, 'Not Billed', + if(per_billed >= 99.99, 'Fully Billed', 'Partly Billed'))""") + sql("""update `tabDelivery Note` set billing_status = if(ifnull(per_billed,0) < 0.001, 'Not Billed', + if(per_billed >= 99.99, 'Fully Billed', 'Partly Billed'))""") diff --git a/selling/doctype/sales_order/sales_order.txt b/selling/doctype/sales_order/sales_order.txt index 69773ddf72..98833d17ce 100644 --- a/selling/doctype/sales_order/sales_order.txt +++ b/selling/doctype/sales_order/sales_order.txt @@ -5,15 +5,14 @@ { 'creation': '2010-08-08 17:09:21', 'docstatus': 0, - 'modified': '2011-06-27 16:05:56', + 'modified': '2011-08-09 17:06:09', 'modified_by': 'Administrator', 'owner': 'Administrator' }, # These values are common for all DocType { - '_last_update': '1309170956', - 'client_script': "cur_frm.add_fetch('customer','sales_person','sales_person');", + '_last_update': '1311621379', 'colour': 'White:FFF', 'doctype': 'DocType', 'document_type': 'Transaction', @@ -28,7 +27,7 @@ 'show_in_menu': 0, 'subject': 'From %(customer_name)s on %(transaction_date)s worth %(currency)s %(grand_total_export)s | %(per_delivered)s% delivered | %(per_billed)s% billed', 'tag_fields': 'delivery_status,billing_status', - 'version': 593 + 'version': 597 }, # These values are common for all DocField @@ -58,28 +57,23 @@ # DocPerm { - 'amend': 0, - 'cancel': 0, - 'create': 0, 'doctype': 'DocPerm', 'idx': 1, - 'permlevel': 1, - 'role': 'Sales Manager', - 'submit': 0, - 'write': 0 + 'permlevel': 0, + 'role': 'Production Manager' }, # DocPerm { - 'amend': 1, - 'cancel': 1, - 'create': 1, + 'amend': 0, + 'cancel': 0, + 'create': 0, 'doctype': 'DocPerm', 'idx': 2, - 'permlevel': 0, + 'permlevel': 1, 'role': 'Sales Manager', - 'submit': 1, - 'write': 1 + 'submit': 0, + 'write': 0 }, # DocPerm @@ -90,6 +84,19 @@ 'doctype': 'DocPerm', 'idx': 3, 'permlevel': 0, + 'role': 'Sales Manager', + 'submit': 1, + 'write': 1 + }, + + # DocPerm + { + 'amend': 1, + 'cancel': 1, + 'create': 1, + 'doctype': 'DocPerm', + 'idx': 4, + 'permlevel': 0, 'role': 'Sales User', 'submit': 1, 'write': 1 @@ -101,7 +108,7 @@ 'cancel': 0, 'create': 0, 'doctype': 'DocPerm', - 'idx': 4, + 'idx': 5, 'permlevel': 1, 'role': 'Sales User', 'submit': 0, @@ -111,7 +118,7 @@ # DocPerm { 'doctype': 'DocPerm', - 'idx': 5, + 'idx': 6, 'match': 'customer_name', 'permlevel': 0, 'role': 'Customer' @@ -120,7 +127,7 @@ # DocPerm { 'doctype': 'DocPerm', - 'idx': 6, + 'idx': 7, 'permlevel': 2, 'role': 'Accounts User', 'write': 1 @@ -132,7 +139,7 @@ 'cancel': 1, 'create': 1, 'doctype': 'DocPerm', - 'idx': 7, + 'idx': 8, 'permlevel': 0, 'role': 'Maintenance Manager', 'submit': 1, @@ -142,7 +149,7 @@ # DocPerm { 'doctype': 'DocPerm', - 'idx': 8, + 'idx': 9, 'permlevel': 1, 'role': 'Maintenance Manager' }, @@ -153,7 +160,7 @@ 'cancel': 1, 'create': 1, 'doctype': 'DocPerm', - 'idx': 9, + 'idx': 10, 'permlevel': 0, 'role': 'Maintenance User', 'submit': 1, @@ -163,7 +170,7 @@ # DocPerm { 'doctype': 'DocPerm', - 'idx': 10, + 'idx': 11, 'permlevel': 1, 'role': 'Maintenance User' }, @@ -204,7 +211,7 @@ 'no_copy': 1, 'oldfieldname': 'naming_series', 'oldfieldtype': 'Select', - 'options': 'SO\nSO/10-11/', + 'options': 'PI/2011/\nSO\nSO/10-11/\nSO1112', 'permlevel': 0, 'print_hide': 1, 'reqd': 1 @@ -504,7 +511,7 @@ 'fieldtype': 'Currency', 'idx': 23, 'in_filter': 1, - 'label': '% Qty Billed', + 'label': '% Amount Billed', 'no_copy': 1, 'oldfieldname': 'per_billed', 'oldfieldtype': 'Currency', @@ -605,6 +612,16 @@ 'width': '150px' }, + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'vehicle_detail', + 'fieldtype': 'Small Text', + 'idx': 30, + 'label': 'Vehicle Detail', + 'permlevel': 0 + }, + # DocField { 'colour': 'White:FFF', @@ -612,7 +629,7 @@ 'fieldname': 'quotation_date', 'fieldtype': 'Date', 'hidden': 1, - 'idx': 30, + 'idx': 31, 'label': 'Quotation Date', 'no_copy': 0, 'oldfieldname': 'quotation_date', @@ -627,7 +644,7 @@ { 'doctype': 'DocField', 'fieldtype': 'Button', - 'idx': 31, + 'idx': 32, 'label': 'Pull Quotation Details', 'oldfieldtype': 'Button', 'options': 'pull_quotation_details', @@ -642,7 +659,7 @@ 'doctype': 'DocField', 'fieldname': 'price_list_name', 'fieldtype': 'Select', - 'idx': 32, + 'idx': 33, 'label': 'Price List', 'oldfieldname': 'price_list_name', 'oldfieldtype': 'Select', @@ -658,7 +675,7 @@ { 'doctype': 'DocField', 'fieldtype': 'Column Break', - 'idx': 33, + 'idx': 34, 'permlevel': 0, 'width': '50%' }, @@ -670,7 +687,7 @@ 'doctype': 'DocField', 'fieldname': 'currency', 'fieldtype': 'Select', - 'idx': 34, + 'idx': 35, 'label': 'Currency', 'oldfieldname': 'currency', 'oldfieldtype': 'Select', @@ -689,7 +706,7 @@ 'doctype': 'DocField', 'fieldname': 'conversion_rate', 'fieldtype': 'Currency', - 'idx': 35, + 'idx': 36, 'label': 'Conversion Rate', 'oldfieldname': 'conversion_rate', 'oldfieldtype': 'Currency', @@ -704,7 +721,7 @@ { 'doctype': 'DocField', 'fieldtype': 'Section Break', - 'idx': 36, + 'idx': 37, 'permlevel': 0 }, @@ -715,7 +732,7 @@ 'doctype': 'DocField', 'fieldname': 'sales_order_details', 'fieldtype': 'Table', - 'idx': 37, + 'idx': 38, 'label': 'Sales Order Details', 'oldfieldname': 'sales_order_details', 'oldfieldtype': 'Table', @@ -729,7 +746,7 @@ { 'doctype': 'DocField', 'fieldtype': 'Button', - 'idx': 38, + 'idx': 39, 'label': 'Clear Table', 'oldfieldtype': 'Button', 'options': 'clear_sales_order_details', @@ -741,7 +758,7 @@ { 'doctype': 'DocField', 'fieldtype': 'Button', - 'idx': 39, + 'idx': 40, 'label': 'Re-Calculate Values', 'oldfieldtype': 'Button', 'permlevel': 0, @@ -755,7 +772,7 @@ 'doctype': 'DocField', 'fieldname': 'net_total', 'fieldtype': 'Currency', - 'idx': 40, + 'idx': 41, 'label': 'Net Total*', 'oldfieldname': 'net_total', 'oldfieldtype': 'Currency', @@ -770,7 +787,7 @@ 'colour': 'White:FFF', 'doctype': 'DocField', 'fieldtype': 'HTML', - 'idx': 41, + 'idx': 42, 'label': 'Note1', 'oldfieldtype': 'HTML', 'options': 'NOTE : * In Base Currency', @@ -783,7 +800,7 @@ 'colour': 'White:FFF', 'doctype': 'DocField', 'fieldtype': 'Section Break', - 'idx': 42, + 'idx': 43, 'label': 'Taxes', 'oldfieldtype': 'Section Break', 'permlevel': 0, @@ -795,7 +812,7 @@ 'doctype': 'DocField', 'fieldname': 'charge', 'fieldtype': 'Link', - 'idx': 43, + 'idx': 44, 'label': 'Select Charges Master', 'oldfieldname': 'charge', 'oldfieldtype': 'Link', @@ -808,7 +825,7 @@ { 'doctype': 'DocField', 'fieldtype': 'Button', - 'idx': 44, + 'idx': 45, 'label': 'Get Charges', 'oldfieldtype': 'Button', 'permlevel': 0, @@ -820,7 +837,7 @@ 'doctype': 'DocField', 'fieldname': 'other_charges', 'fieldtype': 'Table', - 'idx': 45, + 'idx': 46, 'label': 'Other Charges', 'oldfieldname': 'other_charges', 'oldfieldtype': 'Table', @@ -832,7 +849,7 @@ { 'doctype': 'DocField', 'fieldtype': 'Button', - 'idx': 46, + 'idx': 47, 'label': 'Calculate Charges', 'oldfieldtype': 'Button', 'permlevel': 0, @@ -845,7 +862,7 @@ 'doctype': 'DocField', 'fieldname': 'other_charges_total', 'fieldtype': 'Currency', - 'idx': 47, + 'idx': 48, 'label': 'Charges Total*', 'oldfieldname': 'other_charges_total', 'oldfieldtype': 'Currency', @@ -859,7 +876,7 @@ 'doctype': 'DocField', 'fieldname': 'grand_total', 'fieldtype': 'Currency', - 'idx': 48, + 'idx': 49, 'label': 'Grand Total*', 'oldfieldname': 'grand_total', 'oldfieldtype': 'Currency', @@ -873,7 +890,7 @@ { 'doctype': 'DocField', 'fieldtype': 'HTML', - 'idx': 49, + 'idx': 50, 'label': 'OT Notes', 'oldfieldtype': 'HTML', 'options': 'NOTE : * In Base Currency', @@ -885,7 +902,7 @@ { 'doctype': 'DocField', 'fieldtype': 'HTML', - 'idx': 50, + 'idx': 51, 'label': 'Other Charges Calculation', 'oldfieldtype': 'HTML', 'permlevel': 0, @@ -897,7 +914,7 @@ 'colour': 'White:FFF', 'doctype': 'DocField', 'fieldtype': 'Section Break', - 'idx': 51, + 'idx': 52, 'label': 'Totals', 'oldfieldtype': 'Section Break', 'permlevel': 0, @@ -909,7 +926,7 @@ 'doctype': 'DocField', 'fieldname': 'rounded_total', 'fieldtype': 'Currency', - 'idx': 52, + 'idx': 53, 'label': 'Rounded Total', 'oldfieldname': 'rounded_total', 'oldfieldtype': 'Currency', @@ -925,7 +942,7 @@ 'doctype': 'DocField', 'fieldname': 'in_words', 'fieldtype': 'Data', - 'idx': 53, + 'idx': 54, 'label': 'In Words', 'oldfieldname': 'in_words', 'oldfieldtype': 'Data', @@ -938,7 +955,7 @@ { 'doctype': 'DocField', 'fieldtype': 'Column Break', - 'idx': 54, + 'idx': 55, 'oldfieldtype': 'Column Break', 'permlevel': 0, 'print_hide': 1, @@ -950,7 +967,7 @@ 'doctype': 'DocField', 'fieldname': 'grand_total_export', 'fieldtype': 'Currency', - 'idx': 55, + 'idx': 56, 'label': 'Grand Total (Export)', 'oldfieldname': 'grand_total_export', 'oldfieldtype': 'Currency', @@ -965,7 +982,7 @@ 'doctype': 'DocField', 'fieldname': 'rounded_total_export', 'fieldtype': 'Currency', - 'idx': 56, + 'idx': 57, 'label': 'Rounded Total (Export)', 'oldfieldname': 'rounded_total_export', 'oldfieldtype': 'Currency', @@ -981,7 +998,7 @@ 'doctype': 'DocField', 'fieldname': 'in_words_export', 'fieldtype': 'Data', - 'idx': 57, + 'idx': 58, 'label': 'In Words (Export)', 'oldfieldname': 'in_words_export', 'oldfieldtype': 'Data', @@ -995,7 +1012,7 @@ 'colour': 'White:FFF', 'doctype': 'DocField', 'fieldtype': 'Section Break', - 'idx': 58, + 'idx': 59, 'label': 'Terms', 'oldfieldtype': 'Section Break', 'permlevel': 0, @@ -1007,7 +1024,7 @@ 'doctype': 'DocField', 'fieldname': 'tc_name', 'fieldtype': 'Link', - 'idx': 59, + 'idx': 60, 'label': 'Select Terms', 'oldfieldname': 'tc_name', 'oldfieldtype': 'Link', @@ -1021,7 +1038,7 @@ { 'doctype': 'DocField', 'fieldtype': 'Button', - 'idx': 60, + 'idx': 61, 'label': 'Get Terms', 'oldfieldtype': 'Button', 'options': 'get_tc_details', @@ -1033,7 +1050,7 @@ { 'doctype': 'DocField', 'fieldtype': 'HTML', - 'idx': 61, + 'idx': 62, 'label': 'Terms HTML', 'oldfieldtype': 'HTML', 'options': 'You can add Terms and Notes that will be printed in the Transaction', @@ -1046,7 +1063,7 @@ 'doctype': 'DocField', 'fieldname': 'terms', 'fieldtype': 'Text Editor', - 'idx': 62, + 'idx': 63, 'label': 'Term Details', 'oldfieldname': 'terms', 'oldfieldtype': 'Text Editor', @@ -1060,7 +1077,7 @@ 'description': 'Filling in additional information about the Sales Order will help you analyze your data better.', 'doctype': 'DocField', 'fieldtype': 'Section Break', - 'idx': 63, + 'idx': 64, 'label': 'More Info', 'oldfieldtype': 'Section Break', 'permlevel': 0, @@ -1071,7 +1088,7 @@ { 'doctype': 'DocField', 'fieldtype': 'Column Break', - 'idx': 64, + 'idx': 65, 'oldfieldtype': 'Column Break', 'permlevel': 0, 'print_hide': 1, @@ -1084,7 +1101,7 @@ 'doctype': 'DocField', 'fieldname': 'letter_head', 'fieldtype': 'Select', - 'idx': 65, + 'idx': 66, 'label': 'Letter Head', 'oldfieldname': 'letter_head', 'oldfieldtype': 'Select', @@ -1100,7 +1117,7 @@ 'doctype': 'DocField', 'fieldname': 'company', 'fieldtype': 'Link', - 'idx': 66, + 'idx': 67, 'in_filter': 1, 'label': 'Company', 'oldfieldname': 'company', @@ -1119,7 +1136,7 @@ 'doctype': 'DocField', 'fieldname': 'fiscal_year', 'fieldtype': 'Select', - 'idx': 67, + 'idx': 68, 'in_filter': 1, 'label': 'Fiscal Year', 'oldfieldname': 'fiscal_year', @@ -1139,7 +1156,7 @@ 'doctype': 'DocField', 'fieldname': 'select_print_heading', 'fieldtype': 'Link', - 'idx': 68, + 'idx': 69, 'label': 'Select Print Heading', 'no_copy': 1, 'oldfieldname': 'select_print_heading', @@ -1154,7 +1171,7 @@ { 'doctype': 'DocField', 'fieldtype': 'Column Break', - 'idx': 69, + 'idx': 70, 'oldfieldtype': 'Column Break', 'permlevel': 0, 'print_hide': 1, @@ -1167,7 +1184,7 @@ 'doctype': 'DocField', 'fieldname': 'source', 'fieldtype': 'Select', - 'idx': 70, + 'idx': 71, 'label': 'Source', 'oldfieldname': 'source', 'oldfieldtype': 'Select', @@ -1183,7 +1200,7 @@ 'doctype': 'DocField', 'fieldname': 'campaign', 'fieldtype': 'Link', - 'idx': 71, + 'idx': 72, 'label': 'Campaign', 'oldfieldname': 'campaign', 'oldfieldtype': 'Link', @@ -1198,7 +1215,7 @@ 'doctype': 'DocField', 'fieldname': 'note', 'fieldtype': 'Text', - 'idx': 72, + 'idx': 73, 'label': 'Note', 'oldfieldname': 'note', 'oldfieldtype': 'Text', @@ -1213,7 +1230,7 @@ 'doctype': 'DocField', 'fieldname': 'cancel_reason', 'fieldtype': 'Data', - 'idx': 73, + 'idx': 74, 'label': 'Cancel Reason', 'no_column': 0, 'no_copy': 1, @@ -1229,7 +1246,7 @@ 'fieldname': 'delivery_status', 'fieldtype': 'Select', 'hidden': 1, - 'idx': 74, + 'idx': 75, 'label': 'Delivery Status', 'no_column': 0, 'no_copy': 1, @@ -1244,7 +1261,7 @@ 'fieldname': 'billing_status', 'fieldtype': 'Select', 'hidden': 1, - 'idx': 75, + 'idx': 76, 'label': 'Billing Status', 'no_column': 0, 'no_copy': 1, @@ -1260,7 +1277,7 @@ 'doctype': 'DocField', 'fieldtype': 'Section Break', 'hidden': 0, - 'idx': 76, + 'idx': 77, 'label': 'Packing List', 'oldfieldtype': 'Section Break', 'permlevel': 0, @@ -1273,7 +1290,7 @@ 'doctype': 'DocField', 'fieldname': 'packing_details', 'fieldtype': 'Table', - 'idx': 77, + 'idx': 78, 'label': 'Packing Details', 'oldfieldname': 'packing_details', 'oldfieldtype': 'Table', @@ -1286,7 +1303,7 @@ { 'doctype': 'DocField', 'fieldtype': 'Section Break', - 'idx': 78, + 'idx': 79, 'label': 'Sales Team', 'oldfieldtype': 'Section Break', 'permlevel': 0, @@ -1300,7 +1317,7 @@ 'doctype': 'DocField', 'fieldname': 'sales_partner', 'fieldtype': 'Link', - 'idx': 79, + 'idx': 80, 'in_filter': 1, 'label': 'Sales Partner', 'oldfieldname': 'sales_partner', @@ -1318,7 +1335,7 @@ 'doctype': 'DocField', 'fieldname': 'commission_rate', 'fieldtype': 'Currency', - 'idx': 80, + 'idx': 81, 'label': 'Commission Rate', 'oldfieldname': 'commission_rate', 'oldfieldtype': 'Currency', @@ -1333,7 +1350,7 @@ 'doctype': 'DocField', 'fieldname': 'total_commission', 'fieldtype': 'Currency', - 'idx': 81, + 'idx': 82, 'label': 'Total Commission', 'oldfieldname': 'total_commission', 'oldfieldtype': 'Currency', @@ -1347,7 +1364,7 @@ 'doctype': 'DocField', 'fieldname': 'sales_team', 'fieldtype': 'Table', - 'idx': 82, + 'idx': 83, 'label': 'Sales Team1', 'oldfieldname': 'sales_team', 'oldfieldtype': 'Table', @@ -1361,7 +1378,7 @@ 'allow_on_submit': 1, 'doctype': 'DocField', 'fieldtype': 'Button', - 'idx': 83, + 'idx': 84, 'label': 'Repair Sales Order', 'oldfieldtype': 'Button', 'options': 'repair_sales_order', diff --git a/stock/doctype/delivery_note/delivery_note.txt b/stock/doctype/delivery_note/delivery_note.txt index 97280e9983..b77a6a5b88 100644 --- a/stock/doctype/delivery_note/delivery_note.txt +++ b/stock/doctype/delivery_note/delivery_note.txt @@ -3,16 +3,16 @@ # These values are common in all dictionaries { - 'creation': '2010-08-08 17:08:57', + 'creation': '2011-04-18 15:58:20', 'docstatus': 0, - 'modified': '2011-06-27 16:42:01', + 'modified': '2011-08-09 17:10:45', 'modified_by': 'Administrator', 'owner': 'Administrator' }, # These values are common for all DocType { - '_last_update': '1309173122', + '_last_update': '1311621379', 'colour': 'White:FFF', 'doctype': 'DocType', 'document_type': 'Transaction', @@ -27,7 +27,7 @@ 'show_in_menu': 0, 'subject': 'To %(customer_name)s on %(transaction_date)s | %(per_billed)s% billed', 'tag_fields': 'billing_status', - 'version': 444 + 'version': 446 }, # These values are common for all DocField @@ -70,15 +70,15 @@ # DocPerm { - 'amend': 0, - 'cancel': 0, - 'create': 0, + 'amend': 1, + 'cancel': 1, + 'create': 1, 'doctype': 'DocPerm', 'idx': 2, - 'permlevel': 1, - 'role': 'Material User', - 'submit': 0, - 'write': 0 + 'permlevel': 0, + 'role': 'Sales User', + 'submit': 1, + 'write': 1 }, # DocPerm @@ -89,22 +89,22 @@ 'doctype': 'DocPerm', 'idx': 3, 'permlevel': 0, - 'role': 'Material Manager', + 'role': 'Material Master Manager', 'submit': 1, 'write': 1 }, # DocPerm { - 'amend': 0, - 'cancel': 0, - 'create': 0, + 'amend': 1, + 'cancel': 1, + 'create': 1, 'doctype': 'DocPerm', 'idx': 4, - 'permlevel': 1, + 'permlevel': 0, 'role': 'Material Manager', - 'submit': 0, - 'write': 0 + 'submit': 1, + 'write': 1 }, # DocPerm @@ -115,60 +115,25 @@ 'doctype': 'DocPerm', 'idx': 5, 'permlevel': 0, - 'role': 'Sales User', + 'role': 'Sales Manager', 'submit': 1, 'write': 1 }, # DocPerm { - 'amend': 0, - 'cancel': 0, - 'create': 0, 'doctype': 'DocPerm', 'idx': 6, 'permlevel': 1, - 'role': 'Sales User', - 'submit': 0, - 'write': 0 + 'role': 'All' }, # DocPerm { - 'cancel': 0, - 'create': 0, 'doctype': 'DocPerm', 'idx': 7, - 'permlevel': 0, - 'role': 'Accounts User', - 'submit': 0, - 'write': 0 - }, - - # DocPerm - { - 'doctype': 'DocPerm', - 'idx': 8, - 'permlevel': 1, - 'role': 'Accounts User' - }, - - # DocPerm - { - 'doctype': 'DocPerm', - 'idx': 9, - 'match': 'customer_name', - 'permlevel': 0, - 'role': 'Customer' - }, - - # DocPerm - { - 'doctype': 'DocPerm', - 'idx': 10, 'permlevel': 2, - 'role': 'All', - 'write': 1 + 'role': 'All' }, # DocField @@ -332,7 +297,7 @@ 'permlevel': 0, 'print_hide': 0, 'reqd': 1, - 'search_index': 0, + 'search_index': 1, 'width': '100px' }, @@ -352,7 +317,7 @@ 'permlevel': 1, 'print_hide': 1, 'reqd': 1, - 'search_index': 0, + 'search_index': 1, 'width': '150px' }, @@ -366,13 +331,13 @@ 'fieldtype': 'Currency', 'idx': 15, 'in_filter': 1, - 'label': '% Qty Billed', + 'label': '% Amount Billed', 'no_copy': 1, 'oldfieldname': 'per_billed', 'oldfieldtype': 'Currency', 'permlevel': 1, 'print_hide': 1, - 'search_index': 0 + 'search_index': 1 }, # DocField @@ -391,7 +356,7 @@ 'oldfieldtype': 'Currency', 'permlevel': 1, 'print_hide': 1, - 'search_index': 0 + 'search_index': 1 }, # DocField @@ -439,7 +404,7 @@ 'permlevel': 0, 'print_hide': 1, 'reqd': 1, - 'search_index': 0 + 'search_index': 1 }, # DocField @@ -453,7 +418,7 @@ 'options': 'Customer Group', 'permlevel': 0, 'print_hide': 1, - 'search_index': 0 + 'search_index': 1 }, # DocField @@ -1014,7 +979,7 @@ 'permlevel': 0, 'print_hide': 1, 'reqd': 1, - 'search_index': 0, + 'search_index': 1, 'width': '150px' }, @@ -1032,7 +997,7 @@ 'permlevel': 0, 'print_hide': 1, 'reqd': 1, - 'search_index': 0, + 'search_index': 1, 'width': '150px' }, From dc2f388e586986db49a1a4cf7c4b6f3285d6e09f Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 11 Aug 2011 09:36:30 +0530 Subject: [PATCH 35/42] fix to support ticket --- support/doctype/support_ticket/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/support/doctype/support_ticket/__init__.py b/support/doctype/support_ticket/__init__.py index 936233db7c..63ed8c142d 100644 --- a/support/doctype/support_ticket/__init__.py +++ b/support/doctype/support_ticket/__init__.py @@ -92,7 +92,7 @@ We will get back to you as soon as possible sendmail(\ recipients = [d.raised_by], \ sender = self.email_settings.support_email, \ - subject = '['+d.name+'] ' + d.subject, \ + subject = '['+d.name+'] ' + str(d.subject or ''), \ msg = response) def auto_close_tickets(self): From c0e97b289d0c4d5336d88718e57483b563cb38b0 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 11 Aug 2011 09:38:19 +0530 Subject: [PATCH 36/42] fix to support ticket --- support/doctype/support_ticket/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/support/doctype/support_ticket/__init__.py b/support/doctype/support_ticket/__init__.py index 63ed8c142d..9379280484 100644 --- a/support/doctype/support_ticket/__init__.py +++ b/support/doctype/support_ticket/__init__.py @@ -85,7 +85,7 @@ We will get back to you as soon as possible [This is an automatic response] - """ + signature) + """ + (signature or '')) from webnotes.utils.email_lib import sendmail From 98b36762461162949d880afbd28fa92c573ba6a9 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 11 Aug 2011 10:57:08 +0530 Subject: [PATCH 37/42] fix to kb --- knowledge_base/page/question_view/question_view.js | 2 +- knowledge_base/page/questions/questions.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/knowledge_base/page/question_view/question_view.js b/knowledge_base/page/question_view/question_view.js index 895c6f7bcf..ed11efce8b 100644 --- a/knowledge_base/page/question_view/question_view.js +++ b/knowledge_base/page/question_view/question_view.js @@ -174,4 +174,4 @@ KBAnswer = function(body, data) { } -$import(knowledge_base.kb_common); \ No newline at end of file +$import(knowledge_base/page/kb_common/kb_common.js); \ No newline at end of file diff --git a/knowledge_base/page/questions/questions.js b/knowledge_base/page/questions/questions.js index 993a38e642..f268d0bbf0 100644 --- a/knowledge_base/page/questions/questions.js +++ b/knowledge_base/page/questions/questions.js @@ -203,4 +203,4 @@ KBQuestion = function(parent, det, kb) { this.make() } -$import(knowledge_base.kb_common); \ No newline at end of file +$import(knowledge_base/page/kb_common/kb_common.js); \ No newline at end of file From af43b7457c18f5bafa18fc49dc407d9d68941fc0 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 11 Aug 2011 12:37:11 +0530 Subject: [PATCH 38/42] fix to kb --- knowledge_base/page/questions/questions.txt | 2 +- patches/patch.py | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/knowledge_base/page/questions/questions.txt b/knowledge_base/page/questions/questions.txt index d71225a7a0..b45c7dde59 100644 --- a/knowledge_base/page/questions/questions.txt +++ b/knowledge_base/page/questions/questions.txt @@ -15,7 +15,7 @@ 'doctype': 'Page', 'module': 'Knowledge Base', 'name': '__common__', - 'page_name': 'Questions', + 'page_name': 'questions', 'standard': 'Yes' }, diff --git a/patches/patch.py b/patches/patch.py index cd68b13e21..0eafef6aff 100644 --- a/patches/patch.py +++ b/patches/patch.py @@ -1,7 +1,7 @@ # REMEMBER to update this # ======================== -last_patch = 337 +last_patch = 338 #------------------------------------------- @@ -1373,3 +1373,7 @@ def execute(patch_no): sp_acx[i+1] = '"'.join(sp_quot) html = "acx=".join(sp_acx) webnotes.conn.sql("""UPDATE tabItem SET description_html=%s WHERE name=%s""", (html, item)) + elif patch_no == 338: + # update name of questions page + sql("update tabPage set name='questions' where name='Questions'") + sql("update tabPage set name='question-view' where name='Question View'") \ No newline at end of file From e35618bb218027296c6c4932b417707e26459f8e Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 11 Aug 2011 15:52:21 +0530 Subject: [PATCH 39/42] fixed bug of reserved_qty if sales bom exists for the item --- selling/doctype/sales_common/sales_common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selling/doctype/sales_common/sales_common.py b/selling/doctype/sales_common/sales_common.py index bc3468fe60..931c994bf6 100644 --- a/selling/doctype/sales_common/sales_common.py +++ b/selling/doctype/sales_common/sales_common.py @@ -324,7 +324,7 @@ class DocType(TransactionBase): if self.has_sales_bom(d.item_code): for i in self.get_sales_bom_items(d.item_code): - il.append([warehouse, i[0], flt(flt(i[1])* qty), reserved_qty, i[2], d.batch_no, d.serial_no]) + il.append([warehouse, i[0], flt(flt(i[1])* qty), flt(flt(i[1])*reserved_qty), i[2], d.batch_no, d.serial_no]) else: il.append([warehouse, d.item_code, qty, reserved_qty, d.stock_uom, d.batch_no, d.serial_no]) return il From 89717292b787a50bfc69dab79d3005e154b1d433 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 12 Aug 2011 10:55:43 +0530 Subject: [PATCH 40/42] fixed get_server_values to make them utf-8 friendly --- accounts/doctype/account/account.js | 10 ----- accounts/doctype/cost_center/cost_center.py | 2 +- accounts/doctype/form_16a/form_16a.py | 2 +- .../journal_voucher/journal_voucher.py | 4 +- .../payable_voucher/payable_voucher.py | 10 ++--- .../receivable_voucher/receivable_voucher.py | 4 +- accounts/doctype/tds_payment/tds_payment.py | 2 +- .../purchase_common/purchase_common.py | 10 ++--- .../doctype/purchase_order/purchase_order.py | 12 ++---- .../supplier_quotation/supplier_quotation.py | 8 ++-- hr/doctype/appraisal/appraisal.py | 4 +- hr/doctype/attendance/attendance.py | 2 +- hr/doctype/employee/employee.py | 2 +- .../leave_allocation/leave_allocation.py | 2 +- .../salary_structure/salary_structure.py | 4 +- .../bill_of_materials/bill_of_materials.py | 6 +-- .../production_planning_tool.py | 2 +- projects/doctype/project/project.py | 4 +- projects/doctype/ticket/ticket.py | 6 +-- projects/doctype/timesheet/timesheet.py | 2 +- selling/doctype/enquiry/enquiry.py | 6 +-- .../installation_note/installation_note.py | 15 +------ selling/doctype/lead/lead.py | 2 +- selling/doctype/quotation/quotation.py | 13 ++---- selling/doctype/sales_common/sales_common.py | 42 +++++++++---------- selling/doctype/sales_order/sales_order.py | 7 ++-- .../doctype/email_settings/email_settings.py | 2 +- stock/doctype/delivery_note/delivery_note.py | 9 +--- stock/doctype/item/item.py | 2 +- .../purchase_receipt/purchase_receipt.py | 11 ++--- stock/doctype/sales_bom/sales_bom.py | 2 +- stock/doctype/stock_entry/stock_entry.py | 12 +++--- .../stock_uom_replace_utility.py | 2 +- .../doctype/customer_issue/customer_issue.py | 33 +-------------- .../maintenance_schedule.py | 19 ++------- .../maintenance_visit/maintenance_visit.py | 15 +------ 36 files changed, 95 insertions(+), 195 deletions(-) diff --git a/accounts/doctype/account/account.js b/accounts/doctype/account/account.js index 071bf57018..51cacdaf36 100644 --- a/accounts/doctype/account/account.js +++ b/accounts/doctype/account/account.js @@ -72,16 +72,6 @@ cur_frm.fields_dict['master_name'].get_query=function(doc){ else alert("Please select master type"); } -/* -// Get customer/supplier address -// ----------------------------------------- -cur_frm.cscript.master_name = function(doc,cdt,cdn){ - if(doc.master_name){ - get_server_fields('get_address','','',doc,cdt,cdn); - } -} -*/ - // parent account get query // ----------------------------------------- cur_frm.fields_dict['parent_account'].get_query = function(doc){ diff --git a/accounts/doctype/cost_center/cost_center.py b/accounts/doctype/cost_center/cost_center.py index 060225da0b..521712b1f9 100644 --- a/accounts/doctype/cost_center/cost_center.py +++ b/accounts/doctype/cost_center/cost_center.py @@ -31,7 +31,7 @@ class DocType: ret = { 'company_abbr' : abbr } - return cstr(ret) + return ret def validate(self): # Cost Center name must be unique diff --git a/accounts/doctype/form_16a/form_16a.py b/accounts/doctype/form_16a/form_16a.py index 292c52a2da..0bcef6b7a6 100644 --- a/accounts/doctype/form_16a/form_16a.py +++ b/accounts/doctype/form_16a/form_16a.py @@ -39,7 +39,7 @@ class DocType(TransactionBase): 'company_address': cstr(comp_det[0][0]), 'registration_details': cstr(comp_det[0][1]) } - return cstr(ret) + return ret # Get party details #------------------ diff --git a/accounts/doctype/journal_voucher/journal_voucher.py b/accounts/doctype/journal_voucher/journal_voucher.py index 4f5e67a79b..5942ca18ac 100644 --- a/accounts/doctype/journal_voucher/journal_voucher.py +++ b/accounts/doctype/journal_voucher/journal_voucher.py @@ -38,9 +38,9 @@ class DocType: args = eval(args) o_s = sql("select outstanding_amount from `tab%s` where name = '%s'" % (args['doctype'],args['docname'])) if args['doctype'] == 'Payable Voucher': - return cstr({'debit': o_s and flt(o_s[0][0]) or 0}) + return {'debit': o_s and flt(o_s[0][0]) or 0} if args['doctype'] == 'Receivable Voucher': - return cstr({'credit': o_s and flt(o_s[0][0]) or 0}) + return {'credit': o_s and flt(o_s[0][0]) or 0} #-------------------------------------------------------------------------------------------------------- # Create remarks diff --git a/accounts/doctype/payable_voucher/payable_voucher.py b/accounts/doctype/payable_voucher/payable_voucher.py index 0e930e32d4..e88066a176 100644 --- a/accounts/doctype/payable_voucher/payable_voucher.py +++ b/accounts/doctype/payable_voucher/payable_voucher.py @@ -48,14 +48,14 @@ class DocType(TransactionBase): ret['due_date'] = add_days(cstr(self.doc.posting_date), acc_head and cint(acc_head[0][1]) or 0) elif not acc_head: msgprint("%s does not have an Account Head in %s. You must first create it from the Supplier Master" % (self.doc.supplier, self.doc.company)) - return cstr(ret) + return ret def get_cust(self): ret = {} if self.doc.credit_to: ret['supplier'] = get_value('Account',self.doc.credit_to,'master_name') - return cstr(ret) + return ret # Get Default Cost Center and Expense Head from Item Master @@ -70,7 +70,7 @@ class DocType(TransactionBase): if not args['cost_center'] or args['cost_center'] == 'undefined': cost_center = sql("select cost_center from `tabItem` where name = '%s'" % args['item_code']) ret['cost_center'] = cost_center and cost_center[0][0] or '' - return cstr(ret) + return ret # Get Items based on PO or PR @@ -115,7 +115,7 @@ class DocType(TransactionBase): 'cost_center' : item_det and item_det[0]['cost_center'] or '', 'item_tax_rate' : str(t) } - return cstr(ret) + return ret # Advance Allocation # ------------------- @@ -139,7 +139,7 @@ class DocType(TransactionBase): def get_rate1(self,acc): rate = sql("select tax_rate from `tabAccount` where name='%s'"%(acc)) ret={'add_tax_rate' :rate and flt(rate[0][0]) or 0 } - return cstr(ret) + return ret # *************************** Server Utility Functions ***************************** diff --git a/accounts/doctype/receivable_voucher/receivable_voucher.py b/accounts/doctype/receivable_voucher/receivable_voucher.py index cb62a65fdb..185b0b1dbc 100644 --- a/accounts/doctype/receivable_voucher/receivable_voucher.py +++ b/accounts/doctype/receivable_voucher/receivable_voucher.py @@ -90,7 +90,7 @@ class DocType(TransactionBase): def get_debit_to(self): acc_head = self.get_customer_account() if acc_head: - return cstr({ 'debit_to' : acc_head }) + return { 'debit_to' : acc_head } # Set Due Date = Posting Date + Credit Days @@ -515,7 +515,7 @@ class DocType(TransactionBase): ret = { 'actual_qty' : actual_qty and flt(actual_qty[0]['actual_qty']) or 0 } - return cstr(ret) + return ret # Make GL Entries # ------------------------- diff --git a/accounts/doctype/tds_payment/tds_payment.py b/accounts/doctype/tds_payment/tds_payment.py index c91a269929..5079d04a53 100644 --- a/accounts/doctype/tds_payment/tds_payment.py +++ b/accounts/doctype/tds_payment/tds_payment.py @@ -34,7 +34,7 @@ class DocType: else: ret = { 'registration_details': cstr(comp_det[0][0])} - return cstr(ret) + return ret # Get default bank and tds account #------------------------------------ diff --git a/buying/doctype/purchase_common/purchase_common.py b/buying/doctype/purchase_common/purchase_common.py index fe8c8e69a7..29658cba48 100644 --- a/buying/doctype/purchase_common/purchase_common.py +++ b/buying/doctype/purchase_common/purchase_common.py @@ -84,7 +84,7 @@ class DocType(TransactionBase): # ********** get primary contact details (this is done separately coz. , in case there is no primary contact thn it would not be able to fetch customer details in case of join query) contact_det = sql("select contact_name, contact_no, email_id from `tabContact` where supplier = '%s' and is_supplier = 1 and is_primary_contact = 'Yes' and docstatus != 2" %(name), as_dict = 1) ret['contact_person'] = contact_det and contact_det[0]['contact_name'] or '' - return cstr(ret) + return ret else: msgprint("Supplier : %s does not exists" % (name)) raise Exception @@ -142,14 +142,14 @@ class DocType(TransactionBase): ret['purchase_rate'] = item and flt(item[0]['last_purchase_rate']) or 0 ret['import_rate'] = flt(item and flt(item[0]['last_purchase_rate']) or 0) / flt(obj.doc.fields.has_key('conversion_rate') and flt(obj.doc.conversion_rate) or 1) - return cstr(ret) + return ret # Get Available Qty at Warehouse def get_bin_details( self, arg = ''): arg = eval(arg) bin = sql("select projected_qty from `tabBin` where item_code = %s and warehouse = %s", (arg['item_code'], arg['warehouse']), as_dict=1) ret = { 'projected_qty' : bin and flt(bin[0]['projected_qty']) or 0 } - return str(ret) + return ret # Get UOM Details def get_uom_details(self, arg = ''): @@ -163,7 +163,7 @@ class DocType(TransactionBase): 'purchase_rate' : (lpr and flt(lpr[0]['last_purchase_rate']) * flt(uom[0]['conversion_factor'])) or 0 } - return str(ret) + return ret # get last purchase rate def get_last_purchase_rate( self, obj): @@ -522,7 +522,7 @@ class DocType(TransactionBase): 'rate' : rate and (rate[0]['account_type'] == 'Tax' and not arg['charge_type'] == 'Actual') and flt(rate[0]['tax_rate']) or 0 } #msgprint(ret) - return cstr(ret) + return ret diff --git a/buying/doctype/purchase_order/purchase_order.py b/buying/doctype/purchase_order/purchase_order.py index 7d9e1da03b..1a5d2d73e7 100644 --- a/buying/doctype/purchase_order/purchase_order.py +++ b/buying/doctype/purchase_order/purchase_order.py @@ -38,23 +38,17 @@ class DocType(TransactionBase): get_obj(dt = 'Purchase Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.transaction_date,'PO Date') - # Client Trigger Functions - #---------------------------------------------------------------------------------------------------- - # Get Supplier Details - #def get_supplier_details(self, name = ''): - #return cstr(get_obj(dt='Purchase Common').get_supplier_details(name)) - # Get Item Details def get_item_details(self, arg =''): - return cstr(get_obj(dt='Purchase Common').get_item_details(self,arg)) + return get_obj(dt='Purchase Common').get_item_details(self,arg) # Get UOM Details def get_uom_details(self, arg = ''): - return cstr(get_obj(dt='Purchase Common').get_uom_details(arg)) + return get_obj(dt='Purchase Common').get_uom_details(arg) # get available qty at warehouse def get_bin_details(self, arg = ''): - return cstr(get_obj(dt='Purchase Common').get_bin_details(arg)) + return get_obj(dt='Purchase Common').get_bin_details(arg) # Pull Indent def get_indent_details(self): diff --git a/buying/doctype/supplier_quotation/supplier_quotation.py b/buying/doctype/supplier_quotation/supplier_quotation.py index 0c659bc1d5..ac59430306 100755 --- a/buying/doctype/supplier_quotation/supplier_quotation.py +++ b/buying/doctype/supplier_quotation/supplier_quotation.py @@ -18,7 +18,7 @@ class DocType: 'supplier_name' : cd and cd[0][4] or '', 'supplier_address': cd and cd[0][5] or '' } - return cstr(ret) + return ret def get_rfq_details(self): self.doc.clear_table(self.doclist, 'supplier_quotation_details') @@ -28,12 +28,12 @@ class DocType: def update_approval_status(self): if not self.doc.approval_status or self.doc.approval_status == 'Not Approved': set(self.doc, 'approval_status','Approved') - return cstr(self.doc.approval_status) + return self.doc.approval_status elif self.doc.approval_status == 'Approved': pc_obj = get_obj('Purchase Common') pc_obj.check_docstatus(check = 'Next', doctype = 'Purchase Order', docname = self.doc.name, detail_doctype = 'PO Detail') set(self.doc, 'approval_status', 'Not Approved') - return cstr(self.doc.approval_status) + return self.doc.approval_status def validate_item_list(self): if not getlist(self.doclist, 'supplier_quotation_details'): @@ -101,4 +101,4 @@ class DocType: # Get Supplier Details # -------------------- def get_supplier_details(self, name = ''): - return cstr(get_obj('Purchase Common').get_supplier_details(name)) \ No newline at end of file + return get_obj('Purchase Common').get_supplier_details(name) \ No newline at end of file diff --git a/hr/doctype/appraisal/appraisal.py b/hr/doctype/appraisal/appraisal.py index 1731559ad9..e13f9f3630 100644 --- a/hr/doctype/appraisal/appraisal.py +++ b/hr/doctype/appraisal/appraisal.py @@ -26,7 +26,7 @@ class DocType: emp_nm = sql("select employee_name from `tabEmployee` where name=%s", self.doc.employee) emp_nm= emp_nm and emp_nm[0][0] or '' self.doc.employee_name = emp_nm - return cstr(emp_nm) + return emp_nm def fetch_kra(self): if not self.doc.kra_template: @@ -88,7 +88,7 @@ class DocType: if d.score: total = total + flt(d.score_earned) ret={'total_score':flt(total)} - return cstr(ret) + return ret def declare_completed(self): ret={} diff --git a/hr/doctype/attendance/attendance.py b/hr/doctype/attendance/attendance.py index d64a8e3e3a..3c687efc71 100644 --- a/hr/doctype/attendance/attendance.py +++ b/hr/doctype/attendance/attendance.py @@ -34,7 +34,7 @@ class DocType: set(self.doc, 'employee_name', emp_nm and emp_nm[0][0] or '') ret = { 'employee_name' : emp_nm and emp_nm[0][0] or ''} - return str(ret) + return ret #validation for duplicate record def validate_duplicate_record(self): diff --git a/hr/doctype/employee/employee.py b/hr/doctype/employee/employee.py index 54142dbc50..01ff32df66 100644 --- a/hr/doctype/employee/employee.py +++ b/hr/doctype/employee/employee.py @@ -41,7 +41,7 @@ class DocType: if self.doc.date_of_birth: dt = getdate(self.doc.date_of_birth) + datetime.timedelta(21915) ret = {'date_of_retirement': dt.strftime('%Y-%m-%d')} - return str(ret) + return ret # check if salary structure exists #======================================================================================================== diff --git a/hr/doctype/leave_allocation/leave_allocation.py b/hr/doctype/leave_allocation/leave_allocation.py index e11a3357d6..46f78094a3 100755 --- a/hr/doctype/leave_allocation/leave_allocation.py +++ b/hr/doctype/leave_allocation/leave_allocation.py @@ -66,7 +66,7 @@ class DocType: 'carry_forwarded_leaves' : prev_bal, 'total_leaves_allocated' : flt(prev_bal) + flt(self.doc.new_leaves_allocated) } - return str(ret) + return ret # ********************************************** validate ***************************************************** diff --git a/hr/doctype/salary_structure/salary_structure.py b/hr/doctype/salary_structure/salary_structure.py index fd295ea743..36a1855d6b 100644 --- a/hr/doctype/salary_structure/salary_structure.py +++ b/hr/doctype/salary_structure/salary_structure.py @@ -42,7 +42,7 @@ class DocType: 'grade' : cstr(det[0][4]), 'backup_employee': cstr(self.doc.employee) } - return cstr(ret) + return ret # Set Salary structure field values @@ -53,7 +53,7 @@ class DocType: 'bank_ac_no' : basic_info and basic_info[0][1] or '', 'esic_no' : basic_info and basic_info[0][2] or '', 'pf_no' : basic_info and basic_info[0][3] or ''} - return cstr(ret) + return ret # Make earning and deduction table #--------------------------------------------------------- diff --git a/production/doctype/bill_of_materials/bill_of_materials.py b/production/doctype/bill_of_materials/bill_of_materials.py index f8f8e30c4a..cc686e536d 100644 --- a/production/doctype/bill_of_materials/bill_of_materials.py +++ b/production/doctype/bill_of_materials/bill_of_materials.py @@ -36,7 +36,7 @@ class DocType: ret={ 'description' : item and item[0]['description'] or '' } - return cstr(ret) + return ret def get_workstation_details(self,workstation): ws = sql("select hour_rate, capacity from `tabWorkstation` where name = %s",workstation , as_dict = 1) @@ -44,7 +44,7 @@ class DocType: 'hour_rate' : ws and flt(ws[0]['hour_rate']) or '', 'workstation_capacity' : ws and flt(ws[0]['capacity']) or '' } - return cstr(ret) + return ret def get_bom_material_detail(self, arg): arg = eval(arg) @@ -106,7 +106,7 @@ class DocType: 'standard_rate' : 0 } ret_item.update(ret_bom_rates) - return cstr(ret_item) + return ret_item def set_as_default_bom(self): # set Is Default as 1 diff --git a/production/doctype/production_planning_tool/production_planning_tool.py b/production/doctype/production_planning_tool/production_planning_tool.py index c548173e21..d0ae05b2f8 100644 --- a/production/doctype/production_planning_tool/production_planning_tool.py +++ b/production/doctype/production_planning_tool/production_planning_tool.py @@ -32,7 +32,7 @@ class DocType: 'stock_uom' : item and item[0]['stock_uom'], 'bom_no' : item and item[0]['default_bom'] } - return cstr(ret) + return ret else: msgprint("Item %s does not exist in system." %(args['item_code'])) raise Exception diff --git a/projects/doctype/project/project.py b/projects/doctype/project/project.py index e68771ce6a..084df6c04b 100644 --- a/projects/doctype/project/project.py +++ b/projects/doctype/project/project.py @@ -38,7 +38,7 @@ class DocType: ret['contact_person'] = contact_det and contact_det[0]['contact_name'] or '' ret['contact_no'] = contact_det and contact_det[0]['contact_no'] or '' ret['email_id'] = contact_det and contact_det[0]['email_id'] or '' - return cstr(ret) + return ret else: msgprint("Customer : %s does not exist in system." % (self.doc.customer)) raise Exception @@ -65,7 +65,7 @@ class DocType: #if pft > 0: per_pft = (flt(pft) / flt(self.doc.project_value)) * 100 ret = {'gross_margin_value': pft, 'per_gross_margin': per_pft} - return cstr(ret) + return ret # validate #================================================ diff --git a/projects/doctype/ticket/ticket.py b/projects/doctype/ticket/ticket.py index 8d716cc1cd..0f18b21e75 100644 --- a/projects/doctype/ticket/ticket.py +++ b/projects/doctype/ticket/ticket.py @@ -22,18 +22,18 @@ class DocType: cust = sql("select customer, customer_name from `tabProject` where name = %s", self.doc.project) if cust: ret = {'customer': cust and cust[0][0] or '', 'customer_name': cust and cust[0][1] or ''} - return cstr(ret) + return ret def get_customer_details(self): cust = sql("select customer_name from `tabCustomer` where name=%s", self.doc.customer) if cust: ret = {'customer_name': cust and cust[0][0] or ''} - return cstr(ret) + return ret def get_allocated_to_name(self): as_em = sql("select first_name, last_name from `tabProfile` where name=%s",self.doc.allocated_to) ret = { 'allocated_to_name' : as_em and (as_em[0][0] + ' ' + as_em[0][1]) or ''} - return cstr(ret) + return ret # validate #-------------------------------------------- diff --git a/projects/doctype/timesheet/timesheet.py b/projects/doctype/timesheet/timesheet.py index ba921f478a..f07975c819 100644 --- a/projects/doctype/timesheet/timesheet.py +++ b/projects/doctype/timesheet/timesheet.py @@ -32,7 +32,7 @@ class DocType: tsk = sql("select name, project, customer, customer_name from `tabTicket` where subject = %s", task_sub) if tsk: ret = {'task_id': tsk and tsk[0][0] or '', 'project_name': tsk and tsk[0][1] or '', 'customer_name': tsk and tsk[0][3] or ''} - return cstr(ret) + return ret def validate(self): if getdate(self.doc.timesheet_date) > getdate(nowdate()): diff --git a/selling/doctype/enquiry/enquiry.py b/selling/doctype/enquiry/enquiry.py index 61bc4ec07d..12597022bd 100644 --- a/selling/doctype/enquiry/enquiry.py +++ b/selling/doctype/enquiry/enquiry.py @@ -50,7 +50,7 @@ class DocType(TransactionBase): ret['contact_no'] = contact_det and contact_det[0]['contact_no'] or '' ret['email_id'] = contact_det and contact_det[0]['email_id'] or '' - return cstr(ret) + return ret else: msgprint("Customer : %s does not exist in system." % (name)) raise Exception @@ -64,7 +64,7 @@ class DocType(TransactionBase): 'contact_no' : contact and contact[0]['contact_no'] or '', 'email_id' : contact and contact[0]['email_id'] or '' } - return str(ret) + return ret # ==================================================================================================================== def on_update(self): @@ -184,7 +184,7 @@ class DocType(TransactionBase): else: set(self.doc, 'status', 'Enquiry Lost') set(self.doc, 'order_lost_reason', arg) - return cstr('true') + return 'true' # ==================================================================================================================== def update_follow_up(self): diff --git a/selling/doctype/installation_note/installation_note.py b/selling/doctype/installation_note/installation_note.py index ce213632c7..e0af7ece24 100644 --- a/selling/doctype/installation_note/installation_note.py +++ b/selling/doctype/installation_note/installation_note.py @@ -29,20 +29,7 @@ class DocType(TransactionBase): # --------- def autoname(self): self.doc.name = make_autoname(self.doc.naming_series+'.#####') - - #fetch customer details - #================================= - #def get_customer_details(self): - # det = sql("select t1.customer_name, t1.address,t1.territory,t2.contact_name from `tabCustomer` t1, `tabContact` t2 where t1.name = '%s' and t1.name=t2.customer and t2.is_primary_contact = 'Yes'"%self.doc.customer, as_dict=1) - - # ret = { - # 'customer_name': det and det[0]['customer_name'] or '', - # 'address' : det and det[0]['address'] or '', - # 'territory': det and det[0]['territory'] or '', - # 'contact_person' : det and det[0]['contact_name'] or '' - # } - - # return str(ret) + #fetch delivery note details #==================================== diff --git a/selling/doctype/lead/lead.py b/selling/doctype/lead/lead.py index 1bf8c8d1b6..14d14e12ad 100644 --- a/selling/doctype/lead/lead.py +++ b/selling/doctype/lead/lead.py @@ -51,7 +51,7 @@ class DocType: 'description': it and it[0][3] or '', 'uom' : it and it[0][4] or '' } - return cstr(ret) + return ret def validate(self): import string diff --git a/selling/doctype/quotation/quotation.py b/selling/doctype/quotation/quotation.py index aed868ef1d..11755406fa 100644 --- a/selling/doctype/quotation/quotation.py +++ b/selling/doctype/quotation/quotation.py @@ -45,17 +45,12 @@ class DocType(TransactionBase): self.get_adj_percent() - return cstr(self.doc.quotation_to) - - # Get Customer Details - # -------------------- - #def get_customer_details(self): - # return cstr(get_obj('Sales Common').get_customer_details(self)) + return self.doc.quotation_to # Get contact person details based on customer selected # ------------------------------------------------------ def get_contact_details(self): - return cstr(get_obj('Sales Common').get_contact_details(self,0)) + return get_obj('Sales Common').get_contact_details(self,0) # Clear Quotation Details # ----------------------- @@ -111,7 +106,7 @@ class DocType(TransactionBase): 'contact_mobile' : details and details[0]['mobile_no'] or '-', 'contact_email' : details and details[0]['email_id'] or '-' } - return cstr(ret) + return ret # GET TERMS AND CONDITIONS @@ -295,7 +290,7 @@ class DocType(TransactionBase): set(self.doc, 'status', 'Order Lost') set(self.doc, 'order_lost_reason', arg) self.update_enquiry('order lost') - return cstr('true') + return 'true' #check if value entered in item table #-------------------------------------- diff --git a/selling/doctype/sales_common/sales_common.py b/selling/doctype/sales_common/sales_common.py index 931c994bf6..acdca50f7b 100644 --- a/selling/doctype/sales_common/sales_common.py +++ b/selling/doctype/sales_common/sales_common.py @@ -118,21 +118,21 @@ class DocType(TransactionBase): t = {} for x in tax: t[x[0]] = flt(x[1]) ret = { - 'description' : item and item[0]['description_html'] or item[0]['description'], - 'item_group' : item and item[0]['item_group'] or '', - 'item_name' : item and item[0]['item_name'] or '', - 'brand' : item and item[0]['brand'] or '', - 'stock_uom' : item and item[0]['stock_uom'] or '', - 'reserved_warehouse' : item and item[0]['default_warehouse'] or '', - 'warehouse' : item and item[0]['default_warehouse'] or '', - 'income_account' : item and item[0]['default_income_account'] or '', - 'cost_center' : item and item[0]['default_sales_cost_center'] or '', - 'qty' : 1.00, # this is done coz if item once fetched is fetched again thn its qty shld be reset to 1 - 'adj_rate' : 0, - 'amount' : 0, - 'export_amount' : 0, - 'item_tax_rate' : str(t), - 'batch_no' : '' + 'description' : item and item[0]['description_html'] or item[0]['description'], + 'item_group' : item and item[0]['item_group'] or '', + 'item_name' : item and item[0]['item_name'] or '', + 'brand' : item and item[0]['brand'] or '', + 'stock_uom' : item and item[0]['stock_uom'] or '', + 'reserved_warehouse' : item and item[0]['default_warehouse'] or '', + 'warehouse' : item and item[0]['default_warehouse'] or '', + 'income_account' : item and item[0]['default_income_account'] or '', + 'cost_center' : item and item[0]['default_sales_cost_center'] or '', + 'qty' : 1.00, # this is done coz if item once fetched is fetched again thn its qty shld be reset to 1 + 'adj_rate' : 0, + 'amount' : 0, + 'export_amount' : 0, + 'item_tax_rate' : str(t), + 'batch_no' : '' } if(obj.doc.price_list_name and item): #this is done to fetch the changed BASIC RATE and REF RATE based on PRICE LIST ref_rate = self.get_ref_rate(item_code, obj.doc.price_list_name, obj.doc.currency) @@ -143,7 +143,8 @@ class DocType(TransactionBase): if obj.doc.doctype == 'Receivable Voucher': return ret - return str(ret) + + return ret # ***************** Get Ref rate as entered in Item Master ******************** def get_ref_rate(self, item_code, price_list_name, currency): @@ -161,7 +162,6 @@ class DocType(TransactionBase): d.base_ref_rate = flt(ref_rate) * flt(obj.doc.conversion_rate) d.export_rate = flt(ref_rate) - # Load Default Taxes # ==================== def load_default_taxes(self, obj): @@ -203,7 +203,7 @@ class DocType(TransactionBase): ret = { 'item_tax_rate' : tax and str(t) or '' } - return str(ret) + return ret # Get Serial No Details # ========================================================================== @@ -220,7 +220,7 @@ class DocType(TransactionBase): 'description' : item and item[0]['description'] or '', 'item_tax_rate' : str(t) } - return str(ret) + return ret # Get Commission rate # ======================================================================= @@ -233,7 +233,7 @@ class DocType(TransactionBase): 'commission_rate' : comm_rate and flt(comm_rate[0]['commission_rate']) or 0, 'total_commission' : flt(total_comm) } - return str(ret) + return ret else: msgprint("Business Associate : %s does not exist in the system." % (sales_partner)) raise Exception @@ -287,7 +287,7 @@ class DocType(TransactionBase): ret = { 'rate' : rate and flt(rate[0]['tax_rate']) or 0 } - return cstr(ret) + return ret # Make Packing List from Sales BOM diff --git a/selling/doctype/sales_order/sales_order.py b/selling/doctype/sales_order/sales_order.py index 9dee82eb05..ca5af7ae66 100644 --- a/selling/doctype/sales_order/sales_order.py +++ b/selling/doctype/sales_order/sales_order.py @@ -102,8 +102,7 @@ class DocType(TransactionBase): 'projected_qty' : tot_avail_qty and flt(tot_avail_qty[0]['projected_qty']) or 0, 'actual_qty' : tot_avail_qty and flt(tot_avail_qty[0]['actual_qty']) or 0 } - return cstr(ret) - + return ret # OTHER CHARGES TRIGGER FUNCTIONS # ==================================================================================== @@ -136,7 +135,7 @@ class DocType(TransactionBase): nm = nm and nm[0][0] or '' if not nm: - return cstr('No') + return 'No' #check if maintenance visit already generated #============================================ @@ -145,7 +144,7 @@ class DocType(TransactionBase): nm = nm and nm[0][0] or '' if not nm: - return cstr('No') + return 'No' # VALIDATE # ===================================================================================== diff --git a/setup/doctype/email_settings/email_settings.py b/setup/doctype/email_settings/email_settings.py index 37de7bcb18..ef0a7631d8 100644 --- a/setup/doctype/email_settings/email_settings.py +++ b/setup/doctype/email_settings/email_settings.py @@ -13,7 +13,7 @@ class DocType: for r in res: ret[cstr(r[0])]=r[1] and cstr(r[1]) or '' - return str(ret) + return ret def set_cp_value(self, key): """ diff --git a/stock/doctype/delivery_note/delivery_note.py b/stock/doctype/delivery_note/delivery_note.py index 74e6f8a97f..3534dadc9a 100644 --- a/stock/doctype/delivery_note/delivery_note.py +++ b/stock/doctype/delivery_note/delivery_note.py @@ -40,15 +40,10 @@ class DocType(TransactionBase): def validate_fiscal_year(self): get_obj('Sales Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.posting_date,'Posting Date') - # ******************* Get Customer Details *********************** - #def get_customer_details(self): - # sales_com_obj = get_obj('Sales Common') - # sales_com_obj.get_customer_details(self) - # sales_com_obj.get_shipping_details(self) # ****** Get contact person details based on customer selected **** def get_contact_details(self): - return cstr(get_obj('Sales Common').get_contact_details(self,0)) + return get_obj('Sales Common').get_contact_details(self,0) # *********** Get Commission rate of Sales Partner **************** def get_comm_rate(self, sales_partner): @@ -122,7 +117,7 @@ class DocType(TransactionBase): ret = { 'actual_qty' : actual_qty and flt(actual_qty[0]['actual_qty']) or 0 } - return cstr(ret) + return ret # OTHER CHARGES TRIGGER FUNCTIONS diff --git a/stock/doctype/item/item.py b/stock/doctype/item/item.py index 7f0d3c2f69..d51fb3a081 100644 --- a/stock/doctype/item/item.py +++ b/stock/doctype/item/item.py @@ -27,7 +27,7 @@ class DocType: ret = { 'tax_rate' : rate and flt(rate[0][0]) or 0 } - return str(ret) + return ret def on_update(self): bin = sql("select stock_uom from `tabBin` where item_code = '%s' " % self.doc.item_code) diff --git a/stock/doctype/purchase_receipt/purchase_receipt.py b/stock/doctype/purchase_receipt/purchase_receipt.py index 0eda680cae..432998028a 100644 --- a/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/stock/doctype/purchase_receipt/purchase_receipt.py @@ -42,18 +42,15 @@ class DocType(TransactionBase): #-----------------Validation For Fiscal Year------------------------ def validate_fiscal_year(self): get_obj(dt = 'Purchase Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.transaction_date,'Transaction Date') - - # Get Supplier Details - #def get_supplier_details(self, name = ''): - # return cstr(get_obj(dt='Purchase Common').get_supplier_details(name)) + # Get Item Details def get_item_details(self, arg = ''): - return cstr(get_obj(dt='Purchase Common').get_item_details(self,arg)) + return get_obj(dt='Purchase Common').get_item_details(self,arg) # Get UOM Details def get_uom_details(self, arg = ''): - return cstr(get_obj(dt='Purchase Common').get_uom_details(arg)) + return get_obj(dt='Purchase Common').get_uom_details(arg) # GET TERMS & CONDITIONS # ===================================================================================== @@ -62,7 +59,7 @@ class DocType(TransactionBase): # get available qty at warehouse def get_bin_details(self, arg = ''): - return cstr(get_obj(dt='Purchase Common').get_bin_details(arg)) + return get_obj(dt='Purchase Common').get_bin_details(arg)f # Pull Purchase Order def get_po_details(self): diff --git a/stock/doctype/sales_bom/sales_bom.py b/stock/doctype/sales_bom/sales_bom.py index 3bd6fa520e..ce4567efb1 100644 --- a/stock/doctype/sales_bom/sales_bom.py +++ b/stock/doctype/sales_bom/sales_bom.py @@ -38,7 +38,7 @@ class DocType: def get_item_details(self, name): det = sql("select description, stock_uom from `tabItem` where name = '%s' " % cstr(name)) rate = sql("select ref_rate from `tabRef Rate Detail` where price_list_name = %s and parent = %s and ref_currency = %s", (self.doc.price_list, name, self.doc.currency)) - return cstr({'description' : det and det[0][0] or '', 'uom': det and det[0][1] or '', 'rate': rate and flt(rate[0][0]) or 0.00}) + return {'description' : det and det[0][0] or '', 'uom': det and det[0][1] or '', 'rate': rate and flt(rate[0][0]) or 0.00} def get_main_item(self): diff --git a/stock/doctype/stock_entry/stock_entry.py b/stock/doctype/stock_entry/stock_entry.py index b380995b34..47f03946b2 100644 --- a/stock/doctype/stock_entry/stock_entry.py +++ b/stock/doctype/stock_entry/stock_entry.py @@ -54,7 +54,7 @@ class DocType: 'conversion_factor' : 1, 'batch_no' : '' } - return str(ret) + return ret # Get UOM Details @@ -70,7 +70,7 @@ class DocType: 'conversion_factor' : flt(uom[0]['conversion_factor']), 'transfer_qty' : flt(arg['qty']) * flt(uom[0]['conversion_factor']), } - return str(ret) + return ret # get stock and incoming rate on posting date @@ -396,7 +396,7 @@ class DocType: 'customer_name' : res and res[0][1] or '', 'customer_address' : res and res[0][2] or ''} - return str(ret) + return ret def get_cust_addr(self): @@ -405,7 +405,7 @@ class DocType: 'customer_name' : res and res[0][0] or '', 'customer_address' : res and res[0][1] or ''} - return str(ret) + return ret @@ -415,7 +415,7 @@ class DocType: 'supplier' : res and res[0][0] or '', 'supplier_name' :res and res[0][1] or '', 'supplier_address' : res and res[0][2] or ''} - return str(ret) + return ret def get_supp_addr(self): @@ -423,4 +423,4 @@ class DocType: ret = { 'supplier_name' : res and res[0][0] or '', 'supplier_address' : res and res[0][1] or ''} - return str(ret) + return ret diff --git a/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py b/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py index e603d1fc8f..f8ac7372a5 100644 --- a/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py +++ b/stock/doctype/stock_uom_replace_utility/stock_uom_replace_utility.py @@ -22,7 +22,7 @@ class DocType: self.doc, self.doclist = d,dl def get_stock_uom(self, item_code): - return cstr({'current_stock_uom': cstr(get_value('Item', item_code, 'stock_uom'))}) + return {'current_stock_uom': cstr(get_value('Item', item_code, 'stock_uom'))} def validate_mandatory(self): if not cstr(self.doc.item_code): diff --git a/support/doctype/customer_issue/customer_issue.py b/support/doctype/customer_issue/customer_issue.py index db63cc206d..12a8ebdc6d 100644 --- a/support/doctype/customer_issue/customer_issue.py +++ b/support/doctype/customer_issue/customer_issue.py @@ -27,37 +27,6 @@ class DocType(TransactionBase): def autoname(self): #self.doc.name = make_autoname('CI/' + self.doc.fiscal_year + '/.######') self.doc.name = make_autoname(self.doc.naming_series + '.######') - - #def get_customer_details(self): - # details = sql("select address, territory, customer_group, customer_name from `tabCustomer` where name = '%s' and docstatus != 2" %(self.doc.customer), as_dict = 1) - # if details: - # ret = { - # 'customer_address' : details and details[0]['address'] or '', - # 'customer_name' : details and details[0]['customer_name'] or '', - # 'territory' : details and details[0]['territory'] or '', - # 'customer_group' : details and details[0]['customer_group'] or '' - # } - # # ********** get primary contact details (this is done separately coz. , in case there is no primary contact thn it would not be able to fetch customer details in case of join query) - # contact_det = sql("select contact_name, contact_no, email_id from `tabContact` where customer_name = '%s' and is_customer = 1 and is_primary_contact = 'Yes' and docstatus != 2" %(self.doc.customer), as_dict = 1) - # ret['contact_person'] = contact_det and contact_det[0]['contact_name'] or '' - # ret['contact_no'] = contact_det and contact_det[0]['contact_no'] or '' - # ret['email_id'] = contact_det and contact_det[0]['email_id'] or '' - # - # return cstr(ret) - # else: - # msgprint("Customer : %s does not exist in system." % (name)) - # raise Exception - - # Get customer's contact person details - # ============================================================== - #def get_contact_details(self): - # contact = sql("select contact_no, email_id from `tabContact` where contact_name = '%s' and customer_name = '%s' and docstatus != 2" %(self.doc.contact_person, self.doc.customer), as_dict = 1) - # ret = { - # 'contact_no' : contact and contact[0]['contact_no'] or '', - # 'email_id' : contact and contact[0]['email_id'] or '' - # } - # return str(ret) - #check if maintenance schedule already generated #============================================ @@ -66,7 +35,7 @@ class DocType(TransactionBase): nm = nm and nm[0][0] or '' if not nm: - return cstr('No') + return 'No' def on_submit(self): if session['user'] != 'Guest': diff --git a/support/doctype/maintenance_schedule/maintenance_schedule.py b/support/doctype/maintenance_schedule/maintenance_schedule.py index 0d6ef809fb..d5c90b55fc 100644 --- a/support/doctype/maintenance_schedule/maintenance_schedule.py +++ b/support/doctype/maintenance_schedule/maintenance_schedule.py @@ -38,21 +38,8 @@ class DocType(TransactionBase): 'item_name': item and item[0]['item_name'] or '', 'description' : item and item[0]['description'] or '' } - return str(ret) - - #pull customer details - #------------------------- - #def get_customer_details(self): - # det = sql("select t1.customer_name,t1.address,t1.territory,t2.contact_name from `tabCustomer` t1, `tabContact` t2 where t1.name = %s and t1.name=t2.customer and t2.is_primary_contact = 'Yes'", self.doc.customer, as_dict=1) - # - # ret = { - # 'customer_name': det and det[0]['customer_name'] or '', - # 'address' : det and det[0]['address'] or '', - # 'territory': det and det[0]['territory'] or '', - # 'contact_person' : det and det[0]['contact_name'] or '' - # } - # return str(ret) - + return ret + # generate maintenance schedule #------------------------------------- def generate_schedule(self): @@ -132,7 +119,7 @@ class DocType(TransactionBase): count = period/365 ret = {'no_of_visits':count} - return str(ret) + return ret def validate_maintenance_detail(self): if not getlist(self.doclist, 'item_maintenance_detail'): diff --git a/support/doctype/maintenance_visit/maintenance_visit.py b/support/doctype/maintenance_visit/maintenance_visit.py index 203793c929..e4efe1c53a 100644 --- a/support/doctype/maintenance_visit/maintenance_visit.py +++ b/support/doctype/maintenance_visit/maintenance_visit.py @@ -31,20 +31,7 @@ class DocType(TransactionBase): 'item_name' : item and item[0]['item_name'] or '', 'description' : item and item[0]['description'] or '' } - return str(ret) - - #get customer details - #----------------------- - #def get_customer_details(self): - # det = sql("select t1.customer_name,t1.address,t1.territory,t2.contact_name from `tabCustomer` t1, `tabContact` t2 where t1.name = %s and t1.name=t2.customer and t2.is_primary_contact = 'Yes'", self.doc.customer, as_dict=1) - # - # ret = { - # 'customer_name' : det and det[0]['customer_name'] or '', - # 'address' : det and det[0]['address'] or '', - # 'territory': det and det[0]['territory'] or '', - # 'contact_person' : det and det[0]['contact_name'] or '' - # } - # return str(ret) + return ret # fetch details of resp Sales order or customer issue #----------------------------------------------------------- From d0ec3e6101fd4e30c4e32e3bcd7a7a50910a95fc Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 12 Aug 2011 11:05:04 +0530 Subject: [PATCH 41/42] bom fix --- production/doctype/workstation/workstation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/doctype/workstation/workstation.py b/production/doctype/workstation/workstation.py index aaa490837f..45851de3e2 100644 --- a/production/doctype/workstation/workstation.py +++ b/production/doctype/workstation/workstation.py @@ -25,7 +25,7 @@ class DocType: def update_bom_operation(self): bom_list = sql(" select DISTINCT parent from `tabBOM Operation` where workstation = '%s'" % self.doc.name) for bom_no in bom_list: - sql("update `tabBOM Operation` set hour_rate = '%s' where parent = '%s' and workstation = '%s'"%( self.doc.hour_rate, bom_no, self.doc.name)) + sql("update `tabBOM Operation` set hour_rate = '%s' where parent = '%s' and workstation = '%s'"%( self.doc.hour_rate, bom_no[0], self.doc.name)) def on_update(self): set(self.doc, 'overhead', flt(self.doc.hour_rate_electricity) + flt(self.doc.hour_rate_consumable) + flt(self.doc.hour_rate_rent)) From c3ef49317182dfc6a396b555d49c7cf2595da912 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Fri, 12 Aug 2011 14:51:33 +0530 Subject: [PATCH 42/42] added setup wizard 0.1 --- home/page/event_updates/event_updates.css | 47 +++++++++++- home/page/event_updates/event_updates.js | 60 ++++++++++++++- home/page/event_updates/event_updates.py | 44 ++++++++++- setup/doctype/personalize/personalize.py | 2 +- setup/page/import_data/import_data.html | 2 +- setup/page/import_data/import_data.js | 90 +++++++++++++---------- 6 files changed, 197 insertions(+), 48 deletions(-) diff --git a/home/page/event_updates/event_updates.css b/home/page/event_updates/event_updates.css index ed50351973..a88fed48b1 100644 --- a/home/page/event_updates/event_updates.css +++ b/home/page/event_updates/event_updates.css @@ -14,4 +14,49 @@ span.home-status-unread { font-size: 11px; color: #FFF; background-color: RED; -} \ No newline at end of file +} + +div.setup-wizard { + display: none; + margin: 13px 0px; + background-color: #FED; + padding: 13px; +} + +div.setup-wizard .header { + font-size: 12px; + font-weight: bold; + color: #322; + margin-bottom: 7px; +} + + +div.setup-wizard .percent-outer { + height: 17px; + background-color: #FFF; + border: 2px solid #322; +} + +div.setup-wizard .percent-inner { + height: 17px; + background-color: GREEN; +} + +div.setup-wizard .suggestion { + margin: 7px 0px; + color: #322; +} + +div.setup-wizard .prev-next { + height: 13px; +} + +div.setup-wizard .prev-next span { + display: none; + float: right; + margin-left: 13px; + color: #877; + font-size: 11px; +} + + diff --git a/home/page/event_updates/event_updates.js b/home/page/event_updates/event_updates.js index 7ecfbdcf3c..1574f537ef 100644 --- a/home/page/event_updates/event_updates.js +++ b/home/page/event_updates/event_updates.js @@ -24,8 +24,8 @@ pscript.home_make_body = function() { wrapper.head = $a(wrapper.body, 'div'); wrapper.banner_area = $a(wrapper.head, 'div'); - wrapper.toolbar_area = $a(wrapper.head, 'div'); + wrapper.setup_wizard_area = $a(wrapper.body, 'div', 'setup-wizard') wrapper.system_message_area = $a(wrapper.body, 'div', '', {marginBottom:'16px', padding:'8px', backgroundColor:'#FFD', border:'1px dashed #AA6', display:'none'}) @@ -612,7 +612,6 @@ pscript.home_make_status = function() { // get values $c_page('home', 'event_updates', 'get_status_details', user, function(r,rt) { - home_status_bar.render(r.message); // system_messages @@ -622,6 +621,11 @@ pscript.home_make_status = function() { // render online users pscript.online_users_obj.render(r.message.online_users); pscript.online_users = r.message.online_users; + + // setup wizard + if(r.message.setup_status) { + new SetupWizard(r.message.setup_status) + } } ); } @@ -633,7 +637,7 @@ pscript.show_system_message = function(wrapper, msg) { var txt = $a(wrapper.system_message_area, 'div', '', {lineHeight:'1.6em'}); txt.innerHTML = msg; - var span = $ln($a(wrapper.system_message_area, 'div'), 'Dismiss', + var span = $ln($a(wrapper.system_message_area, 'div', '', {textAlign:'right'}), 'Dismiss'.bold(), function(me) { me.set_working(); $c_obj('Home Control', 'dismiss_message', '', function(r,rt) { @@ -729,3 +733,53 @@ pscript.validate_fields = function(d) if(!flag) alert(msg); return flag; } + +SetupWizard = function(status) { + var me = this; + $.extend(this, { + make: function(status) { + me.status = status; + me.wrapper = page_body.pages['Event Updates'].setup_wizard_area; + $ds(me.wrapper); + me.make_percent(status.percent); + me.make_suggestion(status.ret); + }, + make_percent: function(percent) { + $a(me.wrapper, 'div', 'header', {}, 'Your setup is '+percent+'% complete'); + var o = $a(me.wrapper, 'div', 'percent-outer'); + $a(o, 'div', 'percent-inner', {width:percent + '%'}); + }, + make_suggestion: function(ret) { + me.suggest_area = $a(me.wrapper, 'div', 'suggestion'); + if(me.status.ret.length>1) { + me.prev_next = $a(me.wrapper, 'div', 'prev-next'); + + // next + me.next = $a(me.prev_next, 'span', 'link_type', null, 'Next Suggestion', + function() { me.show_suggestion(me.cur_sugg+1) }); + + // prev + me.prev = $a(me.prev_next, 'span', 'link_type', null, 'Previous Suggestion', + function() { me.show_suggestion(me.cur_sugg-1) }); + + } + if(me.status.ret.length) { + me.show_suggestion(0); + } else { + me.suggest_area.innerHTML = 'Congratulations: '.bold() + 'You are now on your track... Good luck'; + } + }, + show_suggestion: function(idx) { + me.cur_sugg = idx; + me.suggest_area.innerHTML = 'What you can do next: '.bold() + me.status.ret[idx]; + + // show hide prev, next + if(me.status.ret.length>1) { + $dh(me.prev); $dh(me.next); + if(idx>0) $ds(me.prev); + if(idxUpload your company banner') + else: + percent += 20 + + def check_type(doctype, ret, percent): + if not webnotes.conn.sql("select count(*) from tab%s" % doctype)[0][0]: + ret.append(''' + + Create a new %(dt)s + or + + Import from a spreadsheet''' % {'dt':doctype}) + else: + percent += 20 + return ret, percent + + ret, percent = check_type('Item', ret, percent) + ret, percent = check_type('Customer', ret, percent) + ret, percent = check_type('Supplier', ret, percent) + + if percent==100: + webnotes.conn.set_global('setup_done', '1') + return '' + + return {'ret': ret, 'percent': percent} + \ No newline at end of file diff --git a/setup/doctype/personalize/personalize.py b/setup/doctype/personalize/personalize.py index 6a15102f41..3264546337 100644 --- a/setup/doctype/personalize/personalize.py +++ b/setup/doctype/personalize/personalize.py @@ -28,4 +28,4 @@ class DocType: # def set_html_from_image(self): file_name = self.doc.file_list.split(',')[0] - self.doc.header_html = '
' + self.doc.header_html = '
' diff --git a/setup/page/import_data/import_data.html b/setup/page/import_data/import_data.html index a4b30f425f..5b30dd28cf 100644 --- a/setup/page/import_data/import_data.html +++ b/setup/page/import_data/import_data.html @@ -32,7 +32,7 @@ -
+

Data Import Guide

  1. Get the template of the DocType for which you want to import in CSV (Comma seperated values) format.
  2. diff --git a/setup/page/import_data/import_data.js b/setup/page/import_data/import_data.js index aa0bdbd532..f1601e79c7 100644 --- a/setup/page/import_data/import_data.js +++ b/setup/page/import_data/import_data.js @@ -1,45 +1,55 @@ pscript['onload_Import Data'] = function() { - - //alert(profile.can_get_report); + + //alert(profile.can_get_report); - callback = function(r,rt) { - var h = new PageHeader('di_header','Import Data','Tool to download template and upload data'); - var sel = $i('import_template'); - if(r.message){ - add_sel_options(sel, r.message); - sel.onchange=function(){ - $i('child_tab_lst').innerHTML =''; - if(sel.value != 'Select Master...'){ - $c_obj('Import Data Control','get_child_lst',sel.value, - function(r,rt){ - var me = this; - $y($i('child_tab_lst'),{backgroundColor:'#EEEEEE'}) - var desc = $a($i('child_tab_lst'), 'div', '', {padding:'8px'}); - - desc.innerHTML = "

    Please click on following link(s) to download template.

    "; + callback = function(r,rt) { + var h = new PageHeader('di_header','Import Data','Tool to download template and upload data'); + var sel = $i('import_template'); + if(r.message){ + add_sel_options(sel, r.message); + + // please collapse here when editing :) + sel.onchange=function(){ + $i('child_tab_lst').innerHTML =''; + if(sel.value != 'Select Master...'){ + $c_obj('Import Data Control','get_child_lst',sel.value, + function(r,rt){ + var me = this; + $y($i('child_tab_lst'),{backgroundColor:'#EEEEEE', margin: '17px 17px', padding: '13px'}) + var desc = $a($i('child_tab_lst'), 'div', '', {padding:'4px'}); + + desc.innerHTML = "Download template(s) for importing "+sel_val(sel)+""; - - var parent = $a($i('child_tab_lst'), 'div'); - var tab = make_table(parent,r.message.length,1,'100%',[],{padding:'8px',fontSize:'15px',borderCollapse: 'collapse'}); - - for(var i=0;i