예제 #1
0
        /// <summary>
        /// Copio el período seleccionado como origen en el período seleccionado como destino
        /// </summary>
        /// <param name="fOrigenDesde"></param>
        /// <param name="fOrigenHasta"></param>
        /// <param name="fDestinoDesde"></param>
        /// <param name="fDestinoHasta"></param>
        /// <param name="lineas"></param>
        /// <returns></returns>
        private List<OrdenadoDetDTO> PeriodosCopiar(DateTime fOrigenDesde, DateTime fOrigenHasta, DateTime fDestinoDesde, DateTime fDestinoHasta, List<OrdenadoDetDTO> lineas)
        {
            List<OrdenadoDetDTO> LineasOrigen           = lineas;
            List<OrdenadoDetDTO> LineasSeleccionadas    = new List<OrdenadoDetDTO>();
            List<OrdenadoDetDTO> 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 = Lineas.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(LineasOrigen[0].Fecha.Year, LineasOrigen[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.OrdenadoDetDAO odd = new DAO.OrdenadoDetDAO();
                        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)
                            {
                                OrdenadoDetDTO newLine = new OrdenadoDetDTO();

                                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++;
            }
            lineas = LineasDestino.OrderBy(p => p.Dia).ThenBy(q => q.Hora).ThenBy(r => r.Salida).ToList();

            return lineas;
        }
예제 #2
0
        private List<OrdenadoDetDTO> GenerarLineas(TimeSpan horaInicio, TimeSpan horaFin, IntervaloDTO intervalo, FrecuenciaDTO frecuenciaCab, AvisosDTO aviso, List<FrecuenciaDetDTO> frecuenciaDetalles)
        {
            List<OrdenadoDetDTO> lineas         = Lineas;
            List<OrdenadoDetDTO> preExistentes  = new List<OrdenadoDetDTO>();

            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;
            OrdenadoDetDTO linea;
            List<DateTime> periodo;

            try
            {
                //Obtengo la lista de los días partiedo de fechas o nombres de dia.
                if (frecuenciaCab.SemMes == "SEMANA")
                    periodo = Ordenados.GetDatesByDayNames(deAnoMes.Date.Year, deAnoMes.Date.Month, GetDiasSeleccionados());

                else
                    periodo = Ordenados.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 OrdenadoDetDTO();
                        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;
        }
예제 #3
0
 public EstimadoDetDTO(OrdenadoDetDTO ordDet)
 {
     DTOHelper.FillObjectByObject(ordDet, this);
 }
예제 #4
0
        private List<OrdenadoDetDTO> CopiarPeriodos( DateTime fOrigenDesde, DateTime fOrigenHasta, DateTime fDestinoDesde,  List<OrdenadoDetDTO> 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.

            lineas = lineas.OrderBy(o => o.Fecha).ThenBy( q => q.Dia).ThenBy(p => p.Hora).ToList();

            var lineasACopiar =lineas.FindAll((x) =>(x.Fecha >= fOrigenDesde && x.Fecha <= fOrigenHasta)).OrderBy( n => n.Fecha).ThenBy(t => t.Dia).ThenBy(y => y.Hora).ToList();

            lineasACopiar = lineasACopiar.OrderBy(b => b.Dia).ToList();

            //Si encontre líneas a copiar...
            if (lineasACopiar.Count > 0)
            {
                OrdenadoDetDTO nuevaLinea;
                DateTime fechaTmp;

                List<OrdenadoDetDTO> lineasTmp      = new List<OrdenadoDetDTO>();
                List<OrdenadoDetDTO> preExistentes  = new List<OrdenadoDetDTO>();

                DateTime diasEnElFuturo = fOrigenDesde;

                int cantDias;

                fechaTmp = fDestinoDesde;

                cantDias = 0;

                //Por cada linea que encontre, genero una nueva e igual, x dias en el futuro.

                int newDia = 0;

                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 OrdenadoDetDTO();

                    nuevaLinea.RecId = NextTempRecId();

                    nuevaLinea.DatareaId = linea.DatareaId;

                    //cargo lineas nuevas

                    if (fOrigenDesde != linea.Fecha)
                    {
                        if(fOrigenDesde.Day < Convert.ToInt32(linea.Dia) && newDia != Convert.ToInt32(linea.Dia))
                        {
                            cantDias = Convert.ToInt32(linea.Dia) - fOrigenDesde.Day;
                            newDia = Convert.ToInt32(linea.Dia);
                            fechaTmp = fechaTmp.AddDays(cantDias);
                        }

                        if (fOrigenDesde.Day < Convert.ToInt32(linea.Dia) && newDia != Convert.ToInt32(linea.Dia))
                        {
                            cantDias = fOrigenDesde.Day - Convert.ToInt32(linea.Dia);
                            newDia = Convert.ToInt32(linea.Dia);
                            fechaTmp = fechaTmp.AddDays(cantDias);
                        }

                        diasEnElFuturo = linea.Fecha;

                    }

                    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.CostoSalida  = linea.CostoSalida ;
                    nuevaLinea.CostoUni     = linea.CostoUni    ;
                    nuevaLinea.Duracion     = linea.Duracion    ;
                    nuevaLinea.IdentifAviso = linea.IdentifAviso;
                    nuevaLinea.PautaId      = linea.PautaId     ;
                    nuevaLinea.Salida       = linea.Salida      ;

                    foreach (OrdenadoDetDTO l in lineas)
                    {
                        if (l.Fecha == fechaTmp.Date)
                            if (l.Hora == linea.Hora)
                                if (l.Salida == nuevaLinea.Salida)
                                    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 = lineasTmp.OrderBy(o => o.Dia).ThenBy(p => p.Hora).ToList();

                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");
            }
        }
예제 #5
0
 public EstimadoDetDTO(OrdenadoDetDTO ordDet)
 {
     DTOHelper.FillObjectByObject(ordDet, this);
 }