Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
erp5_fork
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Eteri
erp5_fork
Commits
722c1b78
Commit
722c1b78
authored
Aug 27, 2012
by
Jean-Paul Smets
Committed by
Rafael Monnerat
Jan 22, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add better doc strings including TODO to define future improvements
parent
706ee9e9
Changes
37
Show whitespace changes
Inline
Side-by-side
Showing
37 changed files
with
246 additions
and
59 deletions
+246
-59
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/Base_generateSessionID.xml
...tem/portal_skins/erp5_commerce/Base_generateSessionID.xml
+1
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/Person_editPersonalInformation.xml
...al_skins/erp5_commerce/Person_editPersonalInformation.xml
+17
-2
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/Person_getApplicableDiscountList.xml
..._skins/erp5_commerce/Person_getApplicableDiscountList.xml
+2
-3
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/Person_getApplicableTaxList.xml
...ortal_skins/erp5_commerce/Person_getApplicableTaxList.xml
+18
-6
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/Product_getRelatedDescription.xml
...tal_skins/erp5_commerce/Product_getRelatedDescription.xml
+29
-8
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/Resource_getPriceCalculationDefaultContext.xml
...5_commerce/Resource_getPriceCalculationDefaultContext.xml
+4
-0
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_deleteShoppingCartItem.xml
..._skins/erp5_commerce/SaleOrder_deleteShoppingCartItem.xml
+4
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_externalPaymentHandler.xml
..._skins/erp5_commerce/SaleOrder_externalPaymentHandler.xml
+1
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getAvailableShippingResourceList.xml
...5_commerce/SaleOrder_getAvailableShippingResourceList.xml
+4
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getDefaultTradeCondition.xml
...kins/erp5_commerce/SaleOrder_getDefaultTradeCondition.xml
+7
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getFormattedCreationDate.xml
...kins/erp5_commerce/SaleOrder_getFormattedCreationDate.xml
+8
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getSelectedShippingResource.xml
...s/erp5_commerce/SaleOrder_getSelectedShippingResource.xml
+4
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getShoppingCartBuyer.xml
...al_skins/erp5_commerce/SaleOrder_getShoppingCartBuyer.xml
+9
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getShoppingCartCustomer.xml
...skins/erp5_commerce/SaleOrder_getShoppingCartCustomer.xml
+10
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getShoppingCartId.xml
...ortal_skins/erp5_commerce/SaleOrder_getShoppingCartId.xml
+5
-2
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getShoppingCartItemList.xml
...skins/erp5_commerce/SaleOrder_getShoppingCartItemList.xml
+10
-3
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getShoppingCartTotalPrice.xml
...ins/erp5_commerce/SaleOrder_getShoppingCartTotalPrice.xml
+0
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_isConsistent.xml
...tem/portal_skins/erp5_commerce/SaleOrder_isConsistent.xml
+9
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_isShippingRequired.xml
...rtal_skins/erp5_commerce/SaleOrder_isShippingRequired.xml
+5
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_isShoppingCartEmpty.xml
...tal_skins/erp5_commerce/SaleOrder_isShoppingCartEmpty.xml
+7
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_setShoppingCartCustomer.xml
...skins/erp5_commerce/SaleOrder_setShoppingCartCustomer.xml
+3
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSection_checkPaypalIdentification.xml
...ns/erp5_commerce/WebSection_checkPaypalIdentification.xml
+1
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSection_doExpressCheckoutPayment.xml
...ins/erp5_commerce/WebSection_doExpressCheckoutPayment.xml
+5
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSection_doPaypalPayment.xml
...portal_skins/erp5_commerce/WebSection_doPaypalPayment.xml
+5
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSection_getExpressCheckoutDetails.xml
...ns/erp5_commerce/WebSection_getExpressCheckoutDetails.xml
+5
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSection_getNewPaypalToken.xml
...rtal_skins/erp5_commerce/WebSection_getNewPaypalToken.xml
+5
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSection_viewCurrentPersonAsWeb.xml
...skins/erp5_commerce/WebSection_viewCurrentPersonAsWeb.xml
+10
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSite_getPaypalOrderParameterDict.xml
...ins/erp5_commerce/WebSite_getPaypalOrderParameterDict.xml
+5
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSite_getPaypalSecurityParameterDict.xml
.../erp5_commerce/WebSite_getPaypalSecurityParameterDict.xml
+5
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSite_getPaypalUrl.xml
...eItem/portal_skins/erp5_commerce/WebSite_getPaypalUrl.xml
+5
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSite_getShoppingCartCheckoutStep.xml
...ins/erp5_commerce/WebSite_getShoppingCartCheckoutStep.xml
+6
-0
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSite_getShoppingCartDefaultCurrency.xml
.../erp5_commerce/WebSite_getShoppingCartDefaultCurrency.xml
+6
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSite_getShoppingCartDefaultCurrencyCode.xml
...5_commerce/WebSite_getShoppingCartDefaultCurrencyCode.xml
+3
-0
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSite_getShoppingCartDefaultCurrencySymbol.xml
...commerce/WebSite_getShoppingCartDefaultCurrencySymbol.xml
+5
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce_widget_library/Resource_getShopUrl.xml
...kins/erp5_commerce_widget_library/Resource_getShopUrl.xml
+13
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce_widget_library/SaleOrder_getResourceUrl.xml
...erp5_commerce_widget_library/SaleOrder_getResourceUrl.xml
+8
-1
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce_widget_library/SaleOrder_viewAsWebConfirmCreditCardPayment/submit.xml
...ry/SaleOrder_viewAsWebConfirmCreditCardPayment/submit.xml
+2
-8
No files found.
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/Base_generateSessionID.xml
View file @
722c1b78
...
@@ -51,7 +51,7 @@
...
@@ -51,7 +51,7 @@
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
"""\n
<value>
<string>
"""\n
Generate random
id which is generally used as a session ID.
\n
Generate random
ID which is generally used as a session ID
\n
"""\n
"""\n
from random import choice\n
from random import choice\n
import string\n
import string\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/Person_editPersonalInformation.xml
View file @
722c1b78
...
@@ -50,13 +50,24 @@
...
@@ -50,13 +50,24 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
# Only save basic personal information for an ecommerce website\n
<value>
<string>
"""\n
Edit the personal information of a client through specific form\n
which takes into account only basic personal information \n
\n
TODO:\n
- handle form validation errors after the call to\n
Base_edit (not the case currently)\n
\n
BUG:\n
- make sure personal address can be updated from\n
account page (no the case currently)\n
"""\n
translateString = context.Base_translateString \n
translateString = context.Base_translateString \n
\n
\n
context.Base_edit(form_id=\'Person_viewAsWeb\')\n
context.Base_edit(form_id=\'Person_viewAsWeb\')\n
\n
\n
context.ERP5Site_redirect(\'%s/account\' % context.getWebSiteValue().absolute_url(), \\\n
context.ERP5Site_redirect(\'%s/account\' % context.getWebSiteValue().absolute_url(), \\\n
keep_items={\'portal_status_message\': translateString("Your personal informations are updated.", mapping = dict())})\n
keep_items={\'portal_status_message\': translateString("Your personal informations are
now
updated.", mapping = dict())})\n
</string>
</value>
</string>
</value>
</item>
</item>
<item>
<item>
...
@@ -67,6 +78,10 @@ context.ERP5Site_redirect(\'%s/account\' % context.getWebSiteValue().absolute_ur
...
@@ -67,6 +78,10 @@ context.ERP5Site_redirect(\'%s/account\' % context.getWebSiteValue().absolute_ur
<key>
<string>
id
</string>
</key>
<key>
<string>
id
</string>
</key>
<value>
<string>
Person_editPersonalInformation
</string>
</value>
<value>
<string>
Person_editPersonalInformation
</string>
</value>
</item>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<string>
Edit customer information
</string>
</value>
</item>
</dictionary>
</dictionary>
</pickle>
</pickle>
</record>
</record>
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/Person_getApplicableDiscountList.xml
View file @
722c1b78
...
@@ -187,11 +187,10 @@
...
@@ -187,11 +187,10 @@
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
"""\n
<value>
<string>
"""\n
This script is a s
c
eleton for implementing discounts per customer basis.\n
This script is a s
k
eleton for implementing discounts per customer basis.\n
Because it\'s specific for every shop it needs to be implemented accordingly. \n
Because it\'s specific for every shop it needs to be implemented accordingly. \n
See also SaleOrder_viewDiscountRenderer.
\n
See also SaleOrder_viewDiscountRenderer.\n
"""\n
"""\n
\n
return None\n
return None\n
</string>
</value>
</string>
</value>
</item>
</item>
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/Person_getApplicableTaxList.xml
View file @
722c1b78
...
@@ -187,16 +187,28 @@
...
@@ -187,16 +187,28 @@
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
"""\n
<value>
<string>
"""\n
This script will find applicable taxes for customer based on his/her
s
location.\n
This script will find applicable taxes for customer based on his/her location.\n
For example.\n
For example.\n
- B2B in EU in same country, tax \n
- B2B in EU in same country, VAT applicable \n
- B2B in EU in different country, no tax \n
- B2B in EU in different country, no VAT applicable \n
- B2B and B2P from EU to outside EU, no tax \n
- B2B and B2C from EU to outside EU, no VAT applicable\n
- B2P in EU, tax\n
- B2C in EU, VAT applicable\n
\n
TODO:\n
- use same keys as in ERP5 propertysheets (ex. ratio instead of percent)\n
- should become Resource_getApplicableTaxList and use the tax generation\n
model of ERP5 instead of ad-hoc one, maybe with some optimizations for\n
high performance price display. There is no reason to handle price\n
and tax in a different way.\n
\n
BUG:\n
- some shops are "tax inclusive" which is not currently possible and\n
prevents B2C ecommerce. Tax inclusive requires business model\n
requires a different kind of simulation rules and trade models.\n
"""\n
"""\n
\n
\n
return {\'VAT\': {\'translated_title\':context.Base_translateString(\'VAT\'),\n
return {\'VAT\': {\'translated_title\':context.Base_translateString(\'VAT\'),\n
\'percent\':
20.
,\n
\'percent\':
19.6
,\n
},\n
},\n
}\n
}\n
</string>
</value>
</string>
</value>
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/Product_getRelatedDescription.xml
View file @
722c1b78
...
@@ -50,16 +50,33 @@
...
@@ -50,16 +50,33 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
portal = context.getPortalObject()\n
<value>
<string>
"""\n
Tries to find a Web Page related to the current Product\n
with publication section set to "website/product/short_description"\n
\n
\n
#get cached description\n
This short description made of HTML can be used to provide\n
# TODO\n
a better description than the one provided by default on\n
the product.\n
\n
\n
#get live description\n
TODO:\n
- use cache for description\n
- remove hardcoding by using site properties\n
- make sure we can include javascript in HTML\n
of web pages (a generic requirement which will lead\n
to changes in ERP5 TextDocument class)\n
- Rename to Resource_... since this script also\n
applied to services\n
- Handle language and version selection, possibily predicate\n
just like WebSection\n
- rename to use asHTML terminology\n
"""\n
portal = context.getPortalObject()\n
category_path = \'portal_categories/publication_section/website/product/short_description\'\n
\n
# Find a related web page with appropriate publication_section\n
web_page = portal.portal_catalog(portal_type=\'Web Page\',\n
web_page = portal.portal_catalog(portal_type=\'Web Page\',\n
default_follow_up_uid=context.getUid(),\n
default_follow_up_uid=context.getUid(),\n
default_publication_section_uid=context.restrictedTraverse(\'portal_categories/publication_section/website/product/short_description\').getUid(),\n
default_publication_section_uid=context.restrictedTraverse(category_path).getUid(), # XXX Bad hardcoding\n
#src__=1,\n
)\n
)\n
if web_page is None or len(web_page) == 0:\n
if web_page is None or len(web_page) == 0:\n
return context.Base_translateString("No more information for this product.")\n
return context.Base_translateString("No more information for this product.")\n
...
@@ -74,6 +91,10 @@ return web_page[0].getObject().asStrippedHTML()\n
...
@@ -74,6 +91,10 @@ return web_page[0].getObject().asStrippedHTML()\n
<key>
<string>
id
</string>
</key>
<key>
<string>
id
</string>
</key>
<value>
<string>
Product_getRelatedDescription
</string>
</value>
<value>
<string>
Product_getRelatedDescription
</string>
</value>
</item>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<string>
Get product description
</string>
</value>
</item>
</dictionary>
</dictionary>
</pickle>
</pickle>
</record>
</record>
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/Resource_getPriceCalculationDefaultContext.xml
View file @
722c1b78
...
@@ -106,6 +106,10 @@ return movement\n
...
@@ -106,6 +106,10 @@ return movement\n
<key>
<string>
id
</string>
</key>
<key>
<string>
id
</string>
</key>
<value>
<string>
Resource_getPriceCalculationDefaultContext
</string>
</value>
<value>
<string>
Resource_getPriceCalculationDefaultContext
</string>
</value>
</item>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<string>
Build movement context to compute price
</string>
</value>
</item>
</dictionary>
</dictionary>
</pickle>
</pickle>
</record>
</record>
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_deleteShoppingCartItem.xml
View file @
722c1b78
...
@@ -188,8 +188,11 @@
...
@@ -188,8 +188,11 @@
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
"""\n
<value>
<string>
"""\n
Delete a shopping cart item.\n
Delete a shopping cart item.\n
"""\n
\n
\n
TODO:\n
- use form validation (Base_edit)\n
- use \'form_id\' instead of hardcoded value \'SaleOrder_viewAsWeb\'\n
"""\n
translateString = context.Base_translateString\n
translateString = context.Base_translateString\n
shopping_cart = context.SaleOrder_getShoppingCart()\n
shopping_cart = context.SaleOrder_getShoppingCart()\n
\n
\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_externalPaymentHandler.xml
View file @
722c1b78
...
@@ -188,7 +188,7 @@
...
@@ -188,7 +188,7 @@
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
""" \n
<value>
<string>
""" \n
This script is called by external payment system.\n
This script is called by external payment system.\n
Here you can check if
payment was successfull or not.\n
It is possible to check here whether
payment was successfull or not.\n
"""\n
"""\n
\n
\n
# XXX: implement external payment check\n
# XXX: implement external payment check\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getAvailableShippingResourceList.xml
View file @
722c1b78
...
@@ -187,8 +187,11 @@
...
@@ -187,8 +187,11 @@
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
"""\n
<value>
<string>
"""\n
This
will return all Products that have set product_line=\'shipping\'. XXX
\n
This
script return all Products which product_line category is set to \'shipping\'.
\n
Such products are used for shipping purposes i.e. they can not be sold.\n
Such products are used for shipping purposes i.e. they can not be sold.\n
\n
TODO:\n
- change hardcoded category from \'product_line\' to a site dependent category\n
"""\n
"""\n
portal = context.getPortalObject()\n
portal = context.getPortalObject()\n
\n
\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getDefaultTradeCondition.xml
View file @
722c1b78
...
@@ -50,7 +50,9 @@
...
@@ -50,7 +50,9 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
"""Return the default trade condition"""\n
<value>
<string>
"""\n
Return the default trade condition for thie ecommerce site\n
"""\n
default = "sale_trade_condition_module/default_trade_condition"\n
default = "sale_trade_condition_module/default_trade_condition"\n
\n
\n
website = context.getWebSiteValue()\n
website = context.getWebSiteValue()\n
...
@@ -68,6 +70,10 @@ return context.getPortalObject().restrictedTraverse(default)\n
...
@@ -68,6 +70,10 @@ return context.getPortalObject().restrictedTraverse(default)\n
<key>
<string>
id
</string>
</key>
<key>
<string>
id
</string>
</key>
<value>
<string>
SaleOrder_getDefaultTradeCondition
</string>
</value>
<value>
<string>
SaleOrder_getDefaultTradeCondition
</string>
</value>
</item>
</item>
<item>
<key>
<string>
title
</string>
</key>
<value>
<string>
Return default trade condition
</string>
</value>
</item>
</dictionary>
</dictionary>
</pickle>
</pickle>
</record>
</record>
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getFormattedCreationDate.xml
View file @
722c1b78
...
@@ -50,7 +50,14 @@
...
@@ -50,7 +50,14 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
creation_date = context.getCreationDate()\n
<value>
<string>
"""\n
Return the creation date of the current context with\n
a niceer format.\n
\n
TODO:\n
- use a field and form for this purpose\n
"""\n
creation_date = context.getCreationDate()\n
return creation_date.strftime(\'%a, %d %b %Y %H:%M %p\')\n
return creation_date.strftime(\'%a, %d %b %Y %H:%M %p\')\n
</string>
</value>
</string>
</value>
</item>
</item>
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getSelectedShippingResource.xml
View file @
722c1b78
...
@@ -186,7 +186,10 @@
...
@@ -186,7 +186,10 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
shopping_cart = context.SaleOrder_getShoppingCart()\n
<value>
<string>
"""\n
Return selected shipping method from shopping cart\n
"""\n
shopping_cart = context.SaleOrder_getShoppingCart()\n
shipping_method = getattr(shopping_cart, \'shipping_method\', None)\n
shipping_method = getattr(shopping_cart, \'shipping_method\', None)\n
if shipping_method is not None:\n
if shipping_method is not None:\n
return shipping_method.getResourceValue()\n
return shipping_method.getResourceValue()\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getShoppingCartBuyer.xml
View file @
722c1b78
...
@@ -50,7 +50,15 @@
...
@@ -50,7 +50,15 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
"""Get the shopping cart customer"""\n
<value>
<string>
"""\n
Get the shopping cart customer object.\n
\n
TODO:\n
- double check this method since the word "buyer"\n
has been used in other placed to name what is actually\n
the vendor, or has been used for other purpose.\n
- make sure this method really makes any sense\n
"""\n
shopping_cart = context.SaleOrder_getShoppingCart()\n
shopping_cart = context.SaleOrder_getShoppingCart()\n
return shopping_cart.getDestinationDecisionValue()\n
return shopping_cart.getDestinationDecisionValue()\n
</string>
</value>
</string>
</value>
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getShoppingCartCustomer.xml
View file @
722c1b78
...
@@ -50,7 +50,16 @@
...
@@ -50,7 +50,16 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
"""Get the shopping cart customer"""\n
<value>
<string>
"""\n
Get the shopping cart customer as a Person object. \n
\n
TODO:\n
- add some consistency checks so that if current user\n
is not the current one defined in shopping\n
cart then reset shopping cart before proceeding. This\n
could happen if a wrong sequence of logout / add to cart\n
by two people sharing the same Web browser happens.\n
"""\n
shopping_cart = context.SaleOrder_getShoppingCart()\n
shopping_cart = context.SaleOrder_getShoppingCart()\n
result = shopping_cart.getDestinationSectionValue()\n
result = shopping_cart.getDestinationSectionValue()\n
if result is None:\n
if result is None:\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getShoppingCartId.xml
View file @
722c1b78
...
@@ -50,7 +50,10 @@
...
@@ -50,7 +50,10 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
return context.REQUEST.get(\'session_id\')\n
<value>
<string>
"""\n
Return shopping cart ID\n
"""\n
return context.REQUEST.get(\'session_id\')\n
</string>
</value>
</string>
</value>
</item>
</item>
<item>
<item>
...
@@ -63,7 +66,7 @@
...
@@ -63,7 +66,7 @@
</item>
</item>
<item>
<item>
<key>
<string>
title
</string>
</key>
<key>
<string>
title
</string>
</key>
<value>
<string>
Get shopping cart
id
</string>
</value>
<value>
<string>
Get shopping cart
ID
</string>
</value>
</item>
</item>
</dictionary>
</dictionary>
</pickle>
</pickle>
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getShoppingCartItemList.xml
View file @
722c1b78
...
@@ -51,10 +51,17 @@
...
@@ -51,10 +51,17 @@
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
"""\n
<value>
<string>
"""\n
Return list of shopping cart items.\n
Return list of shopping cart items as list representing order lines.\n
XXX : get order_line as tree not just on first level\n
\n
TODO:\n
- rename shopping_cart_order_lines to shopping_cart_order_line_list\n
- make this method compatible with cells and trees in orders. Orders\n
are not always flat. Consider large projects or matrices in B2B sales\n
of apparel. SaleOrder_getShoppingCartItemTree would be a better\n
name probably.\n
- make sure this script is not called more than once per page\n
"""\n
"""\n
shopping_cart_order_lines = context.SaleOrder_getShoppingCart().contentValues()\n
shopping_cart_order_lines = context.SaleOrder_getShoppingCart().contentValues(
portal_type="Sale Order Line"
)\n
if include_shipping:\n
if include_shipping:\n
return shopping_cart_order_lines\n
return shopping_cart_order_lines\n
else:\n
else:\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_getShoppingCartTotalPrice.xml
View file @
722c1b78
...
@@ -61,7 +61,6 @@
...
@@ -61,7 +61,6 @@
\n
\n
Script can optionally include currency.\n
Script can optionally include currency.\n
"""\n
"""\n
\n
web_site = context.getWebSiteValue()\n
web_site = context.getWebSiteValue()\n
total = 0.0\n
total = 0.0\n
shopping_cart_item_list = context.SaleOrder_getShoppingCartItemList(include_shipping)\n
shopping_cart_item_list = context.SaleOrder_getShoppingCartItemList(include_shipping)\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_isConsistent.xml
View file @
722c1b78
...
@@ -186,7 +186,15 @@
...
@@ -186,7 +186,15 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
if context.SaleOrder_isShippingRequired() and context.SaleOrder_getSelectedShippingResource() is None:\n
<value>
<string>
"""\n
This method does a kind of ad-hoc consistency check\n
on the shopping cart based on the presence of a shipping method.\n
\n
TODO:\n
- use checkConsistency / fixConsistency framework of ERP5\n
(and extend it if needed with constraint categories)\n
"""\n
if context.SaleOrder_isShippingRequired() and context.SaleOrder_getSelectedShippingResource() is None:\n
## shipping is required but not selected\n
## shipping is required but not selected\n
return False\n
return False\n
return True\n
return True\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_isShippingRequired.xml
View file @
722c1b78
...
@@ -189,7 +189,11 @@
...
@@ -189,7 +189,11 @@
<value>
<string
encoding=
"cdata"
>
<![CDATA[
<value>
<string
encoding=
"cdata"
>
<![CDATA[
\'\'\'\n
\'\'\'\n
If all product have no Weight, it don\'t need to be sheep. \n
If all product have no weight, then it does not need to be shipped.\n
\n
TODO:\n
- use ERP5 constrain framework checkConsistency/fixConsistency\n
in order to be perfectly generic\n
\'\'\'\n
\'\'\'\n
return False\n
return False\n
shopping_cart_items = context.SaleOrder_getShoppingCartItemList()\n
shopping_cart_items = context.SaleOrder_getShoppingCartItemList()\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_isShoppingCartEmpty.xml
View file @
722c1b78
...
@@ -50,7 +50,13 @@
...
@@ -50,7 +50,13 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
return len(context.SaleOrder_getShoppingCartItemList())==0\n
<value>
<string>
"""\n
Returns true if the shopping cart is empty\n
\n
TODO:\n
- make sure this script is not called more than once per page\n
"""\n
return len(context.SaleOrder_getShoppingCartItemList())==0\n
</string>
</value>
</string>
</value>
</item>
</item>
<item>
<item>
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/SaleOrder_setShoppingCartCustomer.xml
View file @
722c1b78
...
@@ -50,7 +50,9 @@
...
@@ -50,7 +50,9 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
"""Set connected user as shopping cart customer"""\n
<value>
<string>
"""\n
Set connected user as shopping cart customer\n
"""\n
shopping_cart = context.SaleOrder_getShoppingCart()\n
shopping_cart = context.SaleOrder_getShoppingCart()\n
member = context.ERP5Site_getAuthenticatedMemberPersonValue()\n
member = context.ERP5Site_getAuthenticatedMemberPersonValue()\n
shopping_cart.edit(destination_section_value=member)\n
shopping_cart.edit(destination_section_value=member)\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSection_checkPaypalIdentification.xml
View file @
722c1b78
...
@@ -65,7 +65,7 @@ if parameter_dict[\'PAYERID\'] != payer_id:\n
...
@@ -65,7 +65,7 @@ if parameter_dict[\'PAYERID\'] != payer_id:\n
\n
\n
#redirect user to the checkout section\n
#redirect user to the checkout section\n
website = context.getWebSiteValue() \n
website = context.getWebSiteValue() \n
section_url = website.getLayoutProperty(\'ecommerce_checkout_section_id\',
"checkout"
)\n
section_url = website.getLayoutProperty(\'ecommerce_checkout_section_id\',
\'checkout\'
)\n
website.Base_redirect(section_url, \\\n
website.Base_redirect(section_url, \\\n
keep_items={\'portal_status_message\':translateString("The payment procedure went well on Paypal."),\n
keep_items={\'portal_status_message\':translateString("The payment procedure went well on Paypal."),\n
\'token\':token})\n
\'token\':token})\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSection_doExpressCheckoutPayment.xml
View file @
722c1b78
...
@@ -50,7 +50,11 @@
...
@@ -50,7 +50,11 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
order_parameter_dict = context.WebSite_getPaypalOrderParameterDict()\n
<value>
<string>
"""\n
TODO:\n
- use generic paypal implementation of ERP5\n
"""\n
order_parameter_dict = context.WebSite_getPaypalOrderParameterDict()\n
if order_parameter_dict is None:\n
if order_parameter_dict is None:\n
return None\n
return None\n
order_parameter_dict[\'TOKEN\'] = token\n
order_parameter_dict[\'TOKEN\'] = token\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSection_doPaypalPayment.xml
View file @
722c1b78
...
@@ -50,7 +50,11 @@
...
@@ -50,7 +50,11 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
request = context.REQUEST\n
<value>
<string>
"""\n
TODO:\n
- use generic paypal implementation of ERP5\n
"""\n
request = context.REQUEST\n
isAnon = context.portal_membership.isAnonymousUser()\n
isAnon = context.portal_membership.isAnonymousUser()\n
translateString = context.Base_translateString\n
translateString = context.Base_translateString\n
\n
\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSection_getExpressCheckoutDetails.xml
View file @
722c1b78
...
@@ -50,7 +50,11 @@
...
@@ -50,7 +50,11 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
security_parameter_dict = context.WebSite_getPaypalSecurityParameterDict()\n
<value>
<string>
"""\n
TODO:\n
- use generic paypal implementation of ERP5\n
"""\n
security_parameter_dict = context.WebSite_getPaypalSecurityParameterDict()\n
if security_parameter_dict is None:\n
if security_parameter_dict is None:\n
return None\n
return None\n
security_parameter_dict[\'TOKEN\'] = token\n
security_parameter_dict[\'TOKEN\'] = token\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSection_getNewPaypalToken.xml
View file @
722c1b78
...
@@ -50,7 +50,11 @@
...
@@ -50,7 +50,11 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
response_parameter_dict = context.WebSection_submitPaypalNVPRequest(parameter_dict=context.WebSite_getPaypalOrderParameterDict(),\n
<value>
<string>
"""\n
TODO:\n
- use generic paypal implementation of ERP5\n
"""\n
response_parameter_dict = context.WebSection_submitPaypalNVPRequest(parameter_dict=context.WebSite_getPaypalOrderParameterDict(),\n
nvp_url=context.WebSite_getPaypalUrl(api=\'nvp\', alternative_url=alternative_url))\n
nvp_url=context.WebSite_getPaypalUrl(api=\'nvp\', alternative_url=alternative_url))\n
\n
\n
if response_parameter_dict is None:\n
if response_parameter_dict is None:\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSection_viewCurrentPersonAsWeb.xml
View file @
722c1b78
...
@@ -50,7 +50,16 @@
...
@@ -50,7 +50,16 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
context.REQUEST.set(\'editable_mode\', 1)\n
<value>
<string>
"""\n
Displays the current person information (ie. the one of the customer defined in the shopping cart).\n
\n
TODO:\n
- reimplement using Person_viewAsWeb and appropriate form_view_editable template\n
- it is probably not needed to use the shopping cart to know who is the customer\n
(unless we want one use to update information of another user)\n
- consider merging this with standard user preference settings of ERP5 web\n
"""\n
context.REQUEST.set(\'editable_mode\', 1)\n
person_object = context.getWebSiteValue().SaleOrder_getShoppingCartCustomer()\n
person_object = context.getWebSiteValue().SaleOrder_getShoppingCartCustomer()\n
return context.getWebSectionValue().restrictedTraverse(person_object.getRelativeUrl()).Person_viewAsWeb(context.REQUEST)\n
return context.getWebSectionValue().restrictedTraverse(person_object.getRelativeUrl()).Person_viewAsWeb(context.REQUEST)\n
</string>
</value>
</string>
</value>
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSite_getPaypalOrderParameterDict.xml
View file @
722c1b78
...
@@ -50,7 +50,11 @@
...
@@ -50,7 +50,11 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
order_parameter_dict = context.WebSite_getPaypalSecurityParameterDict()\n
<value>
<string>
"""\n
TODO:\n
- use generic paypal implementation of ERP5\n
"""\n
order_parameter_dict = context.WebSite_getPaypalSecurityParameterDict()\n
if order_parameter_dict is None:\n
if order_parameter_dict is None:\n
return None\n
return None\n
\n
\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSite_getPaypalSecurityParameterDict.xml
View file @
722c1b78
...
@@ -50,7 +50,11 @@
...
@@ -50,7 +50,11 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
if context.getLayoutProperty(\'ecommerce_test_environment_enabled\', False):\n
<value>
<string>
"""\n
TODO:\n
- use generic paypal implementation of ERP5\n
"""\n
if context.getLayoutProperty(\'ecommerce_test_environment_enabled\', False):\n
security_parameter_dict = {\'USER\':context.getLayoutProperty(\'ecommerce_paypal_sandbox_username\', None),\n
security_parameter_dict = {\'USER\':context.getLayoutProperty(\'ecommerce_paypal_sandbox_username\', None),\n
\'PWD\':context.getLayoutProperty(\'ecommerce_paypal_sandbox_password\', None),\n
\'PWD\':context.getLayoutProperty(\'ecommerce_paypal_sandbox_password\', None),\n
\'SIGNATURE\':context.getLayoutProperty(\'ecommerce_paypal_sandbox_signature\', None),\n
\'SIGNATURE\':context.getLayoutProperty(\'ecommerce_paypal_sandbox_signature\', None),\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSite_getPaypalUrl.xml
View file @
722c1b78
...
@@ -50,7 +50,11 @@
...
@@ -50,7 +50,11 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
if alternative_url is not None:\n
<value>
<string>
"""\n
TODO:\n
- use generic paypal implementation of ERP5\n
"""\n
if alternative_url is not None:\n
return alternative_url\n
return alternative_url\n
\n
\n
test_environement = context.getLayoutProperty(\'ecommerce_test_environment_enabled\', None)\n
test_environement = context.getLayoutProperty(\'ecommerce_test_environment_enabled\', None)\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSite_getShoppingCartCheckoutStep.xml
View file @
722c1b78
...
@@ -52,6 +52,12 @@
...
@@ -52,6 +52,12 @@
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
""" \n
<value>
<string>
""" \n
Return the current step for checkout procedure that will be displayed on Shopping Cart page.\n
Return the current step for checkout procedure that will be displayed on Shopping Cart page.\n
\n
TODO:\n
- findout where this is used\n
- make sure that this script is either used everywhere\n
(and centralized sales workflow) or nowhere (local approach,\n
spaguettish but more consistent)\n
"""\n
"""\n
web_site = context.getWebSiteValue()\n
web_site = context.getWebSiteValue()\n
shopping_cart = web_site.SaleOrder_getShoppingCart()\n
shopping_cart = web_site.SaleOrder_getShoppingCart()\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSite_getShoppingCartDefaultCurrency.xml
View file @
722c1b78
...
@@ -52,9 +52,14 @@
...
@@ -52,9 +52,14 @@
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
""" \n
<value>
<string>
""" \n
Return default currency used in Shopping Cart.\n
Return default currency used in Shopping Cart.\n
\n
TODO:\n
- remove hardcoding of currency_module/EUR \n
(ex. use system properties for example)\n
"""\n
"""\n
web_site = context.getWebSiteValue()\n
web_site = context.getWebSiteValue()\n
return context.getPortalObject().restrictedTraverse(web_site.getLayoutProperty(\'ecommerce_base_currency\', \'currency_module/EUR\'))\n
return context.getPortalObject().restrictedTraverse(\n
web_site.getLayoutProperty(\'ecommerce_base_currency\', \'currency_module/EUR\'))\n
</string>
</value>
</string>
</value>
</item>
</item>
<item>
<item>
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSite_getShoppingCartDefaultCurrencyCode.xml
View file @
722c1b78
...
@@ -52,6 +52,9 @@
...
@@ -52,6 +52,9 @@
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
""" \n
<value>
<string>
""" \n
Return reference of the default currency used in Shopping Cart.\n
Return reference of the default currency used in Shopping Cart.\n
\n
TODO:\n
- add pretty printing of currency (if it makes sense here)\n
"""\n
"""\n
website = context.getWebSiteValue()\n
website = context.getWebSiteValue()\n
if website:\n
if website:\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce/WebSite_getShoppingCartDefaultCurrencySymbol.xml
View file @
722c1b78
...
@@ -51,7 +51,11 @@
...
@@ -51,7 +51,11 @@
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
""" \n
<value>
<string>
""" \n
Return the sort title of the default currency used in Shopping Cart.\n
Return the short title of the default currency used in Shopping Cart.\n
\n
TODO:\n
- the currency symbol and code are used inconsistently\n
take a decision of which to use where and stick to it\n
"""\n
"""\n
return context.getWebSiteValue().WebSite_getShoppingCartDefaultCurrency().getShortTitle()\n
return context.getWebSiteValue().WebSite_getShoppingCartDefaultCurrency().getShortTitle()\n
</string>
</value>
</string>
</value>
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce_widget_library/Resource_getShopUrl.xml
View file @
722c1b78
...
@@ -50,7 +50,19 @@
...
@@ -50,7 +50,19 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
return \'%s/%s\' % (context.getAbsoluteUrl(), \'Resource_viewAsShop\')\n
<value>
<string>
"""\n
Return a URL for the product to display. If a default display\n
varition was defined by side effect, take it into account.\n
\n
TODO:\n
- make generic implementation of variation selection\n
"""\n
\n
variation = context.REQUEST.get(\'default_displayed_variation\', None)\n
if not variation:\n
return \'%s/%s\' % (context.getAbsoluteUrl(), \'Resource_viewAsShop\')\n
\n
return \'%s/%s?variation=%s\' % (context.getAbsoluteUrl(), \'Resource_viewAsShop\', variation)\n
</string>
</value>
</string>
</value>
</item>
</item>
<item>
<item>
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce_widget_library/SaleOrder_getResourceUrl.xml
View file @
722c1b78
...
@@ -50,7 +50,14 @@
...
@@ -50,7 +50,14 @@
</item>
</item>
<item>
<item>
<key>
<string>
_body
</string>
</key>
<key>
<string>
_body
</string>
</key>
<value>
<string>
web_site = context.getWebSiteValue()\n
<value>
<string>
"""\n
TODO:\n
- it should be possible to have more than one root\n
product lines. In such case, using a predicate would\n
be way easier.... simply by checking if the root\n
predicate(s) apply\n
"""\n
web_site = context.getWebSiteValue()\n
resource = context.getResourceValue()\n
resource = context.getResourceValue()\n
web_site_product_line = web_site.getLayoutProperty(\'ecommerce_base_product_line\')\n
web_site_product_line = web_site.getLayoutProperty(\'ecommerce_base_product_line\')\n
portal_categories = context.getPortalObject().portal_categories\n
portal_categories = context.getPortalObject().portal_categories\n
...
...
bt5/erp5_commerce/SkinTemplateItem/portal_skins/erp5_commerce_widget_library/SaleOrder_viewAsWebConfirmCreditCardPayment/submit.xml
View file @
722c1b78
...
@@ -142,10 +142,7 @@
...
@@ -142,10 +142,7 @@
</record>
</record>
<record
id=
"2"
aka=
"AAAAAAAAAAI="
>
<record
id=
"2"
aka=
"AAAAAAAAAAI="
>
<pickle>
<pickle>
<tuple>
<global
name=
"TALESMethod"
module=
"Products.Formulator.TALESField"
/>
<global
name=
"TALESMethod"
module=
"Products.Formulator.TALESField"
/>
<tuple/>
</tuple>
</pickle>
</pickle>
<pickle>
<pickle>
<dictionary>
<dictionary>
...
@@ -158,10 +155,7 @@
...
@@ -158,10 +155,7 @@
</record>
</record>
<record
id=
"3"
aka=
"AAAAAAAAAAM="
>
<record
id=
"3"
aka=
"AAAAAAAAAAM="
>
<pickle>
<pickle>
<tuple>
<global
name=
"TALESMethod"
module=
"Products.Formulator.TALESField"
/>
<global
name=
"TALESMethod"
module=
"Products.Formulator.TALESField"
/>
<tuple/>
</tuple>
</pickle>
</pickle>
<pickle>
<pickle>
<dictionary>
<dictionary>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment