Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /*--------------------------------------------------------------------------------------------------------------------------*/

        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);
            }
        }
Exemple #3
0
        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;
                }
            }
        }
Exemple #4
0
        /// <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;
                }
            }
        }
Exemple #5
0
        /// <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);
            }
        }
Exemple #6
0
        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);
        }
Exemple #7
0
 public DvdCustodian_AP_count(DividendCustodian dc)
 {
     this.dvdCust = dc;
 }
Exemple #8
0
        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);
            }
        }