/// <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); }
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); }
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()); }
/// <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); } } } }