Esempio n. 1
0
        public IReadOnlyCollection <Notification> RegerarListaAtual(int congregacaoAtual)
        {
            var model = new Quadro();

            using (RepositorySession dalSession = new RepositorySession(Runtime.JWInstance))
            {
                IUnitOfWork unitOfWork = dalSession.UnitOfWork;
                unitOfWork.Begin();
                try
                {
                    var congregacao = _repositoryCongregacao.ListAll(ref unitOfWork).ToList().Find(x => x.Codigo == congregacaoAtual);

                    if (congregacao == null)
                    {
                        model.AddNotification("Congregacao", "Não existe nenhuma congregação cadastrada");
                        unitOfWork.Rollback();
                        return(model.Notifications);
                    }

                    var      quadroAtual   = _repositoryQuadro.ObterQuadroAtual(ref unitOfWork, congregacaoAtual);
                    var      proximoQuadro = _repositoryQuadro.ObterProximoQuadro(ref unitOfWork, congregacaoAtual);
                    int      quadro        = 0;
                    DateTime dataInicioLista;

                    if (proximoQuadro > 0)
                    {
                        quadro = proximoQuadro;
                    }
                    else
                    {
                        quadro = quadroAtual;
                    }

                    dataInicioLista = _repositoryQuadroDetalhe.ObterDataInicioQuadro(ref unitOfWork, quadro);


                    var      tipolistas     = _repositoryTipoLista.ListAll(ref unitOfWork, congregacaoAtual);
                    DateTime dataFinalLista = _repositoryQuadroDetalhe.ObterDataFimQuadro(ref unitOfWork, quadro);
                    //Apaga Lista Atual
                    _repositoryQuadroDetalhe.ApagaDetalhesQuadro(ref unitOfWork, quadro);

                    // Caso a próxima lista ainda não foi gerada, a lista atual será gerada até a última reunião antes da data atual
                    if (proximoQuadro == 0)
                    {
                        // Gera lista até data atual
                        GeraListas(ref unitOfWork, ref tipolistas, ref congregacao, dataInicioLista, quadro, DateTime.Now, true, true);

                        // Atualiza o Controle da lista com base nas atribuições atuais dos irmãos
                        AtualizarControleLista(ref unitOfWork, congregacao.Codigo, false);

                        // Continua a geração da lista da data atual até o final da lista
                        GeraListas(ref unitOfWork, ref tipolistas, ref congregacao, DateTime.Now.AddDays(1), quadro, dataFinalLista, false, false);
                    }
                    else
                    {
                        // Recupera Backup das lista
                        foreach (var item in tipolistas)
                        {
                            _repositoryControleLista.RecuperaBackupListaAtual(ref unitOfWork, (int)item.Codigo, congregacaoAtual);
                        }

                        // Atualiza o Controle da lista com base nas atribuições atuais dos irmãos
                        AtualizarControleLista(ref unitOfWork, congregacao.Codigo, false);

                        // Gera lista até data atual
                        GeraListas(ref unitOfWork, ref tipolistas, ref congregacao, dataInicioLista, quadro, dataFinalLista, true, false);
                    }

                    unitOfWork.Commit();
                }
                catch
                {
                    unitOfWork.Rollback();
                    throw;
                }
            }

            return(model.Notifications);
        }
Esempio n. 2
0
        public IReadOnlyCollection <Notification> GeraLista(int congregacaoAtual)
        {
            var model = new Quadro();

            using (RepositorySession dalSession = new RepositorySession(Runtime.JWInstance))
            {
                IUnitOfWork unitOfWork = dalSession.UnitOfWork;
                unitOfWork.Begin();
                try
                {
                    var congregacao = _repositoryCongregacao.ListAll(ref unitOfWork).ToList().Find(x => x.Codigo == congregacaoAtual);

                    if (congregacao == null)
                    {
                        model.AddNotification("Congregacao", "Não existe nenhuma congregação cadastrada");
                        unitOfWork.Rollback();
                        return(model.Notifications);
                    }

                    DateTime dataInicioLista;
                    if (DateTime.Now.Date < Convert.ToDateTime(congregacao.DataPrimeiraLista).Date)
                    {
                        dataInicioLista = Convert.ToDateTime(congregacao.DataPrimeiraLista).Date;
                    }
                    else
                    {
                        var ultimareuniao = _repositoryQuadro.ObterUltimoQuadro(ref unitOfWork, congregacao.Codigo);
                        dataInicioLista = ultimareuniao.DataFimLista.Date.AddDays(1);
                    }

                    if (DateTime.Now.Date < dataInicioLista.Date.AddDays(congregacao.DiasAntecedenciaGerarLista * -1))
                    {
                        model.AddNotification("Congregacao", $"A lista somente pode ser gerada a partir de + " +
                                              $"'{dataInicioLista.Date.AddDays(congregacao.DiasAntecedenciaGerarLista * -1).Date}'");
                        unitOfWork.Rollback();
                        return(model.Notifications);
                    }

                    var tipolistas = _repositoryTipoLista.ListAll(ref unitOfWork, congregacao.Codigo);
                    int quadro     = 0;
                    int codQuadro  = 0;
                    if (tipolistas.Count() > 0)
                    {
                        quadro = _repositoryQuadro.ObterCodigoProximoQuadro(ref unitOfWork);
                        // Incluir / retirar irmãos da lista / atualiza designações
                        AtualizarControleLista(ref unitOfWork, congregacao.Codigo, true);
                    }
                    DateTime dataFinalLista = DateTime.MinValue;

                    foreach (var itemTipoLista in tipolistas)
                    {
                        DateTime dataControle = dataInicioLista;
                        _repositoryControleLista.BackupListaAtual(ref unitOfWork, (int)itemTipoLista.Codigo, dataInicioLista, itemTipoLista.CongregacaoId);
                        codQuadro = _repositoryQuadro.InserirNovoQuadro(ref unitOfWork, congregacao.Codigo, quadro, (int)itemTipoLista.Codigo);

                        int i = 0;
                        while (i < itemTipoLista.QuantidadeDatas)
                        {
                            bool assembleia = false;
                            switch (itemTipoLista.Codigo)
                            {
                            case Core.Domain.enums.eTipoLista.Indicador:
                                if (dataControle.DayOfWeek == congregacao.DiaReuniaoSentinela || dataControle.DayOfWeek == congregacao.DiaReuniaoServico)
                                {
                                    for (int iIndicador = 0; iIndicador < congregacao.QuantidadeIndicadores; iIndicador++)
                                    {
                                        if (!assembleia)
                                        {
                                            assembleia = InsereDetalheQuadro(ref unitOfWork, dataControle, congregacao, codQuadro, itemTipoLista);
                                        }
                                    }
                                    i++;
                                }
                                break;

                            case Core.Domain.enums.eTipoLista.AudioVideo:
                                if (dataControle.DayOfWeek == congregacao.DiaReuniaoSentinela || dataControle.DayOfWeek == congregacao.DiaReuniaoServico)
                                {
                                    for (int iSistemaSonoro = 0; iSistemaSonoro < congregacao.QuantidadeSistemaSonoro; iSistemaSonoro++)
                                    {
                                        if (!assembleia)
                                        {
                                            assembleia = InsereDetalheQuadro(ref unitOfWork, dataControle, congregacao, codQuadro, itemTipoLista);
                                        }
                                    }
                                    i++;
                                }
                                break;

                            case Core.Domain.enums.eTipoLista.Microfonista:
                                if (dataControle.DayOfWeek == congregacao.DiaReuniaoSentinela || dataControle.DayOfWeek == congregacao.DiaReuniaoServico)
                                {
                                    for (int iMicrofonistas = 0; iMicrofonistas < congregacao.QuantidadeMicrofonistas; iMicrofonistas++)
                                    {
                                        if (!assembleia)
                                        {
                                            assembleia = InsereDetalheQuadro(ref unitOfWork, dataControle, congregacao, codQuadro, itemTipoLista);
                                        }
                                    }
                                    i++;
                                }
                                break;

                            case Core.Domain.enums.eTipoLista.OracaoFinal:
                            case Core.Domain.enums.eTipoLista.OracaoInicial:
                                if (dataControle.DayOfWeek == congregacao.DiaReuniaoSentinela || dataControle.DayOfWeek == congregacao.DiaReuniaoServico)
                                {
                                    InsereDetalheQuadro(ref unitOfWork, dataControle, congregacao, codQuadro, itemTipoLista);
                                    i++;
                                }
                                break;

                            case Core.Domain.enums.eTipoLista.LeitorJW:
                                if (dataControle.DayOfWeek == congregacao.DiaReuniaoSentinela)
                                {
                                    InsereDetalheQuadro(ref unitOfWork, dataControle, congregacao, codQuadro, itemTipoLista);
                                    i = i + 2;
                                }
                                break;

                            case Core.Domain.enums.eTipoLista.LeitorELC:
                                if (dataControle.DayOfWeek == congregacao.DiaReuniaoServico)
                                {
                                    InsereDetalheQuadro(ref unitOfWork, dataControle, congregacao, codQuadro, itemTipoLista);
                                    i = i + 2;
                                }
                                break;

                            default:
                                break;
                            }
                            dataControle = dataControle.AddDays(1);
                        }
                        if (dataFinalLista == DateTime.MinValue)
                        {
                            dataFinalLista = dataControle.AddDays(-1);
                        }
                    }

                    unitOfWork.Commit();
                }
                catch
                {
                    unitOfWork.Rollback();
                    throw;
                }
            }

            return(model.Notifications);
        }