private void cargarComboCuentas()
        {
            if (Session.Usuario.SelectedRol.Id == (int)Entities.Enums.Roles.Admin)
            {
                if (Session.Cliente != null)
                {
                    listaCuentas = (List<Cuenta>)cuentaService.getByCliente(Session.Cliente.tipoDocumento, Session.Cliente.numeroDocumento);
                }
                else
                {
                    MessageBox.Show("Selecciones un cliente de Archivo -> Seleccion Cliente", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
            {
                clienteLogueado = clienteService.getClienteByUsername(usuarioLogueado.Username);
                listaCuentas = (List<Cuenta>)cuentaService.getByCliente(clienteLogueado.tipoDocumento, clienteLogueado.numeroDocumento);
            }

            if (listaCuentas != null && listaCuentas.Count > 0)
            {
                comboCuentaOrigen.DataSource = listaCuentas;
            }
            else
            {
                throw new Exception("No posees cuentas para realizar retiros");

            }
        }
 public AltaEdicion(Cliente cliente, ABM_Cliente.AltaCliente form)
 {
     InitializeComponent();
     if (cliente != null)
     {
         this.cliente = cliente;
         this.form = form;
     }
 }
 public AltaCuenta(long nroCuenta, ConsultaCuenta form)
 {
     formPadre = form;
     cuentaService = new CuentaService();
     paisService = new PaisService();
     tipoMonedaService = new TipoMonedaService();
     clienteService = new ClienteService();
     transaccionService = new TransaccionService();
     cliente = new Cliente();
     InitializeComponent();
     this.NroCuenta = nroCuenta;
 }
        public long Facturar(IList<ItemFactura> itemsAFacturar, Cliente cliente)
        {
            long nroFactura;
            FacturacionRepository repo = new FacturacionRepository();
            TransaccionRepository repoTrans = new TransaccionRepository();
            CuentaRepository repoCuenta = new CuentaRepository();
            using (var transaction = new TransactionScope())
            {
                Factura factura = new Factura
                {
                    clienteNumeroDoc = cliente.numeroDocumento,
                    clienteTipoDoc = cliente.tipoDocumento,
                    fecha = Session.Fecha
                };

                nroFactura = repo.GenerarFactura(factura);

                itemsAFacturar.ToList().ForEach(i => i.facturaNumero = nroFactura);
                var itemsTransferencia = itemsAFacturar.Where(i => (TiposTransaccionEnum)i.tipo == TiposTransaccionEnum.Transferencia).ToList();
                if (itemsTransferencia.Any())
                {
                    repo.AgregarItemsTransferencia(itemsTransferencia);
                }
                var itemsApertura = itemsAFacturar.Where(i => (TiposTransaccionEnum)i.tipo == TiposTransaccionEnum.AperturaCuenta).ToList();
                if (itemsApertura.Any())
                {
                    repo.AgregarItemsApertura(itemsApertura);
                    repoCuenta.HabilitarCuentas(itemsApertura);
                }
                var itemsModificacion = itemsAFacturar.Where(i => (TiposTransaccionEnum)i.tipo == TiposTransaccionEnum.ModifCuenta).ToList();
                if (itemsModificacion.Any())
                {
                    repo.AgregarItemsModificacion(itemsModificacion);
                    repoCuenta.ActualizarCuentasModif(itemsModificacion);
                }

                var cuentas = itemsAFacturar.Select(i => i.cuenta).Distinct().ToList();
                cuentas.ForEach(repoTrans.ValidarCantidadTransacciones);

                transaction.Complete();
                transaction.Dispose();
            }

            return nroFactura;
        }
        /*************    Metodos privados       *************/
        private void realizarTransaccion(Usuario usr, Cliente cliente)
        {
            using (var transaction = new TransactionScope())
            {
                try
                {
                    if (usrService.insert(usr) > 0)
                        MessageBox.Show("Se ha creado correctamente el usuario", "Creacion usuario", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    else
                        throw new Exception("Error al crear usuario");

                    cliente.username = usr.Username;
                    usrService.insertRolesUsuario(usr);

                    if (cliService.createCliente(cliente) > 0)
                    {
                        this.Hide();
                        MessageBox.Show("Se ha creado correctamente el cliente", "Creacion cliente");
                        this.form.Hide();
                    }
                    else
                        throw new Exception("Error al crear usuario");

                    transaction.Complete();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                finally
                {

                    transaction.Dispose();
                }
            }
        }
        private void validarNumeroDocumento()
        {
            Cliente cliente = new Cliente();

            if (Session.Usuario.SelectedRol.Id == (int)Entities.Enums.Roles.Admin)
            {
                long tipoDocCliente = ((Cuenta)comboCuentaOrigen.SelectedItem).tipoDoc;
                long nroDocCliente = ((Cuenta)comboCuentaOrigen.SelectedItem).nroDoc;
                cliente = clienteService.getClienteByDNI(tipoDocCliente, nroDocCliente);
            }
            else
            {
                cliente = clienteService.getClienteByUsername(usuarioLogueado.Username);
            }

            if (txtNroDoc.Text != cliente.numeroDocumento.ToString() | Convert.ToInt64(comboTipoDoc.SelectedValue) != cliente.tipoDocumento)
            {
                throw new OperationCanceledException("El documento ingresado no coincide");
            }
        }
 /*************    Metodos privados       *************/
 private void altaCliente(Cliente cli)
 {
     var form = new ABM_de_Usuario.AltaEdicion(cli, this);
     form.Show();
     form.MdiParent = this.MdiParent;
 }
        private void btnGuardar_Click(object sender, EventArgs e)
        {
            int codPais = Convert.ToInt32(cmbPaises.SelectedValue.ToString());
            int tipoMoneda = Convert.ToInt32(cmbMonedas.SelectedValue.ToString());
            int tipoCuenta = Convert.ToInt32(cmbTiposCuenta.SelectedValue.ToString());

            //if (Session.Usuario.SelectedRol.Id == (int)Entities.Enums.Roles.Admin)
            //{
            //    tipoDocCliente = ((Cliente)cmbClientes.SelectedItem).tipoDocumento;
            //    nroDocCliente = ((Cliente)cmbClientes.SelectedItem).numeroDocumento;
            //}
            //else
            //{
            //    cliente = clienteService.getClienteByUsername(usuario.Username);
            //    tipoDocCliente = cliente.tipoDocumento;
            //    nroDocCliente = cliente.numeroDocumento;
            //}

            if (txtCuenta.Text == "")
            {
                if (Session.Usuario.SelectedRol.Id == (int)Entities.Enums.Roles.Admin)
                {
                    tipoDocCliente = ((Cliente)cmbClientes.SelectedItem).tipoDocumento;
                    nroDocCliente = ((Cliente)cmbClientes.SelectedItem).numeroDocumento;
                }
                else
                {
                    cliente = clienteService.getClienteByUsername(usuario.Username);
                    tipoDocCliente = cliente.tipoDocumento;
                    nroDocCliente = cliente.numeroDocumento;
                }

                try
                {
                    cuentaService.InsertaCuenta(codPais, tipoMoneda, tipoCuenta, tipoDocCliente, nroDocCliente, Fecha);
                    MessageBox.Show("Cuenta creada exitosamente. Recuerde que la misma permanecerá pendiente de activación hasta que abone el costo de apertura", "Atencion", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.cargarCampos();
                }
                catch (OperationCanceledException ex)
                {
                    MessageBox.Show(ex.Message.ToString(), "No se pudo crear la cuenta!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                catch (Exception)
                {
                    MessageBox.Show("No se pudo crear la cuenta", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                long numCuenta = Convert.ToInt64(txtCuenta.Text);

                try
                {
                    cuentaService.ModificaCuenta(numCuenta, tipoCuenta, Fecha);
                    MessageBox.Show("Cuenta modificada exitosamente!", "Atencion", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    inhabilitarCuentaSiCorresponde();
                    this.Close();
                }
                catch (OperationCanceledException ex)
                {
                    MessageBox.Show(ex.Message.ToString(), "No se pudo modificar la cuenta.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                catch (Exception)
                {
                    MessageBox.Show("Error", "No se pudo modificar la cuenta.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
 /*************    Metodos privados       *************/
 private void obtenerCliente()
 {
     try
     {
         if (Session.Usuario.SelectedRol.Id == (int)Entities.Enums.Roles.Admin)
         {
             clienteLogueado = Session.Cliente;
             if (clienteLogueado == null)
             {
                 MessageBox.Show("Selecciones un cliente de Archivo -> Seleccion Cliente", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information);
                 //this.Close();
             }
         }
         else
         {
             clienteLogueado = clienteService.getClienteByUsername(usuarioLogueado.Username);
         }
     }
     catch (Exception)
     {
         MessageBox.Show("El usuario actual no posee cuentas asociadas ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
 private void updateCliente(Cliente cli)
 {
     cliServ.updateCliente(cli);
 }
        private Cliente materializarCliente()
        {
            Cliente clienteMaterializado = new Cliente();

            clienteMaterializado.nombre = this.txtNombre.Text;
            clienteMaterializado.apellido = this.txtApellido.Text;
            clienteMaterializado.mail = this.txtMail.Text;
            clienteMaterializado.domCalle = this.txtCalle.Text;
            clienteMaterializado.domDpto = this.txtDpto.Text;
            clienteMaterializado.localidad = this.txtLocalidad.Text;
            clienteMaterializado.domNro = Int64.Parse(this.txtNumCalle.Text);
            clienteMaterializado.domPiso = Int64.Parse(this.txtPiso.Text);
            clienteMaterializado.fechaNacimiento = dateTimePicker1.Value;
            clienteMaterializado.numeroDocumento = Int64.Parse(this.txtNroDoc.Text);
            clienteMaterializado.tipoDocumento = ((TipoDocumento)this.cmbTipoDoc.SelectedItem).codigo;
            clienteMaterializado.paisCodigo = ((Pais)this.cmbPais.SelectedItem).codigoPais;
            if (cmbEstado.SelectedItem == "Habilitado")
                clienteMaterializado.habilitado = true;
            else
                clienteMaterializado.habilitado = false;

            return clienteMaterializado;
        }
        public void realizarBusqueda()
        {
            int? moneda = (int)cmbMoneda.SelectedValue <= 0 ? (int?)null : (int)cmbMoneda.SelectedValue;
            long? pais = (long)cmbPaises.SelectedValue <= 0 ? (long?)null : (long)cmbPaises.SelectedValue;
            int? estado = (int)cmbEstado.SelectedValue <= 0 ? (int?)null : (int)cmbEstado.SelectedValue;
            int? tipoCuenta = (int)cmbTipoCuenta.SelectedValue <= 0 ? (int?)null : (int)cmbTipoCuenta.SelectedValue;
            long? nroDocCliente, tipoDocCliente;

            if (Session.Usuario.SelectedRol.Id == (int)Entities.Enums.Roles.Admin)
            {
                nroDocCliente = (long?)null;
                tipoDocCliente = (long?)null;
            }
            else
            {
                Cliente cliente = new Cliente();
                cliente = clienteService.getClienteByUsername(usuario.Username);
                nroDocCliente = cliente.numeroDocumento;
                tipoDocCliente = cliente.tipoDocumento;
            }

            dgvCuentas.AutoGenerateColumns = false;
            dgvCuentas.DataSource = cuentaService.GetCuentas(pais, estado, moneda, tipoCuenta, nroDocCliente, tipoDocCliente);
        }
 public void updateCliente(Cliente cliente)
 {
     ClienteRepository repo = new ClienteRepository();
     repo.Update(cliente);
 }
 public bool existeMailParaOtroCliente(string mail, Cliente cli)
 {
     ClienteRepository repo = new ClienteRepository();
     return repo.existeMailParaOtroCliente(mail, cli);
 }
 public int createCliente(Cliente cliente)
 {
     ClienteRepository repo = new ClienteRepository();
     return repo.Insert(cliente);
 }
 private void btnBuscar_Click(object sender, EventArgs e)
 {
     if (Validaciones.validarCampoVacio(txtNroDoc))
     {
         cliente = clienteService.getClienteByDNI(Convert.ToInt64(comboTipoDoc.SelectedValue), Convert.ToInt64(txtNroDoc.Text));
         Limpiar();
     }
 }
 /*************    Metodos de componentes       *************/
 private void FacturacionForm_Load(object sender, EventArgs e)
 {
     try
     {
         if (Session.Usuario.SelectedRol.Id == (int)Entities.Enums.Roles.Cliente)
         {
             groupBox1.Visible = false;
             cliente = Utils.obtenerCliente(usuarioLogueado);
             cargarTiposTransaccion();
             cargarTransacciones();
             initializeDatagrid();
         }
         else
         {
             cargarComboTipoDoc();
             cargarTiposTransaccion();
             grdTransacciones.AutoGenerateColumns = false;
             grdTransacciones.DataSource = new List<Transaccion>();
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
 private void validarExisteMailParaCliente(String mail, Cliente cli)
 {
     if (cliServ.existeMailParaOtroCliente(mail, cli))
     {
         throw new Exception("El mail ingresado pertenece a otro Cliente !");
     }
 }
 public TarjetaCreditoForm(long tipoDoc, long nroDoc)
 {
     InitializeComponent();
     clienteTarjeta = cliServ.getClienteByDNI(tipoDoc, nroDoc);
 }
 public AltaCliente(long tipoDoc, long nroDoc)
 {
     InitializeComponent();
     esAltaCliente = false;
     clienteParaModificar = cliServ.getClienteByDNI(tipoDoc, nroDoc);
 }