Example #1
0
        public string SummaryTableCsv(string region, string city, string center,
                                      string code, int?actionType, int failRate0, int failRate1, int clientCount0, int clientCount1)
        {
            LoadData();

            var items = new List <dynamic>();

            using (var connection = new NpgsqlConnection(_connectionString)) {
                var whereItems = new List <string>();

                if (!string.IsNullOrEmpty(region))
                {
                    whereItems.Add("ct.provincia = '" + region + "'");
                }
                if (!string.IsNullOrEmpty(city))
                {
                    whereItems.Add("ct.municipio = '" + city + "'");
                }
                if (!string.IsNullOrEmpty(center))
                {
                    whereItems.Add("ct.centroresponsable = '" + center + "'");
                }

                if (!string.IsNullOrEmpty(code))
                {
                    whereItems.Add("ct.code = '" + code + "'");
                }
                if (actionType.HasValue && actionType.Value > 0)
                {
                    whereItems.Add("sum.action_required = '" + (actionType.Value == 1 ? "Regulatory Check" : actionType.Value == 2 ? "Maintenance Required" : "No action Required") + "'");
                }

                if (failRate0 > 0)
                {
                    whereItems.Add("sum.failure_probability >= " + failRate0 / 100.0);
                }
                if (failRate1 < 100)
                {
                    whereItems.Add("sum.failure_probability <= " + failRate1 / 100.0);
                }

                whereItems.Add("sum.num_clients >= " + clientCount0);
                whereItems.Add("sum.num_clients <= " + clientCount1);

                connection.Open();

                var text =
                    @"select ct.code,
                        sum.num_clients, sum.type_construct, sum.num_transf, sum.num_exits, sum.box_age, sum.cell_functional_type,
                        sum.max_ima, sum.min_ima_s, sum.transf_age,
                        sum.transf_fail_rate, sum.box_fail_rate, sum.exist_fail_rate, sum.constr_fail_rate,
                        sum.last_36m_failure, sum.last_48m_failure, sum.failure_probability, sum.action_required
                    from mp_gs_cts_gps_coordinates ct
                    join mp_gs_summry sum on sum.code = ct.code
                    where ";

                var command = new NpgsqlCommand(text + string.Join(" and ", whereItems) + " order by sum.failure_probability desc", connection);

                var reader = command.ExecuteReader();
                while (reader.Read())
                {
                    var ctCode = reader["code"] as string;
                    var ct     = _cts.FirstOrDefault(o => o.Code == ctCode);

                    if (ct != null)
                    {
                        var sum = new MpgsCtsSummary {
                            Code = ctCode,

                            ClientCount    = (int)(double)reader["num_clients"],
                            ConstructType  = reader["type_construct"] as string,
                            TransfCount    = (int)(double)reader["num_transf"],
                            ExitCount      = (int)(double)reader["num_exits"],
                            BoxAge         = (double)reader["box_age"],
                            CellFunctional = (int)(double)reader["cell_functional_type"],

                            MaxIma    = (double)reader["max_ima"],
                            MinIma    = (double)reader["min_ima_s"],
                            TransfAge = Math.Round((double)reader["transf_age"], 1),

                            TransfFailRate = Math.Round((double)reader["transf_fail_rate"] * 100, 1),
                            BoxFailRate    = Math.Round((double)reader["box_fail_rate"] * 100, 1),
                            ExitFailRate   = Math.Round((double)reader["exist_fail_rate"] * 100, 1),
                            ConstrFailRate = Math.Round((double)reader["constr_fail_rate"] * 100, 1),

                            FailRate36 = Math.Round((double)reader["last_36m_failure"] * 100, 1),
                            FailRate48 = Math.Round((double)reader["last_48m_failure"] * 100, 1),
                            FailRate   = Math.Round((double)reader["failure_probability"] * 100, 1),
                            Action     = reader["action_required"] as string
                        };

                        sum.ActionType = sum.Action == "Regulatory Check" ? 1 : sum.Action == "Maintenance Required" ? 2 : 3;

                        ct.ClientCount = sum.ClientCount;
                        ct.FailRate    = sum.FailRate;
                        ct.ActionType  = sum.ActionType;

                        items.Add(new { ct, sum });
                    }
                }

                reader.Close();
            }

            var builder = new StringBuilder();

            builder.AppendLine("Code,# clients,Type Constr,# transf,# exits,Box Age,Tp function,Max. I,Min. I,Transf. Age,Transf. F. Rate,Exits F. Rate,Box F. Rate,Constr F. Rate,Last 36m failure,Last 48m failure,Failure Prob,Action required");

            foreach (var item in items)
            {
                builder.Append(item.ct.Code + ",");
                builder.Append(item.ct.ClientCount + ",");

                builder.Append(item.sum.ConstructType + ",");
                builder.Append(item.sum.TransfCount + ",");
                builder.Append(item.sum.ExitCount + ",");
                builder.Append(item.sum.BoxAge + ",");
                builder.Append(item.sum.CellFunctional + ",");

                builder.Append(item.sum.MaxIma + ",");
                builder.Append(item.sum.MinIma + ",");
                builder.Append(item.sum.TransfAge + ",");

                builder.Append(item.sum.TransfFailRate + ",");
                builder.Append(item.sum.ExitFailRate + ",");
                builder.Append(item.sum.BoxFailRate + ",");
                builder.Append(item.sum.ConstrFailRate + ",");

                builder.Append(item.sum.FailRate36 + ",");
                builder.Append(item.sum.FailRate48 + ",");
                builder.Append(item.sum.FailRate + ",");
                builder.AppendLine(item.sum.Action);
            }

            return(builder.ToString());
        }
Example #2
0
        public dynamic SummaryTable(string region, string city, string center,
                                    string code, int?actionType, int failRate0, int failRate1, int clientCount0, int clientCount1, int page)
        {
            LoadData();

            var  pageSize = 50;
            var  items    = new List <dynamic>();
            long count    = 0;

            using (var connection = new NpgsqlConnection(_connectionString)) {
                var whereItems = new List <string>();

                if (!string.IsNullOrEmpty(region))
                {
                    whereItems.Add("ct.provincia = '" + region + "'");
                }
                if (!string.IsNullOrEmpty(city))
                {
                    whereItems.Add("ct.municipio = '" + city + "'");
                }
                if (!string.IsNullOrEmpty(center))
                {
                    whereItems.Add("ct.centroresponsable = '" + center + "'");
                }

                if (!string.IsNullOrEmpty(code))
                {
                    whereItems.Add("ct.code = '" + code + "'");
                }
                if (actionType.HasValue && actionType.Value > 0)
                {
                    whereItems.Add("sum.action_required = '" + (actionType.Value == 1 ? "Regulatory Check" : actionType.Value == 2 ? "Maintenance Required" : "No action Required") + "'");
                }

                if (failRate0 > 0)
                {
                    whereItems.Add("sum.failure_probability >= " + failRate0 / 100.0);
                }
                if (failRate1 < 100)
                {
                    whereItems.Add("sum.failure_probability <= " + failRate1 / 100.0);
                }

                whereItems.Add("sum.num_clients >= " + clientCount0);
                whereItems.Add("sum.num_clients <= " + clientCount1);

                connection.Open();

                var countText =
                    @"select count(1) as count
                    from mp_gs_cts_gps_coordinates ct
                    join mp_gs_summry sum on sum.code = ct.code
                    where ";

                var countCommand = new NpgsqlCommand(countText + string.Join(" and ", whereItems), connection);

                var reader = countCommand.ExecuteReader();
                while (reader.Read())
                {
                    count = (long)reader["count"];
                }
                reader.Close();

                var text =
                    @"select ct.code,
                        sum.num_clients, sum.type_construct, sum.num_transf, sum.num_exits, sum.box_age, sum.cell_functional_type,
                        sum.max_ima, sum.min_ima_s, sum.transf_age,
                        sum.transf_fail_rate, sum.box_fail_rate, sum.exist_fail_rate, sum.constr_fail_rate,
                        sum.last_36m_failure, sum.last_48m_failure, sum.failure_probability, sum.action_required
                    from mp_gs_cts_gps_coordinates ct
                    join mp_gs_summry sum on sum.code = ct.code
                    where ";

                var command = new NpgsqlCommand(text + string.Join(" and ", whereItems) + " order by sum.failure_probability desc limit " + pageSize + " offset " + (pageSize * page), connection);

                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    var ctCode = reader["code"] as string;
                    var ct     = _cts.FirstOrDefault(o => o.Code == ctCode);

                    if (ct != null)
                    {
                        var sum = new MpgsCtsSummary {
                            Code = ctCode,

                            ClientCount    = (int)(double)reader["num_clients"],
                            ConstructType  = reader["type_construct"] as string,
                            TransfCount    = (int)(double)reader["num_transf"],
                            ExitCount      = (int)(double)reader["num_exits"],
                            BoxAge         = (double)reader["box_age"],
                            CellFunctional = (int)(double)reader["cell_functional_type"],

                            MaxIma    = (double)reader["max_ima"],
                            MinIma    = (double)reader["min_ima_s"],
                            TransfAge = Math.Round((double)reader["transf_age"], 1),

                            TransfFailRate = Math.Round((double)reader["transf_fail_rate"] * 100, 1),
                            BoxFailRate    = Math.Round((double)reader["box_fail_rate"] * 100, 1),
                            ExitFailRate   = Math.Round((double)reader["exist_fail_rate"] * 100, 1),
                            ConstrFailRate = Math.Round((double)reader["constr_fail_rate"] * 100, 1),

                            FailRate36 = Math.Round((double)reader["last_36m_failure"] * 100, 1),
                            FailRate48 = Math.Round((double)reader["last_48m_failure"] * 100, 1),
                            FailRate   = Math.Round((double)reader["failure_probability"] * 100, 1),
                            Action     = reader["action_required"] as string
                        };

                        sum.ActionType = sum.Action == "Regulatory Check" ? 1 : sum.Action == "Maintenance Required" ? 2 : 3;

                        ct.ClientCount = sum.ClientCount;
                        ct.FailRate    = sum.FailRate;
                        ct.ActionType  = sum.ActionType;

                        items.Add(new { ct, sum });
                    }
                }

                reader.Close();
            }

            return(new { count, items, pageCount = Math.Ceiling(count / (double)pageSize) });
        }