예제 #1
0
        /// <summary>
        /// Igual al caso especial Agregar BX, pero para los UT
        /// </summary>
        /// <param name="exp"></param>
        /// <param name="id_carros"></param>
        private static void CBMS_CasoEspecialAgregarUT(e_expedientes exp, ICollection <int> id_carros)
        {
            z_llamados llam = new z_llamados().getObjectz_llamados_id(exp.codigo_principal);

            // verificar 10-0
            if (llam.clave == "10-0")
            {
                // verificar 2 B despachados
                int       cant_b     = 0;
                DataTable tipo_carro = new z_tipo_carro().Getz_tipo_carro().Tables[0];
                DataTable carros     = new z_carros().Getz_carros().Tables[0];
                var       tipo_b     = (int)(tipo_carro.Select("tipo_carro_letra='B'")[0]["id_tipo_carro"]);
                var       columna_b  = (string)(tipo_carro.Select("tipo_carro_letra='B'")[0]["columna_despacho"]);
                var       tipo_ut    = (int)(tipo_carro.Select("tipo_carro_letra='UT'")[0]["id_tipo_carro"]);
                var       carros_b   = new List <int>();

                foreach (int id in id_carros)
                {
                    DataRow dr = carros.Select("id_carro=" + id)[0];
                    if ((int)dr["id_tipo_carro"] == tipo_b)
                    {
                        cant_b++;
                        carros_b.Add(id);
                    }
                }

                if (cant_b >= 2)
                {
                    // obtener primera prioridad B (hecho arriba)
                    DataSet prioridad = new z_prioridad().Getz_prioridad(exp.id_area);
                    // si primer carro == primera prioridad, verificar bx
                    var prim_prioridad = (int)prioridad.Tables[0].Rows[0][columna_b];
                    if ((int)carros.Select("id_carro=" + carros_b[0])[0]["id_compania"] == prim_prioridad)
                    {
                        DataRow[] dr =
                            carros.Select("id_compania = " + prim_prioridad + " and id_tipo_carro=" + tipo_ut +
                                          " and estado=1");
                        // si dr!= null, liberar último B solicitado y agregar ut al despacho
                        if (dr.Length != 0)
                        {
                            // liberar último carro B
                            //Carro.Liberar(carros_b[carros_b.Count-1]);
                            //id_carros.Remove(carros_b[carros_b.Count - 1]);

                            // despachar BX
                            var ut = (int)dr[0]["id_carro"];
                            id_carros.Add(ut);
                            //Carro.MarcarDespachado(ut);
                            z_carros c = new z_carros().getObjectz_carros(ut);
                            //Conductor.FueraServicio(c.id_conductor, c.id_carro);
                            Carro.Despachar(c);
                        }
                    }
                }
            }
        }
예제 #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
        /// <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);
                    }
                }
            }
        }