private void BtnGuardar_Click(object sender, EventArgs e)
        {

            if (_proveedor == null)
            {
                return;
            }
            if (!ucTitulosCompra.Titulos.Any())
            {
                _messageBoxDisplayService.ShowError("Debe seleccionar al menos un libro para la compra.");
                return;
            }

            if (!ucTotalesCompraSeña1.Validar())
            {
                return;
            }

            if (ucTipoCompra.TipoComprobanteSeleccionado== Entidades.Enums.TipoComprobanteEnum.FacCpraContado)
            {
                if(TxtRemito1.Text==""||TxtRemito2.Text==""||TxtFactura1.Text==""||TxtFactura2.Text=="")
                    return;
            }

            if (ucTipoCompra.TipoComprobanteSeleccionado == Entidades.Enums.TipoComprobanteEnum.FacCpraCtaCte)
            {
                if (TxtRemito1.Text == "" || TxtRemito2.Text == "" || TxtFactura1.Text == "" || TxtFactura2.Text == "" || ucCuentaCorrienteCompra.Cuotas == null)
                    return;
            }

            if (ucTipoCompra.TipoComprobanteSeleccionado == Entidades.Enums.TipoComprobanteEnum.RemitosConsignacProveedor)
            {
                  if (TxtRemito1.Text == "" || TxtRemito2.Text == "" || DtpFechaVencimiento.Value.Date<_clock.Now.Date)
                      return;
            }

            //Acumulamos los pagos
            decimal? efectivo = 0;
            decimal? efectivoCajaAnterior = 0;
            decimal? tarjeta = 0;
            decimal? cheque = 0;
            decimal? deposito = 0;
            decimal? transferencia = 0;

            foreach (var pago in ucTotalesCompraSeña1.Pagos)
            {
                switch (pago.TipoPago)
                {
                    case FormaPago.Efectivo:
                        efectivo += pago.Importe;
                        break;

                    case FormaPago.EfectivoCajaAnterior:
                        efectivoCajaAnterior += pago.Importe;
                        break;

                    case FormaPago.Tarjeta:
                        tarjeta += pago.Importe;
                        break;

                    case FormaPago.Cheque:
                        cheque += pago.Importe;
                        //Guardar una cajaMovimiento por cada cheque con la fecha de cobro como fecha de alta
                        //var cajaMovimiento = new CajaMovimiento();
                        //cajaMovimiento.Id = Guid.NewGuid();
                        //cajaMovimiento.CajaId = Context.CajaActual.Id;
                        //cajaMovimiento.TipoMovimientoCajaId = TipoMovimientoCajaEnum.PagoProveedorCajaAnterior;
                        //cajaMovimiento.TipoComprobante = ucTipoCompra.TipoComprobanteSeleccionado;
                        //cajaMovimiento.ComprobanteId = _idCompra;
                        //cajaMovimiento.Importe = pago.Importe;
                        //cajaMovimiento.ImpFac = pago.Importe;
                        //cajaMovimiento.Cheque = pago.Importe;
                        //VentaPagoCheque vcheque = (VentaPagoCheque)pago;
                        //cajaMovimiento.FechaAlta = vcheque.FechaCobro;
                        //cajaMovimiento.OperadorAltaId = Context.OperadorActual.Id;
                        //cajaMovimiento.SucursalAltaId = Context.SucursalActual.Id;

                        //Uow.CajaMovimientos.Agregar(cajaMovimiento);
                        break;

                    case FormaPago.Deposito:
                        deposito += pago.Importe;
                        break;

                    case FormaPago.Transferencia:
                        transferencia += pago.Importe;
                        break;
                }
            }


            //Pedimos autorización para caja anterior
            if (efectivoCajaAnterior > 0)
            {
                Guid operadorAutoriza = Guid.Empty;

                //////Autorizacion para sin movimiento
                var operador = this.ObtenerOperadorAdministrador();

                if (operador == null)
                {
                    return;
                }

                if (!this.EsOperadorAdmin)
                {
                    //Guardamos el operador que autorizo la operacion.
                    operadorAutoriza = operador.Id;
                }
            }

            //Compras
            Guid _idCompra = Guid.NewGuid();
            string _lcn = "";
            PuntoVenta = Context.SucursalActual.SucursalNumero ?? 1;
            Compra compraNueva = new Compra();

            switch (ucTipoCompra.TipoComprobanteSeleccionado)
            {
                case Entidades.Enums.TipoComprobanteEnum.FacCpraContado:
                    EstadoCompra = 1;
                    break;

                case Entidades.Enums.TipoComprobanteEnum.FacCpraCtaCte:
                    EstadoCompra = 1;
                    break;

                case Entidades.Enums.TipoComprobanteEnum.RemitosConsignacProveedor:
                    compraNueva.FechaVencimiento = DtpFechaVencimiento.Value;
                    NumeroComprobante = (Convert.ToInt32(TxtRemito2.Text)).ToString();

                    LetraComprobante = "X";
                    EstadoCompra = 1;
                    break;

                case Entidades.Enums.TipoComprobanteEnum.IngresosProducción:
                    NumeroComprobante = (Convert.ToInt16(TxtRemito2.Text)).ToString();
                    DdlFacturaTipo.Enabled = true;
                    DdlFacturaTipo.Visible = true;
                    LetraComprobante = "X";
                    EstadoCompra = 1;
                    break;

                case Entidades.Enums.TipoComprobanteEnum.RemitosAnulacConsigVend:
                    EstadoCompra = 2;
                    break;
            }

            //controlo cuantos ceros me faltan para armar el lcn y los agrego en la variable ceros
            string _ceros = "";
            for (int i = 0; i < (13 - (NumeroComprobante.Count() + 3 + PuntoVenta.ToString().Count())); i++)
            {
                _ceros += "0";
            }

            _lcn += LetraComprobante + PuntoVenta.ToString().PadLeft(3,'0')+ _ceros + NumeroComprobante;
            NumeroComprobante = TxtRemito1.Text + TxtRemito2.Text;

            //compraNueva.
            compraNueva.Id = _idCompra;
            compraNueva.LCN = _lcn;
            compraNueva.TipoComprobanteId = ucTipoCompra.TipoComprobanteSeleccionado;
            compraNueva.ProveedorId = _proveedor.Id;
            compraNueva.LetraComprobante = LetraComprobante;
            compraNueva.PuntoVenta = PuntoVenta;
            compraNueva.NumeroComprobante = NumeroComprobante;
            compraNueva.FechaComprobante = DtpFechaEmision.Value;
            compraNueva.Concepto = ucTipoCompra.TipoComprobanteSeleccionado.ToString();
            compraNueva.ImporteNeto = ucTitulosCompra.CalcularSubTotal();
            compraNueva.Observaciones = Observaciones;
            compraNueva.EstadoCompraId = EstadoCompra;
            compraNueva.OperadorAltaId = (Context.OperadorActual.Id);
            compraNueva.SucursalAltaId = Context.SucursalActual.Id;
            compraNueva.FechaAlta = _clock.Now;
            Uow.Compras.Agregar(compraNueva);

            //FacturaCompra.
            FacturasCompra facturaCompra = new FacturasCompra();
            facturaCompra.Id = Guid.NewGuid();
            facturaCompra.CompraId = _idCompra;
            facturaCompra.TipoComprobante = ucTipoCompra.TipoComprobanteSeleccionado;
            facturaCompra.ProveedorId = _proveedor.Id;
            facturaCompra.LCN = _lcn;
            facturaCompra.PuntoVenta = PuntoVenta;
            facturaCompra.NumeroComprobante = NumeroComprobante;
            facturaCompra.Concepto = ucTipoCompra.TipoComprobanteSeleccionado.ToString();
            facturaCompra.FechaComprobante = _clock.Now;
            if (ucTipoCompra.TipoComprobanteSeleccionado == Entidades.Enums.TipoComprobanteEnum.FacCpraConsigCliente)
                facturaCompra.FechaVencimiento = DtpFechaEmision.Value;
            facturaCompra.ImporteNeto = ucTotalesCompraSeña1.SubTotal;
            facturaCompra.ImporteIVA = ucTotalesCompraSeña1.SubTotal;
            facturaCompra.EstadoId = 0;
            facturaCompra.FechaAlta = _clock.Now;
            facturaCompra.SucursalAltaId = Context.SucursalActual.Id;
            facturaCompra.OperadorAltaId = Context.OperadorActual.Id;
            Uow.FacturasCompras.Agregar(facturaCompra);

            //Remito
            if (ucTipoCompra.TipoComprobanteSeleccionado == Entidades.Enums.TipoComprobanteEnum.FacCpraContado || 
                ucTipoCompra.TipoComprobanteSeleccionado == Entidades.Enums.TipoComprobanteEnum.FacCpraCtaCte ||
                ucTipoCompra.TipoComprobanteSeleccionado == Entidades.Enums.TipoComprobanteEnum.FacCpraConsigCliente)
            {
            RemitosCompra remitoCompra = new RemitosCompra();
            remitoCompra.Id = Guid.NewGuid();
            _remitoID = remitoCompra.Id;
            remitoCompra.CompraId = _idCompra;
            //remitoCompra.TipoComprobante = ucTipoCompra.TipoComprobanteSeleccionado;
            remitoCompra.ProveedorId = _proveedor.Id;
            remitoCompra.LCN = _lcn;
            remitoCompra.PuntoVenta = PuntoVenta;
            remitoCompra.NumeroComprobante = NumeroComprobante;
            remitoCompra.Concepto = ucTipoCompra.TipoComprobanteSeleccionado.ToString();
            remitoCompra.FechaComprobante = DtpFechaEmision.Value;
            if (ucTipoCompra.TipoComprobanteSeleccionado == Entidades.Enums.TipoComprobanteEnum.FacCpraConsigCliente)
                remitoCompra.FechaVencimiento = DtpFechaVencimiento.Value;
            remitoCompra.ImporteNeto = ucTotalesCompraSeña1.SubTotal;
            remitoCompra.ImporteIVA = ucTotalesCompraSeña1.SubTotal;
            remitoCompra.Observaciones = Observaciones;
            remitoCompra.EstadoId = EstadoCompra;
            remitoCompra.FechaAlta = _clock.Now;
            remitoCompra.SucursalAltaId = Context.SucursalActual.Id;
            remitoCompra.OperadorAltaId = Context.SucursalActual.OperadorAltaId;
            Uow.RemitosCompra.Agregar(remitoCompra);
            }
           
            
            //TitulosStock. & Compra detalle
            foreach (var titulo in ucTitulosCompra.Titulos)
            {
                var tituloStock =
                Uow.TitulosStock.Obtener(ts => ts.TituloId == titulo.TituloId && ts.SucursalId == Context.SucursalActual.Id);

                //Compra detalle
                ComprasDetalle compraDetalle = new ComprasDetalle();
                compraDetalle.CompraId = _idCompra;
                compraDetalle.Id = Guid.NewGuid();
                compraDetalle.TituloId = titulo.TituloId;
                if (ucTipoCompra.TipoComprobanteSeleccionado == Entidades.Enums.TipoComprobanteEnum.RemitosConsignacProveedor)
                {
                    compraDetalle.CntCn = titulo.CantidadCompra;
                    compraDetalle.CntPr = 0;
                }
                else
                {
                    compraDetalle.CntPr = titulo.CantidadCompra;
                    compraDetalle.CntCn = 0;
                }
                compraDetalle.PrecioCompra = titulo.PrecioBase;
                compraDetalle.PrecioVenta = titulo.PrecioVenta;
                compraDetalle.FechaAlta = _clock.Now;
                compraDetalle.SucursalAltaId = Context.SucursalActual.Id;
                compraDetalle.OperadorAltaId = Context.OperadorActual.Id;
                compraDetalle.FechaModificacion = _clock.Now;
                compraDetalle.SucursalModificacionId = Context.SucursalActual.Id;
                compraDetalle.OperadorModificacionId = Context.OperadorActual.Id;
                Uow.ComprasDetalles.Agregar(compraDetalle);

                //Aumentar stock
                //deacuerdo al tipo de compra modificar el stock propio o en consigancion
                if (tituloStock == null)
                {
                    TituloStock tituloStockNuevo = new TituloStock();
                    tituloStockNuevo.TituloId = titulo.TituloId;
                    tituloStockNuevo.SucursalId = Context.SucursalActual.Id;
                    if (ucTipoCompra.TipoComprobanteSeleccionado == Entidades.Enums.TipoComprobanteEnum.RemitosConsignacProveedor)
                    {
                        tituloStockNuevo.StkPr = 0;
                        tituloStockNuevo.StkCn = titulo.CantidadCompra;
                    }
                    else
                    {
                        tituloStockNuevo.StkPr = titulo.CantidadCompra;
                        tituloStockNuevo.StkCn = 0;
                    }

                    tituloStockNuevo.FechaAlta = _clock.Now;
                    tituloStockNuevo.OperadorAltaId = (Context.OperadorActual.Id);
                    tituloStockNuevo.SucursalAltaId = Context.SucursalActual.Id;
                    Uow.TitulosStock.Agregar(tituloStockNuevo);
                }
                else
                {
                    //Aumento el stock propio o consignado de acuerdo a la opcion seleccionada.
                    if (ucTipoCompra.TipoComprobanteSeleccionado == Entidades.Enums.TipoComprobanteEnum.RemitosConsignacProveedor)
                    {
                        if (tituloStock.StkCn == null)
                            tituloStock.StkCn = titulo.CantidadCompra;
                        else
                            tituloStock.StkCn += titulo.CantidadCompra;
                    }
                    else
                        if (tituloStock.StkPr == null)
                            tituloStock.StkPr = titulo.CantidadCompra;
                        else
                            tituloStock.StkPr += titulo.CantidadCompra;

                    tituloStock.FechaModificacion = _clock.Now;
                    tituloStock.OperadorModificacionId = (Context.OperadorActual.Id);
                    tituloStock.SucursalModificacionId = Context.SucursalActual.Id;
                    Uow.TitulosStock.Modificar(tituloStock);
                }

                //FacturasCompraDetalle.
                FacturasComprasDetalle facturasComprasDetalle = new FacturasComprasDetalle();
                facturasComprasDetalle.Id = Guid.NewGuid();
                facturasComprasDetalle.FacturaCompraId = facturaCompra.Id;
                facturasComprasDetalle.TituloId = titulo.TituloId;

                if (ucTipoCompra.TipoComprobanteSeleccionado == Entidades.Enums.TipoComprobanteEnum.RemitosConsignacProveedor)
                {
                    facturasComprasDetalle.CntCn = titulo.CantidadCompra;
                    facturasComprasDetalle.CntPr = 0;
                }
                else
                {
                    facturasComprasDetalle.CntPr = titulo.CantidadCompra;
                    facturasComprasDetalle.CntCn = 0;
                }

                facturasComprasDetalle.PrecioCompra = titulo.PrecioBase;
                facturasComprasDetalle.PrecioVenta = titulo.PrecioVenta;
                facturasComprasDetalle.FechaAlta = _clock.Now;
                facturasComprasDetalle.SucursalAltaId = Context.SucursalActual.Id;
                facturasComprasDetalle.OperadorAltaId = (Context.OperadorActual.Id);
                
                Uow.FacturasComprasDetalles.Agregar(facturasComprasDetalle);

                if (ucTipoCompra.TipoComprobanteSeleccionado == Entidades.Enums.TipoComprobanteEnum.RemitosConsignacProveedor)
                {
                    //(TitulosConsiganciones).
                    TitulosConsignacion tituloConsignacion = new TitulosConsignacion();
                    tituloConsignacion.Id = Guid.NewGuid();
                    tituloConsignacion.TituloId = titulo.TituloId;
                    tituloConsignacion.ClienteId = Guid.Empty;
                    tituloConsignacion.ProveedorId = _proveedor.Id;
                    tituloConsignacion.TipoConsignacion = _tipoConsignacion;
                    tituloConsignacion.CntPr = 0;
                    tituloConsignacion.CntCn = titulo.CantidadCompra.GetValueOrDefault();
                    tituloConsignacion.CntVn = 0;
                    tituloConsignacion.FechaAlta = _clock.Now;
                    tituloConsignacion.SucursalAltaId = Context.SucursalActual.Id;
                    tituloConsignacion.OperadorAltaId = Context.OperadorActual.Id;
                    
                    Uow.TitulosConsignaciones.Agregar(tituloConsignacion);
                }
                //Remito Detalle
                if (ucTipoCompra.TipoComprobanteSeleccionado == Entidades.Enums.TipoComprobanteEnum.FacCpraContado || 
                    ucTipoCompra.TipoComprobanteSeleccionado == Entidades.Enums.TipoComprobanteEnum.FacCpraCtaCte ||
                    ucTipoCompra.TipoComprobanteSeleccionado == Entidades.Enums.TipoComprobanteEnum.FacCpraConsigCliente)
                {
                    RemitosCompraDetalle remitoCompraDetalle = new RemitosCompraDetalle();
                    remitoCompraDetalle.Id = Guid.NewGuid();
                    remitoCompraDetalle.RemitoCompraId = _remitoID;
                    remitoCompraDetalle.TituloId = titulo.TituloId;
                    if (ucTipoCompra.TipoComprobanteSeleccionado == Entidades.Enums.TipoComprobanteEnum.FacCpraConsigCliente)
                        remitoCompraDetalle.CntCn = titulo.CantidadCompra;
                    else
                        remitoCompraDetalle.CntPr = titulo.CantidadCompra;
                    remitoCompraDetalle.PrecioCompra = titulo.PrecioBase;
                    remitoCompraDetalle.PrecioVenta = titulo.PrecioVenta;
                    remitoCompraDetalle.FechaAlta = _clock.Now;
                    remitoCompraDetalle.SucursalAltaId = Context.SucursalActual.Id;
                    remitoCompraDetalle.OperadorAltaId = Context.OperadorActual.Id;
                    Uow.RemitosCompraDetalle.Agregar(remitoCompraDetalle);
                }
            }

            //Cuenta corriente
            if (ucTipoCompra.TipoComprobanteSeleccionado == Entidades.Enums.TipoComprobanteEnum.FacCpraCtaCte)
            {
                //Guardo toda la cuenta corriente
                var cuotas = ucCuentaCorrienteCompra.Cuotas;
                for (int i = 1; i <= cuotas; i++)
                {
                    ProveedoresCuentasCorriente proveedoresCuentaCorriente = new ProveedoresCuentasCorriente();
                    proveedoresCuentaCorriente.Id = Guid.NewGuid();
                    proveedoresCuentaCorriente.CompraId = _idCompra;
                    proveedoresCuentaCorriente.ProveedorId = _proveedor.Id;
                    proveedoresCuentaCorriente.Cuota = i;
                    proveedoresCuentaCorriente.Fecha = _clock.Now;
                    DateTime venc = ucCuentaCorrienteCompra.Vencimiento;
                    proveedoresCuentaCorriente.FechaVencimiento = venc.AddMonths(i - 1);
                    proveedoresCuentaCorriente.Importe = Convert.ToDecimal(ucCuentaCorrienteCompra.Montocuota);
                    proveedoresCuentaCorriente.Pagado = 0;
                    proveedoresCuentaCorriente.Observaciones = "";
                    proveedoresCuentaCorriente.FechaAlta = _clock.Now;
                    proveedoresCuentaCorriente.SucursalAltaId = Context.SucursalActual.Id;
                    proveedoresCuentaCorriente.OperadorAltaId = Context.OperadorActual.Id;
                    proveedoresCuentaCorriente.FechaModificacion = _clock.Now;
                    proveedoresCuentaCorriente.SucursalModificacionId = Context.SucursalActual.Id;
                    proveedoresCuentaCorriente.OperadorModificacionId = Context.OperadorActual.Id;
                    Uow.ProveedoresCuentasCorrientes.Agregar(proveedoresCuentaCorriente);
                }
            }

            #region Guardamos caja en contado
            
            //Guardamos la caja
            if (ucTipoCompra.TipoComprobanteSeleccionado == TipoComprobanteEnum.FacCpraContado)
            {
                Caja caja = this.Context.CajaActual;
                
                switch (ucTipoCompra.TipoComprobanteSeleccionado)
                {

                    case TipoComprobanteEnum.FacCpraContado:


                        //descontar de la caja
                        if (caja.Egresos == null)
                            caja.Egresos = 0;

                        caja.Egresos += (float?) efectivo;

                        if (caja.Saldo == null)
                            caja.Saldo = 0;
                        caja.Saldo -= (float?) ucTotalesCompraSeña1.SubTotal;

                        caja.FechaModificacion = _clock.Now;
                        caja.SucursalModificacionId = Context.SucursalActual.Id;
                        caja.OperadorModificacionId = (Context.OperadorActual.Id);

                        //aca descontamos las señas en el caso de que se utilicen. 
                        var _seña = UsoDeSeña();
                        var _credito = UsoDeCredito();
                        var _egreso = UsoEgreso();
                       
                        //Desde aca Controlar
                        if (efectivo > 0 || (_seña+_credito+_egreso) >0)
                        {
                            CajaMovimiento cajaMovimiento = new CajaMovimiento();
                            cajaMovimiento.Id = Guid.NewGuid();
                            cajaMovimiento.CajaId = caja.Id;
                            
                            cajaMovimiento.TipoMovimientoCajaId = TipoMovimientoCajaEnum.PagoProveedores;

                            cajaMovimiento.ComprobanteId = compraNueva.Id;
                            cajaMovimiento.Importe = efectivo;
                            cajaMovimiento.ImpFac = (decimal?)ucTotalesCompraSeña1.SubTotal;
                            cajaMovimiento.Efectivo = efectivo;

                            cajaMovimiento.Senia = _seña + _credito + _egreso ;
                            if (_seña > 0)
                            {
                               // cajaMovimiento.Senia = _seña;
                                _seña = 0;
                            }

                            if (_credito > 0)
                            {
                                //cajaMovimiento.Senia += _credito;
                                _credito = 0;
                            }

                            if (_egreso > 0)
                            {
                                //cajaMovimiento.Senia += _credito;
                                _egreso = 0;
                            }

                            cajaMovimiento.FechaAlta = _clock.Now;

                            cajaMovimiento.PcAlta = System.Environment.MachineName;
                            cajaMovimiento.OperadorAltaId = Context.OperadorActual.Id;
                            cajaMovimiento.SucursalAltaId = Context.SucursalActual.Id;

                            cajaMovimiento.TipoComprobante = TipoComprobanteEnum.FacCpraContado;
                            Uow.CajaMovimientos.Agregar(cajaMovimiento);
                        }

                        if (tarjeta > 0 || deposito > 0 || cheque > 0 || efectivoCajaAnterior > 0 || transferencia > 0)
                        {
                            CajaMovimiento cajaMovimientoAnterior = new CajaMovimiento();
                            cajaMovimientoAnterior.Id = Guid.NewGuid();
                            cajaMovimientoAnterior.CajaId = caja.Id;

                            cajaMovimientoAnterior.TipoMovimientoCajaId =
                                TipoMovimientoCajaEnum.PagoProveedorCajaAnterior;
                            cajaMovimientoAnterior.ComprobanteId = compraNueva.Id;
                            cajaMovimientoAnterior.Importe = tarjeta+deposito+cheque+efectivoCajaAnterior+transferencia;
                            cajaMovimientoAnterior.ImpFac = (decimal?)ucTotalesCompraSeña1.SubTotal;
                            cajaMovimientoAnterior.FechaAlta = _clock.Now;
                            cajaMovimientoAnterior.FechaModificacion = _clock.Now;
                            cajaMovimientoAnterior.PcAlta = System.Environment.MachineName;
                            cajaMovimientoAnterior.OperadorAltaId = Context.OperadorActual.Id;
                            cajaMovimientoAnterior.SucursalAltaId = Context.SucursalActual.Id;
                            cajaMovimientoAnterior.OperadorModificacionId = Context.OperadorActual.Id;
                            cajaMovimientoAnterior.SucursalModificacionId = Context.SucursalActual.Id;
                            cajaMovimientoAnterior.TipoComprobante = TipoComprobanteEnum.FacCpraContado;
                            cajaMovimientoAnterior.Efectivo = efectivoCajaAnterior;
                            cajaMovimientoAnterior.Tarjeta = tarjeta;
                            cajaMovimientoAnterior.Deposito = deposito;
                            cajaMovimientoAnterior.Cheque = cheque;
                            cajaMovimientoAnterior.Transferencia = transferencia;

                            cajaMovimientoAnterior.Senia = _seña + _credito + _egreso;
                          
                            //if (_seña > 0)
                            //{
                            //    cajaMovimientoAnterior.Senia = _seña;
                            //}

                          
                            Uow.CajaMovimientos.Agregar(cajaMovimientoAnterior);

                            //Guardamos el movimiento del depósito
                             foreach (var pago in ucTotalesCompraSeña1.Pagos)
                            {
                                switch (pago.TipoPago)
                                {
                                    case FormaPago.Cheque:
                                       // HACER ALGO
                                        break;

                                    case FormaPago.Deposito:
                                        var pagoDeposito = pago as VentaPagoDeposito;
                                        
                                        CuentasMovimiento cuentasMovimiento = new CuentasMovimiento();
                                        cuentasMovimiento.CuentaId = pagoDeposito.CuentaId ?? 0;
                                        cuentasMovimiento.TipoMovimientoId = 1;//Deposito a proveedor
                                        cuentasMovimiento.FechaMovimiento = pagoDeposito.Fecha;
                                        cuentasMovimiento.EstadoMovimientoCuentaId = 0;
                                        cuentasMovimiento.TipoComprobanteId = ucTipoCompra.TipoComprobanteSeleccionado;
                                        cuentasMovimiento.ComprobanteId = compraNueva.Id;
                                        cuentasMovimiento.MonedaId = 0;
                                        cuentasMovimiento.NroMovimiento = pagoDeposito.Numero;
                                        cuentasMovimiento.Descripcion = "DEPOSITO NRO " + pagoDeposito.Numero.ToString();
                                        cuentasMovimiento.FechaCobro = _clock.Now;
                                        cuentasMovimiento.Debito = pago.Importe;
                                        cuentasMovimiento.Credito = 0;
                                        cuentasMovimiento.TipoCarga = 1;
                                        cuentasMovimiento.CajaId = caja.Id;
                                        cuentasMovimiento.FechaAlta = _clock.Now;
                                        cuentasMovimiento.OperadorAltaId = Context.OperadorActual.Id;
                                        cuentasMovimiento.SucursalAltaId = Context.SucursalActual.Id;

                                        Uow.CuentasMovimientos.Agregar(cuentasMovimiento);
                                        break;

                                    case FormaPago.Transferencia:
                                        var pagoTransferencia = pago as VentaPagoTransferencia;
                                        
                                        CuentasMovimiento cuentasMovimientoTransferecia = new CuentasMovimiento();
                                        cuentasMovimientoTransferecia.CuentaId = pagoTransferencia.CuentaId ?? 0;
                                        cuentasMovimientoTransferecia.TipoMovimientoId = 1;//Deposito a proveedor
                                        cuentasMovimientoTransferecia.FechaMovimiento = pagoTransferencia.Fecha;
                                        cuentasMovimientoTransferecia.EstadoMovimientoCuentaId = 0;
                                        cuentasMovimientoTransferecia.TipoComprobanteId = ucTipoCompra.TipoComprobanteSeleccionado;
                                        cuentasMovimientoTransferecia.ComprobanteId = compraNueva.Id;
                                        cuentasMovimientoTransferecia.MonedaId = 0;
                                        cuentasMovimientoTransferecia.NroMovimiento = pagoTransferencia.Numero;
                                        cuentasMovimientoTransferecia.Descripcion = "TRANSFERENCIA NRO " + pagoTransferencia.Numero.ToString();
                                        cuentasMovimientoTransferecia.FechaCobro = _clock.Now;
                                        cuentasMovimientoTransferecia.Debito = pago.Importe;
                                        cuentasMovimientoTransferecia.Credito = 0;
                                        cuentasMovimientoTransferecia.TipoCarga = 1;
                                        cuentasMovimientoTransferecia.CajaId = caja.Id;
                                        cuentasMovimientoTransferecia.FechaAlta = _clock.Now;
                                        cuentasMovimientoTransferecia.OperadorAltaId = Context.OperadorActual.Id;
                                        cuentasMovimientoTransferecia.SucursalAltaId = Context.SucursalActual.Id;

                                        Uow.CuentasMovimientos.Agregar(cuentasMovimientoTransferecia);
                                        break;
                                }
                            }
                           
                        }
                        break;
                }
                Uow.Cajas.Modificar(caja);
            }
            #endregion

            #region "Guardar cuenta corriente"
            if (ucTipoCompra.TipoComprobanteSeleccionado == TipoComprobanteEnum.FacCpraCtaCte)
            {
                //aca descontamos las señas en el caso de que se utilicen. 
               var _seña =  UsoDeSeña();
               var _credito = UsoDeCredito();
                var _egreso = UsoEgreso();

               Caja caja = this.Context.CajaActual;

               CajaMovimiento cajaMovimiento = new CajaMovimiento();
               cajaMovimiento.Id = Guid.NewGuid();
               cajaMovimiento.CajaId = caja.Id;

               cajaMovimiento.TipoMovimientoCajaId = TipoMovimientoCajaEnum.PagoProveedores;
               cajaMovimiento.TipoComprobante = ucTipoCompra.TipoComprobanteSeleccionado;
               cajaMovimiento.ComprobanteId = compraNueva.Id;

               cajaMovimiento.Senia = _seña + _credito + _egreso;
               cajaMovimiento.ImpFac = (decimal?)ucTotalesCompraSeña1.SubTotal;

               //////////////////////////////////////////////////////////////////////////////
               if (efectivo > 0)
               {
                   cajaMovimiento.Importe = efectivo;
                   cajaMovimiento.Efectivo = efectivo;

                   cajaMovimiento.Senia = _seña + _credito + _egreso;
               }

                  if (tarjeta > 0 || deposito > 0 || cheque > 0 || efectivoCajaAnterior > 0 || transferencia > 0)
                        {
                            CajaMovimiento cajaMovimientoAnterior = new CajaMovimiento();
                            cajaMovimientoAnterior.Id = Guid.NewGuid();
                            cajaMovimientoAnterior.CajaId = caja.Id;

                            cajaMovimientoAnterior.TipoMovimientoCajaId =
                                TipoMovimientoCajaEnum.PagoProveedorCajaAnterior;
                            cajaMovimientoAnterior.ComprobanteId = compraNueva.Id;
                            cajaMovimientoAnterior.Importe = tarjeta+deposito+cheque+efectivoCajaAnterior+transferencia;
                            cajaMovimientoAnterior.ImpFac = (decimal?)ucTotalesCompraSeña1.SubTotal;
                            cajaMovimientoAnterior.FechaAlta = _clock.Now;
                            cajaMovimientoAnterior.FechaModificacion = _clock.Now;
                            cajaMovimientoAnterior.PcAlta = System.Environment.MachineName;
                            cajaMovimientoAnterior.OperadorAltaId = Context.OperadorActual.Id;
                            cajaMovimientoAnterior.SucursalAltaId = Context.SucursalActual.Id;
                            cajaMovimientoAnterior.OperadorModificacionId = Context.OperadorActual.Id;
                            cajaMovimientoAnterior.SucursalModificacionId = Context.SucursalActual.Id;
                            cajaMovimientoAnterior.TipoComprobante = ucTipoCompra.TipoComprobanteSeleccionado; // TipoComprobanteEnum.FacCpraContado;
                            cajaMovimientoAnterior.Efectivo = efectivoCajaAnterior;
                            cajaMovimientoAnterior.Tarjeta = tarjeta;
                            cajaMovimientoAnterior.Deposito = deposito;
                            cajaMovimientoAnterior.Cheque = cheque;
                            cajaMovimientoAnterior.Transferencia = transferencia;

                            cajaMovimientoAnterior.Senia = _seña + _credito + _egreso;
                          
                            //if (_seña > 0)
                            //{
                            //    cajaMovimientoAnterior.Senia = _seña;
                            //}

                          
                            Uow.CajaMovimientos.Agregar(cajaMovimientoAnterior);

                            //Guardamos el movimiento del depósito
                             foreach (var pago in ucTotalesCompraSeña1.Pagos)
                            {
                                switch (pago.TipoPago)
                                {
                                    case FormaPago.Cheque:
                                       // HACER ALGO
                                        break;

                                    case FormaPago.Deposito:
                                        var pagoDeposito = pago as VentaPagoDeposito;
                                        
                                        CuentasMovimiento cuentasMovimiento = new CuentasMovimiento();
                                        cuentasMovimiento.CuentaId = pagoDeposito.CuentaId ?? 0;
                                        cuentasMovimiento.TipoMovimientoId = 1;//Deposito a proveedor
                                        cuentasMovimiento.FechaMovimiento = pagoDeposito.Fecha;
                                        cuentasMovimiento.EstadoMovimientoCuentaId = 0;
                                        cuentasMovimiento.TipoComprobanteId = ucTipoCompra.TipoComprobanteSeleccionado;
                                        cuentasMovimiento.ComprobanteId = compraNueva.Id;
                                        cuentasMovimiento.MonedaId = 0;
                                        cuentasMovimiento.NroMovimiento = pagoDeposito.Numero;
                                        cuentasMovimiento.Descripcion = "DEPOSITO NRO " + pagoDeposito.Numero.ToString();
                                        cuentasMovimiento.FechaCobro = _clock.Now;
                                        cuentasMovimiento.Debito = pago.Importe;
                                        cuentasMovimiento.Credito = 0;
                                        cuentasMovimiento.TipoCarga = 1;
                                        cuentasMovimiento.CajaId = caja.Id;
                                        cuentasMovimiento.FechaAlta = _clock.Now;
                                        cuentasMovimiento.OperadorAltaId = Context.OperadorActual.Id;
                                        cuentasMovimiento.SucursalAltaId = Context.SucursalActual.Id;

                                        Uow.CuentasMovimientos.Agregar(cuentasMovimiento);
                                        break;

                                    case FormaPago.Transferencia:
                                        var pagoTransferencia = pago as VentaPagoTransferencia;
                                        
                                        CuentasMovimiento cuentasMovimientoTransferecia = new CuentasMovimiento();
                                        cuentasMovimientoTransferecia.CuentaId = pagoTransferencia.CuentaId ?? 0;
                                        cuentasMovimientoTransferecia.TipoMovimientoId = 1;//Deposito a proveedor
                                        cuentasMovimientoTransferecia.FechaMovimiento = pagoTransferencia.Fecha;
                                        cuentasMovimientoTransferecia.EstadoMovimientoCuentaId = 0;
                                        cuentasMovimientoTransferecia.TipoComprobanteId = ucTipoCompra.TipoComprobanteSeleccionado;
                                        cuentasMovimientoTransferecia.ComprobanteId = compraNueva.Id;
                                        cuentasMovimientoTransferecia.MonedaId = 0;
                                        cuentasMovimientoTransferecia.NroMovimiento = pagoTransferencia.Numero;
                                        cuentasMovimientoTransferecia.Descripcion = "TRANSFERENCIA NRO " + pagoTransferencia.Numero.ToString();
                                        cuentasMovimientoTransferecia.FechaCobro = _clock.Now;
                                        cuentasMovimientoTransferecia.Debito = pago.Importe;
                                        cuentasMovimientoTransferecia.Credito = 0;
                                        cuentasMovimientoTransferecia.TipoCarga = 1;
                                        cuentasMovimientoTransferecia.CajaId = caja.Id;
                                        cuentasMovimientoTransferecia.FechaAlta = _clock.Now;
                                        cuentasMovimientoTransferecia.OperadorAltaId = Context.OperadorActual.Id;
                                        cuentasMovimientoTransferecia.SucursalAltaId = Context.SucursalActual.Id;

                                        Uow.CuentasMovimientos.Agregar(cuentasMovimientoTransferecia);
                                        break;
                                }
                            }
                           
                        }

                //////////////////////////////////////////////////////////////////////////////

               cajaMovimiento.PcAlta = System.Environment.MachineName;
               cajaMovimiento.FechaAlta = _clock.Now;
               cajaMovimiento.OperadorAltaId = Context.OperadorActual.Id;
               cajaMovimiento.SucursalAltaId = Context.SucursalActual.Id;
               Uow.CajaMovimientos.Agregar(cajaMovimiento);
            }
            #endregion

            Uow.Commit();

            _messageBoxDisplayService.ShowSuccess(Resources.MessageSuccessCompraExitosa);

            OnCompraRealizada();
        }
        private void MigracionStockFuturoJournal(bool propio, Guid? proveedorId)
        {
            _tituloseleccionado = (TituloDto)GridTitulos.CurrentRow.DataBoundItem;
            var tituloStock = Uow.TitulosStock.Obtener(t => t.TituloId == _tituloseleccionado.Id && t.SucursalId == Context.SucursalActual.Id);
            var migracionTituloStock = _migracionRepo.Obtener(t => t.TituloId == _tituloseleccionado.Id && t.SucursalId == Context.SucursalActual.Id);
            //LAPAZ
            Guid? _idProveedor = proveedorId;

            var provFuturoOJournal = Uow.Proveedores.Obtener(p => p.Id == _idProveedor);

            //si el titulo stock no existe lo doy de alta
            if (tituloStock == null)
            {
                tituloStock = new TituloStock();
                tituloStock.TituloId = _tituloseleccionado.Id;
                tituloStock.SucursalId = Context.SucursalActual.Id;
                tituloStock.StkCn = 0;
                tituloStock.StkPr = 0;
                tituloStock.FechaAlta = _clock.Now;
                tituloStock.SucursalAltaId = Context.SucursalActual.Id;
                tituloStock.OperadorAltaId = Context.OperadorActual.Id;
                Uow.TitulosStock.Agregar(tituloStock);
                Uow.Commit();

                tituloStock = Uow.TitulosStock.Obtener(t => t.TituloId == _tituloseleccionado.Id && t.SucursalId == Context.SucursalActual.Id);
            }
            DateTime fechaCompra = DateTime.Parse("2015-01-01");
            var compraLists = Uow.Compras.Listado().Where(p => p.ProveedorId == provFuturoOJournal.Id && p.FechaAlta > fechaCompra).OrderBy(p => p.FechaAlta).ToList();

            Compra compraList;
            if (compraLists.Count > 0)
                compraList = compraLists.First();
            else
                compraList = null;

            var compras = new Compra();
            if (compraList == null)
            {
                compras = new Compra();
                compras.Id = Guid.NewGuid();
                compras.LCN = "0000000000000";
                compras.TipoComprobanteId = TipoComprobanteEnum.RemitosConsignacProveedor;
                compras.ProveedorId = provFuturoOJournal.Id;
                compras.LetraComprobante = "X";
                compras.PuntoVenta = Context.SucursalActual.Id;
                compras.NumeroComprobante = "0000000000000";
                compras.FechaComprobante = _clock.Now;
                compras.Concepto = "REMITO POR CONSIGNACION PROVEEDOR";
                compras.ImporteNeto = 0;
                compras.ImporteIVA = 0;
                compras.EstadoCompraId = 1;
                compras.OperadorAltaId = Context.OperadorActual.Id;
                compras.SucursalAltaId = Context.SucursalActual.Id;
                compras.FechaAlta = _clock.Now;

                Uow.Compras.Agregar(compras);
            }
            else
            {
                //compraList = Uow.Compras.Listado().Where(p => p.ProveedorId == provFuturoOJournal.Id).OrderBy(p => p.FechaAlta).First();
                compras = Uow.Compras.Obtener(c => c.Id == compraList.Id);
            }

            var compraDetalle = new ComprasDetalle();
            compraDetalle.Id = Guid.NewGuid();
            compraDetalle.CompraId = compras.Id;
            compraDetalle.TituloId = _tituloseleccionado.Id;
            compraDetalle.PrecioCompra = 0;
            compraDetalle.FechaAlta = _clock.Now;
            compraDetalle.SucursalAltaId = Context.SucursalActual.Id;
            compraDetalle.OperadorAltaId = Context.OperadorActual.Id;
            compraDetalle.FechaModificacion = _clock.Now;
            compraDetalle.SucursalModificacionId = Context.SucursalActual.Id;
            compraDetalle.OperadorModificacionId = Context.OperadorActual.Id;




            //Si propio es true descontamos e incrementamos los propios, si no consignados
            if (propio)
            {
                //Descuento 1 libro
                migracionTituloStock.StkPr -= 1;
                tituloStock.StkPr += 1;

                //Modifico las propiedades
                CantidadPropia = tituloStock.StkPr;
                MigracionCantidadPropia = migracionTituloStock.StkPr;

                //Agrego en compra detalle
                compraDetalle.CntPr = 1;

                //Comiteo los cambios a la base
                _migracionRepo.Modificar(migracionTituloStock);
                _migracionRepo.Commit();


            }
            else
            {
                //Descuento 1 libro
                migracionTituloStock.StkCn -= 1;
                tituloStock.StkCn += 1;


                //Modifico las propiedades
                CantidadConsignada = tituloStock.StkCn;
                MigracionCantidadConsignada = migracionTituloStock.StkCn;

                //Agrego en compra detalle
                compraDetalle.CntCn = 1;


                //Agrego la consignacion
                TitulosConsignacion consignacion = new TitulosConsignacion();
                consignacion.Id = Guid.NewGuid();
                consignacion.TituloId = _tituloseleccionado.Id;
                consignacion.ClienteId = Guid.Empty;
                consignacion.ProveedorId = provFuturoOJournal.Id;
                consignacion.TipoConsignacion = 1;
                consignacion.CntPr = 0;
                consignacion.CntCn = 1;
                consignacion.CntVn = 0;
                consignacion.FechaAlta = _clock.Now;
                consignacion.SucursalAltaId = Context.SucursalActual.Id;
                consignacion.OperadorAltaId = Context.OperadorActual.Id;
                Uow.TitulosConsignaciones.Agregar(consignacion);

                //Comiteo los cambios a la base
                _migracionRepo.Modificar(migracionTituloStock);
                _migracionRepo.Commit();

            }
            tituloStock.FechaModificacion = _clock.Now;
            tituloStock.OperadorModificacionId = Context.OperadorActual.Id;

            Uow.ComprasDetalles.Agregar(compraDetalle);
            Uow.TitulosStock.Modificar(tituloStock);
            Uow.Commit();
        }