Esempio n. 1
0
        /// <summary>
        /// Synchronize weights
        /// </summary>
        private void SynchronizeWeights(int?year, int?month)
        {
            String query = "SELECT * FROM CHILD_WEIGHT_SUMMARY";

            if (year.HasValue && month.HasValue)
            {
                query += " WHERE \"YEAR\" = @year AND \"MONTH\" = @month";
            }
            query += " ORDER BY \"YEAR\", \"MONTH\"";

            DxfMessage  message  = new DxfMessage();
            DxfValueSet valueSet = new DxfValueSet();

            message.ValueSets.Add(valueSet);

            // Load indicator map
            List <KeyValuePair <String, KeyValuePair <Int32, String> > > indicatorMap = new List <KeyValuePair <string, KeyValuePair <int, string> > >();

            XmlDocument map = new XmlDocument();

            map.Load(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "WeightIndicatorMap.xml"));
            valueSet.DataSet = map.SelectSingleNode("//*[local-name() = 'map']/@id").Value;

            foreach (XmlNode nd in map.SelectNodes("//*[local-name() = 'indicator']"))
            {
                indicatorMap.Add(new KeyValuePair <string, KeyValuePair <int, string> >(nd.Attributes["id"].Value, new KeyValuePair <int, string>(Int32.Parse(nd.Attributes["ageGroup"].Value), nd.Attributes["column"].Value)));
            }

            using (NpgsqlConnection conn = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["GiisConnectionString"].ConnectionString))
            {
                conn.Open();
                using (NpgsqlCommand cmd = new NpgsqlCommand(query, conn))
                {
                    cmd.Parameters.Add("@year", year.HasValue ? year.Value : 0);
                    cmd.Parameters.Add("@month", month.HasValue ? month.Value : 0);

                    cmd.CommandType = System.Data.CommandType.Text;
                    using (var dataReader = cmd.ExecuteReader())
                        while (dataReader.Read())
                        {
                            // < 60%
                            var imap = indicatorMap.FindAll(o => o.Value.Key == Convert.ToInt32(dataReader["age_id"]));

                            foreach (var itm in imap)
                            {
                                valueSet.Value.Add(new DxfValue()
                                {
                                    DataElement = itm.Key,
                                    Numerator   = Convert.ToInt32(dataReader[itm.Value.Value]),
                                    Denominator = 1,
                                    OrgUnit     = Convert.ToString(dataReader["HEALTH_FACILITY_CODE"]).Replace("urn:uuid:", ""),
                                    Period      = string.Format("{0:0000}{1:00}", dataReader["YEAR"], dataReader["MONTH"]),
                                    Value       = Convert.ToInt32(dataReader[itm.Value.Value])
                                });
                            }
                        }
                }
            }
            this.SendDxfMessage(message);
        }
Esempio n. 2
0
        public void SynchronizeImmunizations(int?year, int?month)
        {
            String query = "SELECT * FROM COVERAGE_REPORT_INDICATOR WHERE ADMIN_COVERAGE IS NOT NULL ";

            if (year.HasValue && month.HasValue)
            {
                query += " AND \"VACC_YEAR\" = @year AND \"VACC_MONTH\" = @month OR \"CVX_CODE\" = '102' AND (\"VACC_YEAR\" * 12 + \"VACC_MONTH\") >= (@year * 12 + @month) - 3";
            }
            query += " ORDER BY \"VACC_YEAR\", \"VACC_MONTH\"";

            DxfMessage  message  = new DxfMessage();
            DxfValueSet valueSet = new DxfValueSet();

            message.ValueSets.Add(valueSet);
            valueSet.DataSet = this.m_indicators.SelectSingleNode("//*[local-name() = 'indicatorGroup']/@id").Value;

            using (NpgsqlConnection conn = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["GiisConnectionString"].ConnectionString))
            {
                conn.Open();
                using (NpgsqlCommand cmd = new NpgsqlCommand(query, conn))
                {
                    cmd.Parameters.Add("@year", year.HasValue ? year.Value : 0);
                    cmd.Parameters.Add("@month", month.HasValue ? month.Value : 0);

                    cmd.CommandType = System.Data.CommandType.Text;
                    using (var dataReader = cmd.ExecuteReader())
                        while (dataReader.Read())
                        {
                            // For each of the items that we match in our document
                            foreach (XmlElement nd in this.m_indicators.SelectNodes(String.Format("//*[local-name() = 'indicator' and ./fullname/text() = '{0}']", dataReader["FULLNAME"])))
                            {
                                var      thisPeriod = String.Format("{0}M{1}", dataReader["VACC_YEAR"], dataReader["VACC_MONTH"]);
                                DxfValue value      = valueSet.Value.Find(o => o.OrgUnit == dataReader["HF_CODE"].ToString().Replace("urn:uuid:", "") && o.DataElement == nd.Attributes["id"].Value && o.Period == thisPeriod);

                                // Was an existing value found?
                                if (value == null)
                                {
                                    value = new DxfValue()
                                    {
                                        Period      = String.Format("{0:0000}{1:00}", dataReader["VACC_YEAR"], dataReader["VACC_MONTH"]),
                                        OrgUnit     = dataReader["HF_CODE"].ToString().Replace("urn:uuid:", ""),
                                        Value       = Convert.ToDecimal(dataReader["ADMIN_COVERAGE"]),
                                        DataElement = nd.Attributes["id"].Value
                                    };
                                }

                                // Age and droupout specs?
                                var age     = nd.SelectSingleNode("./*[local-name() = 'ageGroup']");
                                var dropout = nd.SelectSingleNode("./*[local-name() = 'dropout']");
                                if (age != null && age.InnerText == dataReader["AGE_GROUP"].ToString() ||
                                    age == null)
                                {
                                    value.Numerator   += Convert.ToInt32(dataReader["given"]);
                                    value.Denominator += Convert.ToInt32(dataReader["target"]);

                                    // Is this a dropout?
                                    if (dropout != null)
                                    {
                                        int prevMonth = Convert.ToInt32(dataReader["VACC_MONTH"]) + Int32.Parse(dropout.SelectSingleNode("./*[local-name() = 'month']").InnerText);
                                        int prevYear  = Convert.ToInt32(dataReader["VACC_YEAR"]) - (prevMonth <= 0 ? 1 : 0);
                                        if (prevMonth <= 0)
                                        {
                                            prevMonth = 12 - prevMonth;
                                        }
                                        var dropoutPrevObs = valueSet.Value.Find(o => o.Period == String.Format("{0}M{1}", prevYear, prevMonth) && o.DataElement == dropout.SelectSingleNode("./*[local-name() = 'indicator']/@id").Value&& o.OrgUnit == value.OrgUnit);
                                        if (dropoutPrevObs != null)
                                        {
                                            value.Numerator   = dropoutPrevObs.Numerator - value.Numerator;
                                            value.Denominator = dropoutPrevObs.Numerator;
                                        }
                                        else
                                        {
                                            continue;
                                        }
                                    }

                                    value.Value = (decimal)(((float)value.Numerator / value.Denominator) * 100);
                                }
                                else
                                {
                                    continue;
                                }

                                valueSet.Value.Add(value);
                            }
                        }
                }
            }

            // Remove anything not in our reporting year
            if (month.HasValue && year.HasValue)
            {
                valueSet.Value.RemoveAll(o => o.Period != String.Format("{0}M{1}", year, month));
            }

            this.SendDxfMessage(message);
        }