/// <summary>
        ///
        /// </summary>
        public override UtilRetorno validar(MovimentoOperacaoDTO Transacao)
        {
            var ValidacaoContas = this.validarContas(Transacao);

            if (ValidacaoContas.flagError)
            {
                return(ValidacaoContas);
            }


            if (Transacao.MembroDestino.nroAssociado != 1)
            {
                return(UtilRetorno.newInstance(true, "As compras devem ser feitas junto ao usuário SINCTEC."));
            }

            var MovimentoResumo = new MovimentoResumoVW();

            MovimentoResumo.idTipoTransacao = (byte)TipoTransacaoEnum.PRODUTOS_LINKEY;

            MovimentoResumo.descricaoTipoTransacao = "Pagamento Produtos SINCTEC";

            MovimentoResumo.captarDados(Transacao);

            return(UtilRetorno.newInstance(false, "", MovimentoResumo));
        }
        /// <summary>
        ///
        /// </summary>
        public override UtilRetorno validar(MovimentoOperacaoDTO Transacao)
        {
            var ValidacaoContas = this.validarContas(Transacao);

            if (ValidacaoContas.flagError)
            {
                return(ValidacaoContas);
            }


            if (Transacao.MembroOrigem.idTipoCadastro == (byte)AssociadoTipoCadastroEnum.CONSUMIDOR && Transacao.MembroDestino.idTipoCadastro == (byte)AssociadoTipoCadastroEnum.COMERCIANTE)
            {
                return(UtilRetorno.newInstance(true, "A operação de transferência para estabelecimentos não é permitida."));
            }

            var MovimentoResumo = new MovimentoResumoVW();

            MovimentoResumo.idTipoTransacao = (byte)TipoTransacaoEnum.TRANSFERÊNCIA;

            MovimentoResumo.descricaoTipoTransacao = "Transferência";

            MovimentoResumo.captarDados(Transacao);

            return(UtilRetorno.newInstance(false, "", MovimentoResumo));
        }
Esempio n. 3
0
        /// <summary>
        ///
        /// </summary>
        public override UtilRetorno validar(MovimentoOperacaoDTO Transacao)
        {
            var ValidacaoContas = this.validarContas(Transacao);

            if (ValidacaoContas.flagError)
            {
                return(ValidacaoContas);
            }


            if (Transacao.MembroDestino.idTipoCadastro == (byte)AssociadoTipoCadastroEnum.CONSUMIDOR)
            {
                return(UtilRetorno.newInstance(true, "A conta destino não pertence à um estabelecimento comercial."));
            }

            var MovimentoResumo = new MovimentoResumoVW();

            MovimentoResumo.idTipoTransacao = (byte)TipoTransacaoEnum.PAGAMENTO;

            MovimentoResumo.descricaoTipoTransacao = "Pagamento";

            MovimentoResumo.captarDados(Transacao);

            return(UtilRetorno.newInstance(false, "", MovimentoResumo));
        }
Esempio n. 4
0
        /// <summary>
        ///
        /// </summary>
        public static MovimentoResumoVW captarDados(this MovimentoResumoVW MovimentoResumo, MovimentoOperacaoDTO Transacao)
        {
            MovimentoResumo.valorOperacao = Transacao.valorOperacao;

            MovimentoResumo.valorOperacaoFormatado = Transacao.valorOperacao.ToString("F2");

            MovimentoResumo.idMembroOrigem = Transacao.MembroOrigem.id;

            MovimentoResumo.idPessoaOrigem = Transacao.MembroOrigem.idPessoa;

            MovimentoResumo.nroMembroOrigem = Transacao.MembroOrigem.nroAssociado;

            MovimentoResumo.nomeMembroOrigem = (Transacao.MembroOrigem?.Pessoa?.nome);

            MovimentoResumo.nroDocumentoMembroOrigem = (Transacao.MembroOrigem?.Pessoa?.nroDocumento);

            MovimentoResumo.idMembroDestino = Transacao.MembroDestino.id;

            MovimentoResumo.idPessoaDestino = Transacao.MembroDestino.idPessoa;

            MovimentoResumo.nroMembroDestino = Transacao.MembroDestino.nroAssociado;

            MovimentoResumo.nomeMembroDestino = Transacao.MembroDestino.Pessoa.nome;

            MovimentoResumo.nroDocumentoMembroDestino = Transacao.MembroDestino.Pessoa.nroDocumento;

            MovimentoResumo.idOrigem = Transacao.idOrigem;

            return(MovimentoResumo);
        }
        /// <summary>
        ///
        /// </summary>
        public override UtilRetorno validar(MovimentoOperacaoDTO Transacao)
        {
            var ValidacaoDestino = this.validarDestino(Transacao);

            if (ValidacaoDestino.flagError)
            {
                return(ValidacaoDestino);
            }

            ValidacaoDestino = this.validarSaldoOrigem(Transacao);

            if (ValidacaoDestino.flagError)
            {
                return(ValidacaoDestino);
            }

            var MovimentoResumo = new MovimentoResumoVW();

            MovimentoResumo.idTipoTransacao = Transacao.idTipoTransacao ?? (byte)TipoTransacaoEnum.LANCAMENTO_DEBITO;

            MovimentoResumo.descricaoTipoTransacao = "Lançamento de Débito";

            MovimentoResumo.captarDados(Transacao);

            return(UtilRetorno.newInstance(false, "", MovimentoResumo));
        }
Esempio n. 6
0
        /// <summary>
        ///
        /// </summary>
        public List <Movimento> criarMovimentos(MovimentoResumoVW MovimentoResumo, MovimentoOperacaoDTO Transacao)
        {
            var TransacaoProdutoInterno = this.carregarDistribuicaoRede(Transacao);

            var MovimentoOrigem = gerarMovimentoOrigem(MovimentoResumo, Transacao);

            var MovimentoDestino = gerarMovimentoDestino(MovimentoResumo, Transacao, TransacaoProdutoInterno);

            var MovimentoRede = this.gerarMovimentosRede(MovimentoOrigem, TransacaoProdutoInterno);

            MovimentoDestino.percentualMovimentoPrincipal = decimal.Subtract(new decimal(100), MovimentoRede.carregarPercentualDistribuido());

            MovimentoDestino.valor = decimal.Subtract(Transacao.valorOperacao, MovimentoRede.carregarValorDistribuido());

            MovimentoDestino.observacao = $"Recebimento de {MovimentoDestino.percentualMovimentoPrincipal:N2} de {Transacao.valorOperacao:N2} produto SINCTEC";

            if (!Transacao.flagPagamentoComBitkink)
            {
                MovimentoOrigem.valor = new decimal(0);

                MovimentoOrigem.observacao = $"Compra de Produto SINCTEC sem usar BTK";

                MovimentoDestino.valor = new decimal(0);

                MovimentoDestino.observacao = $"Pagamento de Produto SINCTEC sem receber BTK";
            }

            MovimentoRede.listaMovimentoRede = MovimentoRede.listaMovimentoRede.Where(x => x.idMembroDestino > 0 && x.valor > 0)
                                               .ToList();

            var listaItens = new List <Movimento>();

            listaItens.Add(MovimentoOrigem);

            listaItens.Add(MovimentoDestino);

            listaItens.AddRange(MovimentoRede.listaMovimentoRede);

            foreach (var item in listaItens)
            {
                if (item.flagMovimentoOrigem == true)
                {
                    continue;
                }

                item.flagDebito = false;

                item.flagCredito = true;

                item.observacao = item.observacao.abreviar(100);

                item.setDefaultInsertValues();
            }

            return(listaItens);
        }
Esempio n. 7
0
        /// <summary>
        ///
        /// </summary>
        private Movimento gerarMovimentoDestino(MovimentoResumoVW MovimentoResumo, MovimentoOperacaoDTO Transacao, TransacaoProdutoInterno TransacaoProdutoInterno)
        {
            var MovimentoDestino = new Movimento();

            MovimentoDestino.captarDadosDestino(MovimentoResumo);
            MovimentoDestino.valor           = TransacaoProdutoInterno.valorInterno;
            MovimentoDestino.observacao      = $"{TransacaoProdutoInterno.percentualTotalInterno:N4}% de {Transacao.valorOperacao:N4}";
            MovimentoDestino.idTipoTransacao = (byte)TipoTransacaoEnum.PRODUTOS_LINKEY;
            MovimentoDestino.setDefaultInsertValues();
            MovimentoDestino.flagMovimentoDestino = true;

            return(MovimentoDestino);
        }
Esempio n. 8
0
        /// <summary>
        ///
        /// </summary>
        private Movimento gerarMovimentoOrigem(MovimentoResumoVW MovimentoResumo, MovimentoOperacaoDTO Transacao)
        {
            var MovimentoOrigem = new Movimento();

            MovimentoOrigem.captarDadosOrigem(MovimentoResumo);

            MovimentoOrigem.idTipoTransacao = (byte)TipoTransacaoEnum.PRODUTOS_LINKEY;

            MovimentoOrigem.setDefaultInsertValues();

            MovimentoOrigem.flagMovimentoOrigem = true;

            return(MovimentoOrigem);
        }
Esempio n. 9
0
        /// <summary>
        ///
        /// </summary>
        public static Movimento captarDadosDestinoDebito(this Movimento Movimento, MovimentoResumoVW MovimentoResumo)
        {
            Movimento.idMembroOrigem = null;

            Movimento.idPessoaOrigem = null;

            Movimento.idMembroDestino = MovimentoResumo.idMembroDestino;

            Movimento.idPessoaDestino = MovimentoResumo.idPessoaDestino;

            Movimento.valor = MovimentoResumo.valorOperacao;

            Movimento.flagDebito = true;

            Movimento.flagCredito = false;

            return(Movimento);
        }
        private string gerarLinhaExcel(MovimentoResumoVW OMovimento)
        {
            StringBuilder linha = new StringBuilder();

            linha.Append(OMovimento.idMovimento).Append(";")
            .Append(OMovimento.dtCadastro.exibirData(true)).Append(";")
            .Append(OMovimento.nroMembroOrigem).Append(";")
            .Append(OMovimento.nomeMembroOrigem).Append(";")
            .Append(OMovimento.nroMembroDestino).Append(";")
            .Append(OMovimento.nomeMembroDestino).Append(";")
            .Append(OMovimento.descricaoTipoTransacao).Append(";")
            .Append(OMovimento.flagCredito == true ? "Crédito" : "Débito").Append(";")
            .Append(OMovimento.valorOperacao.toDecimal().ToString("F4")).Append(";")
            .Append(OMovimento.dtIntegracaoSaldo.exibirData(true)).Append(";")
            .Append(OMovimento.observacao).Append(";");

            return(linha.ToString());
        }
Esempio n. 11
0
        /// <summary>
        ///
        /// </summary>
        public UtilRetorno debitar(MovimentoResumoVW MovimentoResumo)
        {
            var MovimentoDestino = new Movimento();

            MovimentoDestino.captarDadosDestinoDebito(MovimentoResumo);
            MovimentoDestino.idTipoTransacao = MovimentoResumo.idTipoTransacao;

            MovimentoDestino.setDefaultInsertValues();

            var listaItens = new List <Movimento>();

            listaItens.Add(MovimentoDestino);

            db.Movimento.AddRange(listaItens);

            var Retorno = db.validateAndSave();

            if (Retorno.flagError)
            {
                return(Retorno);
            }

            return(UtilRetorno.newInstance(false, "", listaItens));
        }
        /// <summary>
        ///
        /// </summary>
        public UtilRetorno transferir(MovimentoResumoVW MovimentoResumo)
        {
            var MovimentoOrigem = new Movimento();

            MovimentoOrigem.captarDadosOrigem(MovimentoResumo);
            MovimentoOrigem.idTipoTransacao = (byte)TipoTransacaoEnum.TRANSFERÊNCIA;


            var MovimentoDestino = new Movimento();

            MovimentoDestino.captarDadosDestino(MovimentoResumo);
            MovimentoDestino.idTipoTransacao = (byte)TipoTransacaoEnum.TRANSFERÊNCIA;

            MovimentoOrigem.setDefaultInsertValues();
            MovimentoDestino.setDefaultInsertValues();

            var listaItens = new List <Movimento>();

            listaItens.Add(MovimentoOrigem);
            listaItens.Add(MovimentoDestino);

            db.Movimento.AddRange(listaItens);

            var Retorno = db.validateAndSave();

            if (Retorno.flagError)
            {
                return(Retorno);
            }

            db.Movimento.Where(x => x.id == MovimentoDestino.id).Update(x => new Movimento {
                idMovimentoPrincipal = MovimentoOrigem.id
            });

            return(UtilRetorno.newInstance(false, "", listaItens));
        }
Esempio n. 13
0
        /// <summary>
        ///
        /// </summary>
        public UtilRetorno pagar(MovimentoResumoVW MovimentoResumo, MovimentoOperacaoDTO Transacao)
        {
            var listaMovimentos = this.criarMovimentos(MovimentoResumo, Transacao);

            var MovimentoOrigem = listaMovimentos.FirstOrDefault(x => x.flagMovimentoOrigem);

            var MovimentoDestino = listaMovimentos.FirstOrDefault(x => x.flagMovimentoDestino);

            var listaMovimentoRede = listaMovimentos.Where(x => !x.flagMovimentoDestino && !x.flagMovimentoOrigem).ToList();

            if (MovimentoOrigem == null)
            {
                return(UtilRetorno.newInstance(true, "O movimento de origem não pôde ser carregado."));
            }

            if (MovimentoDestino == null)
            {
                return(UtilRetorno.newInstance(true, "O movimento de destino não pôde ser carregado."));
            }

            using (var context = new DataContext()){
                using (var transaction = context.Database.BeginTransaction()){
                    try{
                        context.Movimento.Add(MovimentoOrigem);
                        context.SaveChanges();

                        MovimentoDestino.idMovimentoPrincipal    = MovimentoOrigem.id;
                        MovimentoDestino.valorMovimentoPrincipal = MovimentoOrigem.valor;
                        context.Movimento.Add(MovimentoDestino);

                        if (listaMovimentoRede.Any())
                        {
                            listaMovimentoRede.ForEach(item => {
                                item.idMovimentoPrincipal    = MovimentoOrigem.id;
                                item.idOrigem                = MovimentoOrigem.idOrigem;
                                item.idMovimentoPrincipal    = MovimentoOrigem.id;
                                item.valorMovimentoPrincipal = MovimentoOrigem.valor;
                            });

                            context.Movimento.AddRange(listaMovimentoRede);
                        }

                        context.SaveChanges();

                        transaction.Commit();

                        listaMovimentos.Clear();

                        listaMovimentos.Add(MovimentoOrigem);

                        listaMovimentos.Add(MovimentoDestino);

                        listaMovimentos.AddRange(listaMovimentoRede);
                    }catch (Exception) {
                        transaction.Rollback();

                        return(UtilRetorno.newInstance(true, "Houve problemas ao tentar realizar a transação para salvar os movimentos."));
                    }
                }
            }

            return(UtilRetorno.newInstance(false, "", listaMovimentos));
        }
        /// <summary>
        ///
        /// </summary>
        public UtilRetorno pagar(MovimentoResumoVW MovimentoResumo, MovimentoOperacaoDTO Transacao)
        {
            var MovimentoOrigem = new Movimento();

            MovimentoOrigem.captarDadosOrigem(MovimentoResumo);
            MovimentoOrigem.idTipoTransacao = (byte)TipoTransacaoEnum.PAGAMENTO;
            MovimentoOrigem.setDefaultInsertValues();
            db.Movimento.Add(MovimentoOrigem);
            db.SaveChanges();

            var listaItens       = new List <Movimento>();
            var ValoresTransacao = this.carregarValores(Transacao);

            var MovimentoDestino = new Movimento();

            MovimentoDestino.captarDadosDestino(MovimentoResumo);
            MovimentoDestino.valor           = ValoresTransacao.valorEstabelecimento;
            MovimentoDestino.observacao      = $"{ValoresTransacao.valorPagamento:N2} com {ValoresTransacao.percentualDescontoEstabelecimento:N2} de desconto.";
            MovimentoDestino.idTipoTransacao = (byte)TipoTransacaoEnum.PAGAMENTO;
            MovimentoDestino.setDefaultInsertValues();

            listaItens.Add(MovimentoDestino);


            if (ValoresTransacao.valorCashback > 0)
            {
                var MovimentoCashback = new Movimento();
                MovimentoCashback.captarDadosOrigem(MovimentoResumo);
                MovimentoCashback.valor           = ValoresTransacao.valorCashback;
                MovimentoCashback.idTipoTransacao = (byte)TipoTransacaoEnum.CASHBACK;
                MovimentoCashback.setDefaultInsertValues();

                listaItens.Add(MovimentoCashback);
            }


            if (ValoresTransacao.valorComissaoCorretor > 0)
            {
                var MovimentoCorretor = new Movimento();
                MovimentoCorretor.idMembroOrigem  = MovimentoDestino.idMembroDestino;
                MovimentoCorretor.idPessoaOrigem  = MovimentoDestino.idPessoaDestino;
                MovimentoCorretor.idMembroDestino = Transacao.MembroDestino.idIndicador ?? 1;
                MovimentoCorretor.idPessoaDestino = null;
                MovimentoCorretor.valor           = ValoresTransacao.valorComissaoCorretor;
                MovimentoCorretor.idTipoTransacao = (byte)TipoTransacaoEnum.COMISSAO_COMPRA_ESTABELECIMENTO;
                MovimentoCorretor.setDefaultInsertValues();

                listaItens.Add(MovimentoCorretor);
            }


            if (ValoresTransacao.valorLinkey > 0)
            {
                var MovimentoLinkey = new Movimento();
                MovimentoLinkey.idMembroOrigem  = MovimentoOrigem.idMembroDestino;
                MovimentoLinkey.idPessoaOrigem  = MovimentoOrigem.idPessoaDestino;
                MovimentoLinkey.idMembroDestino = 1;
                MovimentoLinkey.idPessoaDestino = null;
                MovimentoLinkey.valor           = ValoresTransacao.valorLinkey;
                MovimentoLinkey.observacao      = "Remuneração da SINCTEC";
                MovimentoLinkey.idTipoTransacao = (byte)TipoTransacaoEnum.PAGAMENTO;
                MovimentoLinkey.setDefaultInsertValues();

                listaItens.Add(MovimentoLinkey);
            }


            if (ValoresTransacao.valorComissaoIndicador1 > 0)
            {
                var MovimentoIndicador1 = new Movimento();
                MovimentoIndicador1.idMembroOrigem  = MovimentoOrigem.idMembroDestino;
                MovimentoIndicador1.idPessoaOrigem  = MovimentoOrigem.idPessoaDestino;
                MovimentoIndicador1.idMembroDestino = Transacao.MembroOrigem.idIndicador ?? 1;
                MovimentoIndicador1.idPessoaDestino = null;
                MovimentoIndicador1.valor           = ValoresTransacao.valorComissaoIndicador1;
                MovimentoIndicador1.idTipoTransacao = (byte)TipoTransacaoEnum.COMISSAO_COMPRA_USUARIO;
                MovimentoIndicador1.observacao      = "Indicação comprador nível 1";
                MovimentoIndicador1.setDefaultInsertValues();

                listaItens.Add(MovimentoIndicador1);
            }

            if (ValoresTransacao.valorComissaoIndicador2 > 0)
            {
                var MovimentoIndicador2 = new Movimento();
                MovimentoIndicador2.idMembroOrigem  = MovimentoOrigem.idMembroDestino;
                MovimentoIndicador2.idPessoaOrigem  = MovimentoOrigem.idPessoaDestino;
                MovimentoIndicador2.idMembroDestino = Transacao.MembroOrigem.idIndicadorSegundoNivel ?? 1;
                MovimentoIndicador2.idPessoaDestino = null;
                MovimentoIndicador2.valor           = ValoresTransacao.valorComissaoIndicador2;
                MovimentoIndicador2.idTipoTransacao = (byte)TipoTransacaoEnum.COMISSAO_COMPRA_USUARIO;
                MovimentoIndicador2.observacao      = "Indicação comprador nível 2";
                MovimentoIndicador2.setDefaultInsertValues();

                listaItens.Add(MovimentoIndicador2);
            }

            if (ValoresTransacao.valorComissaoIndicador3 > 0)
            {
                var MovimentoIndicador3 = new Movimento();
                MovimentoIndicador3.idMembroOrigem  = MovimentoOrigem.idMembroDestino;
                MovimentoIndicador3.idPessoaOrigem  = MovimentoOrigem.idPessoaDestino;
                MovimentoIndicador3.idMembroDestino = Transacao.MembroOrigem.idIndicadorTerceiroNivel ?? 1;
                MovimentoIndicador3.idPessoaDestino = null;
                MovimentoIndicador3.valor           = ValoresTransacao.valorComissaoIndicador3;
                MovimentoIndicador3.idTipoTransacao = (byte)TipoTransacaoEnum.COMISSAO_COMPRA_USUARIO;
                MovimentoIndicador3.observacao      = "Indicação comprador nível 3";
                MovimentoIndicador3.setDefaultInsertValues();

                listaItens.Add(MovimentoIndicador3);
            }

            listaItens.ForEach(item => {
                item.flagDebito              = false;
                item.flagCredito             = true;
                item.idOrigem                = MovimentoOrigem.idOrigem;
                item.idMovimentoPrincipal    = MovimentoOrigem.id;
                item.valorMovimentoPrincipal = MovimentoOrigem.valor;
                item.observacao              = item.observacao.abreviar(100);
            });

            db.Movimento.AddRange(listaItens);

            var Retorno = db.validateAndSave();

            if (Retorno.flagError)
            {
                return(Retorno);
            }

            //Adicionaro primeiro movimento para os próximos processos
            listaItens.Add(MovimentoOrigem);

            return(UtilRetorno.newInstance(false, "", listaItens));
        }