using System; using System.Data; using System.IO; using System.Text; using System.Xml.Serialization; using System.Xml; using CookComputing.XmlRpc; using System.Net; using System.Configuration; using System.Collections.Generic; using System.Web; using PrometeiaMessage.bancafideuram.nac.posizionecliente; public interface IPrometeia : IXmlRpcProxy { [XmlRpcMethod("XMLRPCManager.analizzaRichiesta")] string AnalizzaRichiesta(string messaggio); } /// /// Classe wrapper per memorizzare i codici delle varie asset /// internal class AssetClass { public string Descrizione; public string ISIN; public string MAF; public string Adeguatezza; public string MacroAsset; } public class Prometeia { private static string codiceAgente; private static string codiceRete; private static string codiceFiscale; private static string codiceApplicazione; private static int versioneDBSimpb; private static int chiaveclientepb; private static Dictionary> DettaglioAsset; /// /// To convert a Byte Array of Unicode values (UTF-8 encoded) to a complete String. /// /// Unicode Byte Array to be converted to String /// String converted from Unicode Byte Array private static String UTF8ByteArrayToString(Byte[] characters) { //UTF8Encoding encoding = new UTF8Encoding(); Encoding encoding = Encoding.GetEncoding(1252); //Encoding.GetEncoding(28591); String constructedString = encoding.GetString(characters); return (constructedString); } /// /// Converts the String to UTF8 Byte array and is used in De serialization /// /// /// private static Byte[] StringToUTF8ByteArray(String pXmlString) { Encoding encoding = Encoding.GetEncoding(1252); Byte[] byteArray = encoding.GetBytes(pXmlString); return byteArray; } private static messaggioType DeserializeMessage(String msgString) { XmlSerializer xs = new XmlSerializer(typeof(messaggioType)); MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(msgString)); XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.GetEncoding(1252)); return (messaggioType)xs.Deserialize(memoryStream); } /// /// Method to convert a custom Object to XML string /// /// Object that is to be serialized to XML /// XML string public static String SerializeMessage(messaggioType pObject) { String XmlizedString = null; MemoryStream memoryStream = new MemoryStream(); XmlSerializer xs = new XmlSerializer(typeof(messaggioType)); XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.GetEncoding(1252)); xs.Serialize(xmlTextWriter, pObject); memoryStream = (MemoryStream)xmlTextWriter.BaseStream; XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray()); return XmlizedString; } public static messaggioType CreaRichiesta(params object[] list) { messaggioType retMessageObj = null; try { messaggioType mt = new messaggioType(); DataTable dtOutput = new DataTable(); DettaglioAsset = Prometeia.initializeTabellaAsset(); switch (list[0].ToString()) { case "RICHIESTAVARPORTAFOGLIO": if (list[1].ToString() == "S21") mt = CreaRichiestaVaRPortafoglioSezione21((DataTable)list[2], (DataTable)list[3]); else if (list[1].ToString() == "S23") if (list.Length < 5) mt = CreaRichiestaVaRPortafoglioSezione23((DataTable)list[2], (DataTable)list[3]); else mt = CreaRichiestaVaRPortafoglioSezione23((DataTable)list[2], (DataTable)list[5]); else if (list[1].ToString() == "S56") if (list.Length < 5) mt = CreaRichiestaVaRPortafoglioSezione56((DataTable)list[2], (DataTable)list[3]); else mt = CreaRichiestaVaRPortafoglioSezione56_BisCC((DataTable)list[2], (DataTable)list[3], (DataTable)list[4]); else if (list[1].ToString() == "TESTPROMETEIA") mt = CreaRichiestaVaRPortafoglio((DataTable)list[2]); else if (list[1].ToString() == "PATRIMONIOCOMPLESSIVO") mt = CreaRichiestaPatrimonioComplessivo((DataTable)list[2], (DataTable)list[3], (DataTable)list[4], (DataTable)list[5]); else if (list[1].ToString() == "S19" || list[1].ToString() == "S19BIS") mt = CreaRichiestaVaRPortafoglioSezione19((DataTable)list[2]); else if (list[1].ToString() == "S48PERTIPOPRODOTTO") mt = CreaRichiestaVaRPortafoglioSezioneS48PerTipoProdotto((DataTable)list[2]); else if (list[1].ToString() == "S48PERINTERMEDIARIO") mt = CreaRichiestaVaRPortafoglioSezioneS48PerIntermediario((DataTable)list[2]); else if (list[1].ToString() == "S63") // La sezione 63 chiama comunque la sezione 21 mt = CreaRichiestaVaRPortafoglioSezione21((DataTable)list[2], (DataTable)list[3]); else if (list[1].ToString() == "S44") // LIST[2]: DTPROMETEIA, LIST[3]: CONTRATTO SINTESI mt = CreaRichiestaVaRPortafoglioSezioneS44((DataTable)list[2], (DataTable)list[3]); else if (list[1].ToString() == "S46") // LIST[2]: DTPROMETEIA, LIST[3]: CONTRATTO SINTESI mt = CreaRichiestaVaRPortafoglioSezioneS46((DataTable)list[2], (DataTable)list[3]); else if (list[1].ToString() == "S50") // LIST[2]: DTPROMETEIA, LIST[3]: CONTRATTO SINTESI mt = CreaRichiestaVaRPortafoglioSezioneS50((DataTable)list[2]); else if (list[1].ToString() == "S70") // LIST[2]: DTPROMETEIA, LIST[3]: CONTRATTO SINTESI mt = CreaRichiestaVaRPortafoglioSezione70((DataTable)list[2], (DataTable)list[3]); else if (list[1].ToString() == "S73") // LIST[2]: DTPROMETEIA, LIST[3]: CONTRATTO SINTESI mt = CreaRichiestaVaRPortafoglioSezione73((DataTable)list[2], (DataTable)list[3]); else if (list[1].ToString() == "S91") // LIST[2]: DTPROMETEIA, LIST[3]: CONTRATTO SINTESI mt = CreaRichiestaVaRPortafoglioSezioneS91((DataTable)list[2]); else if (list[1].ToString() == "S102") mt = CreaRichiestaVaRPortafoglioSezioneS102((DataTable)list[2]); else if (list[1].ToString() == "S120") mt = CreaRichiestaVaRPortafoglioSezioneS120((DataTable)list[2]); break; case "RICHIESTAPORTAFOGLIOMODELLO": mt = CreaRichiestaPortafoglioModello((DataTable)list[1], (DataTable)list[2], (DataRow)list[3]); break; case "RICHIESTAVARMERCATI": mt = CreaRichiestaVaRMercatiFinanziari(); break; case "RICHIESTAVARMACROASSET": mt = CreaRichiestaVaRMacroAsset(); break; case "RICHIESTAVARPORTAFOGLIOASSET": mt = CreaRichiestaVaRPortafoglioAsset((DataTable)list[1], (DataTable)list[2]); break; default: break; } #region Chiamata Prometeia string ms = SerializeMessage(mt); IPrometeia proxy = XmlRpcProxyGen.Create(); proxy.Url = ConfigurationManager.AppSettings["XMLRPCURL"].ToString(); //da laboratorio: string _proxy; if (ConfigurationManager.AppSettings["PROXYXMLRPC"] != null) _proxy = ConfigurationManager.AppSettings["PROXYXMLRPC"].ToString(); else _proxy = ""; if (_proxy.Trim() != "") { //proxy.Proxy = new WebProxy(_proxy); //non disponibile per problemi sistemistici // Questa impostazione è utilizzata solo internamente ad HP. // E' un rimedio al fatto che http://paa.prometeia.it non è più raggiungibile per problemi sistemistici. // Non essendo piu disponibile utilizzo http://134.44.28.136:9882 aggiungendo delle eccezioni ai settaggi del proxy da utilizzare. // Se dovesse di nuovo essere disponibile è suff scommetare "//non disponibile per problemi sistemistici" ed eliminare il codice sottostante List bypasslist = new List(); bypasslist.Add(@"localhost"); bypasslist.Add(@"127.0.0.1"); bypasslist.Add(@"134.44.28.136"); WebProxy proxyLocale = new WebProxy(_proxy); proxyLocale.BypassList = bypasslist.ToArray(); proxy.Proxy = proxyLocale; } //Encoding iso = Encoding.GetEncoding(28591); Encoding iso = Encoding.GetEncoding(1252); proxy.XmlEncoding = iso; string retMessage = proxy.AnalizzaRichiesta(ms.TrimStart().TrimEnd()); retMessageObj = DeserializeMessage(retMessage); SetVarpConCoperturaZero(retMessageObj); #endregion } catch (Exception except) { throw new Exception(except.Message + ". Source: " + except.Source, except.InnerException); } return retMessageObj; } private static messaggioType CreaRichiestaVaRPortafoglio(DataTable dtRichiesta) { #region Variabili costruzione oggetto MessageType DataTable dtDistinctNeedArea; messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; ptfType ptf; saldoType saldo; ProdottiKeyType pkt; #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; // DataView ordinato per NEEDAREA string[] paramColumn = new string[1]; paramColumn[0] = ConfigurationManager.AppSettings["DISTINCTCOLUMN"].ToString(); dtDistinctNeedArea = dtRichiesta.DefaultView.ToTable(true, paramColumn); #endregion #region HeaderMessage hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType #region RichiestaVarPortafoglio // PTF - CT #region PTF //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; string rwdistinctNeedArea = ""; string rwNeedArea = ""; string rwAsulString = ""; string codiceAgente = ""; string codiceRete = ""; string codiceFiscale = ""; string codiceApplicazione = ""; int versioneDBSimpb = 0; string tipoProdottoAsul = ConfigurationManager.AppSettings["TIPOPRODOTTOASUL"].ToString().Trim().ToUpper(); string tipoProdottoAsu2 = ConfigurationManager.AppSettings["TIPOPRODOTTOASU2"].ToString().Trim().ToUpper(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAGENTE")) codiceAgente = dtRichiesta.ExtendedProperties["CODICEAGENTE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICERETE")) codiceRete = dtRichiesta.ExtendedProperties["CODICERETE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEFISCALE")) codiceFiscale = dtRichiesta.ExtendedProperties["CODICEFISCALE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAPPLICAZIONE")) codiceApplicazione = dtRichiesta.ExtendedProperties["CODICEAPPLICAZIONE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("VERSIONEDATABASESIMPB")) versioneDBSimpb = int.Parse(dtRichiesta.ExtendedProperties["VERSIONEDATABASESIMPB"].ToString()); if (dtRichiesta.ExtendedProperties.Contains("CHIAVECLIENTEPB")) chiaveclientepb = int.Parse(dtRichiesta.ExtendedProperties["CHIAVECLIENTEPB"].ToString()); #region CREAZIONE OGGETTO MESSAGE foreach (DataRow rwdistinct in dtDistinctNeedArea.Rows) { ptf = new ptfType(); ptf.descrizione = rwdistinct["NEEDAREA"].ToString(); foreach (DataRow rw in dtRichiesta.Rows) { rwdistinctNeedArea = rwdistinct["NEEDAREA"].ToString().Trim().ToUpper(); rwNeedArea = rw["NEEDAREA"].ToString().Trim().ToUpper(); rwAsulString = rw["TIPOPRODOTTO"].ToString().Trim().ToUpper(); if (rwdistinctNeedArea.Equals(rwNeedArea)) { if (tipoProdottoAsul.Equals(rwAsulString))//K Skandia { #region SALDO ASUL #region Chiamata la WSGLOBALPOSITION PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente _chiaveCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente(); _chiaveCliente.codiceAgente = codiceAgente; _chiaveCliente.codicefiscale = codiceFiscale; _chiaveCliente.codiceRete = codiceRete; _chiaveCliente.potenzialeClienteNAC = true; PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient _infoCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient(); _infoCliente.codiceApplicazione = codiceApplicazione; _infoCliente.codiceRete = codiceRete; _infoCliente.versioneDatabaseSIMPB = versioneDBSimpb; string codiceContratto = rw["CONTRATTO"].ToString().Trim(); GlobalPositionWS gpWS = new GlobalPositionWS(); DataTable dtAsul = gpWS.GetContrattoUnitLinkedSaldo(_chiaveCliente, codiceContratto, _infoCliente, chiaveclientepb); #endregion foreach (DataRow rwAsul in dtAsul.Rows) { saldo = new saldoType(); if (rwAsul["CONTROVALORE"] != DBNull.Value) saldo.valore = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); if (rwAsul["CONTROVALORE"] != DBNull.Value) saldo.valoreCtv = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //CODICEADEGUATEZZA if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceAdeguatezza = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceSottoprodotto = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceSottoprodotto = ""; //if (rwAsul["ISINFITTIZIO"] != DBNull.Value) // pkt.codiceInterno = rwAsul["ISINFITTIZIO"].ToString(); //if (rw["CODICEISIN"] != DBNull.Value) // pkt.codiceIsin = rw["CODICEISIN"].ToString(); //if (rw["CODICEMAF"] != DBNull.Value) // pkt.codiceMaf = rw["CODICEMAF"].ToString(); saldo.chiave = pkt; ptf.AddSaldo(saldo); } #endregion } else { #region SALDO NON ASUL saldo = new saldoType(); if (rw["VALORE"] != DBNull.Value) saldo.valore = Convert.ToDouble(rw["VALORE"].ToString()); if (rw["CONTROVALORE"] != DBNull.Value) saldo.valoreCtv = Convert.ToDouble(rw["CONTROVALORE"].ToString()); saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //K Skandia if (rwAsulString.Equals(tipoProdottoAsu2)) { //CODICEADEGUATEZZA if (rw["ISIN_ASU2"] != DBNull.Value) pkt.codiceAdeguatezza = rw["ISIN_ASU2"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rw["ISIN_ASU2"] != DBNull.Value) pkt.codiceSottoprodotto = rw["ISIN_ASU2"].ToString(); else pkt.codiceSottoprodotto = ""; } else { if (rw["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = rw["CODICEADEGUATEZZA"].ToString(); else pkt.codiceAdeguatezza = ""; if (rw["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = rw["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; if (rw["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = rw["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (rw["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = rw["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; } saldo.chiave = pkt; ptf.AddSaldo(saldo); #endregion } } } ptf.AddChildSaldoToAggregate(); richiestaVarPortafoglio.Add(ptf); } richiestaVarPortafoglio.AddChildToAggregate(); #endregion #endregion #endregion #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Metodo: CreaRichiestaVaRPortafoglio", ex.InnerException); } return mt; } private static messaggioType CreaRichiestaVaRPortafoglioSezione56(DataTable dtRichiesta, DataTable dtContrattiSintesiPerCliente) { #region Variabili costruzione oggetto MessageType DataTable dtDistinctNeedArea; messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; ptfType ptf; saldoType saldo; ProdottiKeyType pkt; Aggregato aggregato; #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; // DataView ordinato per NEEDAREA string[] paramColumn = new string[1]; paramColumn[0] = ConfigurationManager.AppSettings["DISTINCTCOLUMN"].ToString(); dtDistinctNeedArea = dtRichiesta.DefaultView.ToTable(true, paramColumn); #endregion #region HeaderMessage hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType #region RichiestaVarPortafoglio // PTF - CT #region PTF //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; string rwdistinctNeedArea = ""; string rwNeedArea = ""; string rwAsulString = ""; string codiceAgente = ""; string codiceRete = ""; string codiceFiscale = ""; string codiceApplicazione = ""; int versioneDBSimpb = 0; string tipoProdottoAsul = ConfigurationManager.AppSettings["TIPOPRODOTTOASUL"].ToString().Trim().ToUpper(); string tipoProdottoAsu2 = ConfigurationManager.AppSettings["TIPOPRODOTTOASU2"].ToString().Trim().ToUpper(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAGENTE")) codiceAgente = dtRichiesta.ExtendedProperties["CODICEAGENTE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICERETE")) codiceRete = dtRichiesta.ExtendedProperties["CODICERETE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEFISCALE")) codiceFiscale = dtRichiesta.ExtendedProperties["CODICEFISCALE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAPPLICAZIONE")) codiceApplicazione = dtRichiesta.ExtendedProperties["CODICEAPPLICAZIONE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("VERSIONEDATABASESIMPB")) versioneDBSimpb = int.Parse(dtRichiesta.ExtendedProperties["VERSIONEDATABASESIMPB"].ToString()); if (dtRichiesta.ExtendedProperties.Contains("CHIAVECLIENTEPB")) chiaveclientepb = int.Parse(dtRichiesta.ExtendedProperties["CHIAVECLIENTEPB"].ToString()); ptfType ptfTotale = new ptfType(); ptfTotale.descrizione = "TOTALEPATRIMONIOBF"; AggiungiColonnaTipoProdottoContrattoSintesi(ref dtRichiesta, dtContrattiSintesiPerCliente); #region CREAZIONE OGGETTO MESSAGE foreach (DataRow rwdistinct in dtDistinctNeedArea.Rows) { // Creo un aggregato aggregato = new Aggregato(); ptf = new ptfType(); ptf.descrizione = rwdistinct["NEEDAREA"].ToString(); foreach (DataRow rw in dtRichiesta.Rows) { rwdistinctNeedArea = rwdistinct["NEEDAREA"].ToString().Trim().ToUpper(); rwNeedArea = rw["NEEDAREA"].ToString().Trim().ToUpper(); #region Recupero il valore del contratto dai dati restituiti dal ws GlobalPosition metodo GetContrattoSintesiPerCliente //DataRow[] rwContrattoSintesiPerCliente = FindContrattoSintesiPerCliente(rw, dtContrattiSintesiPerCliente); // Definisce i prodotti ASUL //if (rwContrattoSintesiPerCliente.Length > 0) // rwAsulString = rwContrattoSintesiPerCliente[0]["TIPOPRODOTTO"].ToString().Trim().ToUpper(); //else // rwAsulString = rw["TIPOPRODOTTO"].ToString(); if (rw["TIPOPRODOTTOSINTESI"] == DBNull.Value || (string)rw["TIPOPRODOTTOSINTESI"] == "") rwAsulString = rw["TIPOPRODOTTO"].ToString(); else rwAsulString = rw["TIPOPRODOTTOSINTESI"].ToString(); #endregion if (rwdistinctNeedArea.Equals(rwNeedArea)) { if (tipoProdottoAsul.Equals(rwAsulString)) //K Skandia { #region SALDO ASUL #region Chiamata la WSGLOBALPOSITION PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente _chiaveCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente(); _chiaveCliente.codiceAgente = codiceAgente; _chiaveCliente.codicefiscale = codiceFiscale; _chiaveCliente.codiceRete = codiceRete; _chiaveCliente.potenzialeClienteNAC = true; PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient _infoCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient(); _infoCliente.codiceApplicazione = codiceApplicazione; _infoCliente.codiceRete = codiceRete; _infoCliente.versioneDatabaseSIMPB = versioneDBSimpb; string codiceContratto = rw["CONTRATTO"].ToString().Trim(); GlobalPositionWS gpWS = new GlobalPositionWS(); DataTable dtAsul = gpWS.GetContrattoUnitLinkedSaldo(_chiaveCliente, codiceContratto, _infoCliente, chiaveclientepb); #endregion foreach (DataRow rwAsul in dtAsul.Rows) { saldo = new saldoType(); // One week //if (rwContrattoSintesiPerCliente[0]["VALORE"] != DBNull.Value) //if (rw["VALORESINTESI"] == DBNull.Value || (double)rw["VALORESINTESI"] == 0) // saldo.valore = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); //else // saldo.valore = Convert.ToDouble(rw["VALORESINTESI"].ToString()); if (rwAsul["CONTROVALORE"] != DBNull.Value) { saldo.valore = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); saldo.valoreCtv = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); } saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //CODICEADEGUATEZZA if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceAdeguatezza = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceSottoprodotto = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceSottoprodotto = ""; //if (rwAsul["ISINFITTIZIO"] != DBNull.Value) // pkt.codiceInterno = rwAsul["ISINFITTIZIO"].ToString(); //if (rw["CODICEISIN"] != DBNull.Value) // pkt.codiceIsin = rw["CODICEISIN"].ToString(); //if (rw["CODICEMAF"] != DBNull.Value) // pkt.codiceMaf = rw["CODICEMAF"].ToString(); saldo.chiave = pkt; ptf.AddSaldo(saldo); } #endregion } else { #region SALDO NON ASUL saldo = new saldoType(); // One week if (rw["VALORESINTESI"] == DBNull.Value || (double)rw["VALORESINTESI"] == 0) saldo.valore = Convert.ToDouble(rw["CONTROVALORE"].ToString()); else saldo.valore = Convert.ToDouble(rw["VALORESINTESI"].ToString()); if (rw["CONTROVALORE"] != DBNull.Value) saldo.valoreCtv = Convert.ToDouble(rw["CONTROVALORE"].ToString()); saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //K Skandia if (rwAsulString.Equals(tipoProdottoAsu2)) { //CODICEADEGUATEZZA if (rw["ISIN_ASU2"] != DBNull.Value) pkt.codiceAdeguatezza = rw["ISIN_ASU2"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rw["ISIN_ASU2"] != DBNull.Value) pkt.codiceSottoprodotto = rw["ISIN_ASU2"].ToString(); else pkt.codiceSottoprodotto = ""; } else { if (rw["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = rw["CODICEADEGUATEZZA"].ToString(); else pkt.codiceAdeguatezza = ""; if (rw["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = rw["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; if (rw["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = rw["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (rw["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = rw["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; } saldo.chiave = pkt; ptf.AddSaldo(saldo); #endregion } } } ptf.AddChildSaldoToAggregate(); aggregato.Add(ptf); aggregato.AddCollectionAggregateToAggregate(); ptf.AddChildToAggregate(); ptfTotale.AddAggregato(ptf); ptfTotale.AddChildToAggregate(); } richiestaVarPortafoglio.Add(ptfTotale); richiestaVarPortafoglio.AddChildToAggregate(); #endregion #endregion #endregion #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Classe: Prometeia; Metodo: CreaRichiestaVaRPortafoglioSezione56", ex.InnerException); } return mt; } private static messaggioType CreaRichiestaVaRPortafoglioSezione56_BisCC(DataTable dtRichiesta, DataTable dtContrattiSintesiPerCliente, DataTable dtCC) { #region Variabili costruzione oggetto MessageType DataTable dtDistinctNeedArea; messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; ptfType ptf = new ptfType(); saldoType saldo = new saldoType(); ProdottiKeyType pkt = new ProdottiKeyType(); Aggregato aggregato = new Aggregato(); ptfType ptfTotaleBF = new ptfType(); // Totale BF = Totale Risorse Finanziarie + ContoCorrente al Netto Franchigia ptfType ptfTotaleRisorseFinanziarie = new ptfType(); // Totale Risorse Finanziarie ptfType ptfContoCorrenteBF = new ptfType(); // ContoCorrente presso BF al Netto Franchigia saldoType saldoCC = new saldoType(); // Saldo CC al Netto Franchigia ProdottiKeyType pktCC = new ProdottiKeyType(); #endregion try { #region Costruzione struttura base oggetto di tipo MessageType ptfTotaleBF.descrizione = "TOTALEPATRIMONIOBF"; ptfTotaleRisorseFinanziarie.descrizione = "TOTALERISORSEFINANZARIE"; ptfContoCorrenteBF.descrizione = "CONTOCORRENTEBF"; // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; #endregion #region HeaderMessage hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType #region RichiestaVarPortafoglio // PTF - CT #region PTF //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; string rwdistinctNeedArea = ""; string rwNeedArea = ""; string rwAsulString = ""; string codiceAgente = ""; string codiceRete = ""; string codiceFiscale = ""; string codiceApplicazione = ""; int versioneDBSimpb = 0; //string expression; //expression = "flagCasa = 1"; //DataRow[] foundRows; //foundRows = dtCC.Select(expression); //if (foundRows.Length > 0) //{ // #region SALDO CC // saldoCC.nome = "CCNettoFranchigia"; // pktCC.codiceAdeguatezza = "EUR"; // pktCC.codiceInterno = "EUR"; // pktCC.codiceIsin = "EUR"; // pktCC.codiceMaf = "EUR"; // pktCC.codiceSottoprodotto = "EUR"; // saldoCC.chiave = pktCC; // if (foundRows[0][2] != DBNull.Value) // { // saldoCC.valore = Convert.ToDouble(foundRows[0][2].ToString()); // saldoCC.valoreCtv = Convert.ToDouble(foundRows[0][2].ToString()); // saldoCC.valoreCtvSpecified = true; // } // ptfContoCorrenteBF.AddSaldo(saldoCC); // ptfContoCorrenteBF.AddChildSaldoToAggregate(); // ptfTotaleBF.AddAggregato(ptfContoCorrenteBF); // #endregion //} string tipoProdottoAsul = ConfigurationManager.AppSettings["TIPOPRODOTTOASUL"].ToString().Trim().ToUpper(); string tipoProdottoAsu2 = ConfigurationManager.AppSettings["TIPOPRODOTTOASU2"].ToString().Trim().ToUpper(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAGENTE")) codiceAgente = dtRichiesta.ExtendedProperties["CODICEAGENTE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICERETE")) codiceRete = dtRichiesta.ExtendedProperties["CODICERETE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEFISCALE")) codiceFiscale = dtRichiesta.ExtendedProperties["CODICEFISCALE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAPPLICAZIONE")) codiceApplicazione = dtRichiesta.ExtendedProperties["CODICEAPPLICAZIONE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("VERSIONEDATABASESIMPB")) versioneDBSimpb = int.Parse(dtRichiesta.ExtendedProperties["VERSIONEDATABASESIMPB"].ToString()); if (dtRichiesta.ExtendedProperties.Contains("CHIAVECLIENTEPB")) chiaveclientepb = int.Parse(dtRichiesta.ExtendedProperties["CHIAVECLIENTEPB"].ToString()); AggiungiColonnaTipoProdottoContrattoSintesi(ref dtRichiesta, dtContrattiSintesiPerCliente); #region CREAZIONE OGGETTO MESSAGE #region Aggiungo il dettaglio dei CC positivi all'area Liquidità if (dtCC.Rows.Count > 0) { if (dtCC.Select("flagcasa=1").Length > 0) { decimal valoreCC = Convert.ToDecimal(dtCC.Select("flagcasa=1")[0][2]); if (dtRichiesta.Select("needarea='Liq' and tipoprodotto='CC'").Length == 0) dtRichiesta.Rows.Add("Liq", "CC", "", "EUR", "EUR", "EUR", "EUR", valoreCC, valoreCC, "EUR"); } } #endregion #region Elimino linea self positiva (quella negativa è esclusa a livello stored) DataRow[] drSelfPositiva = dtRichiesta.Select(" CODICEISIN = 'EURO00000009'"); // Cod Isin che identifica la linea self positiva foreach (DataRow row in drSelfPositiva) { dtRichiesta.Rows.Remove(row); } #endregion // DataView ordinato per NEEDAREA string[] paramColumn = new string[1]; paramColumn[0] = ConfigurationManager.AppSettings["DISTINCTCOLUMN"].ToString(); dtDistinctNeedArea = dtRichiesta.DefaultView.ToTable(true, paramColumn); foreach (DataRow rwdistinct in dtDistinctNeedArea.Rows) { // Creo un aggregato aggregato = new Aggregato(); ptf = new ptfType(); ptf.descrizione = rwdistinct["NEEDAREA"].ToString(); foreach (DataRow rw in dtRichiesta.Rows) { rwdistinctNeedArea = rwdistinct["NEEDAREA"].ToString().Trim().ToUpper(); rwNeedArea = rw["NEEDAREA"].ToString().Trim().ToUpper(); #region Recupero il valore del contratto dai dati restituiti dal ws GlobalPosition metodo GetContrattoSintesiPerCliente //DataRow[] rwContrattoSintesiPerCliente = FindContrattoSintesiPerCliente(rw, dtContrattiSintesiPerCliente); // Definisce i prodotti ASUL //if (rwContrattoSintesiPerCliente.Length > 0) // rwAsulString = rwContrattoSintesiPerCliente[0]["TIPOPRODOTTO"].ToString().Trim().ToUpper(); //else // rwAsulString = rw["TIPOPRODOTTO"].ToString(); if (rw["TIPOPRODOTTOSINTESI"] == DBNull.Value || (string)rw["TIPOPRODOTTOSINTESI"] == "") rwAsulString = rw["TIPOPRODOTTO"].ToString(); else rwAsulString = rw["TIPOPRODOTTOSINTESI"].ToString(); #endregion //K Skandia if (rwdistinctNeedArea.Equals(rwNeedArea)) { if (tipoProdottoAsul.Equals(rwAsulString)) { #region SALDO ASUL #region Chiamata la WSGLOBALPOSITION PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente _chiaveCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente(); _chiaveCliente.codiceAgente = codiceAgente; _chiaveCliente.codicefiscale = codiceFiscale; _chiaveCliente.codiceRete = codiceRete; _chiaveCliente.potenzialeClienteNAC = true; PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient _infoCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient(); _infoCliente.codiceApplicazione = codiceApplicazione; _infoCliente.codiceRete = codiceRete; _infoCliente.versioneDatabaseSIMPB = versioneDBSimpb; string codiceContratto = rw["CONTRATTO"].ToString().Trim(); GlobalPositionWS gpWS = new GlobalPositionWS(); DataTable dtAsul = gpWS.GetContrattoUnitLinkedSaldo(_chiaveCliente, codiceContratto, _infoCliente, chiaveclientepb); #endregion foreach (DataRow rwAsul in dtAsul.Rows) { saldo = new saldoType(); // One week //if (rwContrattoSintesiPerCliente[0]["VALORE"] != DBNull.Value) //if (rw["VALORESINTESI"] == DBNull.Value || (double)rw["VALORESINTESI"] == 0) // saldo.valore = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); //else // saldo.valore = Convert.ToDouble(rw["VALORESINTESI"].ToString()); if (rwAsul["CONTROVALORE"] != DBNull.Value) { saldo.valore = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); saldo.valoreCtv = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); } saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //CODICEADEGUATEZZA if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceAdeguatezza = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceSottoprodotto = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceSottoprodotto = ""; //if (rwAsul["ISINFITTIZIO"] != DBNull.Value) // pkt.codiceInterno = rwAsul["ISINFITTIZIO"].ToString(); //if (rw["CODICEISIN"] != DBNull.Value) // pkt.codiceIsin = rw["CODICEISIN"].ToString(); //if (rw["CODICEMAF"] != DBNull.Value) // pkt.codiceMaf = rw["CODICEMAF"].ToString(); saldo.chiave = pkt; ptf.AddSaldo(saldo); } #endregion } else { #region SALDO NON ASUL saldo = new saldoType(); // One week if (rw["VALORESINTESI"] == DBNull.Value || (double)rw["VALORESINTESI"] == 0) saldo.valore = Convert.ToDouble(rw["CONTROVALORE"].ToString()); else saldo.valore = Convert.ToDouble(rw["VALORESINTESI"].ToString()); if (rw["CONTROVALORE"] != DBNull.Value) saldo.valoreCtv = Convert.ToDouble(rw["CONTROVALORE"].ToString()); saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //K Skandia if (rwAsulString.Equals(tipoProdottoAsu2)) { //CODICEADEGUATEZZA if (rw["ISIN_ASU2"] != DBNull.Value) pkt.codiceAdeguatezza = rw["ISIN_ASU2"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rw["ISIN_ASU2"] != DBNull.Value) pkt.codiceSottoprodotto = rw["ISIN_ASU2"].ToString(); else pkt.codiceSottoprodotto = ""; } else { if (rw["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = rw["CODICEADEGUATEZZA"].ToString(); else pkt.codiceAdeguatezza = ""; if (rw["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = rw["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; if (rw["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = rw["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (rw["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = rw["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; } saldo.chiave = pkt; ptf.AddSaldo(saldo); #endregion } } } ptf.AddChildSaldoToAggregate(); aggregato.Add(ptf); aggregato.AddCollectionAggregateToAggregate(); ptf.AddChildToAggregate(); ptfTotaleRisorseFinanziarie.AddAggregato(ptf); ptfTotaleRisorseFinanziarie.AddChildToAggregate(); } ptfTotaleBF.AddChildSaldoToAggregate(); ptfTotaleBF.AddAggregato(ptfTotaleRisorseFinanziarie); ptfTotaleBF.AddChildToAggregate(); richiestaVarPortafoglio.Add(ptfTotaleBF); richiestaVarPortafoglio.AddChildToAggregate(); #endregion #endregion #endregion #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Classe: Prometeia; Metodo: CreaRichiestaVaRPortafoglioSezione56_BisCC", ex.InnerException); } return mt; } private static messaggioType CreaRichiestaVaRPortafoglioSezione21(DataTable dtRichiesta, DataTable dtContrattiSintesiPerCliente) { #region Variabili costruzione oggetto MessageType DataTable dtDistinctNeedArea; DataTable dtDistinctNomeProgetto; messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; ptfType ptf = null; ptfType ptfNonAsul = null; ptfType ptfAsul = null; saldoType saldo; ProdottiKeyType pkt; Aggregato aggregatoAsul = null; Aggregato aggregato; Aggregato aggregatoNonAsul; Aggregato aggregatoInv; #endregion #region Filtro sui CC inferiori alla franchigia DataView dtvw = new DataView(dtRichiesta); dtvw.RowFilter = " not (Tipoprodotto = 'CC' and controvalore < 10000) "; dtRichiesta = dtvw.ToTable(); #endregion #region Elimino linea self positiva (quella negativa è esclusa a livello stored) DataRow[] drSelfPositiva = dtRichiesta.Select(" CODICEISIN = 'EURO00000009'"); // Cod Isin che identifica la linea self positiva foreach (DataRow row in drSelfPositiva) { dtRichiesta.Rows.Remove(row); } #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; // DataView ordinato per NEEDAREA string[] paramColumn = new string[1]; paramColumn[0] = ConfigurationManager.AppSettings["DISTINCTCOLUMN"].ToString(); dtDistinctNeedArea = dtRichiesta.DefaultView.ToTable(true, paramColumn); #endregion #region HeaderMessage hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType #region RichiestaVarPortafoglio // PTF - CT #region PTF //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; string rwAsulString = ""; codiceAgente = ""; codiceRete = ""; codiceFiscale = ""; codiceApplicazione = ""; versioneDBSimpb = 0; string tipoProdottoAsul = ConfigurationManager.AppSettings["TIPOPRODOTTOASUL"].ToString().Trim().ToUpper(); string tipoProdottoAsu2 = ConfigurationManager.AppSettings["TIPOPRODOTTOASU2"].ToString().Trim().ToUpper(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAGENTE")) codiceAgente = dtRichiesta.ExtendedProperties["CODICEAGENTE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICERETE")) codiceRete = dtRichiesta.ExtendedProperties["CODICERETE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEFISCALE")) codiceFiscale = dtRichiesta.ExtendedProperties["CODICEFISCALE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAPPLICAZIONE")) codiceApplicazione = dtRichiesta.ExtendedProperties["CODICEAPPLICAZIONE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("VERSIONEDATABASESIMPB")) versioneDBSimpb = int.Parse(dtRichiesta.ExtendedProperties["VERSIONEDATABASESIMPB"].ToString()); if (dtRichiesta.ExtendedProperties.Contains("CHIAVECLIENTEPB")) chiaveclientepb = int.Parse(dtRichiesta.ExtendedProperties["CHIAVECLIENTEPB"].ToString()); String needAreaInv = ConfigurationManager.AppSettings["NEEDAREAINV"].ToString(); // Eleboro il datatable richiesta AggiungiColonnaTipoProdottoContrattoSintesi(ref dtRichiesta, dtContrattiSintesiPerCliente); List ListDataView = MakeDataSetSezione21(dtDistinctNeedArea, dtRichiesta); ptfType ptfTotale = new ptfType(); ptfTotale.descrizione = "TOTALE"; ptfType ptfInvestimento; #region CREAZIONE OGGETTO MESSAGE foreach (DataViewSezione21 dvNeedAree in ListDataView) { // Creo un aggregatoAsul aggregato = new Aggregato(); ptf = new ptfType(); ptf.descrizione = dvNeedAree.Descrizione; if (dvNeedAree.Descrizione.ToUpper().Trim() == needAreaInv.ToUpper().Trim()) { // INVESTIMENTO // DataView ordinato per NEEDAREA string[] paramColumnNomeProgetto = new string[1]; paramColumnNomeProgetto[0] = ConfigurationManager.AppSettings["DISTINCTCOLUMNNNOMEPROGETTO"].ToString(); dtDistinctNomeProgetto = dvNeedAree.ToTable(true, paramColumnNomeProgetto); foreach (DataRow drNomeProgetto in dtDistinctNomeProgetto.Rows) { ptfInvestimento = new ptfType(); aggregatoInv = new Aggregato(); if (drNomeProgetto["NOME_PROGETTO"].ToString() != "") ptfInvestimento.descrizione = drNomeProgetto["NOME_PROGETTO"].ToString(); else ptfInvestimento.descrizione = "Progetto Investimento"; foreach (DataRowView rw in dvNeedAree) { if (ptfInvestimento.descrizione.ToUpper().Trim() == rw["NOME_PROGETTO"].ToString().ToUpper().Trim()) { //rwAsulString = rw["TIPOPRODOTTO"].ToString().Trim().ToUpper(); if (rw["TIPOPRODOTTOSINTESI"] == DBNull.Value || (string)rw["TIPOPRODOTTOSINTESI"] == "") rwAsulString = rw["TIPOPRODOTTO"].ToString().Trim().ToUpper(); else rwAsulString = rw["TIPOPRODOTTOSINTESI"].ToString().Trim().ToUpper(); CreaAggregatoSezione21(ptfInvestimento, rwAsulString, tipoProdottoAsul, rw, chiaveclientepb); aggregatoInv.Add(ptfInvestimento); } } aggregatoInv.AddCollectionAggregateToAggregate(); ptfInvestimento.AddChildToAggregate(); ptf.AddAggregato(ptfInvestimento); ptf.AddChildToAggregate(); } } else { foreach (DataRowView rw in dvNeedAree) { //rwAsulString = rw["TIPOPRODOTTO"].ToString().Trim().ToUpper(); if (rw["TIPOPRODOTTOSINTESI"] == DBNull.Value || (string)rw["TIPOPRODOTTOSINTESI"] == "") rwAsulString = rw["TIPOPRODOTTO"].ToString().Trim().ToUpper(); else rwAsulString = rw["TIPOPRODOTTOSINTESI"].ToString().Trim().ToUpper(); CreaAggregatoSezione21(ptf, rwAsulString, tipoProdottoAsul, rw, chiaveclientepb); } } aggregato.Add(ptf); aggregato.AddCollectionAggregateToAggregate(); ptf.AddChildToAggregate(); ptfTotale.AddAggregato(ptf); ptfTotale.AddChildToAggregate(); } richiestaVarPortafoglio.Add(ptfTotale); richiestaVarPortafoglio.AddChildToAggregate(); #endregion #endregion #endregion #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Classe: Prometeia; Metodo: CreaRichiestaVaRPortafoglioSezione21", ex.InnerException); } return mt; } private static messaggioType CreaRichiestaVaRPortafoglioSezione23(DataTable dtRichiesta, DataTable dtCC) { #region Variabili costruzione oggetto MessageType //la query è diversa dalla 56 non c'è la needarea il nome la descrizione dell'aggregato dovrebbe essere il nome dell'intemediario //non sarebbe meglio fare un ptf per ogni intermediario? //al posto del codice isin sembra che utilizzano l'asset class DataTable dtDistinctIntermediario = new DataTable(); dtDistinctIntermediario.Columns.Add("Intermediario", typeof(string)); DataTable dtDistinctContoCorrente = new DataTable(); dtDistinctContoCorrente.Columns.Add("Intermediario", typeof(string)); messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; ptfType ptf; saldoType saldo; ProdottiKeyType pkt; Aggregato aggregato; #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; // DataView ordinato per NEEDAREA dtDistinctIntermediario = dtRichiesta.DefaultView.ToTable(true, "needArea"); dtDistinctIntermediario.Columns[0].ColumnName = "Intermediario"; if (dtCC != null) { dtDistinctContoCorrente = dtCC.DefaultView.ToTable(true, "IDIntermediario"); dtDistinctContoCorrente.Columns[0].ColumnName = "Intermediario"; } #endregion #region HeaderMessage hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType #region RichiestaVarPortafoglio // PTF - CT #region PTF //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; string rwdistinctNeedArea = ""; string rwNeedArea = ""; string codiceAgente = ""; string codiceRete = ""; string codiceFiscale = ""; string codiceApplicazione = ""; int versioneDBSimpb = 0; string tipoProdottoAsul = ConfigurationManager.AppSettings["TIPOPRODOTTOASUL"].ToString().Trim().ToUpper(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAGENTE")) codiceAgente = dtRichiesta.ExtendedProperties["CODICEAGENTE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICERETE")) codiceRete = dtRichiesta.ExtendedProperties["CODICERETE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEFISCALE")) codiceFiscale = dtRichiesta.ExtendedProperties["CODICEFISCALE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAPPLICAZIONE")) codiceApplicazione = dtRichiesta.ExtendedProperties["CODICEAPPLICAZIONE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("VERSIONEDATABASESIMPB")) versioneDBSimpb = int.Parse(dtRichiesta.ExtendedProperties["VERSIONEDATABASESIMPB"].ToString()); ptfType ptfTotale = new ptfType(); ptfTotale.descrizione = "TOTALEALTRIISTITUTI"; #region CREAZIONE OGGETTO MESSAGE dtDistinctIntermediario.Merge(dtDistinctContoCorrente); dtDistinctIntermediario = dtDistinctIntermediario.DefaultView.ToTable(true, "Intermediario"); foreach (DataRow rwdistinct in dtDistinctIntermediario.Rows) { if (rwdistinct["Intermediario"].ToString().Length > 0) { // Creo un aggregato aggregato = new Aggregato(); ptf = new ptfType(); ptf.descrizione = rwdistinct["Intermediario"].ToString(); if (dtCC != null) foreach (DataRow rw in dtCC.Rows) { rwdistinctNeedArea = rwdistinct["Intermediario"].ToString().Trim().ToUpper(); rwNeedArea = rw[1].ToString().Trim().ToUpper(); if ((rwdistinctNeedArea.Equals(rwNeedArea)) & int.Parse(rw[0].ToString()) == 0) { #region SALDO CC saldo = new saldoType(); saldo.nome = "CCNettoFranchigia"; pkt = new ProdottiKeyType(); pkt.codiceAdeguatezza = "EUR"; pkt.codiceInterno = "EUR"; pkt.codiceIsin = "EUR"; pkt.codiceMaf = "EUR"; pkt.codiceSottoprodotto = "EUR"; saldo.chiave = pkt; if (rw[2] != DBNull.Value) { saldo.valore = Convert.ToDouble(rw[2].ToString()); saldo.valoreCtv = Convert.ToDouble(rw[2].ToString()); saldo.valoreCtvSpecified = true; } ptf.AddSaldo(saldo); #endregion } } foreach (DataRow rw in dtRichiesta.Rows) { rwdistinctNeedArea = rwdistinct["Intermediario"].ToString().Trim().ToUpper(); rwNeedArea = rw["NeedArea"].ToString().Trim().ToUpper(); if (rwdistinctNeedArea.Equals(rwNeedArea)) { #region SALDO NON ASUL saldo = new saldoType(); if (rw["VALORE"] != DBNull.Value) saldo.valore = Convert.ToDouble(rw["VALORE"].ToString()); if (rw["CONTROVALORE"] != DBNull.Value) saldo.valoreCtv = Convert.ToDouble(rw["CONTROVALORE"].ToString()); saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); if (rw["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = rw["CODICEADEGUATEZZA"].ToString(); else pkt.codiceAdeguatezza = ""; if (rw["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = rw["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (rw["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = rw["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; // CODICESOTTOPRODOTTO if (rw["CODICESOTTOPRODOTTO"] != DBNull.Value) pkt.codiceSottoprodotto = rw["CODICESOTTOPRODOTTO"].ToString(); else pkt.codiceSottoprodotto = ""; // CODICEINTERNO if (rw["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = rw["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; saldo.chiave = pkt; ptf.AddSaldo(saldo); #endregion } } ptf.AddChildSaldoToAggregate(); aggregato.Add(ptf); aggregato.AddCollectionAggregateToAggregate(); ptf.AddChildToAggregate(); ptfTotale.AddAggregato(ptf); ptfTotale.AddChildToAggregate(); //richiestaVarPortafoglio.Add(ptf); richiestaVarPortafoglio.Add(ptfTotale); richiestaVarPortafoglio.AddChildToAggregate(); #endregion #endregion #endregion #endregion } } } catch (Exception ex) { throw new Exception(ex.Message + "; Metodo: CreaRichiestaVaRPortafoglioSezione23", ex.InnerException); } return mt; } private static messaggioType CreaRichiestaVaRPortafoglioSezione70(DataTable dtRichiesta, DataTable dtContrattiSintesiPerCliente) { #region Variabili costruzione oggetto MessageType DataTable dtDistinctNeedArea; DataTable dtDistinctProgetto; messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; saldoType saldo; ProdottiKeyType pkt; double ctvOperazione = 0; #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; double ctvAsul = 0; double ctvAsulCalcolato = 0; // DataView ordinato per NEEDAREA // Distinct needarea string[] paramColumn = new string[1]; paramColumn[0] = ConfigurationManager.AppSettings["DISTINCTCOLUMN"].ToString(); dtDistinctNeedArea = dtRichiesta.DefaultView.ToTable(true, paramColumn); // Distinct Progetto string[] paramColumnprogetto = new string[2]; paramColumnprogetto[0] = "needarea"; paramColumnprogetto[1] = "nome_progetto"; dtDistinctProgetto = dtRichiesta.DefaultView.ToTable(true, paramColumnprogetto); #endregion #region HeaderMessage hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType #region RichiestaVarPortafoglio // PTF - CT #region PTF //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; string rwAsulString = ""; codiceAgente = ""; codiceRete = ""; codiceFiscale = ""; codiceApplicazione = ""; versioneDBSimpb = 0; string tipoProdottoAsul = ConfigurationManager.AppSettings["TIPOPRODOTTOASUL"].ToString().Trim().ToUpper(); string tipoProdottoAsu2 = ConfigurationManager.AppSettings["TIPOPRODOTTOASU2"].ToString().Trim().ToUpper(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAGENTE")) codiceAgente = dtRichiesta.ExtendedProperties["CODICEAGENTE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICERETE")) codiceRete = dtRichiesta.ExtendedProperties["CODICERETE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEFISCALE")) codiceFiscale = dtRichiesta.ExtendedProperties["CODICEFISCALE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAPPLICAZIONE")) codiceApplicazione = dtRichiesta.ExtendedProperties["CODICEAPPLICAZIONE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("VERSIONEDATABASESIMPB")) versioneDBSimpb = int.Parse(dtRichiesta.ExtendedProperties["VERSIONEDATABASESIMPB"].ToString()); if (dtRichiesta.ExtendedProperties.Contains("CHIAVECLIENTEPB")) chiaveclientepb = int.Parse(dtRichiesta.ExtendedProperties["CHIAVECLIENTEPB"].ToString()); String needAreaInv = ConfigurationManager.AppSettings["NEEDAREAINV"].ToString(); // Eleboro il datatable richiesta AggiungiColonnaTipoProdottoContrattoSintesi(ref dtRichiesta, dtContrattiSintesiPerCliente); ptfType ptfTotale = new ptfType(); ptfTotale.descrizione = "TOTALE"; ptfType ptfLivelloNeedArea; ptfType ptfLivelloProgetto; ptfType ptfLivelloProdotto; #region CREAZIONE OGGETTO MESSAGE foreach (DataRow rwdistinct in dtDistinctNeedArea.Rows) { // Creo un aggregatoAsul // Creo un aggregato #region Livello Need Area ptfLivelloNeedArea = new ptfType(); ptfLivelloNeedArea.descrizione = rwdistinct["needarea"].ToString(); if (rwdistinct["needarea"].ToString().ToUpper() == "INV") { // Livello Aggregato Need Area #region Investimento foreach (DataRow rwdistinctprogetto in dtDistinctProgetto.Rows) { #region Livello Progetto if (rwdistinct["needarea"].ToString().ToUpper() == rwdistinctprogetto["needarea"].ToString().ToUpper()) { ptfLivelloProgetto = new ptfType(); ptfLivelloProgetto.descrizione = rwdistinctprogetto["nome_progetto"].ToString(); foreach (DataRow drprodotto in dtRichiesta.Rows) { #region Livello Aggregato Prodotto if (rwdistinct["needarea"].ToString() == drprodotto["needarea"].ToString() && rwdistinctprogetto["nome_progetto"].ToString() == drprodotto["nome_progetto"].ToString()) { if (drprodotto["TIPOPRODOTTOSINTESI"] == DBNull.Value || (string)drprodotto["TIPOPRODOTTOSINTESI"] == "") rwAsulString = drprodotto["TIPOPRODOTTO"].ToString(); else rwAsulString = drprodotto["TIPOPRODOTTOSINTESI"].ToString(); #region Aggregato di Prodotto ptfLivelloProdotto = new ptfType(); ptfLivelloProdotto.descrizione = drprodotto["ID"].ToString(); #endregion double controvalore_proposta = Convert.ToDouble(drprodotto["controvalore_proposta"]); double controvalore_attuale = Convert.ToDouble(drprodotto["controvalore_attuale"]); double rapporto = Convert.ToDouble(drprodotto["rapporto"]); double investi_nominale = 0; double disinvesti_nominale = 0; double investi = 0; double disinvesti = 0; double apporti_o_disinvestimenti = 0; if (drprodotto["investi_nominale"] != DBNull.Value) investi_nominale = Convert.ToDouble(drprodotto["investi_nominale"]); if (drprodotto["disinvesti_nominale"] != DBNull.Value) disinvesti_nominale = Convert.ToDouble(drprodotto["disinvesti_nominale"]); if (drprodotto["investi"] != DBNull.Value) investi = Convert.ToDouble(drprodotto["investi"]); if (drprodotto["disinvesti"] != DBNull.Value) disinvesti = Convert.ToDouble(drprodotto["disinvesti"]); investi_nominale = Math.Abs(investi_nominale); disinvesti_nominale = Math.Abs(disinvesti_nominale); investi = Math.Abs(investi); disinvesti = Math.Abs(disinvesti); if (drprodotto["apporti_o_disinvestimenti"] != DBNull.Value) apporti_o_disinvestimenti = Convert.ToDouble(drprodotto["apporti_o_disinvestimenti"]); double ptfIniziale = controvalore_attuale; double ptfFinale = controvalore_proposta; bool IsANewPosition = Convert.ToBoolean(drprodotto["isanewposition"]); bool flagStatoSalvaProposta = false; if (drprodotto["flag_salvataggio_manuale"] != DBNull.Value) flagStatoSalvaProposta = Convert.ToBoolean(drprodotto["flag_salvataggio_manuale"]); double valoreNominaleContrattoSintesi = 0; double valoreCtvContrattoSintesi = 0; if (drprodotto["VALORESINTESI"] != DBNull.Value) valoreNominaleContrattoSintesi = Convert.ToDouble(drprodotto["VALORESINTESI"]); if (drprodotto["CTVSINTESI"] != DBNull.Value) valoreCtvContrattoSintesi = Convert.ToDouble(drprodotto["CTVSINTESI"]); if (!IsANewPosition) { // Prodotto in contratto sintesi e presente in pianificazione // K Skandia if (tipoProdottoAsul.Equals(rwAsulString)) { #region SALDO ASUL #region Prodotti FAO/FAP string codiceInterno = string.Empty; if (drprodotto["CODICEINTERNO"] != DBNull.Value) codiceInterno = drprodotto["CODICEINTERNO"].ToString().Trim(); if ((investi > 0 || disinvesti > 0) && IsFAOFAP(codiceInterno)) { #region Chiamata la WSPOSIZIONECLIENTE PrometeiaMessage.bancafideuram.nac.posizionecliente.ChiaveCliente _chiaveCliente = new PrometeiaMessage.bancafideuram.nac.posizionecliente.ChiaveCliente(); _chiaveCliente.codiceAgente = codiceAgente; _chiaveCliente.codiceFiscale = codiceFiscale; _chiaveCliente.codiceMandato = string.Empty; PrometeiaMessage.bancafideuram.nac.posizionecliente.InfoClient _infoCliente = new PrometeiaMessage.bancafideuram.nac.posizionecliente.InfoClient(); _infoCliente.CodiceApplicazione = codiceApplicazione; _infoCliente.CodiceRete = codiceRete; _infoCliente.VersioneDatabaseSIMPB = versioneDBSimpb; string codiceContratto = drprodotto["CONTRATTO"].ToString().Trim(); DataTable dtFAOFAP = DettagliAssicurativi(drprodotto, _chiaveCliente, codiceContratto, codiceInterno, _infoCliente, chiaveclientepb); #endregion foreach (DataRow rwFAOFAP in dtFAOFAP.Rows) { saldo = new saldoType(); saldo.valore = (double)rwFAOFAP["IMPORTOINIZIALE"] + (double)rwFAOFAP["DELTA"]; saldo.valoreCtv = (double)rwFAOFAP["IMPORTOINIZIALE"] + (double)rwFAOFAP["DELTA"]; saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //CODICEADEGUATEZZA if (rwFAOFAP["ISINFITTIZIO"] != DBNull.Value) pkt.codiceAdeguatezza = rwFAOFAP["ISINFITTIZIO"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rwFAOFAP["ISINFITTIZIO"] != DBNull.Value) pkt.codiceSottoprodotto = rwFAOFAP["ISINFITTIZIO"].ToString(); else pkt.codiceSottoprodotto = ""; saldo.chiave = pkt; ptfLivelloProdotto.AddSaldo(saldo); } } #endregion else { #region Chiamata la WSGLOBALPOSITION PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente _chiaveCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente(); _chiaveCliente.codiceAgente = codiceAgente; _chiaveCliente.codicefiscale = codiceFiscale; _chiaveCliente.codiceRete = codiceRete; _chiaveCliente.potenzialeClienteNAC = true; PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient _infoCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient(); _infoCliente.codiceApplicazione = codiceApplicazione; _infoCliente.codiceRete = codiceRete; _infoCliente.versioneDatabaseSIMPB = versioneDBSimpb; string codiceContratto = drprodotto["CONTRATTO"].ToString().Trim(); GlobalPositionWS gpWS = new GlobalPositionWS(); DataTable dtAsul = gpWS.GetContrattoUnitLinkedSaldo(_chiaveCliente, codiceContratto, _infoCliente, chiaveclientepb); #endregion foreach (DataRow rwAsul in dtAsul.Rows) { saldo = new saldoType(); if (rwAsul["CONTROVALORE"] != DBNull.Value) { ctvAsul = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); ctvAsulCalcolato = Convert.ToDouble(ctvAsul * rapporto); ctvAsulCalcolato = System.Math.Round(ctvAsulCalcolato, 2, MidpointRounding.ToEven); saldo.valore = Convert.ToDouble(ctvAsulCalcolato); saldo.valoreCtv = Convert.ToDouble(ctvAsulCalcolato); } saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //CODICEADEGUATEZZA if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceAdeguatezza = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceSottoprodotto = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceSottoprodotto = ""; //if (rwAsul["ISINFITTIZIO"] != DBNull.Value) // pkt.codiceInterno = rwAsul["ISINFITTIZIO"].ToString(); //if (drprodotto["CODICEISIN"] != DBNull.Value) // pkt.codiceIsin = drprodotto["CODICEISIN"].ToString(); //if (drprodotto["CODICEMAF"] != DBNull.Value) // pkt.codiceMaf = drprodotto["CODICEMAF"].ToString(); saldo.chiave = pkt; ptfLivelloProdotto.AddSaldo(saldo); } } #endregion } else { #region SALDO NON ASUL saldo = new saldoType(); saldo.valore = valoreNominaleContrattoSintesi; #region Flag Stato Salvataggio Proposta if (flagStatoSalvaProposta) { // flagStatoSalvaProposta = 1 ctvOperazione = Math.Abs(apporti_o_disinvestimenti); if (ctvOperazione > 0) { // Rimodulazione del valore del saldo //original_quote = valoreNominaleContrattoSintesi; if (ptfFinale != valoreCtvContrattoSintesi) { // TODO: verificafe se arrotondare ***************************************** if (ptfIniziale != 0) { saldo.valore = (ptfFinale * valoreNominaleContrattoSintesi) / ptfIniziale; saldo.valore = Math.Round(saldo.valore, 2, MidpointRounding.ToEven); } else saldo.valore = 0; } if (investi_nominale > 0 || disinvesti_nominale > 0) { // Verificare se basta controllare il valore di investi/disinvesti senza controllare la // tipologia del prodotto come invece avviene sul SEI (Tipologie prodotti: COVWAR, WARRANT, OBBLIGAZIONI - OB, CERTIF) // E SPERIAMO DI NO saldo.valore = valoreNominaleContrattoSintesi + investi_nominale - disinvesti_nominale; } } } saldo.valoreCtv = ptfFinale; #endregion saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //K Skandia if (rwAsulString.Equals(tipoProdottoAsu2)) { //CODICEADEGUATEZZA if (drprodotto["ISIN_ASU2"] != DBNull.Value) pkt.codiceAdeguatezza = drprodotto["ISIN_ASU2"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (drprodotto["ISIN_ASU2"] != DBNull.Value) pkt.codiceSottoprodotto = drprodotto["ISIN_ASU2"].ToString(); else pkt.codiceSottoprodotto = ""; } else { if (drprodotto["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = drprodotto["CODICEADEGUATEZZA"].ToString(); else pkt.codiceAdeguatezza = ""; if (drprodotto["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = drprodotto["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (drprodotto["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = drprodotto["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; if (drprodotto["CODICESOTTOPRODOTTO"] != DBNull.Value) pkt.codiceSottoprodotto = drprodotto["CODICESOTTOPRODOTTO"].ToString(); else pkt.codiceSottoprodotto = ""; if (drprodotto["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = drprodotto["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; } saldo.chiave = pkt; ptfLivelloProdotto.AddSaldo(saldo); #endregion } } else { #region Gestione Contratto nuovo saldo = new saldoType(); saldo.valore = ptfFinale; if (investi_nominale > 0 || disinvesti_nominale > 0) { // Verificare se basta controllare il valore di investi/disinvesti senza controllare la // tipologia del prodotto come invece avviene sul SEI (Tipologie prodotti: COVWAR, WARRANT, OBBLIGAZIONI - OB, CERTIF) // E SPERIAMO DI NO saldo.valore = investi_nominale - disinvesti_nominale; } saldo.valoreCtv = ptfFinale; #region Saldo Chiave saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); #region Codice adeguatezza presente if (drprodotto["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = drprodotto["CODICEADEGUATEZZA"].ToString(); #endregion #region Codice adeguatezza non presente else pkt.codiceAdeguatezza = ""; #endregion if (drprodotto["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = drprodotto["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (drprodotto["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = drprodotto["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; if (drprodotto["CODICESOTTOPRODOTTO"] != DBNull.Value) pkt.codiceSottoprodotto = drprodotto["CODICESOTTOPRODOTTO"].ToString(); else pkt.codiceSottoprodotto = ""; if (drprodotto["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = drprodotto["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; saldo.chiave = pkt; ptfLivelloProdotto.AddSaldo(saldo); #endregion #endregion } ptfLivelloProdotto.AddChildSaldoToAggregate(); ptfLivelloProgetto.AddAggregato(ptfLivelloProdotto); } #endregion } ptfLivelloProgetto.AddChildToAggregate(); ptfLivelloNeedArea.AddAggregato(ptfLivelloProgetto); } #endregion } ptfLivelloNeedArea.AddChildToAggregate(); ptfTotale.AddAggregato(ptfLivelloNeedArea); #endregion } else { #region NON Investimento foreach (DataRow drprodotto in dtRichiesta.Rows) { #region Livello Aggregato Prodotto if (rwdistinct["needarea"].ToString() == drprodotto["needarea"].ToString()) { if (drprodotto["TIPOPRODOTTOSINTESI"] == DBNull.Value || (string)drprodotto["TIPOPRODOTTOSINTESI"] == "") rwAsulString = drprodotto["TIPOPRODOTTO"].ToString(); else rwAsulString = drprodotto["TIPOPRODOTTOSINTESI"].ToString(); #region Aggregato di Prodotto ptfLivelloProdotto = new ptfType(); ptfLivelloProdotto.descrizione = drprodotto["ID"].ToString(); double controvalore_proposta = Convert.ToDouble(drprodotto["controvalore_proposta"]); double controvalore_attuale = Convert.ToDouble(drprodotto["controvalore_attuale"]); double rapporto = Convert.ToDouble(drprodotto["rapporto"]); double investi_nominale = 0; double disinvesti_nominale = 0; double apporti_o_disinvestimenti = 0; if (drprodotto["investi_nominale"] != DBNull.Value) investi_nominale = Convert.ToDouble(drprodotto["investi_nominale"]); if (drprodotto["disinvesti_nominale"] != DBNull.Value) disinvesti_nominale = Convert.ToDouble(drprodotto["disinvesti_nominale"]); if (drprodotto["apporti_o_disinvestimenti"] != DBNull.Value) apporti_o_disinvestimenti = Convert.ToDouble(drprodotto["apporti_o_disinvestimenti"]); double ptfIniziale = controvalore_attuale; double ptfFinale = controvalore_proposta; double ctvAsulTotale = 0; bool IsANewPosition = Convert.ToBoolean(drprodotto["isanewposition"]); double valoreNominaleContrattoSintesi = 0; double valoreCtvContrattoSintesi = 0; if (drprodotto["VALORESINTESI"] != DBNull.Value) valoreNominaleContrattoSintesi = Convert.ToDouble(drprodotto["VALORESINTESI"]); if (drprodotto["CTVSINTESI"] != DBNull.Value) valoreCtvContrattoSintesi = Convert.ToDouble(drprodotto["CTVSINTESI"]); #endregion if (!IsANewPosition) { // Prodotto in contratto sintesi if (tipoProdottoAsul.Equals(rwAsulString)) { #region SALDO ASUL #region Prodotti FAO/FAP string codiceInterno = string.Empty; if (drprodotto["CODICEINTERNO"] != DBNull.Value) codiceInterno = drprodotto["CODICEINTERNO"].ToString().Trim(); if ((investi_nominale != 0 || disinvesti_nominale != 0) && IsFAOFAP(codiceInterno)) { #region Chiamata la WSPOSIZIONECLIENTE PrometeiaMessage.bancafideuram.nac.posizionecliente.ChiaveCliente _chiaveCliente = new PrometeiaMessage.bancafideuram.nac.posizionecliente.ChiaveCliente(); _chiaveCliente.codiceAgente = codiceAgente; _chiaveCliente.codiceFiscale = codiceFiscale; _chiaveCliente.codiceMandato = string.Empty; PrometeiaMessage.bancafideuram.nac.posizionecliente.InfoClient _infoCliente = new PrometeiaMessage.bancafideuram.nac.posizionecliente.InfoClient(); _infoCliente.CodiceApplicazione = codiceApplicazione; _infoCliente.CodiceRete = codiceRete; _infoCliente.VersioneDatabaseSIMPB = versioneDBSimpb; string codiceContratto = drprodotto["CONTRATTO"].ToString().Trim(); DataTable dtFAOFAP = DettagliAssicurativi(drprodotto, _chiaveCliente, codiceContratto, codiceInterno, _infoCliente, chiaveclientepb); #endregion foreach (DataRow rwFAOFAP in dtFAOFAP.Rows) { saldo = new saldoType(); saldo.valore = (double)rwFAOFAP["IMPORTOINIZIALE"] + (double)rwFAOFAP["DELTA"]; saldo.valoreCtv = (double)rwFAOFAP["IMPORTOINIZIALE"] + (double)rwFAOFAP["DELTA"]; saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //CODICEADEGUATEZZA if (rwFAOFAP["ISINFITTIZIO"] != DBNull.Value) pkt.codiceAdeguatezza = rwFAOFAP["ISINFITTIZIO"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rwFAOFAP["ISINFITTIZIO"] != DBNull.Value) pkt.codiceSottoprodotto = rwFAOFAP["ISINFITTIZIO"].ToString(); else pkt.codiceSottoprodotto = ""; saldo.chiave = pkt; ptfLivelloProdotto.AddSaldo(saldo); } } #endregion else { #region Chiamata la WSGLOBALPOSITION PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente _chiaveCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente(); _chiaveCliente.codiceAgente = codiceAgente; _chiaveCliente.codicefiscale = codiceFiscale; _chiaveCliente.codiceRete = codiceRete; _chiaveCliente.potenzialeClienteNAC = true; PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient _infoCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient(); _infoCliente.codiceApplicazione = codiceApplicazione; _infoCliente.codiceRete = codiceRete; _infoCliente.versioneDatabaseSIMPB = versioneDBSimpb; string codiceContratto = drprodotto["CONTRATTO"].ToString().Trim(); GlobalPositionWS gpWS = new GlobalPositionWS(); DataTable dtAsul = gpWS.GetContrattoUnitLinkedSaldo(_chiaveCliente, codiceContratto, _infoCliente, chiaveclientepb); // object SumCtvAsulTotale = dtAsul.Compute("Sum(CONTROVALORE)", ""); if (SumCtvAsulTotale != null) ctvAsulTotale = Convert.ToDouble(SumCtvAsulTotale); double factor = 0; if (ctvAsulTotale == 0) factor = ptfFinale / dtAsul.Rows.Count; else factor = ptfFinale / ctvAsulTotale; #endregion foreach (DataRow rwAsul in dtAsul.Rows) { saldo = new saldoType(); if (ctvAsulTotale == 0) { saldo.valore = factor; saldo.valoreCtv = factor; } else { if (rwAsul["CONTROVALORE"] != DBNull.Value) { ctvAsul = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); ctvAsulCalcolato = ctvAsul * factor; saldo.valore = ctvAsulCalcolato; saldo.valoreCtv = ctvAsulCalcolato; // come era prima //saldo.valore = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); //saldo.valoreCtv = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); } } saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //CODICEADEGUATEZZA if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceAdeguatezza = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceSottoprodotto = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceSottoprodotto = ""; //if (rwAsul["ISINFITTIZIO"] != DBNull.Value) // pkt.codiceInterno = rwAsul["ISINFITTIZIO"].ToString(); //if (drprodotto["CODICEISIN"] != DBNull.Value) // pkt.codiceIsin = drprodotto["CODICEISIN"].ToString(); //if (drprodotto["CODICEMAF"] != DBNull.Value) // pkt.codiceMaf = drprodotto["CODICEMAF"].ToString(); saldo.chiave = pkt; ptfLivelloProdotto.AddSaldo(saldo); } } #endregion } else { #region SALDO NON ASUL saldo = new saldoType(); //if (controvalore_attuale == 0) { // // Nuovo Prodotto // saldo.valore = controvalore_proposta; // saldo.valoreCtv = controvalore_proposta; //} //else if (controvalore_proposta == 0) { // saldo.valore = 0; // saldo.valoreCtv = 0; //} //else { // saldo.valore = System.Math.Round((valoreNominaleContrattoSintesi * rapporto), 2, MidpointRounding.ToEven); // saldo.valoreCtv = controvalore_proposta; //} saldo.valore = valoreNominaleContrattoSintesi; ctvOperazione = Math.Abs(apporti_o_disinvestimenti); if (ctvOperazione > 0) { // Rimodulazione del valore del saldo //original_quote = valoreNominaleContrattoSintesi; if (ptfFinale != valoreCtvContrattoSintesi) { // TODO: verificafe se arrotondare ***************************************** saldo.valore = (ptfFinale * valoreNominaleContrattoSintesi) / ptfIniziale; saldo.valore = Math.Round(saldo.valore, 2, MidpointRounding.ToEven); } if (investi_nominale > 0 || disinvesti_nominale > 0) { // Verificare se basta controllare il valore di investi/disinvesti senza controllare la // tipologia del prodotto come invece avviene sul SEI (Tipologie prodotti: COVWAR, WARRANT, OBBLIGAZIONI - OB, CERTIF) // E SPERIAMO DI NO saldo.valore = valoreNominaleContrattoSintesi + investi_nominale - disinvesti_nominale; } } saldo.valoreCtv = ptfFinale; saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); if (rwAsulString.Equals(tipoProdottoAsu2)) { //CODICEADEGUATEZZA if (drprodotto["ISIN_ASU2"] != DBNull.Value) pkt.codiceAdeguatezza = drprodotto["ISIN_ASU2"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (drprodotto["ISIN_ASU2"] != DBNull.Value) pkt.codiceSottoprodotto = drprodotto["ISIN_ASU2"].ToString(); else pkt.codiceSottoprodotto = ""; } else { if (drprodotto["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = drprodotto["CODICEADEGUATEZZA"].ToString(); else pkt.codiceAdeguatezza = ""; if (drprodotto["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = drprodotto["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (drprodotto["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = drprodotto["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; if (drprodotto["CODICESOTTOPRODOTTO"] != DBNull.Value) pkt.codiceSottoprodotto = drprodotto["CODICESOTTOPRODOTTO"].ToString(); else pkt.codiceSottoprodotto = ""; if (drprodotto["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = drprodotto["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; } saldo.chiave = pkt; ptfLivelloProdotto.AddSaldo(saldo); #endregion } } else { #region Gestione Contratto nuovo saldo = new saldoType(); saldo.valore = ptfFinale; if (investi_nominale > 0 || disinvesti_nominale > 0) { // Verificare se basta controllare il valore di investi/disinvesti senza controllare la // tipologia del prodotto come invece avviene sul SEI (Tipologie prodotti: COVWAR, WARRANT, OBBLIGAZIONI - OB, CERTIF) // E SPERIAMO DI NO saldo.valore = investi_nominale - disinvesti_nominale; } saldo.valoreCtv = ptfFinale; #region Saldo Chiave saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); #endregion #region Codice adeguatezza presente if (drprodotto["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = drprodotto["CODICEADEGUATEZZA"].ToString(); #endregion #region Codice adeguatezza non presente else pkt.codiceAdeguatezza = ""; #endregion #region Codici non trovati in catalogo if (drprodotto["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = drprodotto["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (drprodotto["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = drprodotto["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; if (drprodotto["CODICESOTTOPRODOTTO"] != DBNull.Value) pkt.codiceSottoprodotto = drprodotto["CODICESOTTOPRODOTTO"].ToString(); else pkt.codiceSottoprodotto = ""; if (drprodotto["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = drprodotto["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; #endregion saldo.chiave = pkt; ptfLivelloProdotto.AddSaldo(saldo); #endregion } ptfLivelloProdotto.AddChildSaldoToAggregate(); ptfLivelloNeedArea.AddAggregato(ptfLivelloProdotto); } #endregion } #endregion ptfLivelloNeedArea.AddChildToAggregate(); ptfTotale.AddAggregato(ptfLivelloNeedArea); } ptfTotale.AddChildToAggregate(); #endregion } #endregion richiestaVarPortafoglio.Add(ptfTotale); richiestaVarPortafoglio.AddChildToAggregate(); #endregion #endregion #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Classe: Prometeia; Metodo: CreaRichiestaVaRPortafoglioSezione70", ex.InnerException); } return mt; } private static messaggioType CreaRichiestaVaRPortafoglioSezione73(DataTable dtRichiesta, DataTable dtContrattiSintesiPerCliente) { #region Variabili costruzione oggetto MessageType DataTable dtDistinctNeedArea; DataTable dtDistinctProgetto; messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; saldoType saldo; ProdottiKeyType pkt; double ctvOperazione = 0; #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; #endregion #region HeaderMessage hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType #region RichiestaVarPortafoglio // PTF - CT #region PTF //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; string rwAsulString = ""; codiceAgente = ""; codiceRete = ""; codiceFiscale = ""; codiceApplicazione = ""; versioneDBSimpb = 0; double ctvAsul = 0; double ctvAsulCalcolato = 0; double saldoValore = 0; double saldoValoreCtv = 0; string tipoProdottoAsul = ConfigurationManager.AppSettings["TIPOPRODOTTOASUL"].ToString().Trim().ToUpper(); string tipoProdottoAsu2 = ConfigurationManager.AppSettings["TIPOPRODOTTOASU2"].ToString().Trim().ToUpper(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAGENTE")) codiceAgente = dtRichiesta.ExtendedProperties["CODICEAGENTE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICERETE")) codiceRete = dtRichiesta.ExtendedProperties["CODICERETE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEFISCALE")) codiceFiscale = dtRichiesta.ExtendedProperties["CODICEFISCALE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAPPLICAZIONE")) codiceApplicazione = dtRichiesta.ExtendedProperties["CODICEAPPLICAZIONE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("VERSIONEDATABASESIMPB")) versioneDBSimpb = int.Parse(dtRichiesta.ExtendedProperties["VERSIONEDATABASESIMPB"].ToString()); if (dtRichiesta.ExtendedProperties.Contains("CHIAVECLIENTEPB")) chiaveclientepb = int.Parse(dtRichiesta.ExtendedProperties["CHIAVECLIENTEPB"].ToString()); String needAreaInv = ConfigurationManager.AppSettings["NEEDAREAINV"].ToString(); // Eleboro il datatable richiesta AggiungiColonnaTipoProdottoContrattoSintesi(ref dtRichiesta, dtContrattiSintesiPerCliente); ptfType ptfTotale = new ptfType(); ptfTotale.descrizione = "TOTALE"; ptfType ptfLivelloProdotto; #region CREAZIONE OGGETTO MESSAGE foreach (DataRow drprodotto in dtRichiesta.Rows) { // 26/01/2010 d.lisena // controllo se il contratto è stato già liquidato. // (Se il contratto non è presente nella Contratto Sintesi significa che è stato liquidato.) string codiceContratto = drprodotto["CONTRATTO"].ToString().Trim(); bool calcolaAggregatoClientiPotenziali = false; DataRow[] rowFound = new DataRow[0]; if (dtContrattiSintesiPerCliente != null) rowFound = dtContrattiSintesiPerCliente.Select("codiceContratto='" + codiceContratto + "'"); else calcolaAggregatoClientiPotenziali = true; // il dtContrattiSintesiPerCliente è null solo quando il cliente è un cliente potenziale. In questo caso calcolo comunque l'aggregato senza tener conto se il contratto è stato già liquidato. bool IsANewPosition = Convert.ToBoolean(drprodotto["isanewposition"]); if ((rowFound.Length > 0 || IsANewPosition) || calcolaAggregatoClientiPotenziali) { #region Livello Aggregato Prodotto if (drprodotto["TIPOPRODOTTOSINTESI"] == DBNull.Value || (string)drprodotto["TIPOPRODOTTOSINTESI"] == "") rwAsulString = drprodotto["TIPOPRODOTTO"].ToString(); else rwAsulString = drprodotto["TIPOPRODOTTOSINTESI"].ToString(); #region Aggregato di Prodotto ptfLivelloProdotto = new ptfType(); ptfLivelloProdotto.descrizione = drprodotto["ID"].ToString(); #endregion #region Variabili per proposta double controvalore_proposta = Convert.ToDouble(drprodotto["controvalore_proposta"]); double controvalore_attuale = Convert.ToDouble(drprodotto["controvalore_attuale"]); double rapporto = Convert.ToDouble(drprodotto["rapporto"]); double investi_nominale = 0; double disinvesti_nominale = 0; double investi = 0; double disinvesti = 0; double apporti_o_disinvestimenti = 0; if (drprodotto["investi_nominale"] != DBNull.Value) investi_nominale = Convert.ToDouble(drprodotto["investi_nominale"]); if (drprodotto["disinvesti_nominale"] != DBNull.Value) disinvesti_nominale = Convert.ToDouble(drprodotto["disinvesti_nominale"]); if (drprodotto["investi"] != DBNull.Value) investi = Convert.ToDouble(drprodotto["investi"]); if (drprodotto["disinvesti"] != DBNull.Value) disinvesti = Convert.ToDouble(drprodotto["disinvesti"]); investi_nominale = Math.Abs(investi_nominale); disinvesti_nominale = Math.Abs(disinvesti_nominale); investi = Math.Abs(investi); disinvesti = Math.Abs(disinvesti); if (drprodotto["apporti_o_disinvestimenti"] != DBNull.Value) apporti_o_disinvestimenti = Convert.ToDouble(drprodotto["apporti_o_disinvestimenti"]); double ptfIniziale = controvalore_attuale; double ptfFinale = controvalore_proposta; double ctvAsulTotale = 0; bool flagStatoSalvaProposta = false; if (drprodotto["flag_salvataggio_manuale"] != DBNull.Value) flagStatoSalvaProposta = Convert.ToBoolean(drprodotto["flag_salvataggio_manuale"]); double valoreNominaleContrattoSintesi = 0; double valoreCtvContrattoSintesi = 0; if (drprodotto["VALORESINTESI"] != DBNull.Value) valoreNominaleContrattoSintesi = Convert.ToDouble(drprodotto["VALORESINTESI"]); if (drprodotto["CTVSINTESI"] != DBNull.Value) valoreCtvContrattoSintesi = Convert.ToDouble(drprodotto["CTVSINTESI"]); #endregion #region Nuova gestione saldo = new saldoType(); if (!IsANewPosition) { // Nuova posizione: NO #region Posizione esistente in contratto sintesi //K Skandia if (tipoProdottoAsul.Equals(rwAsulString)) { #region Prodotti ASUL #region Prodotti FAO/FAP, con movimentazione string codiceInterno = string.Empty; if (drprodotto["CODICEINTERNO"] != DBNull.Value) codiceInterno = drprodotto["CODICEINTERNO"].ToString().Trim(); if ((investi > 0 || disinvesti > 0) && IsFAOFAP(codiceInterno)) { #region Chiamata la WSPOSIZIONECLIENTE PrometeiaMessage.bancafideuram.nac.posizionecliente.ChiaveCliente _chiaveCliente = new PrometeiaMessage.bancafideuram.nac.posizionecliente.ChiaveCliente(); _chiaveCliente.codiceAgente = codiceAgente; _chiaveCliente.codiceFiscale = codiceFiscale; _chiaveCliente.codiceMandato = string.Empty; PrometeiaMessage.bancafideuram.nac.posizionecliente.InfoClient _infoCliente = new PrometeiaMessage.bancafideuram.nac.posizionecliente.InfoClient(); _infoCliente.CodiceApplicazione = codiceApplicazione; _infoCliente.CodiceRete = codiceRete; _infoCliente.VersioneDatabaseSIMPB = versioneDBSimpb; DataTable dtFAOFAP = DettagliAssicurativi(drprodotto, _chiaveCliente, codiceContratto, codiceInterno, _infoCliente, chiaveclientepb); #endregion foreach (DataRow rwFAOFAP in dtFAOFAP.Rows) { saldo = new saldoType(); saldo.valore = (double)rwFAOFAP["IMPORTOINIZIALE"] + (double)rwFAOFAP["DELTA"]; saldo.valoreCtv = (double)rwFAOFAP["IMPORTOINIZIALE"] + (double)rwFAOFAP["DELTA"]; saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //CODICEADEGUATEZZA if (rwFAOFAP["ISINFITTIZIO"] != DBNull.Value) pkt.codiceAdeguatezza = rwFAOFAP["ISINFITTIZIO"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rwFAOFAP["ISINFITTIZIO"] != DBNull.Value) pkt.codiceSottoprodotto = rwFAOFAP["ISINFITTIZIO"].ToString(); else pkt.codiceSottoprodotto = ""; saldo.chiave = pkt; ptfLivelloProdotto.AddSaldo(saldo); } } #endregion else { #region Chiamata la WSGLOBALPOSITION PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente _chiaveCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente(); _chiaveCliente.codiceAgente = codiceAgente; _chiaveCliente.codicefiscale = codiceFiscale; _chiaveCliente.codiceRete = codiceRete; _chiaveCliente.potenzialeClienteNAC = true; PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient _infoCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient(); _infoCliente.codiceApplicazione = codiceApplicazione; _infoCliente.codiceRete = codiceRete; _infoCliente.versioneDatabaseSIMPB = versioneDBSimpb; GlobalPositionWS gpWS = new GlobalPositionWS(); DataTable dtAsul = gpWS.GetContrattoUnitLinkedSaldo(_chiaveCliente, codiceContratto, _infoCliente, chiaveclientepb); object SumCtvAsulTotale = dtAsul.Compute("Sum(CONTROVALORE)", ""); if (SumCtvAsulTotale != null) ctvAsulTotale = Convert.ToDouble(SumCtvAsulTotale); double factor = 0; if (ctvAsulTotale == 0) { factor = ptfFinale / dtAsul.Rows.Count; } else { factor = ptfFinale / ctvAsulTotale; } #endregion foreach (DataRow rwAsul in dtAsul.Rows) { saldo = new saldoType(); if (ctvAsulTotale == 0) { saldo.valore = factor; saldo.valoreCtv = factor; } else { if (rwAsul["CONTROVALORE"] != DBNull.Value) { ctvAsul = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); ctvAsulCalcolato = ctvAsul * factor; saldo.valore = ctvAsulCalcolato; saldo.valoreCtv = ctvAsulCalcolato; } } saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //CODICEADEGUATEZZA if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceAdeguatezza = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceSottoprodotto = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceSottoprodotto = ""; saldo.chiave = pkt; ptfLivelloProdotto.AddSaldo(saldo); } } #endregion } else { #region Prodotti NO ASUL saldo.valore = valoreNominaleContrattoSintesi; #region Flag Stato Salvataggio Proposta if (flagStatoSalvaProposta) { // flagStatoSalvaProposta = 1 ctvOperazione = Math.Abs(apporti_o_disinvestimenti); if (ctvOperazione > 0) { // Rimodulazione del valore del saldo //original_quote = valoreNominaleContrattoSintesi; if (ptfFinale != valoreCtvContrattoSintesi) { // TODO: verificafe se arrotondare ***************************************** if (ptfIniziale != 0) { saldo.valore = (ptfFinale * valoreNominaleContrattoSintesi) / ptfIniziale; saldo.valore = Math.Round(saldo.valore, 2, MidpointRounding.ToEven); } else saldo.valore = 0; } if (investi_nominale > 0 || disinvesti_nominale > 0) { // Verificare se basta controllare il valore di investi/disinvesti senza controllare la // tipologia del prodotto come invece avviene sul SEI (Tipologie prodotti: COVWAR, WARRANT, OBBLIGAZIONI - OB, CERTIF) // E SPERIAMO DI NO saldo.valore = valoreNominaleContrattoSintesi + investi_nominale - disinvesti_nominale; } } } saldo.valoreCtv = ptfFinale; #endregion #region Saldo Chiave saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //K Skandia if (rwAsulString.Equals(tipoProdottoAsu2)) { //CODICEADEGUATEZZA if (drprodotto["ISIN_ASU2"] != DBNull.Value) pkt.codiceAdeguatezza = drprodotto["ISIN_ASU2"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (drprodotto["ISIN_ASU2"] != DBNull.Value) pkt.codiceSottoprodotto = drprodotto["ISIN_ASU2"].ToString(); else pkt.codiceSottoprodotto = ""; } else { if (drprodotto["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = drprodotto["CODICEADEGUATEZZA"].ToString(); else pkt.codiceAdeguatezza = ""; if (drprodotto["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = drprodotto["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (drprodotto["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = drprodotto["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; if (drprodotto["CODICESOTTOPRODOTTO"] != DBNull.Value) pkt.codiceSottoprodotto = drprodotto["CODICESOTTOPRODOTTO"].ToString(); else pkt.codiceSottoprodotto = ""; if (drprodotto["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = drprodotto["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; } saldo.chiave = pkt; ptfLivelloProdotto.AddSaldo(saldo); #endregion #endregion } #endregion } else { // Nuova posizione: SI #region New Position saldo.valore = ptfFinale; if (investi_nominale > 0 || disinvesti_nominale > 0) { // Verificare se basta controllare il valore di investi/disinvesti senza controllare la // tipologia del prodotto come invece avviene sul SEI (Tipologie prodotti: COVWAR, WARRANT, OBBLIGAZIONI - OB, CERTIF) // E SPERIAMO DI NO saldo.valore = investi_nominale - disinvesti_nominale; } saldo.valoreCtv = ptfFinale; #region Saldo Chiave saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); if (drprodotto["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = drprodotto["CODICEADEGUATEZZA"].ToString(); else pkt.codiceAdeguatezza = ""; if (drprodotto["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = drprodotto["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (drprodotto["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = drprodotto["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; if (drprodotto["CODICESOTTOPRODOTTO"] != DBNull.Value) pkt.codiceSottoprodotto = drprodotto["CODICESOTTOPRODOTTO"].ToString(); else pkt.codiceSottoprodotto = ""; if (drprodotto["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = drprodotto["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; saldo.chiave = pkt; ptfLivelloProdotto.AddSaldo(saldo); #endregion #endregion } #endregion ptfLivelloProdotto.AddChildSaldoToAggregate(); ptfTotale.AddAggregato(ptfLivelloProdotto); #endregion } } #endregion ptfTotale.AddChildToAggregate(); richiestaVarPortafoglio.Add(ptfTotale); richiestaVarPortafoglio.AddChildToAggregate(); #endregion #endregion #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Classe: Prometeia; Metodo: CreaRichiestaVaRPortafoglioSezione73", ex.InnerException); } return mt; } /// /// Struttura dati per memorizzare i codici delle asset class /// /// un dictonary con le liste delle Asset class (OB = Obbligazionario, AZ = Azionario private static Dictionary> initializeTabellaAsset() { Dictionary> result = new Dictionary>(); List listaAsset = new List(); DataTable dtMappatura_MacroAsset_Asset = DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServerConsulenzaEvoluta, "REP_MacroAsset_Asset", null); DataTable distinctMacroAsset = dtMappatura_MacroAsset_Asset.DefaultView.ToTable(true, "Codice_MacroAsset"); foreach (DataRow row in dtMappatura_MacroAsset_Asset.Rows) { listaAsset.Add(new AssetClass { Descrizione = row["AssetClassName_Report"].ToString(), ISIN = row["Codice_Isin"].ToString(), MAF = row["Codice_Maf"].ToString(), Adeguatezza = row["Codice_Adeguatezza"] == DBNull.Value ? string.Empty : row["Codice_Adeguatezza"].ToString(), MacroAsset = row["Codice_MacroAsset"].ToString() }); } foreach (DataRow macro in distinctMacroAsset.Rows) result.Add(macro["Codice_MacroAsset"].ToString(), listaAsset.FindAll(a => a.MacroAsset.Equals(macro["Codice_MacroAsset"].ToString()))); return result; } private static AssetClass findAssetClass(string codeAsset) { List listaAsset = null; try { listaAsset = DettaglioAsset[codeAsset.Substring(0, 2)]; } catch (KeyNotFoundException k) { } AssetClass asset = null; if (listaAsset != null) foreach (AssetClass a in listaAsset) if (a.ISIN == codeAsset) asset = a; return asset; } /// /// Recupera le classi di rischio per emittente. /// private static DataTable LoadTabellaRischioCreditoEmit() { //DataTable dt_riskclass = DataAccess.ExecuteDataTableSqlStatement(DBProvider.Oracle, "SELECT OID$ as COD, CLASSE as DESCR, MAXVAL, MINVAL, CODICE FROM RISKEMIT", null); //HttpContext.Current.Cache.Insert("RiskClassEmit", dt_riskclass, null, DateTime.UtcNow.AddMinutes(5), TimeSpan.Zero); //return dt_riskclass; return DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServerConsulenzaEvoluta, "REP_CLASSIRISCHIOCREDITOPEREMITTENTI", null); } /// /// Recupera il dettaglio della classe rischio. /// /// private static DataTable LoadTabellaRischioCredito() { //DataTable dt_riskclass = DataAccess.ExecuteDataTableSqlStatement(DBProvider.Oracle, "select cod, descr , maxval, minval from riskclas", null); //HttpContext.Current.Cache.Insert("RiskClass", dt_riskclass, null, DateTime.UtcNow.AddMinutes(5), TimeSpan.Zero); //return dt_riskclass; return DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServerConsulenzaEvoluta, "REP_CLASSIRISCHIOCREDITO", null); } /// /// Ritorna una stringa concatenata di classi di rischio della lista di ptf passati in input. /// Le classi di Rischio Non Definite (n.a. e n.c.) sono ritornate solo se non sono presenti le di Rischio Definite. /// /// /// public static string getClassiRischioEmit(List ptfList) { string returnString = string.Empty; Dictionary classiRischioNonDefinite = new Dictionary(); SortedDictionary classiRischioDefinite = new SortedDictionary(); double valoreMassimo; double valoreMinimo; DataTable tb_RiskClass = (DataTable)HttpContext.Current.Cache["RiskClassEmit"]; if (tb_RiskClass == null) tb_RiskClass = LoadTabellaRischioCreditoEmit(); #region Recupero una lista di Classi rischio di credito foreach (ptfType ptf in ptfList) { //Controllo se la copertura è uguale a 0 if (ptf.stat.copertura == null) { if (!classiRischioNonDefinite.ContainsKey(-1)) classiRischioNonDefinite.Add(-1, "n.c."); } else { if (ptf.stat.copertura == 0) { if (!classiRischioNonDefinite.ContainsKey(-1)) classiRischioNonDefinite.Add(-1, "n.c."); } else { if (ptf.misureRischio.isAttivoRC == 0) { if (!classiRischioNonDefinite.ContainsKey(-2)) classiRischioNonDefinite.Add(-2, "n.a."); } else { //Confronto il rischio credito con la tabella RISKCLAS per ottenere la classe di rischio foreach (DataRow rw in tb_RiskClass.Rows) { valoreMassimo = double.Parse(rw["MAXVAL"].ToString()); valoreMinimo = double.Parse(rw["MINVAL"].ToString()); if (((ptf.misureRischio.rischioCredito) >= valoreMinimo) & ((ptf.misureRischio.rischioCredito) <= valoreMassimo)) { if (!classiRischioDefinite.ContainsKey(Convert.ToInt32(rw["CODICE"]))) classiRischioDefinite.Add(Convert.ToInt32(rw["CODICE"]), rw["DESCR"].ToString()); } } } } } } #endregion #region Rielaborazione della stringa di ritorno delle classiRischioDefinite // Aggiungo le classiRischioDefinite if (classiRischioDefinite.Count > 0) { if (classiRischioDefinite.Count > 1) { // Rielaborazione della stringa di ritorno delle classiRischioDefinite returnString = "Rischio "; foreach (KeyValuePair item in classiRischioDefinite) { returnString += item.Key + "-"; } if (returnString.EndsWith("-")) returnString = returnString.Substring(0, returnString.Length - 1); returnString += "/10"; } else { foreach (KeyValuePair item in classiRischioDefinite) { returnString = item.Value; } } } // Aggiungo le classiRischioNonDefinite if (classiRischioNonDefinite.Count > 0) { if (classiRischioDefinite.Count == 0) { //returnString += "-"; foreach (KeyValuePair item in classiRischioNonDefinite) { returnString += item.Value + "-"; } if (returnString.EndsWith("-")) returnString = returnString.Substring(0, returnString.Length - 1); } } #endregion return returnString; } /// /// Ritorna una lista di interi che rappresentano la lsita di codici di classe di rischio del ptf passato in input. /// Ritorna -2 per rischio credito = "n.a." oppure -1 per rischio credito uguale "n.c". /// Le classi di Rischio Non Definite (n.a. e n.c.) sono ritornate solo se non sono presenti le di Rischio Definite. /// /// /// public static List getCodiciClassiRischioEmit(List ptfList) { List returnCodiciClassiRischio = new List(); Dictionary classiRischioNonDefinite = new Dictionary(); SortedDictionary classiRischioDefinite = new SortedDictionary(); double valoreMassimo; double valoreMinimo; DataTable tb_RiskClass = (DataTable)HttpContext.Current.Cache["RiskClassEmit"]; if (tb_RiskClass == null) tb_RiskClass = LoadTabellaRischioCreditoEmit(); #region Recupero una lista di Classi rischio di credito foreach (ptfType ptf in ptfList) { //Controllo se la copertura è uguale a 0 if (ptf.stat.copertura == null) { if (!classiRischioNonDefinite.ContainsKey(-1)) classiRischioNonDefinite.Add(-1, "n.c."); } else { if (ptf.stat.copertura == 0) { if (!classiRischioNonDefinite.ContainsKey(-1)) classiRischioNonDefinite.Add(-1, "n.c."); } else { if (ptf.misureRischio.isAttivoRC == 0) { if (!classiRischioNonDefinite.ContainsKey(-2)) classiRischioNonDefinite.Add(-2, "n.a."); } else { //Confronto il rischio credito con la tabella RISKCLAS per ottenere la classe di rischio foreach (DataRow rw in tb_RiskClass.Rows) { valoreMassimo = double.Parse(rw["MAXVAL"].ToString()); valoreMinimo = double.Parse(rw["MINVAL"].ToString()); if (((ptf.misureRischio.rischioCredito) >= valoreMinimo) & ((ptf.misureRischio.rischioCredito) <= valoreMassimo)) { if (!classiRischioDefinite.ContainsKey(Convert.ToInt32(rw["CODICE"]))) classiRischioDefinite.Add(Convert.ToInt32(rw["CODICE"]), rw["DESCR"].ToString()); } } } } } } #endregion #region Rielaborazione della lista di ritorno delle classiRischioNonDefinite e classiRischioDefinite // Aggiungo le classiRischioDefinite if (classiRischioDefinite.Count > 0) { foreach (KeyValuePair item in classiRischioDefinite) { returnCodiciClassiRischio.Add(item.Key); } } if (classiRischioDefinite.Count == 0) { // Aggiungo le classiRischioNonDefinite if (classiRischioNonDefinite.Count > 0) { foreach (KeyValuePair item in classiRischioNonDefinite) { returnCodiciClassiRischio.Add(item.Key); } } } #endregion return returnCodiciClassiRischio; } /// /// Recupera un valore stringa che rappresenta la classe di rischio per Emittente. /// public static string getClasseRischioEmit(misureType aggregato, statType statCopertura) { try { string vClasserischio; double vMax; double vMin; vClasserischio = "n.a."; DataTable tb_RiskClass = (DataTable)HttpContext.Current.Cache["RiskClassEmit"]; if (tb_RiskClass == null) { tb_RiskClass = LoadTabellaRischioCreditoEmit(); } //Controllo se la copertura è uguale a 0 if (statCopertura == null) vClasserischio = "n.c."; else { if (statCopertura.copertura == 0) vClasserischio = "n.c."; else //Se l'aggregato isAttivo è uguale 0 restituisco N.A. if (aggregato.isAttivoRC == 0) vClasserischio = "n.a."; else //Confronto il rischio credito con la tabella RISKCLAS per ottenere la classe di rischio foreach (DataRow rw in tb_RiskClass.Rows) { vMax = double.Parse(rw["MAXVAL"].ToString()); vMin = double.Parse(rw["MINVAL"].ToString()); if (((aggregato.rischioCredito) >= vMin) & ((aggregato.rischioCredito) <= vMax)) return rw["DESCR"].ToString(); } } return vClasserischio; } catch (Exception ex) { throw new Exception(ex.Message + "; Classe: Prometeia; Metodo: getClasseRischioEmit ", ex.InnerException); } } /// /// Recupera un valore intero che indica il codice della classe di rischio per Emittente. /// Ritorna 0 per rischio credito = "n.a." oppure -1 per rischio credito uguale "n.c". /// public static int getCodiceClasseRischioEmit(misureType aggregato, statType statCopertura) { try { int codiceClasseRischioCredito; double vMax; double vMin; codiceClasseRischioCredito = 0; DataTable tb_RiskClass = (DataTable)HttpContext.Current.Cache["RiskClassEmit"]; if (tb_RiskClass == null) { tb_RiskClass = LoadTabellaRischioCreditoEmit(); } //Controllo se la copertura è uguale a 0 if (statCopertura == null) { codiceClasseRischioCredito = -1; } else { if (statCopertura.copertura == 0) codiceClasseRischioCredito = -1; else //Se l'aggregato isAttivo è uguale 0 restituisco N.A. if (aggregato.isAttivoRC == 0) codiceClasseRischioCredito = 0; else //Confronto il rischio credito con la tabella RISKCLAS per ottenere la classe di rischio foreach (DataRow rw in tb_RiskClass.Rows) { vMax = double.Parse(rw["MAXVAL"].ToString()); vMin = double.Parse(rw["MINVAL"].ToString()); if (((aggregato.rischioCredito) >= vMin) & ((aggregato.rischioCredito) <= vMax)) return Convert.ToInt32(rw["CODICE"]); } } return codiceClasseRischioCredito; } catch (Exception ex) { throw new Exception(ex.Message + "; Classe: Prometeia; Metodo: getCodiceClasseRischioEmit ", ex.InnerException); } } /// /// Recupera un valore stringa che rappresenta la classe di rischio. /// public static string getClasseRischio(misureType aggregato, statType statCopertura) { try { string vClasserischio; double vMax; double vMin; vClasserischio = "n.a."; //Popolo la tabella RISKCLASS DataTable tb_RiskClass = LoadTabellaRischioCredito(); //Controllo se la copertura è uguale a 0 if (statCopertura == null) { vClasserischio = "n.c."; } else { if (statCopertura.copertura == 0) vClasserischio = "n.c."; else //Se l'aggregato isAttivo è uguale 0 restituisco N.A. if (aggregato.isAttivoRC == 0) vClasserischio = "n.a."; else //Confronto il rischio credito con la tabella RISKCLAS per ottenere la classe di rischio foreach (DataRow rw in tb_RiskClass.Rows) { vMax = double.Parse(rw["MAXVAL"].ToString()); vMin = double.Parse(rw["MINVAL"].ToString()); if (((aggregato.rischioCredito) >= vMin) & ((aggregato.rischioCredito) <= vMax)) return rw["DESCR"].ToString(); } } return vClasserischio; } catch (Exception ex) { throw new Exception(ex.Message + "; Classe: Prometeia; Metodo: getClasseRischio ", ex.InnerException); } } /// /// Recupera un valore stringa che rappresenta la classe di rischio. [Classe A, Classe B...] /// /// /// /// Passare string.empty per bypassare controllo sul tipoprodotto che impone NC per i CC /// /// public static string getClasseRischio(decimal rischiodicredito, decimal copertura, string tipoprodotto, int isattivorc) { string returnValueRischioCredito = "n.a."; if (tipoprodotto.ToLower() == "cc") return "n.a."; if (copertura.Equals(0)) return "n.c."; if (isattivorc.Equals(0)) return "n.a."; decimal vMin = 0; decimal vMax = 0; //Popolo la tabella RISKCLASS DataTable tb_RiskClass = LoadTabellaRischioCredito(); foreach (DataRow rw in tb_RiskClass.Rows) { vMax = Convert.ToDecimal(rw["MAXVAL"]); vMin = Convert.ToDecimal(rw["MINVAL"]); if (((rischiodicredito) >= vMin) & ((rischiodicredito) <= vMax)) returnValueRischioCredito = rw["DESCR"].ToString(); } return returnValueRischioCredito; } /// /// Recupera un valore stringa che rappresenta la classe di rischio. [Rischio 1/10, Rischio 2/10...] /// /// /// /// Passare string.empty per bypassare controllo sul tipoprodotto che impone NC per i CC /// /// public static string getClasseRischioEmit(decimal rischiodicredito, decimal copertura, string tipoprodotto, int isattivorc) { string returnValueRischioCredito = "n.a."; if (tipoprodotto.ToLower() == "cc") return "n.a."; if (copertura.Equals(0)) return "n.c."; if (isattivorc.Equals(0)) return "n.a."; decimal vMin = 0; decimal vMax = 0; //Popolo la tabella RISKCLASS DataTable tb_RiskClass = LoadTabellaRischioCreditoEmit(); foreach (DataRow rw in tb_RiskClass.Rows) { vMax = Convert.ToDecimal(rw["MAXVAL"]); vMin = Convert.ToDecimal(rw["MINVAL"]); if (((rischiodicredito) >= vMin) & ((rischiodicredito) <= vMax)) returnValueRischioCredito = rw["DESCR"].ToString(); } return returnValueRischioCredito; } /// /// Decodifica la classe di rischio passata in input e ritorna il codice relativo (int) della classe rischio. /// Ritorna -1 se non trova la classe, 5 per NA, 6 per NC /// /// Classe A, Classe B, Classe C ... /// Il codice (1,2,3,4) public static int DecodeClasseRischio(string classe) { int ret = -1; DataTable dtRischioCredito = LoadTabellaRischioCredito(); foreach (DataRow row in dtRischioCredito.Rows) if (row["DESCR"].ToString().ToLower().Equals(classe.ToLower())) { ret = Convert.ToInt32(row["COD"]); break; } return ret; } /// /// Decodifica il codice della classe rischio passata in input e ritorna la descrizione della classe rischio. /// Ritorna "n.a." se non trova la classe /// /// 1,2,3... /// La descrizione della classe di rischio (Classe A, Classe B, Classe C ...) public static string DecodeClasseRischio(int codiceclasse) { string ret = "n.a."; DataTable dtRischioCredito = LoadTabellaRischioCredito(); foreach (DataRow row in dtRischioCredito.Rows) if (Convert.ToInt32(row["COD"]).Equals(codiceclasse)) { ret = row["DESCR"].ToString(); break; } return ret; } private static messaggioType CreaRichiestaPortafoglioModello(DataTable dtQuestionario, DataTable dtPosizioniCliente, DataRow drDatiPortModello) { #region Variabili costruzione oggetto MessageType //la query è diversa dalla 56 non c'è la needarea il nome la descrizione dell'aggregato dovrebbe essere il nome dell'intemediario //non sarebbe meglio fare un ptf per ogni intermediario? //al posto del codice isin sembra che utilizzano l'asset class messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaPTFModelloType richiestaPortafoglioModello; parametriPTFModelloType parametriPTFModello; #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaPortafoglioModello = new richiestaPTFModelloType(); richiesta.Item = richiestaPortafoglioModello; string descrizionePtf = ""; #endregion #region HeaderMessage hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType #region RichiestaPortafoglioModello #region Area Di Bisogno richiestaPortafoglioModello.areaBisogno = (int)drDatiPortModello["NEEDAREA"]; if (richiestaPortafoglioModello.areaBisogno == 3) descrizionePtf = "INV"; else if (richiestaPortafoglioModello.areaBisogno == 1) descrizionePtf = "RIS"; #endregion #region Parametri PTF Modello parametriPTFModello = new parametriPTFModelloType(); parametriPTFModello.orizzonteTemporale = (int)drDatiPortModello["ORIZZONTE_TEMPORALE"]; ; parametriPTFModello.tolleranzaRischio = (int)drDatiPortModello["PROFILO_RISCHIO"]; ; richiestaPortafoglioModello.parametriPTFModello = parametriPTFModello; #endregion #endregion #endregion #region I Chiamata Prometeia messaggioType retMessageObj = null; string ms = SerializeMessage(mt); IPrometeia proxy = XmlRpcProxyGen.Create(); proxy.Url = ConfigurationManager.AppSettings["XMLRPCURL"].ToString(); //da laboratorio: string _proxy; if (ConfigurationManager.AppSettings["PROXYXMLRPC"] != null) _proxy = ConfigurationManager.AppSettings["PROXYXMLRPC"].ToString(); else _proxy = ""; if (_proxy.Trim() != "") { //proxy.Proxy = new WebProxy(_proxy); //non disponibile per problemi sistemistici // Questa impostazione è utilizzata solo internamente ad HP. // E' un rimedio al fatto che http://paa.prometeia.it non è più raggiungibile per problemi sistemistici. // Non essendo piu disponibile utilizzo http://134.44.28.136:9882 aggiungendo delle eccezioni ai settaggi del proxy da utilizzare. // Se dovesse di nuovo essere disponibile è suff scommetare "//non disponibile per problemi sistemistici" ed eliminare il codice sottostante List bypasslist = new List(); bypasslist.Add(@"localhost"); bypasslist.Add(@"127.0.0.1"); bypasslist.Add(@"134.44.28.136"); WebProxy proxyLocale = new WebProxy(_proxy); proxyLocale.BypassList = bypasslist.ToArray(); proxy.Proxy = proxyLocale; } string retMessage = proxy.AnalizzaRichiesta(ms.TrimStart().TrimEnd()); retMessageObj = DeserializeMessage(retMessage); #endregion #region II Chiamata Prometeia bodyMessaggioType rispostaBodyMessage = retMessageObj.bodyMessaggio; rispostaType rispostaModello = (rispostaType)rispostaBodyMessage.Item; rispostaPTFModelloType rispostaPTFModello = (rispostaPTFModelloType)rispostaModello.Item; soluzioniType soluzioni = rispostaPTFModello.soluzioni; List strumenti2 = new List(); foreach (assetAllocationItemType item in soluzioni.assetAllocation.assetAllocationItem) { strumentoType strumento = new strumentoType(); ProdottiKeyType chiave = new ProdottiKeyType(); if (item.codice.Equals(CodiciPrometeia._MNEU)) { chiave.codiceIsin = CodiciPrometeia._MNEU; chiave.codiceMaf = CodiciPrometeia._MNEU; chiave.codiceAdeguatezza = CodiciPrometeia._JPEC6ML; } else if (item.codice.Equals(CodiciPrometeia._OBGVEUBR)) { chiave.codiceIsin = CodiciPrometeia._OBGVEUBR; chiave.codiceMaf = CodiciPrometeia._OBGVEUBR; chiave.codiceAdeguatezza = CodiciPrometeia._JNEU1R3; } else if (item.codice.Equals(CodiciPrometeia._OBGVEUML)) { chiave.codiceIsin = CodiciPrometeia._OBGVEUML; chiave.codiceMaf = CodiciPrometeia._OBGVEUML; chiave.codiceAdeguatezza = CodiciPrometeia._JAGOV3E; } else if (item.codice.Equals(CodiciPrometeia._OBGVIN)) { chiave.codiceIsin = CodiciPrometeia._OBGVIN; chiave.codiceMaf = CodiciPrometeia._OBGVIN; chiave.codiceAdeguatezza = CodiciPrometeia._SBNMEUE; } else if (item.codice.Equals(CodiciPrometeia._OBGLINLK)) { chiave.codiceIsin = CodiciPrometeia._OBGLINLK; chiave.codiceMaf = CodiciPrometeia._OBGLINLK; chiave.codiceAdeguatezza = CodiciPrometeia._MLGGILE; } else if (item.codice.Equals(CodiciPrometeia._OBCPEU)) { chiave.codiceIsin = CodiciPrometeia._OBCPEU; chiave.codiceMaf = CodiciPrometeia._OBCPEU; chiave.codiceAdeguatezza = CodiciPrometeia._IBCRPAL; } else if (item.codice.Equals(CodiciPrometeia._OBCPNOEU)) { chiave.codiceIsin = CodiciPrometeia._OBCPNOEU; chiave.codiceMaf = CodiciPrometeia._OBCPNOEU; chiave.codiceAdeguatezza = CodiciPrometeia._MLGCORE; } else if (item.codice.Equals(CodiciPrometeia._OBPSEM)) { chiave.codiceIsin = CodiciPrometeia._OBPSEM; chiave.codiceMaf = CodiciPrometeia._OBPSEM; chiave.codiceAdeguatezza = CodiciPrometeia._JPMGCOC_USD; } else if (item.codice.Equals(CodiciPrometeia._OBGLHGYD)) { chiave.codiceIsin = CodiciPrometeia._OBGLHGYD; chiave.codiceMaf = CodiciPrometeia._OBGLHGYD; chiave.codiceAdeguatezza = CodiciPrometeia._MLHGBCU; } else if (item.codice.Equals(CodiciPrometeia._AZEU)) { chiave.codiceIsin = CodiciPrometeia._AZEU; chiave.codiceMaf = CodiciPrometeia._AZEU; chiave.codiceAdeguatezza = CodiciPrometeia._MSEROP; } else if (item.codice.Equals(CodiciPrometeia._AZUSV)) { chiave.codiceIsin = CodiciPrometeia._AZUSV; chiave.codiceMaf = CodiciPrometeia._AZUSV; chiave.codiceAdeguatezza = CodiciPrometeia._MSNAMR; } else if (item.codice.Equals(CodiciPrometeia._AZJP)) { chiave.codiceIsin = CodiciPrometeia._AZJP; chiave.codiceMaf = CodiciPrometeia._AZJP; chiave.codiceAdeguatezza = CodiciPrometeia._MSJPAN; } else if (item.codice.Equals(CodiciPrometeia._AZPCEXJP)) { chiave.codiceIsin = CodiciPrometeia._AZPCEXJP; chiave.codiceMaf = CodiciPrometeia._AZPCEXJP; chiave.codiceAdeguatezza = CodiciPrometeia._MSPXJF; } else if (item.codice.Equals(CodiciPrometeia._AZEM)) { chiave.codiceIsin = CodiciPrometeia._AZEM; chiave.codiceMaf = CodiciPrometeia._AZEM; chiave.codiceAdeguatezza = CodiciPrometeia._MSEMKF; } else if (item.codice.Equals(CodiciPrometeia._AZ)) { chiave.codiceIsin = CodiciPrometeia._AZ; chiave.codiceMaf = CodiciPrometeia._AZ; chiave.codiceAdeguatezza = CodiciPrometeia._MSACWF; } else if (item.codice.Equals(CodiciPrometeia._OB)) { chiave.codiceIsin = CodiciPrometeia._OB; chiave.codiceMaf = CodiciPrometeia._OB; chiave.codiceAdeguatezza = CodiciPrometeia._SBWGEUE; } else if (item.codice.Equals(CodiciPrometeia._MN)) { chiave.codiceIsin = CodiciPrometeia._MN; chiave.codiceMaf = CodiciPrometeia._MN; chiave.codiceAdeguatezza = CodiciPrometeia._MSWRLD; } else { chiave.codiceIsin = CodiciPrometeia._AL; chiave.codiceMaf = CodiciPrometeia._AL; chiave.codiceAdeguatezza = ""; } strumento.risparmioAnnuo = 0.00; strumento.nome = item.codice; strumento.capitale = item.peso; strumento.valore = item.peso; strumento.chiave = chiave; if (strumento.chiave.codiceIsin.Trim() != "") { strumenti2.Add(strumento); } } Aggregato aggregato; ptfType ptf; ptfType ptfGlobale = new ptfType(); ptfGlobale.descrizione = descrizionePtf; foreach (strumentoType str in strumenti2) { aggregato = new Aggregato(); ptf = new ptfType(); saldoType saldo = new saldoType(); saldo.chiave = str.chiave; saldo.valoreCtv = str.capitale; saldo.valoreCtvSpecified = true; saldo.valore = str.valore; ptf.AddSaldo(saldo); ptf.AddChildSaldoToAggregate(); aggregato.Add(ptf); aggregato.AddCollectionAggregateToAggregate(); ptf.AddChildToAggregate(); ptfGlobale.AddAggregato(ptf); ptfGlobale.AddChildToAggregate(); } #endregion richiestaVaRPortafoglioType richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; richiestaVarPortafoglio.Add(ptfGlobale); richiestaVarPortafoglio.AddChildToAggregate(); } catch (Exception ex) { throw new Exception(ex.Message + "; Classe: Prometeia; Metodo: CreaRichiestaPortafoglioModello", ex.InnerException); } return mt; } private static messaggioType CreaRichiestaPatrimonioComplessivo(DataTable dtPrometeia56, DataTable dtPrometeia23, DataTable dtContrattoSintesiPerCliente, DataTable dtCC) { messaggioType mtPatrimonioBF = null; messaggioType mtPatrimonioAltriIstituti = null; ptfType ptfTotalePatrimonioBF = null; ptfType ptfTotalePatrimonioAltriIstituti = null; messaggioType mt = new messaggioType(); try { // Creo il ramo per patrimonio casa mtPatrimonioBF = CreaRichiestaVaRPortafoglioSezione56_BisCC(dtPrometeia56, dtContrattoSintesiPerCliente, dtCC); // Creo il ramo per patrimonio terzi mtPatrimonioAltriIstituti = CreaRichiestaVaRPortafoglioSezione23(dtPrometeia23, dtCC); // Creo il ramo per patrimonio complessivo ptfTotalePatrimonioBF = ((richiestaVaRPortafoglioType)((richiestaType)mtPatrimonioBF.bodyMessaggio.Item).Item).FindPtf("TOTALEPATRIMONIOBF"); if (dtPrometeia23.Rows.Count > 0 || dtCC.Rows.Count > 0) ptfTotalePatrimonioAltriIstituti = ((richiestaVaRPortafoglioType)((richiestaType)mtPatrimonioAltriIstituti.bodyMessaggio.Item).Item).FindPtf("TOTALEALTRIISTITUTI"); #region Variabili costruzione oggetto MessageType headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; Aggregato aggregato; #endregion #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; #region HeaderMessage hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); #endregion // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; ptfType ptfTotale = new ptfType(); ptfTotale.descrizione = "TOTALEPATRIMONIOCOMPLESSIVO"; aggregato = new Aggregato(); aggregato.Add(ptfTotalePatrimonioBF); if (ptfTotalePatrimonioAltriIstituti != null) aggregato.Add(ptfTotalePatrimonioAltriIstituti); aggregato.AddCollectionAggregateToAggregate(); ptfTotale.aggregato = aggregato.ArrayPtf; richiestaVarPortafoglio.Add(ptfTotale); richiestaVarPortafoglio.AddChildToAggregate(); #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Metodo: CreaRichiestaPatrimonioComplessivo", ex.InnerException); } return mt; } public static DataTable GetContrattoSintesiPerCliente(PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente chiave, PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient info, int chiaveclientepb) { GlobalPositionWS gpWS = new GlobalPositionWS(); DataTable dtGetContrattoSintesiPerCliente = gpWS.GetContrattoSintesiPerCliente(chiave, info, chiaveclientepb); return dtGetContrattoSintesiPerCliente; } /// /// /// /// /// /// /// public static DataTable GetContrattoContoCorrenteSaldo(PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente chiave, string conto, PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient info) { GlobalPositionWS gpWS = new GlobalPositionWS(); DataTable dtContrattoContoCorrenteSaldo = gpWS.GetContrattoContoCorrenteSaldo(chiave, conto, info); return dtContrattoContoCorrenteSaldo; } /// /// Recupera un datatable contenente le partite viaggianti in investimento /// /// /// /// public static DataTable GetPartiteViaggiantiInv(PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente chiave, PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient info, int chiaveclientepb) { GlobalPositionWS gpWS = new GlobalPositionWS(); DataTable dtGetPartiteViaggiantiInv = gpWS.GetPartiteViaggiantiInv(chiave, info, chiaveclientepb); return dtGetPartiteViaggiantiInv; } /// /// Recupera un datatable contenente le partite viaggianti in disinvestimento /// /// /// /// public static DataTable GetPartiteViaggiantiDisInv(PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente chiave, PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient info, int chiaveclientepb) { GlobalPositionWS gpWS = new GlobalPositionWS(); DataTable dtGetPartiteViaggiantiDisInv = gpWS.GetPartiteViaggiantiDisInv(chiave, info, chiaveclientepb); return dtGetPartiteViaggiantiDisInv; } /// /// Recupera un datatable contenente le partite viaggianti /// /// /// /// public static DataTable GetPartiteViaggianti(PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente chiave, PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient info, int chiaveclientepb) { GlobalPositionWS gpWS = new GlobalPositionWS(); DataTable dtGetPartiteViaggianti = gpWS.GetPartiteViaggianti(chiave, info, chiaveclientepb); return dtGetPartiteViaggianti; } public static DataTable GetContrattoSintesiPerClienteCaricamentoAsul(PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente chiave, PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient info, int chiaveclientepb) { GlobalPositionWS gpWS = new GlobalPositionWS(); DataTable dtGetContrattoSintesiPerCliente = gpWS.GetContrattoSintesiPerClienteCaricamentoAsul(chiave, info, chiaveclientepb); return dtGetContrattoSintesiPerCliente; } public static DataTable GetContrattoUnitLinkedSaldo(PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente chiave, string codiceContratto, PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient info, int chiaveclientepb) { GlobalPositionWS gpWS = new GlobalPositionWS(); DataTable dtGetContrattoUnitLinkedSaldo = gpWS.GetContrattoUnitLinkedSaldo(chiave, codiceContratto, info, chiaveclientepb); return dtGetContrattoUnitLinkedSaldo; } private static DataRow[] FindContrattoSintesiPerCliente(DataRow rwContrattiDb, DataTable dtContrattoSintesiPerCliente) { #region Dichiarazione variabili string contratto = ""; string tipoProdotto = ""; double ctv = 0; string codiceisin = ""; string codicemaf = ""; string codiceinterno = ""; string codicesottoprodotto = ""; string conto = ""; string rubricato = ""; string custodia_garanzia = ""; string numero_polizza = ""; string pctkey_termid = ""; int pctkey_anno = 0; string pctkey_prog = ""; string pctkey = ""; #endregion #region Assegnazione Variabili Chiave position ID // contratto if (rwContrattiDb["CONTRATTO"] != DBNull.Value) contratto = ((string)rwContrattiDb["CONTRATTO"]).ToUpper().Trim(); // TIpo Prodotto if (rwContrattiDb["TIPOPRODOTTO"] != DBNull.Value) tipoProdotto = ((string)rwContrattiDb["TIPOPRODOTTO"]).ToUpper().Trim(); // Controvalre if (rwContrattiDb["Controvalore"] != DBNull.Value) ctv = Convert.ToDouble(rwContrattiDb["Controvalore"]); //codiceisin; if (rwContrattiDb["codiceisin"] != DBNull.Value) codiceisin = rwContrattiDb["codiceisin"].ToString(); //codicemaf; if (rwContrattiDb["codicemaf"] != DBNull.Value) codicemaf = rwContrattiDb["codicemaf"].ToString(); //codiceinterno; if (rwContrattiDb["codiceinterno"] != DBNull.Value) codiceinterno = rwContrattiDb["codiceinterno"].ToString(); //codicesottoprodotto; if (rwContrattiDb["codicesottoprodotto"] != DBNull.Value) codicesottoprodotto = rwContrattiDb["codicesottoprodotto"].ToString(); //conto; if (rwContrattiDb["conto"] != DBNull.Value) conto = rwContrattiDb["conto"].ToString(); //rubricato if (rwContrattiDb["rubricato"] != DBNull.Value) rubricato = rwContrattiDb["rubricato"].ToString(); //custodia_garanzia if (rwContrattiDb["custodia_garanzia"] != DBNull.Value) custodia_garanzia = rwContrattiDb["custodia_garanzia"].ToString(); //numero_polizza if (rwContrattiDb["numero_polizza"] != DBNull.Value) numero_polizza = rwContrattiDb["numero_polizza"].ToString(); #region Creazione della PCTKEY //pctkey_termid if (rwContrattiDb["pctkey_termid"] != DBNull.Value) pctkey_termid = rwContrattiDb["pctkey_termid"].ToString(); //pctkey_anno if (rwContrattiDb["pctkey_termid"] != DBNull.Value) pctkey_anno = Convert.ToInt32(rwContrattiDb["pctkey_anno"]); //pctkey_prog if (rwContrattiDb["pctkey_prog"] != DBNull.Value) pctkey_prog = rwContrattiDb["pctkey_prog"].ToString(); if (pctkey_termid != "" && pctkey_anno != 0 && pctkey_prog != "") pctkey = pctkey_termid + "/" + pctkey_anno.ToString() + "/" + pctkey_prog; else pctkey = ""; #endregion #endregion #region Costruzione StringBuilder expression filter StringBuilder expression = new StringBuilder(); //codiceMAF expression.Append("(codiceMAF like '"); expression.Append(codicemaf); expression.Append("' "); if (codicemaf == "") expression.Append(" OR codiceMAF is null "); expression.Append(") AND "); //codiceInterno expression.Append("(codiceinterno like '"); expression.Append(codiceinterno); expression.Append("' "); if (codiceinterno == "") expression.Append(" OR codiceinterno is null "); expression.Append(") AND "); //codicesottoProdotto expression.Append("(codicesottoProdotto like '"); expression.Append(codicesottoprodotto); expression.Append("' "); if (codicesottoprodotto == "") expression.Append(" OR codicesottoProdotto is null "); expression.Append(") AND "); //codicesottoProdotto expression.Append("(codiceContratto like '"); expression.Append(contratto); expression.Append("' "); if (contratto == "") expression.Append(" OR codiceContratto is null "); expression.Append(") AND "); //conto expression.Append("(conto like '"); expression.Append(conto); expression.Append("' "); if (conto == "") expression.Append(" OR conto is null "); expression.Append(") AND "); //Rubricato expression.Append("(Rubricato like '"); expression.Append(rubricato); expression.Append("' "); if (rubricato == "") expression.Append(" OR Rubricato is null "); expression.Append(") AND "); //CustodiaGaranzia expression.Append("(CustodiaGaranzia like '"); expression.Append(custodia_garanzia); expression.Append("' "); if (custodia_garanzia == "") expression.Append(" OR CustodiaGaranzia is null "); expression.Append(") AND "); //numeroPolizza expression.Append("(numeroPolizza like '"); expression.Append(numero_polizza); expression.Append("' "); if (numero_polizza == "") expression.Append(" OR numeroPolizza is null "); expression.Append(") AND "); //pctKey expression.Append("(pctKey like '"); expression.Append(pctkey); expression.Append("' "); if (pctkey == "") expression.Append(" OR pctKey is null "); expression.Append(") "); #endregion DataRow[] drArray = dtContrattoSintesiPerCliente.Select(expression.ToString()); return drArray; } private static List MakeDataSetSezione21(DataTable dtDistinctNeedArea, DataTable dtRichiesta) { List ListDataView = new List(); DataViewSezione21 view; foreach (DataRow rwdistinct in dtDistinctNeedArea.Rows) { view = new DataViewSezione21(); view.Table = dtRichiesta.Copy(); view.RowFilter = "NEEDAREA like '" + rwdistinct["NEEDAREA"].ToString().Trim().ToUpper() + "'"; //view.Sort = "CompanyName DESC"; view.Descrizione = rwdistinct["NEEDAREA"].ToString().Trim().ToUpper(); ListDataView.Add(view); } return ListDataView; } private static void CreaAggregatoSezione21(ptfType ptf, string rwAsulString, string tipoProdottoAsul, DataRowView rw, int chiaveclientepb) { Aggregato aggregatoAsul; ptfType ptfAsul; saldoType saldo; ProdottiKeyType pkt; Aggregato aggregatoNonAsul; ptfType ptfNonAsul; if (rwAsulString.Equals(tipoProdottoAsul)) { #region SALDO ASUL aggregatoAsul = new Aggregato(); ptfAsul = new ptfType(); if (rw["CONTRATTO"].ToString() != "") ptfAsul.descrizione = rw["CONTRATTO"].ToString(); ptfAsul.descrizione += "|"; if (rw["CODICEISIN"].ToString() != "") ptfAsul.descrizione += rw["CODICEISIN"].ToString(); else if (rw["CODICEADEGUATEZZA"].ToString() != "") ptfAsul.descrizione += rw["CODICEADEGUATEZZA"].ToString(); else if (rw["CODICEMAF"].ToString() != "") ptfAsul.descrizione += rw["CODICEMAF"].ToString(); #region Chiamata la WSGLOBALPOSITION PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente _chiaveCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente(); _chiaveCliente.codiceAgente = codiceAgente; _chiaveCliente.codicefiscale = codiceFiscale; _chiaveCliente.codiceRete = codiceRete; _chiaveCliente.potenzialeClienteNAC = true; PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient _infoCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient(); _infoCliente.codiceApplicazione = codiceApplicazione; _infoCliente.codiceRete = codiceRete; _infoCliente.versioneDatabaseSIMPB = versioneDBSimpb; string codiceContratto = rw["CONTRATTO"].ToString().Trim(); GlobalPositionWS gpWS = new GlobalPositionWS(); DataTable dtAsul = gpWS.GetContrattoUnitLinkedSaldo(_chiaveCliente, codiceContratto, _infoCliente, chiaveclientepb); #endregion foreach (DataRow rwAsul in dtAsul.Rows) { saldo = new saldoType(); //if (rw["VALORE"] != DBNull.Value) // saldo.valore = Convert.ToDouble(rw["VALORE"].ToString()); //if (rw["VALORESINTESI"] == DBNull.Value || (double)rw["VALORESINTESI"] == 0) // saldo.valore = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); //else // saldo.valore = Convert.ToDouble(rw["VALORESINTESI"].ToString()); if (rwAsul["CONTROVALORE"] != DBNull.Value) { saldo.valore = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); saldo.valoreCtv = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); } saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //CODICEADEGUATEZZA if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceAdeguatezza = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceSottoprodotto = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceSottoprodotto = ""; //if (rwAsul["ISINFITTIZIO"] != DBNull.Value) // pkt.codiceInterno = rwAsul["ISINFITTIZIO"].ToString(); //if (rw["CODICEISIN"] != DBNull.Value) // pkt.codiceIsin = rw["CODICEISIN"].ToString(); //if (rw["CODICEMAF"] != DBNull.Value) // pkt.codiceMaf = rw["CODICEMAF"].ToString(); saldo.chiave = pkt; ptfAsul.AddSaldo(saldo); } ptfAsul.AddChildSaldoToAggregate(); aggregatoAsul.Add(ptfAsul); aggregatoAsul.AddCollectionAggregateToAggregate(); ptfAsul.AddChildToAggregate(); ptf.AddAggregato(ptfAsul); ptf.AddChildToAggregate(); #endregion } else { aggregatoNonAsul = new Aggregato(); ptfNonAsul = new ptfType(); if (rw["CONTRATTO"].ToString() != "") ptfNonAsul.descrizione = rw["CONTRATTO"].ToString(); ptfNonAsul.descrizione += "|"; if (rw["CODICEISIN"].ToString() != "") ptfNonAsul.descrizione += rw["CODICEISIN"].ToString(); else if (rw["CODICEADEGUATEZZA"].ToString() != "") ptfNonAsul.descrizione += rw["CODICEADEGUATEZZA"].ToString(); else if (rw["CODICEMAF"].ToString() != "") ptfNonAsul.descrizione += rw["CODICEMAF"].ToString(); #region SALDO NON ASUL saldo = new saldoType(); //if (rw["VALORE"] != DBNull.Value) // saldo.valore = Convert.ToDouble(rw["VALORE"].ToString()); if (rw["VALORESINTESI"] == DBNull.Value || (double)rw["VALORESINTESI"] == 0) saldo.valore = Convert.ToDouble(rw["CONTROVALORE"].ToString()); else saldo.valore = Convert.ToDouble(rw["VALORESINTESI"].ToString()); if (rw["CONTROVALORE"] != DBNull.Value) saldo.valoreCtv = Convert.ToDouble(rw["CONTROVALORE"].ToString()); saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); if (rw["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = rw["CODICEADEGUATEZZA"].ToString(); else pkt.codiceAdeguatezza = ""; if (rw["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = rw["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; if (rw["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = rw["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (rw["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = rw["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; saldo.chiave = pkt; ptfNonAsul.AddSaldo(saldo); ptfNonAsul.AddChildSaldoToAggregate(); aggregatoNonAsul.Add(ptfNonAsul); aggregatoNonAsul.AddCollectionAggregateToAggregate(); ptfNonAsul.AddChildToAggregate(); ptf.AddAggregato(ptfNonAsul); ptf.AddChildToAggregate(); #endregion } } private static messaggioType CreaRichiestaVaRPortafoglioSezione19(DataTable dt) { #region Variabili costruzione oggetto MessageType //la query è diversa dalla 56 non c'è la needarea il nome la descrizione dell'aggregato dovrebbe essere il nome dell'intemediario //non sarebbe meglio fare un ptf per ogni intermediario? //al posto del codice isin sembra che utilizzano l'asset class messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaPTFModelloType richiestaPortafoglioModello; parametriPTFModelloType parametriPTFModello; #endregion try { #region List strumenti2 = new List(); foreach (DataRow rw in dt.Rows) { strumentoType strumento = new strumentoType(); ProdottiKeyType chiave = new ProdottiKeyType(); chiave.codiceIsin = rw["codiceisin"].ToString(); chiave.codiceMaf = rw["codicemaf"].ToString(); chiave.codiceAdeguatezza = rw["codiceadeguatezza"].ToString(); strumento.risparmioAnnuo = 0.00; strumento.nome = rw["assetname"].ToString(); strumento.capitale = Convert.ToDouble(rw["peso"]); strumento.valore = Convert.ToDouble(rw["peso"]); strumento.chiave = chiave; if (strumento.chiave.codiceIsin.Trim() != "") { strumenti2.Add(strumento); } } #endregion #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVaRPortafoglioType richiestaPatrimonioFinanziario = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaPatrimonioFinanziario; richiestaPatrimonioFinanziario.alpha = Convert.ToDouble(ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaPatrimonioFinanziario.alphaSpecified = true; // hp - ST richiestaPatrimonioFinanziario.hp = Convert.ToInt32(ConfigurationManager.AppSettings["HP"].ToString()); richiestaPatrimonioFinanziario.hpSpecified = true; Aggregato aggregato; ptfType ptf; ptfType ptfGlobale = new ptfType(); ptfGlobale.descrizione = "RISCHIOPATRIMONIOFINANZIARIO"; foreach (strumentoType str in strumenti2) { aggregato = new Aggregato(); ptf = new ptfType(); ptf.descrizione = str.nome; saldoType saldo = new saldoType(); saldo.chiave = str.chiave; saldo.valoreCtv = str.capitale; saldo.valoreCtvSpecified = true; saldo.valore = str.valore; ptf.AddSaldo(saldo); ptf.AddChildSaldoToAggregate(); aggregato.Add(ptf); aggregato.AddCollectionAggregateToAggregate(); ptf.AddChildToAggregate(); ptfGlobale.AddAggregato(ptf); ptfGlobale.AddChildToAggregate(); } #endregion richiestaPatrimonioFinanziario.Add(ptfGlobale); richiestaPatrimonioFinanziario.AddChildToAggregate(); } catch (Exception ex) { throw new Exception(ex.Message + "; Classe: Prometeia; Metodo: CreaRichiestaVaRPortafoglioSezione19", ex.InnerException); } return mt; } private static void AggiungiColonnaTipoProdottoContrattoSintesi(ref DataTable dt, DataTable dtContrattoSintesi) { if (!dt.Columns.Contains("TIPOPRODOTTOSINTESI")) { DataColumn colTipoProdottoContrattoSintesi = new DataColumn("TIPOPRODOTTOSINTESI", typeof(string)); dt.Columns.Add(colTipoProdottoContrattoSintesi); DataColumn colValoreContrattoSintesi = new DataColumn("VALORESINTESI", typeof(double)); dt.Columns.Add(colValoreContrattoSintesi); DataColumn colCTVContrattoSintesi = new DataColumn("CTVSINTESI", typeof(double)); dt.Columns.Add(colCTVContrattoSintesi); DataColumn colDataSottoscrizioneContrattoSintesi = new DataColumn("DATASOTTOSCRIZIONESINTESI", typeof(string)); dt.Columns.Add(colDataSottoscrizioneContrattoSintesi); DataColumn colPerformanceYTD = new DataColumn("PERFORMANCEYTDSINTESI", typeof(double)); dt.Columns.Add(colPerformanceYTD); DataColumn colPerformanceDS = new DataColumn("PERFORMANCEDSSINTESI", typeof(double)); dt.Columns.Add(colPerformanceDS); //K Skandia DataColumn colIsinDaCS = new DataColumn("ISIN_ASU2", typeof(string)); dt.Columns.Add(colIsinDaCS); } StringBuilder expression = new StringBuilder(); if (dtContrattoSintesi != null) { foreach (DataRow rw in dtContrattoSintesi.Rows) { // codice contratto expression.Append("(contratto like '"); expression.Append(rw["codiceContratto"].ToString()); expression.Append("%') and "); // rw riga contenente i contratti switch (rw["TIPOPRODOTTO"].ToString()) { case "FI": case "GE": case "GP": case "ASUL": case "ASU1": case "ASU2": //K Skandia case "ASVI": case "ASCM": case "CC": // Da confrontare: codice_Interno, codice_SottoProdotto // codice interno expression.Append("(CodiceInterno like '"); expression.Append(rw["codiceInterno"].ToString()); expression.Append("' "); if (rw["codiceInterno"].ToString() == "") expression.Append(" OR CodiceInterno is null "); expression.Append(") AND "); // codice_SottoProdotto expression.Append("(codicesottoprodotto like '"); expression.Append(rw["codicesottoProdotto"].ToString()); expression.Append("' "); if (rw["codicesottoProdotto"].ToString() == "") expression.Append(" OR codicesottoprodotto is null ) "); else expression.Append(" ) "); //K Skandia e GP Eligo if (rw["TIPOPRODOTTO"].ToString() == "ASU2" || rw["TIPOPRODOTTO"].ToString() == "GP") { //Qualora l'ISIN da WS non fosse valorizzato il filtro che si sta creando non risulterebbe efficace //determinando un'estrazione di n a 1, a cascata la chiamata a Prometeia sarebbe disastrosamente sbagliata //Quindi provvedo ad inchiodare tutto solevando un'eccezione. if (rw["ISIN"] == DBNull.Value || rw["ISIN"].ToString().Trim() == "") { string msg = "Errore da GlobalPosition : ISIN non valorizzato per prodotto skandia, impossibile eseguire il match con le info del DB." + "\n Info da WS : " + "\n CodInterno=" + rw["codiceInterno"].ToString() + "\n CodSottoprodotto=" + rw["codicesottoProdotto"].ToString() + "\n CTV=" + rw["CTV"].ToString(); throw new Exception(msg); } expression.Append(" AND codiceisin = '").Append(rw["ISIN"].ToString()).Append("'"); } break; case "DT": // codice interno expression.Append("(CodiceInterno like '"); expression.Append(rw["codiceInterno"].ToString()); expression.Append("%' "); if (rw["codiceInterno"].ToString() == "") expression.Append(" OR CodiceInterno is null "); expression.Append(") AND "); // conto expression.Append("(conto like '"); expression.Append(rw["conto"].ToString()); expression.Append("%' "); if (rw["conto"].ToString() == "") expression.Append(" OR conto is null "); expression.Append(") AND "); // rubricato expression.Append("(rubricato like '"); expression.Append(rw["rubricato"].ToString()); expression.Append("%' "); if (rw["rubricato"].ToString() == "") expression.Append(" OR rubricato is null "); expression.Append(")"); //// codice_SottoProdotto //if (dt.Columns.Contains("controvalore_attuale")) // expression.Append("(controvalore_attuale = "); //else // expression.Append("(Controvalore = "); //expression.Append(rw["ctv"].ToString().Replace(",", ".")); ////expression.Append("D' "); //if (rw["ctv"].ToString() == "") // expression.Append(" OR Controvalore is null ) "); //else // expression.Append(" ) "); break; case "ASD": //codiceInterno // codice interno expression.Append("(CodiceInterno like '"); expression.Append(rw["codiceInterno"].ToString()); expression.Append("' "); if (rw["codiceInterno"].ToString() == "") expression.Append(" OR CodiceInterno is null) "); else expression.Append(" ) "); break; case "GES": //codiceMAF expression.Append("(codicemaf like '"); expression.Append(rw["codiceMaf"].ToString()); expression.Append("' "); if (rw["codiceMaf"].ToString() == "") expression.Append(" OR codicemaf is null "); expression.Append(") AND "); // codice interno expression.Append("(CodiceInterno like '"); expression.Append(rw["codiceInterno"].ToString()); expression.Append("' "); if (rw["codiceInterno"].ToString() == "") expression.Append(" OR CodiceInterno is null ) "); else expression.Append(" ) "); break; } DataRow[] drArray = dt.Select(expression.ToString()); if (drArray.Length > 0) { foreach (DataRow riga in drArray) { riga["TIPOPRODOTTOSINTESI"] = rw["TIPOPRODOTTO"]; riga["VALORESINTESI"] = rw["VALORE"]; riga["CTVSINTESI"] = rw["CTV"]; riga["DATASOTTOSCRIZIONESINTESI"] = rw["DataDiSottoscrizione"]; riga["PERFORMANCEYTDSINTESI"] = rw["RendimentoDaInizioAnno"]; riga["PERFORMANCEDSSINTESI"] = rw["RendimentoDaSottoscrizione"]; //K Skandia /* riga["ISIN"] = rw["ISIN"]; */ riga["ISIN_ASU2"] = rw["ISIN"]; } } expression.Length = 0; } } } private static messaggioType CreaRichiestaVaRPortafoglioSezioneS48PerTipoProdotto(DataTable dtRichiesta) { #region Variabili costruzione oggetto MessageType //la query è diversa dalla 56 non c'è la needarea il nome la descrizione dell'aggregato dovrebbe essere il nome dell'intemediario //non sarebbe meglio fare un ptf per ogni intermediario? //al posto del codice isin sembra che utilizzano l'asset class DataTable dtDistincttipoprodotto; DataTable dtDistinctprodotto; messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; ptfType ptfTipoProdotto; ptfType ptfProdotto; saldoType saldo; ProdottiKeyType pkt; #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; // DataView ordinato per NEEDAREA string[] paramColumntipoprodotto = new string[1]; paramColumntipoprodotto[0] = "DESCR_GRUPPO"; dtDistincttipoprodotto = dtRichiesta.DefaultView.ToTable(true, paramColumntipoprodotto); string[] paramColumnprodotto = new string[4]; paramColumnprodotto[0] = "DESCR_GRUPPO"; paramColumnprodotto[1] = "NOMEPRODOTTO"; paramColumnprodotto[2] = "ASSETID"; paramColumnprodotto[3] = "Prod_non_in_catalogo"; dtDistinctprodotto = dtRichiesta.DefaultView.ToTable(true, paramColumnprodotto); #endregion #region HeaderMessage hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType #region RichiestaVarPortafoglio // PTF - CT #region PTF //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; string rwdistincttipoprodotto = ""; string rwdistinctprodottotiporpodotto = ""; string codiceAgente = ""; string codiceRete = ""; string codiceFiscale = ""; string codiceApplicazione = ""; int versioneDBSimpb = 0; decimal controvalore = 0; bool prodottononincatalogo; string tipoProdottoAsul = ConfigurationManager.AppSettings["TIPOPRODOTTOASUL"].ToString().Trim().ToUpper(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAGENTE")) codiceAgente = dtRichiesta.ExtendedProperties["CODICEAGENTE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICERETE")) codiceRete = dtRichiesta.ExtendedProperties["CODICERETE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEFISCALE")) codiceFiscale = dtRichiesta.ExtendedProperties["CODICEFISCALE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAPPLICAZIONE")) codiceApplicazione = dtRichiesta.ExtendedProperties["CODICEAPPLICAZIONE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("VERSIONEDATABASESIMPB")) versioneDBSimpb = int.Parse(dtRichiesta.ExtendedProperties["VERSIONEDATABASESIMPB"].ToString()); ptfType ptfTotale = new ptfType(); ptfTotale.descrizione = "TOTALEPRODOTTIALTRIISTITUTI"; #region CREAZIONE OGGETTO MESSAGE foreach (DataRow rwdistinct in dtDistincttipoprodotto.Rows) { // Creo un aggregato ptfTipoProdotto = new ptfType(); ptfTipoProdotto.descrizione = rwdistinct["DESCR_GRUPPO"].ToString(); rwdistincttipoprodotto = rwdistinct["DESCR_GRUPPO"].ToString().Trim().ToUpper(); foreach (DataRow rwdistinctprodotto in dtDistinctprodotto.Rows) { rwdistinctprodottotiporpodotto = rwdistinctprodotto["DESCR_GRUPPO"].ToString().Trim().ToUpper(); prodottononincatalogo = Convert.ToBoolean(rwdistinctprodotto["Prod_non_in_catalogo"]); if (rwdistincttipoprodotto.Equals(rwdistinctprodottotiporpodotto)) { #region Aggregato di Prodotto ptfProdotto = new ptfType(); #endregion if (!prodottononincatalogo) { #region Prodotti in catalogo string strComputeSelect = ""; strComputeSelect += " ASSETID = '" + rwdistinctprodotto["ASSETID"].ToString().Replace("'", "''") + "'"; strComputeSelect += " and NOMEPRODOTTO = '" + rwdistinctprodotto["NOMEPRODOTTO"].ToString().Replace("'", "''") + "'"; strComputeSelect += " and DESCR_GRUPPO = '" + rwdistinctprodotto["DESCR_GRUPPO"].ToString().Replace("'", "''") + "'"; // object SumControvalore = dtRichiesta.Compute("Sum(CONTROVALORE)", " assetid = '" + rwdistinctprodotto["assetid"].ToString().Replace("'", "''") + "' and CODICEISIN = '" + rwdistinctprodotto["CODICEISIN"].ToString().Replace("'", "''") + "'"); object SumControvalore = dtRichiesta.Compute("Sum(CONTROVALORE)", strComputeSelect); // DataRow[] rwProdottiArray = dtRichiesta.Select(" assetid = '" + rwdistinctprodotto["assetid"].ToString().Replace("'", "''") + "' and CODICEISIN = '" + rwdistinctprodotto["CODICEISIN"].ToString().Replace("'", "''") + "'"); DataRow[] rwProdottiArray = dtRichiesta.Select(strComputeSelect); string codAdeguatzza = ""; if (rwProdottiArray != null && rwProdottiArray.Length > 0 && rwProdottiArray[0]["CODICEADEGUATEZZA"] != DBNull.Value) codAdeguatzza = rwProdottiArray[0]["CODICEADEGUATEZZA"].ToString(); if (codAdeguatzza != "") { #region Codice Adeguatezza Valorizzato #region Ciclo datarow //foreach (DataRow rw in dtRichiesta.Rows) //{ // if (rwdistinctprodotto["DESCR_GRUPPO"].ToString() == rw["DESCR_GRUPPO"].ToString() && // rwdistinctprodotto["NOMEPRODOTTO"].ToString() == rw["NOMEPRODOTTO"].ToString() && // rwdistinctprodotto["ASSETID"].ToString() == rw["ASSETID"].ToString()) // { #region SALDO NON ASUL string codIsin = ""; string codMaf = ""; string codSottoProdotto = ""; string codInterno = ""; foreach (DataRow _rw in rwProdottiArray) { ptfProdotto.descrizione += _rw["ID"].ToString() + "|"; if (_rw["CODICEADEGUATEZZA"] != DBNull.Value) codAdeguatzza = _rw["CODICEADEGUATEZZA"].ToString(); if (_rw["CODICEISIN"] != DBNull.Value) codIsin = _rw["CODICEISIN"].ToString(); if (_rw["CODICEMAF"] != DBNull.Value) codMaf = _rw["CODICEMAF"].ToString(); if (_rw["CODICESOTTOPRODOTTO"] != DBNull.Value) codSottoProdotto = _rw["CODICESOTTOPRODOTTO"].ToString(); if (_rw["CODICEINTERNO"] != DBNull.Value) codInterno = _rw["CODICEINTERNO"].ToString(); } saldo = new saldoType(); if (SumControvalore == DBNull.Value) { saldo.valore = 0; saldo.valoreCtv = 0; } else { saldo.valore = Convert.ToDouble(SumControvalore); saldo.valoreCtv = Convert.ToDouble(SumControvalore); } saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); if (codAdeguatzza != "") pkt.codiceAdeguatezza = codAdeguatzza; else pkt.codiceAdeguatezza = ""; if (codIsin != "") pkt.codiceIsin = codIsin; else pkt.codiceIsin = ""; if (codMaf != "") pkt.codiceMaf = codMaf; else pkt.codiceMaf = ""; if (codSottoProdotto != "") pkt.codiceSottoprodotto = codSottoProdotto; else pkt.codiceSottoprodotto = ""; if (codInterno != "") pkt.codiceInterno = codInterno; else pkt.codiceInterno = ""; saldo.chiave = pkt; ptfProdotto.AddSaldo(saldo); #endregion // } //} #endregion #endregion } else { #region Codice Adeguatezza Non Valorizzato #region Ciclo datarow foreach (DataRow rw in dtRichiesta.Rows) { if (rwdistinctprodotto["DESCR_GRUPPO"].ToString() == rw["DESCR_GRUPPO"].ToString() && rwdistinctprodotto["NOMEPRODOTTO"].ToString() == rw["NOMEPRODOTTO"].ToString() && rwdistinctprodotto["ASSETID"].ToString() == rw["ASSETID"].ToString()) { ptfProdotto.descrizione += rw["ID"].ToString() + "|"; #region SALDO NON ASUL saldo = new saldoType(); if (rw["CONTROVALORE"] != DBNull.Value) { saldo.valore = Convert.ToDouble(rw["CONTROVALORE"].ToString()); saldo.valoreCtv = Convert.ToDouble(rw["CONTROVALORE"].ToString()); } saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); if (rw["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = rw["CODICEADEGUATEZZA"].ToString(); else pkt.codiceAdeguatezza = ""; if (rw["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = rw["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (rw["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = rw["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; if (rw["CODICESOTTOPRODOTTO"] != DBNull.Value) pkt.codiceSottoprodotto = rw["CODICESOTTOPRODOTTO"].ToString(); else pkt.codiceSottoprodotto = ""; if (rw["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = rw["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; saldo.chiave = pkt; ptfProdotto.AddSaldo(saldo); #endregion } } #endregion #endregion } #endregion } else { #region Prodotti non in catalogo #region Ciclo datarow foreach (DataRow rw in dtRichiesta.Rows) { if (rwdistinctprodotto["DESCR_GRUPPO"].ToString() == rw["DESCR_GRUPPO"].ToString() && rwdistinctprodotto["NOMEPRODOTTO"].ToString() == rw["NOMEPRODOTTO"].ToString() && rwdistinctprodotto["ASSETID"].ToString() == rw["ASSETID"].ToString()) { ptfProdotto.descrizione += rw["ID"].ToString() + "|"; #region SALDO NON ASUL saldo = new saldoType(); if (rw["CONTROVALORE"] != DBNull.Value) { saldo.valore = Convert.ToDouble(rw["CONTROVALORE"].ToString()); saldo.valoreCtv = Convert.ToDouble(rw["CONTROVALORE"].ToString()); } saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); if (rw["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = rw["CODICEADEGUATEZZA"].ToString(); else pkt.codiceAdeguatezza = ""; if (rw["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = rw["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (rw["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = rw["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; if (rw["CODICESOTTOPRODOTTO"] != DBNull.Value) pkt.codiceSottoprodotto = rw["CODICESOTTOPRODOTTO"].ToString(); else pkt.codiceSottoprodotto = ""; if (rw["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = rw["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; saldo.chiave = pkt; ptfProdotto.AddSaldo(saldo); #endregion } } #endregion #endregion } if (ptfProdotto.descrizione != "" && ptfProdotto.descrizione != null) { ptfProdotto.AddChildSaldoToAggregate(); ptfTipoProdotto.AddAggregato(ptfProdotto); } } } ptfTipoProdotto.AddChildToAggregate(); ptfTotale.AddAggregato(ptfTipoProdotto); } ptfTotale.AddChildToAggregate(); richiestaVarPortafoglio.Add(ptfTotale); richiestaVarPortafoglio.AddChildToAggregate(); #endregion #endregion #endregion #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Metodo: CreaRichiestaVaRPortafoglioSezioneS48PerTipoProdotto", ex.InnerException); } return mt; } private static messaggioType CreaRichiestaVaRPortafoglioSezioneS48PerIntermediario(DataTable dtRichiesta) { #region Variabili costruzione oggetto MessageType //la query è diversa dalla 56 non c'è la needarea il nome la descrizione dell'aggregato dovrebbe essere il nome dell'intemediario //non sarebbe meglio fare un ptf per ogni intermediario? //al posto del codice isin sembra che utilizzano l'asset class DataTable dtDistinctintermediario; DataTable dtDistinctprodotto; DataTable dtDistinctintermediarioTipoProdotto; messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; ptfType ptfIntermediario = null; ptfType ptfProdotto; ptfType ptfTipoProdotto; saldoType saldo; ProdottiKeyType pkt; Aggregato aggregatoIntermediario; Aggregato aggregatoProdotto; #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; // DataView ordinato per NEEDAREA string[] paramColumnIntermediario = new string[1]; paramColumnIntermediario[0] = "NOMEBANCATERZA"; dtDistinctintermediario = dtRichiesta.DefaultView.ToTable(true, paramColumnIntermediario); string[] paramColumntipoprodottointermediario = new string[2]; paramColumntipoprodottointermediario[0] = "DESCR_GRUPPO"; paramColumntipoprodottointermediario[1] = "NOMEBANCATERZA"; dtDistinctintermediarioTipoProdotto = dtRichiesta.DefaultView.ToTable(true, paramColumntipoprodottointermediario); // Filtro per Intermediario: NOMEBANCATERZA e per prodotto: NOMEPRODOTTO string[] paramColumnprodotto = new string[5]; paramColumnprodotto[0] = "NOMEBANCATERZA"; paramColumnprodotto[1] = "DESCR_GRUPPO"; paramColumnprodotto[2] = "NOMEPRODOTTO"; paramColumnprodotto[3] = "ASSETID"; paramColumnprodotto[4] = "Prod_non_in_catalogo"; dtDistinctprodotto = dtRichiesta.DefaultView.ToTable(true, paramColumnprodotto); #endregion #region HeaderMessage hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType #region RichiestaVarPortafoglio // PTF - CT #region PTF //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; string Intermediario = ""; string TipoProdotto_Intermediario = ""; string TipoProdotto_TipoProdotto = ""; string Prodotto_TipoProdotto = ""; string Prodotto_Prodotto = ""; string Prodotto_Assetid = ""; string Prodotto_Intermediario = ""; string rwintermediario = ""; string prodotto = ""; string codiceAgente = ""; string codiceRete = ""; string codiceFiscale = ""; string codiceApplicazione = ""; int versioneDBSimpb = 0; bool prodottononincatalogo = false; if (dtRichiesta.ExtendedProperties.Contains("CODICEAGENTE")) codiceAgente = dtRichiesta.ExtendedProperties["CODICEAGENTE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICERETE")) codiceRete = dtRichiesta.ExtendedProperties["CODICERETE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEFISCALE")) codiceFiscale = dtRichiesta.ExtendedProperties["CODICEFISCALE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAPPLICAZIONE")) codiceApplicazione = dtRichiesta.ExtendedProperties["CODICEAPPLICAZIONE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("VERSIONEDATABASESIMPB")) versioneDBSimpb = int.Parse(dtRichiesta.ExtendedProperties["VERSIONEDATABASESIMPB"].ToString()); ptfType ptfTotale = new ptfType(); ptfTotale.descrizione = "TOTALEINTERMEDIARIALTRIISTITUTI"; #region CREAZIONE OGGETTO MESSAGE // Distinct Intermediaio foreach (DataRow rwdistinct in dtDistinctintermediario.Rows) { // Creo un aggregato ptfIntermediario = new ptfType(); ptfIntermediario.descrizione = rwdistinct["NOMEBANCATERZA"].ToString(); Intermediario = rwdistinct["NOMEBANCATERZA"].ToString().Trim().ToUpper(); // Distinct Tipo Prodotto foreach (DataRow rwdistincttipoprodottointermediario in dtDistinctintermediarioTipoProdotto.Rows) { TipoProdotto_Intermediario = rwdistincttipoprodottointermediario["NOMEBANCATERZA"].ToString().Trim().ToUpper(); TipoProdotto_TipoProdotto = rwdistincttipoprodottointermediario["DESCR_GRUPPO"].ToString().Trim().ToUpper(); if (Intermediario.Equals(TipoProdotto_Intermediario)) { ptfTipoProdotto = new ptfType(); ptfTipoProdotto.descrizione = rwdistincttipoprodottointermediario["DESCR_GRUPPO"].ToString().Trim().ToUpper(); // Distinct Prodotto #region Aggreagato PTF Prodotto foreach (DataRow rwdistinctprodotto in dtDistinctprodotto.Rows) { Prodotto_TipoProdotto = rwdistinctprodotto["DESCR_GRUPPO"].ToString().Trim().ToUpper(); Prodotto_Intermediario = rwdistinctprodotto["NOMEBANCATERZA"].ToString().Trim().ToUpper(); Prodotto_Prodotto = rwdistinctprodotto["NOMEPRODOTTO"].ToString().Trim().ToUpper(); Prodotto_Assetid = rwdistinctprodotto["ASSETID"].ToString().Trim().ToUpper(); prodottononincatalogo = Convert.ToBoolean(rwdistinctprodotto["Prod_non_in_catalogo"]); if (TipoProdotto_TipoProdotto == Prodotto_TipoProdotto && Prodotto_Intermediario == Intermediario) { #region Aggregato di Prodotto ptfProdotto = new ptfType(); #endregion if (!prodottononincatalogo) { string strComputeSelect = ""; strComputeSelect += " NOMEBANCATERZA = '" + rwdistinctprodotto["NOMEBANCATERZA"].ToString().Replace("'", "''") + "'"; strComputeSelect += " and ASSETID = '" + rwdistinctprodotto["ASSETID"].ToString().Replace("'", "''") + "'"; strComputeSelect += " and NOMEPRODOTTO = '" + rwdistinctprodotto["NOMEPRODOTTO"].ToString().Replace("'", "''") + "'"; strComputeSelect += " and DESCR_GRUPPO = '" + rwdistinctprodotto["DESCR_GRUPPO"].ToString().Replace("'", "''") + "'"; // object SumControvalore = dtRichiesta.Compute("Sum(CONTROVALORE)", " assetid = '" + rwdistinctprodotto["assetid"].ToString().Replace("'", "''") + "' and CODICEISIN = '" + rwdistinctprodotto["CODICEISIN"].ToString().Replace("'", "''") + "'"); object SumControvalore = dtRichiesta.Compute("Sum(CONTROVALORE)", strComputeSelect); // DataRow[] rwProdottiArray = dtRichiesta.Select(" assetid = '" + rwdistinctprodotto["assetid"].ToString().Replace("'", "''") + "' and CODICEISIN = '" + rwdistinctprodotto["CODICEISIN"].ToString().Replace("'", "''") + "'"); DataRow[] rwProdottiArray = dtRichiesta.Select(strComputeSelect); #region Prodotti in catalogo string codAdeguatzza = ""; if (rwProdottiArray != null && rwProdottiArray.Length > 0 && rwProdottiArray[0]["CODICEADEGUATEZZA"] != DBNull.Value) codAdeguatzza = rwProdottiArray[0]["CODICEADEGUATEZZA"].ToString(); if (codAdeguatzza != "") { #region Codice Adeguatezza Valorizzato #region Ciclo DataRow //foreach (DataRow rw in dtRichiesta.Rows) //{ // if (Intermediario == rw["NOMEBANCATERZA"].ToString().Trim().ToUpper() && // TipoProdotto_TipoProdotto == rw["DESCR_GRUPPO"].ToString().Trim().ToUpper() && // Prodotto_Prodotto == rw["NOMEPRODOTTO"].ToString().Trim().ToUpper() && // Prodotto_Assetid == rw["ASSETID"].ToString().Trim().ToUpper()) // { string codIsin = ""; string codMaf = ""; string codSottoProdotto = ""; string codInterno = ""; foreach (DataRow _rw in rwProdottiArray) { ptfProdotto.descrizione += _rw["ID"].ToString() + "|"; //+"_" + rw["DESCR_GRUPPO"].ToString() + "_" + rw["NOMEBANCATERZA"].ToString() + "|"; if (_rw["CODICEADEGUATEZZA"] != DBNull.Value) codAdeguatzza = _rw["CODICEADEGUATEZZA"].ToString(); if (_rw["CODICEISIN"] != DBNull.Value) codIsin = _rw["CODICEISIN"].ToString(); if (_rw["CODICEMAF"] != DBNull.Value) codMaf = _rw["CODICEMAF"].ToString(); if (_rw["CODICESOTTOPRODOTTO"] != DBNull.Value) codSottoProdotto = _rw["CODICESOTTOPRODOTTO"].ToString(); if (_rw["CODICEINTERNO"] != DBNull.Value) codInterno = _rw["CODICEINTERNO"].ToString(); } #region SALDO NON ASUL saldo = new saldoType(); if (SumControvalore == DBNull.Value) { saldo.valore = 0; saldo.valoreCtv = 0; } else { saldo.valore = Convert.ToDouble(SumControvalore); saldo.valoreCtv = Convert.ToDouble(SumControvalore); } //if (rw["CONTROVALORE"] != DBNull.Value) //{ // saldo.valore = Convert.ToDouble(rw["CONTROVALORE"].ToString()); // saldo.valoreCtv = Convert.ToDouble(rw["CONTROVALORE"].ToString()); //} saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); if (codAdeguatzza != "") pkt.codiceAdeguatezza = codAdeguatzza; else pkt.codiceAdeguatezza = ""; if (codIsin != "") pkt.codiceIsin = codIsin; else pkt.codiceIsin = ""; if (codMaf != "") pkt.codiceMaf = codMaf; else pkt.codiceMaf = ""; if (codSottoProdotto != "") pkt.codiceSottoprodotto = codSottoProdotto; else pkt.codiceSottoprodotto = ""; if (codInterno != "") pkt.codiceInterno = codInterno; else pkt.codiceInterno = ""; saldo.chiave = pkt; ptfProdotto.AddSaldo(saldo); #endregion // } //} #endregion #endregion } else { #region Codice Adeguatezza Non Valorizzato #region Ciclo DataRow foreach (DataRow rw in dtRichiesta.Rows) { if (Intermediario == rw["NOMEBANCATERZA"].ToString().Trim().ToUpper() && TipoProdotto_TipoProdotto == rw["DESCR_GRUPPO"].ToString().Trim().ToUpper() && Prodotto_Prodotto == rw["NOMEPRODOTTO"].ToString().Trim().ToUpper() && Prodotto_Assetid == rw["ASSETID"].ToString().Trim().ToUpper()) { ptfProdotto.descrizione += rw["ID"].ToString() + "|"; //+"_" + rw["DESCR_GRUPPO"].ToString() + "_" + rw["NOMEBANCATERZA"].ToString() + "|"; #region SALDO NON ASUL saldo = new saldoType(); if (rw["CONTROVALORE"] != DBNull.Value) { saldo.valore = Convert.ToDouble(rw["CONTROVALORE"].ToString()); saldo.valoreCtv = Convert.ToDouble(rw["CONTROVALORE"].ToString()); } saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); if (rw["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = rw["CODICEADEGUATEZZA"].ToString(); else pkt.codiceAdeguatezza = ""; if (rw["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = rw["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (rw["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = rw["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; if (rw["CODICESOTTOPRODOTTO"] != DBNull.Value) pkt.codiceSottoprodotto = rw["CODICESOTTOPRODOTTO"].ToString(); else pkt.codiceSottoprodotto = ""; if (rw["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = rw["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; saldo.chiave = pkt; ptfProdotto.AddSaldo(saldo); #endregion } } #endregion #endregion } #endregion } else { #region Prodotti non in catalogo #region Ciclo DataRow foreach (DataRow rw in dtRichiesta.Rows) { if (Intermediario == rw["NOMEBANCATERZA"].ToString().Trim().ToUpper() && TipoProdotto_TipoProdotto == rw["DESCR_GRUPPO"].ToString().Trim().ToUpper() && Prodotto_Prodotto == rw["NOMEPRODOTTO"].ToString().Trim().ToUpper() && Prodotto_Assetid == rw["ASSETID"].ToString().Trim().ToUpper()) { ptfProdotto.descrizione += rw["ID"].ToString() + "|"; //+"_" + rw["DESCR_GRUPPO"].ToString() + "_" + rw["NOMEBANCATERZA"].ToString() + "|"; #region SALDO NON ASUL saldo = new saldoType(); if (rw["CONTROVALORE"] != DBNull.Value) { saldo.valore = Convert.ToDouble(rw["CONTROVALORE"].ToString()); saldo.valoreCtv = Convert.ToDouble(rw["CONTROVALORE"].ToString()); } saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); if (rw["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = rw["CODICEADEGUATEZZA"].ToString(); else pkt.codiceAdeguatezza = ""; if (rw["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = rw["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (rw["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = rw["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; if (rw["CODICESOTTOPRODOTTO"] != DBNull.Value) pkt.codiceSottoprodotto = rw["CODICESOTTOPRODOTTO"].ToString(); else pkt.codiceSottoprodotto = ""; if (rw["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = rw["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; saldo.chiave = pkt; ptfProdotto.AddSaldo(saldo); #endregion } } #endregion #endregion } if (ptfProdotto.descrizione != "" && ptfProdotto.descrizione != null) { ptfProdotto.AddChildSaldoToAggregate(); ptfTipoProdotto.AddAggregato(ptfProdotto); } } } #endregion ptfTipoProdotto.AddChildToAggregate(); ptfIntermediario.AddAggregato(ptfTipoProdotto); } } ptfIntermediario.AddChildToAggregate(); ptfTotale.AddAggregato(ptfIntermediario); } ptfTotale.AddChildToAggregate(); richiestaVarPortafoglio.Add(ptfTotale); richiestaVarPortafoglio.AddChildToAggregate(); #endregion #endregion #endregion #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Metodo: CreaRichiestaVaRPortafoglioSezioneS48PerIntermediario", ex.InnerException); } return mt; } private static messaggioType CreaRichiestaVaRPortafoglioSezioneS44(DataTable dtRichiesta, DataTable dtContrattiSintesiPerCliente) { #region Variabili costruzione oggetto MessageType //la query è diversa dalla 56 non c'è la needarea il nome la descrizione dell'aggregato dovrebbe essere il nome dell'intemediario //non sarebbe meglio fare un ptf per ogni intermediario? //al posto del codice isin sembra che utilizzano l'asset class DataTable dtDistincttipoprodotto; DataTable dtDistinctprodotto; messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; ptfType ptfTipoProdotto; ptfType ptfProdotto; saldoType saldo; ProdottiKeyType pkt; #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; // DataView ordinato per NEEDAREA string[] paramColumntipoprodotto = new string[1]; paramColumntipoprodotto[0] = "SOTTOGRUPPO"; dtDistincttipoprodotto = dtRichiesta.DefaultView.ToTable(true, paramColumntipoprodotto); #endregion #region HeaderMessage hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType #region RichiestaVarPortafoglio // PTF - CT #region PTF //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; string distincttipoprodotto = ""; string tipoprodotto = ""; string codiceAgente = ""; string codiceRete = ""; string codiceFiscale = ""; string codiceApplicazione = ""; string rwAsulString = ""; int versioneDBSimpb = 0; string tipoProdottoAsul = ConfigurationManager.AppSettings["TIPOPRODOTTOASUL"].ToString().Trim().ToUpper(); string tipoProdottoAsu2 = ConfigurationManager.AppSettings["TIPOPRODOTTOASU2"].ToString().Trim().ToUpper(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAGENTE")) codiceAgente = dtRichiesta.ExtendedProperties["CODICEAGENTE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICERETE")) codiceRete = dtRichiesta.ExtendedProperties["CODICERETE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEFISCALE")) codiceFiscale = dtRichiesta.ExtendedProperties["CODICEFISCALE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAPPLICAZIONE")) codiceApplicazione = dtRichiesta.ExtendedProperties["CODICEAPPLICAZIONE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("VERSIONEDATABASESIMPB")) versioneDBSimpb = int.Parse(dtRichiesta.ExtendedProperties["VERSIONEDATABASESIMPB"].ToString()); if (dtRichiesta.ExtendedProperties.Contains("CHIAVECLIENTEPB")) chiaveclientepb = int.Parse(dtRichiesta.ExtendedProperties["CHIAVECLIENTEPB"].ToString()); ptfType ptfTotale = new ptfType(); ptfTotale.descrizione = "TOTALETITOLI"; AggiungiColonnaTipoProdottoContrattoSintesi(ref dtRichiesta, dtContrattiSintesiPerCliente); #region Elimino linea self positiva (quella negativa è esclusa a livello stored) DataRow[] drSelfPositiva = dtRichiesta.Select(" CODICEISIN = 'EURO00000009'"); // Cod Isin che identifica la linea self positiva foreach (DataRow row in drSelfPositiva) { dtRichiesta.Rows.Remove(row); } #endregion #region CREAZIONE OGGETTO MESSAGE foreach (DataRow rwdistinct in dtDistincttipoprodotto.Rows) { // Creo un aggregato ptfTipoProdotto = new ptfType(); ptfTipoProdotto.descrizione = rwdistinct["SOTTOGRUPPO"].ToString(); distincttipoprodotto = rwdistinct["SOTTOGRUPPO"].ToString().Trim().ToUpper(); #region Ciclo datarow foreach (DataRow rw in dtRichiesta.Rows) { if (distincttipoprodotto == rw["SOTTOGRUPPO"].ToString().Trim().ToUpper()) { if (rw["TIPOPRODOTTOSINTESI"] == DBNull.Value || (string)rw["TIPOPRODOTTOSINTESI"] == "") rwAsulString = rw["TIPOPRODOTTO"].ToString(); else rwAsulString = rw["TIPOPRODOTTOSINTESI"].ToString(); #region Aggregato di Prodotto ptfProdotto = new ptfType(); ptfProdotto.descrizione = rw["ID"].ToString(); #endregion if (tipoProdottoAsul.Equals(rwAsulString)) { #region SALDO ASUL #region Chiamata la WSGLOBALPOSITION PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente _chiaveCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente(); _chiaveCliente.codiceAgente = codiceAgente; _chiaveCliente.codicefiscale = codiceFiscale; _chiaveCliente.codiceRete = codiceRete; _chiaveCliente.potenzialeClienteNAC = true; PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient _infoCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient(); _infoCliente.codiceApplicazione = codiceApplicazione; _infoCliente.codiceRete = codiceRete; _infoCliente.versioneDatabaseSIMPB = versioneDBSimpb; string codiceContratto = rw["CONTRATTO"].ToString().Trim(); GlobalPositionWS gpWS = new GlobalPositionWS(); DataTable dtAsul = gpWS.GetContrattoUnitLinkedSaldo(_chiaveCliente, codiceContratto, _infoCliente, chiaveclientepb); #endregion foreach (DataRow rwAsul in dtAsul.Rows) { saldo = new saldoType(); if (rwAsul["CONTROVALORE"] != DBNull.Value) { saldo.valore = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); saldo.valoreCtv = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); } saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //CODICEADEGUATEZZA if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceAdeguatezza = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceSottoprodotto = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceSottoprodotto = ""; //if (rwAsul["ISINFITTIZIO"] != DBNull.Value) // pkt.codiceInterno = rwAsul["ISINFITTIZIO"].ToString(); //if (rw["CODICEISIN"] != DBNull.Value) // pkt.codiceIsin = rw["CODICEISIN"].ToString(); //if (rw["CODICEMAF"] != DBNull.Value) // pkt.codiceMaf = rw["CODICEMAF"].ToString(); saldo.chiave = pkt; ptfProdotto.AddSaldo(saldo); } #endregion } else { #region SALDO NON ASUL saldo = new saldoType(); if (rw["CONTROVALORE"] != DBNull.Value) { saldo.valore = Convert.ToDouble(rw["CONTROVALORE"].ToString()); saldo.valoreCtv = Convert.ToDouble(rw["CONTROVALORE"].ToString()); } saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); if (rwAsulString.Equals(tipoProdottoAsu2)) //K Skandia { //CODICEADEGUATEZZA if (rw["ISIN_ASU2"] != DBNull.Value) pkt.codiceAdeguatezza = rw["ISIN_ASU2"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rw["ISIN_ASU2"] != DBNull.Value) pkt.codiceSottoprodotto = rw["ISIN_ASU2"].ToString(); else pkt.codiceSottoprodotto = ""; } else { if (rw["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = rw["CODICEADEGUATEZZA"].ToString(); else pkt.codiceAdeguatezza = ""; if (rw["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = rw["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (rw["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = rw["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; if (rw["CODICESOTTOPRODOTTO"] != DBNull.Value) pkt.codiceSottoprodotto = rw["CODICESOTTOPRODOTTO"].ToString(); else pkt.codiceSottoprodotto = ""; if (rw["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = rw["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; } saldo.chiave = pkt; ptfProdotto.AddSaldo(saldo); #endregion } ptfProdotto.AddChildSaldoToAggregate(); ptfTipoProdotto.AddAggregato(ptfProdotto); } } #endregion ptfTipoProdotto.AddChildToAggregate(); ptfTotale.AddAggregato(ptfTipoProdotto); } ptfTotale.AddChildToAggregate(); richiestaVarPortafoglio.Add(ptfTotale); richiestaVarPortafoglio.AddChildToAggregate(); #endregion #endregion #endregion #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Metodo: CreaRichiestaVaRPortafoglioSezioneS44", ex.InnerException); } return mt; } private static messaggioType CreaRichiestaVaRPortafoglioSezioneS46(DataTable dtRichiesta, DataTable dtContrattiSintesiPerCliente) { #region Variabili costruzione oggetto MessageType //la query è diversa dalla 46 non c'è la needarea il nome la descrizione dell'aggregato dovrebbe essere il nome dell'intemediario //non sarebbe meglio fare un ptf per ogni intermediario? //al posto del codice isin sembra che utilizzano l'asset class messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; ptfType ptfProdotto; saldoType saldo; ProdottiKeyType pkt; #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; #endregion #region HeaderMessage hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType #region RichiestaVarPortafoglio // PTF - CT #region PTF //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; //K Skandia string rwAsu2String = ""; string tipoProdottoAsu2 = ConfigurationManager.AppSettings["TIPOPRODOTTOASU2"].ToString().Trim().ToUpper(); string codiceAgente = ""; string codiceRete = ""; string codiceFiscale = ""; string codiceApplicazione = ""; int versioneDBSimpb = 0; if (dtRichiesta.ExtendedProperties.Contains("CODICEAGENTE")) codiceAgente = dtRichiesta.ExtendedProperties["CODICEAGENTE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICERETE")) codiceRete = dtRichiesta.ExtendedProperties["CODICERETE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEFISCALE")) codiceFiscale = dtRichiesta.ExtendedProperties["CODICEFISCALE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAPPLICAZIONE")) codiceApplicazione = dtRichiesta.ExtendedProperties["CODICEAPPLICAZIONE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("VERSIONEDATABASESIMPB")) versioneDBSimpb = int.Parse(dtRichiesta.ExtendedProperties["VERSIONEDATABASESIMPB"].ToString()); ptfType ptfTotale = new ptfType(); ptfTotale.descrizione = "TOTALEFONDIPENSIONE"; AggiungiColonnaTipoProdottoContrattoSintesi(ref dtRichiesta, dtContrattiSintesiPerCliente); #region CREAZIONE OGGETTO MESSAGE foreach (DataRow rw in dtRichiesta.Rows) { #region Aggregato di Prodotto ptfProdotto = new ptfType(); ptfProdotto.descrizione = rw["ID"].ToString(); #endregion #region SALDO NON ASUL saldo = new saldoType(); if (rw["CONTROVALORE"] != DBNull.Value) { saldo.valore = Convert.ToDouble(rw["CONTROVALORE"].ToString()); saldo.valoreCtv = Convert.ToDouble(rw["CONTROVALORE"].ToString()); } saldo.valoreCtvSpecified = true; //K Skandia if (rw["TIPOPRODOTTOSINTESI"] == DBNull.Value || (string)rw["TIPOPRODOTTOSINTESI"] == "") rwAsu2String = rw["TIPOPRODOTTO"].ToString(); else rwAsu2String = rw["TIPOPRODOTTOSINTESI"].ToString(); pkt = new ProdottiKeyType(); //K Skandia if (rwAsu2String.Equals(tipoProdottoAsu2)) { //CODICEADEGUATEZZA if (rw["ISIN_ASU2"] != DBNull.Value) pkt.codiceAdeguatezza = rw["ISIN_ASU2"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rw["ISIN_ASU2"] != DBNull.Value) pkt.codiceSottoprodotto = rw["ISIN_ASU2"].ToString(); else pkt.codiceSottoprodotto = ""; } else { if (rw["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = rw["CODICEADEGUATEZZA"].ToString(); else pkt.codiceAdeguatezza = ""; if (rw["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = rw["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (rw["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = rw["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; if (rw["CODICESOTTOPRODOTTO"] != DBNull.Value) pkt.codiceSottoprodotto = rw["CODICESOTTOPRODOTTO"].ToString(); else pkt.codiceSottoprodotto = ""; if (rw["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = rw["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; } saldo.chiave = pkt; ptfProdotto.AddSaldo(saldo); ptfProdotto.AddChildSaldoToAggregate(); ptfTotale.AddAggregato(ptfProdotto); #endregion } #endregion ptfTotale.AddChildToAggregate(); richiestaVarPortafoglio.Add(ptfTotale); richiestaVarPortafoglio.AddChildToAggregate(); #endregion #endregion #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Metodo: CreaRichiestaVaRPortafoglioSezioneS46", ex.InnerException); } return mt; } private static messaggioType CreaRichiestaVaRPortafoglioSezioneS50(DataTable dtRichiesta) { #region Variabili costruzione oggetto MessageType //la query è diversa dalla 56 non c'è la needarea il nome la descrizione dell'aggregato dovrebbe essere il nome dell'intemediario //non sarebbe meglio fare un ptf per ogni intermediario? //al posto del codice isin sembra che utilizzano l'asset class DataTable dtDistinctintermediario; DataTable dtDistinctprodotto; messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; ptfType ptfIntermediario; ptfType ptfProdotto; saldoType saldo; ProdottiKeyType pkt; #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; // DataView ordinato per NEEDAREA string[] paramColumnintermediario = new string[1]; paramColumnintermediario[0] = "intermediario"; dtDistinctintermediario = dtRichiesta.DefaultView.ToTable(true, paramColumnintermediario); string[] paramColumnprodotto = new string[2]; paramColumnprodotto[0] = "intermediario"; paramColumnprodotto[1] = "ord_per_join_pr"; dtDistinctprodotto = dtRichiesta.DefaultView.ToTable(true, paramColumnprodotto); #endregion #region HeaderMessage hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType #region RichiestaVarPortafoglio // PTF - CT #region PTF //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; string codiceAgente = ""; string codiceRete = ""; string codiceFiscale = ""; string codiceApplicazione = ""; int versioneDBSimpb = 0; if (dtRichiesta.ExtendedProperties.Contains("CODICEAGENTE")) codiceAgente = dtRichiesta.ExtendedProperties["CODICEAGENTE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICERETE")) codiceRete = dtRichiesta.ExtendedProperties["CODICERETE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEFISCALE")) codiceFiscale = dtRichiesta.ExtendedProperties["CODICEFISCALE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAPPLICAZIONE")) codiceApplicazione = dtRichiesta.ExtendedProperties["CODICEAPPLICAZIONE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("VERSIONEDATABASESIMPB")) versioneDBSimpb = int.Parse(dtRichiesta.ExtendedProperties["VERSIONEDATABASESIMPB"].ToString()); ptfType ptfTotale = new ptfType(); ptfTotale.descrizione = "TOTALEFONDIPENSIONE"; #region CREAZIONE OGGETTO MESSAGE foreach (DataRow rwdistinct in dtDistinctintermediario.Rows) { // Creo un aggregato ptfIntermediario = new ptfType(); ptfIntermediario.descrizione = rwdistinct["intermediario"].ToString(); foreach (DataRow rwdistinctprodotto in dtDistinctprodotto.Rows) { if (rwdistinctprodotto["intermediario"].ToString() == rwdistinct["intermediario"].ToString()) { ptfProdotto = new ptfType(); ptfProdotto.descrizione = rwdistinctprodotto["ord_per_join_pr"].ToString(); #region Ciclo datarow foreach (DataRow rw in dtRichiesta.Rows) { if (rwdistinctprodotto["intermediario"].ToString() == rw["intermediario"].ToString() && rwdistinctprodotto["ord_per_join_pr"].ToString() == rw["ord_per_join_pr"].ToString()) { #region SALDO NON ASUL saldo = new saldoType(); if (rw["CONTROVALORE"] != DBNull.Value) { saldo.valore = Convert.ToDouble(rw["CONTROVALORE"].ToString()); saldo.valoreCtv = Convert.ToDouble(rw["CONTROVALORE"].ToString()); } saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); if (rw["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = rw["CODICEADEGUATEZZA"].ToString(); else pkt.codiceAdeguatezza = ""; if (rw["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = rw["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (rw["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = rw["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; if (rw["CODICESOTTOPRODOTTO"] != DBNull.Value) pkt.codiceSottoprodotto = rw["CODICESOTTOPRODOTTO"].ToString(); else pkt.codiceSottoprodotto = ""; if (rw["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = rw["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; saldo.chiave = pkt; ptfProdotto.AddSaldo(saldo); #endregion } } #endregion ptfProdotto.AddChildSaldoToAggregate(); ptfIntermediario.AddAggregato(ptfProdotto); } } ptfIntermediario.AddChildToAggregate(); ptfTotale.AddAggregato(ptfIntermediario); } ptfTotale.AddChildToAggregate(); richiestaVarPortafoglio.Add(ptfTotale); richiestaVarPortafoglio.AddChildToAggregate(); #endregion #endregion #endregion #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Metodo: CreaRichiestaVaRPortafoglioSezioneS50", ex.InnerException); } return mt; } private static messaggioType CreaRichiestaVaRPortafoglioSezioneS91(DataTable dtRichiesta) { #region Variabili costruzione oggetto MessageType //la query è diversa dalla 56 non c'è la needarea il nome la descrizione dell'aggregato dovrebbe essere il nome dell'intemediario //non sarebbe meglio fare un ptf per ogni intermediario? //al posto del codice isin sembra che utilizzano l'asset class messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; ptfType ptfProdotto; saldoType saldo; ProdottiKeyType pkt; #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; #endregion #region HeaderMessage hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType #region RichiestaVarPortafoglio // PTF - CT #region PTF //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; string codiceAgente = ""; string codiceRete = ""; string codiceFiscale = ""; string codiceApplicazione = ""; int versioneDBSimpb = 0; if (dtRichiesta.ExtendedProperties.Contains("CODICEAGENTE")) codiceAgente = dtRichiesta.ExtendedProperties["CODICEAGENTE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICERETE")) codiceRete = dtRichiesta.ExtendedProperties["CODICERETE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEFISCALE")) codiceFiscale = dtRichiesta.ExtendedProperties["CODICEFISCALE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAPPLICAZIONE")) codiceApplicazione = dtRichiesta.ExtendedProperties["CODICEAPPLICAZIONE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("VERSIONEDATABASESIMPB")) versioneDBSimpb = int.Parse(dtRichiesta.ExtendedProperties["VERSIONEDATABASESIMPB"].ToString()); ptfType ptfTotale = new ptfType(); ptfTotale.descrizione = "TOTALE"; #region CREAZIONE OGGETTO MESSAGE #region Ciclo string[] paramColumn = new string[1]; paramColumn[0] = "assetid"; DataTable dtDistinctAssetid = dtRichiesta.DefaultView.ToTable(true, paramColumn); string assetid = ""; DataRow[] drAssetid = null; foreach (DataRow rw in dtDistinctAssetid.Rows) { ptfProdotto = new ptfType(); assetid = rw["assetid"].ToString(); ptfProdotto.descrizione = assetid; drAssetid = dtRichiesta.Select("assetid = '" + assetid.ToString().Replace("'", "''") + "'"); #region SALDO NON ASUL foreach (DataRow rwAssetid in drAssetid) { saldo = new saldoType(); if (rwAssetid["controvalore"] != DBNull.Value) { saldo.valore = Convert.ToDouble(rwAssetid["controvalore"].ToString()); saldo.valoreCtv = Convert.ToDouble(rwAssetid["controvalore"].ToString()); } else { saldo.valore = 0; saldo.valoreCtv = 0; } saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); if (rwAssetid["CODICEADEGUATEZZA"] != DBNull.Value) pkt.codiceAdeguatezza = rwAssetid["CODICEADEGUATEZZA"].ToString(); else pkt.codiceAdeguatezza = ""; if (rwAssetid["CODICEISIN"] != DBNull.Value) pkt.codiceIsin = rwAssetid["CODICEISIN"].ToString(); else pkt.codiceIsin = ""; if (rwAssetid["CODICEMAF"] != DBNull.Value) pkt.codiceMaf = rwAssetid["CODICEMAF"].ToString(); else pkt.codiceMaf = ""; if (rwAssetid["CODICESOTTOPRODOTTO"] != DBNull.Value) pkt.codiceSottoprodotto = rwAssetid["CODICESOTTOPRODOTTO"].ToString(); else pkt.codiceSottoprodotto = ""; if (rwAssetid["CODICEINTERNO"] != DBNull.Value) pkt.codiceInterno = rwAssetid["CODICEINTERNO"].ToString(); else pkt.codiceInterno = ""; saldo.chiave = pkt; ptfProdotto.AddSaldo(saldo); } ptfProdotto.AddChildSaldoToAggregate(); ptfTotale.AddAggregato(ptfProdotto); #endregion } #endregion ptfTotale.AddChildToAggregate(); richiestaVarPortafoglio.Add(ptfTotale); richiestaVarPortafoglio.AddChildToAggregate(); #endregion #endregion #endregion #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Metodo: CreaRichiestaVaRPortafoglioSezioneS91", ex.InnerException); } return mt; } /// /// Crea l'albero di input per la chiamata dei VaR dei mercati finanziari /// /// input per la chiamata a prometeia per i mercati finanziari private static messaggioType CreaRichiestaVaRMercatiFinanziari() { #region Variabili costruzione oggetto MessageType messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; ptfType ptfVaRMercati, ptfMacroAzionario, ptfMacroObbligazionario, ptfAsset = null; saldoType saldo = null; ProdottiKeyType pkt = null; #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; #endregion #region HeaderMessage hdm.cliente = System.Configuration.ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = System.Configuration.ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(System.Configuration.ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; ptfVaRMercati = new ptfType(); ptfVaRMercati.descrizione = "VAR_ASSET"; #region CREAZIONE OGGETTO MESSAGE // Creo un aggregato ptfMacroAzionario = new ptfType(); ptfMacroAzionario.descrizione = "MACRO_AZIONARIO"; ptfMacroObbligazionario = new ptfType(); ptfMacroObbligazionario.descrizione = "MACRO_OBBLIGAZIONARIO"; Dictionary> tabellaAsset = Prometeia.initializeTabellaAsset(); List AZ = tabellaAsset["AZ"]; List OB = tabellaAsset["OB"]; #region CICLO ASSET AZIONARIO foreach (AssetClass asset in AZ) { ptfAsset = new ptfType(); ptfAsset.descrizione = asset.ISIN + "|" + asset.Descrizione; saldo = new saldoType(); // Ogni prodotto avrà un saldo saldo.valore = 50.0; saldo.valoreCtv = 50.0; saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); pkt.codiceAdeguatezza = asset.Adeguatezza; pkt.codiceInterno = string.Empty; pkt.codiceIsin = asset.ISIN; pkt.codiceMaf = asset.MAF; pkt.codiceSottoprodotto = string.Empty; saldo.chiave = pkt; ptfAsset.AddSaldo(saldo); ptfAsset.AddChildSaldoToAggregate(); //ptfAsset.AddChildToAggregate(); //forse non serve ptfMacroAzionario.AddAggregato(ptfAsset); } ptfMacroAzionario.AddChildToAggregate(); #endregion #region CICLO ASSET OBBLIGAZIONARIO foreach (AssetClass asset in OB) { ptfAsset = new ptfType(); ptfAsset.descrizione = asset.ISIN + "|" + asset.Descrizione; saldo = new saldoType(); // Ogni prodotto avrà un saldo saldo.valore = 50.0; saldo.valoreCtv = 50.0; saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); pkt.codiceAdeguatezza = asset.Adeguatezza; pkt.codiceInterno = string.Empty; pkt.codiceIsin = asset.ISIN; pkt.codiceMaf = asset.MAF; pkt.codiceSottoprodotto = string.Empty; saldo.chiave = pkt; ptfAsset.AddSaldo(saldo); ptfAsset.AddChildSaldoToAggregate(); //ptfAsset.AddChildToAggregate(); //forse non serve ptfMacroObbligazionario.AddAggregato(ptfAsset); } ptfMacroObbligazionario.AddChildToAggregate(); #endregion //ptfAsset.AddChildSaldoToAggregate(); //ptfAsset.AddChildToAggregate(); ptfVaRMercati.AddAggregato(ptfMacroAzionario); ptfVaRMercati.AddAggregato(ptfMacroObbligazionario); ptfVaRMercati.AddChildToAggregate(); richiestaVarPortafoglio.Add(ptfVaRMercati); richiestaVarPortafoglio.AddChildToAggregate(); #endregion #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Metodo: Mercati obbligazionari e azionari", ex.InnerException); } return mt; } /// /// Usata nel job di storicizzazione del VaR per le macro asset OB,AZ,MN /// Crea l'albero di input per la chiamata dei VaR dei mercati finanziari /// /// input per la chiamata a prometeia per i mercati finanziari private static messaggioType CreaRichiestaVaRMacroAsset() { #region Variabili costruzione oggetto MessageType messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; ptfType ptfVaRMercati, ptfMacroAzionario, ptfMacroObbligazionario, ptfAsset = null; saldoType saldo = null; ProdottiKeyType pkt = null; #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; #endregion #region HeaderMessage hdm.cliente = System.Configuration.ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = System.Configuration.ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(System.Configuration.ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; ptfVaRMercati = new ptfType(); ptfVaRMercati.descrizione = "VAR_ASSET"; #region CREAZIONE OGGETTO MESSAGE // Creo un aggregato ptfMacroAzionario = new ptfType(); ptfMacroAzionario.descrizione = "MACRO_AZIONARIO"; ptfMacroObbligazionario = new ptfType(); ptfMacroObbligazionario.descrizione = "MACRO_OBBLIGAZIONARIO"; #region ASSET AZIONARIO ptfAsset = new ptfType(); ptfAsset.descrizione = "MSACWF$|AZIONARIO"; saldo = new saldoType(); // Ogni prodotto avrà un saldo saldo.valore = 50.0; saldo.valoreCtv = 50.0; saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); pkt.codiceAdeguatezza = "MSACWF$"; pkt.codiceInterno = string.Empty; pkt.codiceIsin = "MSACWF$"; pkt.codiceMaf = "MSACWF$"; pkt.codiceSottoprodotto = string.Empty; saldo.chiave = pkt; ptfAsset.AddSaldo(saldo); ptfAsset.AddChildSaldoToAggregate(); //ptfAsset.AddChildToAggregate(); //forse non serve ptfMacroAzionario.AddAggregato(ptfAsset); ptfMacroAzionario.AddChildToAggregate(); #endregion #region ASSET OBBLIGAZIONARIO ptfAsset = new ptfType(); ptfAsset.descrizione = "SBWGEUE|OBBLIGAZIONARIO"; saldo = new saldoType(); // Ogni prodotto avrà un saldo saldo.valore = 50.0; saldo.valoreCtv = 50.0; saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); pkt.codiceAdeguatezza = "SBWGEUE"; pkt.codiceInterno = string.Empty; pkt.codiceIsin = "SBWGEUE"; pkt.codiceMaf = "SBWGEUE"; pkt.codiceSottoprodotto = string.Empty; saldo.chiave = pkt; ptfAsset.AddSaldo(saldo); ptfAsset.AddChildSaldoToAggregate(); //ptfAsset.AddChildToAggregate(); //forse non serve ptfMacroObbligazionario.AddAggregato(ptfAsset); ptfMacroObbligazionario.AddChildToAggregate(); #endregion //ptfAsset.AddChildSaldoToAggregate(); //ptfAsset.AddChildToAggregate(); ptfVaRMercati.AddAggregato(ptfMacroAzionario); ptfVaRMercati.AddAggregato(ptfMacroObbligazionario); ptfVaRMercati.AddChildToAggregate(); richiestaVarPortafoglio.Add(ptfVaRMercati); richiestaVarPortafoglio.AddChildToAggregate(); #endregion #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Metodo: Mercati obbligazionari e azionari", ex.InnerException); } return mt; } /// /// Crea l'albero di input per la chiamata dei VaR del portafoglio suddiviso per AssetClass /// /// input per la chiamata a prometeia per il portafoglio suddiviso per AssetClass private static messaggioType CreaRichiestaVaRPortafoglioAsset(DataTable portafoglio, DataTable dettPtf) { #region Variabili costruzione oggetto MessageType messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; ptfType ptfAsset = null; saldoType saldo = null; ProdottiKeyType pkt = null; #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; #endregion #region HeaderMessage hdm.cliente = System.Configuration.ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = System.Configuration.ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(System.Configuration.ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; ptfType ptfVaRAsset = new ptfType(); ptfVaRAsset.descrizione = "VAR_ASSET"; #region CREAZIONE OGGETTO MESSAGE string codiceMacroAsset = null; ptfType PtfMacroAsset = null; foreach (DataRow rowAsset in portafoglio.Rows) { string new_codiceMacroAsset = rowAsset["ASSET"].ToString().Substring(0, 2); string new_codiceAsset = rowAsset["ASSET"].ToString(); AssetClass asset = Prometeia.findAssetClass(rowAsset["ASSET"].ToString()); if (new_codiceMacroAsset != codiceMacroAsset) //Crea l'aggregato di MacroAsset { if (codiceMacroAsset != null) { PtfMacroAsset.AddChildToAggregate(); ptfVaRAsset.AddAggregato(PtfMacroAsset); } PtfMacroAsset = new ptfType(); PtfMacroAsset.descrizione = new_codiceMacroAsset; codiceMacroAsset = new_codiceMacroAsset; } if (new_codiceAsset == "FLLR" || new_codiceAsset == "FLMR" || new_codiceAsset == "FLHR") { DataView dwFlessibili = new DataView(dettPtf); dwFlessibili.RowFilter = "Tipologia_Flessibili='" + new_codiceAsset + "'"; DataTable dtFlessibili = dwFlessibili.ToTable(); ptfAsset = new ptfType(); ptfAsset.descrizione = rowAsset["ASSET"].ToString(); foreach (DataRow prodottoFlex in dtFlessibili.Rows) { ptfType ptfProdottoFL = new ptfType(); ptfProdottoFL.descrizione = prodottoFlex["NOME_PRODOTTO"].ToString(); saldo = new saldoType(); saldo.valore = Convert.ToDouble(prodottoFlex["FLESSIBILI"]); saldo.valoreCtv = Convert.ToDouble(prodottoFlex["FLESSIBILI"]); saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); pkt.codiceAdeguatezza = prodottoFlex["Cod_Adeguatezza"].ToString(); pkt.codiceInterno = prodottoFlex["Cod_Interno"].ToString(); pkt.codiceIsin = string.Empty;// prodottoFlex["Cod_Isin"].ToString(); pkt.codiceMaf = prodottoFlex["Cod_Maf"].ToString(); pkt.codiceSottoprodotto = prodottoFlex["Cod_SottoProdotto"].ToString(); //string.Empty; saldo.chiave = pkt; ptfProdottoFL.AddSaldo(saldo); ptfProdottoFL.AddChildSaldoToAggregate(); ptfAsset.AddAggregato(ptfProdottoFL); } ptfAsset.AddChildToAggregate(); } else { ptfAsset = new ptfType(); ptfAsset.descrizione = rowAsset["ASSET"].ToString(); saldo = new saldoType(); saldo.valore = Convert.ToDouble(rowAsset["CONTROVALORE"]); saldo.valoreCtv = Convert.ToDouble(rowAsset["CONTROVALORE"]); saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); pkt.codiceAdeguatezza = asset == null ? string.Empty : asset.Adeguatezza; pkt.codiceInterno = string.Empty; pkt.codiceIsin = asset == null ? string.Empty : asset.ISIN; pkt.codiceMaf = asset == null ? string.Empty : asset.MAF; pkt.codiceSottoprodotto = string.Empty; saldo.chiave = pkt; ptfAsset.AddSaldo(saldo); ptfAsset.AddChildSaldoToAggregate(); //ptfAsset.AddChildToAggregate(); //forse non serve } PtfMacroAsset.AddAggregato(ptfAsset); } #endregion PtfMacroAsset.AddChildToAggregate(); ptfVaRAsset.AddAggregato(PtfMacroAsset); ptfVaRAsset.AddChildToAggregate(); richiestaVarPortafoglio.Add(ptfVaRAsset); richiestaVarPortafoglio.AddChildToAggregate(); #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Metodo: Portafoglio suddiviso per assetClass", ex.InnerException); } return mt; } private static messaggioType CreaRichiestaVaRPortafoglioSezioneS102(DataTable dtRichiesta) { #region Variabili costruzione oggetto MessageType DataTable dtDistinctprodotto; messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; ptfType ptfIntermediario; ptfType ptfProdotto = null; saldoType saldo = null; ProdottiKeyType pkt = null; #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; #endregion #region HeaderMessage hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType #region RichiestaVarPortafoglio // PTF - CT #region PTF //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; string codiceAgente = ""; string codiceRete = ""; string codiceFiscale = ""; string codiceApplicazione = ""; int versioneDBSimpb = 0; decimal controvalore = 0; bool prodottoincatalogo; string tipoProdottoAsul = ConfigurationManager.AppSettings["TIPOPRODOTTOASUL"].ToString().Trim().ToUpper(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAGENTE")) codiceAgente = dtRichiesta.ExtendedProperties["CODICEAGENTE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICERETE")) codiceRete = dtRichiesta.ExtendedProperties["CODICERETE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEFISCALE")) codiceFiscale = dtRichiesta.ExtendedProperties["CODICEFISCALE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAPPLICAZIONE")) codiceApplicazione = dtRichiesta.ExtendedProperties["CODICEAPPLICAZIONE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("VERSIONEDATABASESIMPB")) versioneDBSimpb = int.Parse(dtRichiesta.ExtendedProperties["VERSIONEDATABASESIMPB"].ToString()); if (dtRichiesta.ExtendedProperties.Contains("CHIAVECLIENTEPB")) chiaveclientepb = int.Parse(dtRichiesta.ExtendedProperties["CHIAVECLIENTEPB"].ToString()); ptfType ptfProdotti = new ptfType(); ptfProdotti.descrizione = "PRODOTTI"; #region CREAZIONE OGGETTO MESSAGE DataTable dtIntermediario = dtRichiesta.DefaultView.ToTable(true, "intermediario"); // Contiene la lista degli intermediari foreach (DataRow rwdistinctIntermediario in dtIntermediario.Rows) { // Creo un aggregato ptfIntermediario = new ptfType(); ptfIntermediario.descrizione = rwdistinctIntermediario["intermediario"].ToString().Trim().Replace("'", "''").Length == 0 ? "BF" : rwdistinctIntermediario["intermediario"].ToString(); DataView dwProdottiPerIntermediario = new DataView(dtRichiesta); dwProdottiPerIntermediario.RowFilter = rwdistinctIntermediario["intermediario"].ToString().Length > 0 ? "intermediario='" + rwdistinctIntermediario["intermediario"].ToString().Replace("'", "''") + "'" : string.Empty; DataTable dtProdottiPerIntermediario = dwProdottiPerIntermediario.ToTable(); // contiene la lsista dei prodotti per singolo intermediario. foreach (DataRow rwprodotto in dtProdottiPerIntermediario.Rows) { ptfProdotto = new ptfType(); // Ogni ptfProdotto corrisponde ad un prodotto string codAdeguatezza = string.Empty; string codIsin = string.Empty; string codMaf = string.Empty; string codSottoProdotto = string.Empty; string codInterno = string.Empty; string codContratto = string.Empty; #region Recupero il Saldo per ogni prodotto // Distinguo il tipo prodotto ASUL dagli altri. // Per i prodotti ASUL di patrimonio terzi non devo chiamare la Chiamata a WSGLOBALPOSITION GetContrattoUnitLinkedSaldo // K Skandia if (tipoProdottoAsul.Equals(rwprodotto["TipoProdotto"].ToString()) && rwdistinctIntermediario["intermediario"].ToString().Trim().Length == 0) { #region Prodotto ASUL if (rwprodotto["CONTRATTO"].ToString() != "") { codContratto = rwprodotto["CONTRATTO"].ToString(); ptfProdotto.descrizione = codContratto; } ptfProdotto.descrizione += "|"; if (rwprodotto["CODICE_ISIN"].ToString() != "") ptfProdotto.descrizione += rwprodotto["CODICE_ISIN"].ToString(); else if (rwprodotto["COD_ADEGUATEZZA"].ToString() != "") ptfProdotto.descrizione += rwprodotto["COD_ADEGUATEZZA"].ToString(); else if (rwprodotto["CODICE_MAF"].ToString() != "") ptfProdotto.descrizione += rwprodotto["CODICE_MAF"].ToString(); #region Chiamata a WSGLOBALPOSITION PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente _chiaveCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente(); _chiaveCliente.codiceAgente = codiceAgente; _chiaveCliente.codicefiscale = codiceFiscale; _chiaveCliente.codiceRete = codiceRete; _chiaveCliente.potenzialeClienteNAC = true; PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient _infoCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient(); _infoCliente.codiceApplicazione = codiceApplicazione; _infoCliente.codiceRete = codiceRete; _infoCliente.versioneDatabaseSIMPB = versioneDBSimpb; GlobalPositionWS gpWS = new GlobalPositionWS(); DataTable dtAsul = gpWS.GetContrattoUnitLinkedSaldo(_chiaveCliente, codContratto, _infoCliente, chiaveclientepb); #endregion foreach (DataRow rwAsul in dtAsul.Rows) { saldo = new saldoType(); if (rwAsul["CONTROVALORE"] != DBNull.Value) { saldo.valore = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); saldo.valoreCtv = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); } saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //CODICEADEGUATEZZA if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceAdeguatezza = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceSottoprodotto = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceSottoprodotto = ""; saldo.chiave = pkt; ptfProdotto.AddSaldo(saldo); } #endregion } else { #region Prodotto NON ASUL ptfProdotto.descrizione += rwprodotto["POSITIONID"].ToString() + "|"; if (rwprodotto["COD_ADEGUATEZZA"] != DBNull.Value) codAdeguatezza = rwprodotto["COD_ADEGUATEZZA"].ToString(); if (rwprodotto["CODICE_ISIN"] != DBNull.Value) codIsin = rwprodotto["CODICE_ISIN"].ToString(); if (rwprodotto["CODICE_MAF"] != DBNull.Value) codMaf = rwprodotto["CODICE_MAF"].ToString(); if (rwprodotto["CODICE_SOTTOPRODOTTO"] != DBNull.Value) codSottoProdotto = rwprodotto["CODICE_SOTTOPRODOTTO"].ToString(); if (rwprodotto["CODICE_INTERNO"] != DBNull.Value) codInterno = rwprodotto["CODICE_INTERNO"].ToString(); saldo = new saldoType(); // Ogni prodotto avrà un saldo saldo.valore = Convert.ToDouble(rwprodotto["CONTROVALORE_PRODOTTO"]); saldo.valoreCtv = Convert.ToDouble(rwprodotto["CONTROVALORE_PRODOTTO"]); saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); if (codAdeguatezza != "") pkt.codiceAdeguatezza = codAdeguatezza; else pkt.codiceAdeguatezza = ""; if (codIsin != "") pkt.codiceIsin = codIsin; else pkt.codiceIsin = ""; if (codMaf != "") pkt.codiceMaf = codMaf; else pkt.codiceMaf = ""; if (codSottoProdotto != "") pkt.codiceSottoprodotto = codSottoProdotto; else pkt.codiceSottoprodotto = ""; if (codInterno != "") pkt.codiceInterno = codInterno; else pkt.codiceInterno = ""; saldo.chiave = pkt; ptfProdotto.AddSaldo(saldo); #endregion } #endregion if (ptfProdotto.descrizione != "" && ptfProdotto.descrizione != null) { ptfProdotto.AddChildSaldoToAggregate(); ptfIntermediario.AddAggregato(ptfProdotto); } } ptfIntermediario.AddChildToAggregate(); ptfProdotti.AddAggregato(ptfIntermediario); } ptfProdotti.AddChildToAggregate(); richiestaVarPortafoglio.Add(ptfProdotti); richiestaVarPortafoglio.AddChildToAggregate(); #endregion #endregion #endregion #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Metodo: CreaRichiestaVaRPortafoglioSezioneS102", ex.InnerException); } return mt; } private static messaggioType CreaRichiestaVaRPortafoglioSezioneS120(DataTable dtRichiesta) { #region Variabili costruzione oggetto MessageType messaggioType mt = new messaggioType(); headerMessaggioType hdm; bodyMessaggioType bdm; richiestaType richiesta; richiestaVaRPortafoglioType richiestaVarPortafoglio; ptfType ptfIntermediario; ptfType ptfProdotto = null; saldoType saldo = null; ProdottiKeyType pkt = null; #endregion try { #region Costruzione struttura base oggetto di tipo MessageType // L'oggetto e' costruito fino a richiestaVaRPortafoglio mt = new messaggioType(); hdm = new headerMessaggioType(); bdm = new bodyMessaggioType(); richiesta = new richiestaType(); bdm.Item = richiesta; mt.headerMessaggio = hdm; mt.bodyMessaggio = bdm; richiestaVarPortafoglio = new richiestaVaRPortafoglioType(); richiesta.Item = richiestaVarPortafoglio; #endregion #region HeaderMessage hdm.cliente = ConfigurationManager.AppSettings["CLIENTE"].ToString(); hdm.ip = ConfigurationManager.AppSettings["IP"].ToString(); #endregion #region BodyMessageType #region RichiestaVarPortafoglio // PTF - CT #region PTF //ciclo per leggere tutti i nodi e i campi in esso contenuti // alpha - ST richiestaVarPortafoglio.alpha = Convert.ToDouble(ConfigurationManager.AppSettings["ALPHA"].ToString()); richiestaVarPortafoglio.alphaSpecified = true; // hp - ST richiestaVarPortafoglio.hp = Convert.ToInt32(ConfigurationManager.AppSettings["HP"].ToString()); richiestaVarPortafoglio.hpSpecified = true; string codiceAgente = ""; string codiceRete = ""; string codiceFiscale = ""; string codiceApplicazione = ""; int versioneDBSimpb = 0; //decimal controvalore = 0; //bool prodottoincatalogo; string tipoProdottoAsul = ConfigurationManager.AppSettings["TIPOPRODOTTOASUL"].ToString().Trim().ToUpper(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAGENTE")) codiceAgente = dtRichiesta.ExtendedProperties["CODICEAGENTE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICERETE")) codiceRete = dtRichiesta.ExtendedProperties["CODICERETE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEFISCALE")) codiceFiscale = dtRichiesta.ExtendedProperties["CODICEFISCALE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("CODICEAPPLICAZIONE")) codiceApplicazione = dtRichiesta.ExtendedProperties["CODICEAPPLICAZIONE"].ToString(); if (dtRichiesta.ExtendedProperties.Contains("VERSIONEDATABASESIMPB")) versioneDBSimpb = int.Parse(dtRichiesta.ExtendedProperties["VERSIONEDATABASESIMPB"].ToString()); if (dtRichiesta.ExtendedProperties.Contains("CHIAVECLIENTEPB")) chiaveclientepb = int.Parse(dtRichiesta.ExtendedProperties["CHIAVECLIENTEPB"].ToString()); ptfType ptfProdotti = new ptfType(); ptfProdotti.descrizione = "PRODOTTI"; #region CREAZIONE OGGETTO MESSAGE DataTable dtIntermediario = dtRichiesta.DefaultView.ToTable(true, "intermediario"); // Contiene la lista degli intermediari foreach (DataRow rwdistinctIntermediario in dtIntermediario.Rows) { // Creo un aggregato ptfIntermediario = new ptfType(); ptfIntermediario.descrizione = rwdistinctIntermediario["intermediario"].ToString().Trim().Replace("'", "''").Length == 0 ? "BF" : rwdistinctIntermediario["intermediario"].ToString(); DataView dwProdottiPerIntermediario = new DataView(dtRichiesta); dwProdottiPerIntermediario.RowFilter = rwdistinctIntermediario["intermediario"].ToString().Length > 0 ? "intermediario='" + rwdistinctIntermediario["intermediario"].ToString().Replace("'", "''") + "'" : string.Empty; DataTable dtProdottiPerIntermediario = dwProdottiPerIntermediario.ToTable(); // contiene la lsista dei prodotti per singolo intermediario. foreach (DataRow rwprodotto in dtProdottiPerIntermediario.Rows) { ptfProdotto = new ptfType(); // Ogni ptfProdotto corrisponde ad un prodotto string codAdeguatezza = string.Empty; string codIsin = string.Empty; string codMaf = string.Empty; string codSottoProdotto = string.Empty; string codInterno = string.Empty; string codContratto = string.Empty; #region Recupero il Saldo per ogni prodotto // Distinguo il tipo prodotto ASUL dagli altri. // Per i prodotti ASUL di patrimonio terzi non devo chiamare la Chiamata a WSGLOBALPOSITION GetContrattoUnitLinkedSaldo // K Skandia //if (tipoProdottoAsul.Equals(rwprodotto["TipoProdotto"].ToString()) && (rwdistinctIntermediario["intermediario"].ToString().Equals("BF") || rwdistinctIntermediario["intermediario"].ToString().Equals("TOTALE"))) if (tipoProdottoAsul.Equals(rwprodotto["TipoProdotto"].ToString()) && !string.IsNullOrEmpty(rwprodotto["PositionId"].ToString()) && (rwdistinctIntermediario["intermediario"].ToString().Equals("BF") || rwdistinctIntermediario["intermediario"].ToString().Equals("TOTALE")) && rwprodotto["CONTRATTO"] != null && rwprodotto["CONTRATTO"].ToString() != "") { #region Prodotto ASUL if (rwprodotto["CONTRATTO"].ToString() != "") { codContratto = rwprodotto["CONTRATTO"].ToString(); ptfProdotto.descrizione = codContratto; } ptfProdotto.descrizione = rwprodotto["EMITTENTE"].ToString(); if (rwprodotto["CODICE_ISIN"].ToString() != "") ptfProdotto.descrizione += rwprodotto["CODICE_ISIN"].ToString(); else if (rwprodotto["COD_ADEGUATEZZA"].ToString() != "") ptfProdotto.descrizione += rwprodotto["COD_ADEGUATEZZA"].ToString(); else if (rwprodotto["CODICE_MAF"].ToString() != "") ptfProdotto.descrizione += rwprodotto["CODICE_MAF"].ToString(); #region Chiamata a WSGLOBALPOSITION PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente _chiaveCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.ChiaveCliente(); _chiaveCliente.codiceAgente = codiceAgente; _chiaveCliente.codicefiscale = codiceFiscale; _chiaveCliente.codiceRete = codiceRete; _chiaveCliente.potenzialeClienteNAC = true; PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient _infoCliente = new PrometeiaMessage.bancafideuram.nac.globalposition.InfoClient(); _infoCliente.codiceApplicazione = codiceApplicazione; _infoCliente.codiceRete = codiceRete; _infoCliente.versioneDatabaseSIMPB = versioneDBSimpb; GlobalPositionWS gpWS = new GlobalPositionWS(); DataTable dtAsul = gpWS.GetContrattoUnitLinkedSaldo(_chiaveCliente, codContratto, _infoCliente, chiaveclientepb); #endregion foreach (DataRow rwAsul in dtAsul.Rows) { saldo = new saldoType(); if (rwAsul["CONTROVALORE"] != DBNull.Value) { saldo.valore = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); saldo.valoreCtv = Convert.ToDouble(rwAsul["CONTROVALORE"].ToString()); } saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); //CODICEADEGUATEZZA if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceAdeguatezza = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceAdeguatezza = ""; //CODICESOTTOPRODOTTO if (rwAsul["ISINFITTIZIO"] != DBNull.Value) pkt.codiceSottoprodotto = rwAsul["ISINFITTIZIO"].ToString(); else pkt.codiceSottoprodotto = ""; saldo.chiave = pkt; ptfProdotto.AddSaldo(saldo); } #endregion } else { #region Prodotto NON ASUL ptfProdotto.descrizione = rwprodotto["EMITTENTE"].ToString(); if (rwprodotto["COD_ADEGUATEZZA"] != DBNull.Value) codAdeguatezza = rwprodotto["COD_ADEGUATEZZA"].ToString(); if (rwprodotto["CODICE_ISIN"] != DBNull.Value) codIsin = rwprodotto["CODICE_ISIN"].ToString(); if (rwprodotto["CODICE_MAF"] != DBNull.Value) codMaf = rwprodotto["CODICE_MAF"].ToString(); if (rwprodotto["CODICE_SOTTOPRODOTTO"] != DBNull.Value) codSottoProdotto = rwprodotto["CODICE_SOTTOPRODOTTO"].ToString(); if (rwprodotto["CODICE_INTERNO"] != DBNull.Value) codInterno = rwprodotto["CODICE_INTERNO"].ToString(); saldo = new saldoType(); // Ogni prodotto avrà un saldo saldo.valore = Convert.ToDouble(rwprodotto["CONTROVALORE_PRODOTTO"]); saldo.valoreCtv = Convert.ToDouble(rwprodotto["CONTROVALORE_PRODOTTO"]); saldo.valoreCtvSpecified = true; pkt = new ProdottiKeyType(); if (codAdeguatezza != "") pkt.codiceAdeguatezza = codAdeguatezza; else pkt.codiceAdeguatezza = ""; if (codIsin != "") pkt.codiceIsin = codIsin; else pkt.codiceIsin = ""; if (codMaf != "") pkt.codiceMaf = codMaf; else pkt.codiceMaf = ""; if (codSottoProdotto != "") pkt.codiceSottoprodotto = codSottoProdotto; else pkt.codiceSottoprodotto = ""; if (codInterno != "") pkt.codiceInterno = codInterno; else pkt.codiceInterno = ""; saldo.chiave = pkt; ptfProdotto.AddSaldo(saldo); #endregion } #endregion if (ptfProdotto.descrizione != "" && ptfProdotto.descrizione != null) { ptfProdotto.AddChildSaldoToAggregate(); ptfIntermediario.AddAggregato(ptfProdotto); } } ptfIntermediario.AddChildToAggregate(); ptfProdotti.AddAggregato(ptfIntermediario); } ptfProdotti.AddChildToAggregate(); richiestaVarPortafoglio.Add(ptfProdotti); richiestaVarPortafoglio.AddChildToAggregate(); #endregion #endregion #endregion #endregion } catch (Exception ex) { throw new Exception(ex.Message + "; Metodo: CreaRichiestaVaRPortafoglioSezioneS120", ex.InnerException); } return mt; } private static void SetVarpConCoperturaZero(messaggioType MessageObj) { if (MessageObj != null) { rispostaType risposta = (rispostaType)MessageObj.bodyMessaggio.Item; #region Risposta rispostaVaRPortafoglioType if (risposta.Item is rispostaVaRPortafoglioType) { rispostaVaRPortafoglioType rispostaPtf = (rispostaVaRPortafoglioType)risposta.Item; foreach (ptfType ptf in rispostaPtf.ptf) { if (ptf.stat.copertura == 0) { ptf.misureRischio.varp = -1000; ptf.stat.copertura = -1000; } FunzioneRicorsivaPtf(ptf); } } #endregion } } private static void FunzioneRicorsivaPtf(ptfType ptf) { if (ptf.aggregato != null) { foreach (ptfType ptfAggreagato in ptf.aggregato) { if (ptfAggreagato.stat.copertura == 0) ptfAggreagato.misureRischio.varp = -1000; FunzioneRicorsivaPtf(ptfAggreagato); } } } private static bool IsFAOFAP(string codiceInterno) { switch (codiceInterno) { case "48": case "49": case "60": case "18": case "35": case "PR": case "PX": return true; default: return false; } } private static DataTable DettagliAssicurativi(DataRow drProdotto, PrometeiaMessage.bancafideuram.nac.posizionecliente.ChiaveCliente chiave, string codiceContratto, string codiceInterno, PrometeiaMessage.bancafideuram.nac.posizionecliente.InfoClient info, int chiaveclientepb) { double investi, disinvesti; DettaglioOperazione[] dettagliOperazione = new DettaglioOperazione[1]; // totale operazioni DettaglioOperazione dettaglioOperazione = new DettaglioOperazione(); investi = 0; disinvesti = 0; if (drProdotto["investi"] != DBNull.Value) investi = Convert.ToDouble(drProdotto["investi"]); if (drProdotto["disinvesti"] != DBNull.Value) disinvesti = Convert.ToDouble(drProdotto["disinvesti"]); if (investi > 0) dettaglioOperazione.aggiuntivoLiquidazione = true; if (disinvesti > 0) dettaglioOperazione.aggiuntivoLiquidazione = false; dettaglioOperazione.codicesottoProdotto = string.Empty; dettaglioOperazione.importo = Math.Abs(investi - disinvesti); dettaglioOperazione.isinFittizio = string.Empty; dettagliOperazione[0] = dettaglioOperazione; PosizioneClienteWS pcWS = new PosizioneClienteWS(); return pcWS.GetDettaglioAssicurativi(chiave, codiceContratto, codiceInterno, dettagliOperazione, info, chiaveclientepb); } } public class DataViewSezione21 : DataView { private string _descrizione; public string Descrizione { get { return _descrizione; } set { _descrizione = value; } } }