public int RegistrarNotaSalidaAlmacen(RegistrarNotaSalidaAlmacenRequestDTO request)
        {
            NotaSalidaAlmacen notaSalidaAlmacen = new NotaSalidaAlmacen();
            List <NotaSalidaAlmacenDetalle> lstnotaSalidaAlmacen = new List <NotaSalidaAlmacenDetalle>();
            int affected = 0;

            List <TablaIdsTipo> loteIdActualizar = new List <TablaIdsTipo>();

            notaSalidaAlmacen.EmpresaId                = request.EmpresaId;
            notaSalidaAlmacen.AlmacenId                = request.AlmacenId;
            notaSalidaAlmacen.Numero                   = _ICorrelativoRepository.Obtener(request.EmpresaId, Documentos.NotaSalidaAlmacen);
            notaSalidaAlmacen.MotivoTrasladoId         = request.MotivoTrasladoId;
            notaSalidaAlmacen.MotivoTrasladoReferencia = request.MotivoTrasladoReferencia;
            notaSalidaAlmacen.EmpresaIdDestino         = request.EmpresaIdDestino;
            notaSalidaAlmacen.EmpresaTransporteId      = request.EmpresaTransporteId;
            notaSalidaAlmacen.TransporteId             = request.TransporteId;
            notaSalidaAlmacen.NumeroConstanciaMTC      = request.NumeroConstanciaMTC;
            notaSalidaAlmacen.MarcaTractorId           = request.MarcaTractorId;
            notaSalidaAlmacen.PlacaTractor             = request.PlacaTractor;
            notaSalidaAlmacen.MarcaCarretaId           = request.MarcaCarretaId;
            notaSalidaAlmacen.PlacaCarreta             = request.PlacaCarreta;
            notaSalidaAlmacen.Conductor                = request.Conductor;
            notaSalidaAlmacen.Licencia                 = request.Licencia;
            notaSalidaAlmacen.Observacion              = request.Observacion;
            notaSalidaAlmacen.CantidadLotes            = request.CantidadLotes;
            //notaSalidaAlmacen.PromedioPorcentajeRendimiento = request.PromedioPorcentajeRendimiento;
            notaSalidaAlmacen.CantidadTotal   = request.CantidadTotal;
            notaSalidaAlmacen.PesoKilosBrutos = request.PesoKilosBrutos;


            notaSalidaAlmacen.EstadoId        = NotaSalidaAlmacenEstados.Ingresado;
            notaSalidaAlmacen.FechaRegistro   = DateTime.Now;
            notaSalidaAlmacen.UsuarioRegistro = request.UsuarioNotaSalidaAlmacen;

            notaSalidaAlmacen.NotaSalidaAlmacenId = _INotaSalidaAlmacenRepository.Insertar(notaSalidaAlmacen);

            if (notaSalidaAlmacen.NotaSalidaAlmacenId != 0)
            {
                request.ListNotaSalidaAlmacenDetalle.ForEach(x =>
                {
                    NotaSalidaAlmacenDetalle obj = new NotaSalidaAlmacenDetalle();
                    obj.LoteId = x.LoteId;
                    obj.NotaSalidaAlmacenId = notaSalidaAlmacen.NotaSalidaAlmacenId;

                    lstnotaSalidaAlmacen.Add(obj);


                    TablaIdsTipo tablaLoteIdsTipo = new TablaIdsTipo();
                    tablaLoteIdsTipo.Id           = x.LoteId;
                    loteIdActualizar.Add(tablaLoteIdsTipo);
                });

                affected = _INotaSalidaAlmacenRepository.ActualizarNotaSalidaAlmacenDetalle(lstnotaSalidaAlmacen, notaSalidaAlmacen.NotaSalidaAlmacenId);


                _LoteRepository.ActualizarEstadoPorIds(loteIdActualizar, DateTime.Now, request.UsuarioNotaSalidaAlmacen, LoteEstados.GeneradoNotaSalida);
            }


            #region Guia Remision
            int guiaRemisionAlmacenId;
            //GuiaRemisionAlmacen guiaRemisionAlmacen = new GuiaRemisionAlmacen();

            GuiaRemisionAlmacen guiaRemisionAlmacen = _Mapper.Map <GuiaRemisionAlmacen>(notaSalidaAlmacen);
            guiaRemisionAlmacen.Numero = _ICorrelativoRepository.Obtener(request.EmpresaId, Documentos.GuiaRemisionAlmacen);


            #region Comentado Guia de Remision

            string tipoProduccionId    = String.Empty;
            string tipoCertificacionId = String.Empty;

            List <ConsultaNotaSalidaAlmacenLotesDetallePorIdBE> NotaSalidaDetalle = _INotaSalidaAlmacenRepository.ConsultarNotaSalidaAlmacenLotesDetallePorIdBE(notaSalidaAlmacen.NotaSalidaAlmacenId).ToList();


            if (NotaSalidaDetalle.Count > 0)
            {
                tipoProduccionId    = NotaSalidaDetalle[0].TipoProduccionId;
                tipoCertificacionId = NotaSalidaDetalle[0].TipoCertificacionId;
            }

            guiaRemisionAlmacen.TipoProduccionId    = tipoProduccionId;
            guiaRemisionAlmacen.TipoCertificacionId = tipoCertificacionId;

            guiaRemisionAlmacenId = _IGuiaRemisionAlmacenRepository.Insertar(guiaRemisionAlmacen);

            if (guiaRemisionAlmacenId != 0)
            {
                List <GuiaRemisionAlmacenDetalleTipo> listaDetalle = new List <GuiaRemisionAlmacenDetalleTipo>();
                if (NotaSalidaDetalle.Any())
                {
                    NotaSalidaDetalle.ForEach(x =>
                    {
                        GuiaRemisionAlmacenDetalleTipo item = _Mapper.Map <GuiaRemisionAlmacenDetalleTipo>(x);
                        item.GuiaRemisionAlmacenId          = guiaRemisionAlmacenId;
                        item.FechaLote             = x.FechaRegistro;
                        item.UnidadMedidaIdPesado  = x.UnidadMedidaId;
                        item.ProductoId            = x.ProductoId;
                        item.SubProductoId         = x.SubProductoId;
                        item.NumeroLote            = x.NumeroLote;
                        item.CantidadPesado        = x.Cantidad;
                        item.KilosNetosPesado      = x.TotalKilosNetosPesado;
                        item.KilosBrutosPesado     = x.TotalKilosBrutosPesado;
                        item.RendimientoPorcentaje = x.RendimientoPorcentaje;
                        item.HumedadPorcentaje     = x.HumedadPorcentajeAnalisisFisico;
                        item.TipoProduccionId      = x.TipoProduccionId;
                        item.TipoCertificacionId   = x.TipoCertificacionId;
                        listaDetalle.Add(item);
                    });

                    _IGuiaRemisionAlmacenRepository.ActualizarGuiaRemisionAlmacenDetalle(listaDetalle);
                }
            }

            #endregion Comentado Guia de Remision


            #endregion

            return(affected);
        }