public Estimado(Ordenado ordenado, string usuario)
        {
            EstimadoDetDTO estDet;
            EstimadoSKUDTO estSKU;

            Cabecera             = new EstimadoCabDTO(ordenado.Cabecera);
            Cabecera.Confirmado  = usuario;
            Cabecera.FecConfirma = DateTime.Now;
            Cabecera.Version     = 1;
            Cabecera.FecUltModif = DateTime.Now;
            Cabecera.FecCierre   = null;
            Cabecera.UsuCierre   = string.Empty;

            Lineas = new List<EstimadoDetDTO>();
            foreach (var ordDet in ordenado.Lineas)
            {
                estDet       = new EstimadoDetDTO(ordDet);
                estDet.RecId = 0;
                Lineas.Add(estDet);
            }

            SKUs = new List<EstimadoSKUDTO>();
            foreach (var ordSKU in ordenado.SKUs)
            {
                estSKU       = new EstimadoSKUDTO(ordSKU);
                estSKU.RecId = 0;
                SKUs.Add(estSKU);
            }
        }
        internal static List<EstimadoDetDTO> CopiarPeriodos(DateTime fOrigenDesde, DateTime fOrigenHasta,
    DateTime fDestinoDesde, List<EstimadoDetDTO> lineas, StateBag viewState)
        {
            //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)
            {
                EstimadoDetDTO nuevaLinea;
                DateTime fechaTmp;
                List<EstimadoDetDTO> lineasTmp = new List<EstimadoDetDTO>();
                TimeSpan diasEnElFuturo = fDestinoDesde.Subtract(fOrigenDesde);

                //Por cada linea que encontre, genero una nueva e igual, x dias en el futuro.
                foreach (var linea in lineasACopiar)
                {
                    nuevaLinea           = new EstimadoDetDTO();
                    nuevaLinea.RecId     = NextTempRecId(viewState);
                    nuevaLinea.DatareaId = linea.DatareaId;

                    //Avanzo la fecha tantos dias como corresponda...
                    fechaTmp                 = linea.Fecha.Add(diasEnElFuturo)  ;
                    nuevaLinea.Fecha         = fechaTmp                         ;
                    nuevaLinea.Dia           = fechaTmp.Day                     ;
                    nuevaLinea.DiaSemana     = fechaTmp.ToString("dddd", new CultureInfo("es-ES")).ToUpper().Trim();
                    nuevaLinea.Costo         = linea.Costo                      ;
                    nuevaLinea.CostoOp       = linea.CostoOp                    ;
                    nuevaLinea.CostoOpUni    = linea.CostoOpUni                 ;
                    nuevaLinea.CostoUni      = linea.CostoUni                   ;
                    nuevaLinea.Duracion      = linea.Duracion                   ;
                    nuevaLinea.Hora          = linea.Hora                       ;
                    nuevaLinea.IdentifAviso  = linea.IdentifAviso               ;
                    nuevaLinea.PautaId       = linea.PautaId                    ;
                    nuevaLinea.Salida        = linea.Salida                     ;

                    //Agrego la nueva linea.
                    lineasTmp.Add(nuevaLinea);
                }

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

                //Guardo la lista en el Viewstate.
                return lineasTmp;
            }
            else
            {
                return lineas;
            }
        }
Exemple #3
0
 public EstimadoDetVersionDTO(EstimadoDetDTO estDet)
 {
     DTOHelper.FillObjectByObject(estDet, this);
 }
        private List<EstimadoDetDTO> CopiarPeriodos(DateTime fOrigenDesde, DateTime fOrigenHasta, DateTime fDestinoDesde, List<EstimadoDetDTO> lineas)
        {
            bool preExistentesFlag = false;
            EspacioContDTO espacio = GetEspacioContenido();

            //Armo lista de elementos 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)
            {
                EstimadoDetDTO nuevaLinea;
                DateTime fechaTmp;
                List<EstimadoDetDTO> lineasTmp = new List<EstimadoDetDTO>();
                List<EstimadoDetDTO> preExistentes = new List<EstimadoDetDTO>();

                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 EstimadoDetDTO();
                    nuevaLinea.RecId     = NextTempRecId();
                    nuevaLinea.DatareaId = linea.DatareaId;

                    //cargo lineas nuevas
                    if (fOrigenDesde != linea.Fecha)
                    {
                        cantDias++;
                        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 (EstimadoDetDTO 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.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");
            }
        }
        private List<EstimadoDetDTO> PeriodosCopiar(DateTime fOrigenDesde, DateTime fOrigenHasta, DateTime fDestinoDesde, DateTime fDestinoHasta, List<EstimadoDetDTO> lineas)
        {
            List<EstimadoDetDTO> LineasOrigen        = lineas;
            List<EstimadoDetDTO> LineasSeleccionadas = new List<EstimadoDetDTO>();
            List<EstimadoDetDTO> 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(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.EstimadoDetDAO odd = new DAO.EstimadoDetDAO();
                        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)
                            {
                                EstimadoDetDTO newLine = new EstimadoDetDTO();
                                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;
        }
        private List<EstimadoDetDTO> GenerarLineas(TimeSpan horaInicio, TimeSpan horaFin, IntervaloDTO intervalo, FrecuenciaDTO frecuenciaCab, AvisosDTO aviso, List<FrecuenciaDetDTO> frecuenciaDetalles)
        {
            List<EstimadoDetDTO> lineas        = Lineas;
            List<EstimadoDetDTO> preExistentes = new List<EstimadoDetDTO>();

            if (Validaciones(horaInicio, horaFin, intervalo, frecuenciaCab, aviso, frecuenciaDetalles) == false)
            {
                RefreshAbmGrid(gv);
                return lineas;
            }

            TimeSpan incremento = TimeSpan.FromMinutes(Convert.ToDouble(intervalo.CantMinutos));
            TimeSpan horaTemp;
            EstimadoDetDTO linea;
            List<DateTime> periodo;

            int year = Convert.ToInt32(Estimado.Cabecera.AnoMes.ToString().Substring(0,4));
            int month = Convert.ToInt32(Estimado.Cabecera.AnoMes.ToString().Substring(4,2));

            try
            {
                //Obtengo la lista de los días partiedo de fechas o nombres de dia.
                if (frecuenciaCab.SemMes == "SEMANA")
                    periodo = Ordenados.GetDatesByDayNames(year, month, GetDiasSeleccionados());
                else
                    periodo = Ordenados.GetDatesByDayNumbers(year, month, GetDiasSeleccionados());

                foreach (DateTime fecha in periodo)
                {
                    horaTemp = horaInicio;

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

                        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();
                        linea.IdentifAviso  = aviso != null ? aviso.IdentifAviso : string.Empty;
                        linea.Duracion      = aviso != null ? aviso.Duracion : null;
                        linea.Salida        = spSalidasInsertar.Value != null ? spSalidasInsertar.Number : 0;

                        lineas.Add(linea);

                        if (!lineas.Exists(
                            (x) => (x.Fecha == fechaTmp && x.Hora == horaTemp)))
                        {
                            lineas.Add(linea);
                        }
                        else
                        {
                            preExistentes.Add(linea);
                        }

                        horaTemp = horaTemp.Add(incremento);
                    }
                }
            }
            catch (Exception ex)
            {
                MsgErrorLinas(ex);
            }

            if (preExistentes.Count > 0)
                lblErrorLineas.Text = "No se pudieron grabar todas las lineas";

            return lineas;
        }
 public EstimadoDetVersionDTO(EstimadoDetDTO estDet)
 {
     DTOHelper.FillObjectByObject(estDet, this);
 }
 public CertificadoDetDTO(EstimadoDetDTO estDet)
 {
     DTOHelper.FillObjectByObject(estDet, this);
 }
Exemple #9
0
 public CertificadoDetDTO(EstimadoDetDTO estDet)
 {
     DTOHelper.FillObjectByObject(estDet, this);
 }