www.pudn.com > Tustena_CRM_OS_3.0.2_Stable.zip > exchangerate.cs
///TUSTENA PUBLIC LICENSE v1.0 ////// Portions Copyright (c) 2003-2005 Digita S.r.l. All Rights Reserved. /// /// Tustena CRM is a trademark of: /// Digita S.r.l. /// Viale Enrico Fermi 14/z /// 31011 Asolo (Italy) /// Tel. +39-0423-951251 /// Mail. info@digita.it /// /// This file contains Original Code and/or Modifications of Original Code /// as defined in and that are subject to the Tustena Public Source License /// Version 1.0 (the 'License'). You may not use this file except in /// compliance with the License. Please obtain a copy of the License at /// http://www.tustena.com/TPL/ and read it before using this // file. /// /// The Original Code and all software distributed under the License are /// distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER /// EXPRESS OR IMPLIED, AND DIGITA S.R.L. HEREBY DISCLAIMS ALL SUCH WARRANTIES, /// INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. /// Please see the License for the specific language governing rights and /// limitations under the License. /// /// YOU MAY NOT REMOVE OR ALTER THIS COPYRIGHT NOTICE! /// using System; using System.Data; using System.Net; using System.Xml; namespace Digita.Tustena { class ExchangeRate:G { public DataTable GetCurrent() { DataTable dt = null; if(Cache["ExchangeRate"] is DataTable) { dt = Cache["ExchangeRate"] as DataTable; if(dt.Rows.Count>0) { if(((DateTime)dt.Rows[0]["Date"]).ToShortDateString()==DateTime.Now.ToShortDateString()) return Cache["ExchangeRate"] as DataTable; } } dt = parseWebXML(); Cache["ExchangeRate"]=dt; return dt; } private string MoneyName(string shortName) { string returnValue = "NULL"; switch(shortName) { case "DKK": returnValue = "Danish Krone"; break; case "EUR": returnValue = "Euro"; break; case "USD": returnValue = "US Dollar" ; break; case "GBP": returnValue = "United Kingdom Pound"; break; case "SEK": returnValue = "Swedish Krona"; break; case "NOK": returnValue = "Norwegian Kroner"; break; case "CNY": returnValue = "Chinese Yuan Renminbi"; break; case "ISK": returnValue = "Islandske Kroner"; break; case "IDR": returnValue = "Indonesian Rupiah"; break; case "CHF": returnValue = "Schweiziske Franc"; break; case "CAD": returnValue = "Canadian Dollar"; break; case "JPY": returnValue = "Japanese Yen"; break; case "RUB": returnValue = "Russian Rouble"; break; case "HRK": returnValue = "Croatian Kuna"; break; case "MYR": returnValue = "Malaysian Ringgit"; break; case "PHP": returnValue = "Philippine Peso"; break; case "THB": returnValue = "Thai Baht"; break; case "AUD": returnValue = "Australske Dollars"; break; case "NZD": returnValue = "New Zealand. Dollar"; break; case "EEK": returnValue = "Estiske Kroon"; break; case "LVL": returnValue = "Lettiske Lats"; break; case "LTL": returnValue = "Litauiske Litas"; break; case "PLN": returnValue = "Polske Zloty"; break; case "CZK": returnValue = "Tjekkiske Koruna"; break; case "HUF": returnValue = "Ungarske Forint"; break; case "HKD": returnValue = "Hongkong Dollar"; break; case "SGD": returnValue = "Singapore Dollar"; break; case "SDR": returnValue = "Special Drawing Rights"; break; case "BGN": returnValue = "Bulgarske lev"; break; case "CYP": returnValue = "Cypriotiske pund"; break; case "MTL": returnValue = "Maltesiske lira"; break; case "ROL": returnValue = "Rumnske lei"; break; case "SIT": returnValue = "Slovenske tolar"; break; case "SKK": returnValue = "Slovakiske koruna"; break; case "TRY": returnValue = "Tyrkiske lira"; break; case "KRW": returnValue = "Sydkoreanske won"; break; case "ZAR": returnValue = "Sydafrikanske rand"; break; default: break; } return returnValue; } private DataTable parseWebXML() { string WebAddress = "http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml"; XmlTextReader xmlReader; DataTable dt = new DataTable(); DataColumn dc = new DataColumn("Date",typeof(DateTime)); dt.Columns.Add(dc); dc = new DataColumn("Code",typeof(String)); dt.Columns.Add(dc); dc = new DataColumn("Rate",typeof(Double)); dt.Columns.Add(dc); dc = new DataColumn("Name",typeof(String)); dt.Columns.Add(dc); try { xmlReader = new XmlTextReader(WebAddress); xmlReader.WhitespaceHandling = WhitespaceHandling.None; } catch( WebException ex) { throw new WebException("Comunicazione fallita\r\n"+ex.Message); } DateTime tim = new DateTime(0); try { while( xmlReader.Read() ) { if ((xmlReader.Name != null && xmlReader.Name.Length != 0)) { if (xmlReader.Name == "gesmes:name") { string author = xmlReader.ReadString(); } for (int i = 0 ; i < xmlReader.AttributeCount; i++) { if (xmlReader.Name == "Cube") { if (xmlReader.AttributeCount == 1) { xmlReader.MoveToAttribute("time"); tim = DateTime.Parse(xmlReader.Value); DataRow dr = null; dr = dt.NewRow(); dr["Date"]= tim; dr["Code"]= "EUR"; dr["Name"]= MoneyName("EUR"); dr["Rate"]= 1.0; dt.Rows.Add(dr); } if (xmlReader.AttributeCount == 2) { xmlReader.MoveToAttribute("currency"); string cur = xmlReader.Value; xmlReader.MoveToAttribute("rate"); decimal rat = decimal.Parse(xmlReader.Value.Replace(".",",")); DataRow dr = null; dr = dt.NewRow(); dr["Date"]= tim; dr["Code"]= cur; dr["Name"]= MoneyName(cur); dr["Rate"]= rat; dt.Rows.Add(dr); } } xmlReader.MoveToNextAttribute(); } } } } catch( WebException ex ) { throw new WebException("Comunicazione fallita\r\n"+ex.Message); } return dt; } } }