ran 2to3, evaluation (#13499)

* ran 2to3, evaluation

* Update update_gstin.py

* Update accounts_receivable_summary.py
diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py b/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py
index 46fff7d..845949b 100644
--- a/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py
+++ b/erpnext/accounts/doctype/account/chart_of_accounts/chart_of_accounts.py
@@ -1,10 +1,11 @@
 # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 # License: GNU General Public License v3. See license.txt
 
-from __future__ import unicode_literals
+
 import frappe, os, json
 from frappe.utils import cstr
 from unidecode import unidecode
+from six import iteritems
 
 def create_charts(company, chart_template=None, existing_company=None):
 	chart = get_chart(chart_template, existing_company)
@@ -12,7 +13,7 @@
 		accounts = []
 
 		def _import_accounts(children, parent, root_type, root_account=False):
-			for account_name, child in children.items():
+			for account_name, child in iteritems(children):
 				if root_account:
 					root_type = child.get("root_type")
 
@@ -184,7 +185,7 @@
 	
 	if chart:
 		def _get_account_names(account_master):
-			for account_name, child in account_master.items():
+			for account_name, child in iteritems(account_master):
 				if account_name not in ["account_number", "account_type",
 					"root_type", "is_group", "tax_rate"]:
 					accounts.append(account_name)
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py
index a69ffcf..01ac14c 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.py
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py
@@ -62,7 +62,7 @@
 				if d.reference_type in ("Sales Order", "Purchase Order", "Employee Advance"):
 					advance_paid.setdefault(d.reference_type, []).append(d.reference_name)
 
-		for voucher_type, order_list in advance_paid.items():
+		for voucher_type, order_list in iteritems(advance_paid):
 			for voucher_no in list(set(order_list)):
 				frappe.get_doc(voucher_type, voucher_no).set_total_advance_paid()
 
@@ -219,7 +219,7 @@
 				d.reference_name = None
 			if not d.reference_name:
 				d.reference_type = None
-			if d.reference_type and d.reference_name and (d.reference_type in field_dict.keys()):
+			if d.reference_type and d.reference_name and (d.reference_type in list(field_dict)):
 				dr_or_cr = "credit_in_account_currency" \
 					if d.reference_type in ("Sales Order", "Sales Invoice") else "debit_in_account_currency"
 
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py
index 41ae0cd..e694c91 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py
@@ -14,7 +14,7 @@
 from erpnext.hr.doctype.expense_claim.expense_claim import update_reimbursed_amount
 from erpnext.controllers.accounts_controller import AccountsController, get_supplier_block_status
 
-from six import string_types
+from six import string_types, iteritems
 
 class InvalidPaymentEntry(ValidationError):
 	pass
@@ -147,7 +147,7 @@
 				ref_details = get_reference_details(d.reference_doctype,
 					d.reference_name, self.party_account_currency)
 
-				for field, value in ref_details.items():
+				for field, value in iteritems(ref_details):
 					if not d.get(field) or force:
 						d.set(field, value)
 
diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.py b/erpnext/accounts/doctype/pos_profile/pos_profile.py
index 20a90f4..fd41106 100644
--- a/erpnext/accounts/doctype/pos_profile/pos_profile.py
+++ b/erpnext/accounts/doctype/pos_profile/pos_profile.py
@@ -7,7 +7,7 @@
 from frappe.utils import cint, now
 from erpnext.accounts.doctype.sales_invoice.pos import get_child_nodes
 from erpnext.accounts.doctype.sales_invoice.sales_invoice import set_account_for_mode_of_payment
-
+from six import iteritems
 from frappe.model.document import Document
 
 class POSProfile(Document):
@@ -39,7 +39,7 @@
 			self.expense_account], "Cost Center": [self.cost_center],
 			"Warehouse": [self.warehouse]}
 
-		for link_dt, dn_list in accounts.items():
+		for link_dt, dn_list in iteritems(accounts):
 			for link_dn in dn_list:
 				if link_dn and not frappe.db.exists({"doctype": link_dt,
 						"company": self.company, "name": link_dn}):
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 545967e..31b6ee9 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -1,7 +1,7 @@
 # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 # License: GNU General Public License v3. See license.txt
 
-from __future__ import unicode_literals
+
 import frappe, erpnext
 from frappe.utils import cint, cstr, formatdate, flt, getdate, nowdate
 from frappe import _, throw
@@ -17,6 +17,7 @@
 from erpnext.buying.utils import check_for_closed_status
 from erpnext.accounts.general_ledger import get_round_off_account_and_cost_center
 from frappe.model.mapper import get_mapped_doc
+from six import iteritems
 from erpnext.accounts.doctype.sales_invoice.sales_invoice import validate_inter_company_party, update_linked_invoice,\
 	unlink_inter_company_invoice
 from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account
@@ -572,7 +573,7 @@
 			total_valuation_amount = sum(valuation_tax.values())
 			amount_including_divisional_loss = self.negative_expense_to_be_booked
 			i = 1
-			for cost_center, amount in valuation_tax.items():
+			for cost_center, amount in iteritems(valuation_tax):
 				if i == len(valuation_tax):
 					applicable_amount = amount_including_divisional_loss
 				else:
@@ -592,7 +593,7 @@
 				i += 1
 
 		if self.auto_accounting_for_stock and self.update_stock and valuation_tax:
-			for cost_center, amount in valuation_tax.items():
+			for cost_center, amount in iteritems(valuation_tax):
 				gl_entries.append(
 					self.get_gl_dict({
 						"account": self.expenses_included_in_valuation,
diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py
index 52b59d4..ad13447 100755
--- a/erpnext/accounts/doctype/sales_invoice/pos.py
+++ b/erpnext/accounts/doctype/sales_invoice/pos.py
@@ -1,7 +1,7 @@
 # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 # License: GNU General Public License v3. See license.txt
 
-from __future__ import unicode_literals
+
 
 import json
 
@@ -14,7 +14,7 @@
 from frappe.core.doctype.communication.email import make
 from frappe.utils import nowdate
 
-from six import string_types
+from six import string_types, iteritems
 
 
 @frappe.whitelist()
@@ -368,7 +368,7 @@
 	customers_list = make_customer_and_address(customers_list)
 	name_list = []
 	for docs in doc_list:
-		for name, doc in docs.items():
+		for name, doc in iteritems(docs):
 			if not frappe.db.exists('Sales Invoice', {'offline_pos_name': name}):
 				validate_records(doc)
 				si_doc = frappe.new_doc('Sales Invoice')
@@ -414,7 +414,7 @@
 
 def make_customer_and_address(customers):
 	customers_list = []
-	for customer, data in customers.items():
+	for customer, data in iteritems(customers):
 		data = json.loads(data)
 		cust_id = get_customer_id(data, customer)
 		if not cust_id:
@@ -511,7 +511,7 @@
 
 def make_email_queue(email_queue):
 	name_list = []
-	for key, data in email_queue.items():
+	for key, data in iteritems(email_queue):
 		name = frappe.db.get_value('Sales Invoice', {'offline_pos_name': key}, 'name')
 		data = json.loads(data)
 		sender = frappe.session.user
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 190b707..8d099d1 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -22,6 +22,8 @@
 from erpnext.setup.doctype.company.company import update_company_current_month_sales
 from erpnext.accounts.general_ledger import get_round_off_account_and_cost_center
 
+from six import iteritems
+
 form_grid_templates = {
 	"items": "templates/form_grid/item_grid.html"
 }
@@ -340,7 +342,7 @@
 			for item in self.get("items"):
 				if item.get('item_code'):
 					for fname, val in get_pos_profile_item_details(pos,
-						frappe._dict(item.as_dict()), pos).items():
+						iteritems(frappe._dict(item.as_dict()), pos)):
 
 						if (not for_validate) or (for_validate and not item.get(fname)):
 							item.set(fname, val)
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index 8be5a0a..17cfd5c 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -16,7 +16,7 @@
 from frappe.model.naming import make_autoname
 from erpnext.accounts.doctype.account.test_account import get_inventory_account
 from erpnext.controllers.taxes_and_totals import get_itemised_tax_breakup_data
-
+from six import iteritems
 class TestSalesInvoice(unittest.TestCase):
 	def make(self):
 		w = frappe.copy_doc(test_records[0])
@@ -277,7 +277,7 @@
 
 		# check if item values are calculated
 		for i, d in enumerate(si.get("items")):
-			for k, v in expected_values[i].items():
+			for k, v in iteritems(expected_values[i]):
 				self.assertEqual(d.get(k), v)
 
 		# check net total
@@ -523,7 +523,7 @@
 
 		# check if item values are calculated
 		for i, d in enumerate(si.get("items")):
-			for key, val in expected_values[i].items():
+			for key, val in iteritems(expected_values[i]):
 				self.assertEqual(d.get(key), val)
 
 		# check net total
diff --git a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py
index 9b50960..c56ae0d 100644
--- a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py
+++ b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py
@@ -7,6 +7,9 @@
 from frappe.utils import flt
 from erpnext.accounts.report.accounts_receivable.accounts_receivable import ReceivablePayableReport
 
+from six import iteritems
+from six.moves import zip
+
 class AccountsReceivableSummary(ReceivablePayableReport):
 	def run(self, args):
 		party_naming_by = frappe.db.get_value(args.get("naming_by")[0], None, args.get("naming_by")[1])
@@ -52,7 +55,7 @@
 
 		partywise_total = self.get_partywise_total(party_naming_by, args)
 
-		for party, party_dict in partywise_total.items():
+		for party, party_dict in iteritems(partywise_total):
 			row = [party]
 
 			if party_naming_by == "Naming Series":
@@ -88,7 +91,7 @@
 					"range4": 0
 				})
 			)
-			for k in party_total[d.party].keys():
+			for k in list(party_total[d.party]):
 				if k != "currency":
 					party_total[d.party][k] += flt(d.get(k, 0))
 				
diff --git a/erpnext/accounts/report/budget_variance_report/budget_variance_report.py b/erpnext/accounts/report/budget_variance_report/budget_variance_report.py
index bc457aa..26c8f99 100644
--- a/erpnext/accounts/report/budget_variance_report/budget_variance_report.py
+++ b/erpnext/accounts/report/budget_variance_report/budget_variance_report.py
@@ -8,6 +8,8 @@
 from frappe.utils import formatdate
 from erpnext.controllers.trends import get_period_date_ranges, get_period_month_ranges
 
+from six import iteritems
+
 def execute(filters=None):
 	if not filters: filters = {}
 
@@ -20,7 +22,7 @@
 	for cost_center in cost_centers:
 		cost_center_items = cam_map.get(cost_center)
 		if cost_center_items:
-			for account, monthwise_data in cost_center_items.items():
+			for account, monthwise_data in iteritems(cost_center_items):
 				row = [cost_center, account]
 				totals = [0, 0, 0]
 				for relevant_months in period_month_ranges:
diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py
index 41abc3f..7300b9c 100644
--- a/erpnext/accounts/report/financial_statements.py
+++ b/erpnext/accounts/report/financial_statements.py
@@ -1,7 +1,7 @@
 # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 # License: GNU General Public License v3. See license.txt
 
-from __future__ import unicode_literals
+
 
 import re
 from past.builtins import cmp
@@ -13,6 +13,7 @@
 from frappe import _
 from frappe.utils import (flt, getdate, get_first_day, add_months, add_days, formatdate)
 
+from six import itervalues
 
 def get_period_list(from_fiscal_year, to_fiscal_year, periodicity, accumulated_values=False,
 	company=None, reset_period_on_fy_change=True):
@@ -166,7 +167,7 @@
 
 def calculate_values(
 		accounts_by_name, gl_entries_by_account, period_list, accumulated_values, ignore_accumulated_values_for_fy):
-	for entries in gl_entries_by_account.values():
+	for entries in itervalues(gl_entries_by_account):
 		for entry in entries:
 			d = accounts_by_name.get(entry.account)
 			if not d:
diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py
index e84c85a..804e3fe 100644
--- a/erpnext/accounts/report/general_ledger/general_ledger.py
+++ b/erpnext/accounts/report/general_ledger/general_ledger.py
@@ -9,6 +9,7 @@
 from frappe import _, _dict
 from erpnext.accounts.utils import get_account_currency
 
+from six import iteritems
 
 def execute(filters=None):
 	if not filters:
@@ -194,7 +195,7 @@
 	data.append(totals.opening)
 
 	if filters.get("group_by") in ["Group by Account", "Group by Party"]:
-		for acc, acc_dict in gle_map.items():
+		for acc, acc_dict in iteritems(gle_map):
 			# acc
 			if acc_dict.entries:
 				# opening
diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py
index 772d4f8..60252ea 100644
--- a/erpnext/accounts/report/gross_profit/gross_profit.py
+++ b/erpnext/accounts/report/gross_profit/gross_profit.py
@@ -149,7 +149,7 @@
 
 	def get_average_rate_based_on_group_by(self):
 		# sum buying / selling totals for group
-		for key in self.grouped.keys():
+		for key in list(self.grouped):
 			if self.filters.get("group_by") != "Invoice":
 				for i, row in enumerate(self.grouped[key]):
 					if i==0:
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index f53f924..9cb93e0 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -1,14 +1,14 @@
 # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 # License: GNU General Public License v3. See license.txt
 
-from __future__ import unicode_literals
+
 
 import frappe, erpnext
 import frappe.defaults
 from frappe.utils import nowdate, cstr, flt, cint, now, getdate
 from frappe import throw, _
 from frappe.utils import formatdate, get_number_format_info
-
+from six import iteritems
 # imported to enable erpnext.accounts.utils.get_account_currency
 from erpnext.accounts.doctype.account.account import get_account_currency
 
@@ -423,7 +423,7 @@
 		if d.allocated_amount < original_row.allocated_amount:
 			new_row = payment_entry.append("references")
 			new_row.docstatus = 1
-			for field in reference_details.keys():
+			for field in list(reference_details):
 				new_row.set(field, original_row[field])
 
 			new_row.allocated_amount = original_row.allocated_amount - d.allocated_amount
@@ -526,7 +526,7 @@
 	difference = {}
 	warehouse_account = get_warehouse_account_map()
 
-	for warehouse, account_data in warehouse_account.items():
+	for warehouse, account_data in iteritems(warehouse_account):
 		if account_data.get('account') in account_list:
 			account_balance = get_balance_on(account_data.get('account'), posting_date, in_account_currency=False)
 			stock_value = get_stock_value_on(warehouse, posting_date)
diff --git a/erpnext/agriculture/doctype/crop_cycle/test_crop_cycle.py b/erpnext/agriculture/doctype/crop_cycle/test_crop_cycle.py
index 7d2e3fe..136858b 100644
--- a/erpnext/agriculture/doctype/crop_cycle/test_crop_cycle.py
+++ b/erpnext/agriculture/doctype/crop_cycle/test_crop_cycle.py
@@ -55,7 +55,7 @@
 	all_tasks = frappe.get_all('Task')
 	for task in all_tasks:
 		sample_task = frappe.get_doc('Task', task.name)
-		if sample_task.subject in all_task_dict.keys():
+		if sample_task.subject in list(all_task_dict):
 			if sample_task.exp_start_date != all_task_dict[sample_task.subject]['exp_start_date'] or sample_task.exp_end_date != all_task_dict[sample_task.subject]['exp_end_date']:
 				return False
 			all_task_dict.pop(sample_task.subject)
diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index 84094ce..b6d3d6b 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -105,14 +105,14 @@
 
 						number_of_pending_depreciations += 1
 						for n in range(number_of_pending_depreciations):
-							if n == range(number_of_pending_depreciations)[-1]:
+							if n == list(range(number_of_pending_depreciations))[-1]:
 								schedule_date = add_months(self.available_for_use_date, n * 12)
 								previous_scheduled_date = add_months(d.depreciation_start_date, (n-1) * 12)
 								depreciation_amount = \
 									self.get_depreciation_amount_prorata_temporis(value_after_depreciation,
 										d, previous_scheduled_date, schedule_date)
 
-							elif n == range(number_of_pending_depreciations)[0]:
+							elif n == list(range(number_of_pending_depreciations))[0]:
 								schedule_date = d.depreciation_start_date
 								depreciation_amount = \
 									self.get_depreciation_amount_prorata_temporis(value_after_depreciation,
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index a91d39f..17afba0 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -13,6 +13,7 @@
 from erpnext.accounts.utils import get_account_currency
 from frappe.desk.notifications import clear_doctype_notifications
 from erpnext.buying.utils import check_for_closed_status
+from six import iteritems
 from erpnext.assets.doctype.asset_category.asset_category import get_asset_category_account
 
 form_grid_templates = {
@@ -283,7 +284,7 @@
 			total_valuation_amount = sum(valuation_tax.values())
 			amount_including_divisional_loss = negative_expense_to_be_booked
 			i = 1
-			for cost_center, amount in valuation_tax.items():
+			for cost_center, amount in iteritems(valuation_tax):
 				if i == len(valuation_tax):
 					applicable_amount = amount_including_divisional_loss
 				else:
diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
index ffcc954..cdf48d9 100644
--- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
@@ -2,7 +2,7 @@
 # License: GNU General Public License v3. See license.txt
 
 
-from __future__ import unicode_literals
+
 import unittest
 import frappe, erpnext
 import frappe.defaults
@@ -12,7 +12,7 @@
 from erpnext.stock.doctype.serial_no.serial_no import SerialNoDuplicateError
 from erpnext.accounts.doctype.account.test_account import get_inventory_account
 from erpnext.stock.doctype.item.test_item import make_item
-
+from six import iteritems
 class TestPurchaseReceipt(unittest.TestCase):
 	def setUp(self):
 		frappe.db.set_value("Buying Settings", None, "allow_multiple_items", 1)
@@ -180,7 +180,7 @@
 	def test_purchase_return_for_serialized_items(self):
 		def _check_serial_no_values(serial_no, field_values):
 			serial_no = frappe.get_doc("Serial No", serial_no)
-			for field, value in field_values.items():
+			for field, value in iteritems(field_values):
 				self.assertEqual(cstr(serial_no.get(field)), value)
 
 		from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
@@ -217,7 +217,7 @@
 		return_pr = make_purchase_receipt(item_code=item_code, qty=-10, uom="Unit",
 			stock_uom="Box", conversion_factor=0.1, is_return=1, return_against=pr.name)
 
-		self.assertEquals(abs(return_pr.items[0].stock_qty), 1.0)
+		self.assertEqual(abs(return_pr.items[0].stock_qty), 1.0)
 
 	def test_closed_purchase_receipt(self):
 		from erpnext.stock.doctype.purchase_receipt.purchase_receipt import update_purchase_receipt_status
diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py
index 8ce49c5..67871c3 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.py
+++ b/erpnext/stock/doctype/serial_no/serial_no.py
@@ -9,7 +9,7 @@
 from frappe import _, ValidationError
 
 from erpnext.controllers.stock_controller import StockController
-
+from six.moves import map
 class SerialNoCannotCreateDirectError(ValidationError): pass
 class SerialNoCannotCannotChangeError(ValidationError): pass
 class SerialNoNotRequiredError(ValidationError): pass
@@ -174,7 +174,7 @@
 				serial_nos = map(lambda i: new if i.upper()==old.upper() else i, item[1].split('\n'))
 				frappe.db.sql("""update `tab%s` set serial_no = %s
 					where name=%s""" % (dt[0], '%s', '%s'),
-					('\n'.join(serial_nos), item[0]))
+					('\n'.join(list(serial_nos)), item[0]))
 
 	def on_stock_ledger_entry(self):
 		if self.via_stock_ledger and not self.get("__islocal"):
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 4a9c029..c3b9843 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -15,7 +15,7 @@
 from erpnext.stock.utils import get_bin
 import json
 
-from six import string_types
+from six import string_types, itervalues, iteritems
 
 class IncorrectValuationRateError(frappe.ValidationError): pass
 class DuplicateEntryForWorkOrderError(frappe.ValidationError): pass
@@ -638,7 +638,7 @@
 				if self.work_order and self.purpose == "Material Transfer for Manufacture":
 					item_dict = self.get_pending_raw_materials()
 					if self.to_warehouse and self.pro_doc:
-						for item in item_dict.values():
+						for item in itervalues(item_dict):
 							item["to_warehouse"] = self.pro_doc.wip_warehouse
 					self.add_to_stock_entry_detail(item_dict)
 
@@ -665,7 +665,7 @@
 							from `tabPurchase Order` po, `tabPurchase Order Item Supplied` poitemsup
 							where po.name = poitemsup.parent
 								and po.name = %s""",self.purchase_order))
-					for item in item_dict.values():
+					for item in itervalues(item_dict):
 						if self.pro_doc and not self.pro_doc.skip_transfer:
 							item["from_warehouse"] = self.pro_doc.wip_warehouse
 						#Get Reserve Warehouse from PO
@@ -677,7 +677,7 @@
 
 					if self.purpose != "Subcontract":
 						scrap_item_dict = self.get_bom_scrap_material(self.fg_completed_qty)
-						for item in scrap_item_dict.values():
+						for item in itervalues(scrap_item_dict):
 							if self.pro_doc and self.pro_doc.scrap_warehouse:
 								item["to_warehouse"] = self.pro_doc.scrap_warehouse
 
@@ -744,7 +744,7 @@
 			fetch_exploded = self.use_multi_level_bom)
 
 		used_alternative_items = get_used_alternative_items(work_order = self.work_order)
-		for item in item_dict.values():
+		for item in itervalues(item_dict):
 			# if source warehouse presents in BOM set from_warehouse as bom source_warehouse
 			if item["allow_alternative_item"]:
 				item["allow_alternative_item"] = frappe.db.get_value('Work Order',
@@ -769,7 +769,7 @@
 		item_dict = get_bom_items_as_dict(self.bom_no, self.company, qty=qty,
 			fetch_exploded = 0, fetch_scrap_items = 1)
 
-		for item in item_dict.values():
+		for item in itervalues(item_dict):
 			item.from_warehouse = ""
 		return item_dict
 
@@ -905,7 +905,7 @@
 		"""
 		item_dict = self.get_pro_order_required_items()
 		max_qty = flt(self.pro_doc.qty)
-		for item, item_details in item_dict.items():
+		for item, item_details in iteritems(item_dict):
 			pending_to_issue = flt(item_details.required_qty) - flt(item_details.transferred_qty)
 			desire_to_transfer = flt(self.fg_completed_qty) * flt(item_details.required_qty) / max_qty
 
diff --git a/erpnext/stock/report/stock_ageing/stock_ageing.py b/erpnext/stock/report/stock_ageing/stock_ageing.py
index e93957d..ecdd96a 100644
--- a/erpnext/stock/report/stock_ageing/stock_ageing.py
+++ b/erpnext/stock/report/stock_ageing/stock_ageing.py
@@ -5,6 +5,7 @@
 import frappe
 from frappe import _
 from frappe.utils import date_diff, flt
+from six import iteritems
 
 def execute(filters=None):
 
@@ -12,7 +13,7 @@
 	item_details = get_fifo_queue(filters)
 	to_date = filters["to_date"]
 	data = []
-	for item, item_dict in item_details.items():
+	for item, item_dict in iteritems(item_details):
 		fifo_queue = item_dict["fifo_queue"]
 		details = item_dict["details"]
 		if not fifo_queue: continue
diff --git a/erpnext/stock/report/stock_balance/stock_balance.py b/erpnext/stock/report/stock_balance/stock_balance.py
index 52e4730..69abeeb 100644
--- a/erpnext/stock/report/stock_balance/stock_balance.py
+++ b/erpnext/stock/report/stock_balance/stock_balance.py
@@ -171,7 +171,7 @@
 		
 		no_transactions = True
 		float_precision = cint(frappe.db.get_default("float_precision")) or 3
-		for key, val in qty_dict.items():
+		for key, val in iteritems(qty_dict):
 			val = flt(val, float_precision)
 			qty_dict[key] = val
 			if key != "val_rate" and val:
@@ -212,7 +212,7 @@
 				item_details.setdefault(item.name, item)
 
 	if filters.get('show_variant_attributes', 0) == 1:
-		variant_values = get_variant_values_for(item_details.keys())
+		variant_values = get_variant_values_for(list(item_details))
 		item_details = {k: v.update(variant_values.get(k, {})) for k, v in iteritems(item_details)}
 
 	return item_details
diff --git a/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py b/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py
index 78d1c44..e8fcd65 100644
--- a/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py
+++ b/erpnext/stock/report/supplier_wise_sales_analytics/supplier_wise_sales_analytics.py
@@ -5,6 +5,7 @@
 import frappe
 from frappe import _
 from frappe.utils import flt
+from six import iteritems
 
 def execute(filters=None):
 	columns = get_columns(filters)
@@ -13,7 +14,7 @@
 	material_transfer_vouchers = get_material_transfer_vouchers()
 	data = []
 
-	for item_code, suppliers in supplier_details.items():
+	for item_code, suppliers in iteritems(supplier_details):
 		consumed_qty = consumed_amount = delivered_qty = delivered_amount = 0.0
 		total_qty = total_amount = 0.0
 		if consumed_details.get(item_code):
@@ -85,7 +86,7 @@
 			item_supplier_map.setdefault(d.item_code, []).append(d.supplier)
 
 	if supplier:
-		for item_code, suppliers in item_supplier_map.items():
+		for item_code, suppliers in iteritems(item_supplier_map):
 			if supplier not in suppliers:
 				del item_supplier_map[item_code]
 
diff --git a/erpnext/stock/report/warehouse_wise_item_balance_age_and_value/warehouse_wise_item_balance_age_and_value.py b/erpnext/stock/report/warehouse_wise_item_balance_age_and_value/warehouse_wise_item_balance_age_and_value.py
index d73f83d..676cf54 100644
--- a/erpnext/stock/report/warehouse_wise_item_balance_age_and_value/warehouse_wise_item_balance_age_and_value.py
+++ b/erpnext/stock/report/warehouse_wise_item_balance_age_and_value/warehouse_wise_item_balance_age_and_value.py
@@ -10,7 +10,7 @@
 from frappe.utils import flt, cint, getdate
 from erpnext.stock.report.stock_balance.stock_balance import get_item_details, get_item_reorder_details, get_item_warehouse_map
 from erpnext.stock.report.stock_ageing.stock_ageing import get_fifo_queue, get_average_age
-
+from six import iteritems
 
 def execute(filters=None):
 	if not filters: filters = {}
@@ -41,7 +41,7 @@
 
 
 	# sum bal_qty by item
-	for (item, item_group), wh_balance in item_balance.items():
+	for (item, item_group), wh_balance in iteritems(item_balance):
 		total_stock_value = sum(item_value[(item, item_group)])
 		row = [item, item_group, total_stock_value]
 
diff --git a/erpnext/support/report/support_hour_distribution/support_hour_distribution.py b/erpnext/support/report/support_hour_distribution/support_hour_distribution.py
index 905ea6a..08802b4 100644
--- a/erpnext/support/report/support_hour_distribution/support_hour_distribution.py
+++ b/erpnext/support/report/support_hour_distribution/support_hour_distribution.py
@@ -5,6 +5,7 @@
 import frappe
 from frappe import _
 from frappe.utils import add_to_date, getdate, get_datetime
+from six import iteritems
 
 time_slots = {
 	'12AM - 3AM': '00:00:00-03:00:00',
@@ -33,7 +34,7 @@
 	time_slot_wise_total_count = {}
 	while(start_date <= getdate(filters.to_date)):
 		hours_count = {'date': start_date}
-		for key, value in time_slots.items():
+		for key, value in iteritems(time_slots):
 			start_time, end_time = value.split('-')
 			start_time = get_datetime("{0} {1}".format(start_date.strftime("%Y-%m-%d"), start_time))
 			end_time = get_datetime("{0} {1}".format(start_date.strftime("%Y-%m-%d"), end_time))
diff --git a/erpnext/templates/pages/regional/india/update_gstin.py b/erpnext/templates/pages/regional/india/update_gstin.py
index 8dcd48e..5493e54 100644
--- a/erpnext/templates/pages/regional/india/update_gstin.py
+++ b/erpnext/templates/pages/regional/india/update_gstin.py
@@ -1,5 +1,6 @@
 import frappe
 from frappe import _
+from six import iteritems
 
 def get_context(context):
 	context.no_cache = 1
@@ -28,7 +29,7 @@
 
 def update_gstin(context):
 	dirty = False
-	for key, value in frappe.form_dict.items():
+	for key, value in iteritems(frappe.form_dict):
 		if key != 'party':
 			address_name = frappe.get_value('Address', key)
 			if address_name: