예제 #1
0
        /// <summary>
        /// Rotina utilizada para Gerar os transfers.
        /// </summary>
        /// <param name="_Sheet"></param>
        /// <returns></returns>
        public List<Transfer> GerarTransfers(String _Sheet)
        {
            DataTable _Table = new Excel(Source).RetornarTudoSheet(_Sheet);

            Passageiro _Passageiro = new Passageiro(Source);

            Voo _VooChegada = new Voo(Source);
            Voo _VooRetorno = new Voo(Source);

            Char[] _Char = Environment.NewLine.ToCharArray();

            foreach (DataRow _Row in _Table.Rows)
            {
                try
                {
                    //IFormatProvider _Culture = new System.Globalization.CultureInfo("pt-BR", true);

                    _Passageiro.Nome = _Row[0].ToString();
                    _Passageiro.Documento = _Row[1].ToString();

                    _VooChegada.Data = DateTime.Parse(_Row[2].ToString().Split(_Char).Last().ToString());
                    _VooChegada.CidadeOrigem = _Row[3].ToString().Split(_Char).Last().ToString();
                    _VooChegada.CidadeDestino = _Row[4].ToString().Split(_Char).Last().ToString();
                    _VooChegada.CompanhiaAerea = _Row[5].ToString().Split(_Char).Last().ToString();
                    _VooChegada.NumeroVoo = _Row[6].ToString().Split(_Char).Last().ToString();
                    _VooChegada.HorarioSaida = DateTime.Parse(_Row[7].ToString().Split(_Char).Last().ToString());
                    _VooChegada.HorarioChegada = DateTime.Parse(_Row[8].ToString().Split(_Char).Last().ToString());

                    _VooRetorno.Data = DateTime.Parse(_Row[9].ToString().Split(_Char).First().ToString());
                    _VooRetorno.CidadeOrigem = _Row[10].ToString().Split(_Char).First().ToString();
                    _VooRetorno.CidadeDestino = _Row[11].ToString().Split(_Char).First().ToString();
                    _VooRetorno.CompanhiaAerea = _Row[12].ToString().Split(_Char).First().ToString();
                    _VooRetorno.NumeroVoo = _Row[13].ToString().Split(_Char).First().ToString();
                    _VooRetorno.HorarioSaida = DateTime.Parse(_Row[14].ToString().Split(_Char).First().ToString());
                    _VooRetorno.HorarioChegada = DateTime.Parse(_Row[15].ToString().Split(_Char).First().ToString());

                    _Passageiro.VooChegada = _VooChegada;
                    _Passageiro.VooRetorno = _VooRetorno;

                    Passageiros.Add(_Passageiro);

                    _Passageiro = new Passageiro(Source);
                    _VooChegada = new Voo(Source);
                    _VooRetorno = new Voo(Source);
                }
                catch
                {
                    //Gerar Log do ocorrido e em qual linha e continuar, no final verificar o logo e exibir para o usuário corrigir as pendências.
                    //Não exibir o resultado caso o log seja maior que 0. exibir o log.

                    LogErro _Erro = new LogErro();

                    continue;
                }
            }

            List<Passageiro> _PassageirosOrdenados = Passageiros.OrderBy(x => x.VooChegada.NumeroVoo).ToList();
            List<IGrouping<String, Passageiro>> _PassageirosAgrupados = _PassageirosOrdenados.GroupBy(x => x.VooChegada.NumeroVoo).ToList();

            List<Transfer> _Transfers = new List<Transfer>();

            foreach (IGrouping<String, Passageiro> _PassageiroOrdenado in _PassageirosAgrupados)
            {
                Transfer _Transfer = new Transfer(Source);
                int _CapacidadeMax = Veiculo.GetCapacidadeMaxima();

                if (_PassageiroOrdenado.Count() > _CapacidadeMax)
                {
                    List<Passageiro> _PassageirosTemp = _PassageiroOrdenado.ToList();

                    int _Max = (_PassageirosTemp.Count / _CapacidadeMax);

                    for (int i = 0; i <= _Max; i++)
                    {
                        _Transfer.Nome = String.Format("Transfer {0}.{1}", _PassageirosAgrupados.IndexOf(_PassageiroOrdenado) + 1, i);

                        if (_PassageirosTemp.Count > _CapacidadeMax)
                        {
                            _Transfer.Passageiros = _PassageirosTemp.Take(_CapacidadeMax).ToList();
                        }
                        else
                        {
                            _Transfer.Passageiros = _PassageirosTemp.Take(_PassageirosTemp.Count).ToList();
                        }

                        _Transfer.Veiculo = new Veiculo(Source).CarregarVeiculoCapacidade(_Transfer.Passageiros.Count);

                        _Transfers.Add(_Transfer);

                        _PassageirosTemp.RemoveRange(0, _Transfer.Passageiros.Count);

                        _Transfer = new Transfer(Source);
                    }
                }
                else
                {
                    _Transfer.Nome = String.Format("Transfer {0}", _PassageirosAgrupados.IndexOf(_PassageiroOrdenado) + 1);
                    _Transfer.Passageiros = _PassageiroOrdenado.ToList();
                    _Transfer.Veiculo = new Veiculo(Source).CarregarVeiculoCapacidade(_Transfer.Passageiros.Count);

                    _Transfers.Add(_Transfer);
                }
            }

            return _Transfers;
        }
예제 #2
0
        /// <summary>
        /// Rotina utilizada para inserir voo de chegada a sheet do Excel.
        /// </summary>
        /// <param name="_Sheet"></param>
        /// <param name="_Transfer"></param>
        public void InsertPassageiroSheetRetorno(String _Sheet, Transfer _Transfer)
        {
            using (ConectarEx())
            {
                ExcelWorkbook _WorkBook = ConexaoEx.Workbook;

                ExcelWorksheet _WorkSheet = _WorkBook.Worksheets.Where(x => String.Format("TransferRetorno_{0}", _Sheet) == x.Name).First();

                int _Start = _WorkSheet.Dimension.End.Row;
                int _StartE = _WorkSheet.Dimension.End.Row;

                foreach (Passageiro _Passageiro in _Transfer.Passageiros)
                {
                    _Start = _Start + 1;

                    _WorkSheet.InsertRow(_Start, 1);

                    if (_Transfer.Passageiros.IndexOf(_Passageiro) == _Transfer.Passageiros.Count -1)
                    {
                        _StartE = _StartE + 1;

                        String _MergeA = String.Format("A{0}:A{1}", _StartE, _StartE + _Transfer.Passageiros.Count - 1);
                        String _MergeJ = String.Format("J{0}:J{1}", _StartE, _StartE + _Transfer.Passageiros.Count - 1);
                        String _MergeK = String.Format("K{0}:K{1}", _StartE, _StartE + _Transfer.Passageiros.Count - 1);

                        _WorkSheet.Cells[_MergeA].Merge = true;
                        _WorkSheet.Cells[_MergeA].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                        _WorkSheet.Cells[_MergeA].Style.VerticalAlignment = ExcelVerticalAlignment.Center;
                        _WorkSheet.Cells[String.Format("A{0}", _StartE)].Value = _Transfer.Nome;

                        _WorkSheet.Cells[_MergeJ].Merge = true;
                        _WorkSheet.Cells[_MergeJ].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                        _WorkSheet.Cells[_MergeJ].Style.VerticalAlignment = ExcelVerticalAlignment.Center;
                        _WorkSheet.Cells[String.Format("J{0}", _StartE)].Value = _Transfer.Veiculo.Nome;

                        _WorkSheet.Cells[_MergeK].Merge = true;
                        _WorkSheet.Cells[_MergeK].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
                        _WorkSheet.Cells[_MergeK].Style.VerticalAlignment = ExcelVerticalAlignment.Center;
                        _WorkSheet.Cells[String.Format("K{0}", _StartE)].Value = _Transfer.Veiculo.ValorViagem;
                        _WorkSheet.Cells[String.Format("K{0}", _StartE)].Style.Numberformat.Format = @"R$ #,##0.00";
                    }

                    _WorkSheet.Cells[String.Format("B{0}", _Start)].Value = _Passageiro.Nome;
                    _WorkSheet.Cells[String.Format("C{0}", _Start)].Value = _Passageiro.Documento;
                    _WorkSheet.Cells[String.Format("D{0}", _Start)].Value = _Passageiro.VooRetorno.NumeroVoo;
                    _WorkSheet.Cells[String.Format("E{0}", _Start)].Value = _Passageiro.VooRetorno.CidadeOrigem;
                    _WorkSheet.Cells[String.Format("F{0}", _Start)].Value = _Passageiro.VooRetorno.CidadeDestino;
                    _WorkSheet.Cells[String.Format("H{0}", _Start)].Value = _Passageiro.VooRetorno.HorarioSaida.ToShortTimeString();
                    _WorkSheet.Cells[String.Format("I{0}", _Start)].Value = _Passageiro.VooRetorno.HorarioChegada.ToShortTimeString();
                }

                if (ConexaoEx.Stream.CanWrite)
                {
                    ConexaoEx.Save();
                }
            }
        }