daniel kucharski @inspiran_be [email protected]
TRANSCRIPT
What is V?
Why V?
Design
State & Roadmap
Demo
Agenda
vrijdag 8 juni 12
Expandable ecommerce framework
Interchangeable bundles
Process driven
What is V?
vrijdag 8 juni 12
vrijdag 8 juni 12
Focussed towards a simple Order to Cash scenario
Do not focus on the entire ecommerce process (eg. order handling, work load distribution, legal recovery )
Extending means hacking
Why?
Other platforms
vrijdag 8 juni 12
Flexibility: plug ecommerce into your Symfony2 site
Configurable: easily configure the application behavior and adjust processes
Reusability: lets stop reinventing the wheel
Expandability: a system that grows with the customer’s growth
Why?
We wanted
vrijdag 8 juni 12
Framework
Technical side (libraries, bundles & optional sandbox)
Functional / business side
Provide (localized) store configurations
Provide commonly used ecommerce flows
What is V?
vrijdag 8 juni 12
Cart -> Order
https://github.com/vespolina/vespolina-sandbox/wiki/Order-to-Cash-Process-Flow-Diagrams
Why?
A possible B2C example
vrijdag 8 juni 12
Why?
https://github.com/vespolina/vespolina-sandbox/wiki/Order-to-Cash-Process-Flow-Diagrams
A possible B2B scenario
vrijdag 8 juni 12
Hotel booking
Client asks for a B2C focussed site
Booking Request -> Confirm -> Pay
What is V?
So you think you can build an ecommerce site?
vrijdag 8 juni 12
So you think you can maintain an ecommerce site?
What is V?
Hotel booking
Client asks later on to add B2B support (eg. customer is travel agency
inbound Booking Requests -> Confirm -> Sales Order
Periodically aggregate sales orders into invoice and follow up payments
vrijdag 8 juni 12
Design?
Bundles, bundles, bundles
CartBundle InventoryBundle
FulfillmentBundle MerchandiseBundle
OrderBundle MonetaryBundle
PartnerBundle PricingBundle
ProductBundle WorkflowBundle
TaxationBundle
TaxonomyBundle AdminBundle
StoreBundle CoreBundle
vrijdag 8 juni 12
Manages a product
Default product with features and options
Custom products processed through handlers
Products can use multiple identification types (SKU, EAN, UPC,...)
Design?
ProductBundle
vrijdag 8 juni 12
Features are attributes to a product
a movie might have a director and studio
music might have a producer and label
Options are choice within the same product
color - red, green, blue
size - small, medium, large
Combinations can be mapped to SKU’s
Design?
ProductBundle
vrijdag 8 juni 12
Manages a cart
Cart, CartItem, CartableItem (eg. product)
Adjust behavior per cartable item with Cart Handlers
Pricing of a Cart with pricing providers
Basic cart management (controller, twig templates)
Design?
CartBundle
vrijdag 8 juni 12
Manages partners to an ecommerce system
Customers, contact persons, employee, suppliers, ...
Role based approach
Partner
personalDetails (eg. social security id)
organisationalDetails (eg. VAT id)
Design?
PartnerBundle
vrijdag 8 juni 12
Manages the hassle of dealing with regional taxes
Tax zones, tax categories & rates
Provides tax schemas
Tax related webservices (eg. VIES service)
Design?
TaxationBundle
vrijdag 8 juni 12
Generic classification (tags & hierarchical categories )
Taxonomy term have properties
Eg. product categorisation, customer classification
Multiple classifications for the same entity collection (eg. frontend classification, internal organisational classification)
Design?
TaxonomyBundle
vrijdag 8 juni 12
Manages a store and its global behavior
operational mode (standard, daily deal )
Multi store in mind
Store zones
Design?
StoreBundle
vrijdag 8 juni 12
Design?
StoreBundle
Luxary Store
sales_channel: luxary_web
Beverages Store
sales_channel: beverages_web
Clothing Store Zone
Jewelry Store Zone
taxonomyName: clothing_taxonomyproduct_view: tiled
taxonomyName: jewelry_taxonomyproduct_view: small_list
Beer Store Zone
taxonomyName: beer_taxonomyproduct_view: tiled
vrijdag 8 juni 12
Design?
StoreBundle : Process
CheckoutB2C
IdentifyCustomer
3. CheckoutB2C extends Process/AbstractProcess and knows which steps to execute in a given state
4. Create an instance of IdentifyCustomer which extend Process/AbstractProcessStep
Try to look if the customer can be identified (eg. through the session) Implements Process/
AbstractProcessStep
CheckoutController
IdentifyCustomerController
DetermineFulfillmentChoose Payment
type
Review
Pay
1. url /checkout delegates to store/controller/checkoutcontroller
2. check if an active checkout process exists, if not create one and execute
4b If the customer could not be identified we create an identifyCustomer controller which returns
an UI to login / create a new account
4c When the login form is submitted the IdentifyCustomer Controller should update the process state and signal the main process to
continue with it's subsequent steps (eg. through event dispatcher) (Todo: decouple and use event dispatcher)
vrijdag 8 juni 12
Design?
StoreBundle : Process
vrijdag 8 juni 12
Manages sellable products
Conceptual difference between known products and sellable products
Read RFC bit.ly/KkWzJg
Design?
MerchandiseBundle (RFC)
vrijdag 8 juni 12
Product Master
jupiler_bottle
Design?
MerchandiseBundle (RFC)
sf_live_t_shirt
sf_live_badge
product feeds
vrijdag 8 juni 12
Product Master
jupiler_bottle
Design?
MerchandiseBundle (RFC)
Beverages Store
SF Storesf_live_t_shirt
sf_live_badgesf_live_t_shirt
1 eurojupiler_bottle
14 euro
10 euro
sf_live_t_shirt
product feeds
vrijdag 8 juni 12
Demo environment setup
http://try.vespolina.org
Sandbox frontend is working
Some bundles are used already in production
Backend = TODO
State & Roadmap
vrijdag 8 juni 12
Decouple process framework from store bundle
Move into a db driven process framework (ex Workflow Bundle)
Documentation
Admin bundle
REST services
Merchandise bundle
...
State & Roadmap
vrijdag 8 juni 12
Many bundles need additional love
Feel free to help
https://github.com/vespolina
IRC irc.freenode.org / #vespolina
Contribute
vrijdag 8 juni 12
(answer is 42 anyhow)
Q&A
https://joind.in/talk/view/6670
@vespolina_proj
@inspiran_be
vrijdag 8 juni 12