private void Salvar()
        {
            Formas_pagamento fp = (int.Parse(txCod.Text) == 0
                ? new Formas_pagamento()
                : controller.Find(int.Parse(txCod.Text)));

            fp.Id             = int.Parse(txCod.Text);
            fp.Descricao      = txDescricao.Text;
            fp.Tipo_pagamento = cbTipo_pagamento.SelectedIndex;
            fp.Tipo_intervalo = cbTipo_intervalo.SelectedIndex;

            switch (fp.Tipo_intervalo)
            {
            case (int)Tipo_intervalo.DATA_BASE:
                fp.Dia_base = int.Parse(txInterv_diaBase.Text);
                break;

            case (int)Tipo_intervalo.INTERVALO:
                fp.Intervalo = int.Parse(txInterv_diaBase.Text);
                break;
            }

            fp.Parcelas            = int.Parse(txParcelas.Text);
            fp.Operadora_cartao_id = int.Parse(txCod_operadora.Text);
            fp.Conta_id            = int.Parse(txCod_conta.Text);

            if (controller.Save(fp))
            {
                LimparCampos();
            }
        }
示例#2
0
        public bool Save(Formas_pagamento pg)
        {
            try
            {
                if (!Valid(pg))
                {
                    return(false);
                }

                if (db.Find(pg.Id) == null)
                {
                    pg.Id = db.NextId(e => e.Id);
                    db.Save(pg);
                }
                else
                {
                    db.Update(pg);
                }

                db.Commit();
                BStatus.Success("Forma de pagamento salva");
                return(true);
            }
            catch
            {
                return(false);
            }
        }
示例#3
0
        public EntradaValorCaixa(Tipo_movimentacao_caixa tipo)
        {
            InitializeComponent();

            txValor_movimentacao.ToMoney();
            txCod_usuario.Text  = UsuariosController.UsuarioAtual.Id.ToString();
            txNome_usuario.Text = UsuariosController.UsuarioAtual.Nome;

            formaPagController = new Formas_pagamentoController();

            int tpDinheiro           = (int)Tipo_pagamento.DINHEIRO;
            Formas_pagamento formaPg = formaPagController.Get(e => e.Tipo_pagamento == tpDinheiro);

            txCod_forma_pagamento.Text       = formaPg.Id.ToString();
            txDescricao_forma_pagamento.Text = formaPg.Descricao;

            txDescricao_movimento.Focus();
            Tipo_movimentacao = tipo;

            if (tipo == Tipo_movimentacao_caixa.ENTRADA)
            {
                lbTitulo.Content = "Entrada de valor no caixa";
            }

            if (tipo == Tipo_movimentacao_caixa.SAIDA)
            {
                lbTitulo.Content = "Retirada de valor no caixa";
            }
        }
示例#4
0
        public bool Remove(int id)
        {
            try
            {
                Formas_pagamento fp = Find(id);
                if (fp.Movimentos_caixas.Count > 0)
                {
                    BStatus.Alert("Não é possível excluir esta condição de pagamento. Ela está presente em uma ou mais movimentações de caixa");
                    return(false);
                }

                if (fp.Itens_pagamento.Count > 0)
                {
                    BStatus.Alert("Não é possível excluir esta condição de pagamento. Ela está presente em um ou mais movimentos");
                    return(false);
                }

                if (fp.Pagamentos_lancamentos.Count > 0)
                {
                    BStatus.Alert("Não é possível excluir esta condição de pagamento. Ela está presente em um ou mais lançamentos financeiros");
                    return(false);
                }

                db.Remove(fp);
                db.Commit();
                BStatus.Success("Forma de pagamento removida");
                return(true);
            }
            catch
            {
                return(false);
            }
        }
示例#5
0
        private bool Valid(Formas_pagamento pg)
        {
            if (string.IsNullOrWhiteSpace(pg.Descricao))
            {
                BStatus.Alert("A descrição da forma de pagamento é obrigatória");
                return(false);
            }

            if (pg.Tipo_pagamento == (int)Tipo_pagamento.CREDITO)
            {
                if (pg.Tipo_intervalo == (int)Tipo_intervalo.DATA_BASE)
                {
                    if ((pg.Dia_base > 31) || (pg.Dia_base < 1))
                    {
                        BStatus.Alert("O dia base não pode ser menor que 1 ou passar de 31 ");
                        return(false);
                    }
                }

                if (pg.Tipo_intervalo == (int)Tipo_intervalo.INTERVALO)
                {
                    if (pg.Intervalo < 1)
                    {
                        BStatus.Alert("O intervalo não pode ser inferior a 1");
                        return(false);
                    }
                }
            }

            if (pg.Tipo_pagamento == (int)Tipo_pagamento.CARTAO)
            {
                if (pg.Operadora_cartao_id == 0)
                {
                    BStatus.Alert("Informe a operadora de cartão");
                    return(false);
                }
            }

            if (pg.Tipo_pagamento == (int)Tipo_pagamento.CHEQUE)
            {
                if (pg.Conta_id == 0)
                {
                    BStatus.Alert("Uma conta do tipo BANCÁRIA é necessária para o tipo pagamento CHEQUE");
                    return(false);
                }

                Contas conta = new ContasController().Find(pg.Conta_id);
                if (conta.Tipo != (int)Tipo_conta.CONTA_BANCARIA)
                {
                    BStatus.Alert("Uma conta do tipo BANCÁRIA é necessária para o tipo pagamento CHEQUE");
                    return(false);
                }
            }

            return(true);
        }
        public ItemFpgFechamentoCaixa(Formas_pagamento fpg, decimal valor)
        {
            InitializeComponent();

            lbForma_pagamento.Content = fpg.Descricao;
            Valor_esperado            = valor;
            Forma_pagamento           = fpg;

            txValor.ToMoney();
        }
        private void prev_Click(object sender, RoutedEventArgs e)
        {
            int id = int.Parse(txCod.Text);

            if ((id - 1) <= 0)
            {
                LimparCampos();
                return;
            }

            Formas_pagamento fpg = controller.Prev(id);

            FillFpg(fpg);
        }
示例#8
0
        private void Selecionar()
        {
            Formas_pagamento f = (Formas_pagamento)dataGrid.SelectedItem;

            if (f == null)
            {
                return;
            }
            if (f.Id == 0)
            {
                return;
            }

            Selecionado = f;
            Close();
        }
示例#9
0
        public List <KeyValuePair <Formas_pagamento, decimal> > GetTotaisPorFormaPagamentoCaixaAtual()
        {
            int ultmaAbertura    = GetUltimoMovimentoAbertura().Id;
            int caixa_id         = Get_ID_CaixaAtualUsuario();
            int tipoMov_abertura = (int)Tipo_movimentacao_caixa.ABERTURA;

            List <Movimentos_caixas> movimentos      = GetMovimentosCaixaAtual();
            List <Movimentos_caixas> distinctFormaPg = movimentos.GroupBy(e => e.Forma_pagamento_id).Select(mov => mov.First()).ToList();
            List <KeyValuePair <Formas_pagamento, decimal> > result = new List <KeyValuePair <Formas_pagamento, decimal> >();

            Formas_pagamentoController fpgController = new Formas_pagamentoController();

            foreach (Movimentos_caixas mov in distinctFormaPg)
            {
                Formas_pagamento fpg = fpgController.Find(mov.Forma_pagamento_id);
                result.Add(new KeyValuePair <Formas_pagamento, decimal>(fpg, movimentos.Where(e => e.Forma_pagamento_id == mov.Forma_pagamento_id).Sum(e => e.Valor)));
            }

            return(result);
        }
        private void FillFpg(Formas_pagamento fpg)
        {
            if (fpg == null)
            {
                return;
            }

            LimparCampos();
            txCod.Text       = fpg.Id.ToString();
            txDescricao.Text = fpg.Descricao;
            cbTipo_intervalo.SelectedIndex = fpg.Tipo_intervalo;
            cbTipo_pagamento.SelectedIndex = fpg.Tipo_pagamento;
            txParcelas.Text = fpg.Parcelas.ToString();

            if (fpg.Conta_id > 0)
            {
                Contas conta = new ContasController().Find(fpg.Conta_id);
                txCod_conta.Text = conta.Id.ToString();
                txConta.Text     = conta.Nome;
            }

            if (fpg.Tipo_intervalo == (int)Tipo_intervalo.DATA_BASE)
            {
                lbIntervalo_diaBase.Content = "Dia base";
                txInterv_diaBase.Text       = fpg.Dia_base.ToString();
            }
            else
            {
                lbIntervalo_diaBase.Content = "Intervalo (dias)";
                txInterv_diaBase.Text       = fpg.Intervalo.ToString();
            }

            if (fpg.Operadora_cartao_id > 0)
            {
                Operadoras_cartao op = new Operadoras_cartaoController().Find(fpg.Operadora_cartao_id);
                txCod_operadora.Text  = op.Id.ToString();
                txNome_operadora.Text = op.Nome;
            }

            if (fpg.Tipo_pagamento == (int)Tipo_pagamento.DINHEIRO)
            {
                cbTipo_intervalo.IsEnabled      = false;
                txInterv_diaBase.IsEnabled      = false;
                txParcelas.IsEnabled            = false;
                btSelecionarOperadora.IsEnabled = false;
            }

            if (fpg.Tipo_pagamento == (int)Tipo_pagamento.CREDITO)
            {
                cbTipo_intervalo.IsEnabled      = false;
                txInterv_diaBase.IsEnabled      = false;
                txParcelas.IsEnabled            = false;
                btSelecionarOperadora.IsEnabled = false;
                btSelecionarConta.IsEnabled     = false;
            }

            if (fpg.Tipo_pagamento == (int)Tipo_pagamento.CHEQUE)
            {
                cbTipo_intervalo.IsEnabled      = true;
                txInterv_diaBase.IsEnabled      = true;
                txParcelas.IsEnabled            = true;
                btSelecionarOperadora.IsEnabled = false;
                btSelecionarConta.IsEnabled     = true;
            }

            if (fpg.Tipo_pagamento == (int)Tipo_pagamento.PRAZO)
            {
                cbTipo_intervalo.IsEnabled      = true;
                txInterv_diaBase.IsEnabled      = true;
                txParcelas.IsEnabled            = true;
                btSelecionarOperadora.IsEnabled = false;
                btSelecionarConta.IsEnabled     = true;
            }

            if (fpg.Tipo_intervalo == (int)Tipo_pagamento.CARTAO)
            {
                cbTipo_intervalo.IsEnabled      = false;
                txInterv_diaBase.IsEnabled      = false;
                txParcelas.IsEnabled            = false;
                btSelecionarOperadora.IsEnabled = true;
                btSelecionarConta.IsEnabled     = true;
            }

            txDescricao.Focus();
        }
        private void next_Click(object sender, RoutedEventArgs e)
        {
            Formas_pagamento fpg = controller.Next(int.Parse(txCod.Text));

            FillFpg(fpg);
        }
示例#12
0
        private void Setup()
        {
            Movimentos_caixasController mc_controller = new Movimentos_caixasController();

            if (!mc_controller.CaixaAberto(UsuariosController.UsuarioAtual.Id))
            {
                AberturaCaixa ac = new AberturaCaixa();
                ac.ShowDialog();

                if (!ac.CaixaAberto)
                {
                    Close();
                }
            }

            txProduto.Focus();
            Pago = false;
            txQuant.ToMoney();
            txQuant.IsEnabled = false;

            btPagamento.IsEnabled = false;
            btCliente.IsEnabled   = false;
            string parametroAtual = "";

            try
            {
                ParametrosController       parametros    = new ParametrosController();
                Tipos_movimentoController  tmvController = new Tipos_movimentoController();
                Formas_pagamentoController fpgController = new Formas_pagamentoController();

                #region Parametro TP_PDV
                Parametros paramTipoPdv = parametros.FindParametroLojaAtual("TP_PDV", true);
                if (paramTipoPdv == null)
                {
                    paramTipoPdv = parametros.FindParametroLojaAtual("TP_PDV", false);
                }

                if (paramTipoPdv == null)
                {
                    MessageBox.Show("Não é possível iniciar o PDV por que o parâmetro de sistema 'TP_PDV' não foi atribuido.", "TP_PDV", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                    Close();
                }

                if (string.IsNullOrEmpty(paramTipoPdv.Valor))
                {
                    MessageBox.Show("Não é possível iniciar o PDV por que o parâmetro de sistema 'TP_PDV' não foi atribuido.", "TP_PDV", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                    Close();
                }

                if (paramTipoPdv.Valor != "PDV" && paramTipoPdv.Valor != "PDP")
                {
                    MessageBox.Show("Não é possível iniciar o PDV por que o valor do parâmetro de sistema 'TP_PDV' não pôde ser reconhecido.", "TP_PDV", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                    Close();
                }

                Tipo_pdv = (paramTipoPdv.Valor == "PDV"
                    ? Tipo_PDV.PDV
                    : Tipo_PDV.PDP);
                #endregion

                #region PAGAMENTOS
                List <Parametros> parametrosPagamentos = parametros.ParametrosPagamentoPDV();

                foreach (Parametros param in parametrosPagamentos)
                {
                    if (param.Valor == null || param.Valor == "0" || param.Valor == "" || param.Valor == "NA")
                    {
                        continue;
                    }

                    Formas_pagamento fpg = fpgController.Find(int.Parse(param.Valor));
                    if (fpg == null)
                    {
                        continue;
                    }

                    Atalhos_pagamentos.Add(new KeyValuePair <int, Formas_pagamento>(int.Parse(param.Nome.Replace("PDV_F", string.Empty)), fpg));
                }
                #endregion

                #region TMV VENDA
                Parametros pTmvVenda = parametros.FindParametroLojaAtual("TMV_VNDPDV", true);
                parametroAtual = "TMV_VNDPDV";

                if (pTmvVenda == null)
                {
                    pTmvVenda = parametros.FindParametroLojaAtual("TMV_VNDPDV", false);
                    if (pTmvVenda == null)
                    {
                        MessageBox.Show("Não é possível iniciar o PDV porque o parâmetro de sistema 'TMV_VNDPDV' não foi atribuido para este computador. \nAcione o suporte Doware.", "Erro de configuração", MessageBoxButton.OK, MessageBoxImage.Error);
                        Close();
                    }
                }

                if (pTmvVenda.Valor == null || pTmvVenda.Valor == "0" || pTmvVenda.Valor == "")
                {
                    MessageBox.Show("O parâmetro de sistema 'TMV_VNDPDV' não foi informado corretamente ou não foi reconhecido. \nAcione o suporte Doware.", "Erro de configuração", MessageBoxButton.OK, MessageBoxImage.Error);
                    Close();;
                }

                Tipos_movimento tmvVenda = tmvController.Find(int.Parse(pTmvVenda.Valor));
                if (tmvVenda == null)
                {
                    MessageBox.Show("O tipo de movimento para VENDA informado no parâmetro 'TMV_VNDPDV' não existe. \nAcione o suporte Doware.", "Erro de configuração", MessageBoxButton.OK, MessageBoxImage.Error);
                    Close();
                }

                if (tmvVenda.Movimentacao_itens != (int)Tipo_movimentacao.SAIDA)
                {
                    MessageBox.Show(@"Não é possível iniciar o PDV por que o Tipo de Movimento designado para operações de 
de VENDA no parâmetro 'TMV_VNDPDV' não é compatível. A operação de VENDA requer um Tipo de Movimento cujo
a movimentação de produtos é SAIDA.
Acione o suporte Doware.", "Erro de configuração", MessageBoxButton.OK, MessageBoxImage.Error);

                    Close();
                }

                Tipo_movimento_id_venda = tmvVenda;
                #endregion

                #region TMV DEVOLUCAO
                Parametros pDevolucao = parametros.FindParametroLojaAtual("TMV_DEVPDV", true);
                parametroAtual = "TMV_DEVPDV";
                if (pDevolucao == null)
                {
                    pDevolucao = parametros.FindParametroLojaAtual("TMV_DEVPDV", false);
                    if (pDevolucao == null)
                    {
                        MessageBox.Show("Não é possivel iniciar o PDV porque o parâmetro de sistema 'TMV_DEVPDV' não foi atribuido para este computador. \nAcione o suporte Doware.", "Erro de configuração", MessageBoxButton.OK, MessageBoxImage.Error);
                        Close();
                    }
                }

                if (pDevolucao.Valor == null || pDevolucao.Valor == "0" || pDevolucao.Valor == "")
                {
                    MessageBox.Show("Não é possível iniciar o PDV porque o parâmetro de sistema 'TMV_DEVPDV' não foi atribuido ou seu valor não foi reconhecido. \nAcione o suporte Doware.", "Erro de configuração", MessageBoxButton.OK, MessageBoxImage.Error);
                    Close();
                }

                Tipos_movimento tmvDevolucao = tmvController.Find(int.Parse(pDevolucao.Valor));
                if (tmvDevolucao == null)
                {
                    MessageBox.Show("Não é possível iniciar o PDV porque o Tipo de Movimento informado no parâmetro de sistema 'TMV_DEVPDV' não existe. \nAcione o suporte Doware.", "Erro de configuração", MessageBoxButton.OK, MessageBoxImage.Error);
                    Close();
                }

                if (tmvDevolucao.Movimentacao_itens != (int)Tipo_movimentacao.ENTRADA)
                {
                    MessageBox.Show(@"Não é possível iniciar o PDV por que o Tipo de Movimento designado para operações de 
de DEVOLUÇÃO no parâmetro 'TMV_DEVPDV' não é compatível. A operação de DEVOLUÇÃO requer um Tipo de Movimento cujo
a movimentação de produtos é ENTRADA.
Acione o suporte Doware.", "Erro de configuração", MessageBoxButton.OK, MessageBoxImage.Error);

                    Close();
                }

                Tipo_movimento_id_devolucao = tmvDevolucao;
                #endregion
            }
            catch (Exception ex)
            {
                MessageBox.Show("Não é possível iniciar o PDV porque o parâmetro de sistema '" + parametroAtual + "' não foi informado corretamente ou seu valor não pôde ser reconhecido. \nAcione o suporte Doware.", "Erro de configuração", MessageBoxButton.OK, MessageBoxImage.Error);
                Close();
            }
        }
示例#13
0
        /// <summary>
        ///
        /// </summary>
        /// <returns>Código do movimento caso seja efetuado com sucesso. Caso haja erros, retornará 0.</returns>
        public int FechaMovimento(decimal troco)
        {
            UnitOfWork unit = new UnitOfWork(true);

            try
            {
                unit.BeginTransaction();
                db.Context = unit.Context;

                if (itens_mov == null)
                {
                    itens_mov = Movimento.Itens_movimento.ToList();
                }
                Movimento.Itens_movimento.Clear();

                if (itens_pag == null)
                {
                    itens_pag = Movimento.Itens_pagamento.ToList();
                }
                Movimento.Itens_pagamento.Clear();

                Movimentos_caixasController movimentos_caixaController = new Movimentos_caixasController();
                movimentos_caixaController.SetContext(unit.Context);

                Formas_pagamentoController fpg_controller = new Formas_pagamentoController();
                fpg_controller.SetContext(unit.Context);

                Tipos_movimentoController tmc = new Tipos_movimentoController();
                tmc.SetContext(unit.Context);

                Tipos_movimento tipo_mov = tmc.Find(Movimento.Tipo_movimento_id);

                Movimento.Id         = db.NextId(e => e.Id);
                Movimento.Data       = DateTime.Now;
                Movimento.Usuario_id = UsuariosController.UsuarioAtual.Id;
                Movimento.Loja_id    = UsuariosController.LojaAtual.Id;

                db.Save(Movimento);
                db.Commit();

                if (troco > 0)
                {
                    int tipo_pg_dinheiro      = (int)Tipo_pagamento.DINHEIRO;
                    Formas_pagamento fpgTroco = fpg_controller.Get(e => e.Tipo_pagamento == tipo_pg_dinheiro);

                    Movimentos_caixas mcTroco = new Movimentos_caixas();
                    mcTroco.Descricao          = $"Movimento {Movimento.Id} (TROCO)";
                    mcTroco.Caixa_id           = movimentos_caixaController.Get_ID_CaixaAtualUsuario();
                    mcTroco.Data               = Movimento.Data;
                    mcTroco.Movimento_id       = Movimento.Id;
                    mcTroco.Usuario_id         = Movimento.Usuario_id;
                    mcTroco.Forma_pagamento_id = fpgTroco.Id;
                    mcTroco.Loja_id            = UsuariosController.LojaAtual.Id;
                    mcTroco.Tipo_mov           = (int)Tipo_movimentacao_caixa.TROCO;
                    mcTroco.Valor              = (troco * (-1));

                    if (!movimentos_caixaController.Save(mcTroco))
                    {
                        unit.RollBack();
                        return(0);
                    }
                }

                Itens_movimentoController imc = new Itens_movimentoController();
                imc.SetContext(unit.Context);

                EstoqueController estoque_controller = new EstoqueController();
                estoque_controller.SetContext(unit.Context);

                string lote = imc.GetLastLote(false);
                lote = estoque_controller.GeraProximoLote(lote);
                int sublote = 1;

                #region Itens do movimento
                foreach (Itens_movimento item in itens_mov)
                {
                    item.Produtos     = null;
                    item.Unidades     = null;
                    item.Movimento_id = Movimento.Id;

                    Estoque e = new Estoque();
                    e.Produto_id = item.Produto_id;
                    e.Loja_id    = UsuariosController.LojaAtual.Id;
                    e.Quant      = item.Quant;
                    e.Lote       = (string.IsNullOrEmpty(item.Lote)
                            ? null
                            : (item.Lote + "SL" + item.Sublote));
                    e.Grade_id = item.Grade_id;

                    ProdutosController pc = new ProdutosController();
                    pc.SetContext(unit.Context);
                    Produtos prod = pc.Find(item.Produto_id);

                    Produtos_fornecedoresController pForn_c = new Produtos_fornecedoresController();
                    pForn_c.SetContext(unit.Context);

                    switch (tipo_mov.Movimentacao_itens)
                    {
                    case (int)Tipo_movimentacao.ENTRADA:

                        /*
                         *   O produto controla Lote, e a sua entrada é vinda de um Fornecedor.
                         *   Neste caso é gerado o seu Lote e inserido no estoque da
                         *   loja em questão
                         */
                        #region tipo_mov.Utiliza_fornecedor && prod.Controla_lote
                        if (tipo_mov.Utiliza_fornecedor && prod.Controla_lote)
                        {
                            e.Lote         = lote;
                            e.Sublote      = sublote.ToString();
                            e.Data_entrada = DateTime.Now;

                            Produtos_fornecedores pf = pForn_c.Find(item.Produto_id, Movimento.Fornecedor_id);
                            if (pf != null)
                            {
                                item.Quant = (item.Quant * pf.Fator_conversao);
                            }

                            estoque_controller.Save(e);
                            sublote++;

                            break;
                        }
                        #endregion

                        #region tipo_mov.Utiliza_fornecedor && !prod.Controla_lote
                        if (tipo_mov.Utiliza_fornecedor && !prod.Controla_lote)
                        {
                            Produtos_fornecedores pf = pForn_c.Find(item.Produto_id, Movimento.Fornecedor_id);
                            if (pf != null)
                            {
                                item.Quant = (item.Quant * pf.Fator_conversao);
                            }

                            if (!estoque_controller.InsereEstoque(item.Quant, item.Produto_id, Movimento.Loja_id, (item.Lote + "SL" + item.Sublote)))
                            {
                                unit.RollBack();
                                return(0);
                            }

                            break;
                        }
                        #endregion

                        /*
                         *   O produto controla Lote, porém sua entrada NÃO é proveniennte de um fornecedor.
                         *   Pode ser uma devolução, troca ou entrada por transferencia de loja.
                         *
                         *   Neste caso, é verificado se existe o lote em questão.
                         *   Caso não exista, será criado,
                         *   Caso exista, o Saldo em Estoque do mesmo será atualizado
                         */
                        #region (!tipo_mov.Utiliza_fornecedor) && prod.Controla_lote
                        if ((!tipo_mov.Utiliza_fornecedor) && prod.Controla_lote)
                        {
                            if (!estoque_controller.ExisteLote(item.Lote, item.Sublote))
                            {
                                estoque_controller.CriaLote(item.Produto_id, Movimento.Loja_id, item.Lote, item.Sublote);
                            }

                            if (!estoque_controller.InsereEstoque(item.Quant, item.Produto_id, Movimento.Loja_id, (item.Lote + "SL" + item.Sublote)))
                            {
                                unit.RollBack();
                                return(0);
                            }

                            break;
                        }
                        #endregion

                        #region prod.Controla_grade
                        if (prod.Controla_grade)
                        {
                            if (!estoque_controller.InsereEstoque(item.Quant, item.Produto_id, Movimento.Loja_id, null, item.Grade_id))
                            {
                                unit.RollBack();
                                return(0);
                            }

                            break;
                        }
                        #endregion

                        /*
                         *  O produto NÃO controla lote, e sua entrada NÃO é proveniente de um fornecedor.
                         *  Neste caso, o estoque será inserido levando em consideração o produto pelo seu código.
                         *
                         *  OBS.: Quando um produto NÃO possui lotes em estoque, a tabela de Estoque só pode
                         *  conter um unico registro referente ao produto em questão, considerando a Loja.
                         *
                         *  Quando o produto POSSUI lotes em estoque, a tabela de estoque pode conter varios
                         *  registros referente ao produto em questão, levando em consideração o Lote, Sub-Lote
                         *  e respectiva Loja.
                         */
                        #region !tipo_mov.Utiliza_fornecedor && !prod.Controla_lote
                        if (!tipo_mov.Utiliza_fornecedor && !prod.Controla_lote)
                        {
                            if (!estoque_controller.InsereEstoque(item.Quant, item.Produto_id, Movimento.Loja_id))
                            {
                                unit.RollBack();
                                return(0);
                            }

                            break;
                        }
                        #endregion

                        break;

                    case (int)Tipo_movimentacao.SAIDA:

                        string loteEst = (string.IsNullOrEmpty(e.Lote)
                                ? null
                                : e.Lote);

                        if (!estoque_controller.RetiraEstoque(e.Quant, e.Produto_id, e.Loja_id, loteEst, item.Grade_id))
                        {
                            unit.RollBack();
                            return(0);
                        }

                        break;
                    }

                    if (e.Lote != null)
                    {
                        if (e.Lote.Contains("SL"))
                        {
                            item.Lote    = e.Lote.Substring(0, e.Lote.IndexOf("SL"));
                            item.Sublote = e.Lote.Substring(e.Lote.IndexOf("SL") + 2);
                        }
                        else
                        {
                            item.Lote    = e.Lote;
                            item.Sublote = e.Sublote;
                        }
                    }

                    if (!imc.Save(item))
                    {
                        unit.RollBack();
                        return(0);
                    }
                }
                #endregion

                int numero_parcela = 1;

                #region Itens do Pagamento
                foreach (Itens_pagamento item_pg in itens_pag)
                {
                    if (tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.NENHUM)
                    {
                        continue;
                    }

                    item_pg.Movimento_id = Movimento.Id;

                    ContasController contas_controller = new ContasController();
                    contas_controller.SetContext(unit.Context);

                    Itens_pagamentoController ipc = new Itens_pagamentoController();
                    ipc.SetContext(unit.Context);

                    if (!ipc.Save(item_pg))
                    {
                        unit.RollBack();
                        return(0);
                    }

                    Formas_pagamento forma_pagamento = fpg_controller.Find(item_pg.Forma_pagamento_id);

                    Movimentos_caixas movimento_caixa = new Movimentos_caixas();
                    movimento_caixa.Descricao          = $"Movimento {Movimento.Id} ({(tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.ENTRADA ? "ENTRADA" : "SAIDA")})";
                    movimento_caixa.Caixa_id           = movimentos_caixaController.Get_ID_CaixaAtualUsuario();
                    movimento_caixa.Data               = Movimento.Data;
                    movimento_caixa.Movimento_id       = Movimento.Id;
                    movimento_caixa.Usuario_id         = Movimento.Usuario_id;
                    movimento_caixa.Forma_pagamento_id = item_pg.Forma_pagamento_id;
                    movimento_caixa.Loja_id            = UsuariosController.LojaAtual.Id;

                    ParcelasController parcController = new ParcelasController();
                    parcController.SetContext(unit.Context);

                    switch (forma_pagamento.Tipo_pagamento)
                    {
                        #region DINHEIRO
                    case (int)Tipo_pagamento.DINHEIRO:

                        switch (tipo_mov.Movimentacao_valores)
                        {
                        case (int)Tipo_movimentacao.ENTRADA:
                            movimento_caixa.Tipo_mov = (int)Tipo_movimentacao_caixa.ENTRADA;
                            movimento_caixa.Valor    = item_pg.Valor;
                            break;

                        case (int)Tipo_movimentacao.SAIDA:
                            movimento_caixa.Tipo_mov = (int)Tipo_movimentacao_caixa.SAIDA;
                            movimento_caixa.Valor    = (item_pg.Valor * (-1));
                            break;
                        }

                        break;
                        #endregion

                        #region CARTAO
                    case (int)Tipo_pagamento.CARTAO:

                        movimento_caixa.Valor = 0;

                        Operadoras_cartaoController opController = new Operadoras_cartaoController();
                        opController.SetContext(unit.Context);

                        Operadoras_cartao operadora = opController.Find(forma_pagamento.Operadora_cartao_id);

                        Parcelas parcela_cartao = new Parcelas();
                        parcela_cartao.Item_pagamento_id = item_pg.Id;
                        parcela_cartao.Valor             = item_pg.Valor;
                        parcela_cartao.Situacao          = (int)Situacao_parcela.EM_ABERTO;
                        parcela_cartao.Data_lancamento   = Movimento.Data;

                        parcela_cartao.Data_vencimento = (operadora.Tipo_recebimento == (int)Tipo_prazo_operadora.DIAS
                                ? Movimento.Data.AddDays(operadora.Prazo_recebimento)
                                : Movimento.Data.AddHours(operadora.Prazo_recebimento));
                        parcela_cartao.Portador = forma_pagamento.Conta_id;

                        if (tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.ENTRADA)
                        {
                            parcela_cartao.Tipo_parcela = (int)Tipo_parcela.RECEBER;
                            parcela_cartao.Cliente_id   = Movimento.Cliente_id;

                            movimento_caixa.Tipo_mov = (int)Tipo_movimentacao_caixa.ENTRADA;
                            movimento_caixa.Valor    = item_pg.Valor;
                        }

                        if (tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.SAIDA)
                        {
                            parcela_cartao.Tipo_parcela  = (int)Tipo_parcela.PAGAR;
                            parcela_cartao.Fornecedor_id = Movimento.Cliente_id;

                            movimento_caixa.Tipo_mov = (int)Tipo_movimentacao_caixa.SAIDA;
                            movimento_caixa.Valor    = item_pg.Valor * (-1);
                        }

                        parcela_cartao.Num_documento     = Movimento.Id.ToString().PadLeft(8 - Movimento.Id.ToString().Length, '0') + "-" + numero_parcela;
                        parcela_cartao.Parcela_descricao = $"REFERENTE AO MOVIMENTO {Movimento.Id} ({tipo_mov.Descricao})";
                        parcela_cartao.Numero_cheque     = string.Empty;
                        parcela_cartao.Banco             = string.Empty;
                        parcela_cartao.Agencia           = string.Empty;
                        parcela_cartao.Dias_compensacao  = 0;
                        parcela_cartao.Conta             = string.Empty;

                        if (!parcController.Save(parcela_cartao))
                        {
                            unit.RollBack();
                            return(0);
                        }
                        numero_parcela++;
                        break;
                        #endregion

                        #region CHEQUE
                    case (int)Tipo_pagamento.CHEQUE:

                        movimento_caixa.Valor = 0;
                        IRegistroCheques registroCheques;

                        if (tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.ENTRADA)
                        {
                            registroCheques          = new RecebimentoCheques();
                            movimento_caixa.Tipo_mov = (int)Tipo_movimentacao_caixa.ENTRADA;
                            movimento_caixa.Valor    = item_pg.Valor;
                        }
                        else
                        {
                            registroCheques = new LancamentoCheque();
                            registroCheques.SetConta(contas_controller.Find(forma_pagamento.Conta_id));

                            movimento_caixa.Tipo_mov = (int)Tipo_movimentacao_caixa.SAIDA;
                            movimento_caixa.Valor    = item_pg.Valor * (-1);
                        }

                        registroCheques.Exibir(item_pg.Valor);

                        foreach (Cheque cheque in registroCheques.Cheques)
                        {
                            Parcelas parcela_cheque = new Parcelas();

                            parcela_cheque.Item_pagamento_id = item_pg.Id;
                            parcela_cheque.Valor             = cheque.Valor;
                            parcela_cheque.Situacao          = (int)Situacao_parcela.EM_ABERTO;
                            parcela_cheque.Data_lancamento   = Movimento.Data;
                            parcela_cheque.Num_documento     = Movimento.Id.ToString().PadLeft(8 - Movimento.Id.ToString().Length, '0') + "-" + numero_parcela;
                            parcela_cheque.Parcela_descricao = $"REFERENTE AO MOVIMENTO {Movimento.Id} ({tipo_mov.Descricao})";
                            parcela_cheque.Data_vencimento   = cheque.Data_deposito;

                            if (tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.ENTRADA)
                            {
                                parcela_cheque.Tipo_parcela = (int)Tipo_parcela.RECEBER;
                                parcela_cheque.Cliente_id   = Movimento.Cliente_id;

                                parcela_cheque.Numero_cheque    = cheque.Numero_cheque;
                                parcela_cheque.Banco            = cheque.Banco;
                                parcela_cheque.Agencia          = cheque.Agencia;
                                parcela_cheque.Dias_compensacao = cheque.Dias_compensacao;
                                parcela_cheque.Conta            = cheque.Conta;
                            }

                            if (tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.SAIDA)
                            {
                                parcela_cheque.Tipo_parcela  = (int)Tipo_parcela.PAGAR;
                                parcela_cheque.Fornecedor_id = Movimento.Fornecedor_id;

                                parcela_cheque.Portador         = forma_pagamento.Conta_id;
                                parcela_cheque.Numero_cheque    = cheque.Numero_cheque;
                                parcela_cheque.Banco            = string.Empty;
                                parcela_cheque.Agencia          = string.Empty;
                                parcela_cheque.Dias_compensacao = 0;
                                parcela_cheque.Conta            = string.Empty;
                            }

                            if (!parcController.Save(parcela_cheque))
                            {
                                unit.RollBack();
                                return(0);
                            }

                            numero_parcela++;
                        }

                        break;
                        #endregion

                        #region PRAZO
                    case (int)Tipo_pagamento.PRAZO:

                        DateTime data_base = (forma_pagamento.Tipo_intervalo == (int)Tipo_intervalo.DATA_BASE
                                ? DateTime.Now.AddMonths(1)
                                : DateTime.Now.AddDays(forma_pagamento.Intervalo)); //baseando a data para o mes sequente ao atual

                        for (int i = 0; i < forma_pagamento.Parcelas; i++)
                        {
                            Parcelas parcela_prazo = new Parcelas();

                            parcela_prazo.Item_pagamento_id = item_pg.Id;
                            parcela_prazo.Valor             = (item_pg.Valor / forma_pagamento.Parcelas);
                            parcela_prazo.Situacao          = (int)Situacao_parcela.EM_ABERTO;
                            parcela_prazo.Data_lancamento   = Movimento.Data;
                            parcela_prazo.Parcela_descricao = $"REFERENTE AO MOVIMENTO {Movimento.Id} ({tipo_mov.Descricao})";
                            parcela_prazo.Num_documento     = Movimento.Id.ToString().PadLeft(8 - Movimento.Id.ToString().Length, '0') + "-" + numero_parcela;
                            parcela_prazo.Numero_cheque     = string.Empty;
                            parcela_prazo.Banco             = string.Empty;
                            parcela_prazo.Agencia           = string.Empty;
                            parcela_prazo.Dias_compensacao  = 0;
                            parcela_prazo.Conta             = string.Empty;

                            if (forma_pagamento.Tipo_intervalo == (int)Tipo_intervalo.DATA_BASE)
                            {
                                data_base = new DateTime(data_base.Year, data_base.Month, forma_pagamento.Dia_base);
                                parcela_prazo.Data_vencimento = data_base;
                                data_base = data_base.AddMonths(1);
                            }

                            if (forma_pagamento.Tipo_intervalo == (int)Tipo_intervalo.INTERVALO)
                            {
                                parcela_prazo.Data_vencimento = data_base;
                                data_base = data_base.AddDays(forma_pagamento.Intervalo);
                            }

                            if (tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.ENTRADA)
                            {
                                parcela_prazo.Tipo_parcela = (int)Tipo_parcela.RECEBER;
                                parcela_prazo.Cliente_id   = Movimento.Cliente_id;

                                movimento_caixa.Tipo_mov = (int)Tipo_movimentacao_caixa.ENTRADA;
                                movimento_caixa.Valor    = item_pg.Valor;
                            }

                            if (tipo_mov.Movimentacao_valores == (int)Tipo_movimentacao.SAIDA)
                            {
                                parcela_prazo.Tipo_parcela  = (int)Tipo_parcela.PAGAR;
                                parcela_prazo.Fornecedor_id = Movimento.Fornecedor_id;

                                movimento_caixa.Tipo_mov = (int)Tipo_movimentacao_caixa.SAIDA;
                                movimento_caixa.Valor    = item_pg.Valor * (-1);
                            }

                            if (!parcController.Save(parcela_prazo))
                            {
                                unit.RollBack();
                                return(0);
                            }

                            numero_parcela++;
                        }
                        break;
                        #endregion
                    }

                    if (!movimentos_caixaController.Save(movimento_caixa))
                    {
                        unit.RollBack();
                        return(0);
                    }
                }
                #endregion

                if (Pedido_venda != null)
                {
                    Pedidos_vendaController pedidosController = new Pedidos_vendaController();
                    pedidosController.SetContext(unit.Context);

                    pedidosController.RemovePedido(Pedido_venda.Id);
                }

                unit.Commit();
                BStatus.Success("Movimento salvo");
                return(Movimento.Id);
            }
            catch (Exception ex)
            {
                unit.RollBack();
                return(0);
            }
        }
        public bool Save(Lancamentos_financeiros lancamento_financeiro)
        {
            if (!Valid(lancamento_financeiro))
            {
                return(false);
            }

            List <Pagamentos_lancamentos> pagamentos = lancamento_financeiro.Pagamentos_lancamentos.ToList();

            lancamento_financeiro.Pagamentos_lancamentos = null;
            UnitOfWork unit = new UnitOfWork();

            try
            {
                unit.BeginTransaction();
                db.Context = unit.Context;

                lancamento_financeiro.Id = db.NextId(e => e.Id);
                db.Save(lancamento_financeiro);
                db.Commit();

                pagamentos.ForEach(e => e.Lancamento_id    = lancamento_financeiro.Id);
                pagamentos.ForEach(e => e.Formas_pagamento = null);

                Pagamentos_lancamentosController pl_controller = new Pagamentos_lancamentosController();
                pl_controller.SetContext(unit.Context);

                Formas_pagamentoController fpg_controller = new Formas_pagamentoController();
                fpg_controller.SetContext(unit.Context);

                ParcelasController parcController = new ParcelasController();
                parcController.SetContext(unit.Context);

                ContasController contasController = new ContasController();
                contasController.SetContext(unit.Context);

                Planos_contasController planoContasController = new Planos_contasController();
                planoContasController.SetContext(unit.Context);

                Contas        conta       = contasController.Find(lancamento_financeiro.Conta_id);
                Planos_contas plano_conta = planoContasController.Find(lancamento_financeiro.Plano_conta_id);

                int numero_parcela = 1;
                foreach (Pagamentos_lancamentos pagamento in pagamentos)
                {
                    if (!pl_controller.Save(pagamento))
                    {
                        unit.RollBack();
                        return(false);
                    }

                    Formas_pagamento forma_pg = fpg_controller.Find(pagamento.Forma_pagamento_id);

                    #region DINHEIRO
                    if (forma_pg.Tipo_pagamento == (int)Tipo_pagamento.DINHEIRO)
                    {
                        if (lancamento_financeiro.Tipo == (int)Tipo_lancamento.ENTRADA)
                        {
                            conta.Saldo += pagamento.Valor;
                        }
                        else
                        {
                            conta.Saldo -= pagamento.Valor;
                        }

                        contasController.Save(conta);
                    }
                    #endregion

                    #region CHEQUE
                    if (forma_pg.Tipo_pagamento == (int)Tipo_pagamento.CHEQUE)
                    {
                        IRegistroCheques registroCheques;

                        if (lancamento_financeiro.Tipo == (int)Tipo_lancamento.ENTRADA)
                        {
                            registroCheques = new RecebimentoCheques();
                        }
                        else
                        {
                            registroCheques = new LancamentoCheque();
                            registroCheques.SetConta(conta);
                        }

                        registroCheques.Exibir(pagamento.Valor);

                        foreach (Cheque cheque in registroCheques.Cheques)
                        {
                            Parcelas parcela_cheque = new Parcelas();

                            parcela_cheque.Pagamento_lancamento_id = pagamento.Id;
                            parcela_cheque.Valor             = cheque.Valor;
                            parcela_cheque.Situacao          = (int)Situacao_parcela.EM_ABERTO;
                            parcela_cheque.Data_lancamento   = lancamento_financeiro.Data;
                            parcela_cheque.Num_documento     = lancamento_financeiro.Num_documento.PadLeft(8 - lancamento_financeiro.Num_documento.Length, '0') + "-" + numero_parcela;
                            parcela_cheque.Parcela_descricao = $"REFERENTE AO LANÇAMENTO FINANCEIRO {lancamento_financeiro.Id} ({plano_conta.Descricao})";
                            parcela_cheque.Data_vencimento   = cheque.Data_deposito;

                            if (lancamento_financeiro.Tipo == (int)Tipo_lancamento.ENTRADA)
                            {
                                parcela_cheque.Tipo_parcela = (int)Tipo_parcela.RECEBER;
                                parcela_cheque.Cliente_id   = lancamento_financeiro.Cliente_id;

                                parcela_cheque.Numero_cheque    = cheque.Numero_cheque;
                                parcela_cheque.Banco            = cheque.Banco;
                                parcela_cheque.Agencia          = cheque.Agencia;
                                parcela_cheque.Dias_compensacao = cheque.Dias_compensacao;
                                parcela_cheque.Conta            = cheque.Conta;
                            }

                            if (lancamento_financeiro.Tipo == (int)Tipo_lancamento.SAIDA)
                            {
                                parcela_cheque.Tipo_parcela  = (int)Tipo_parcela.PAGAR;
                                parcela_cheque.Fornecedor_id = lancamento_financeiro.Fornecedor_id;

                                parcela_cheque.Portador         = forma_pg.Conta_id;
                                parcela_cheque.Numero_cheque    = cheque.Numero_cheque;
                                parcela_cheque.Banco            = string.Empty;
                                parcela_cheque.Agencia          = string.Empty;
                                parcela_cheque.Dias_compensacao = 0;
                                parcela_cheque.Conta            = string.Empty;
                            }

                            if (!parcController.Save(parcela_cheque))
                            {
                                unit.RollBack();
                                return(false);
                            }

                            numero_parcela++;
                        }
                    }
                    #endregion

                    #region CARTAO
                    if (forma_pg.Tipo_pagamento == (int)Tipo_pagamento.CARTAO)
                    {
                        Operadoras_cartaoController opController = new Operadoras_cartaoController();
                        opController.SetContext(unit.Context);

                        Operadoras_cartao operadora = opController.Find(forma_pg.Operadora_cartao_id);

                        Parcelas parcela_cartao = new Parcelas();
                        parcela_cartao.Pagamento_lancamento_id = pagamento.Id;
                        parcela_cartao.Valor           = pagamento.Valor;
                        parcela_cartao.Situacao        = (int)Situacao_parcela.EM_ABERTO;
                        parcela_cartao.Data_lancamento = lancamento_financeiro.Data;

                        parcela_cartao.Data_vencimento = (operadora.Tipo_recebimento == (int)Tipo_prazo_operadora.DIAS
                            ? lancamento_financeiro.Data.AddDays(operadora.Prazo_recebimento)
                            : lancamento_financeiro.Data.AddHours(operadora.Prazo_recebimento));
                        parcela_cartao.Portador = forma_pg.Conta_id;

                        if (lancamento_financeiro.Tipo == (int)Tipo_lancamento.ENTRADA)
                        {
                            parcela_cartao.Tipo_parcela = (int)Tipo_parcela.RECEBER;
                            parcela_cartao.Cliente_id   = lancamento_financeiro.Cliente_id;
                        }

                        if (lancamento_financeiro.Tipo == (int)Tipo_lancamento.SAIDA)
                        {
                            parcela_cartao.Tipo_parcela  = (int)Tipo_parcela.PAGAR;
                            parcela_cartao.Fornecedor_id = lancamento_financeiro.Cliente_id;
                        }

                        parcela_cartao.Num_documento     = lancamento_financeiro.Num_documento.PadLeft(8 - lancamento_financeiro.Num_documento.Length, '0') + "-" + numero_parcela;
                        parcela_cartao.Parcela_descricao = $"REFERENTE AO LANÇAMENTO FINANCEIRO {lancamento_financeiro.Id} ({plano_conta.Descricao})";
                        parcela_cartao.Numero_cheque     = string.Empty;
                        parcela_cartao.Banco             = string.Empty;
                        parcela_cartao.Agencia           = string.Empty;
                        parcela_cartao.Dias_compensacao  = 0;
                        parcela_cartao.Conta             = string.Empty;

                        if (!parcController.Save(parcela_cartao))
                        {
                            unit.RollBack();
                            return(false);
                        }
                        numero_parcela++;
                    }
                    #endregion

                    #region PRAZO
                    if (forma_pg.Tipo_pagamento == (int)Tipo_pagamento.PRAZO)
                    {
                        DateTime data_base = (forma_pg.Tipo_intervalo == (int)Tipo_intervalo.DATA_BASE
                            ? DateTime.Now.AddMonths(1)
                            : DateTime.Now.AddDays(forma_pg.Intervalo)); //baseando a data para o mes sequente ao atual

                        for (int i = 0; i < forma_pg.Parcelas; i++)
                        {
                            Parcelas parcela_prazo = new Parcelas();

                            parcela_prazo.Pagamento_lancamento_id = pagamento.Id;
                            parcela_prazo.Valor             = (pagamento.Valor / forma_pg.Parcelas);
                            parcela_prazo.Situacao          = (int)Situacao_parcela.EM_ABERTO;
                            parcela_prazo.Data_lancamento   = lancamento_financeiro.Data;
                            parcela_prazo.Parcela_descricao = $"REFERENTE AO LANÇAMENTO FINANCEIRO {lancamento_financeiro.Id} ({plano_conta.Descricao})";
                            parcela_prazo.Num_documento     = lancamento_financeiro.Num_documento.PadLeft(8 - lancamento_financeiro.Num_documento.Length, '0') + "-" + numero_parcela;
                            parcela_prazo.Numero_cheque     = string.Empty;
                            parcela_prazo.Banco             = string.Empty;
                            parcela_prazo.Agencia           = string.Empty;
                            parcela_prazo.Dias_compensacao  = 0;
                            parcela_prazo.Conta             = string.Empty;
                            parcela_prazo.Portador          = lancamento_financeiro.Conta_id;

                            if (forma_pg.Tipo_intervalo == (int)Tipo_intervalo.DATA_BASE)
                            {
                                data_base = new DateTime(data_base.Year, data_base.Month, forma_pg.Dia_base);
                                parcela_prazo.Data_vencimento = data_base;
                                data_base = data_base.AddMonths(1);
                            }

                            if (forma_pg.Tipo_intervalo == (int)Tipo_intervalo.INTERVALO)
                            {
                                parcela_prazo.Data_vencimento = data_base;
                                data_base = data_base.AddDays(forma_pg.Intervalo);
                            }

                            if (lancamento_financeiro.Tipo == (int)Tipo_lancamento.ENTRADA)
                            {
                                parcela_prazo.Tipo_parcela = (int)Tipo_parcela.RECEBER;
                                parcela_prazo.Cliente_id   = lancamento_financeiro.Cliente_id;
                            }

                            if (lancamento_financeiro.Tipo == (int)Tipo_lancamento.SAIDA)
                            {
                                parcela_prazo.Tipo_parcela  = (int)Tipo_parcela.PAGAR;
                                parcela_prazo.Fornecedor_id = lancamento_financeiro.Fornecedor_id;
                            }

                            if (!parcController.Save(parcela_prazo))
                            {
                                unit.RollBack();
                                return(false);
                            }

                            numero_parcela++;
                        }
                        #endregion
                    }
                }

                unit.Commit();
                BStatus.Success("Lançamento financeiro efetuado com sucesso");
                return(true);
            }
            catch (Exception ex)
            {
                unit.RollBack();
                return(false);
            }
        }