/// <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> /// Calculate the difference between sum of values in [Dividend_Detail] and [Dividend_Custodian] /// </summary> private void SubCal_diff_from_dvdCust(Dividend dvd) { if (dvd == null) { return; } Dictionary <int, decimal> diff_dic = new Dictionary <int, decimal>(); //[Custodian_Number] as key foreach (DividendCustodian dc in this.dvdCus_dic_custodianType.Values) //get total from [Dividend_Custodian] { if (!dc.Depositary.Value.Equals(this.dvdCust.Depositary.Value, StringComparison.OrdinalIgnoreCase)) { continue; } diff_dic[dc.CustodianID] = dc.Custodian_Reported.Value; } decimal statutoryRate = dvd.StatutoryRate.Value * 100;//convert to percentage foreach (KeyValuePair <int, Custodian_ele> pair in this.custodianEle_dic) { Custodian_ele cele = pair.Value; int custodianID = pair.Key; decimal sum = 0; foreach (Election_item ele in cele.cust_dic.Values) { sum += ele.ADRQuantity; //sum of detail } diff_dic[custodianID] -= sum; //find differrence from detail if (cele.cust_dic.ContainsKey(statutoryRate)) { decimal unfavour_shares = diff_dic[custodianID]; if (unfavour_shares < 0) { MessageBox.Show("ElectionDocument Info 0: Details' RecordDatePosition total greater than Custodian(" + custodianID + ") Reported"); } else { cele.cust_dic[statutoryRate].ADRQuantity += unfavour_shares; } } } decimal diff_custodianReported = 0; foreach (decimal diff in diff_dic.Values) { diff_custodianReported += diff; } if (this.DTC_participant_dic.ContainsKey(statutoryRate)) { this.DTC_participant_dic[statutoryRate].ADRQuantity += diff_custodianReported; } if (this.summary.totalEle_dic.ContainsKey(statutoryRate)) { this.summary.totalEle_dic[statutoryRate].ADRQuantity += diff_custodianReported; } }