コード例 #1
0
        private bool InsereDetalheQuadro(ref IUnitOfWork unitOfWork, DateTime dataControle, Congregacao item, int codigoQuadro, TipoLista itemTipoLista)
        {
            var           cont           = 0;
            ControleLista proximoLista   = null;
            bool          liberouproximo = false;
            QuadroDetalhe quadrodetalhe  = null;
            DataEvento    evento         = _repositoryDataEvento.ListByDate(ref unitOfWork, item.Codigo, dataControle);
            var           ultimaReuniao  = _repositoryQuadroDetalhe.ObterUltimaReuniaoValida(ref unitOfWork, item.Codigo, dataControle);
            var           proximaReuniao = _repositoryQuadroDetalhe.ObterProximaReuniaoValida(ref unitOfWork, item.Codigo, dataControle);

            if (evento == null || (evento.VisitaSuperintendente && itemTipoLista.Codigo != Core.Domain.enums.eTipoLista.LeitorELC &&
                                   itemTipoLista.Codigo != Core.Domain.enums.eTipoLista.LeitorJW))
            {
                if (item.FolgaParticipacao && itemTipoLista.Codigo != Core.Domain.enums.eTipoLista.OracaoFinal &&
                    itemTipoLista.Codigo != Core.Domain.enums.eTipoLista.OracaoInicial &&
                    (itemTipoLista.Codigo != Core.Domain.enums.eTipoLista.AudioVideo))
                {
                    if (itemTipoLista.Codigo == Core.Domain.enums.eTipoLista.Indicador)
                    {
                        cont = 16;
                    }

                    while (proximoLista == null)
                    {
                        if (cont <= 15)
                        {
                            proximoLista = _repositoryControleLista.ObterProximoListaSemRepetirComFolga(ref unitOfWork,
                                                                                                        (int)itemTipoLista.Codigo, (ultimaReuniao == null) ? dataControle.AddDays(-1) : ultimaReuniao.Data, dataControle,
                                                                                                        (proximaReuniao == null) ? dataControle.AddDays(1) : proximaReuniao.Data, item.Codigo);
                        }
                        else if (cont > 15 && cont <= 30)
                        {
                            proximoLista = _repositoryControleLista.ObterProximoListaSemRepetirSemFolgaParaAudioSonoro(ref unitOfWork,
                                                                                                                       (int)itemTipoLista.Codigo, (ultimaReuniao == null) ? dataControle.AddDays(-1) : ultimaReuniao.Data, dataControle,
                                                                                                                       (proximaReuniao == null) ? dataControle.AddDays(1) : proximaReuniao.Data, item.Codigo);
                        }
                        else if (cont > 30 && cont <= 50)
                        {
                            proximoLista = _repositoryControleLista.ObterProximoListaSemRepetirSemFolga(ref unitOfWork,
                                                                                                        (int)itemTipoLista.Codigo, dataControle, (ultimaReuniao == null) ? dataControle.AddDays(-1) : ultimaReuniao.Data,
                                                                                                        (proximaReuniao == null) ? dataControle.AddDays(1) : proximaReuniao.Data, item.Codigo);
                        }
                        else
                        {
                            throw new Exception("Não foi possivel obter um irmão da lista ");
                        }


                        if (proximoLista == null)
                        {
                            _repositoryControleLista.LiberaProximoLista(ref unitOfWork, (int)itemTipoLista.Codigo, item.Codigo);
                            liberouproximo = true;
                        }
                        cont++;
                        Task.Delay(10).Wait();
                    }
                }
                else if (itemTipoLista.Codigo != Core.Domain.enums.eTipoLista.OracaoFinal && itemTipoLista.Codigo != Core.Domain.enums.eTipoLista.OracaoInicial &&
                         ((itemTipoLista.Codigo == Core.Domain.enums.eTipoLista.AudioVideo) || (!item.FolgaParticipacao)))
                {
                    while (proximoLista == null)
                    {
                        if (cont <= 25)
                        {
                            proximoLista = _repositoryControleLista.ObterProximoListaSemRepetirSemFolga(ref unitOfWork,
                                                                                                        (int)itemTipoLista.Codigo, dataControle, (ultimaReuniao == null) ? dataControle.AddDays(-1) : ultimaReuniao.Data,
                                                                                                        (proximaReuniao == null) ? dataControle.AddDays(1) : proximaReuniao.Data, item.Codigo);
                        }
                        else
                        {
                            proximoLista = _repositoryControleLista.ObterProximoListaSemRepetirSemFolgaParaAudioSonoro(ref unitOfWork,
                                                                                                                       (int)itemTipoLista.Codigo, (ultimaReuniao == null) ? dataControle.AddDays(-1) : ultimaReuniao.Data, dataControle,
                                                                                                                       (proximaReuniao == null) ? dataControle.AddDays(1) : proximaReuniao.Data, item.Codigo);
                        }

                        if (proximoLista == null)
                        {
                            _repositoryControleLista.LiberaProximoLista(ref unitOfWork, (int)itemTipoLista.Codigo, item.Codigo);
                            liberouproximo = true;
                        }

                        if (cont > 50)
                        {
                            throw new Exception("Não foi possivel obter um irmão da lista de audio e video");
                        }

                        cont++;
                    }
                }
                else
                {
                    while (proximoLista == null)
                    {
                        proximoLista = _repositoryControleLista.ObterProximoListaPodeRepetir(ref unitOfWork,
                                                                                             (int)itemTipoLista.Codigo, item.Codigo, dataControle);

                        if (proximoLista == null)
                        {
                            _repositoryControleLista.LiberaProximoLista(ref unitOfWork, (int)itemTipoLista.Codigo, item.Codigo);
                            liberouproximo = true;
                        }
                    }
                }

                quadrodetalhe = new QuadroDetalhe()
                {
                    Data = dataControle, IrmaoId = proximoLista.IrmaoId, QuadroId = codigoQuadro
                };
                _repositoryControleLista.AtualizaPartipacaoIrmaoLista(ref unitOfWork, (int)itemTipoLista.Codigo, proximoLista.IrmaoId, liberouproximo);
            }
            else
            {
                quadrodetalhe = new QuadroDetalhe()
                {
                    Data = dataControle, QuadroId = codigoQuadro, EventoId = evento.Codigo
                }
            };

            _repositoryQuadroDetalhe.InsereDataQuadro(ref unitOfWork, quadrodetalhe);

            return((evento != null && evento.Assembleia) ? true : false);
        }
    }