/// <summary> /// Get DividendCustodian dictionary, [CustodianID] as key /// </summary> public Dictionary <int, DividendCustodian> Get_dvdCust_dic(string custodianType) { Dictionary <int, DividendCustodian> dic = new Dictionary <int, DividendCustodian>(); DB_select selt = new DB_select(DividendCustodian.Get_cmdTP()); SQL_relation rela0 = new SQL_relation("DividendIndex", RelationalOperator.Equals, this.DividendIndex); if (string.IsNullOrEmpty(custodianType)) { selt.SetCondition(rela0); } else { SQL_relation rela1 = new SQL_relation("Custodian_Type", RelationalOperator.Equals, custodianType); SQL_condition cond = new SQL_condition(rela0, ConditionalOperator.And, rela1); selt.SetCondition(cond); } DB_reader reader = new DB_reader(selt, Utility.Get_DRWIN_hDB()); while (reader.Read()) { DividendCustodian dc = new DividendCustodian(); dc.Init_from_reader(reader); dic[dc.CustodianID] = dc; } reader.Close(); return(dic); }
/*--------------------------------------------------------------------------------------------------------------------------*/ public void Calculate(int custodianID) { this.dvdCust = new DividendCustodian(custodianID); if (!this.dvdCust.Init_from_DB()) { return; } Dividend dvd = new Dividend(this.dvdCust.DividendIndex.Value); if (!dvd.Init_from_DB(DividendTable_option.Dividend_Control_Approved)) { return; } this.dvdCus_dic_all = dvd.Get_dvdCust_dic(null); this.dvdCus_dic_custodianType = dvd.Get_dvdCust_dic("Custodian"); //Get WithHolding Rate Set DTCPositionModelNumber_Mapping posMod = dvd.Get_DTCpos_model(); if (posMod == null) { return; } Dictionary <decimal, List <DTC_Position_Headers> > whr_map = posMod.Get_WHRcol_mapping(); HashSet <decimal> WHrate_hs = new HashSet <decimal>(); foreach (decimal whr in whr_map.Keys) { WHrate_hs.Add(whr); } this.Cal_initAttr_eventInfo(dvd); //Init name attributes this.Cal_initAttr_collections(WHrate_hs, dvd); //Init all levels based on WithHolding Rate //Special 4 Countries HashSet <string> country_hs = new HashSet <string>(StringComparer.OrdinalIgnoreCase); country_hs.Add("Finland"); country_hs.Add("Ireland"); country_hs.Add("Norway"); country_hs.Add("France"); if (country_hs.Contains(dvd.Country.Value)) { this.Calculate_special_from_DTCposition(whr_map, dvd); } else { this.Calculate_commen_from_Detail(WHrate_hs, dvd); } }
private void SubCal_read_DTCposition(Dictionary <decimal, List <DTC_Position_Headers> > whr_map, Dividend dvd) { List <Dividend_DTC_Position> pos_list = dvd.Get_DTCposition_list(); ParticipantMaster pc = new ParticipantMaster(); pc.Init_from_dtcPosList(pos_list); foreach (Dividend_DTC_Position pos in pos_list) { bool isRSH_flag = false; Participant pt = pc.GetParticipant(pos.DTC_Number.Value); if (pt != null) { isRSH_flag = pt.DCT_Number.StartsWith("RSH", StringComparison.OrdinalIgnoreCase); } int custodianID = pos.CustodianID.Value; if (!this.dvdCus_dic_custodianType.ContainsKey(custodianID)) { continue; } DividendCustodian pos_dvdCust = this.dvdCus_dic_custodianType[custodianID];//check against selected Depository if (!pos_dvdCust.Depositary.Value.Equals(this.dvdCust.Depositary.Value, StringComparison.OrdinalIgnoreCase)) { continue; } foreach (KeyValuePair <decimal, List <DTC_Position_Headers> > pair in whr_map) { decimal WH_rate = pair.Key, ADR_shares = 0; foreach (DTC_Position_Headers dph in pair.Value) { ADR_shares += pos.GetRateValues(dph.Table_Column.Value); } if (isRSH_flag) { this.RSH_dic[WH_rate].ADRQuantity += ADR_shares; } else { this.DTC_participant_dic[WH_rate].ADRQuantity += ADR_shares; } this.custodianEle_dic[custodianID].cust_dic[WH_rate].ADRQuantity += ADR_shares; this.summary.totalEle_dic[WH_rate].ADRQuantity += ADR_shares; } } }
/// <summary> /// Initialize all collection attributes using DTC Model Number /// </summary> private void Cal_initAttr_collections(HashSet <decimal> whr_hs, Dividend dvd) { int optNum = 0; foreach (decimal wh_rate in whr_hs) { Election_item item1 = new Election_item(optNum, wh_rate, "DTC_PARTICIPANT_ELECTION"); this.DTC_participant_dic[wh_rate] = item1; Election_item item2 = new Election_item(optNum, wh_rate, "RSH_ELECTION"); this.RSH_dic[wh_rate] = item2; Election_item item3 = new Election_item(optNum, wh_rate, "TOTAL_ELECTION"); this.summary.totalEle_dic[wh_rate] = item3; ++optNum; } int cEle_ID = 0; foreach (KeyValuePair <int, DividendCustodian> pair in this.dvdCus_dic_custodianType)//<CUSTODIAN_DETAILS> { int custodianID = pair.Key; DividendCustodian dvdCust = pair.Value; if (!dvdCust.Depositary.Value.Equals(this.dvdCust.Depositary.Value, StringComparison.OrdinalIgnoreCase)) { continue; } Custodian_ele ce = new Custodian_ele(); this.custodianEle_dic[custodianID] = ce; ce.ID = ++cEle_ID; ce.CUSTODIAN_NAME = dvdCust.Get_custodian_fullName(); ce.CUSTODIAN_REFERENCE = dvdCust.Custodian_Number.Value.ToString(); optNum = 0; foreach (decimal wh_rate in whr_hs) { Election_item item1 = new Election_item(optNum, wh_rate, "CUSTODIAN_ELECTION_OPTION"); ce.cust_dic[wh_rate] = item1; ++optNum; } } }
/// <summary> /// Check if DividendDetail is OK for counting in Election File /// </summary> private bool Check_DD_forEle(Dividend_Detail_simpleEF dd, Dividend dvd) { if (dd.Status.Value.StartsWith("Reject", StringComparison.OrdinalIgnoreCase)) { return(false); } if (!dvd.Sponsored.Value)//for Unsponsored events only { int custID = dd.CustodianID.Value; if (!this.dvdCus_dic_all.ContainsKey(custID)) { return(false); } else { DividendCustodian dc = this.dvdCus_dic_all[custID]; if (!dc.Depositary.Value.Equals(this.dvdCust.Depositary.Value, StringComparison.OrdinalIgnoreCase)) { return(false); } } } if (dd.ReclaimFeesType.Value.Equals("At-Source", StringComparison.OrdinalIgnoreCase)) { return(true); } else if (dd.ReclaimFeesType.Value.Equals("Quick-Refund", StringComparison.OrdinalIgnoreCase)) { return(dd.PaidViaDTCC.Value); } else { return(false); } }
public int Publish_to_ESP2() { int successValue = 0; /***************************************deal with security******************************************/ List <ESP2.Securities.Security> esp2_secList = ESP2.Securities.SecurityMaster.Get_secList_cusip(this.CUSIP.Value); ESP2.Securities.Security esp2_sec = null; if (esp2_secList.Count < 1) { Securities.Security drwin_sec = this.Get_security(); if (drwin_sec == null) { return(-1); } ESP2.Securities.Security new_esp2_sec = new ESP2.Securities.Security(); new_esp2_sec.Init_from_DRWIN_sec(drwin_sec); if (new_esp2_sec.Insert_to_DB()) { successValue += 1; } } else { esp2_sec = esp2_secList[0]; } if (esp2_sec == null)//try get esp2 security again { esp2_secList = ESP2.Securities.SecurityMaster.Get_secList_cusip(this.CUSIP.Value); if (esp2_secList.Count < 1) { return(-2); } else { esp2_sec = esp2_secList[0]; } } /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/ Event esp2_event = new Event(); esp2_event.Init_from_Dividend(this); esp2_event.security_id.Value = esp2_sec.security_id; /***************************************deal with depository******************************************/ DepositaryInfo depoInfo = DepositaryInfoMaster.GetDepo_by_name(this.Depositary.Value); if (depoInfo == null) { DepositaryInfo new_depo = new DepositaryInfo(); Depositaries.Depositary drwin_depo = Depositaries.DepositaryMaster.GetDepositary_by_name(this.Depositary.Value); new_depo.Init_from_DRWIN_depo(drwin_depo); new_depo.Insert_to_DB(); DepositaryInfoMaster.Reset(); depoInfo = DepositaryInfoMaster.GetDepo_by_name(this.Depositary.Value); if (depoInfo == null) { return(-3); } DepositaryIdemnification di = new DepositaryIdemnification(); di.Init_from_DRWIN_depo(drwin_depo); di.depositary_info_id.Value = depoInfo.depositary_info_id; di.Insert_to_DB(); } /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/ esp2_event.depositary_info_id.Value = depoInfo.depositary_info_id;//depositary info Dictionary <int, DividendCustodian> cust_dic = this.Get_dvdCust_dic(null); DividendCustodian primary_DRWIN_cust = null; foreach (DividendCustodian dvdCust in cust_dic.Values) { if (dvdCust.Custodian_Number.Value < 0) { continue; } if (dvdCust.Custodian_Type.Value.StartsWith("custodian", StringComparison.OrdinalIgnoreCase)) { primary_DRWIN_cust = dvdCust; break; } } if (primary_DRWIN_cust == null) { return(-4); } else { if (esp2_event.Insert_to_DB()) { successValue += 2; } else { return(-5); } } /*******************************deal with dividend custodian************************************/ Event inserted_esp2event = EventMaster.GetEvent_DividendIndex(this.DividendIndex); if (inserted_esp2event == null) { return(-6); } Country cty = CountryMaster.GetCountry_name(this.Country.Value); if (cty == null) { return(-7); } PrimaryCustodian pc = new PrimaryCustodian(); pc.Init_from_DRWIN_dvdCust(primary_DRWIN_cust, cty, inserted_esp2event); pc.Insert_to_DB(); EventContactInfo eci = new EventContactInfo(); eci.Init_from_DRWIN_dvdCust(primary_DRWIN_cust, cty, inserted_esp2event); eci.Insert_to_DB(); /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/ return(successValue); }
public DvdCustodian_AP_count(DividendCustodian dc) { this.dvdCust = dc; }
public void Calculate(List <Dividend_Detail_simpleAP> selected_dd_list) { if (selected_dd_list == null || this.APcount_dic.Count == 0) { return; } //Assign CustodianID for RSH first foreach (Dividend_Detail_simpleAP detail in selected_dd_list) { string DTCnum = detail.DTC_Number.Value; DTC_Participants dtcPart = DTC_Participants_master.Get_DTC_Participants_DTCnum(DTCnum); if (dtcPart == null || dtcPart.Type.IsValueEmpty) { continue; } if (!dtcPart.Type.Value.Equals("RSH", StringComparison.OrdinalIgnoreCase)) { continue; } DvdCustodian_AP_count dcAP = this.GetClosest_dc(detail.RecordDatePosition.Value, dtcPart.Depositary.Value); if (dcAP == null) { continue; } DividendCustodian dvdCust = dcAP.dvdCust; detail.CustodianID.Value = dvdCust.CustodianID; dcAP.expectedCount -= detail.RecordDatePosition.Value; dcAP.dd_list.Add(detail); //foreach (int custID in this.APcount_dic.Keys) //{ // DividendCustodian dvdCust = this.dvdCust_dic[custID]; // if (dvdCust.Depositary.Value.Equals(dtcPart.Depositary.Value, StringComparison.OrdinalIgnoreCase))//Try to match Depositary with [Dividend_Custodian] // { // DvdCustodian_AP_count dcAP = this.APcount_dic[custID]; // if (dcAP.expectedCount >= detail.RecordDatePosition.Value) // { // detail.CustodianID.Value = dvdCust.CustodianID; // dcAP.expectedCount -= detail.RecordDatePosition.Value; // dcAP.dd_list.Add(detail); // } // break; // } //} } //Assign CustodianID for non-RSH foreach (Dividend_Detail_simpleAP detail in selected_dd_list) { string DTCnum = detail.DTC_Number.Value; if (DTCnum != null && DTCnum.StartsWith("RSH", StringComparison.OrdinalIgnoreCase)) { continue; } DvdCustodian_AP_count dcAP = this.GetHighest_dc(); if (dcAP.expectedCount < detail.RecordDatePosition.Value) { continue; } DividendCustodian dvdCust = dcAP.dvdCust; detail.CustodianID.Value = dvdCust.CustodianID; dcAP.expectedCount -= detail.RecordDatePosition.Value; dcAP.dd_list.Add(detail); } }