public PlanningTaller(string codigoTaller) { // Consultas DataSet dsConsulta = new DataSet(); DBFunctions.Request(dsConsulta, IncludeSchema.NO, "SELECT DISTINCT DOR.pven_codigo,PVE.pven_nombre FROM dordenoperacion DOR INNER JOIN morden MOR ON DOR.pdoc_codigo=MOR.pdoc_codigo AND DOR.mord_numeorde=MOR.mord_numeorde INNER JOIN pvendedor PVE ON DOR.pven_codigo=PVE.pven_codigo WHERE MOR.test_estado = 'A' AND MOR.palm_almacen='" + codigoTaller + "' AND PVE.pven_vigencia = 'V';" + //0 "SELECT DOR.pdoc_codigo, DOR.mord_numeorde, DOR.ptem_operacion, DOR.pven_codigo, MOR.mord_entrada, MOR.mord_horaentr, DOR.tiempo_calculado FROM vtaller_dordenoperacion DOR INNER JOIN morden MOR ON DOR.pdoc_codigo=MOR.pdoc_codigo AND DOR.mord_numeorde=MOR.mord_numeorde WHERE DOR.test_estado = 'A' AND MOR.test_estado = 'A' AND MOR.palm_almacen = '" + codigoTaller + "' ORDER BY MOR.mord_entrada,DOR.pven_codigo ASC;" + //1 "SELECT DOR.pdoc_codigo, DOR.mord_numeorde, DOR.ptem_operacion, DOR.pven_codigo, DEO.test_estado, DEO.destoper_hora, DOR.tiempo_calculado FROM vtaller_dordenoperacion DOR INNER JOIN morden MOR ON DOR.pdoc_codigo=MOR.pdoc_codigo AND DOR.mord_numeorde=MOR.mord_numeorde LEFT JOIN destadisticaoperacion DEO ON DOR.pdoc_codigo=DEO.pdoc_codigo AND DOR.mord_numeorde=DEO.mord_numeorde AND DOR.ptem_operacion=DEO.ptem_operacion WHERE DOR.test_estado = 'A' AND MOR.test_estado = 'A' AND MOR.palm_almacen = '" + codigoTaller + "' ORDER BY MOR.mord_entrada,DOR.pven_codigo ASC;" + //2 "SELECT DOR.pdoc_codigo, DOR.mord_numeorde, DOR.ptem_operacion, PTE.ptem_descripcion, DOR.pven_codigo as codigo_mecanico, DOR.test_estado, TES.test_nombre as estado_operacion FROM vtaller_dordenoperacion DOR INNER JOIN morden MOR ON DOR.pdoc_codigo=MOR.pdoc_codigo AND DOR.mord_numeorde=MOR.mord_numeorde INNER JOIN testadooperacion TES ON DOR.test_estado = TES.test_estaoper INNER JOIN ptempario PTE ON DOR.ptem_operacion = PTE.ptem_operacion WHERE DOR.test_estado IN ('M','R','T') AND MOR.test_estado = 'A' AND MOR.palm_almacen = '" + codigoTaller + "' ORDER BY MOR.mord_entrada,DOR.pven_codigo ASC;" + //3 "SELECT DOR.pdoc_codigo as prefijo_orden, DOR.mord_numeorde as numero_orden, DOR.ptem_operacion as codigo_operacion, PTE.ptem_descripcion as descripcion_operacion FROM vtaller_dordenoperacion DOR INNER JOIN morden MOR ON DOR.pdoc_codigo=MOR.pdoc_codigo AND DOR.mord_numeorde=MOR.mord_numeorde INNER JOIN ptempario PTE ON DOR.ptem_operacion = PTE.ptem_operacion WHERE DOR.test_estado = 'S' AND MOR.test_estado = 'A' AND MOR.palm_almacen = '" + codigoTaller + "' ORDER BY MOR.mord_entrada,DOR.pven_codigo ASC;" + //4 "SELECT DOR.pdoc_codigo, DOR.mord_numeorde, DOR.ptem_operacion, PTE.ptem_descripcion, DOR.pven_codigo as codigo_mecanico, DOR.test_estado, TES.test_nombre as estado_operacion FROM vtaller_dordenoperacion DOR INNER JOIN morden MOR ON DOR.pdoc_codigo=MOR.pdoc_codigo AND DOR.mord_numeorde=MOR.mord_numeorde INNER JOIN testadooperacion TES ON DOR.test_estado = TES.test_estaoper INNER JOIN ptempario PTE ON DOR.ptem_operacion = PTE.ptem_operacion WHERE DOR.test_estado = 'C' AND MOR.test_estado = 'A' AND MOR.palm_almacen = '" + codigoTaller + "' ORDER BY MOR.mord_entrada,DOR.pven_codigo ASC;" + //5 "SELECT DOR.pdoc_codigo as prefijo_orden, DOR.mord_numeorde as numero_orden, DOR.ptem_operacion as codigo_operacion, PTE.ptem_descripcion as descripcion_operacion FROM vtaller_dordenoperacion DOR INNER JOIN morden MOR ON DOR.pdoc_codigo=MOR.pdoc_codigo AND DOR.mord_numeorde=MOR.mord_numeorde INNER JOIN ptempario PTE ON DOR.ptem_operacion = PTE.ptem_operacion WHERE DOR.test_estado = 'X' AND MOR.test_estado = 'A' AND MOR.palm_almacen = '" + codigoTaller + "' ORDER BY MOR.mord_entrada,DOR.pven_codigo ASC;"); //6 PrepararDtSalida(); // Fin Consultas // Inicio Construcción de Intervalo de Atención horaInicioTaller = Convert.ToDateTime(DBFunctions.SingleData("SELECT ctal_himec FROM ctaller")); horaFinalTaller = Convert.ToDateTime(DBFunctions.SingleData("SELECT ctal_hfmec FROM ctaller")); // Fin Construcción de Intervalo de Atención // Inicio Construccion Asignaciones Mecanico for (int i = 0; i < dsConsulta.Tables[0].Rows.Count; i++) { CollectionEstudioOperacion a = RealizarEstudioOperaciones(dsConsulta.Tables[0].Rows[i][0].ToString(), dsConsulta.Tables[1].Select("pven_codigo='" + dsConsulta.Tables[0].Rows[i][0] + "'", "mord_entrada,mord_horaentr ASC"), dsConsulta.Tables[2]); for (int j = 0; j < a.Count; j++) { DataRow dr = dtSalida.NewRow(); dr[0] = a[j].CodigoMecanico; dr[1] = DBFunctions.SingleData("SELECT pven_nombre FROM pvendedor WHERE pven_codigo='" + a[j].CodigoMecanico + "'"); dr[2] = a[j].PrefijoOrdenTrabajo; dr[3] = a[j].NumeroOrdenTrabajo; dr[4] = a[j].CodigoOperacion; dr[5] = DBFunctions.SingleData("SELECT ptem_descripcion FROM ptempario WHERE ptem_operacion='" + a[j].CodigoOperacion + "'"); dr[6] = a[j].FechorInicio; dr[7] = a[j].FechorFin; dr[8] = a[j].TiempoPlanificado; dr[9] = a[j].TiempoGastado; dtSalida.Rows.Add(dr); } } // Fin Construccion Asignaciones Mecanico // Inicio de Asignación de tabla de mecanicos general dtMecanicos = dsConsulta.Tables[0].Copy(); // Fin de Asignación de tabla de mecanicos general // Inicio de Asignación de tabla de operaciones paralizadas dtParalizadas = dsConsulta.Tables[3].Copy(); // Fin de Asignación de tabla de operaciones paralizadas // Inicio de Asignación de tabla de operaciones sin asignar dtSinAsignar = dsConsulta.Tables[4].Copy(); // Fin de Asignación de tabla de operaciones sin asignar // Inicio de Asignación de tabla de operaciones cumplidas dtCumplidas = dsConsulta.Tables[5].Copy(); // Fin de Asignación de tabla de operaciones cumplidas // Inicio de Asignación de tabla de operaciones cumplidas dtNoAutorizadas = dsConsulta.Tables[6].Copy(); // Fin de Asignación de tabla de operaciones cumplidas }
private void RevisionColisionTiemposSecundarios(CollectionEstudioOperacion salida, double tiempo, ref DateTime fechaInicio, ref DateTime fechaFin) { for (int i = 0; i < salida.Count; i++) { if ((fechaInicio >= salida[i].FechorInicio && fechaInicio <= salida[i].FechorFin) || (fechaFin >= salida[i].FechorInicio && fechaFin <= salida[i].FechorFin)) { fechaInicio = salida[i].FechorFin; fechaFin = fechaInicio.AddHours(tiempo); } } }
private CollectionEstudioOperacion RealizarEstudioOperaciones(string codigoMecanico, DataRow[] draOperacionesAsignadas, DataTable dtEstadisticasOperaciones) { int i = 0; ArrayList operacionesParalizadas = new ArrayList(); CollectionEstudioOperacion salida = new CollectionEstudioOperacion(); DateTime fechaPivote = DateTime.Now; if (draOperacionesAsignadas.Length > 0) { for (i = 0; i < draOperacionesAsignadas.Length; i++) { double tiempoGastado = 0; bool estadoOperacionParalizado = false; DateTime fechaEntrada = Convert.ToDateTime(draOperacionesAsignadas[i][4]); string horaEntrada = draOperacionesAsignadas[i][5].ToString(); DateTime fechaPivoteAnt = fechaPivote; DateTime fechaSalida = fechaPivote; DateTime fechaUltimaEstadistica = fechaPivote; if (i == 0) { fechaPivote = Convert.ToDateTime(fechaEntrada.ToString("yyyy-MM-dd") + " " + horaEntrada); fechaPivoteAnt = fechaPivote; fechaSalida = CalculoFechafinalizacion(fechaPivote, false, ref tiempoGastado, dtEstadisticasOperaciones.Select("pdoc_codigo='" + draOperacionesAsignadas[i][0] + "' AND mord_numeorde=" + draOperacionesAsignadas[i][1] + " AND ptem_operacion='" + draOperacionesAsignadas[i][2] + "'", "destoper_hora ASC"), Convert.ToDateTime(fechaEntrada.ToString("yyyy-MM-dd") + " " + horaEntrada), ref estadoOperacionParalizado, ref fechaUltimaEstadistica); } else { fechaSalida = CalculoFechafinalizacion(fechaPivote, true, ref tiempoGastado, dtEstadisticasOperaciones.Select("pdoc_codigo='" + draOperacionesAsignadas[i][0] + "' AND mord_numeorde=" + draOperacionesAsignadas[i][1] + " AND ptem_operacion='" + draOperacionesAsignadas[i][2] + "'", "destoper_hora ASC"), Convert.ToDateTime(fechaEntrada.ToString("yyyy-MM-dd") + " " + horaEntrada), ref estadoOperacionParalizado, ref fechaUltimaEstadistica); } if (estadoOperacionParalizado) { operacionesParalizadas.Add(new EstudioOperacion(codigoMecanico, draOperacionesAsignadas[i][2].ToString(), draOperacionesAsignadas[i][0].ToString(), Convert.ToInt32(draOperacionesAsignadas[i][1]), Convert.ToDouble(draOperacionesAsignadas[i][6]), tiempoGastado, fechaSalida, fechaSalida)); } else { fechaPivote = fechaSalida; //Ahora se revisa si la fecha de pivoteAnt es mayor a la fecha de entrada de la orden de trabajo asociada a la operacion if (fechaPivoteAnt >= fechaUltimaEstadistica) { salida.Add(new EstudioOperacion(codigoMecanico, draOperacionesAsignadas[i][2].ToString(), draOperacionesAsignadas[i][0].ToString(), Convert.ToInt32(draOperacionesAsignadas[i][1]), Convert.ToDouble(draOperacionesAsignadas[i][6]), tiempoGastado, fechaPivoteAnt, fechaPivote)); } else { if (Convert.ToDouble(draOperacionesAsignadas[i][6]) - tiempoGastado > 0) { salida.Add(new EstudioOperacion(codigoMecanico, draOperacionesAsignadas[i][2].ToString(), draOperacionesAsignadas[i][0].ToString(), Convert.ToInt32(draOperacionesAsignadas[i][1]), Convert.ToDouble(draOperacionesAsignadas[i][6]), tiempoGastado, fechaUltimaEstadistica, AjustarFechaHorario(fechaUltimaEstadistica.AddHours(Convert.ToDouble(draOperacionesAsignadas[i][6]) - tiempoGastado), Convert.ToDateTime(fechaUltimaEstadistica.ToString("yyyy-MM-dd") + " " + horaFinalTaller.ToString("HH:mm:ss"))))); } else { salida.Add(new EstudioOperacion(codigoMecanico, draOperacionesAsignadas[i][2].ToString(), draOperacionesAsignadas[i][0].ToString(), Convert.ToInt32(draOperacionesAsignadas[i][1]), Convert.ToDouble(draOperacionesAsignadas[i][6]), tiempoGastado, fechaUltimaEstadistica, AjustarFechaHorario(fechaUltimaEstadistica.AddHours(0.5), Convert.ToDateTime(fechaUltimaEstadistica.ToString("yyyy-MM-dd") + " " + horaFinalTaller.ToString("HH:mm:ss"))))); } } } } for (i = 0; i < operacionesParalizadas.Count; i++) { double tiempo = 0; DateTime fechaInicio = ((EstudioOperacion)operacionesParalizadas[i]).FechorInicio; DateTime fechaFin = ((EstudioOperacion)operacionesParalizadas[i]).FechorFin; if ((((EstudioOperacion)operacionesParalizadas[i]).TiempoPlanificado - ((EstudioOperacion)operacionesParalizadas[i]).TiempoGastado) <= 0) { tiempo = 0.5; //((EstudioOperacion)operacionesParalizadas[i]).FechorFin = fechaPivote = AjustarFechaHorario(((EstudioOperacion)operacionesParalizadas[i]).FechorInicio.AddHours(tiempo),Convert.ToDateTime(((EstudioOperacion)operacionesParalizadas[i]).FechorInicio.ToString("yyyy-MM-dd")+" "+horaFinalTaller.ToString("HH:mm:ss"))); fechaFin = fechaPivote = AjustarFechaHorario(((EstudioOperacion)operacionesParalizadas[i]).FechorInicio.AddHours(tiempo), Convert.ToDateTime(((EstudioOperacion)operacionesParalizadas[i]).FechorInicio.ToString("yyyy-MM-dd") + " " + horaFinalTaller.ToString("HH:mm:ss"))); } else { tiempo = ((EstudioOperacion)operacionesParalizadas[i]).TiempoPlanificado - ((EstudioOperacion)operacionesParalizadas[i]).TiempoGastado; //((EstudioOperacion)operacionesParalizadas[i]).FechorFin = fechaPivote = AjustarFechaHorario(((EstudioOperacion)operacionesParalizadas[i]).FechorInicio.AddHours(tiempo), Convert.ToDateTime(((EstudioOperacion)operacionesParalizadas[i]).FechorInicio.ToString("yyyy-MM-dd")+" "+horaFinalTaller.ToString("HH:mm:ss"))); fechaFin = fechaPivote = AjustarFechaHorario(((EstudioOperacion)operacionesParalizadas[i]).FechorInicio.AddHours(tiempo), Convert.ToDateTime(((EstudioOperacion)operacionesParalizadas[i]).FechorInicio.ToString("yyyy-MM-dd") + " " + horaFinalTaller.ToString("HH:mm:ss"))); } RevisionColisionTiemposSecundarios(salida, tiempo, ref fechaInicio, ref fechaFin); ((EstudioOperacion)operacionesParalizadas[i]).FechorInicio = fechaInicio; ((EstudioOperacion)operacionesParalizadas[i]).FechorFin = fechaFin; salida.Add((EstudioOperacion)operacionesParalizadas[i]); } } return(salida); }