Re-write line parse so it will handle missing values
A bit of clean up and extra checks
Purchases store copy of customer and product instead of pointer