Merge branch 'hotfix'
diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index 2e7748d..b67f30f 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -5,7 +5,7 @@
 from erpnext.hooks import regional_overrides
 from frappe.utils import getdate
 
-__version__ = '11.1.11'
+__version__ = '11.1.12'
 
 def get_default_company(user=None):
 	'''Get default company for user'''
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 0dd716d..a9e8fbc 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -46,6 +46,7 @@
 		}]
 
 	def onload(self):
+		super(PurchaseInvoice, self).onload()
 		supplier_tds = frappe.db.get_value("Supplier", self.supplier, "tax_withholding_category")
 		self.set_onload("supplier_tds", supplier_tds)
 
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index b1a393b..1f104be 100755
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -587,4 +587,4 @@
 execute:frappe.delete_doc('DocType', 'Notification Control')
 erpnext.patches.v11_0.remove_barcodes_field_from_copy_fields_to_variants
 erpnext.patches.v10_0.item_barcode_childtable_migrate # 16-02-2019
-erpnext.patches.v11_0.make_italian_localization_fields
+erpnext.patches.v11_0.make_italian_localization_fields # 26-02-2019
diff --git a/erpnext/patches/v11_0/make_italian_localization_fields.py b/erpnext/patches/v11_0/make_italian_localization_fields.py
index fa77149..44a281f 100644
--- a/erpnext/patches/v11_0/make_italian_localization_fields.py
+++ b/erpnext/patches/v11_0/make_italian_localization_fields.py
@@ -22,7 +22,9 @@
 		condition += " when '{0}' then '{1}'".format(frappe.db.escape(state), frappe.db.escape(code))
 
 	if condition:
-		frappe.db.sql("""
-			UPDATE tabAddress set state_code = (case state {condition} end)
-			WHERE country in ('Italy', 'Italia', 'Italian Republic', 'Repubblica Italiana')
-		""".format(condition=condition))
+		condition = "state_code = (case state {0} end),".format(condition)
+
+	frappe.db.sql("""
+		UPDATE tabAddress set {condition} country_code = UPPER(ifnull((select code
+			from `tabCountry` where name = `tabAddress`.country), ''))
+	""".format(condition=condition))
diff --git a/erpnext/regional/italy/e-invoice.xml b/erpnext/regional/italy/e-invoice.xml
index 30ac1e0..c0ef4af 100644
--- a/erpnext/regional/italy/e-invoice.xml
+++ b/erpnext/regional/italy/e-invoice.xml
@@ -9,7 +9,7 @@
 {%- if address.state_code %}
 <Provincia>{{ address.state_code }}</Provincia>
 {%- endif %}
-<Nazione>{{ address.country_code|upper }}</Nazione>
+<Nazione>{{ address.country_code }}</Nazione>
 {%- endmacro %}
 
 {%- macro render_discount_or_margin(item) -%}
@@ -40,7 +40,7 @@
   <FatturaElettronicaHeader>
     <DatiTrasmissione>
       <IdTrasmittente>
-        <IdPaese>{{ doc.company_address_data.country_code|upper or "IT" }}</IdPaese>
+        <IdPaese>{{ doc.company_address_data.country_code }}</IdPaese>
         <IdCodice>{{ doc.company_fiscal_code or doc.company_tax_id | replace("IT","") }}</IdCodice>
       </IdTrasmittente>
       <ProgressivoInvio>{{ doc.progressive_number }}</ProgressivoInvio>
@@ -56,7 +56,7 @@
     <CedentePrestatore>
       <DatiAnagrafici>
         <IdFiscaleIVA>
-          <IdPaese>{{ doc.company_address_data.country_code|upper or "IT"}}</IdPaese>
+          <IdPaese>{{ doc.company_address_data.country_code }}</IdPaese>
           <IdCodice>{{ doc.company_tax_id | replace("IT","") }}</IdCodice>
         </IdFiscaleIVA>
         {%- if doc.company_fiscal_code %}
@@ -99,7 +99,7 @@
           <CodiceFiscale>{{ doc.customer_data.fiscal_code }}</CodiceFiscale>
           {%- else %}
           <IdFiscaleIVA>
-            <IdPaese>{{ doc.customer_address_data.country_code|upper or "IT" }}</IdPaese>
+            <IdPaese>{{ doc.customer_address_data.country_code }}</IdPaese>
             <IdCodice>{{ doc.tax_id | replace("IT","") }}</IdCodice>
           </IdFiscaleIVA>
           {%- endif %}
@@ -160,7 +160,7 @@
           <CodiceTipo>CODICE</CodiceTipo>
           <CodiceValore>{{ item.item_code }}</CodiceValore>
         </CodiceArticolo>
-        <Descrizione>{{ html2text(item.description) or item.item_name }}</Descrizione>
+        <Descrizione>{{ html2text(item.description or '') or item.item_name }}</Descrizione>
         <Quantita>{{ format_float(item.qty) }}</Quantita>
         <UnitaMisura>{{ item.stock_uom }}</UnitaMisura>
         <PrezzoUnitario>{{ format_float(item.price_list_rate or item.rate) }}</PrezzoUnitario>
diff --git a/erpnext/regional/italy/setup.py b/erpnext/regional/italy/setup.py
index a9de2d1..1bbc722 100644
--- a/erpnext/regional/italy/setup.py
+++ b/erpnext/regional/italy/setup.py
@@ -132,7 +132,7 @@
 		'Supplier Quotation Item': invoice_item_fields,
 		'Address': [
 			dict(fieldname='country_code', label='Country Code',
-				fieldtype='Data', insert_after='country', print_hide=1, read_only=1,
+				fieldtype='Data', insert_after='country', print_hide=1, read_only=0,
 				fetch_from="country.code"),
 			dict(fieldname='state_code', label='State Code',
 				fieldtype='Data', insert_after='state', print_hide=1)
diff --git a/erpnext/regional/italy/utils.py b/erpnext/regional/italy/utils.py
index 540cea3..edf66d7 100644
--- a/erpnext/regional/italy/utils.py
+++ b/erpnext/regional/italy/utils.py
@@ -189,7 +189,7 @@
 	if not doc.company_address:
 		frappe.throw(_("Please set an Address on the Company '%s'" % doc.company), title=_("E-Invoicing Information Missing"))
 	else:
-		validate_address(doc.company_address, "Company")
+		validate_address(doc.company_address)
 
 	company_fiscal_regime = frappe.get_cached_value("Company", doc.company, 'fiscal_regime')
 	if not company_fiscal_regime:
@@ -217,7 +217,7 @@
 	if not doc.customer_address:
 	 	frappe.throw(_("Please set the Customer Address"), title=_("E-Invoicing Information Missing"))
 	else:
-		validate_address(doc.customer_address, "Customer")
+		validate_address(doc.customer_address)
 
 	if not len(doc.taxes):
 		frappe.throw(_("Please set at least one row in the Taxes and Charges Table"), title=_("E-Invoicing Information Missing"))
@@ -285,13 +285,14 @@
 
 	return out
 
-def validate_address(address_name, address_context):
-	pincode, city = frappe.db.get_value("Address", address_name, ["pincode", "city"])
-	if not pincode:
-		frappe.throw(_("Please set pin code on %s Address" % address_context), title=_("E-Invoicing Information Missing"))
-	if not city:
-		frappe.throw(_("Please set city on %s Address" % address_context), title=_("E-Invoicing Information Missing"))
+def validate_address(address_name):
+	fields = ["pincode", "city", "country_code"]
+	data = frappe.get_cached_value("Address", address_name, fields, as_dict=1) or {}
 
+	for field in fields:
+		if not data.get(field):
+			frappe.throw(_("Please set {0} for address {1}".format(field.replace('-',''), address_name)),
+				title=_("E-Invoicing Information Missing"))
 
 def get_unamended_name(doc):
 	attributes = ["naming_series", "amended_from"]
@@ -312,6 +313,9 @@
 	return progressive_name, progressive_number
 
 def set_state_code(doc, method):
+	if doc.get('country_code'):
+		doc.country_code = doc.country_code.upper()
+
 	if not doc.get('state'):
 		return
 
diff --git a/erpnext/stock/doctype/item_price/test_item_price.py b/erpnext/stock/doctype/item_price/test_item_price.py
index 455dff4..3782f54 100644
--- a/erpnext/stock/doctype/item_price/test_item_price.py
+++ b/erpnext/stock/doctype/item_price/test_item_price.py
@@ -11,7 +11,7 @@
 
 class TestItemPrice(unittest.TestCase):
 	def setUp(self):
-		frappe.db.sql("delete from `tabItem Price`")		
+		frappe.db.sql("delete from `tabItem Price`")
 		make_test_records_for_doctype("Item Price", force=True)
 
 	def test_duplicate_item(self):
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index 74f3595..7f0e670 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -490,7 +490,7 @@
 	price_list_rate = get_item_price(item_price_args, item_code)
 	if price_list_rate:
 		desired_qty = args.get("qty")
-		if check_packing_list(price_list_rate[0][0], desired_qty, item_code):
+		if desired_qty and check_packing_list(price_list_rate[0][0], desired_qty, item_code):
 			item_price_data = price_list_rate
 	else:
 		for field in ["customer", "supplier", "min_qty"]:
@@ -521,12 +521,15 @@
 		:param qty: Derised Qt
 	"""
 
+	flag = True
 	item_price = frappe.get_doc("Item Price", price_list_rate_name)
-	if desired_qty and item_price.packing_unit:
+	if item_price.packing_unit:
 		packing_increment = desired_qty % item_price.packing_unit
 
-		if packing_increment == 0:
-			return True
+		if packing_increment != 0:
+			flag = False
+
+	return flag
 
 def validate_price_list(args):
 	if args.get("price_list"):