public Int32 GuardarRendicionHojaRuta(Int32 AgenciaID, Int32 UnidadNegocioID, Int32 UsuarioID)
        {
            RendicionHojaRuta _rendicion = GetRendicionHojaRuta(AgenciaID);
            IUsuarios         Usuario    = UsuariosFactory.GetUsuario();

            Usuario.UsuarioID = UsuarioID;
            Usuario.Consultar();
            RendicionHojaRuta _rendicionHR = null;

            if (_rendicion.RendicionHojaRutaPlanillaArrastres.Count == 0 && _rendicion.RendicionHojaRutaDetalles.Count == 0)
            {
                throw new DatosInvalidosException("No hay comprobantes a rendir");
            }

            using (System.Transactions.TransactionScope transaccion = new System.Transactions.TransactionScope(System.Transactions.TransactionScopeOption.Required, new System.Transactions.TransactionOptions()
            {
                IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted
            }))
            {
                // Guardo la rendición
                IRendicionHojaRutaRepositorio _repositorioRendicionHR = IoC.GetObjectRepositorio <IRendicionHojaRutaRepositorio>();
                _rendicionHR = new RendicionHojaRuta()
                {
                    Fecha     = DateTime.Now,
                    AgenciaID = AgenciaID
                };
                _rendicionHR = _repositorioRendicionHR.Insert(_rendicionHR);

                IRendicionHojaRutaPlanillaArrastreRepositorio _repositorioPlanillasArrastre = IoC.GetObjectRepositorio <IRendicionHojaRutaPlanillaArrastreRepositorio>();
                foreach (RendicionHojaRutaPlanillaArrastre p in _rendicion.RendicionHojaRutaPlanillaArrastres)
                {
                    _repositorioPlanillasArrastre.Insert(new RendicionHojaRutaPlanillaArrastre()
                    {
                        RendicionHojaRutaID = _rendicionHR.RendicionHojaRutaID,
                        PlanillaArrastreID  = p.PlanillaArrastreID
                    });
                }

                IRendicionHojaRutaDetalleRepositorio _repositorioRendicionHRDetalle = IoC.GetObjectRepositorio <IRendicionHojaRutaDetalleRepositorio>();
                foreach (RendicionHojaRutaDetalle hr in _rendicion.RendicionHojaRutaDetalles)
                {
                    _repositorioRendicionHRDetalle.Insert(new RendicionHojaRutaDetalle()
                    {
                        RendicionHojaRutaID        = _rendicionHR.RendicionHojaRutaID,
                        PlanillaArrastreHojaRutaID = hr.PlanillaArrastreHojaRutaID
                    });
                }

                // Emito la guía de rendición
                Int32 guiaID = EmitirGuiaRendicion(AgenciaID, UnidadNegocioID, Usuario, _rendicionHR.RendicionHojaRutaID);

                // Obtengo el número de rendición
                IAgenciaNroRendicionHojaRutaRepositorio _nroRendicionRepositorio = IoC.GetObjectRepositorio <IAgenciaNroRendicionHojaRutaRepositorio>();
                AgenciaNroRendicionHojaRuta             _nroRendicion            = _nroRendicionRepositorio.GetOne(a => a.AgenciaID == AgenciaID);
                if (_nroRendicion == null)
                {
                    _nroRendicion = new AgenciaNroRendicionHojaRuta()
                    {
                        AgenciaID          = AgenciaID,
                        UltimoNroRendicion = 0
                    };

                    _nroRendicionRepositorio.Insert(_nroRendicion);
                }

                _nroRendicion.UltimoNroRendicion++;

                _nroRendicionRepositorio.Update(_nroRendicion);

                // Actualizo la rendición con el número y id de la guía
                _rendicionHR.NroRendicion = _nroRendicion.UltimoNroRendicion;
                _rendicionHR.GuiaID       = guiaID;
                _repositorioRendicionHR.Update(_rendicionHR);

                // Margo las planillas y hojas de ruta que están en la rendición como rendida
                IPlanillaArrastreDominio _planillaArrastreDominio = IoC.GetObjectDominio <IPlanillaArrastreDominio>();
                foreach (Entidades.RendicionHojaRutaPlanillaArrastre p in _rendicion.RendicionHojaRutaPlanillaArrastres)
                {
                    _planillaArrastreDominio.MarcarPlanillaArrastreRendida(p.PlanillaArrastre);
                }

                foreach (Entidades.RendicionHojaRutaDetalle hr in _rendicion.RendicionHojaRutaDetalles)
                {
                    _planillaArrastreDominio.MarcarPlanillaArrastreHojaRutaRendida(hr.PlanillaArrastreHojaRuta);
                }

                // Completo las transacción
                transaccion.Complete();

                return(guiaID);
            }
        }
        public List <RendicionesHojaRuta> GetList(DateTime?FechaDesde, DateTime?FechaHasta, Int32 NroRendicion, String NroSucursalGuia, Int32 NroGuia, Int32 AgenciaID)
        {
            IRendicionHojaRutaRepositorio _repositorio = IoC.GetObjectRepositorio <IRendicionHojaRutaRepositorio>();

            return(_repositorio.RendicionHojaRutaAll(FechaDesde, FechaHasta, NroRendicion, NroSucursalGuia, NroGuia, AgenciaID));
        }