Agree with Outdoor Girl. (I think we were typing at the same time.)
Iíve had considerable experience with temp agencies Ė as a client and also as an employee.
Usually the only reason not to tell the temp prior to their last day is if there is some problem with their work performance, attitude, attendance, etc. Or there is fear the worker will blow up, steal things, or sabotage something. Thatís not the case here. This is a long-term temp who has done a good job.
The lunch is a dead give-away. He would have to be pretty dense not to figure out whatís going on. He should be told. He needs time to try to line up another assignment, and he should have the chance to clear out his desk of any personal items on his last day.
I would tell him anyway, thank him for all his hard work, and tell him the department would like to take him to lunch. If the agency doesnít like it, I would find another service to use. If I was this guy I would not appreciate the cloak-and-dagger tactics and Iíd register with another agency after completing this assignment.