internal Titulo MapToTitulo()
        {
            var titulo = new Titulo();

            titulo.Id = this.TituloId;
            titulo.NombreTitulo = this.TituloNombre;
            titulo.PrecioVentaTitulo = this.PrecioVenta;
            titulo.CodigoBarra = this.CodigoBarra;

            return titulo;
        }
        public Titulo MapToTitulo()
        {
            var titulo = new Titulo();

            titulo.Id = this.TituloId;
            titulo.NombreTitulo = this.TituloNombre;
            titulo.ProveedorId = this.ProveedorId;
            titulo.PrecioVentaTitulo = this.PrecioVenta;

            return titulo;
        }
        public static bool SolicitarAutorizacionPorCambioDePrecios(Titulo tituloAValidar)
        {
            var uowFactory = Ioc.Container.Get<IUowFactory>();

            using (var uow = uowFactory.Create<ILaPazUow>())
            {
                //Obtener el precio de venta actual en la base de datos.
                var titulo = uow.Titulos.Obtener(x => x.Id == tituloAValidar.Id);

                if (titulo == null) return false;

                decimal? precioDeCompraActual = titulo.PrecioCompraTitulo;
                decimal? precioDeVentaActual = titulo.PrecioVentaTitulo;

                var solicitarAutorizacion = (precioDeCompraActual.HasValue &&
                                             tituloAValidar.PrecioVentaTitulo < precioDeCompraActual.Value) ||
                                             tituloAValidar.PrecioVentaTitulo < precioDeVentaActual;

                return solicitarAutorizacion;
            }
        }
 private void ActualizarPrecioVenta(Titulo tituloModificar)
 {
     tituloModificar.PrecioVentaTitulo = PrecioVenta;
     tituloModificar.OperadorModificacionId = Context.OperadorActual.Id;
     tituloModificar.FechaModificacion = _clock.Now;
     tituloModificar.SucursalModificacionId = Context.SucursalActual.Id;
     tituloModificar.UbicacionId = null;
     Uow.Titulos.Modificar(tituloModificar);
     Uow.Commit();
 }
        private void ActualizarPrecioTitulo(Titulo titulo)
        {
            //MOdificar el de todos los proveedores?
            var titulosModificar = new List<Titulo>();
            int _codigo;
            var co = int.TryParse(titulo.CodigoBarra, out _codigo);


            if (String.IsNullOrEmpty(titulo.CodigoBarra) || _codigo == 0)
            {
                titulosModificar = Uow.Titulos.Listado().Where(t => t.Id == titulo.Id).ToList();
            }
            else
            {
                titulosModificar = Uow.Titulos.Listado().Where(t => t.CodigoBarra == titulo.CodigoBarra).ToList();
            }

            if (titulosModificar.Count > 0)
            {
                foreach (var tituloModificar in titulosModificar)
                {
                    if (tituloModificar.ProveedorId == _titulo.ProveedorId)
                    {
                        //Precio de Venta
                        if (PrecioVenta >= tituloModificar.PrecioVentaTitulo)
                            ActualizarPrecioVenta(tituloModificar);

                        else if (PrecioVenta < tituloModificar.PrecioVentaTitulo)
                        {
                            //_messageBoxDisplayService.ShowInfo("")
                            _messageBoxDisplayService.ShowConfirmationDialog(
                                "El precio del título es menor. Desea almacenarlo?", "Actualizar Precio",
                                () => { ActualizarPrecioVenta(tituloModificar); });
                        }

                        //Precio de Compra
                        //if (PrecioBase >= tituloModificar.PrecioCompraTitulo)
                        //    ActualizarPrecioCompra(tituloModificar);

                      

                    }
                    else
                    {
                        if ((PrecioVenta > tituloModificar.PrecioVentaTitulo))//|| (PrecioBase > tituloModificar.PrecioCompraTitulo))
                            ActualizarPrecioVenta(tituloModificar);
                    }
                }

            }

        }
 private void OnTituloAgregado(Titulo titulo)
 {
     if (TituloAgregado != null)
     {
         TituloAgregado(this, titulo);
     }
 }
        private void CargarTitulo(Guid tituloId)
        {
            if (tituloId == default(Guid))
            {
                _titulo = new Titulo();
            }
            else
            {
                _titulo = Uow.Titulos.Obtener(t => t.Id == tituloId);
                _precioVentaOriginal = _titulo.PrecioVentaTitulo;
                _operadorUltimoPrecioIdOriginal = _titulo.OperadorUltimoPrecioId;
            }
            this.Titulo = _titulo.NombreTitulo;
            this.Codigo = _titulo.Cod;
            this.CodigoBarra = _titulo.CodigoBarra;
            this.Isbn = _titulo.ISBN;
            this.Proveedor = _titulo.ProveedorId;
            this.Autor = _titulo.AutorId;
            this.Editorial = _titulo.EditorialId;
            this.Tema = _titulo.TemaId;
            this.SubTema = _titulo.SubtemaId;
            this.PrecioVenta = _titulo.PrecioVentaTitulo;
            this.PrecioCompra = _titulo.PrecioCompraTitulo;
            this.Comentario = _titulo.Comentario;

            //Si el titulo tiene stock, no se debe permitir cambiar el proveedor
            //var stock = Uow.TitulosStock.Listado().Where(ts => ts.TituloId == tituloId).FirstOrDefault();
            //if (stock.StkCn > 0 || stock.StkPr > 0)
            //{
            //    CbxProveedor.Enabled = false;
            //    tituloId = default(Guid);
            //}
        }
        private void BtnSeleccionar_Click(object sender, EventArgs e)
        {
            //controlo que tenga algun ìtem seleccionado de la grilla
            var selectedRow = this.GridTitulos.SelectedRows.FirstOrDefault();
            if (selectedRow == null)
                return;

            //validacion cachorra. despues mejorar con los dto y toda la gilada
            decimal pVenta;
            if (TxtPrecioVenta.Text != "")
                pVenta = Convert.ToDecimal(TxtPrecioVenta.Text);
            else
            {
                pVenta = 0;
            }

            decimal pCompra;
            if (TxtPrecioCompra.Text != "")
                pCompra = Convert.ToDecimal(TxtPrecioCompra.Text);
            else
            {
                pCompra = 0;
            }

            if (pVenta < pCompra)
            {
                _messageBoxDisplayService.ShowError("El precio de venta no puede ser menor al precio de compra.");
                return;
            }

            //controlo que el titulo ya lo tenga el proveedor/si no lo tiene, agrego el titulo al proveedor
            var proveedorActual = Uow.Proveedores.Obtener(p => p.Id == _proveedorId);
            var codigoProveedor = proveedorActual.Cuenta;

            var tituloActual = Uow.Titulos.Obtener(t => t.Id == Id);
            var nuevoCod = codigoProveedor.ToString().PadLeft(4, '0').Substring(0, 4) + tituloActual.Cod.Substring(4);

            var tituloCheck = Uow.Titulos.Obtener(t => t.Cod == nuevoCod);

            if (tituloCheck == null)
            {
                var tituloProv = Uow.Titulos.Obtener(t => t.Id == Id);
                var libroNew = new Titulo();
                libroNew.Id = Guid.NewGuid();
                _idLibro = libroNew.Id;
                _codLibro = nuevoCod;
                libroNew.Cod = nuevoCod;
                libroNew.ISBN = tituloProv.ISBN;
                libroNew.NombreTitulo = tituloProv.NombreTitulo;
                libroNew.ProveedorId = _proveedorId;
                libroNew.AutorId = tituloProv.AutorId;
                libroNew.EditorialId = tituloProv.EditorialId;
                libroNew.TemaId = tituloProv.TemaId;
                libroNew.SubtemaId = tituloProv.SubtemaId;
                libroNew.PrecioVentaTitulo = PrecioVenta;
                libroNew.PrecioCompraTitulo = PrecioBase;
                libroNew.CodigoBarra = tituloProv.CodigoBarra;
                libroNew.ISBNg = tituloProv.ISBNg;
                libroNew.FechaAltaTitulo = tituloProv.FechaAltaTitulo;
                libroNew.TipoArticuloId = tituloProv.TipoArticuloId;
                libroNew.ModoStockId = tituloProv.ModoStockId;
                libroNew.TipoTituloId = tituloProv.TipoTituloId;
                libroNew.UnidadesId = tituloProv.UnidadesId;
                libroNew.TomosTitulosId = tituloProv.TomosTitulosId;
                libroNew.EstadoTituloId = tituloProv.EstadoTituloId;
                libroNew.AdicionalId = tituloProv.AdicionalId;
                libroNew.PesoTitulo = tituloProv.PesoTitulo;
                libroNew.PaisId = tituloProv.PaisId;
                libroNew.FechaEdicion = tituloProv.FechaEdicion;
                libroNew.IdiomaId = tituloProv.IdiomaId;
                libroNew.PartesId = tituloProv.PartesId;
                libroNew.Paginas = tituloProv.Paginas;
                libroNew.Encuad = tituloProv.Encuad;
                libroNew.Comentario = tituloProv.Comentario;
                libroNew.StkMin = tituloProv.StkMin;
                libroNew.FUltVta = tituloProv.FUltVta;
                libroNew.Fingreso = _clock.Now;
                libroNew.nControl = tituloProv.nControl;
                libroNew.UbicacionId = null;
                libroNew.PresentacionId = tituloProv.PresentacionId;
                libroNew.FechaAlta = _clock.Now;
                libroNew.SucursalAltaId = Context.SucursalActual.Id;
                libroNew.OperadorAltaId = Context.OperadorActual.Id;
                libroNew.FechaModificacion = _clock.Now;
                libroNew.SucursalModificacionId = Context.SucursalActual.Id;
                libroNew.OperadorModificacionId = Context.OperadorActual.Id;
                libroNew.Activo = true;
                Uow.Titulos.Agregar(libroNew);

                var tituloStockNew = new TituloStock();
                tituloStockNew.TituloId = libroNew.Id;
                tituloStockNew.SucursalId = Context.SucursalActual.Id;
                tituloStockNew.StkCn = 0;
                tituloStockNew.StkPr = 0;
                tituloStockNew.FechaAlta = _clock.Now;
                tituloStockNew.SucursalAltaId = Context.SucursalActual.Id;
                tituloStockNew.OperadorAltaId = Context.OperadorActual.Id;
                tituloStockNew.FechaModificacion = _clock.Now;
                tituloStockNew.SucursalModificacionId = Context.SucursalActual.Id;
                tituloStockNew.OperadorModificacionId = Context.OperadorActual.Id;
                Uow.TitulosStock.Agregar(tituloStockNew);
                Uow.Commit();
            }
            else
            {
                _idLibro = tituloCheck.Id;
                _codLibro = tituloCheck.Cod;
            }

            //mandar libro
            CompraTitulo titulo = ObtenerTitulo();

            //Validar cambios de precios
            if (TitulosValidator.SolicitarAutorizacionPorCambioDePrecios(titulo.MapToTitulo()))
            {
                var operador = this.ObtenerOperadorAdministrador();

                if (operador == null)
                    return;
            }

            var esValido = this.ValidarForm();

            if ((esValido))
            {
                OnTituloAgregado(titulo);

                //modifico el precio de toodos los proveedores
                ActualizarPrecioTitulo(titulo);
            }
            else
            {
                this.DialogResult = DialogResult.None;
            }
        }
        private void CargarTitulo(Guid _Tituloid)
        {
            var titulo = new  Titulo();
            if (_formMode == ActionFormMode.Create)
                titulo = Uow.Titulos.Obtener(t => t.Id == _Tituloid);
            else
                titulo = Uow.Titulos.Obtener(t => t.Id == _proveedorId);
            
            if (titulo!=null)
            {
                 //UcFiltrosLibros.Spinner.Show();

                int pageTotal = 0;

                var codigoProveedor = UcFiltrosLibros.CodigoProveedor;
                var codigoLibroCompleto = titulo.Cod;// Uow.Titulos.Obtener(t => t.Id == _proveedorId).Cod;
                var isbn = UcFiltrosLibros.ISBN;
                var nombreTitulo = UcFiltrosLibros.NombreTitulo;
                var proveedorId = UcFiltrosLibros.ProveedorId;
                var temaId = UcFiltrosLibros.TemaId;
                var autorNombre = UcFiltrosLibros.AutorNombre;
                var editorialId = UcFiltrosLibros.EditorialId;
                var conStock = UcFiltrosLibros.ConStock;
                var sucursalId = this.Context.SucursalActual.Id;
                var conOchoDeMarzo = UcFiltrosLibros.OchoDeMarzo;
                string codigoBarra = UcFiltrosLibros.CodigoBarra;
                var activos = UcFiltrosLibros.Activos;

                var titulos = _tituloNegocio.Listado(SortColumn, SortDirection, codigoProveedor, codigoLibroCompleto, isbn,
                                                     codigoBarra, nombreTitulo, proveedorId, temaId,
                                                     autorNombre, editorialId, conStock, sucursalId, conOchoDeMarzo,
                                                     activos, TitulosPager.CurrentPage,
                                                     TitulosPager.PageSize,
                                                     out pageTotal);

                GridTitulos.DataSource = titulos;

                TitulosPager.UpdateState(pageTotal);

                //Spinner.Hide();
            }
           
        }