Single Responsibility is IMHO a not easy to nail down concept.
A simple rule of thumb is:
When I have to explain, what a method/class does, and have to use the word »and«, it is an indicator, that something smelly may be going on.
On the one hand, it is only an indicator and on the other hand it works better reverse: If two things are going on, you can not avoid using the word »and« and since you are doing two things, you violate the SRP.
But, does that mean on the other hand, if you do more than one thing, you are violating SRP? No. Because otherwise you were limited to trivial code and trivial problems to solve. You would hurt yourself if your were too strict in the interpretation.
Another perspective on SRP is: one level of abstraction.
As long as you are dealing with one level of abstraction, you are mostly fine.
What does all that mean for your question:
I believe UpdateGroupBilling should not be called inside the save method as it violates the single responsibility principle. But, he says that each time a payment is made, the billing should be updated. Hence this is the correct approach.
To decide, whether this is a violation of SRP, it is necessarry to know, what is going on in the save()
-Method. If the method is -as the name- suggests responsible to persist the model to the database, a call to UpdateGroupBilling
is IMHO a violation of SRP, since you are extending the context of »saving a payment«. You would paraphrase it with »I am saving the payment and update the group billing«, which is - as I said earlier - a (possible) indicator of violation of SRP.
On the other hand, if the method is describing a "payment-recipe" -i.e. what steps are to take in the process- and decide: everytime a payment is finished, it has to be saved (dealt with in another place) and then the group billings have to be updated (dealt with in another place), that would be no violation of SRP, since you aren't leaving the abstraction of the "recipe": you distinguish between what to do (in the recipe) and where it is done (in the according class/method/module). But if that is what your save()
-method does (describing which steps are to take) you should rename it.
Without further context, it is hard to say anything concrete.
Edit: you updated your inital post. I would say, that this method violates the SRP and should be refactored. The fetching of the data should be factored out (it should be a parameter of this method). The addition of data (updateBy/On) should be done elsewhere. The saving should be done elsewhere. Then it would be OK to leave UpdateGroupBilling([Parameters])
as is.