GithubHelp home page GithubHelp logo

bluedynamics / bda.plone.shop Goto Github PK

View Code? Open in Web Editor NEW
20.0 15.0 15.0 1.54 MB

Generic Shop Solution for Plone

License: Other

Python 80.69% JavaScript 0.52% Shell 1.20% RobotFramework 6.01% Makefile 9.64% SCSS 1.93%
hacktoberfest

bda.plone.shop's Introduction

bda.plone.shop

E-commerce solution for Plone

Installation

Depend your instance to bda.plone.shop and install it as addon in plone control panel.

Development and testing

Checkout bda.plone.shop from git://github.com/bluedynamics/bda.plone.shop.git and run:

~$ make install

This installs all dependencies with mxdev and prepares scripts for running tests.

Running tests

If you have run the buildout, you can run all tests like so:

~$ make test-ignore-warnings

To run the robot tests do:

./venv/bin/zope-testrunner --auto-color --auto-progress --test-path=./src --all

For development, it might be more convenient to start a test server and run robot tests individually, like so (-d to start Zope in DEBUG-MODE):

./venv/bin/robot-server bda.plone.shop.tests.ShopDXFull_ROBOT_TESTING -d
./venv/bin/robot src/bda/plone/shop/tests/robot/test_shop_orderprocess.robot

To automatically land in the debug shell on test-failure, use:

./venv/bin/robot-debug src/bda/plone/shop/tests/robot/test_shop_orderprocess.robot

In the robot test you can place the debug statement to access a robot shell to try things out.

For more information on this topic visit: https://docs.plone.org/external/plone.app.robotframework/docs/source/happy.html

Enable Content to be buyable

Content which represent buyable items must implement bda.plone.orders.interfaces.IBuyable.

Information related to Buyable items is acquired from content instance via adapters implementing the following interfaces:

- ``bda.plone.cart.interfaces.ICartItemDataProvider``
- ``bda.plone.cart.interfaces.ICartItemStock``
- ``bda.plone.shipping.interfaces.IShippingItem``
- ``bda.plone.orders.interfaces.IItemNotificationText``
- ``bda.plone.orders.interfaces.IGlobalNotificationText``
- ``bda.plone.orders.interfaces.ITrading``
- ``bda.plone.orders.interfaces.IBuyablePeriod``

There exists implementations of these adapters among with related Dexterity Behaviors.

For Plone 5 'Summary View' is overriden for folders and collections to show your buyables with controls to add them into the cart.

Dexterity Behaviors

The Dexterity related implementation consists of Behaviors for each interface. These are (shortname in brackets):

  • bda.plone.shop.dx.IBuyableBehavior (bda.shop.buyable)
  • bda.plone.shop.dx.IStockBehavior (bda.shop.stock)
  • bda.plone.shop.dx.IShippingBehavior (bda.shop.shipping)
  • bda.plone.shop.dx.IItemNotificationTextBehavior (bda.shop.notificationtext.item)
  • bda.plone.shop.dx.IGlobalNotificationTextBehavior (bda.shop.notificationtext.global)
  • bda.plone.shop.dx.ITradingBehavior (bda.shop.trading)
  • bda.plone.shop.dx.IBuyablePeriodBehavior (bda.shop.buyableperiod)

The corresponding adapter implementations are registered for the referring behavior interfaces.

The IBuyable interface gets hooked on content via IBuyableBehavior.

In order to create buyable items with dexterity you need to either create a portal type via GenericSetup or use the Dexterity TTW Editor to assign the behaviors to existing content, or create new type(s) TTW from scratch.

Notification related behaviors can be applied to any Dexterity object including buyable items, notification text values are aquired until plone root is reached.

Cart item preview images

The cart can render preview images for the cart items in case when the context has a field named image

You can change the preview image rendering by adapting your own cart items. If you want to change the scale of the image, inherit from the existing adapter class and change preview_scale property:

>>> from bda.plone.shop.dx import DXCartItemPreviewImage
>>> class MyDXCartItemPreviewImage(DXCartItemPreviewImage):
...     preview_scale = "my_scale"

To do more complex preview image rendering you can override the url property:

>>> class MyDXCartItemPreviewImage(DXCartItemPreviewImage):
...     @property
...     def url(self):
...         # do sophisticated stuff to get your preview image
...         return preview_url

Register your adapter via ZCML:

<adapter
  for="some.package.IMyDXContent"
  factory=".youradater.MyDXCartItemPreviewImage" />

Permissions

In general, custom shop deployments are likely to configure the permission and role settings according to their use cases.

There exists bda.plone.shop.ViewBuyableInfo and bda.plone.shop.ModifyCart permission to control what parts of buyable data and controls get exposed to the user.

Further the permissions bda.plone.shop.ChangePersonalInformation and bda.plone.shop.ChangePersonalPreferences are used to control access to Personal Preferences respective Personal Information pages. By default, users with role Customer can access Personal Information only, as it usually makes no sense to give a customer settings like a preferred editor.

bda.plone.shop.ViewBuyableInfo

This permission controls whether a user can view basic buyable information. These are item availability and item price. By default, this permission is set for roles:

  • Manager
  • Site Administrator
  • Reviewer
  • Editor
  • Customer
  • Authenticated

This permission is also granted to the Authenticated role, to cover the use case, where authenticated users should see price informations, but not buy items.

In order to expose buyable information to all visitors by default, add Anonymous role via generic setup's rolemap.xml of your integration package.

bda.plone.shop.ModifyCart

This permission controls whether a user can actually add or update this item to shopping cart. By default, this permission is set for roles:

  • Manager
  • Site Administrator
  • Customer

In order to enable non-customers or anonymous users to mofify the cart, edit rolemap.xml in your integration package as needed. Be aware that the shop is basically designed that anonymous users can buy items, but orders related features like viewing own orders are bound to Customer role.

Customizing the shop

We know that every web-shop has different needs. This is why bda.plone.shop has been designed with maximum flexibility in mind.

In general, bda.plone.shop is customized by either changing settings in the (always growing) control-panel, or by patching variables/classes.

Integrators might want to add a patchShop method to the initialize method of a Zope2 package:

def initialize(context):
    """Initializer called when used as a Zope 2 product.
    """
    patchShop()

...and make sure it's called at startup time using the zcml:

<configure
  xmlns="http://namespaces.zope.org/zope"
  xmlns:five="http://namespaces.zope.org/five">

  <five:registerPackage package="." initialize=".initialize" />

</configure>

In patchShop you typically import constants from bda.plone.shop related packages and redefine them.:

def patchShop():
    from bda.plone import cart
    cart.CURRENCY_LITERALS['EUR'] = u'€'

Please see bda.plone.checkout or bda.plone.order for information how to customize the checkout form or the notification emails respectively.

Troubleshooting

If you're missing widgets in the @@item_discount form (eg. the Autocomplete for users or groups), you might want to reinstall (or re-run the GS import steps) of the yafowil.plone (see its README for more information).

If the autocomplete widget (in @@item_discount) is not working you can try to disable ++resource++yafowil.widget.autocomplete/jquery-ui-1.8.18.autocomplete.min.js in portal_javascripts.

In case you're having trouble with the forms, check if you're having recent versions of yafowil >= 2.1 and yafowil related packages.

Create translations

$ cd src/bda/plone/shop/
$ ./i18n.sh

Backward incompatible changes

1.0a1

  • bda.plone.shop: Buy Items permission has been renamed to bda.plone.shop: Modify Cart. If you have custom rolemap.xml in your GS profiles using this permission, or you use this permission somewhere in your code, you need to update your customizations.

Upgrade to Plone 5

If you upgrade to Plone 5, you have to run the upgrade step Remove old JS and CSS resources for Plone 5 manually to remove the old registration of resources.

Contributors

We'd be happy to see forks and pull-requests to improve this program. Professional support is offered by the maintainers and some of the authors.

Maintainers

  • Robert Niederreiter
  • Peter Holzer
  • Jens Klein

Contact: [email protected]

Authors

  • Robert Niederreiter (Author)
  • Peter Holzer
  • Peter Mathis
  • Harald Frießnegger
  • Espen Moe-Nilssen
  • Johannes Raggam
  • Jure Cerjak
  • Benjamin Stefaner
  • Jens Klein

bda.plone.shop's People

Contributors

agitator avatar ale-rt avatar andreesg avatar benniboy avatar espenmn avatar frisi avatar gomez avatar jcerjak avatar jensens avatar jochumdev avatar llisa123 avatar martronic-sa avatar petri avatar petschki avatar rnixx avatar thet avatar toalba avatar tobiasherp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bda.plone.shop's Issues

Allow shop admin portlet entries to be easily included in header bar

The shop admin portlet entries should be allowed to provided in a header bar as dropdown.
I see following options:

  • Moving the portlet's contents via Diazo into a reserved space in the theme (ugly)
  • Using a viewlet manager to provide the entries (better)
  • Reimplementing it as portal_action entries (maybe best?)

Unable to export orders if selected language is different from user language

When I try to export some orders, if the user default language is different from the chosen site language, the date in the the "to date" inputbox is not recognized and an error is issued. In particular, I've selected english but the user default language is italian: the date picker writes "12/31/2014" in the inputbox, but it is expected 31/12/2014. More, the language for the datepicker is german.

After starting a shop transaction the cart is emptied

When you start a online transaction in order to complete the buying process the cart is emptied even if the transaction is aborted and there is no payment issue.
Suppose a user accepts terms and conditions and then starts a transaction.
He then puts a wrong number in the credit card online system and the transaction fails. When he comes back to the cart, it is empty. How can he retrieve his items?

Multiple tax rates

This is a user story for a feature/enhancement request from one of the b.p.shop merchants we work with.

As a merchant I want to allow for different tax rates within the one shop/site for existing/repeat customers.

They indicated that their preferred solution would be the separate tax rates to be group based and work in a similar way to discounting.

Example use case:
Their customers consist of an established network of dealers and they want to be able to base the differential tax treatment on the geographical location of these dealers:

  • Group 1 – UK resident dealers: always attract 20% local VAT
  • Group 2 – EU resident dealers who have provided their VAT equivalent number: always attract 0% VAT
  • Group 3 – EU resident dealers who have not given us a number: always attract 20% VAT

Does anyone else have a use case for this feature? Any input/thoughts are appreciated.

We have also had some talk regarding adding support for muli-currency support within the one site, however I suspect that is deserving of a separate issue/discussion.

base urls on the inavigationroot instead of context

clicking the cart link in the portlet on /plone/buyable-item should take users to
/plone/@@cart instead of /plone/buyable-item/@@cart

the checkout link when viewing the cart should take users to /plone/@@checkout instead of
/plone/buyable-item/@@checkout
(bda.plone.cart)

this is especially important for the link to the terms before finishing the checkout.
currently we're relying on acquisition here.
(bda.plone.checkout)

the same should be done for the links in the admin portlet
/plone/some-content-in/some-folder/@@orders and @@exportorders
(bda.plone.shop)

is there any reason for invoking these views on the current context instead of an inavigationroot?

discount shows same price (decimal rounding issues)

in our shop we need to show gross prices. (in case items are sold do companies, vat depends on the companies country)

for a price of EUR 30, i need to calculate the net price first

30/1,1 = 27,27

giving the price with just 27,27 seems sufficient, but results showing the same price for the discounted price (see attachment)

workaround: provide more decimal points: 27,27272727272727272727

possible solution:

add a method to buyable and use it in the page template to decide whether to show the discounted price:

def showDiscount(self):
    #compare item_net_original and item_net rounded to 2 decimal points
    ...

maybe it also makes sense to allow to provide prices as gross prices?

forgotten cart reminder

allow to inform a potential customer about cart/cartitems that weren't bought.
for example send a reminder email and offer some discout

Incorrect total price of items in cart

The total price of items in cart is incorrect while using 21% of VAT.
The image bellow shows an example of the issue (77.99€ instead of 78€) in a fresh Plone installation.

Example:
jnx8rpb

The net price used for the above items was:

  • "CJPpas": 6,611€
  • "6 t/m 17 jaar": 1,652€
  • "Volvassenen": 10,33€

Any ideas what is causing this problem?

Cart is not cleaned at the end of the session

After adding some products to the cart, if you log out and log in again with a different user you will see the cart still containing the previous items. Looks like the cart cookie is not removed at logout.

Separate email templates/addresses based on payment method

This is a user story for a feature/enhancement request from one of the b.p.shop merchants we work with.

As a merchant I would like to be able to select different email addresses and templates for automated emails to be sent to, based on payment method.

Example:
Credit card payment method:

  • 'Template A' email is sent to 'Customer' and 'Admin A' email addresses
  • 'Template C [packing slip]' email is sent to distributer for immediate dispatch.

Invoice payment method:

  • 'Template A' Email is sent to 'Customer' and 'Admin B' email addresses. Payment is verified before order is dispatched.

I had also wondered if this could be extended to automated email triggers being available when payment and order states are changed. This may be an over complication however.

It would also be good for uses to be able to add 'CC' and 'BCC' recipents to admin email address(es).
The example above is based on the current method that we have hacked together to work for the immediate demand, however I think it would be a nice feature to implement properly! It would be good to collect other needs/use cases for this beforehand however...

@@bookings view optimizations

Optimizations for the bookings view:

  • Listed articles should be linked with the articles itself.
  • Defined (or optimized) sorting for bookings list.
  • Sorting options for article, order date, e-mail, name.
  • Show email in group view (when grouped for article)
  • Scale for whole page width (remove portlet columns for that)
  • Allow sending of emails like in @@orders view.

make country_id translation fail tolerant

client doesn't want a country dropdown

shall we just add try/except?

    def country(self, country_id):
        try:
            return get_pycountry_name(country_id)
        except:
            return country_id

re-order funcitonality

Example user story:
As a customer I want to be able to place a new order the same as (or similar to) a previous order I have made.

  • Has anyone else got a use case for this kind of functionality?
  • Would it be 'better' to be able to (a) re-order an identical order to a previous order, or (b) add items from a previous order to the cart so you can then add / remove items before placing the order? My initial feeling is that (b) is much better but I'm not sure if there are any potential draw backs or if they're mutually exclusive.
  • Would anyone be able to point us in the right direction to programatically add items to the cart?

Orders page does not open order

Clicking on an order in the order page , in particular on the leftmost icon in a row after the checkbox, has no effect. Should it open the order detail page?

Cart lists shipping costs although summary_total_only is set to False

If I set IShopCartSettings.summary_total_only I'd expect the cart-portlet and the @@cart view to only show the total.
Currently, if you set free_shipping_limit and flat_shipping_cost to 0, the shipping costs are still listed.

If we set summary_total_only to False net and included vat is listed, as well as shipping costs
portlet:
cart-portlet-without
cart:
cart-not-only-summary

If we set summary_total_only to True the net and included vat is not listed, but the shipping costs are still listed:
portlet:
cart-only-summary1
cart:
cart-portlet-with

userdata.py not working with plone.app.users 1.2

Hi,
I'm just wondering if userdata.py should still support plone.app.users 1.2 along with 2.0.1. Code has been changed to:
from plone.app.users.browser.userdatapanel import UserDataPanel

from
from plone.app.users.browser.personalpreferences import UserDataPanel

I wanted to check if there was a deliberate reasoning behind this and if it should support both versions? (plone app.users is still current with Plone4.3)

Cheers

Shop settings can't be saved - available shippings missing

Changes in Plone/@@shop_controlpanel can't be saved because the widget for shipping and payment methods seems to be broken.

The vocabularies (AvailableShippingMethodsVocabulary and ShippingMethodsVocabulary) both work fine, but the widget for IShopShippingSettings.available_shipping_methods seems to be broken.
It does not display any selectable items.

shipping

Running Plone 4.3.6

Error: Couldn't find a distribution for 'bda.plone.shop'.

Hello,

I can't install bda.plone.shop in Plone 4.1.6.

After add bda.plone.shop to eggs section of the instance:

$ bin/buildout -Nv
...
We have no distributions for bda.plone.shop that satisfies 'bda.plone.shop'.
Couldn't find index page for 'bda.plone.shop' (maybe misspelled?)
Getting distribution for 'bda.plone.shop'.
While:
Installing instance.
Getting distribution for 'bda.plone.shop'.
Error: Couldn't find a distribution for 'bda.plone.shop'.

Is this normal? Can I install bda.plone.shop in Plone 4.1.6?

Thanks!

Manuel

Error when exporting orders

I tried to export some orders and just filled up the "to date" inputbox and pressed "export". It showed up the error:

Traceback (innermost last):
Module ZPublisher.Publish, line 138, in publish
Module ZPublisher.mapply, line 77, in mapply
Module ZPublisher.Publish, line 48, in call_object
Module bda.plone.orders.browser.views, line 1035, in call
Module yafowil.controller, line 18, in init
Module yafowil.base, line 380, in extract
yafowil widget processing info:
- path : exportorders
- blueprints: ['form']
- task : extract
- descr : failed at 'form'
Module yafowil.compound, line 26, in compound_extractor
Module yafowil.compound, line 31, in compound_extractor
Module yafowil.base, line 380, in extract
yafowil widget processing info:
- path : exportorders.to
- blueprints: ['td', 'field', 'plonelabel', 'error', '*from_before_to', 'datetime']
- task : extract
- descr : failed at 'from_before_to'
Module bda.plone.orders.browser.views, line 1056, in from_before_to
TypeError: can't compare datetime.datetime to str

On install: No module named controlpanel

I tried to install the shop into my Plone 4.3.2 Installation, and got this traceback:

2014-11-21 16:00:18 ERROR Zope.SiteErrorLog 1416582018.150.901113599991 http://localhost:8080/Plone/portal_quickinstaller/installProducts
Traceback (innermost last):
  Module ZPublisher.Publish, line 138, in publish
  Module ZPublisher.mapply, line 77, in mapply
  Module ZPublisher.Publish, line 48, in call_object
  Module Products.CMFQuickInstallerTool.QuickInstallerTool, line 580, in installProducts
  Module Products.CMFQuickInstallerTool.QuickInstallerTool, line 512, in installProduct
   - __traceback_info__: ('bda.plone.shop',)
  Module Products.GenericSetup.tool, line 350, in runAllImportStepsFromProfile
   - __traceback_info__: profile-bda.plone.shop:default
  Module Products.GenericSetup.tool, line 1100, in _runImportStepsFromContext
  Module Products.GenericSetup.tool, line 1015, in _doRunImportStep
   - __traceback_info__: plone.app.registry
  Module plone.app.registry.exportimport.handler, line 49, in importRegistry
  Module plone.app.registry.exportimport.handler, line 94, in importDocument
  Module plone.app.registry.exportimport.handler, line 281, in importRecords
  Module zope.dottedname.resolve, line 38, in resolve
ImportError: No module named controlpanel

All bda.plone.* packages are checked out on master:

bda.plone.shop = git https://github.com/bluedynamics/bda.plone.shop.git
bda.plone.productshop = git https://github.com/bluedynamics/bda.plone.productshop.git
bda.plone.discount = git https://github.com/bluedynamics/bda.plone.discount.git
bda.plone.cart = git https://github.com/bluedynamics/bda.plone.cart.git
bda.plone.shipping = git https://github.com/bluedynamics/bda.plone.shipping.git
bda.plone.orders = git https://github.com/bluedynamics/bda.plone.orders.git
bda.plone.checkout = git https://github.com/bluedynamics/bda.plone.checkout.git
bda.plone.payment = git https://github.com/bluedynamics/bda.plone.payment.git

Does i need more?

Someone idea?

Discounting functionality proposal

bda.plone.shop should provide advanced discounting funcionality in order to be competitive. Here's a collection of requirements along with proposals how this could be implemented

  • Define price absolute (in currency) or relative to the canonical one (in %)
  • Define a price for a user
  • Define a price for a group
  • Define these prices for a specific date range (expiration date would not work here, should be defined for each price)

Following cascading rules seem useful to me:

  • Base price is the canonical one (set in shop tab on buyable item)
  • Special price overrules canonical one (if set relative [in %], it gets calculated from canonical price)
  • If more than one general special price found (i.e if validity period overlaps), first one found applies
  • Special prices defined for groups are overrule a generic special price
  • Special prices defined for users overrule a generic special price and special prices defined for groups
  • Maybe we want to handle special prices accumulated if relative to the canonical price (i.e. special customer gets 8 % discount)

The UI implementation should be as follows:

Any suggestions?

Regards

-R

two buyables with "comment required", only one addable

regarding bda.plone.ticketshop - if you have two tickets with the setting "comment required", where a comment must be filled in (e.g. to name the participants), only the first one can be added. the second ticket cannot be added to the cart, even with a comment given (but no comment in the first ticket viewlet). the status notification appears "Zusatzangabe ist erforderlich"

See:
http://altach.web12.zoplo.com/kultur-freizeit-sport/events/testbuchung-01

You have to be logged-in in order to see the problem.

@jensens can you confirm, this isse also appears on altach.at old?

Implement free items per order

We have a custom project with the usecase that a customer can order n items for free per order. Item price takes place as of count n + 1 in cart.

I was thinking about the following implementation:

  • Introduce IFreeItemAmountPerOrder interface in bda.plone.shop and implement it as dedicated DX behavior respective AT schema extender.
  • Display information in buyable viewlet.
  • Consider setting in CartDataProvider.cart_items
  • Since free item amount per order is no discount in classical means I think it's OK that free items not shows up as discount in UI

Any objections or ideas before I start?

Users lookup broken

with bda.plone.shop (and bda.plone.productshop) on Plone 4.3, the user lookup is broken. Instead of the username something like this is displayed: <object object at 0x7fd704e09580>

Example for documentByLine:

screen shot 2016-05-04 at 11 39 03

Allow admins to cancel and reorder bookings

A shop admin should be able to cancel a booking on request of the customer and reorder it in their name. The process is like following:

  1. Admin cancels a individual booking or order.
  2. A notification email regarding the cancellation is sent to customer and admin. (available items have to be increased again with the number of canceled items)
  3. Admin reorders a item in the name of the customer.
  4. A notification email regarding the order is sent to customer and admin.

This was part of #69 but now in it's own ticket.

Not sure, if a whole order should be canceled instead of an individual booking.

Any comments?

/cc @rnixx @pcdummy @frisi

block pricing - scaled pricing

discount or specific prices based on the amount of ordered items

1-5 items: - 5% or price
10-20 items: - 10% or price

Plone 5 support

Now that Plone 5 is (almost) out of the door, it would be great to have support for it.

What exactly needs to be done, are there any serious issues expected with the upgrade?

Filter Optimizations for @@orders and @@bookings

The filters on @@orders and @@bookings should be optimized:

  • Useful sorting for select options (currently: random sorting)
  • User selection as "Lastname, Firstname (Username) - Email" instead "Username (Firstname, Lastname)"
  • Use cached vocabulary for user lookup
  • Additional Filter for status of booking or order.
  • Additional "Sallaried" filter.

Creating product causes infinite recursion error on bda adapted_context behaviours

Hi,

I have installed bda.plone.shop / bda.plone.productshop as per the virtualenv method outlined in the development & testing instructions provided. All tests pass when running bin/tests -s bda

When attempting to create a product (or a variant within a product group) I get a recursion error with "Module plone.behavior.factory, line 19, in call" as per traceback below.

After adding some instrumentation, it seems to be a problem with the adapted_context for these fields with the behaviours:

field item_net bda.plone.shop.dx.IBuyableBehavior
field item_vat bda.plone.shop.dx.IBuyableBehavior
field item_display_gross bda.plone.shop.dx.IBuyableBehavior
field item_comment_enabled bda.plone.shop.dx.IBuyableBehavior
field item_comment_required bda.plone.shop.dx.IBuyableBehavior
field item_quantity_unit bda.plone.shop.dx.IBuyableBehavior
field item_quantity_unit_float bda.plone.shop.dx.IBuyableBehavior
field item_available bda.plone.shop.dx.IBuyableBehavior
field item_available bda.plone.shop.dx.IStockBehavior
field item_overbook bda.plone.shop.dx.IStockBehavior
field shipping_item_weight bda.plone.shop.dx.IShippingBehavior

I would really appreciate it if anyone could point me in the right direction to resolve this. It looks like a well constructed and comprehensive product!

Cheers.

Traceback: http://pastie.org/8747249
Installed Products: http://pastie.org/8747287

Most expected interfaces should be optional

Currently it's necessary to implement most shop related functionality providing interfaces in order to make things work. In future, things should be more flexible, like so:

Mandatory for buyables:

  • bda.plone.cart.interfaces.ICartItemDataProvider

Optional for buyables:

  • bda.plone.cart.interfaces.ICartItemStock
  • bda.plone.shipping.interfaces.IShippingItem
  • bda.plone.orders.interfaces.ITrading
  • bda.plone.shop.interfaces.IBuyablePeriod

Optional on any content:

  • bda.plone.orders.interfaces.IItemNotificationText
  • bda.plone.orders.interfaces.IGlobalNotificationText

custom order process

Hi all from bda,

i need to build a custom shop solution which is highly customized. The only thing for us to be reused would be shopping cart behavior (IBuyableBehavior), and don't want to include all those dependencies from bda.plone.orders.

Can we exclude them from dependencies and add them as an optional addon including required adapters/views/... using zcml:condition? That would make bda.plone.shop the best base to start from.

shop related portlets only available in right column

is there any reason the portlets (admin and cart) can only be added to the right portlet manager IRightColumn?

  <portlet 
    addview="portlets.ShopAdmin"
    title="Shop Admin Portlet"
    description="A portlet which renders shop admin links.">
    <for interface="plone.app.portlets.interfaces.IRightColumn" />
  </portlet>

i'd suggest to drop this restriction and simply register the portlets for all available portlet managers.

Allow multiple user defined fields

Shop admins should be able to define custom fields for the ordering/checkout process of a article.
When ordering an article, customers should/have to fill out the optional/required fields.

  • Allow any number of user defined fields.
  • Allow definition of required/optional fields.
  • Allow definition of the value's data type, show a matching widget and validate for values (text, email, integer, float, date, selection lists, boolean).
  • Include all user defined fields of an article in the export.
  • Allow definition of these fields per article or folder (when on folder level, all article inherit from it).

Currently we have one custom extra field (cart_item_comment in bda.plone.cart.init.py). We might need an extra attribute (list of dicts) and a datagridfield with a spec like this: [field_name][label][datatype][required].

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.