I started to work on this and I have few changes to propose.
The flat design is still an important part of the design but I think it will be better to reuse the location model because it will avoid inconsistency when the "Storage Unit" is moved.
Indeed if we keep a single location, we must just improve the computation of the stock quantity. For that we must improve the loop when 'with_childs' is True. I propose to add a join on the query for location with only "Storage Unit" children so the move on those children location will be counted as from the parent location. And we will remove such location from the children query.