View the Project on GitHub burnbright/silverstripe-shop
The shop installer bundles SilverStripe, the shop module, payment module, and required extras.
Here are a few thoughts around what would be required to implement a shop member credit system.
Historically product popularity has been based purely on sales numbers. Popularity changes over time, so I've found an algorithm for working out popularity values that factor in the age of the product, and also the age of the sales made for that product.
I have created two customisable reports: Shop Sales, and Coupon Usage. Reports are a fundamental feature for a shopping system, and I hope to create more in future. The sales report has ability to group results by Year, Month, Week, or Day. Admins can also specify a date range to study. I'm also attempting to merge reusable code into a "ShopPeriodReport" class.
I'm needing discount coupons to be created and sent when an order is paid for. The completePayment function in OrderProcessor is currently triggered via ShopPayment->onAfterWrite(). It also needs to be triggered when an admin updates an order to paid, or something past it.
Thanks to much appreciated help from the developer community, the upgrade of shop to ss3 has begun!
Zones are an idea that I've borrowed Prestashop, but I've implemented it slightly different.
I've spent a fair bit of time trying to improve test code coverage. This is doing wonders for helping me understand the shop code base as a whole. More importantly, increasing code coverage gives me confidence in the code base, and allows me to make changes with instant notification of the consequences. I'm currently at ~50% coverage, and my goal is ~70%.
I have been working on two major add-ons: zoned pricing, and a new tax framework.
Multi-step checkout functionality is mostly working now 96. It just needs unit testing, and validation. It will be interesting to see what devs think of this new approach. I know I've read that adding more steps to a checkout will lower conversions, but this splitting comes out of necessity. I think this will be a 1-step-back-3-steps-forward kind of deal. The split has helped to clarify different pieces of data that are needed.
As the user fills out information, we can build up a store of information that can be reused to pre-populate other forms. For example, the shipping estimate takes a shipping address, which can be used later. Also, a currency form could indicate approximate region, especially if they set their currency by choosing from a country dropdown.