/// <summary> /// Salva o tipo de cartão de crédito /// </summary> public Colosoft.Business.SaveResult SalvarTipoCartaoCredito(Entidades.TipoCartaoCredito tipoCartaoCredito) { tipoCartaoCredito.Require("tipoCartaoCredito").NotNull(); var existeCartao = ExisteTipoCartao(tipoCartaoCredito.Bandeira, tipoCartaoCredito.Operadora, (uint)tipoCartaoCredito.Tipo); // Se for um novo Tipo de Cartão, cria e insere os planos de contas if (!tipoCartaoCredito.ExistsInStorage) { if (existeCartao) { throw new Exception("Já existe este tipo de cartão cadastrado no sistema"); } var retorno = SalvarTipoCartaoComPlanoContas(tipoCartaoCredito); if (!retorno) { return(new Colosoft.Business.SaveResult(false, retorno.Message)); } // Salva os dados do Tipo cartão com os novos planos no banco. using (var session = SourceContext.Instance.CreateSession()) { var resultado = retorno.Salvar(session); if (!resultado) { return(resultado); } return(session.Execute(false).ToSaveResult()); } } // Atualiza os dados do banco. using (var session = SourceContext.Instance.CreateSession()) { var resultado = tipoCartaoCredito.Save(session); if (!resultado) { return(resultado); } return(session.Execute(false).ToSaveResult()); } }
/// <summary> /// Calcula a taxa de juros que ser aplica para o tipo de cartão. /// </summary> /// <param name="tipoCartao"></param> /// <param name="idLoja"></param> /// <param name="numeroParcelas"></param> /// <returns></returns> decimal Entidades.IProvedorJuros.CalcularTaxaJuros(Entidades.TipoCartaoCredito tipoCartao, int?idLoja, int numeroParcelas) { var itens = SourceContext.Instance.CreateQuery() .From <Data.Model.JurosParcelaCartao>() .Where("IdTipoCartao=?idTipoCartao AND NumParc=?numParc AND (IdLoja=?idLoja OR IdLoja IS NULL)") .Add("?idTipoCartao", tipoCartao.IdTipoCartao) .Add("?numParc", numeroParcelas) .Add("?idLoja", idLoja) .Select("Juros, IdLoja") .Execute() .Select(f => new { Juros = f.GetDecimal("Juros"), IdLoja = f.IsDBNull("IdLoja") ? null : (int?)f.GetInt32("Juros") }) .ToArray(); var item = itens.FirstOrDefault(f => f.IdLoja == idLoja) ?? itens.FirstOrDefault(f => !f.IdLoja.HasValue); return(item != null ? item.Juros : 0m); }
/// <summary> /// Salva o tipo de cartão de crédito com os planos de contas padrões /// </summary> private SalvarTipoCartaoComPlanoContasResultado SalvarTipoCartaoComPlanoContas(Entidades.TipoCartaoCredito tipoCartaoCredito) { var planoContasFluxo = Microsoft.Practices.ServiceLocation.ServiceLocator .Current.GetInstance <IPlanoContasFluxo>(); // Recupera ou Cria os planos de contas. var planoContaDevolucaoPagto = planoContasFluxo.RecuperaOuCriaPlanoContas(49, "Devolução de Pagamento Cartão " + Data.DAL.OperadoraCartaoDAO.Instance.ObterDescricaoOperadora((uint)tipoCartaoCredito.Operadora) + " " + Data.DAL.BandeiraCartaoDAO.Instance.ObterDescricaoBandeira((uint)tipoCartaoCredito.Bandeira) + " " + tipoCartaoCredito.Tipo.ToString()); var planoContaEntrada = planoContasFluxo.RecuperaOuCriaPlanoContas(51, "Entrada Cartão " + Data.DAL.OperadoraCartaoDAO.Instance.ObterDescricaoOperadora((uint)tipoCartaoCredito.Operadora) + " " + Data.DAL.BandeiraCartaoDAO.Instance.ObterDescricaoBandeira((uint)tipoCartaoCredito.Bandeira) + " " + tipoCartaoCredito.Tipo.ToString()); var planoContaEstorno = planoContasFluxo.RecuperaOuCriaPlanoContas(49, "Estorno de Cartão " + Data.DAL.OperadoraCartaoDAO.Instance.ObterDescricaoOperadora((uint)tipoCartaoCredito.Operadora) + " " + Data.DAL.BandeiraCartaoDAO.Instance.ObterDescricaoBandeira((uint)tipoCartaoCredito.Bandeira) + " " + tipoCartaoCredito.Tipo.ToString()); var planoContaEstornoChequeDev = planoContasFluxo.RecuperaOuCriaPlanoContas(49, "Estorno Cheque Devolvido Cartão " + Data.DAL.OperadoraCartaoDAO.Instance.ObterDescricaoOperadora((uint)tipoCartaoCredito.Operadora) + " " + Data.DAL.BandeiraCartaoDAO.Instance.ObterDescricaoBandeira((uint)tipoCartaoCredito.Bandeira) + " " + tipoCartaoCredito.Tipo.ToString()); var planoContaEstornoDevolucaoPagto = planoContasFluxo.RecuperaOuCriaPlanoContas(49, "Estorno Devolução de Pagamento Cartão " + Data.DAL.OperadoraCartaoDAO.Instance.ObterDescricaoOperadora((uint)tipoCartaoCredito.Operadora) + " " + Data.DAL.BandeiraCartaoDAO.Instance.ObterDescricaoBandeira((uint)tipoCartaoCredito.Bandeira) + " " + tipoCartaoCredito.Tipo.ToString()); var planoContaEstornoEntrada = planoContasFluxo.RecuperaOuCriaPlanoContas(49, "Estorno Entrada Cartão " + Data.DAL.OperadoraCartaoDAO.Instance.ObterDescricaoOperadora((uint)tipoCartaoCredito.Operadora) + " " + Data.DAL.BandeiraCartaoDAO.Instance.ObterDescricaoBandeira((uint)tipoCartaoCredito.Bandeira) + " " + tipoCartaoCredito.Tipo.ToString()); var planoContaEstornoRecPrazo = planoContasFluxo.RecuperaOuCriaPlanoContas(49, "Estorno Rec. Prazo Cartão " + Data.DAL.OperadoraCartaoDAO.Instance.ObterDescricaoOperadora((uint)tipoCartaoCredito.Operadora) + " " + Data.DAL.BandeiraCartaoDAO.Instance.ObterDescricaoBandeira((uint)tipoCartaoCredito.Bandeira) + " " + tipoCartaoCredito.Tipo.ToString()); var planoContaFunc = planoContasFluxo.RecuperaOuCriaPlanoContas(7, "Receb. de Funcionário Cartão " + Data.DAL.OperadoraCartaoDAO.Instance.ObterDescricaoOperadora((uint)tipoCartaoCredito.Operadora) + " " + Data.DAL.BandeiraCartaoDAO.Instance.ObterDescricaoBandeira((uint)tipoCartaoCredito.Bandeira) + " " + tipoCartaoCredito.Tipo.ToString()); var planoContaRecChequeDev = planoContasFluxo.RecuperaOuCriaPlanoContas(48, "Recec. Cheque Devolvido Cartão " + Data.DAL.OperadoraCartaoDAO.Instance.ObterDescricaoOperadora((uint)tipoCartaoCredito.Operadora) + " " + Data.DAL.BandeiraCartaoDAO.Instance.ObterDescricaoBandeira((uint)tipoCartaoCredito.Bandeira) + " " + tipoCartaoCredito.Tipo.ToString()); var planoContaRecPrazo = planoContasFluxo.RecuperaOuCriaPlanoContas(50, "Recec. Prazo com Cartão " + Data.DAL.OperadoraCartaoDAO.Instance.ObterDescricaoOperadora((uint)tipoCartaoCredito.Operadora) + " " + Data.DAL.BandeiraCartaoDAO.Instance.ObterDescricaoBandeira((uint)tipoCartaoCredito.Bandeira) + " " + tipoCartaoCredito.Tipo.ToString()); var planoContaVista = planoContasFluxo.RecuperaOuCriaPlanoContas(51, "Receb. à Vista Cartão " + Data.DAL.OperadoraCartaoDAO.Instance.ObterDescricaoOperadora((uint)tipoCartaoCredito.Operadora) + " " + Data.DAL.BandeiraCartaoDAO.Instance.ObterDescricaoBandeira((uint)tipoCartaoCredito.Bandeira) + " " + tipoCartaoCredito.Tipo.ToString()); // Associa os IdsContas. tipoCartaoCredito.IdContaDevolucaoPagto = planoContaDevolucaoPagto.IdConta; tipoCartaoCredito.IdContaEntrada = planoContaEntrada.IdConta; tipoCartaoCredito.IdContaEstorno = planoContaEstorno.IdConta; tipoCartaoCredito.IdContaEstornoChequeDev = planoContaEstornoChequeDev.IdConta; tipoCartaoCredito.IdContaEstornoDevolucaoPagto = planoContaEstornoDevolucaoPagto.IdConta; tipoCartaoCredito.IdContaEstornoEntrada = planoContaEstornoEntrada.IdConta; tipoCartaoCredito.IdContaEstornoRecPrazo = planoContaEstornoRecPrazo.IdConta; tipoCartaoCredito.IdContaFunc = planoContaFunc.IdConta; tipoCartaoCredito.IdContaRecChequeDev = planoContaRecChequeDev.IdConta; tipoCartaoCredito.IdContaRecPrazo = planoContaRecPrazo.IdConta; tipoCartaoCredito.IdContaVista = planoContaVista.IdConta; var planosContas = new List <Entidades.PlanoContas>(); planosContas.Add(planoContaDevolucaoPagto); planosContas.Add(planoContaEntrada); planosContas.Add(planoContaEstorno); planosContas.Add(planoContaEstornoChequeDev); planosContas.Add(planoContaEstornoDevolucaoPagto); planosContas.Add(planoContaEstornoEntrada); planosContas.Add(planoContaEstornoRecPrazo); planosContas.Add(planoContaFunc); planosContas.Add(planoContaRecChequeDev); planosContas.Add(planoContaRecPrazo); planosContas.Add(planoContaVista); // Define o IdContaGrupo para os Planos novos. planosContas.ForEach(pc => { if (!pc.ExistsInStorage) { var idContaGrupo = SourceContext.Instance.CreateQuery() .From <Data.Model.PlanoContas>() .Select("MAX(IdContaGrupo), COUNT(*)") .Where("IdGrupo=?idGrupo") .Add("?idGrupo", pc.IdGrupo) .Execute() .Select(f => f.IsDBNull(0) ? 0 : f.GetInt32(0)) .FirstOrDefault() + 1; pc.IdContaGrupo = idContaGrupo; } }); return(new SalvarTipoCartaoComPlanoContasResultado(tipoCartaoCredito, planoContaDevolucaoPagto, planoContaEntrada, planoContaEstorno, planoContaEstornoChequeDev, planoContaEstornoDevolucaoPagto, planoContaEstornoEntrada, planoContaEstornoRecPrazo, planoContaFunc, planoContaRecChequeDev, planoContaRecPrazo, planoContaVista)); }