Complementing Jürgen's suggestions,
you can use also use EXIT_SAPMM07M_009 to set storage location or, preferably, implement badi MB_MIGO_ITEM_BADI.
I would probably define a storage location re-determination based on MCHB for existing batches and another thing I actually used in several cases, a batch search help with information of batch stocks in storage locations.