示例#1
0
        public static string ordenArreglo(ArrayList puntero_final, ArrayList list_id_carros, ArrayList list_carro_x, ArrayList list_carro_y, ArrayList list_compania, ArrayList list_ranking, string idcarros, string idgrupos, string recu, int cod_llamado, ArrayList list_comp)
        {
            List <int> despGrupo = new List <int>();
            var        ccarros   = new z_carros();
            var        cczorden  = new z_orden();

            string[] arr       = new string[puntero_final.Count];
            string[] arr_split = new string[puntero_final.Count];
            string[] arr_uso   = new string[puntero_final.Count];
            int      r         = Convert.ToInt32(recu);
            string   valores_finales_retorno = "";

            for (int a = 0; a < puntero_final.Count; a++)
            {
                arr[a] = puntero_final[a].ToString();
            }
            while (r != 0)
            {
                for (int b = 0; b < arr.Length; b++)
                {
                    string valor_envio = arr[b].ToString();
                    if (carrosPorRanking(valor_envio, list_id_carros) == 1)
                    {
                        ccarros = ccarros.getObjectz_carros(id_carro_puntero);
                        if (Carro.EstaDisponible(ccarros) && r != 0)
                        {
                            //despGrupo.Add(ccarros.id_carro);
                            if (companias_a_despachar.Count != 0)
                            {
                                if (verificarCandidatosDespacho(ccarros.id_compania, companias_a_despachar))
                                {
                                    companias_a_despachar.Add(ccarros.id_compania);
                                    valores_finales_retorno += ccarros.id_carro + ",";
                                    r--;
                                }
                            }
                            else
                            {
                                companias_a_despachar.Add(ccarros.id_compania);
                                valores_finales_retorno += ccarros.id_carro + ",";
                                r--;
                            }
                        }
                    }
                    else
                    {
                        int[]  t_carro     = new int[carros_compuesto.Length];
                        string tc_string   = "";
                        string tc_string_2 = "";
                        string tc_usar     = "";
                        string tc_usar_2   = "";
                        for (int c = 0; c < carros_compuesto.Length; c++)
                        {
                            tc_string_2 += carros_compuesto[c].ToString() + ",";
                            tc_string   += ccarros.recuperarValorTipoCarro(Convert.ToInt32(carros_compuesto[c])) + ",";
                        }
                        tc_string   += "#";
                        tc_string_2 += "#";

                        tc_usar   = tc_string.Replace(",#", "");
                        tc_usar_2 = tc_string_2.Replace(",#", "");

                        int[] tc_recuperado = cczorden.recuperarTipoCarroOrdenTipo(cod_llamado, tc_usar);
                        for (int d = 0; d < tc_recuperado.Length; d++)
                        {
                            int id_carro_final = cczorden.despachoPorTipo(Convert.ToInt32(tc_recuperado[d].ToString()), tc_usar_2);
                            ccarros = ccarros.getObjectz_carros(id_carro_final);
                            if (Carro.EstaDisponible(ccarros) && r != 0)
                            {
                                //despGrupo.Add(ccarros.id_carro);
                                if (companias_a_despachar.Count != 0)
                                {
                                    if (verificarCandidatosDespacho(ccarros.id_compania, companias_a_despachar))
                                    {
                                        companias_a_despachar.Add(ccarros.id_compania);
                                        valores_finales_retorno += ccarros.id_carro + ",";
                                        r--;
                                    }
                                }
                                else
                                {
                                    companias_a_despachar.Add(ccarros.id_compania);
                                    valores_finales_retorno += ccarros.id_carro + ",";
                                    r--;
                                }
                            }
                        }
                    }
                }
                r = 0;
            }
            valores_finales_retorno += "#";
            return(valores_finales_retorno);
        }
示例#2
0
        public static z_carros ObtenerCarro(int id_tipo_carro, int id_area, bool verificar_cubriendo,
                                            List <int> compañias_usadas)
        {
            DataTable tipo_carros = new z_tipo_carro().Getz_tipo_carro().Tables[0];

            // Obtener compañía que debe despachar el tipo de carro especificado
            // (desde z_prioridad, parámetros: tipo_carro, cantidad)
            var     prioridad = new z_prioridad();
            DataSet ds        = prioridad.Getz_prioridad(id_area);

            // Verificar, desde tabla z_carros, si la compañía seleccionada tiene el tipo de carro requerido,
            // y que su estado sea=1 (en servicio)
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                DataRow dr      = ds.Tables[0].Rows[i];
                var     carro   = new z_carros();
                string  columna =
                    (string)(tipo_carros.Select("id_tipo_carro=" + id_tipo_carro)[0]["columna_despacho"]);
                int compañia = (int)dr[columna];

                //// CBQN: sólo un carro por compañía
                if (compañias_usadas != null && compañias_usadas.Contains(compañia))
                {
                    continue;
                }
                DataSet carros = carro.GetCarrosCompania(id_tipo_carro, compañia);
                foreach (DataRow Row in carros.Tables[0].Rows)
                {
                    carro = carro.getObjectz_carros((int)Row["id_carro"]);

                    // verificar cubrir cuarteles
                    if (verificar_cubriendo && carro.id_carro != 0)
                    {
                        // carro cubre área si 1) id_compania!=id_compania_orig y 2) id_compania_cubre==1° prioridad área
                        int primera_prioridad = (int)ds.Tables[0].Rows[0][columna];
                        if (carro.id_compania_orig != carro.id_compania && carro.id_compania == primera_prioridad)
                        {
                            // carro cubre área, ignorar
                            carro.id_carro = 0;
                        }
                    }

                    // seleccionar carro
                    if (carro.id_carro != 0)
                    {
                        if (Carro.EstaDisponible(carro))
                        {
                            Carro.Despachar(carro);
                            //Conductor.FueraServicio(carro.id_conductor, carro.id_carro);
                            return(carro);
                        }
                        // carro alternativo???
                        if (carro.id_tipo_alternativo != 0)
                        {
                            carro = carro.getObjectz_carros(carro.id_tipo_alternativo);
                            if (carro.id_carro != 0 && Carro.EstaDisponible(carro))
                            {
                                Carro.Despachar(carro);
                                //Conductor.FueraServicio(carro.id_conductor, carro.id_carro);
                                return(carro);
                            }
                        }
                    }
                }
            }
            return(new z_carros());
        }
示例#3
0
        private static CantidadCarros ObtenerCantidadCarros(int id_area, int codigo_llamado, out List <int> dos_6)
        {
            var dos6 = new List <int>();
            // 4
            var cantidad = new CantidadCarros();
            // obtener cantidad de carros necesaria
            DataTable di         = null;
            DataTable dh         = new z_despacho_habil().Getz_despacho_habil(id_area, codigo_llamado).Tables[0];
            DataTable tipo_carro = new z_tipo_carro().Getz_tipo_carro_despacho().Tables[0];

            // 4.a
            if ((bool)dh.Rows[0]["inhabil"])
            {
                if (EnBloqueHorario((string)dh.Rows[0]["bloques"]))
                {
                    di = new z_despacho_inhabil().Getz_despacho_inhabil(id_area, codigo_llamado).Tables[0];
                }
            }

            if (di == null)
            {
                for (int i = 0; i < tipo_carro.Rows.Count; i++)
                {
                    var columna = (string)tipo_carro.Rows[i]["columna_despacho"];
                    cantidad.Cantidad[i] = (int)dh.Rows[0][columna];
                }

                //dos6?
                if ((bool)dh.Rows[0]["dos_6"])
                {
                    var     dos = new z_dos_6();
                    DataSet ds  = dos.GetDos6Despacho((int)dh.Rows[0]["id_despacho"]);
                    foreach (DataRow dr in ds.Tables[0].Rows)
                    {
                        var carro = new z_carros();
                        carro = carro.getObjectz_carros((int)dr["id_carro"]);
                        if (Carro.EstaDisponible(carro))
                        {
                            Carro.Despachar(carro);
                            //Conductor.FueraServicio(carro.id_conductor, carro.id_carro);
                            dos6.Add(carro.id_carro);
                        }
                    }
                }
            }
            else
            {
                // despacho inhábil
                for (int i = 0; i < tipo_carro.Rows.Count; i++)
                {
                    string columna = (string)tipo_carro.Rows[i]["columna_despacho"];
                    cantidad.Cantidad[i] = (int)di.Rows[0][columna];
                }

                //dos6?
                if ((bool)di.Rows[0]["dos_6"])
                {
                    var     dos = new z_dos_6();
                    DataSet ds  = dos.GetDos6Despacho((int)di.Rows[0]["id_despacho"]);
                    foreach (DataRow dr in ds.Tables[0].Rows)
                    {
                        var carro = new z_carros();
                        carro = carro.getObjectz_carros((int)dr["id_carro"]);
                        if (Carro.EstaDisponible(carro))
                        {
                            Carro.Despachar(carro);
                            //Conductor.FueraServicio(carro.id_conductor, carro.id_carro);
                            dos6.Add(carro.id_carro);
                        }
                    }
                }
            }
            dos_6 = dos6;
            return(cantidad);
        }
示例#4
0
        /// <summary>
        /// Si ocurre un llamado 10-2, 10-8 o 10-9 en alguna de las áreas correspondiente a compañías que cuentan con ‘B’ y ‘BX’,
        /// debe ser despachado el ‘BX’ en lugar del ‘B’ que indica la pauta. Si al momento del despacho de alguna de estas claves
        /// (10-2, 10-8 o 10-9), el ‘BX’ se encuentra fuera de servicio, debe ser despachado el ‘B’ de la misma compañía en caso que
        /// se encuentre disponible o el ‘B’ de la compañía que corresponda según la prioridad.
        /// </summary>
        /// <param name="exp"></param>
        /// <param name="id_carros"></param>
        private static void CBMS_CasoEspecialBXporB(e_expedientes exp, ICollection <int> id_carros)
        {
            // verificar llamado 10-2, 10-8 o 10-9
            DataTable llamados = new z_llamados().Getz_llamados().Tables[0];

            DataRow[] res =
                llamados.Select("codigo_llamado=" + exp.codigo_principal +
                                " and (clave='10-2' or clave='10-8' or clave='10-9')");
            if (res.Length != 0)
            {
                // verificar que no haya BX
                //bool salio_bx = false;
                int  compania          = exp.id_area / 100;
                bool compania_tiene_bx = false;
                //bool bx_en_llamado_es_de_compañia = false;
                //int id_bx = 0;
                z_carros  bx         = null;
                DataTable tipo_carro = new z_tipo_carro().Getz_tipo_carro().Tables[0];
                DataTable carros     = new z_carros().Getz_carros().Tables[0];
                int       tipo_b     = (int)(tipo_carro.Select("tipo_carro_letra='B'")[0]["id_tipo_carro"]);
                int       tipo_bx    = (int)(tipo_carro.Select("tipo_carro_letra='BX'")[0]["id_tipo_carro"]);

                // salio un bx?
                foreach (int id in id_carros)
                {
                    DataRow dr = carros.Select("id_carro=" + id)[0];
                    if ((int)dr["id_tipo_carro"] == tipo_bx)
                    {
                        //salio_bx = true;
                        //id_bx = id;
                        bx = new z_carros().getObjectz_carros(id);
                        break;
                    }
                }

                // compañia tiene bx?
                foreach (DataRow dr in carros.Select("id_tipo_carro=" + tipo_bx))
                {
                    if ((int)dr["id_compania"] == compania)
                    {
                        compania_tiene_bx = true;
                        break;
                    }
                }
                // si salio el bx que no era, o no salio bx, (liberar bx y) asignar B segun prioridad
                if ((bx != null && bx.id_compania != compania && compania_tiene_bx) || bx == null && compania_tiene_bx)
                {
                    // liberar BX si habia
                    if (bx != null)
                    {
                        Carro.Liberar(bx.id_carro);
                        id_carros.Remove(bx.id_carro);
                    }
                    // obtener carro B
                    z_carros carro_b = Despacho.ObtenerCarro(tipo_b, exp.id_area);
                    if (carro_b.id_carro != 0)
                    {
                        Carro.Despachar(carro_b);
                        //Conductor.FueraServicio(carro_b.id_conductor, carro_b.id_carro);
                        id_carros.Add(carro_b.id_carro);
                    }
                }
            }
        }