//clicando em gravar
        public ActionResult ListarPagamentosConfirmarSalvar(ConfirmacaoPagamentoFiltroViewModel view, FormCollection form)
        {
            try

            {
                // String viewString = string.Empty;
                // 3.8 RDN8 – Preenchimento dos campos Data
                // Preenchido automaticamente com a data do processamento, podendo ser alterado pelo usuário,
                // se alterado deverá ser menor ou igual à data de processamento,
                // emitindo a mensagem ao acionar a opção “Consultar” “A data deve ser menor ou igual a data de processamento”
                ValidarData(view.DataCadastro);
                ValidarData(view.DataConfirmacao);
                ValidarData(view.DataPreparacao);

                ConfirmacaoPagamentoFiltroViewModel ret = this.GenerateFilterFormViewModel(form);

                List <ConfirmacaoPagamento> retorno = GenerateFilterEditViewModelSalvar(ret);

                this.Save(retorno);

                // return null; // View("CreateEdit", new List<ConfirmacaoPagamentoFiltroViewModel>());

                string status = "Pagamentos confirmados com sucesso!";

                return(Json(new { Status = status }));
            }
            catch (Exception ex)
            {
                return(new HttpStatusCodeResult(500, ex.Message));
            }
        }
        public ActionResult Retransmitir(FormCollection form, ConfirmacaoPagamentoFiltroViewModel PesquisaRetorno, DadoConfirmacaoPagamentoViewModel entrada)
        {
            int id = 0;

            try
            {
                ConfirmacaoPagamento confirmacao = entrada.ToEntity();
                AcaoEfetuada         retornoSalvamentoConfirmacao = App.ConfirmacaoPagamentoService.Salvar(confirmacao, _funcId.Value);

                if (retornoSalvamentoConfirmacao == AcaoEfetuada.Sucesso)
                {
                    ConfirmacaoPagamento confirmacaoSalva = App.ConfirmacaoPagamentoService.Selecionar(confirmacao.Id);

                    EnumAcao acao = entrada.Id > 0 ? EnumAcao.Alterar : EnumAcao.Inserir;

                    App.NotaDeLancamentoService.GerarNotasLancamento(confirmacaoSalva, _userLoggedIn, entrada.TransmitirSiafem, _funcId.Value, acao);

                    id = confirmacaoSalva.Id;
                }
                return(Json(new { Status = "Sucesso", id = id }));
            }
            catch
            {
                string status = "";
                status = "Falha Transmissão Confirmação de Pagamento Prodesp";
                return(Json(new { Status = status }));
            }
        }
        internal void CarregarCombos()
        {
            //var dropdownTipoDocumentoCadastro = new ConfirmacaoPagamentoFiltroViewModel().CarregarTipoDocumentoCadastro().Select(x => new { id = x.Value, name = x.Text });
            //ViewBag.DropdownTipoDocumentoCadastro = new SelectList(dropdownTipoDocumentoCadastro, "id", "name");

            //var dropdownTipoPagamento = new ConfirmacaoPagamentoFiltroViewModel().CarregarTipoPagamento().Select(x => new { id = x.Value, name = x.Text });
            //ViewBag.DropdownListTipoPagamento = new SelectList(dropdownTipoPagamento, "id", "name");

            //var dropdownOrigemConfirmacao = new ConfirmacaoPagamentoFiltroViewModel().CarregarOrigemConfirmacao().Select(x => new { id = x.Value, name = x.Text });
            //ViewBag.DropdownListOrigemConfirmacao = new SelectList(dropdownOrigemConfirmacao, "id", "name");

            var dropdownStatusProdesp = new ConfirmacaoPagamentoFiltroViewModel().CarregarStatusProdesp().Select(x => new { id = x.Value, name = x.Text });

            ViewBag.DropdownListStatusProdesp = new SelectList(dropdownStatusProdesp, "id", "name");

            var dropdownRegional = new ConfirmacaoPagamentoFiltroViewModel().RegionalListItems().Select(x => new { id = x.Value, name = x.Text });

            ViewBag.DropdownListRegional = new SelectList(dropdownRegional, "id", "name");

            var dropdownTipoDocumentoCadastro = new ConfirmacaoPagamentoFiltroViewModel().DocumentoTipoListItems().Select(x => new { id = x.Value, name = x.Text });

            ViewBag.DropdownTipoDocumentoCadastro = new SelectList(dropdownTipoDocumentoCadastro, "id", "name");

            var dropdownOrigemConfirmacao = new ConfirmacaoPagamentoFiltroViewModel().OrigemListItems().Select(x => new { id = x.Value, name = x.Text });

            ViewBag.DropdownListOrigemConfirmacao = new SelectList(dropdownOrigemConfirmacao, "id", "name");

            var dropdownTipoPagamento = new ConfirmacaoPagamentoFiltroViewModel().PagamentoTipoListItems().Select(x => new { id = x.Value, name = x.Text });

            ViewBag.DropdownListTipoPagamento = new SelectList(dropdownTipoPagamento, "id", "name");
        }
        protected List <ConfirmacaoPagamento> GenerateFilterEditViewModelSalvar(ConfirmacaoPagamentoFiltroViewModel form)
        {
            List <ConfirmacaoPagamentoFiltroViewModel> ret = new List <ConfirmacaoPagamentoFiltroViewModel>();

            ConfirmacaoPagamento        filter          = new ConfirmacaoPagamentoFiltroViewModel().InitializeFiltroGridEditViewModel(form);
            List <ConfirmacaoPagamento> retornoConsulta = App.ConfirmacaoPagamentoService.ConsultarPagamento(filter);

            return(retornoConsulta);
        }
        internal void CarregarCombosCadastro()
        {
            var dropdownTipoConfirmacao = new ConfirmacaoPagamentoFiltroViewModel().CarregarTipoConfirmacaoPagamento().Select(x => new { id = x.Value, name = x.Text });

            ViewBag.DropdownTipoConfirmacao = new SelectList(dropdownTipoConfirmacao, "id", "name");

            var dropdownTipoDocumentoCadastro = new ConfirmacaoPagamentoFiltroViewModel().CarregarTipoDocumentoCadastro().Select(x => new { id = x.Value, name = x.Text });

            ViewBag.DropdownTipoDocumentoCadastro = new SelectList(dropdownTipoDocumentoCadastro, "id", "name");

            var dropdownTipoPagamento = new ConfirmacaoPagamentoFiltroViewModel().CarregarTipoPagamento().Select(x => new { id = x.Value, name = x.Text });

            ViewBag.DropdownListTipoPagamento = new SelectList(dropdownTipoPagamento, "id", "name");
        }
        //usada para consulta que fica dentro do botão gravar
        protected List <ConfirmacaoPagamentoFiltroViewModel> GenerateFilterEditViewModel(ConfirmacaoPagamentoFiltroViewModel form)
        {
            List <ConfirmacaoPagamentoFiltroViewModel> ret = new List <ConfirmacaoPagamentoFiltroViewModel>();

            ConfirmacaoPagamento        filter          = new ConfirmacaoPagamentoFiltroViewModel().InitializeFiltroGridEditViewModel(form);
            List <ConfirmacaoPagamento> retornoConsulta = App.ConfirmacaoPagamentoService.ConsultarPagamento(filter);

            if (retornoConsulta != null)
            {
                ret            = new ConfirmacaoPagamentoFiltroViewModel().EditMapViewModelToEntityModel(retornoConsulta);
                ViewBag.Filtro = filter;
            }
            return(ret);
        }
        //public ActionResult Altera(int? id, int? item)
        //{
        //    this.CarregarCombosCadastro();
        //    ConfirmacaoPagamentoFiltroViewModel retorno = new ConfirmacaoPagamentoFiltroViewModel();
        //    ConfirmacaoPagamento consultaAlteracao = App.ConfirmacaoPagamentoService.ConsultarPagamentoPorId(id, item).FirstOrDefault();
        //    if (consultaAlteracao != null)
        //    {
        //        retorno = new ConfirmacaoPagamentoFiltroViewModel().CreateInstance(consultaAlteracao);
        //        if (retorno != null)
        //        {
        //            @ViewBag.TipoConfirmacao = retorno.TipoConfirmacao.ToString();
        //            ExibirMensagemSucesso("Registro atualizado com sucesso!");
        //        }
        //        else
        //            ExibirMensagemErro("Não foi possível excluir o registro!");
        //    }
        //    return View("Altera", retorno);
        //}

        public ActionResult Edit(int id, string tipo)
        {
            //this.CarregarCombosCadastro();


            List <ConfirmacaoPagamentoFiltroViewModel> lista = new List <ConfirmacaoPagamentoFiltroViewModel>();
            List <ConfirmacaoPagamento> pagamentos           = App.ConfirmacaoPagamentoService.ConsultarPagamentoPorId(id, null);


            foreach (var item in pagamentos)
            {
                var vm = new ConfirmacaoPagamentoFiltroViewModel().CreateInstance(item);
                lista.Add(vm);
            }

            var tipoConfirmacao = lista.First().TipoConfirmacao;
            var tipoPagamento   = lista.First().TipoPagamento;

            var dropdownTipoConfirmacao = new ConfirmacaoPagamentoFiltroViewModel().CarregarTipoConfirmacaoPagamento().Select(x => new { id = x.Value, name = x.Text });

            ViewBag.DropdownTipoConfirmacao = new SelectList(dropdownTipoConfirmacao, "id", "name", tipoConfirmacao);

            var dropdownTipoDocumentoCadastro = new ConfirmacaoPagamentoFiltroViewModel().DocumentoTipoListItems().Select(x => new { id = x.Value, name = x.Text });

            ViewBag.DropdownTipoDocumentoCadastro = new SelectList(dropdownTipoDocumentoCadastro, "id", "name");

            var dropdownTipoPagamento = new ConfirmacaoPagamentoFiltroViewModel().PagamentoTipoListItems().Select(x => new { id = x.Value, name = x.Text });

            ViewBag.DropdownListTipoPagamento = new SelectList(dropdownTipoPagamento, "id", "name", tipoPagamento);


            //var totais = pagamentos
            //    .Where(x => !string.IsNullOrWhiteSpace(x.FonteLista))
            //    .GroupBy(x => x.FonteLista)
            //    .Select(x => new ConfirmacaoPagamentoTotais
            //    {
            //        NrFonteLista = x.Key,
            //        VrTotalConfirmar = x.Sum(y => Decimal.Parse(y.ValorTotalConfirmar)),
            //        VrTotalConfirmarIR = x.Sum(y => Decimal.Parse(y.ValorTotalConfirmarIR)),
            //        VrTotalConfirmarISSQN = x.Sum(y => Decimal.Parse(y.ValorTotalConfirmarISSQN))
            //    });

            //ViewBag.Totais = totais;



            return(View("CreateEdit", lista));
        }
        public ActionResult ListarPagamentosConfirmar(ConfirmacaoPagamentoFiltroViewModel view, FormCollection form)
        {
            String viewString = string.Empty;

            try
            {
                // 3.8 RDN8 – Preenchimento dos campos Data
                // Preenchido automaticamente com a data do processamento, podendo ser alterado pelo usuário,
                // se alterado deverá ser menor ou igual à data de processamento,
                // emitindo a mensagem ao acionar a opção “Consultar” “A data deve ser menor ou igual a data de processamento”
                ValidarData(view.DataCadastro);
                ValidarData(view.DataConfirmacao);
                ValidarData(view.DataPreparacao);


                ConfirmacaoPagamentoFiltroViewModel ret = this.GenerateFilterFormViewModel(form);
                if (!string.IsNullOrEmpty(ret.TipoConfirmacao))
                {
                    //List<ConfirmacaoPagamentoFiltroViewModel> retorno = GenerateFilterEditViewModel(view);

                    List <ConfirmacaoPagamentoFiltroViewModel> retorno = GenerateFilterEditViewModel(ret);
                    if (retorno.Count > 0)
                    {
                        viewString = ConvertPartialViewToString(PartialView("_ListarPagamentosConfirmar", retorno));

                        return(Json(new { Status = "Sucesso", Html = viewString, Dados = retorno }));

                        //return View("_ListarPagamentosConfirmar", retorno);
                    }
                    else
                    {
                        base.ExibirMensagemErro("Não foi possível cadastrar o registro");
                    }
                }

                return(View("_ListarPagamentosConfirmar", new List <ConfirmacaoPagamentoFiltroViewModel>()));
            }
            catch (Exception ex)
            {
                return(new HttpStatusCodeResult(500, ex.Message));
            }
        }
        public ActionResult Visualiza(int?id, int?item)
        {
            this.CarregarCombosCadastro();
            ConfirmacaoPagamentoFiltroViewModel retorno = new ConfirmacaoPagamentoFiltroViewModel();
            ConfirmacaoPagamento consultaAlteracao      = App.ConfirmacaoPagamentoService.ConsultarPagamentoPorId(id, item).FirstOrDefault();

            if (consultaAlteracao != null)
            {
                retorno = new ConfirmacaoPagamentoFiltroViewModel().CreateInstance(consultaAlteracao);
                if (retorno != null)
                {
                    return(View("Visualiza", retorno));
                }
                else
                {
                    base.ExibirMensagemErro("Não foi possível visualizar o registro");
                }
            }
            return(View("Visualiza", retorno));
        }
        public ActionResult ListarPagamentosTransmitir(ConfirmacaoPagamentoFiltroViewModel view, FormCollection form, bool transmitirNls, bool transmitirSiafem)
        {
            String viewString = string.Empty;

            // 3.8 RDN8 – Preenchimento dos campos Data
            // Preenchido automaticamente com a data do processamento, podendo ser alterado pelo usuário,
            // se alterado deverá ser menor ou igual à data de processamento,
            // emitindo a mensagem ao acionar a opção “Consultar” “A data deve ser menor ou igual a data de processamento”
            ValidarData(view.DataCadastro);
            ValidarData(view.DataConfirmacao);
            ValidarData(view.DataPreparacao);
            view.Tela = "Cadastrar";
            ConfirmacaoPagamentoFiltroViewModel ret = this.GenerateFilterFormViewModel(form);

            List <ConfirmacaoPagamento> retorno = GenerateFilterEditViewModelSalvar(ret);

            int retornoSalvar = this.Save(retorno);

            return(this.Transmitir(retorno, retornoSalvar, transmitirNls, transmitirSiafem));
        }
        public ActionResult Altera(int?id, int?item)
        {
            this.CarregarCombosCadastro();
            ConfirmacaoPagamentoFiltroViewModel retorno = new ConfirmacaoPagamentoFiltroViewModel();
            ConfirmacaoPagamento consultaAlteracao      = App.ConfirmacaoPagamentoService.ConsultarPagamentoPorId(id, item).FirstOrDefault();

            if (consultaAlteracao != null)
            {
                retorno = new ConfirmacaoPagamentoFiltroViewModel().CreateInstance(consultaAlteracao);
                if (retorno != null)
                {
                    @ViewBag.TipoConfirmacao = retorno.TipoConfirmacao.ToString();
                    ExibirMensagemSucesso("Registro atualizado com sucesso!");
                }
                else
                {
                    ExibirMensagemErro("Não foi possível excluir o registro!");
                }
            }
            return(View("Altera", retorno));
        }
        private ConfirmacaoPagamento MapViewModelToEntityModel(FormCollection form, ConfirmacaoPagamento entity, ref ConfirmacaoPagamentoFiltroViewModel viewModel)
        {
            string field = form["AnoReferencia"];

            if (!string.IsNullOrEmpty(field))
            {
                int ano = int.Parse(field);
                ((ConfirmacaoPagamento)Convert.ChangeType(entity, typeof(ConfirmacaoPagamento))).AnoReferencia = ano;
                viewModel.AnoReferencia = ano;
            }
            return(entity);
        }