map Books.Purchase_Order(int var)
{
	//Getting authtoken and organisation id
	books_access = thisapp.Books.Get_Books_Access();
	conn_tok = books_access.get("connection");
	org_id = books_access.get("organisation_id");
	//-------------------------------------------------------------------------
	fetchpo = Purchase_Order[ID == input.var];
	fetchposf = Purchase_Order_Subform[Purchase_Order_ExisID == fetchpo];
	fetchven = Vendor[ID == fetchpo.Vendor_Name];
	//fetchshipp = Shipping_Mode[ID == fetchpo.Shipping_Mode];
	fetchwarehouse = Warehouse[ID == fetchpo.Deliver_To].Warehouse_Books_ID;
	//info fetchwarehouse;
	fettax = GST_Details[ID == fetchpo.Item_Details.Tax];
	fetch_del_schd = Delivery_Schedule[Purchase_Order_Exis_ID == input.var].maximum(Delivery_Date);
	fetch_payment_trms = Payment_Terms[ID == fetchpo.Payment_Terms];
	delivery_date = fetch_del_schd.toString("yyyy-MM-dd");
	//info "fetchpo.Zoho_Books_ID" + fetchpo.Zoho_Books_ID;
	if(fetchpo.Zoho_Books_ID == "" || fetchpo.Zoho_Books_ID == null)
	{
		//info "Insidee";
		pomap = Map();
		pomap.put("customer",fetchven.Vendor_Name);
		pomap.put("purchaseorder_number",fetchpo.Purchase_Order_No);
		pomap.put("vendor_id",fetchven.ZOHO_Books_ID);
		pomap.put("purchaseorder_number",fetchpo.Purchase_Order_No);
		po2 = fetchpo.Purchase_Order_Date.toString("yyyy-MM-dd");
		pomap.put("phone",fetchven.Mobile);
		pomap.put("email",fetchven.Email_ID);
		pomap.put("date",po2);
		pomap.put("cf_payment_terms",fetch_payment_trms.Stages);
		//info url_to_po;
		pomap.put("delivery_date",delivery_date);
		pomap.put("delivery_address",fetchpo.Shipping_Address);
		url_to_po = "https://creatorapp.zoho.in/carrierwheels/erp/#Page:PO_Template?ID=" + var;
		//new_url_to_po = "<a href='https://creatorapp.zoho.in/carrierwheels/erp/#Page:PO_Template?ID=" + var + "' target='_blank' title='Open PO'>Download PO from ERP</a>";
		custom_list = List();
		custom_map = Map();
		custom_map.put("api_name","cf_download_po_from_erp");
		custom_map.put("value",url_to_po);
		custom_list.add(custom_map);
		pomap.put("custom_fields",custom_list);
		//pomap.put("status", "Open");
		item_list = List();
		//info pomap;
		tx_val = 0;
		for each  rec in fetchpo.Item_Details
		{
			fetchitem = Materials[ID == rec.Part_Description];
			//info fetchitem;
			line_item_map = Map();
			//custom_list1 = List();
			//custom_map1 = Map();
			line_item_map.put("name",rec.Part_Description.Part_Description);
			line_item_map.put("item_id",fetchitem.Zoho_Books_ID);
			mfrPartNo = "";
			if(fetchitem.Mfr_Part_No != "")
			{
				mfrPartNo = "Manufacturer Part No: " + fetchitem.Mfr_Part_No;
			}
			myspecs = "";
			if(rec.Specification != null)
			{
				myspecs = "Specifications: " + rec.Specification + "\n";
			}
			myremarks = "";
			if(rec.Remarks != null)
			{
				myremarks = "Remarks: " + rec.Remarks + "\n";
			}
			line_item_map.put("description",myspecs + myremarks + mfrPartNo);
			//line_item_map.put("description",rec.Part_Description.Specification);
			line_item_map.put("quantity",rec.Ordered_Qty);
			line_item_map.put("rate",rec.Rate);
			line_item_map.put("warehouse_name",fetchwarehouse);
			line_item_map.put("tax_id",fettax.Zoho_Books_ID);
			line_item_map.put("tax_percentage",fettax.Total_Rate);
			// 			custom_map1.put("api_name","cf_posubformid");
			// 			custom_map1.put("value",rec.ID);
			// 			custom_list1.add(custom_map1);
			// 			line_item_map.put("custom_fields",custom_list1);
			item_list.add(line_item_map);
			tx_val = tx_val + ifnull(rec.Tax_Value,0.00);
		}
		//info item_list;
		for each  extra in Additional_Charges_Subform[Purchase_Order_Exis_ID == input.var]
		{
			line_item_map = Map();
			line_item_map.put("name",extra.Charge_Name.Zoho_Books_ID);
			line_item_map.put("rate",extra.Rate);
			line_item_map.put("quantity",1);
			line_item_map.put("item_total",extra.Total);
			line_item_map.put("tax_id",extra.Tax.Zoho_Books_ID);
			line_item_map.put("tax_percentage",fettax.Total_Rate);
			item_list.add(line_item_map);
		}
		pomap.put("tax_total",tx_val);
		pomap.put("line_items",item_list);
		post_url = zoho.books.createRecord("purchaseorders",org_id,pomap,conn_tok);
		//info "Url:" +  post_url;
		res_code = post_url.get("code").toLong();
		resp_Map = Map();
		log_type = "Failure";
		//info "rescode " + res_code;
		varconn = API_Connections[Module_Name == "Zoho Books"].Connection;
		if(res_code == 0)
		{
			log_type = "Success";
			books_id = post_url.toMap().get("purchaseorder").toMap().get("purchaseorder_id");
			fetchpo.Zoho_Books_ID=books_id;
			test_map = Map();
			mark_response = invokeurl
			[
				url :"https://www.zohoapis.in/books/v3/purchaseorders/" + books_id + "/status/open?organization_id=" + org_id + ""
				type :POST
				parameters:test_map
				connection:"books_con"
			];
			//old api is commented and new api is in above as per Zoho
			// 			mark_response = invokeurl
			// 			[
			// 				url :"https://www.zohoapis.in/books/v3/purchaseorders/" + books_id + "/status/open?organization_id=" + org_id + ""
			// 				type :POST
			// 				parameters:test_map
			// 				connection:"books_con"
			// 			];
			//info mark_response;
		}
		if(res_code == 0)
		{
			getinventory = zoho.inventory.getRecordsByID("purchaseorders",org_id,books_id);
			get_line_item = getinventory.toMap().get("purchaseorder").toMap().get("line_items");
			for each  lineitem in get_line_item
			{
				lineitemid = lineitem.getjson("line_item_id");
				itemid = lineitem.getjson("item_id");
				itemorder = lineitem.getjson("item_order");
				//array = {"custom_fields":{{"api_name":"cf_posubformid","value":cfposfid}}};
				fetchpo = Purchase_Order[Zoho_Books_ID == books_id];
				//fetchposf = Purchase_Order_Subform[Purchase_Order_ExisID == fetchpo.ID];
				getmat = Materials[Zoho_Books_ID == itemid];
				fetchposf = Purchase_Order_Subform[Purchase_Order_ExisID == fetchpo.ID && S_No == itemorder && Part_No == getmat.ID];
				fetchposf.zb_line_item_id=lineitemid;
				// 			for each  posfrec in fetchposf
				// 			{
				// 				if(posfrec.Part_No == getmat.ID)
				// 				{
				// 					posfrec.zb_line_item_id=lineitemid;
				// 				}
				// 			}
			}
		}
		//Insert into Log Form
		ins_log = insert into Log_Files
		[
			Added_User=zoho.loginuser
			Module_Name="Purchase Order"
			Form_Name="Purchase Order"
			Log_Details=post_url
			Log_Type=log_type
			Reference_NO=fetchpo.Purchase_Order_No
		];
		//sending error log message
		if(log_type == "Failure")
		{
			resp_Map.put("Resp","Failure");
			resp_Map.put("log_msg",post_url.get("message"));
		}
		//status to changed 
		// 	updtstatus = zoho.books.markStatus("purchaseorders",org_id,books_id,"Open",conn_tok);
		// 	info updtstatus;
		//When the log type is failure and rescode is code:57,message:You are not authorized to perform this operation" and try again call the function again after 5 minutes using the below function
		if(res_code == 57 && log_type == "Failure")
		{
			insert into Failure_Functions_re_schedule_form
			[
				Added_User=zoho.loginuser
				Module_name="Purchase Order"
				module_record_id=var
				Schedule_date_time=zoho.currenttime.addMinutes(5)
			]
			//send mail
			sendmail
			[
				from :"erp@carrierwheels.com"
				to :"parthasarathy.m@synprosoft.com"
				subject :"Purchase Order Not pushed to Books" + var
				message :"Purchase Order Not pushed to Books" + var
			]
		}
	}
	return resp_Map;
}