private NotaFiscal NotaFiscalDevolucao(NovaNotaRequisicao requisicao, DateTime dataUpload)
        {
            var clinica = _clinicaRepositorio.ObterPor(requisicao.CodigoDaClinica);
            var responsavel = _funcionarioRepositorio.ObterPor(requisicao.CodigoDoResponsavel);
            var programa = _programaRepositorio.ObterPor(requisicao.CodigoDoPrograma);
            var nota = new NotaFiscal
            {
                Clinica = clinica,
                Responsavel = responsavel,
                Valor = requisicao.Valor,
                Numero = requisicao.Numero,
                Data = requisicao.Data,
                DataRecebimento = requisicao.DataRecebimento,
                Arquivo = new Arquivo(requisicao.DescricaoDoArquivo, requisicao.NomeDoArquivo, dataUpload),
                Programa = programa
            };

            //IMPLEMENTAR VINCULO NF DEVOLVIDA COM INFUSAO.

            //foreach (var infusaoAssociar in requisicao.Infusoes)
            //{
            //    var infusao = _infusaoRepositorio.ObterPor(infusaoAssociar.Codigo);

            //    infusao.EmAberto();
            //    if (infusaoAssociar.Glosar)
            //        infusao.Glosar();

            //    nota.Infusoes.Add(infusao);
            //}

            return nota;
        }
        public NovaNotaResposta NovaNota(NovaNotaRequisicao requisicao)
        {
            int tentativa = 0;
            bool sucesso = false;
            DateTime dataUpload = SystemTime.Now;
            var nota = NotaFiscal(requisicao, dataUpload);
            _notaFiscalRepositorio.Adicionar(nota);
            while (sucesso != true)
            {
                tentativa++;
                try
                {
                    _unitOfWork.Commit();
                    sucesso = true;
                }
                catch (Exception ex)
                {
                    if (tentativa >= 5)
                    {
                        throw ex;
                    }
                }
            }

            _repositorioDeArquivos.ArmazenarArquivo(requisicao.Arquivo, requisicao.NomeDoArquivo, dataUpload);
            return new NovaNotaResposta { Sucesso = true };
        }
        private NotaFiscal NotaFiscal(NovaNotaRequisicao requisicao, DateTime dataUpload)
        {
            var clinica = _clinicaRepositorio.ObterPor(requisicao.CodigoDaClinica);
            var responsavel = _funcionarioRepositorio.ObterPor(requisicao.CodigoDoResponsavel);
            var programa = _programaRepositorio.ObterPor(requisicao.CodigoDoPrograma);
            var nota = new NotaFiscal
                           {
                               Clinica = clinica,
                               Responsavel = responsavel,
                               Valor = requisicao.Valor,
                               Numero = requisicao.Numero,
                               Data = requisicao.Data,
                               DataRecebimento = requisicao.DataRecebimento,
                               Arquivo = new Arquivo(requisicao.DescricaoDoArquivo, requisicao.NomeDoArquivo, dataUpload),
                               Programa = programa
                           };

            foreach (var infusaoAssociar in requisicao.Infusoes)
            {
                var infusao = _infusaoRepositorio.ObterPor(infusaoAssociar.Codigo);

                infusao.EmAberto();
                if (infusaoAssociar.Glosar)
                    infusao.Glosar();

                nota.Infusoes.Add(infusao);
            }
            return nota;
        }
 public JsonResult Receber(ViewReceberNotaFiscal view)
 {
     var arquivo = Session["Arquivo"] as HttpPostedFileWrapper;
     Session.Remove("Arquivo");
     var requisicao = new NovaNotaRequisicao
                          {
                              CodigoDoPrograma = Session.ProgramaAtivo().Codigo,
                              CodigoDoResponsavel = User.ToPessoa().Codigo,
                              CodigoDaClinica = view.CodigoDaClinica,
                              Arquivo = arquivo.InputStream,
                              DescricaoDoArquivo = arquivo.FileName,
                              NomeDoArquivo = arquivo.FileName,
                              //Data = view.Data,
                              Data = Convert.ToDateTime(view.Data),
                              DataRecebimento = view.DataRecebimento,
                              Numero = view.Numero,
                              Valor = view.Valor,
                              Infusoes = view.Infusoes
                          };
     var resposta = _faturamentoServicoDeAplicacao.NovaNota(requisicao);
     return Json(resposta);
 }