public Certificado(Estimado estimado, string usuario) { CertificadoDetDTO estDet; CertificadoSKUDTO estSKU; Cabecera = new CertificadoCabDTO(estimado.Cabecera); Lineas = new List<CertificadoDetDTO>(); foreach (var ordDet in estimado.Lineas) { estDet = new CertificadoDetDTO(ordDet); estDet.RecId = 0; Lineas.Add(estDet); } SKUs = new List<CertificadoSKUDTO>(); foreach (var ordSKU in estimado.SKUs) { estSKU = new CertificadoSKUDTO(ordSKU); estSKU.RecId = 0; SKUs.Add(estSKU); } }
private List<CertificadoDetDTO> PeriodosCopiar(DateTime fOrigenDesde, DateTime fOrigenHasta, DateTime fDestinoDesde, DateTime fDestinoHasta, List<CertificadoDetDTO> lineas) { List<CertificadoDetDTO> LineasOrigen = lineas; List<CertificadoDetDTO> LineasSeleccionadas = new List<CertificadoDetDTO>(); List<CertificadoDetDTO> LineasDestino = lineas; FrecuenciaDTO frecuencia = CRUDHelper.Read(string.Format("IdentifFrecuencia = '{0}'", ucIdentifFrecuencia.SelectedValue), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.Frecuencia)); List<FrecuenciaDetDTO> frecuenciaDetalles = CRUDHelper.ReadAll(string.Format("IdentifFrecuencia = '{0}'", frecuencia.IdentifFrecuencia), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.FrecuenciaDet)); lineas = mycert.OrderBy(p => p.Dia).ThenBy(q => q.Hora).ThenBy(r => r.Salida).ToList(); EspacioContDTO espacio = GetEspacioContenido(); string[,] DiasSemana = { { "LUNES", "MARTES", "MIERCOLES", "JUEVES", "VIERNES", "SABADO", "DOMINGO" }, { "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY" } }; var lineasACopiar = lineas.FindAll((x) => (x.Fecha.DayOfYear >= fOrigenDesde.DayOfYear && x.Fecha.DayOfYear <= fOrigenHasta.DayOfYear )); DateTime origenM; // ARMADO DE LINEAS SELECCIONADAS // for (int i = 0; i <= LineasOrigen.Count - 1; i++) { origenM = new DateTime(LineasOrigen[i].Fecha.Year, LineasOrigen[i].Fecha.Month, LineasOrigen[i].Fecha.Day); if (origenM >= fOrigenDesde && origenM <= fOrigenHasta) { LineasSeleccionadas.Add(lineas[i]); } } //ORDENA LAS LINEAS SELECCIONADAS LineasSeleccionadas = LineasSeleccionadas.OrderBy(o => o.Dia).ThenBy(p => p.Hora).ThenBy(q => q.Salida).ToList(); //CALCULO CANTIDAD DE DIAS EN EL MES int DiasEnMes = System.DateTime.DaysInMonth(LineasOrigen[0].Fecha.Year, LineasOrigen[0].Fecha.Month); //CALCULO CUAL ES EL DIA DE LA SEMANA DEL 1 DEL MES int DiaSemana = Convert.ToInt32(Convert.ToDateTime( LineasOrigen[0].Fecha.Year.ToString() + "-" + LineasOrigen[0].Fecha.Month.ToString("00") + "-" + "01").DayOfWeek); // RECORRO UNO A UNO LOS DIAS DEL MES for (int i = 1; i <= DiasEnMes; i++) { // PREGUNTO SI EL DIA DEL MES ESTA DENTRO DEL RANGO DE DIAS SELECCIONADOS COMO DESTINO if (i >= fDestinoDesde.Day && i <= fDestinoHasta.Day) { DateTime muleto = new DateTime(LineasSeleccionadas[0].Fecha.Year, LineasSeleccionadas[0].Fecha.Month, i); string diamuleto = muleto.DayOfWeek.ToString().Trim().ToUpper(); for (int x = 0; x <= DiasSemana.Length - 1; x++) { if (DiasSemana[1, x].ToUpper() == diamuleto) { diamuleto = DiasSemana[0, x].ToUpper(); break; } } var listamuleto = frecuenciaDetalles.FindAll(q => q.DiaSemana.Trim().ToUpper() == diamuleto); if (listamuleto.Count > 0) { //BUSCO A VER SI EXISTEN LINEAS PREVIAS CON DATOS PARA ESA FECHA var newList = LineasOrigen.FindAll(s => s.Fecha.Day == i); DAO.CertificadoDetDAO odd = new DAO.CertificadoDetDAO(); int LastId = odd.GetLastRecId(); if (newList.Count > 0) LineasDestino.RemoveAll(p => p.Fecha.Day == i); //NO HAY DATOS PREEXISTENTES PARA ESE DIA DEL MES DateTime diaActual = new DateTime(LineasOrigen[0].Fecha.Year, LineasOrigen[0].Fecha.Month, i); // CREO UNA NUEVA LINEA CON LOS DATOS DE LA PRESELECCION PARA ESE DIA DE LA SEMANA for (int j = 0; j <= LineasSeleccionadas.Count - 1; j++) { var miLineaSeleccionada = LineasSeleccionadas[j].DiaSemana.ToUpper().Trim().Replace("É", "E").Replace("Á", "A"); var lista = frecuenciaDetalles.FindAll(q => q.DiaSemana.Trim() == miLineaSeleccionada); if (lista.Count == 1) { CertificadoDetDTO newLine = new CertificadoDetDTO(); LastId++; newLine.DatareaId = 0; newLine.RecId = LastId; newLine.Costo = LineasSeleccionadas[j].Costo; newLine.CostoOp = LineasSeleccionadas[j].CostoOp; newLine.CostoOpUni = LineasSeleccionadas[j].CostoOpUni; newLine.CostoUni = LineasSeleccionadas[j].CostoUni; newLine.Dia = i; newLine.Fecha = new DateTime(LineasSeleccionadas[j].Fecha.Year, LineasSeleccionadas[j].Fecha.Month, i); string dia = newLine.Fecha.DayOfWeek.ToString().ToUpper(); for (int k = 0; k <= DiasSemana.Length - 1; k++) { if (DiasSemana[1, k].ToUpper() == dia) { newLine.DiaSemana = DiasSemana[0, k].ToUpper(); break; } } newLine.Duracion = LineasSeleccionadas[j].Duracion; newLine.Hora = LineasSeleccionadas[j].Hora; newLine.IdentifAviso = LineasSeleccionadas[j].IdentifAviso; newLine.PautaId = LineasSeleccionadas[j].PautaId; newLine.Salida = LineasSeleccionadas[j].Salida; LineasDestino.Add(newLine); } } } } DiaSemana = DiaSemana == 7 ? 1 : DiaSemana++; } mycert = LineasDestino.OrderBy(p => p.Dia).ThenBy(q => q.Hora).ThenBy(r => r.Salida).ToList(); lineas = LineasDestino; return lineas; }
private List<CertificadoDetDTO> GenerarLineas(TimeSpan horaInicio, TimeSpan horaFin, IntervaloDTO intervalo, FrecuenciaDTO frecuenciaCab, AvisosDTO aviso, List<FrecuenciaDetDTO> frecuenciaDetalles) { List<CertificadoDetDTO> lineas = mycert; List<CertificadoDetDTO> preExistentes = new List<CertificadoDetDTO>(); if (intervalo == null) { intervalo = new IntervaloDTO(); intervalo.CantMinutos = Convert.ToDecimal(0); } if (Validaciones(horaInicio, horaFin, intervalo, frecuenciaCab, aviso, frecuenciaDetalles) == false) { RefreshAbmGrid(gv); return lineas; } TimeSpan incremento = TimeSpan.FromMinutes(Convert.ToDouble(intervalo.CantMinutos)); TimeSpan horaTemp; CertificadoDetDTO linea; List<DateTime> periodo; try { //Obtengo la lista de los días partiedo de fechas o nombres de dia. if (frecuenciaCab.SemMes == "SEMANA") periodo = Certificados.GetDatesByDayNames(deAnoMes.Date.Year, deAnoMes.Date.Month, GetDiasSeleccionados()); else periodo = Certificados.GetDatesByDayNumbers(deAnoMes.Date.Year, deAnoMes.Date.Month, GetDiasSeleccionados()); foreach (DateTime fecha in periodo) { horaTemp = horaInicio; if (aviso.Duracion == 0) { incremento = new TimeSpan(0); } else if (aviso.Duracion == null) { incremento = new TimeSpan(0); } if (horaTemp.CompareTo(horaFin) == 0) { horaFin = horaFin.Add(TimeSpan.FromHours(1)); incremento = incremento.Add(TimeSpan.FromHours(1)); } if (incremento.Minutes == 0 && ((horaTemp.CompareTo(horaFin) == 0))) { horaFin = horaFin.Add(TimeSpan.FromHours(1)); incremento = incremento.Add(TimeSpan.FromHours(1)); } else if (incremento.Minutes == 0 && ((horaTemp.CompareTo(horaFin) == 1))) { horaFin = horaFin.Add(TimeSpan.FromHours(-1)); } //Mientras no supere la hora hasta... while (horaTemp.CompareTo(horaFin) < 0) { DateTime fechaTmp = new DateTime(fecha.Year, fecha.Month, fecha.Day, horaTemp.Hours, horaTemp.Minutes, horaTemp.Seconds); linea = new CertificadoDetDTO(); linea.RecId = lineas.Count; linea.Fecha = fechaTmp; linea.Hora = horaTemp; linea.Dia = fecha.Day; linea.DiaSemana = fecha.ToString("dddd", new CultureInfo("es-ES")).ToUpper().Trim(); if (aviso != null) { linea.IdentifAviso = aviso.IdentifAviso; linea.Duracion = aviso.Duracion; } else { linea.IdentifAviso = string.Empty; linea.Duracion = null; } linea.Salida = spSalidasInsertar.Number; if (!lineas.Exists( (x) => (x.Fecha == fechaTmp && x.Hora == horaTemp && x.Salida == linea.Salida && x.IdentifAviso == linea.IdentifAviso))) { lineas.Add(linea); } else { preExistentes.Add(linea); } horaTemp = horaTemp.Add(incremento); if (aviso.Duracion == null || aviso.Duracion == 0) { horaTemp = horaFin; } } } } catch (Exception ex) { MsgErrorLinas(ex); } if (preExistentes.Count > 0) { lblErrorLineas.Text = "No se pudieron grabar todas las lineas. No olvide GRABAR antes de continuar."; } RefreshAbmGrid(gv); return lineas; }
private List<CertificadoDetDTO> CopiarPeriodos(DateTime fOrigenDesde, DateTime fOrigenHasta, DateTime fDestinoDesde, List<CertificadoDetDTO> lineas) { bool preExistentesFlag = false; EspacioContDTO espacio = GetEspacioContenido(); //Armo lista de elemtnos que SI reemplazo. //Busco en la coleccion, todas las lineas en el periodo, y con el aviso seleccionado. var lineasACopiar = lineas.FindAll( (x) => (x.Fecha >= fOrigenDesde && x.Fecha <= fOrigenHasta )); //Si encontre líneas a copiar... if (lineasACopiar.Count > 0) { CertificadoDetDTO nuevaLinea; DateTime fechaTmp; List<CertificadoDetDTO> lineasTmp = new List<CertificadoDetDTO>(); List<CertificadoDetDTO> preExistentes = new List<CertificadoDetDTO>(); DateTime diasEnElFuturo = fOrigenDesde; int cantDias; fechaTmp = fDestinoDesde; cantDias = 0; //Por cada linea que encontre, genero una nueva e igual, x dias en el futuro. foreach (var linea in lineasACopiar) { FrecuenciaDTO frecuencia = CRUDHelper.Read(string.Format("IdentifFrecuencia = '{0}'", ucIdentifFrecuencia.SelectedValue), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.Frecuencia)); List<FrecuenciaDetDTO> frecuenciaDetalles = CRUDHelper.ReadAll(string.Format("IdentifFrecuencia = '{0}'", frecuencia.IdentifFrecuencia), BusinessMapper.GetDaoByEntity(BusinessMapper.eEntities.FrecuenciaDet)); nuevaLinea = new CertificadoDetDTO(); nuevaLinea.RecId = NextTempRecId(); nuevaLinea.DatareaId = linea.DatareaId; //cargo lineas nuevas if (fOrigenDesde != linea.Fecha) { cantDias++; //cantDias = Convert.ToInt32(linea.Fecha.DayOfYear) - Convert.ToInt32(diasEnElFuturo.DayOfYear); diasEnElFuturo = linea.Fecha; fechaTmp = fechaTmp.AddDays(cantDias); } nuevaLinea.Fecha = fDestinoDesde.AddDays(cantDias); nuevaLinea.Dia = nuevaLinea.Fecha.Day; string[] sDias = { "DOMINGO", "LUNES", "MARTES", "MIERCOLES", "JUEVES", "VIERNES", "SABADO" }; for (int x = 0; x <= 6; x++) { if ((int)nuevaLinea.Fecha.DayOfWeek == x) { nuevaLinea.DiaSemana = sDias[x]; } } //evito que se carguen datos fuera de los dias pautados bool retval = false; for (int k = 0; k <= frecuenciaDetalles.Count - 1; k++) { if (nuevaLinea.DiaSemana.Trim() == frecuenciaDetalles[k].DiaSemana.Trim()) { retval = true; break; } } if (retval == false) { throw new Exception("No se puede grabar en dias de semana distintos a los pautados."); } //////////////////////////////////////////////////////// nuevaLinea.Hora = linea.Hora ; nuevaLinea.Costo = linea.Costo ; nuevaLinea.CostoOp = linea.CostoOp ; nuevaLinea.CostoOpUni = linea.CostoOpUni ; nuevaLinea.CostoUni = linea.CostoUni ; nuevaLinea.Duracion = linea.Duracion ; nuevaLinea.IdentifAviso = linea.IdentifAviso; nuevaLinea.PautaId = linea.PautaId ; nuevaLinea.Salida = linea.Salida ; foreach (CertificadoDetDTO l in lineas) { if (l.Fecha == fechaTmp.Date) { if (l.Hora == linea.Hora) { if (l.Salida == nuevaLinea.Salida) { //preExistentes.Add(nuevaLinea); preExistentes.Add(linea); } } } } lineasTmp.Add(nuevaLinea);//Agrego la nueva linea. } //Junto las dos listas (temporal y la que ya tenia). lineasTmp.AddRange(lineas); //Ordeno por fecha. lineasTmp.Sort((x, y) => DateTime.Compare(x.Fecha, y.Fecha)); if (preExistentesFlag == true) { lblErrorLineas.Text = "No se pudieron grabar todas las lineas. No olvide GRABAR antes de continuar."; } //Guardo la lista en el Viewstate. gv.DataSource = lineasTmp; return lineasTmp; } else { throw new Exception("No hay avisos para copiar dentro del rango seleccionado"); } }