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