//--- MENU VER ORIGEM
        //-------------------------------------------------------------------------------------------------------
        private void mnuItemVerOrigem_Click(object sender, EventArgs e)
        {
            //--- check selected item
            if (dgvListagem.SelectedRows.Count == 0)
            {
                AbrirDialog("Favor selecionar um registro para Visualizar...",
                            "Selecionar Registro", DialogType.OK, DialogIcon.Information);
                return;
            }

            try
            {
                // --- Ampulheta ON
                Cursor.Current = Cursors.WaitCursor;

                objTransfConta   transf = (objTransfConta)dgvListagem.SelectedRows[0].DataBoundItem;
                frmTransferencia frm    = new frmTransferencia(transf, this);
                frm.ShowDialog();

                if (frm.DialogResult == DialogResult.Yes)
                {
                    ObterDados();
                }
            }
            catch (Exception ex)
            {
                AbrirDialog("Uma exceção ocorreu ao Abrir a Origem..." + "\n" +
                            ex.Message, "Exceção", DialogType.OK, DialogIcon.Exclamation);
            }
            finally
            {
                // --- Ampulheta OFF
                Cursor.Current = Cursors.Default;
            }
        }
        // DELETE TRANFERENCIA CONTA
        //------------------------------------------------------------------------------------------------------------
        public void DeleteTransferenciaConta(objTransfConta Transf,
                                             Action <int, decimal> ContaSdlUpdate)
        {
            AcessoDados db = null;

            try
            {
                db = new AcessoDados();
                db.BeginTransaction();

                // 1. TRY REMOVE TRANSFERENCIA (entrada e saida)
                //------------------------------------------------------------------------------------------------------------
                new MovimentacaoBLL().DeleteMovsByOrigem(EnumMovOrigem.TransfConta, (long)Transf.IDTransfConta, ContaSdlUpdate, null, db);

                // 2. REMOVE TRANSF CONTA
                //------------------------------------------------------------------------------------------------------------
                string query = "DELETE tblTransfConta WHERE IDTransfConta = @IDTransfConta";

                //--- clear and insert params
                db.LimparParametros();
                db.AdicionarParametros("@IDTransfConta", Transf.IDTransfConta);

                //--- execute
                db.ExecutarManipulacao(CommandType.Text, query);

                // 3. COMMIT TRANSACTION
                //------------------------------------------------------------------------------------------------------------
                db.CommitTransaction();
            }
            catch (Exception ex)
            {
                db.RollBackTransaction();
                throw ex;
            }
        }
        private void dgvListagem_MouseDown(object sender, MouseEventArgs e)
        {
            // check button
            if (e.Button != MouseButtons.Right)
            {
                return;
            }

            Control c = (Control)sender;

            DataGridView.HitTestInfo hit = dgvListagem.HitTest(e.X, e.Y);
            dgvListagem.ClearSelection();

            if (hit.Type != DataGridViewHitTestType.Cell)
            {
                return;
            }

            // seleciona o ROW
            dgvListagem.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dgvListagem.CurrentCell   = dgvListagem.Rows[hit.RowIndex].Cells[2];
            dgvListagem.Rows[hit.RowIndex].Selected = true;

            // mostra o MENU ativar e desativar
            objTransfConta recItem = (objTransfConta)dgvListagem.Rows[hit.RowIndex].DataBoundItem;

            // revela menu
            mnuOperacoes.Show(c.PointToScreen(e.Location));
        }
        // CONTRUCTOR CONTINUE
        //------------------------------------------------------------------------------------------------------------
        private void ConstructorContinue(objTransfConta transferencia)
        {
            _transf = transferencia;

            // binding
            bind.DataSource = typeof(objTransfConta);
            bind.Add(_transf);
            BindingCreator();

            if (_transf.IDTransfConta == null)
            {
                Sit = EnumFlagEstado.NovoRegistro;
            }
            else
            {
                Sit = EnumFlagEstado.RegistroSalvo;
            }

            // define DEFAULT DATE
            _transf.TransfData = DataPadrao();

            // handlers
            HandlerKeyDownControl(this);

            numTransferenciaAno.KeyDown += Numeric_KeyDown;
            numTransferenciaAno.Enter   += Numeric_Enter;
            numTransferenciaDia.KeyDown += Numeric_KeyDown;
            numTransferenciaDia.Enter   += Numeric_Enter;
        }
        // CONVERT ROW TRANSFERENCIA CONTA IN CLASS
        //------------------------------------------------------------------------------------------------------------
        public objTransfConta ConvertRow_InClass(DataRow row)
        {
            objTransfConta tConta = new objTransfConta(null)
            {
                IDTransfConta  = (long)row["IDTransfConta"],
                IDContaEntrada = (int)row["IDContaEntrada"],
                ContaEntrada   = (string)row["ContaEntrada"],
                IDContaSaida   = (int)row["IDContaSaida"],
                ContaSaida     = (string)row["ContaSaida"],
                Descricao      = (string)row["Descricao"],
                TransfData     = (DateTime)row["TransfData"],
                TransfValor    = (decimal)row["TransfValor"],
            };

            return(tConta);
        }
        // EXTORNAR TRANSF CONTA
        //------------------------------------------------------------------------------------------------------------
        private void btnExtornarTransferencia_Click(object sender, EventArgs e)
        {
            //--- check selected item
            if (dgvListagem.SelectedRows.Count == 0)
            {
                AbrirDialog("Favor selecionar um registro para Extornar...",
                            "Selecionar Registro", DialogType.OK, DialogIcon.Information);
                return;
            }

            //--- ask user
            var resp = AbrirDialog("Deseja realemente estornar a Transferência de Conta selecionada?",
                                   "Estornar Transferência",
                                   DialogType.SIM_NAO,
                                   DialogIcon.Question,
                                   DialogDefaultButton.Second);

            if (resp != DialogResult.Yes)
            {
                return;
            }

            try
            {
                // --- Ampulheta ON
                Cursor.Current = Cursors.WaitCursor;

                objTransfConta transf = (objTransfConta)dgvListagem.SelectedRows[0].DataBoundItem;

                tBLL.DeleteTransferenciaConta(transf, ContaSaldoLocalUpdate);
                ObterDados();
            }
            catch (Exception ex)
            {
                AbrirDialog("Uma exceção ocorreu ao Estornar Transferência..." + "\n" +
                            ex.Message, "Exceção", DialogType.OK, DialogIcon.Exclamation);
            }
            finally
            {
                // --- Ampulheta OFF
                Cursor.Current = Cursors.Default;
            }
        }
        // INSERT TRANSFERENCIA CONTA
        //------------------------------------------------------------------------------------------------------------
        public long InsertTransferenciaConta(objTransfConta Transf,
                                             Action <int, decimal> ContaSdlUpdate)
        {
            AcessoDados db = null;

            try
            {
                db = new AcessoDados();
                db.BeginTransaction();

                //--- 1. INSERT TRANSF CONTA
                //------------------------------------------------------------------------------------------------------------

                //--- clear Params
                db.LimparParametros();

                //--- params
                db.AdicionarParametros("@IDContaEntrada", Transf.IDContaEntrada);
                db.AdicionarParametros("@IDContaSaida", Transf.IDContaSaida);
                db.AdicionarParametros("@Descricao", Transf.Descricao);
                db.AdicionarParametros("@TransfData", Transf.TransfData);
                db.AdicionarParametros("@TransfValor", Transf.TransfValor);

                //--- convert null parameters
                db.ConvertNullParams();

                //--- create insert string
                string query = db.CreateInsertSQL("tblTransfConta");

                //--- insert and Get new ID
                long newID = db.ExecutarInsertAndGetID(query);

                //--- 2. INSERT TRANSF ENTRADA
                //------------------------------------------------------------------------------------------------------------

                MovimentacaoBLL mBLL = new MovimentacaoBLL();

                //--- create transferencia de entrada
                objMovimentacao entrada = new objMovimentacao(null)
                {
                    IDConta         = Transf.IDContaEntrada,
                    IDCaixa         = null,
                    IDSetor         = null,
                    Origem          = EnumMovOrigem.TransfConta,
                    IDOrigem        = newID,
                    MovData         = Transf.TransfData,
                    MovValor        = Transf.TransfValor,
                    MovTipo         = 3,
                    DescricaoOrigem = $"TRANSFERÊNCIA: entrada de {Transf.ContaSaida}",
                };

                //--- execute INSERT ENTRADA MOVIMENTACAO
                mBLL.InsertMovimentacao(entrada, ContaSdlUpdate, null, db);

                //--- 3. INSERT TRANSF SAIDA
                //------------------------------------------------------------------------------------------------------------

                //--- create transferencia de entrada
                objMovimentacao saida = new objMovimentacao(null)
                {
                    IDConta         = Transf.IDContaSaida,
                    IDCaixa         = null,
                    IDSetor         = null,
                    Origem          = EnumMovOrigem.TransfConta,
                    IDOrigem        = newID,
                    MovData         = Transf.TransfData,
                    MovValor        = Transf.TransfValor * (-1),
                    MovTipo         = 3,
                    DescricaoOrigem = $"TRANSFERÊNCIA: saída para {Transf.ContaEntrada}",
                };

                //--- execute INSERT SAIDA MOVIMENTACAO
                mBLL.InsertMovimentacao(saida, ContaSdlUpdate, null, db);

                //--- COMMIT and RETURN
                db.CommitTransaction();
                return(newID);
            }
            catch (Exception ex)
            {
                db.RollBackTransaction();
                throw ex;
            }
        }
 // SUB NEW
 //------------------------------------------------------------------------------------------------------------
 public frmTransferencia(objTransfConta transferencia, Form formOrigem = null)
 {
     InitializeComponent();
     _formOrigem = formOrigem;
     ConstructorContinue(transferencia);
 }