예제 #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);
                        }
                    }
                }
            }
        }
        //### Agrega un Carropor 2-6 si esta Disponible
        public static int DespachoPorDosSeis(int intIdExp)
        {
            DatosLogin.InvokeTwitter = "FT2";

            int RetornoCarro = 0;

            if (intIdExp > 0)
            {
                var carro = new z_carros();
                carro = carro.getObjectz_carros(intIdExp);
                if (!Carro.EstaDisponible(carro))
                {
                    MessageBox.Show("En Despacho por Distancia, el carro más próximo no esta disponible... ", "Sistema ZEUS");
                }
                else
                {
                    // marcar y asignar
                    //carro.estado = 4;
                    //carro.modifyz_carros(carro);

                    //string strExp = DatosLogin.LoginExp.ToString();
                    //MessageBox.Show("El Expediente..." + strExp, "Mensaje de ZEUS");

                    int id_carro_seleccionado = carro.id_carro;

                    //### Agregar Carro en tabla z_carros_llamado
                    if (carro.existenciaZcarrosLlamado(id_carro_seleccionado, DatosLogin.LoginExp) == 0)
                    {
                        carro.insertZcarrosLlamado(id_carro_seleccionado, DatosLogin.LoginGrp != 0 ? DatosLogin.LoginGrp : Convert.ToInt32(DatosLogin.LoginGrp), DatosLogin.LoginExp);
                        StaticClass.ArrGrupoCarros.Add(id_carro_seleccionado + "/" + DatosLogin.LoginGrp);
                    }


                    //### Asignar el Carro Seleccionado
                    Carro.Despachar(carro);

                    //idCarros.Add(id_carro_seleccionado);
                    RetornoCarro = id_carro_seleccionado;
                }
            }
            return(RetornoCarro);
        }
예제 #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
        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());
        }
예제 #5
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);
                    }
                }
            }
        }